ftpiiu_plugin/source/switch/imgui_nx.cpp
2020-04-28 10:25:54 -05:00

1521 lines
81 KiB
C++

// ftpd is a server implementation based on the following:
// - RFC 959 (https://tools.ietf.org/html/rfc959)
// - RFC 3659 (https://tools.ietf.org/html/rfc3659)
// - suggested implementation details from https://cr.yp.to/ftp/filesystem.html
//
// Copyright (C) 2020 Michael Theall
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
#ifndef CLASSIC
#include "imgui_nx.h"
#include "imgui.h"
#include "fs.h"
#include "platform.h"
#include <chrono>
#include <cstring>
#include <functional>
#include <string>
#include <tuple>
using namespace std::chrono_literals;
namespace
{
/// \brief Last mouse update timestamp
std::chrono::steady_clock::time_point s_lastMouseUpdate;
/// \brief Whether application is focused
bool s_focused = true;
/// \brief Framebuffer width
float s_width = 1280.0f;
/// \brief Framebuffer height
float s_height = 720.0f;
/// \brief Whether to show mouse
float s_showMouse = false;
/// \brief Mouse position
ImVec2 s_mousePos = ImVec2 (0.0f, 0.0f);
/// \brief Clipboard
std::string s_clipboard;
/// \brief Applet hook cookie
AppletHookCookie s_appletHookCookie;
/// \brief System font glyph ranges
ImWchar const nxFontRanges[] = {
// clang-format off
0x0020, 0x007e, 0x00a0, 0x017f, 0x0192, 0x0192, 0x01c0, 0x01c0,
0x01c5, 0x01c6, 0x01ce, 0x01ce, 0x01d0, 0x01d0, 0x01d2, 0x01d2,
0x01d4, 0x01d4, 0x01d6, 0x01d6, 0x01d8, 0x01d8, 0x01da, 0x01da,
0x01dc, 0x01dc, 0x01f2, 0x01f3, 0x01f9, 0x01ff, 0x0218, 0x021b,
0x0251, 0x0251, 0x0261, 0x0261, 0x02bc, 0x02bd, 0x02c6, 0x02c7,
0x02c9, 0x02cb, 0x02cd, 0x02cd, 0x02d8, 0x02dd, 0x0300, 0x0308,
0x030a, 0x030c, 0x0326, 0x0328, 0x0332, 0x0332, 0x0335, 0x0337,
0x0361, 0x0361, 0x0363, 0x0364, 0x0366, 0x0366, 0x036c, 0x036c,
0x037a, 0x037a, 0x037e, 0x037e, 0x0384, 0x038a, 0x038c, 0x038c,
0x038e, 0x03a1, 0x03a3, 0x03ce, 0x0400, 0x045f, 0x0490, 0x0491,
0x1e02, 0x1e03, 0x1e0a, 0x1e0b, 0x1e1e, 0x1e1f, 0x1e3f, 0x1e41,
0x1e56, 0x1e57, 0x1e60, 0x1e61, 0x1e6a, 0x1e6b, 0x1e80, 0x1e85,
0x1e9e, 0x1e9e, 0x1ef2, 0x1ef3, 0x2010, 0x201e, 0x2020, 0x2022,
0x2024, 0x2027, 0x2030, 0x2030, 0x2032, 0x2033, 0x2039, 0x203c,
0x203e, 0x203e, 0x2044, 0x2044, 0x2060, 0x2060, 0x2074, 0x2074,
0x207f, 0x207f, 0x2081, 0x2084, 0x20a3, 0x20a4, 0x20a7, 0x20a7,
0x20a9, 0x20a9, 0x20ac, 0x20ac, 0x20af, 0x20af, 0x20bd, 0x20bd,
0x20dd, 0x20dd, 0x2103, 0x2103, 0x2105, 0x2105, 0x2109, 0x210a,
0x2113, 0x2113, 0x2116, 0x2116, 0x2121, 0x2122, 0x2126, 0x2126,
0x212b, 0x212b, 0x212e, 0x212e, 0x215b, 0x215e, 0x2160, 0x216b,
0x2170, 0x217b, 0x217f, 0x217f, 0x2190, 0x2195, 0x21a8, 0x21a8,
0x21c4, 0x21c6, 0x21d2, 0x21d2, 0x21d4, 0x21d4, 0x2200, 0x2200,
0x2202, 0x2203, 0x2206, 0x2208, 0x220b, 0x220b, 0x220f, 0x220f,
0x2211, 0x2212, 0x2215, 0x2215, 0x2219, 0x221a, 0x221d, 0x2220,
0x2225, 0x2225, 0x2227, 0x222c, 0x222e, 0x222e, 0x2234, 0x2235,
0x223d, 0x223d, 0x2248, 0x2248, 0x2252, 0x2252, 0x2260, 0x2261,
0x2264, 0x2267, 0x226a, 0x226b, 0x2282, 0x2283, 0x2286, 0x2287,
0x22a5, 0x22a5, 0x22bf, 0x22bf, 0x22ee, 0x22ef, 0x2302, 0x2302,
0x2310, 0x2310, 0x2312, 0x2312, 0x2320, 0x2321, 0x2460, 0x2487,
0x249c, 0x24b5, 0x24ea, 0x24f4, 0x2500, 0x2503, 0x250c, 0x250c,
0x250f, 0x2510, 0x2513, 0x2514, 0x2517, 0x2518, 0x251b, 0x251d,
0x2520, 0x2520, 0x2523, 0x2525, 0x2528, 0x2528, 0x252b, 0x252c,
0x252f, 0x2530, 0x2533, 0x2534, 0x2537, 0x2538, 0x253b, 0x253c,
0x253f, 0x253f, 0x2542, 0x2542, 0x254b, 0x254b, 0x2550, 0x256c,
0x2573, 0x2573, 0x2580, 0x2580, 0x2584, 0x2584, 0x2588, 0x2588,
0x258c, 0x258c, 0x2590, 0x2593, 0x25a0, 0x25a1, 0x25aa, 0x25ac,
0x25b2, 0x25b3, 0x25b6, 0x25b7, 0x25ba, 0x25ba, 0x25bc, 0x25bd,
0x25c0, 0x25c1, 0x25c4, 0x25c4, 0x25c6, 0x25c7, 0x25ca, 0x25cb,
0x25ce, 0x25cf, 0x25d8, 0x25d9, 0x25e6, 0x25e6, 0x25ef, 0x25ef,
0x2600, 0x2603, 0x2605, 0x2606, 0x260e, 0x260e, 0x261c, 0x261f,
0x263a, 0x263c, 0x2640, 0x2640, 0x2642, 0x2642, 0x2660, 0x2667,
0x266a, 0x266b, 0x266d, 0x266d, 0x266f, 0x266f, 0x2776, 0x277f,
0x3000, 0x3015, 0x301c, 0x301d, 0x301f, 0x301f, 0x3041, 0x3094,
0x309b, 0x309e, 0x30a1, 0x30f6, 0x30fb, 0x30fe, 0x322a, 0x3243,
0x32a4, 0x32a8, 0x3303, 0x3303, 0x330d, 0x330d, 0x3314, 0x3314,
0x3318, 0x3318, 0x3322, 0x3323, 0x3326, 0x3327, 0x332b, 0x332b,
0x3336, 0x3336, 0x333b, 0x333b, 0x3349, 0x334a, 0x334d, 0x334d,
0x3351, 0x3351, 0x3357, 0x3357, 0x337b, 0x337f, 0x3385, 0x3389,
0x338e, 0x3390, 0x3396, 0x3398, 0x339c, 0x33a6, 0x33b0, 0x33b3,
0x33c4, 0x33c4, 0x33c8, 0x33c8, 0x33cb, 0x33cd, 0x33d4, 0x33d4,
0x4e00, 0x4e01, 0x4e03, 0x4e03, 0x4e07, 0x4e0b, 0x4e0d, 0x4e0e,
0x4e10, 0x4e11, 0x4e14, 0x4e19, 0x4e1e, 0x4e1e, 0x4e21, 0x4e21,
0x4e26, 0x4e26, 0x4e28, 0x4e28, 0x4e2a, 0x4e2a, 0x4e2d, 0x4e2d,
0x4e31, 0x4e32, 0x4e36, 0x4e36, 0x4e38, 0x4e39, 0x4e3b, 0x4e3c,
0x4e3f, 0x4e3f, 0x4e42, 0x4e43, 0x4e45, 0x4e45, 0x4e4b, 0x4e4b,
0x4e4d, 0x4e4f, 0x4e55, 0x4e59, 0x4e5d, 0x4e5f, 0x4e62, 0x4e62,
0x4e71, 0x4e71, 0x4e73, 0x4e73, 0x4e7e, 0x4e7e, 0x4e80, 0x4e80,
0x4e82, 0x4e82, 0x4e85, 0x4e86, 0x4e88, 0x4e8c, 0x4e8e, 0x4e8e,
0x4e91, 0x4e92, 0x4e94, 0x4e95, 0x4e98, 0x4e99, 0x4e9b, 0x4e9c,
0x4e9e, 0x4ea2, 0x4ea4, 0x4ea6, 0x4ea8, 0x4ea8, 0x4eab, 0x4eae,
0x4eb0, 0x4eb0, 0x4eb3, 0x4eb3, 0x4eb6, 0x4eb6, 0x4eba, 0x4eba,
0x4ec0, 0x4ec2, 0x4ec4, 0x4ec4, 0x4ec6, 0x4ec7, 0x4eca, 0x4ecb,
0x4ecd, 0x4ecf, 0x4ed4, 0x4ed9, 0x4edd, 0x4edf, 0x4ee1, 0x4ee1,
0x4ee3, 0x4ee5, 0x4eed, 0x4eee, 0x4ef0, 0x4ef0, 0x4ef2, 0x4ef2,
0x4ef6, 0x4ef7, 0x4efb, 0x4efc, 0x4f00, 0x4f01, 0x4f03, 0x4f03,
0x4f09, 0x4f0a, 0x4f0d, 0x4f11, 0x4f1a, 0x4f1a, 0x4f1c, 0x4f1d,
0x4f2f, 0x4f30, 0x4f34, 0x4f34, 0x4f36, 0x4f36, 0x4f38, 0x4f3a,
0x4f3c, 0x4f3d, 0x4f43, 0x4f43, 0x4f46, 0x4f47, 0x4f4d, 0x4f51,
0x4f53, 0x4f53, 0x4f55, 0x4f57, 0x4f59, 0x4f5e, 0x4f69, 0x4f69,
0x4f6f, 0x4f70, 0x4f73, 0x4f73, 0x4f75, 0x4f76, 0x4f7b, 0x4f7c,
0x4f7f, 0x4f7f, 0x4f83, 0x4f83, 0x4f86, 0x4f86, 0x4f88, 0x4f88,
0x4f8a, 0x4f8b, 0x4f8d, 0x4f8d, 0x4f8f, 0x4f8f, 0x4f91, 0x4f92,
0x4f94, 0x4f94, 0x4f96, 0x4f96, 0x4f98, 0x4f98, 0x4f9a, 0x4f9b,
0x4f9d, 0x4f9d, 0x4fa0, 0x4fa1, 0x4fab, 0x4fab, 0x4fad, 0x4faf,
0x4fb5, 0x4fb6, 0x4fbf, 0x4fbf, 0x4fc2, 0x4fc4, 0x4fc9, 0x4fca,
0x4fcd, 0x4fce, 0x4fd0, 0x4fd1, 0x4fd4, 0x4fd4, 0x4fd7, 0x4fd8,
0x4fda, 0x4fdb, 0x4fdd, 0x4fdd, 0x4fdf, 0x4fdf, 0x4fe1, 0x4fe1,
0x4fe3, 0x4fe5, 0x4fee, 0x4fef, 0x4ff3, 0x4ff3, 0x4ff5, 0x4ff6,
0x4ff8, 0x4ff8, 0x4ffa, 0x4ffa, 0x4ffe, 0x4fff, 0x5005, 0x5006,
0x5009, 0x5009, 0x500b, 0x500b, 0x500d, 0x500d, 0x500f, 0x500f,
0x5011, 0x5012, 0x5014, 0x5014, 0x5016, 0x5016, 0x5019, 0x501a,
0x501e, 0x501f, 0x5021, 0x5026, 0x5028, 0x502d, 0x5036, 0x5036,
0x5039, 0x5039, 0x5040, 0x5040, 0x5042, 0x5043, 0x5046, 0x5049,
0x504f, 0x5050, 0x5055, 0x5056, 0x505a, 0x505a, 0x505c, 0x505c,
0x5065, 0x5065, 0x506c, 0x506c, 0x5070, 0x5070, 0x5072, 0x5072,
0x5074, 0x5076, 0x5078, 0x5078, 0x507d, 0x507d, 0x5080, 0x5080,
0x5085, 0x5085, 0x508d, 0x508d, 0x5091, 0x5091, 0x5094, 0x5094,
0x5098, 0x509a, 0x50ac, 0x50ad, 0x50b2, 0x50b5, 0x50b7, 0x50b7,
0x50be, 0x50be, 0x50c2, 0x50c2, 0x50c5, 0x50c5, 0x50c9, 0x50ca,
0x50cd, 0x50cd, 0x50cf, 0x50cf, 0x50d1, 0x50d1, 0x50d5, 0x50d6,
0x50d8, 0x50d8, 0x50da, 0x50da, 0x50de, 0x50de, 0x50e3, 0x50e3,
0x50e5, 0x50e5, 0x50e7, 0x50e7, 0x50ed, 0x50ee, 0x50f4, 0x50f5,
0x50f9, 0x50f9, 0x50fb, 0x50fb, 0x5100, 0x5102, 0x5104, 0x5104,
0x5109, 0x5109, 0x5112, 0x5112, 0x5114, 0x5116, 0x5118, 0x5118,
0x511a, 0x511a, 0x511f, 0x511f, 0x5121, 0x5121, 0x512a, 0x512a,
0x5132, 0x5132, 0x5137, 0x5137, 0x513a, 0x513c, 0x513f, 0x5141,
0x5143, 0x514e, 0x5150, 0x5150, 0x5152, 0x5152, 0x5154, 0x5154,
0x515a, 0x515a, 0x515c, 0x515c, 0x5162, 0x5162, 0x5164, 0x5165,
0x5168, 0x516e, 0x5171, 0x5171, 0x5175, 0x5178, 0x517c, 0x517c,
0x5180, 0x5180, 0x5182, 0x5182, 0x5185, 0x5186, 0x5189, 0x518a,
0x518c, 0x518d, 0x518f, 0x5193, 0x5195, 0x5197, 0x5199, 0x5199,
0x519d, 0x519d, 0x51a0, 0x51a0, 0x51a2, 0x51a2, 0x51a4, 0x51a6,
0x51a8, 0x51ac, 0x51b0, 0x51b7, 0x51bd, 0x51be, 0x51c4, 0x51c6,
0x51c9, 0x51c9, 0x51cb, 0x51cd, 0x51d6, 0x51d6, 0x51db, 0x51dd,
0x51e0, 0x51e1, 0x51e6, 0x51e7, 0x51e9, 0x51ea, 0x51ec, 0x51ed,
0x51f0, 0x51f1, 0x51f5, 0x51f6, 0x51f8, 0x51fa, 0x51fd, 0x51fe,
0x5200, 0x5200, 0x5203, 0x5204, 0x5206, 0x5208, 0x520a, 0x520b,
0x520e, 0x520e, 0x5211, 0x5211, 0x5214, 0x5215, 0x5217, 0x5217,
0x521d, 0x521d, 0x5224, 0x5225, 0x5227, 0x5227, 0x5229, 0x522a,
0x522e, 0x522e, 0x5230, 0x5230, 0x5233, 0x5233, 0x5236, 0x523b,
0x5243, 0x5244, 0x5247, 0x5247, 0x524a, 0x524d, 0x524f, 0x524f,
0x5254, 0x5254, 0x5256, 0x5256, 0x525b, 0x525b, 0x525e, 0x525e,
0x5263, 0x5265, 0x5269, 0x526a, 0x526f, 0x5275, 0x527d, 0x527d,
0x527f, 0x527f, 0x5283, 0x5283, 0x5287, 0x5289, 0x528d, 0x528d,
0x5291, 0x5292, 0x5294, 0x5294, 0x529b, 0x529c, 0x529f, 0x52a0,
0x52a3, 0x52a3, 0x52a6, 0x52a6, 0x52a9, 0x52ad, 0x52af, 0x52af,
0x52b1, 0x52b1, 0x52b4, 0x52b5, 0x52b9, 0x52b9, 0x52bc, 0x52bc,
0x52be, 0x52be, 0x52c0, 0x52c1, 0x52c3, 0x52c3, 0x52c5, 0x52c5,
0x52c7, 0x52c7, 0x52c9, 0x52c9, 0x52cd, 0x52cd, 0x52d2, 0x52d2,
0x52d5, 0x52d5, 0x52d7, 0x52d9, 0x52db, 0x52db, 0x52dd, 0x52e0,
0x52e2, 0x52e4, 0x52e6, 0x52e7, 0x52f2, 0x52f3, 0x52f5, 0x52f5,
0x52f8, 0x52fa, 0x52fe, 0x5302, 0x5305, 0x5308, 0x530d, 0x530d,
0x530f, 0x5310, 0x5315, 0x5317, 0x5319, 0x531a, 0x531d, 0x531d,
0x5320, 0x5321, 0x5323, 0x5324, 0x532a, 0x532a, 0x532f, 0x532f,
0x5331, 0x5331, 0x5333, 0x5333, 0x5338, 0x533b, 0x533f, 0x5341,
0x5343, 0x5343, 0x5345, 0x534a, 0x534d, 0x534d, 0x5351, 0x5354,
0x5357, 0x5358, 0x535a, 0x535a, 0x535c, 0x535c, 0x535e, 0x535e,
0x5360, 0x5360, 0x5366, 0x5366, 0x5369, 0x5369, 0x536e, 0x5375,
0x5377, 0x5378, 0x537b, 0x537b, 0x537f, 0x537f, 0x5382, 0x5382,
0x5384, 0x5384, 0x5393, 0x5393, 0x5396, 0x5396, 0x5398, 0x5398,
0x539a, 0x539a, 0x539f, 0x53a0, 0x53a5, 0x53a6, 0x53a8, 0x53a9,
0x53ad, 0x53ae, 0x53b0, 0x53b0, 0x53b2, 0x53b3, 0x53b6, 0x53b6,
0x53bb, 0x53bb, 0x53c2, 0x53c3, 0x53c8, 0x53ce, 0x53d4, 0x53d4,
0x53d6, 0x53d7, 0x53d9, 0x53d9, 0x53db, 0x53db, 0x53dd, 0x53dd,
0x53df, 0x53df, 0x53e1, 0x53e5, 0x53e8, 0x53f3, 0x53f6, 0x53f8,
0x53fa, 0x53fa, 0x5401, 0x5401, 0x5403, 0x5404, 0x5408, 0x5411,
0x541b, 0x541b, 0x541d, 0x541d, 0x541f, 0x5420, 0x5426, 0x5426,
0x5429, 0x5429, 0x542b, 0x542e, 0x5436, 0x5436, 0x5438, 0x5439,
0x543b, 0x543e, 0x5440, 0x5440, 0x5442, 0x5442, 0x5446, 0x5446,
0x5448, 0x544a, 0x544e, 0x544e, 0x5451, 0x5451, 0x545f, 0x545f,
0x5468, 0x5468, 0x546a, 0x546a, 0x5470, 0x5471, 0x5473, 0x5473,
0x5475, 0x5477, 0x547b, 0x547d, 0x5480, 0x5480, 0x5484, 0x5484,
0x5486, 0x5486, 0x548a, 0x548c, 0x548e, 0x5490, 0x5492, 0x5492,
0x549c, 0x549c, 0x54a2, 0x54a2, 0x54a4, 0x54a5, 0x54a8, 0x54a9,
0x54ab, 0x54ac, 0x54af, 0x54af, 0x54b2, 0x54b3, 0x54b8, 0x54b8,
0x54bc, 0x54be, 0x54c0, 0x54c2, 0x54c4, 0x54c4, 0x54c7, 0x54c9,
0x54d8, 0x54d8, 0x54e1, 0x54e2, 0x54e5, 0x54e6, 0x54e8, 0x54e9,
0x54ed, 0x54ee, 0x54f2, 0x54f2, 0x54fa, 0x54fa, 0x54fd, 0x54fd,
0x54ff, 0x54ff, 0x5504, 0x5504, 0x5506, 0x5507, 0x550f, 0x5510,
0x5514, 0x5514, 0x5516, 0x5516, 0x552e, 0x552f, 0x5531, 0x5531,
0x5533, 0x5533, 0x5538, 0x5539, 0x553e, 0x553e, 0x5540, 0x5540,
0x5544, 0x5546, 0x554c, 0x554c, 0x554f, 0x554f, 0x5553, 0x5553,
0x5556, 0x5557, 0x555c, 0x555d, 0x5563, 0x5563, 0x557b, 0x557c,
0x557e, 0x557e, 0x5580, 0x5580, 0x5583, 0x5584, 0x5586, 0x5587,
0x5589, 0x558b, 0x5598, 0x559a, 0x559c, 0x559f, 0x55a7, 0x55ac,
0x55ae, 0x55ae, 0x55b0, 0x55b0, 0x55b6, 0x55b6, 0x55c4, 0x55c5,
0x55c7, 0x55c7, 0x55d4, 0x55d4, 0x55da, 0x55da, 0x55dc, 0x55dc,
0x55df, 0x55df, 0x55e3, 0x55e4, 0x55f7, 0x55f7, 0x55f9, 0x55f9,
0x55fd, 0x55fe, 0x5606, 0x5606, 0x5609, 0x5609, 0x5614, 0x5614,
0x5616, 0x5618, 0x561b, 0x561b, 0x5629, 0x5629, 0x562f, 0x562f,
0x5631, 0x5632, 0x5634, 0x5634, 0x5636, 0x5636, 0x5638, 0x5638,
0x5642, 0x5642, 0x564c, 0x564c, 0x564e, 0x564e, 0x5650, 0x5650,
0x565b, 0x565b, 0x5664, 0x5664, 0x5668, 0x5668, 0x566a, 0x566c,
0x5674, 0x5674, 0x5678, 0x5678, 0x567a, 0x567a, 0x5680, 0x5680,
0x5686, 0x5687, 0x568a, 0x568a, 0x568f, 0x568f, 0x5694, 0x5694,
0x56a0, 0x56a0, 0x56a2, 0x56a2, 0x56a5, 0x56a5, 0x56ae, 0x56ae,
0x56b4, 0x56b4, 0x56b6, 0x56b6, 0x56bc, 0x56bc, 0x56c0, 0x56c3,
0x56c8, 0x56c8, 0x56ce, 0x56ce, 0x56d1, 0x56d1, 0x56d3, 0x56d3,
0x56d7, 0x56d8, 0x56da, 0x56db, 0x56de, 0x56de, 0x56e0, 0x56e0,
0x56e3, 0x56e3, 0x56ee, 0x56ee, 0x56f0, 0x56f0, 0x56f2, 0x56f3,
0x56f9, 0x56fa, 0x56fd, 0x56fd, 0x56ff, 0x5700, 0x5703, 0x5704,
0x5708, 0x5709, 0x570b, 0x570b, 0x570d, 0x570d, 0x570f, 0x570f,
0x5712, 0x5713, 0x5716, 0x5716, 0x5718, 0x5718, 0x571c, 0x571c,
0x571f, 0x571f, 0x5726, 0x5728, 0x572d, 0x572d, 0x5730, 0x5730,
0x5737, 0x5738, 0x573b, 0x573b, 0x5740, 0x5740, 0x5742, 0x5742,
0x5747, 0x5747, 0x574a, 0x574a, 0x574e, 0x5751, 0x5759, 0x5759,
0x5761, 0x5761, 0x5764, 0x5766, 0x5769, 0x576a, 0x577f, 0x577f,
0x5782, 0x5782, 0x5788, 0x5789, 0x578b, 0x578b, 0x5793, 0x5793,
0x57a0, 0x57a0, 0x57a2, 0x57a4, 0x57aa, 0x57aa, 0x57ac, 0x57ac,
0x57b0, 0x57b0, 0x57b3, 0x57b3, 0x57c0, 0x57c0, 0x57c3, 0x57c3,
0x57c6, 0x57c8, 0x57cb, 0x57cb, 0x57ce, 0x57ce, 0x57d2, 0x57d4,
0x57d6, 0x57d6, 0x57dc, 0x57dc, 0x57df, 0x57e0, 0x57e3, 0x57e3,
0x57f4, 0x57f4, 0x57f7, 0x57f7, 0x57f9, 0x57fa, 0x57fc, 0x57fc,
0x5800, 0x5800, 0x5802, 0x5802, 0x5805, 0x5806, 0x580a, 0x580b,
0x5815, 0x5815, 0x5819, 0x5819, 0x581d, 0x581d, 0x5821, 0x5821,
0x5824, 0x5824, 0x582a, 0x582a, 0x582f, 0x5831, 0x5834, 0x5835,
0x583a, 0x583a, 0x583d, 0x583d, 0x5840, 0x5841, 0x584a, 0x584b,
0x5851, 0x5852, 0x5854, 0x5854, 0x5857, 0x585a, 0x585e, 0x585e,
0x5862, 0x5862, 0x5869, 0x5869, 0x586b, 0x586b, 0x5870, 0x5870,
0x5872, 0x5872, 0x5875, 0x5875, 0x5879, 0x5879, 0x587e, 0x587e,
0x5883, 0x5883, 0x5885, 0x5885, 0x5893, 0x5893, 0x5897, 0x5897,
0x589c, 0x589c, 0x589e, 0x589f, 0x58a8, 0x58a8, 0x58ab, 0x58ab,
0x58ae, 0x58ae, 0x58b2, 0x58b3, 0x58b8, 0x58bb, 0x58be, 0x58be,
0x58c1, 0x58c1, 0x58c5, 0x58c5, 0x58c7, 0x58c7, 0x58ca, 0x58ca,
0x58cc, 0x58cc, 0x58d1, 0x58d1, 0x58d3, 0x58d3, 0x58d5, 0x58d5,
0x58d7, 0x58d9, 0x58dc, 0x58dc, 0x58de, 0x58df, 0x58e4, 0x58e5,
0x58eb, 0x58ec, 0x58ee, 0x58f2, 0x58f7, 0x58f7, 0x58f9, 0x58fd,
0x5902, 0x5902, 0x5909, 0x590b, 0x590f, 0x5910, 0x5915, 0x5916,
0x5918, 0x591c, 0x5922, 0x5922, 0x5925, 0x5925, 0x5927, 0x5927,
0x5929, 0x592e, 0x5931, 0x5932, 0x5937, 0x5938, 0x593e, 0x593e,
0x5944, 0x5944, 0x5947, 0x5949, 0x594e, 0x5951, 0x5953, 0x5955,
0x5957, 0x5958, 0x595a, 0x595b, 0x595d, 0x595d, 0x5960, 0x5960,
0x5962, 0x5963, 0x5965, 0x5965, 0x5967, 0x596a, 0x596c, 0x596c,
0x596e, 0x596e, 0x5973, 0x5974, 0x5978, 0x5978, 0x597d, 0x597d,
0x5981, 0x5984, 0x598a, 0x598a, 0x598d, 0x598d, 0x5993, 0x5993,
0x5996, 0x5996, 0x5999, 0x5999, 0x599b, 0x599b, 0x599d, 0x599d,
0x59a3, 0x59a5, 0x59a8, 0x59a8, 0x59ac, 0x59ac, 0x59b2, 0x59b2,
0x59b9, 0x59bb, 0x59be, 0x59be, 0x59c6, 0x59c6, 0x59c9, 0x59c9,
0x59cb, 0x59cb, 0x59d0, 0x59d1, 0x59d3, 0x59d4, 0x59d9, 0x59da,
0x59dc, 0x59dc, 0x59e5, 0x59e6, 0x59e8, 0x59e8, 0x59ea, 0x59eb,
0x59f6, 0x59f6, 0x59fb, 0x59fb, 0x59ff, 0x59ff, 0x5a01, 0x5a01,
0x5a03, 0x5a03, 0x5a09, 0x5a09, 0x5a11, 0x5a11, 0x5a18, 0x5a18,
0x5a1a, 0x5a1a, 0x5a1c, 0x5a1c, 0x5a1f, 0x5a20, 0x5a25, 0x5a25,
0x5a29, 0x5a29, 0x5a2f, 0x5a2f, 0x5a35, 0x5a36, 0x5a3c, 0x5a3c,
0x5a40, 0x5a41, 0x5a46, 0x5a46, 0x5a49, 0x5a49, 0x5a5a, 0x5a5a,
0x5a62, 0x5a62, 0x5a66, 0x5a66, 0x5a6a, 0x5a6a, 0x5a6c, 0x5a6c,
0x5a7f, 0x5a7f, 0x5a92, 0x5a92, 0x5a9a, 0x5a9b, 0x5abc, 0x5abe,
0x5ac1, 0x5ac2, 0x5ac9, 0x5ac9, 0x5acb, 0x5acc, 0x5ad0, 0x5ad0,
0x5ad6, 0x5ad7, 0x5ae1, 0x5ae1, 0x5ae3, 0x5ae3, 0x5ae6, 0x5ae6,
0x5ae9, 0x5ae9, 0x5afa, 0x5afb, 0x5b09, 0x5b09, 0x5b0b, 0x5b0c,
0x5b16, 0x5b16, 0x5b22, 0x5b22, 0x5b2a, 0x5b2a, 0x5b2c, 0x5b2c,
0x5b30, 0x5b30, 0x5b32, 0x5b32, 0x5b36, 0x5b36, 0x5b3e, 0x5b3e,
0x5b40, 0x5b40, 0x5b43, 0x5b43, 0x5b45, 0x5b45, 0x5b50, 0x5b51,
0x5b54, 0x5b58, 0x5b5a, 0x5b5d, 0x5b5f, 0x5b5f, 0x5b63, 0x5b66,
0x5b69, 0x5b69, 0x5b6b, 0x5b6b, 0x5b70, 0x5b71, 0x5b73, 0x5b73,
0x5b75, 0x5b75, 0x5b78, 0x5b78, 0x5b7a, 0x5b7a, 0x5b80, 0x5b80,
0x5b83, 0x5b83, 0x5b85, 0x5b85, 0x5b87, 0x5b89, 0x5b8b, 0x5b8d,
0x5b8f, 0x5b8f, 0x5b95, 0x5b95, 0x5b97, 0x5b9d, 0x5b9f, 0x5b9f,
0x5ba2, 0x5ba6, 0x5bae, 0x5bae, 0x5bb0, 0x5bb0, 0x5bb3, 0x5bb6,
0x5bb8, 0x5bb9, 0x5bbf, 0x5bc0, 0x5bc2, 0x5bc7, 0x5bc9, 0x5bc9,
0x5bcc, 0x5bcc, 0x5bd0, 0x5bd0, 0x5bd2, 0x5bd4, 0x5bd8, 0x5bd8,
0x5bdb, 0x5bdb, 0x5bdd, 0x5bdf, 0x5be1, 0x5be2, 0x5be4, 0x5be9,
0x5beb, 0x5bec, 0x5bee, 0x5bee, 0x5bf0, 0x5bf0, 0x5bf3, 0x5bf3,
0x5bf5, 0x5bf6, 0x5bf8, 0x5bf8, 0x5bfa, 0x5bfa, 0x5bfe, 0x5bff,
0x5c01, 0x5c02, 0x5c04, 0x5c0b, 0x5c0d, 0x5c0f, 0x5c11, 0x5c11,
0x5c13, 0x5c13, 0x5c16, 0x5c16, 0x5c1a, 0x5c1a, 0x5c1e, 0x5c1e,
0x5c20, 0x5c20, 0x5c22, 0x5c22, 0x5c24, 0x5c24, 0x5c28, 0x5c28,
0x5c2d, 0x5c2d, 0x5c31, 0x5c31, 0x5c38, 0x5c41, 0x5c45, 0x5c46,
0x5c48, 0x5c48, 0x5c4a, 0x5c4b, 0x5c4d, 0x5c51, 0x5c53, 0x5c53,
0x5c55, 0x5c55, 0x5c5e, 0x5c5e, 0x5c60, 0x5c61, 0x5c64, 0x5c65,
0x5c6c, 0x5c6c, 0x5c6e, 0x5c6f, 0x5c71, 0x5c71, 0x5c76, 0x5c76,
0x5c79, 0x5c79, 0x5c8c, 0x5c8c, 0x5c90, 0x5c91, 0x5c94, 0x5c94,
0x5ca1, 0x5ca1, 0x5ca6, 0x5ca6, 0x5ca8, 0x5ca9, 0x5cab, 0x5cac,
0x5cb1, 0x5cb1, 0x5cb3, 0x5cb3, 0x5cb6, 0x5cb8, 0x5cba, 0x5cbc,
0x5cbe, 0x5cbe, 0x5cc5, 0x5cc5, 0x5cc7, 0x5cc7, 0x5cd9, 0x5cd9,
0x5ce0, 0x5ce1, 0x5ce8, 0x5cea, 0x5ced, 0x5ced, 0x5cef, 0x5cf0,
0x5cf5, 0x5cf6, 0x5cfa, 0x5cfb, 0x5cfd, 0x5cfd, 0x5d07, 0x5d07,
0x5d0b, 0x5d0b, 0x5d0e, 0x5d0e, 0x5d11, 0x5d11, 0x5d14, 0x5d1b,
0x5d1f, 0x5d1f, 0x5d22, 0x5d22, 0x5d27, 0x5d27, 0x5d29, 0x5d29,
0x5d42, 0x5d42, 0x5d4b, 0x5d4c, 0x5d4e, 0x5d4e, 0x5d50, 0x5d50,
0x5d52, 0x5d53, 0x5d5c, 0x5d5c, 0x5d69, 0x5d69, 0x5d6c, 0x5d6d,
0x5d6f, 0x5d6f, 0x5d73, 0x5d73, 0x5d76, 0x5d76, 0x5d82, 0x5d82,
0x5d84, 0x5d84, 0x5d87, 0x5d87, 0x5d8b, 0x5d8c, 0x5d90, 0x5d90,
0x5d9d, 0x5d9d, 0x5da2, 0x5da2, 0x5dac, 0x5dac, 0x5dae, 0x5dae,
0x5db7, 0x5dba, 0x5dbc, 0x5dbd, 0x5dc9, 0x5dc9, 0x5dcc, 0x5dcd,
0x5dd0, 0x5dd0, 0x5dd2, 0x5dd3, 0x5dd6, 0x5dd6, 0x5ddb, 0x5ddb,
0x5ddd, 0x5dde, 0x5de1, 0x5de1, 0x5de3, 0x5de3, 0x5de5, 0x5de8,
0x5deb, 0x5deb, 0x5dee, 0x5dee, 0x5df1, 0x5df5, 0x5df7, 0x5df7,
0x5dfb, 0x5dfb, 0x5dfd, 0x5dfe, 0x5e02, 0x5e03, 0x5e06, 0x5e06,
0x5e0b, 0x5e0c, 0x5e11, 0x5e11, 0x5e16, 0x5e16, 0x5e19, 0x5e1b,
0x5e1d, 0x5e1d, 0x5e25, 0x5e25, 0x5e2b, 0x5e2b, 0x5e2d, 0x5e2d,
0x5e2f, 0x5e30, 0x5e33, 0x5e33, 0x5e36, 0x5e38, 0x5e3d, 0x5e3d,
0x5e40, 0x5e40, 0x5e43, 0x5e45, 0x5e47, 0x5e47, 0x5e4c, 0x5e4c,
0x5e4e, 0x5e4e, 0x5e54, 0x5e55, 0x5e57, 0x5e57, 0x5e5f, 0x5e5f,
0x5e61, 0x5e64, 0x5e72, 0x5e76, 0x5e78, 0x5e7f, 0x5e81, 0x5e81,
0x5e83, 0x5e84, 0x5e87, 0x5e87, 0x5e8a, 0x5e8a, 0x5e8f, 0x5e8f,
0x5e95, 0x5e97, 0x5e9a, 0x5e9a, 0x5e9c, 0x5e9c, 0x5ea0, 0x5ea0,
0x5ea6, 0x5ea7, 0x5eab, 0x5eab, 0x5ead, 0x5ead, 0x5eb5, 0x5eb8,
0x5ec1, 0x5ec3, 0x5ec8, 0x5eca, 0x5ecf, 0x5ed0, 0x5ed3, 0x5ed3,
0x5ed6, 0x5ed6, 0x5eda, 0x5edb, 0x5edd, 0x5edd, 0x5edf, 0x5ee3,
0x5ee8, 0x5ee9, 0x5eec, 0x5eec, 0x5ef0, 0x5ef1, 0x5ef3, 0x5ef4,
0x5ef6, 0x5ef8, 0x5efa, 0x5efc, 0x5efe, 0x5eff, 0x5f01, 0x5f01,
0x5f03, 0x5f04, 0x5f09, 0x5f0d, 0x5f0f, 0x5f11, 0x5f13, 0x5f18,
0x5f1b, 0x5f1b, 0x5f1f, 0x5f1f, 0x5f21, 0x5f21, 0x5f25, 0x5f27,
0x5f29, 0x5f29, 0x5f2d, 0x5f2d, 0x5f2f, 0x5f2f, 0x5f31, 0x5f31,
0x5f34, 0x5f35, 0x5f37, 0x5f38, 0x5f3c, 0x5f3c, 0x5f3e, 0x5f3e,
0x5f41, 0x5f41, 0x5f45, 0x5f45, 0x5f48, 0x5f48, 0x5f4a, 0x5f4a,
0x5f4c, 0x5f4c, 0x5f4e, 0x5f4e, 0x5f51, 0x5f51, 0x5f53, 0x5f53,
0x5f56, 0x5f57, 0x5f59, 0x5f59, 0x5f5c, 0x5f5d, 0x5f61, 0x5f62,
0x5f66, 0x5f67, 0x5f69, 0x5f6d, 0x5f70, 0x5f71, 0x5f73, 0x5f73,
0x5f77, 0x5f77, 0x5f79, 0x5f79, 0x5f7c, 0x5f7c, 0x5f7f, 0x5f85,
0x5f87, 0x5f88, 0x5f8a, 0x5f8c, 0x5f90, 0x5f93, 0x5f97, 0x5f99,
0x5f9e, 0x5f9e, 0x5fa0, 0x5fa1, 0x5fa8, 0x5faa, 0x5fad, 0x5fae,
0x5fb3, 0x5fb4, 0x5fb7, 0x5fb7, 0x5fb9, 0x5fb9, 0x5fbc, 0x5fbd,
0x5fc3, 0x5fc3, 0x5fc5, 0x5fc5, 0x5fcc, 0x5fcd, 0x5fd6, 0x5fd9,
0x5fdc, 0x5fde, 0x5fe0, 0x5fe0, 0x5fe4, 0x5fe4, 0x5feb, 0x5feb,
0x5ff0, 0x5ff1, 0x5ff5, 0x5ff5, 0x5ff8, 0x5ff8, 0x5ffb, 0x5ffb,
0x5ffd, 0x5ffd, 0x5fff, 0x5fff, 0x600e, 0x6010, 0x6012, 0x6012,
0x6015, 0x6016, 0x6019, 0x6019, 0x601b, 0x601d, 0x6020, 0x6021,
0x6025, 0x602b, 0x602f, 0x602f, 0x6031, 0x6031, 0x603a, 0x603a,
0x6041, 0x6043, 0x6046, 0x6046, 0x604a, 0x604b, 0x604d, 0x604d,
0x6050, 0x6050, 0x6052, 0x6052, 0x6055, 0x6055, 0x6059, 0x605a,
0x605d, 0x605d, 0x605f, 0x6060, 0x6062, 0x6065, 0x6068, 0x606d,
0x606f, 0x6070, 0x6075, 0x6075, 0x6077, 0x6077, 0x6081, 0x6081,
0x6083, 0x6085, 0x6089, 0x608d, 0x6092, 0x6092, 0x6094, 0x6094,
0x6096, 0x6097, 0x609a, 0x609b, 0x609f, 0x60a0, 0x60a3, 0x60a3,
0x60a6, 0x60a7, 0x60a9, 0x60aa, 0x60b2, 0x60b6, 0x60b8, 0x60b8,
0x60bc, 0x60bd, 0x60c5, 0x60c7, 0x60d1, 0x60d1, 0x60d3, 0x60d3,
0x60d5, 0x60d5, 0x60d8, 0x60d8, 0x60da, 0x60da, 0x60dc, 0x60dc,
0x60de, 0x60e1, 0x60e3, 0x60e3, 0x60e7, 0x60e8, 0x60f0, 0x60f4,
0x60f6, 0x60f7, 0x60f9, 0x60fb, 0x6100, 0x6101, 0x6103, 0x6103,
0x6106, 0x6106, 0x6108, 0x6109, 0x610d, 0x610f, 0x6111, 0x6111,
0x6115, 0x6115, 0x611a, 0x611b, 0x611f, 0x6121, 0x6127, 0x6128,
0x612c, 0x612c, 0x6130, 0x6130, 0x6134, 0x6134, 0x6137, 0x6137,
0x613c, 0x613f, 0x6142, 0x6142, 0x6144, 0x6144, 0x6147, 0x6148,
0x614a, 0x614e, 0x6153, 0x6153, 0x6155, 0x6155, 0x6158, 0x615a,
0x615d, 0x615d, 0x615f, 0x615f, 0x6162, 0x6163, 0x6165, 0x6165,
0x6167, 0x6168, 0x616b, 0x616b, 0x616e, 0x6171, 0x6173, 0x6177,
0x617e, 0x617e, 0x6182, 0x6182, 0x6187, 0x6187, 0x618a, 0x618a,
0x618e, 0x618e, 0x6190, 0x6191, 0x6194, 0x6194, 0x6196, 0x6196,
0x6198, 0x619a, 0x61a4, 0x61a4, 0x61a7, 0x61a7, 0x61a9, 0x61a9,
0x61ab, 0x61ac, 0x61ae, 0x61ae, 0x61b2, 0x61b2, 0x61b6, 0x61b6,
0x61ba, 0x61ba, 0x61be, 0x61be, 0x61c3, 0x61c3, 0x61c6, 0x61cd,
0x61d0, 0x61d0, 0x61e3, 0x61e3, 0x61e6, 0x61e6, 0x61f2, 0x61f2,
0x61f4, 0x61f4, 0x61f6, 0x61f8, 0x61fa, 0x61fa, 0x61fc, 0x6200,
0x6208, 0x620a, 0x620c, 0x620e, 0x6210, 0x6214, 0x6216, 0x6216,
0x621a, 0x621b, 0x621d, 0x621f, 0x6221, 0x6221, 0x6226, 0x6226,
0x622a, 0x622a, 0x622e, 0x6230, 0x6232, 0x6234, 0x6238, 0x6238,
0x623b, 0x623b, 0x623f, 0x6241, 0x6247, 0x6249, 0x624b, 0x624b,
0x624d, 0x624e, 0x6253, 0x6253, 0x6255, 0x6255, 0x6258, 0x6258,
0x625b, 0x625b, 0x625e, 0x625e, 0x6260, 0x6260, 0x6263, 0x6263,
0x6268, 0x6268, 0x626e, 0x626e, 0x6271, 0x6271, 0x6276, 0x6276,
0x6279, 0x6279, 0x627c, 0x627c, 0x627e, 0x6280, 0x6282, 0x6284,
0x6289, 0x628a, 0x6291, 0x6298, 0x629b, 0x629c, 0x629e, 0x629e,
0x62a6, 0x62a6, 0x62ab, 0x62ac, 0x62b1, 0x62b1, 0x62b5, 0x62b5,
0x62b9, 0x62b9, 0x62bb, 0x62bd, 0x62c2, 0x62c2, 0x62c5, 0x62ca,
0x62cc, 0x62cd, 0x62cf, 0x62d4, 0x62d7, 0x62d9, 0x62db, 0x62dd,
0x62e0, 0x62e1, 0x62ec, 0x62ef, 0x62f1, 0x62f1, 0x62f3, 0x62f3,
0x62f5, 0x62f7, 0x62fe, 0x62ff, 0x6301, 0x6302, 0x6307, 0x6309,
0x630c, 0x630c, 0x6311, 0x6311, 0x6319, 0x6319, 0x631f, 0x631f,
0x6327, 0x6328, 0x632b, 0x632b, 0x632f, 0x632f, 0x633a, 0x633a,
0x633d, 0x633f, 0x6349, 0x6349, 0x634c, 0x634d, 0x634f, 0x6350,
0x6355, 0x6355, 0x6357, 0x6357, 0x635c, 0x635c, 0x6367, 0x6369,
0x636b, 0x636b, 0x636e, 0x636e, 0x6372, 0x6372, 0x6376, 0x6377,
0x637a, 0x637b, 0x6380, 0x6380, 0x6383, 0x6383, 0x6388, 0x6389,
0x638c, 0x638c, 0x638e, 0x638f, 0x6392, 0x6392, 0x6396, 0x6396,
0x6398, 0x6398, 0x639b, 0x639b, 0x639f, 0x63a3, 0x63a5, 0x63a5,
0x63a7, 0x63ac, 0x63b2, 0x63b2, 0x63b4, 0x63b5, 0x63bb, 0x63bb,
0x63be, 0x63be, 0x63c0, 0x63c0, 0x63c3, 0x63c4, 0x63c6, 0x63c6,
0x63c9, 0x63c9, 0x63cf, 0x63d0, 0x63d2, 0x63d2, 0x63d6, 0x63d6,
0x63da, 0x63db, 0x63e1, 0x63e1, 0x63e3, 0x63e3, 0x63e9, 0x63e9,
0x63ee, 0x63ee, 0x63f4, 0x63f6, 0x63fa, 0x63fa, 0x6406, 0x6406,
0x640d, 0x640d, 0x640f, 0x640f, 0x6413, 0x6413, 0x6416, 0x6417,
0x641c, 0x641c, 0x6426, 0x6426, 0x6428, 0x6428, 0x642c, 0x642d,
0x6434, 0x6434, 0x6436, 0x6436, 0x643a, 0x643a, 0x643e, 0x643e,
0x6442, 0x6442, 0x644e, 0x644e, 0x6458, 0x6458, 0x6460, 0x6460,
0x6467, 0x6467, 0x6469, 0x6469, 0x646f, 0x646f, 0x6476, 0x6476,
0x6478, 0x6478, 0x647a, 0x647a, 0x6483, 0x6483, 0x6488, 0x6488,
0x6492, 0x6493, 0x6495, 0x6495, 0x649a, 0x649a, 0x649d, 0x649e,
0x64a4, 0x64a5, 0x64a9, 0x64a9, 0x64ab, 0x64ab, 0x64ad, 0x64ae,
0x64b0, 0x64b0, 0x64b2, 0x64b2, 0x64b9, 0x64b9, 0x64bb, 0x64bc,
0x64c1, 0x64c2, 0x64c5, 0x64c5, 0x64c7, 0x64c7, 0x64cd, 0x64ce,
0x64d2, 0x64d2, 0x64d4, 0x64d4, 0x64d8, 0x64d8, 0x64da, 0x64da,
0x64e0, 0x64e3, 0x64e6, 0x64e7, 0x64ec, 0x64ec, 0x64ef, 0x64ef,
0x64f1, 0x64f2, 0x64f4, 0x64f4, 0x64f6, 0x64f6, 0x64fa, 0x64fa,
0x64fd, 0x64fe, 0x6500, 0x6500, 0x6505, 0x6505, 0x6518, 0x6518,
0x651c, 0x651d, 0x6523, 0x6524, 0x652a, 0x652c, 0x652f, 0x652f,
0x6534, 0x6539, 0x653b, 0x653b, 0x653e, 0x653f, 0x6545, 0x6545,
0x6548, 0x6548, 0x654d, 0x654f, 0x6551, 0x6551, 0x6555, 0x6559,
0x655d, 0x655e, 0x6562, 0x6563, 0x6566, 0x6566, 0x656c, 0x656c,
0x6570, 0x6570, 0x6572, 0x6572, 0x6574, 0x6575, 0x6577, 0x6578,
0x6582, 0x6583, 0x6587, 0x6589, 0x658c, 0x658c, 0x658e, 0x658e,
0x6590, 0x6591, 0x6597, 0x6597, 0x6599, 0x6599, 0x659b, 0x659c,
0x659f, 0x659f, 0x65a1, 0x65a1, 0x65a4, 0x65a5, 0x65a7, 0x65a7,
0x65ab, 0x65ad, 0x65af, 0x65b0, 0x65b7, 0x65b7, 0x65b9, 0x65b9,
0x65bc, 0x65bd, 0x65c1, 0x65c1, 0x65c3, 0x65c6, 0x65cb, 0x65cc,
0x65cf, 0x65cf, 0x65d2, 0x65d2, 0x65d7, 0x65d7, 0x65d9, 0x65d9,
0x65db, 0x65db, 0x65e0, 0x65e2, 0x65e5, 0x65e9, 0x65ec, 0x65ed,
0x65f1, 0x65f1, 0x65fa, 0x65fb, 0x6600, 0x6600, 0x6602, 0x6603,
0x6606, 0x6607, 0x6609, 0x660a, 0x660c, 0x660c, 0x660e, 0x660f,
0x6613, 0x6615, 0x661c, 0x661c, 0x661e, 0x6620, 0x6624, 0x6625,
0x6627, 0x6628, 0x662d, 0x662f, 0x6631, 0x6631, 0x6634, 0x6636,
0x663b, 0x663c, 0x663f, 0x663f, 0x6641, 0x6644, 0x6649, 0x6649,
0x664b, 0x664b, 0x664f, 0x664f, 0x6652, 0x6652, 0x6657, 0x6657,
0x6659, 0x6659, 0x665d, 0x665f, 0x6662, 0x6662, 0x6664, 0x6669,
0x666e, 0x6670, 0x6673, 0x6674, 0x6676, 0x6676, 0x667a, 0x667a,
0x6681, 0x6681, 0x6683, 0x6684, 0x6687, 0x6689, 0x668e, 0x668e,
0x6691, 0x6691, 0x6696, 0x6699, 0x669d, 0x669d, 0x66a0, 0x66a0,
0x66a2, 0x66a2, 0x66a6, 0x66a6, 0x66ab, 0x66ab, 0x66ae, 0x66ae,
0x66b2, 0x66b2, 0x66b4, 0x66b4, 0x66b8, 0x66b9, 0x66bc, 0x66bc,
0x66be, 0x66bf, 0x66c1, 0x66c1, 0x66c4, 0x66c4, 0x66c7, 0x66c7,
0x66c9, 0x66c9, 0x66d6, 0x66d6, 0x66d9, 0x66da, 0x66dc, 0x66dd,
0x66e0, 0x66e0, 0x66e6, 0x66e6, 0x66e9, 0x66e9, 0x66f0, 0x66f0,
0x66f2, 0x66f5, 0x66f7, 0x6700, 0x6703, 0x6703, 0x6708, 0x6709,
0x670b, 0x670b, 0x670d, 0x670f, 0x6714, 0x6717, 0x671b, 0x671b,
0x671d, 0x671f, 0x6726, 0x6728, 0x672a, 0x672e, 0x6731, 0x6731,
0x6734, 0x6734, 0x6736, 0x6738, 0x673a, 0x673a, 0x673d, 0x673d,
0x673f, 0x673f, 0x6741, 0x6741, 0x6746, 0x6746, 0x6749, 0x6749,
0x674e, 0x6751, 0x6753, 0x6753, 0x6756, 0x6756, 0x6759, 0x6759,
0x675c, 0x675c, 0x675e, 0x6766, 0x676a, 0x676a, 0x676d, 0x676d,
0x676f, 0x6773, 0x6775, 0x6775, 0x6777, 0x6777, 0x677c, 0x677c,
0x677e, 0x677f, 0x6785, 0x6785, 0x6787, 0x6787, 0x6789, 0x6789,
0x678b, 0x678c, 0x6790, 0x6790, 0x6795, 0x6795, 0x6797, 0x6797,
0x679a, 0x679a, 0x679c, 0x679d, 0x67a0, 0x67a2, 0x67a6, 0x67a6,
0x67a9, 0x67a9, 0x67af, 0x67af, 0x67b3, 0x67b4, 0x67b6, 0x67b9,
0x67bb, 0x67bb, 0x67c0, 0x67c1, 0x67c4, 0x67c4, 0x67c6, 0x67c6,
0x67ca, 0x67ca, 0x67ce, 0x67d1, 0x67d3, 0x67d4, 0x67d8, 0x67d8,
0x67da, 0x67da, 0x67dd, 0x67de, 0x67e2, 0x67e2, 0x67e4, 0x67e4,
0x67e7, 0x67e7, 0x67e9, 0x67e9, 0x67ec, 0x67ec, 0x67ee, 0x67ef,
0x67f1, 0x67f1, 0x67f3, 0x67f5, 0x67fb, 0x67fb, 0x67fe, 0x67ff,
0x6801, 0x6804, 0x6813, 0x6813, 0x6816, 0x6817, 0x681e, 0x681e,
0x6821, 0x6822, 0x6829, 0x682b, 0x6832, 0x6832, 0x6834, 0x6834,
0x6838, 0x6839, 0x683c, 0x683d, 0x6840, 0x6844, 0x6846, 0x6846,
0x6848, 0x6848, 0x684d, 0x684e, 0x6850, 0x6854, 0x6859, 0x6859,
0x685c, 0x685d, 0x685f, 0x685f, 0x6863, 0x6863, 0x6867, 0x6867,
0x6874, 0x6874, 0x6876, 0x6877, 0x687e, 0x687f, 0x6881, 0x6881,
0x6883, 0x6883, 0x6885, 0x6885, 0x688d, 0x688d, 0x688f, 0x688f,
0x6893, 0x6894, 0x6897, 0x6897, 0x689b, 0x689b, 0x689d, 0x689d,
0x689f, 0x68a0, 0x68a2, 0x68a2, 0x68a6, 0x68a8, 0x68ad, 0x68ad,
0x68af, 0x68b1, 0x68b3, 0x68b3, 0x68b5, 0x68b6, 0x68b9, 0x68ba,
0x68bc, 0x68bc, 0x68c4, 0x68c4, 0x68c6, 0x68c6, 0x68c8, 0x68cb,
0x68cd, 0x68cd, 0x68cf, 0x68cf, 0x68d2, 0x68d2, 0x68d4, 0x68d5,
0x68d7, 0x68d8, 0x68da, 0x68da, 0x68df, 0x68e1, 0x68e3, 0x68e3,
0x68e7, 0x68e7, 0x68ee, 0x68ef, 0x68f2, 0x68f2, 0x68f9, 0x68fa,
0x6900, 0x6901, 0x6904, 0x6905, 0x6908, 0x6908, 0x690b, 0x690f,
0x6912, 0x6912, 0x6919, 0x691c, 0x6921, 0x6923, 0x6925, 0x6926,
0x6928, 0x6928, 0x692a, 0x692a, 0x6930, 0x6930, 0x6934, 0x6934,
0x6936, 0x6936, 0x6939, 0x6939, 0x693d, 0x693d, 0x693f, 0x693f,
0x694a, 0x694a, 0x6953, 0x6955, 0x6959, 0x695a, 0x695c, 0x695e,
0x6960, 0x6962, 0x6968, 0x6968, 0x696a, 0x696b, 0x696d, 0x696f,
0x6973, 0x6975, 0x6977, 0x6979, 0x697c, 0x697e, 0x6981, 0x6982,
0x698a, 0x698a, 0x698e, 0x698e, 0x6991, 0x6991, 0x6994, 0x6995,
0x6998, 0x6998, 0x699b, 0x699c, 0x69a0, 0x69a0, 0x69a7, 0x69a7,
0x69ae, 0x69ae, 0x69b1, 0x69b2, 0x69b4, 0x69b4, 0x69bb, 0x69bb,
0x69be, 0x69bf, 0x69c1, 0x69c1, 0x69c3, 0x69c3, 0x69c7, 0x69c7,
0x69ca, 0x69ce, 0x69d0, 0x69d0, 0x69d3, 0x69d3, 0x69d8, 0x69d9,
0x69dd, 0x69de, 0x69e2, 0x69e2, 0x69e7, 0x69e8, 0x69eb, 0x69eb,
0x69ed, 0x69ed, 0x69f2, 0x69f2, 0x69f9, 0x69f9, 0x69fb, 0x69fb,
0x69fd, 0x69fd, 0x69ff, 0x69ff, 0x6a02, 0x6a02, 0x6a05, 0x6a05,
0x6a0a, 0x6a0c, 0x6a12, 0x6a14, 0x6a17, 0x6a17, 0x6a19, 0x6a19,
0x6a1b, 0x6a1b, 0x6a1e, 0x6a1f, 0x6a21, 0x6a23, 0x6a29, 0x6a2b,
0x6a2e, 0x6a2e, 0x6a30, 0x6a30, 0x6a35, 0x6a36, 0x6a38, 0x6a3a,
0x6a3d, 0x6a3d, 0x6a44, 0x6a44, 0x6a46, 0x6a48, 0x6a4b, 0x6a4b,
0x6a58, 0x6a59, 0x6a5f, 0x6a5f, 0x6a61, 0x6a62, 0x6a66, 0x6a66,
0x6a6b, 0x6a6b, 0x6a72, 0x6a73, 0x6a78, 0x6a78, 0x6a7e, 0x6a80,
0x6a84, 0x6a84, 0x6a8d, 0x6a8e, 0x6a90, 0x6a90, 0x6a97, 0x6a97,
0x6a9c, 0x6a9c, 0x6aa0, 0x6aa0, 0x6aa2, 0x6aa3, 0x6aaa, 0x6aaa,
0x6aac, 0x6aac, 0x6aae, 0x6aae, 0x6ab3, 0x6ab3, 0x6ab8, 0x6ab8,
0x6abb, 0x6abb, 0x6ac1, 0x6ac3, 0x6ad1, 0x6ad1, 0x6ad3, 0x6ad3,
0x6ada, 0x6adb, 0x6ade, 0x6adf, 0x6ae2, 0x6ae2, 0x6ae4, 0x6ae4,
0x6ae8, 0x6ae8, 0x6aea, 0x6aea, 0x6afa, 0x6afb, 0x6b04, 0x6b05,
0x6b0a, 0x6b0a, 0x6b12, 0x6b12, 0x6b16, 0x6b16, 0x6b1d, 0x6b1d,
0x6b1f, 0x6b21, 0x6b23, 0x6b23, 0x6b27, 0x6b27, 0x6b32, 0x6b32,
0x6b37, 0x6b3a, 0x6b3d, 0x6b3e, 0x6b43, 0x6b43, 0x6b47, 0x6b47,
0x6b49, 0x6b49, 0x6b4c, 0x6b4c, 0x6b4e, 0x6b4e, 0x6b50, 0x6b50,
0x6b53, 0x6b54, 0x6b59, 0x6b59, 0x6b5b, 0x6b5b, 0x6b5f, 0x6b5f,
0x6b61, 0x6b64, 0x6b66, 0x6b66, 0x6b69, 0x6b6a, 0x6b6f, 0x6b6f,
0x6b73, 0x6b74, 0x6b78, 0x6b79, 0x6b7b, 0x6b7b, 0x6b7f, 0x6b80,
0x6b83, 0x6b84, 0x6b86, 0x6b86, 0x6b89, 0x6b8b, 0x6b8d, 0x6b8d,
0x6b95, 0x6b96, 0x6b98, 0x6b98, 0x6b9e, 0x6b9e, 0x6ba4, 0x6ba4,
0x6baa, 0x6bab, 0x6baf, 0x6baf, 0x6bb1, 0x6bb5, 0x6bb7, 0x6bb7,
0x6bba, 0x6bbc, 0x6bbf, 0x6bc0, 0x6bc5, 0x6bc6, 0x6bcb, 0x6bcb,
0x6bcd, 0x6bce, 0x6bd2, 0x6bd4, 0x6bd6, 0x6bd6, 0x6bd8, 0x6bd8,
0x6bdb, 0x6bdb, 0x6bdf, 0x6bdf, 0x6beb, 0x6bec, 0x6bef, 0x6bef,
0x6bf3, 0x6bf3, 0x6c08, 0x6c08, 0x6c0f, 0x6c0f, 0x6c11, 0x6c11,
0x6c13, 0x6c14, 0x6c17, 0x6c17, 0x6c1b, 0x6c1b, 0x6c23, 0x6c24,
0x6c34, 0x6c34, 0x6c37, 0x6c38, 0x6c3e, 0x6c42, 0x6c4e, 0x6c4e,
0x6c50, 0x6c50, 0x6c55, 0x6c55, 0x6c57, 0x6c57, 0x6c5a, 0x6c5a,
0x6c5c, 0x6c60, 0x6c62, 0x6c62, 0x6c68, 0x6c68, 0x6c6a, 0x6c6a,
0x6c6f, 0x6c70, 0x6c72, 0x6c73, 0x6c7a, 0x6c7a, 0x6c7d, 0x6c7e,
0x6c81, 0x6c83, 0x6c86, 0x6c86, 0x6c88, 0x6c88, 0x6c8c, 0x6c8d,
0x6c90, 0x6c90, 0x6c92, 0x6c93, 0x6c96, 0x6c96, 0x6c99, 0x6c9b,
0x6ca1, 0x6ca2, 0x6cab, 0x6cab, 0x6cae, 0x6cae, 0x6cb1, 0x6cb1,
0x6cb3, 0x6cb3, 0x6cb8, 0x6cbf, 0x6cc1, 0x6cc1, 0x6cc4, 0x6cc5,
0x6cc9, 0x6cca, 0x6ccc, 0x6ccc, 0x6cd3, 0x6cd3, 0x6cd5, 0x6cd5,
0x6cd7, 0x6cd7, 0x6cd9, 0x6cdb, 0x6cdd, 0x6cdd, 0x6ce1, 0x6ce3,
0x6ce5, 0x6ce5, 0x6ce8, 0x6ce8, 0x6cea, 0x6cea, 0x6cef, 0x6cf1,
0x6cf3, 0x6cf3, 0x6d04, 0x6d04, 0x6d0b, 0x6d0c, 0x6d12, 0x6d12,
0x6d17, 0x6d17, 0x6d19, 0x6d19, 0x6d1b, 0x6d1b, 0x6d1e, 0x6d1f,
0x6d25, 0x6d25, 0x6d29, 0x6d2b, 0x6d32, 0x6d33, 0x6d35, 0x6d36,
0x6d38, 0x6d38, 0x6d3b, 0x6d3b, 0x6d3d, 0x6d3e, 0x6d41, 0x6d41,
0x6d44, 0x6d45, 0x6d59, 0x6d5a, 0x6d5c, 0x6d5c, 0x6d63, 0x6d64,
0x6d66, 0x6d66, 0x6d69, 0x6d6a, 0x6d6c, 0x6d6c, 0x6d6e, 0x6d6f,
0x6d74, 0x6d74, 0x6d77, 0x6d79, 0x6d85, 0x6d85, 0x6d87, 0x6d88,
0x6d8c, 0x6d8c, 0x6d8e, 0x6d8e, 0x6d93, 0x6d93, 0x6d95, 0x6d96,
0x6d99, 0x6d99, 0x6d9b, 0x6d9c, 0x6dac, 0x6dac, 0x6daf, 0x6daf,
0x6db2, 0x6db2, 0x6db5, 0x6db5, 0x6db8, 0x6db8, 0x6dbc, 0x6dbc,
0x6dc0, 0x6dc0, 0x6dc5, 0x6dc7, 0x6dcb, 0x6dcc, 0x6dcf, 0x6dcf,
0x6dd1, 0x6dd2, 0x6dd5, 0x6dd5, 0x6dd8, 0x6dd9, 0x6dde, 0x6dde,
0x6de1, 0x6de1, 0x6de4, 0x6de4, 0x6de6, 0x6de6, 0x6de8, 0x6de8,
0x6dea, 0x6dec, 0x6dee, 0x6dee, 0x6df1, 0x6df3, 0x6df5, 0x6df5,
0x6df7, 0x6dfc, 0x6e05, 0x6e05, 0x6e07, 0x6e0b, 0x6e13, 0x6e13,
0x6e15, 0x6e15, 0x6e19, 0x6e1b, 0x6e1d, 0x6e1d, 0x6e1f, 0x6e21,
0x6e23, 0x6e27, 0x6e29, 0x6e29, 0x6e2b, 0x6e2f, 0x6e38, 0x6e3a,
0x6e3c, 0x6e3c, 0x6e3e, 0x6e3e, 0x6e43, 0x6e43, 0x6e4a, 0x6e4a,
0x6e4d, 0x6e4e, 0x6e56, 0x6e56, 0x6e58, 0x6e58, 0x6e5b, 0x6e5c,
0x6e5f, 0x6e5f, 0x6e67, 0x6e67, 0x6e6b, 0x6e6b, 0x6e6e, 0x6e6f,
0x6e72, 0x6e72, 0x6e76, 0x6e76, 0x6e7e, 0x6e80, 0x6e82, 0x6e82,
0x6e8c, 0x6e8c, 0x6e8f, 0x6e90, 0x6e96, 0x6e96, 0x6e98, 0x6e98,
0x6e9c, 0x6e9d, 0x6e9f, 0x6e9f, 0x6ea2, 0x6ea2, 0x6ea5, 0x6ea5,
0x6eaa, 0x6eaa, 0x6eaf, 0x6eaf, 0x6eb2, 0x6eb2, 0x6eb6, 0x6eb7,
0x6eba, 0x6eba, 0x6ebd, 0x6ebd, 0x6ebf, 0x6ebf, 0x6ec2, 0x6ec2,
0x6ec4, 0x6ec5, 0x6ec9, 0x6ec9, 0x6ecb, 0x6ecc, 0x6ed1, 0x6ed1,
0x6ed3, 0x6ed5, 0x6edd, 0x6ede, 0x6eec, 0x6eec, 0x6eef, 0x6eef,
0x6ef2, 0x6ef2, 0x6ef4, 0x6ef4, 0x6ef7, 0x6ef8, 0x6efe, 0x6eff,
0x6f01, 0x6f02, 0x6f06, 0x6f06, 0x6f09, 0x6f09, 0x6f0f, 0x6f0f,
0x6f11, 0x6f11, 0x6f13, 0x6f15, 0x6f20, 0x6f20, 0x6f22, 0x6f23,
0x6f2b, 0x6f2c, 0x6f31, 0x6f32, 0x6f38, 0x6f38, 0x6f3e, 0x6f3f,
0x6f41, 0x6f41, 0x6f45, 0x6f45, 0x6f54, 0x6f54, 0x6f58, 0x6f58,
0x6f5b, 0x6f5c, 0x6f5f, 0x6f5f, 0x6f64, 0x6f64, 0x6f66, 0x6f66,
0x6f6d, 0x6f70, 0x6f74, 0x6f74, 0x6f78, 0x6f78, 0x6f7a, 0x6f7a,
0x6f7c, 0x6f7c, 0x6f80, 0x6f82, 0x6f84, 0x6f84, 0x6f86, 0x6f86,
0x6f88, 0x6f88, 0x6f8e, 0x6f8e, 0x6f91, 0x6f91, 0x6f97, 0x6f97,
0x6fa1, 0x6fa1, 0x6fa3, 0x6fa4, 0x6faa, 0x6faa, 0x6fb1, 0x6fb1,
0x6fb3, 0x6fb3, 0x6fb5, 0x6fb5, 0x6fb9, 0x6fb9, 0x6fc0, 0x6fc3,
0x6fc6, 0x6fc6, 0x6fd4, 0x6fd5, 0x6fd8, 0x6fd8, 0x6fdb, 0x6fdb,
0x6fdf, 0x6fe1, 0x6fe4, 0x6fe4, 0x6feb, 0x6fec, 0x6fee, 0x6fef,
0x6ff1, 0x6ff1, 0x6ff3, 0x6ff3, 0x6ff5, 0x6ff6, 0x6ffa, 0x6ffa,
0x6ffe, 0x6ffe, 0x7001, 0x7001, 0x7005, 0x7005, 0x7007, 0x7007,
0x7009, 0x7009, 0x700b, 0x700b, 0x700f, 0x700f, 0x7011, 0x7011,
0x7015, 0x7015, 0x7018, 0x7018, 0x701a, 0x701b, 0x701d, 0x701f,
0x7026, 0x7028, 0x702c, 0x702c, 0x7030, 0x7030, 0x7032, 0x7032,
0x703e, 0x703e, 0x704c, 0x704c, 0x7051, 0x7051, 0x7058, 0x7058,
0x7063, 0x7063, 0x706b, 0x706b, 0x706f, 0x7070, 0x7078, 0x7078,
0x707c, 0x707d, 0x7085, 0x7085, 0x7089, 0x708a, 0x708e, 0x708e,
0x7092, 0x7092, 0x7099, 0x7099, 0x70ab, 0x70af, 0x70b3, 0x70b3,
0x70b8, 0x70bb, 0x70c8, 0x70c8, 0x70cb, 0x70cb, 0x70cf, 0x70cf,
0x70d9, 0x70d9, 0x70dd, 0x70dd, 0x70df, 0x70df, 0x70f1, 0x70f1,
0x70f9, 0x70f9, 0x70fd, 0x70fd, 0x7104, 0x7104, 0x7109, 0x7109,
0x710f, 0x710f, 0x7114, 0x7114, 0x7119, 0x711a, 0x711c, 0x711c,
0x7121, 0x7121, 0x7126, 0x7126, 0x7136, 0x7136, 0x713c, 0x713c,
0x7146, 0x7147, 0x7149, 0x7149, 0x714c, 0x714c, 0x714e, 0x714e,
0x7155, 0x7156, 0x7159, 0x7159, 0x715c, 0x715c, 0x7162, 0x7162,
0x7164, 0x7167, 0x7169, 0x7169, 0x716c, 0x716c, 0x716e, 0x716e,
0x717d, 0x717d, 0x7184, 0x7184, 0x7188, 0x7188, 0x718a, 0x718a,
0x718f, 0x718f, 0x7194, 0x7195, 0x7199, 0x7199, 0x719f, 0x719f,
0x71a8, 0x71a8, 0x71ac, 0x71ac, 0x71b1, 0x71b1, 0x71b9, 0x71b9,
0x71be, 0x71be, 0x71c1, 0x71c1, 0x71c3, 0x71c3, 0x71c8, 0x71c9,
0x71ce, 0x71ce, 0x71d0, 0x71d0, 0x71d2, 0x71d2, 0x71d4, 0x71d5,
0x71d7, 0x71d7, 0x71df, 0x71e0, 0x71e5, 0x71e7, 0x71ec, 0x71ee,
0x71f5, 0x71f5, 0x71f9, 0x71f9, 0x71fb, 0x71fc, 0x71fe, 0x71ff,
0x7206, 0x7206, 0x720d, 0x720d, 0x7210, 0x7210, 0x721b, 0x721b,
0x7228, 0x7228, 0x722a, 0x722a, 0x722c, 0x722d, 0x7230, 0x7230,
0x7232, 0x7232, 0x7235, 0x7236, 0x723a, 0x7240, 0x7246, 0x7248,
0x724b, 0x724c, 0x7252, 0x7252, 0x7258, 0x7259, 0x725b, 0x725b,
0x725d, 0x725d, 0x725f, 0x725f, 0x7261, 0x7262, 0x7267, 0x7267,
0x7269, 0x7269, 0x7272, 0x7272, 0x7274, 0x7274, 0x7279, 0x7279,
0x727d, 0x727e, 0x7280, 0x7282, 0x7287, 0x7287, 0x7292, 0x7292,
0x7296, 0x7296, 0x72a0, 0x72a0, 0x72a2, 0x72a2, 0x72a7, 0x72a7,
0x72ac, 0x72ac, 0x72af, 0x72af, 0x72b1, 0x72b2, 0x72b6, 0x72b6,
0x72b9, 0x72b9, 0x72be, 0x72be, 0x72c2, 0x72c4, 0x72c6, 0x72c6,
0x72ce, 0x72ce, 0x72d0, 0x72d0, 0x72d2, 0x72d2, 0x72d7, 0x72d7,
0x72d9, 0x72d9, 0x72db, 0x72db, 0x72e0, 0x72e2, 0x72e9, 0x72e9,
0x72ec, 0x72ed, 0x72f7, 0x72f9, 0x72fc, 0x72fd, 0x730a, 0x730a,
0x7316, 0x7317, 0x731b, 0x731d, 0x731f, 0x731f, 0x7324, 0x7325,
0x7329, 0x732b, 0x732e, 0x732f, 0x7334, 0x7334, 0x7336, 0x7337,
0x733e, 0x733f, 0x7344, 0x7345, 0x734e, 0x734f, 0x7357, 0x7357,
0x7363, 0x7363, 0x7368, 0x7368, 0x736a, 0x736a, 0x7370, 0x7370,
0x7372, 0x7372, 0x7375, 0x7375, 0x7377, 0x7378, 0x737a, 0x737b,
0x7384, 0x7384, 0x7387, 0x7387, 0x7389, 0x7389, 0x738b, 0x738b,
0x7396, 0x7396, 0x73a9, 0x73a9, 0x73b2, 0x73b3, 0x73bb, 0x73bb,
0x73bd, 0x73bd, 0x73c0, 0x73c0, 0x73c2, 0x73c2, 0x73c8, 0x73ca,
0x73cd, 0x73ce, 0x73d2, 0x73d2, 0x73d6, 0x73d6, 0x73de, 0x73de,
0x73e0, 0x73e0, 0x73e3, 0x73e3, 0x73e5, 0x73e5, 0x73ea, 0x73ea,
0x73ed, 0x73ee, 0x73f1, 0x73f1, 0x73f5, 0x73f5, 0x73f8, 0x73f8,
0x73fe, 0x73fe, 0x7403, 0x7403, 0x7405, 0x7407, 0x7409, 0x7409,
0x7422, 0x7422, 0x7425, 0x7426, 0x7429, 0x742a, 0x742e, 0x742e,
0x7432, 0x7436, 0x743a, 0x743a, 0x743f, 0x743f, 0x7441, 0x7441,
0x7455, 0x7455, 0x7459, 0x745c, 0x745e, 0x7460, 0x7462, 0x7464,
0x7469, 0x746a, 0x746f, 0x7470, 0x7473, 0x7473, 0x7476, 0x7476,
0x747e, 0x747e, 0x7483, 0x7483, 0x7489, 0x7489, 0x748b, 0x748b,
0x749e, 0x749f, 0x74a2, 0x74a2, 0x74a7, 0x74a7, 0x74b0, 0x74b0,
0x74bd, 0x74bd, 0x74ca, 0x74ca, 0x74cf, 0x74cf, 0x74d4, 0x74d4,
0x74dc, 0x74dc, 0x74e0, 0x74e0, 0x74e2, 0x74e3, 0x74e6, 0x74e7,
0x74e9, 0x74e9, 0x74ee, 0x74ee, 0x74f0, 0x74f2, 0x74f6, 0x74f8,
0x7501, 0x7501, 0x7503, 0x7505, 0x750c, 0x750e, 0x7511, 0x7511,
0x7513, 0x7513, 0x7515, 0x7515, 0x7518, 0x7518, 0x751a, 0x751a,
0x751c, 0x751c, 0x751e, 0x751f, 0x7523, 0x7523, 0x7525, 0x7526,
0x7528, 0x7528, 0x752b, 0x752c, 0x752f, 0x7533, 0x7537, 0x7538,
0x753a, 0x753c, 0x7544, 0x7544, 0x7546, 0x7546, 0x7549, 0x754d,
0x754f, 0x754f, 0x7551, 0x7551, 0x7554, 0x7554, 0x7559, 0x755d,
0x7560, 0x7560, 0x7562, 0x7562, 0x7564, 0x7567, 0x7569, 0x756b,
0x756d, 0x756d, 0x756f, 0x7570, 0x7573, 0x7574, 0x7576, 0x7578,
0x757f, 0x757f, 0x7582, 0x7582, 0x7586, 0x7587, 0x7589, 0x758b,
0x758e, 0x758f, 0x7591, 0x7591, 0x7594, 0x7594, 0x759a, 0x759a,
0x759d, 0x759d, 0x75a3, 0x75a3, 0x75a5, 0x75a5, 0x75ab, 0x75ab,
0x75b1, 0x75b3, 0x75b5, 0x75b5, 0x75b8, 0x75b9, 0x75bc, 0x75be,
0x75c2, 0x75c3, 0x75c5, 0x75c5, 0x75c7, 0x75c7, 0x75ca, 0x75ca,
0x75cd, 0x75cd, 0x75d2, 0x75d2, 0x75d4, 0x75d5, 0x75d8, 0x75d9,
0x75db, 0x75db, 0x75de, 0x75de, 0x75e2, 0x75e3, 0x75e9, 0x75e9,
0x75f0, 0x75f0, 0x75f2, 0x75f4, 0x75fa, 0x75fa, 0x75fc, 0x75fc,
0x75fe, 0x75ff, 0x7601, 0x7601, 0x7609, 0x7609, 0x760b, 0x760b,
0x760d, 0x760d, 0x761f, 0x7622, 0x7624, 0x7624, 0x7627, 0x7627,
0x7630, 0x7630, 0x7634, 0x7634, 0x763b, 0x763b, 0x7642, 0x7642,
0x7646, 0x7648, 0x764c, 0x764c, 0x7652, 0x7652, 0x7656, 0x7656,
0x7658, 0x7658, 0x765c, 0x765c, 0x7661, 0x7662, 0x7667, 0x766a,
0x766c, 0x766c, 0x7670, 0x7670, 0x7672, 0x7672, 0x7676, 0x7676,
0x7678, 0x7678, 0x767a, 0x767e, 0x7680, 0x7680, 0x7682, 0x7684,
0x7686, 0x7688, 0x768b, 0x768b, 0x768e, 0x768e, 0x7690, 0x7690,
0x7693, 0x7693, 0x7696, 0x7696, 0x7699, 0x769c, 0x769e, 0x769e,
0x76a6, 0x76a6, 0x76ae, 0x76ae, 0x76b0, 0x76b0, 0x76b4, 0x76b4,
0x76b7, 0x76ba, 0x76bf, 0x76bf, 0x76c2, 0x76c3, 0x76c6, 0x76c6,
0x76c8, 0x76c8, 0x76ca, 0x76ca, 0x76cd, 0x76cd, 0x76d2, 0x76d2,
0x76d6, 0x76d7, 0x76db, 0x76dc, 0x76de, 0x76df, 0x76e1, 0x76e1,
0x76e3, 0x76e5, 0x76e7, 0x76e7, 0x76ea, 0x76ea, 0x76ee, 0x76ee,
0x76f2, 0x76f2, 0x76f4, 0x76f4, 0x76f8, 0x76f8, 0x76fb, 0x76fb,
0x76fe, 0x76fe, 0x7701, 0x7701, 0x7704, 0x7704, 0x7707, 0x7709,
0x770b, 0x770c, 0x771b, 0x771b, 0x771e, 0x7720, 0x7724, 0x7726,
0x7729, 0x7729, 0x7737, 0x7738, 0x773a, 0x773a, 0x773c, 0x773c,
0x7740, 0x7740, 0x7746, 0x7747, 0x775a, 0x775b, 0x7761, 0x7761,
0x7763, 0x7763, 0x7765, 0x7766, 0x7768, 0x7768, 0x776b, 0x776b,
0x7779, 0x7779, 0x777e, 0x777f, 0x778b, 0x778b, 0x778e, 0x778e,
0x7791, 0x7791, 0x779e, 0x779e, 0x77a0, 0x77a0, 0x77a5, 0x77a5,
0x77ac, 0x77ad, 0x77b0, 0x77b0, 0x77b3, 0x77b3, 0x77b6, 0x77b6,
0x77b9, 0x77b9, 0x77bb, 0x77bd, 0x77bf, 0x77bf, 0x77c7, 0x77c7,
0x77cd, 0x77cd, 0x77d7, 0x77d7, 0x77da, 0x77dc, 0x77e2, 0x77e3,
0x77e5, 0x77e5, 0x77e7, 0x77e7, 0x77e9, 0x77e9, 0x77ed, 0x77ef,
0x77f3, 0x77f3, 0x77fc, 0x77fc, 0x7802, 0x7802, 0x780c, 0x780c,
0x7812, 0x7812, 0x7814, 0x7815, 0x7820, 0x7821, 0x7825, 0x7827,
0x7832, 0x7832, 0x7834, 0x7834, 0x783a, 0x783a, 0x783f, 0x783f,
0x7845, 0x7845, 0x784e, 0x784e, 0x785d, 0x785d, 0x7864, 0x7864,
0x786b, 0x786c, 0x786f, 0x786f, 0x7872, 0x7872, 0x7874, 0x7874,
0x787a, 0x787a, 0x787c, 0x787c, 0x7881, 0x7881, 0x7886, 0x7887,
0x788c, 0x788e, 0x7891, 0x7891, 0x7893, 0x7893, 0x7895, 0x7895,
0x7897, 0x7897, 0x789a, 0x789a, 0x78a3, 0x78a3, 0x78a7, 0x78a7,
0x78a9, 0x78aa, 0x78af, 0x78af, 0x78b5, 0x78b5, 0x78ba, 0x78ba,
0x78bc, 0x78bc, 0x78be, 0x78be, 0x78c1, 0x78c1, 0x78c5, 0x78c6,
0x78ca, 0x78cb, 0x78d0, 0x78d1, 0x78d4, 0x78d4, 0x78da, 0x78da,
0x78e7, 0x78e8, 0x78ec, 0x78ec, 0x78ef, 0x78ef, 0x78f4, 0x78f4,
0x78fd, 0x78fd, 0x7901, 0x7901, 0x7907, 0x7907, 0x790e, 0x790e,
0x7911, 0x7912, 0x7919, 0x7919, 0x7926, 0x7926, 0x792a, 0x792c,
0x7930, 0x7930, 0x793a, 0x793a, 0x793c, 0x793c, 0x793e, 0x793e,
0x7940, 0x7941, 0x7947, 0x7949, 0x7950, 0x7950, 0x7953, 0x7953,
0x7955, 0x7957, 0x795a, 0x795a, 0x795d, 0x7960, 0x7962, 0x7962,
0x7965, 0x7965, 0x7968, 0x7968, 0x796d, 0x796d, 0x7977, 0x7977,
0x797a, 0x797a, 0x797f, 0x7981, 0x7984, 0x7985, 0x798a, 0x798a,
0x798d, 0x798f, 0x7994, 0x7994, 0x799b, 0x799b, 0x799d, 0x799d,
0x79a6, 0x79a7, 0x79aa, 0x79aa, 0x79ae, 0x79ae, 0x79b0, 0x79b0,
0x79b3, 0x79b3, 0x79b9, 0x79ba, 0x79bd, 0x79c1, 0x79c9, 0x79c9,
0x79cb, 0x79cb, 0x79d1, 0x79d2, 0x79d5, 0x79d5, 0x79d8, 0x79d8,
0x79df, 0x79df, 0x79e1, 0x79e1, 0x79e3, 0x79e4, 0x79e6, 0x79e7,
0x79e9, 0x79e9, 0x79ec, 0x79ec, 0x79f0, 0x79f0, 0x79fb, 0x79fb,
0x7a00, 0x7a00, 0x7a08, 0x7a08, 0x7a0b, 0x7a0b, 0x7a0d, 0x7a0e,
0x7a14, 0x7a14, 0x7a17, 0x7a1a, 0x7a1c, 0x7a1c, 0x7a1f, 0x7a20,
0x7a2e, 0x7a2e, 0x7a31, 0x7a32, 0x7a37, 0x7a37, 0x7a3b, 0x7a40,
0x7a42, 0x7a43, 0x7a46, 0x7a46, 0x7a49, 0x7a49, 0x7a4d, 0x7a50,
0x7a57, 0x7a57, 0x7a61, 0x7a63, 0x7a69, 0x7a69, 0x7a6b, 0x7a6b,
0x7a70, 0x7a70, 0x7a74, 0x7a74, 0x7a76, 0x7a76, 0x7a79, 0x7a7a,
0x7a7d, 0x7a7d, 0x7a7f, 0x7a7f, 0x7a81, 0x7a81, 0x7a83, 0x7a84,
0x7a88, 0x7a88, 0x7a92, 0x7a93, 0x7a95, 0x7a98, 0x7a9f, 0x7a9f,
0x7aa9, 0x7aaa, 0x7aae, 0x7ab0, 0x7ab6, 0x7ab6, 0x7aba, 0x7aba,
0x7abf, 0x7abf, 0x7ac3, 0x7ac5, 0x7ac7, 0x7ac8, 0x7aca, 0x7acb,
0x7acd, 0x7acd, 0x7acf, 0x7acf, 0x7ad1, 0x7ad3, 0x7ad5, 0x7ad5,
0x7ad9, 0x7ada, 0x7adc, 0x7add, 0x7adf, 0x7ae3, 0x7ae5, 0x7ae7,
0x7aea, 0x7aeb, 0x7aed, 0x7aed, 0x7aef, 0x7af0, 0x7af6, 0x7af6,
0x7af8, 0x7afa, 0x7aff, 0x7aff, 0x7b02, 0x7b02, 0x7b04, 0x7b04,
0x7b06, 0x7b06, 0x7b08, 0x7b08, 0x7b0a, 0x7b0b, 0x7b0f, 0x7b0f,
0x7b11, 0x7b11, 0x7b18, 0x7b19, 0x7b1b, 0x7b1b, 0x7b1e, 0x7b1e,
0x7b20, 0x7b20, 0x7b25, 0x7b26, 0x7b28, 0x7b28, 0x7b2c, 0x7b2c,
0x7b33, 0x7b33, 0x7b35, 0x7b36, 0x7b39, 0x7b39, 0x7b45, 0x7b46,
0x7b48, 0x7b49, 0x7b4b, 0x7b4d, 0x7b4f, 0x7b52, 0x7b54, 0x7b54,
0x7b56, 0x7b56, 0x7b5d, 0x7b5d, 0x7b65, 0x7b65, 0x7b67, 0x7b67,
0x7b6c, 0x7b6c, 0x7b6e, 0x7b6e, 0x7b70, 0x7b71, 0x7b74, 0x7b75,
0x7b7a, 0x7b7a, 0x7b86, 0x7b87, 0x7b8b, 0x7b8b, 0x7b8d, 0x7b8d,
0x7b8f, 0x7b8f, 0x7b92, 0x7b92, 0x7b94, 0x7b95, 0x7b97, 0x7b9a,
0x7b9c, 0x7b9f, 0x7ba1, 0x7ba1, 0x7baa, 0x7baa, 0x7bad, 0x7bad,
0x7bb1, 0x7bb1, 0x7bb4, 0x7bb4, 0x7bb8, 0x7bb8, 0x7bc0, 0x7bc1,
0x7bc4, 0x7bc4, 0x7bc6, 0x7bc7, 0x7bc9, 0x7bc9, 0x7bcb, 0x7bcc,
0x7bcf, 0x7bcf, 0x7bdd, 0x7bdd, 0x7be0, 0x7be0, 0x7be4, 0x7be6,
0x7be9, 0x7be9, 0x7bed, 0x7bed, 0x7bf3, 0x7bf3, 0x7bf6, 0x7bf7,
0x7c00, 0x7c00, 0x7c07, 0x7c07, 0x7c0d, 0x7c0d, 0x7c11, 0x7c14,
0x7c17, 0x7c17, 0x7c1f, 0x7c1f, 0x7c21, 0x7c21, 0x7c23, 0x7c23,
0x7c27, 0x7c27, 0x7c2a, 0x7c2b, 0x7c37, 0x7c38, 0x7c3d, 0x7c40,
0x7c43, 0x7c43, 0x7c4c, 0x7c4d, 0x7c4f, 0x7c50, 0x7c54, 0x7c54,
0x7c56, 0x7c56, 0x7c58, 0x7c58, 0x7c5f, 0x7c60, 0x7c64, 0x7c65,
0x7c6c, 0x7c6c, 0x7c73, 0x7c73, 0x7c75, 0x7c75, 0x7c7e, 0x7c7e,
0x7c81, 0x7c83, 0x7c89, 0x7c89, 0x7c8b, 0x7c8b, 0x7c8d, 0x7c8d,
0x7c90, 0x7c90, 0x7c92, 0x7c92, 0x7c95, 0x7c95, 0x7c97, 0x7c98,
0x7c9b, 0x7c9b, 0x7c9f, 0x7c9f, 0x7ca1, 0x7ca2, 0x7ca4, 0x7ca5,
0x7ca7, 0x7ca8, 0x7cab, 0x7cab, 0x7cad, 0x7cae, 0x7cb1, 0x7cb3,
0x7cb9, 0x7cb9, 0x7cbd, 0x7cbe, 0x7cc0, 0x7cc0, 0x7cc2, 0x7cc2,
0x7cc5, 0x7cc5, 0x7cca, 0x7cca, 0x7cce, 0x7cce, 0x7cd2, 0x7cd2,
0x7cd6, 0x7cd6, 0x7cd8, 0x7cd8, 0x7cdc, 0x7cdc, 0x7cde, 0x7ce0,
0x7ce2, 0x7ce2, 0x7ce7, 0x7ce7, 0x7cef, 0x7cef, 0x7cf2, 0x7cf2,
0x7cf4, 0x7cf4, 0x7cf6, 0x7cf6, 0x7cf8, 0x7cf8, 0x7cfa, 0x7cfb,
0x7cfe, 0x7cfe, 0x7d00, 0x7d00, 0x7d02, 0x7d02, 0x7d04, 0x7d06,
0x7d0a, 0x7d0b, 0x7d0d, 0x7d0d, 0x7d10, 0x7d10, 0x7d14, 0x7d15,
0x7d17, 0x7d1c, 0x7d20, 0x7d22, 0x7d2b, 0x7d2c, 0x7d2e, 0x7d30,
0x7d32, 0x7d33, 0x7d35, 0x7d35, 0x7d39, 0x7d3a, 0x7d3f, 0x7d3f,
0x7d42, 0x7d46, 0x7d48, 0x7d48, 0x7d4b, 0x7d4c, 0x7d4e, 0x7d50,
0x7d56, 0x7d56, 0x7d5b, 0x7d5c, 0x7d5e, 0x7d5e, 0x7d61, 0x7d63,
0x7d66, 0x7d66, 0x7d68, 0x7d68, 0x7d6e, 0x7d6e, 0x7d71, 0x7d73,
0x7d75, 0x7d76, 0x7d79, 0x7d79, 0x7d7d, 0x7d7d, 0x7d89, 0x7d89,
0x7d8f, 0x7d8f, 0x7d93, 0x7d93, 0x7d99, 0x7d9c, 0x7d9f, 0x7da0,
0x7da2, 0x7da3, 0x7dab, 0x7db2, 0x7db4, 0x7db5, 0x7db7, 0x7db8,
0x7dba, 0x7dbb, 0x7dbd, 0x7dbf, 0x7dc7, 0x7dc7, 0x7dca, 0x7dcb,
0x7dcf, 0x7dcf, 0x7dd1, 0x7dd2, 0x7dd5, 0x7dd6, 0x7dd8, 0x7dd8,
0x7dda, 0x7dda, 0x7ddc, 0x7dde, 0x7de0, 0x7de1, 0x7de4, 0x7de4,
0x7de8, 0x7de9, 0x7dec, 0x7dec, 0x7def, 0x7def, 0x7df2, 0x7df2,
0x7df4, 0x7df4, 0x7dfb, 0x7dfb, 0x7e01, 0x7e01, 0x7e04, 0x7e05,
0x7e09, 0x7e0b, 0x7e12, 0x7e12, 0x7e1b, 0x7e1b, 0x7e1e, 0x7e1f,
0x7e21, 0x7e23, 0x7e26, 0x7e26, 0x7e2b, 0x7e2b, 0x7e2e, 0x7e2e,
0x7e31, 0x7e32, 0x7e35, 0x7e35, 0x7e37, 0x7e37, 0x7e39, 0x7e3b,
0x7e3d, 0x7e3e, 0x7e41, 0x7e41, 0x7e43, 0x7e43, 0x7e46, 0x7e46,
0x7e4a, 0x7e4b, 0x7e4d, 0x7e4d, 0x7e52, 0x7e52, 0x7e54, 0x7e56,
0x7e59, 0x7e5a, 0x7e5d, 0x7e5e, 0x7e66, 0x7e67, 0x7e69, 0x7e6a,
0x7e6d, 0x7e6d, 0x7e70, 0x7e70, 0x7e79, 0x7e79, 0x7e7b, 0x7e7d,
0x7e7f, 0x7e7f, 0x7e82, 0x7e83, 0x7e88, 0x7e8a, 0x7e8c, 0x7e8c,
0x7e8e, 0x7e90, 0x7e92, 0x7e94, 0x7e96, 0x7e96, 0x7e9b, 0x7e9c,
0x7f36, 0x7f36, 0x7f38, 0x7f38, 0x7f3a, 0x7f3a, 0x7f45, 0x7f45,
0x7f47, 0x7f47, 0x7f4c, 0x7f4e, 0x7f50, 0x7f51, 0x7f54, 0x7f55,
0x7f58, 0x7f58, 0x7f5f, 0x7f60, 0x7f67, 0x7f6b, 0x7f6e, 0x7f6e,
0x7f70, 0x7f70, 0x7f72, 0x7f72, 0x7f75, 0x7f75, 0x7f77, 0x7f79,
0x7f82, 0x7f83, 0x7f85, 0x7f88, 0x7f8a, 0x7f8a, 0x7f8c, 0x7f8c,
0x7f8e, 0x7f8e, 0x7f94, 0x7f94, 0x7f9a, 0x7f9a, 0x7f9d, 0x7f9e,
0x7fa1, 0x7fa1, 0x7fa3, 0x7fa4, 0x7fa8, 0x7fa9, 0x7fae, 0x7faf,
0x7fb2, 0x7fb2, 0x7fb6, 0x7fb6, 0x7fb8, 0x7fb9, 0x7fbd, 0x7fbd,
0x7fc1, 0x7fc1, 0x7fc5, 0x7fc6, 0x7fca, 0x7fca, 0x7fcc, 0x7fcc,
0x7fd2, 0x7fd2, 0x7fd4, 0x7fd5, 0x7fe0, 0x7fe1, 0x7fe6, 0x7fe6,
0x7fe9, 0x7fe9, 0x7feb, 0x7feb, 0x7ff0, 0x7ff0, 0x7ff3, 0x7ff3,
0x7ff9, 0x7ff9, 0x7ffb, 0x7ffc, 0x8000, 0x8001, 0x8003, 0x8006,
0x800b, 0x800c, 0x8010, 0x8010, 0x8012, 0x8012, 0x8015, 0x8015,
0x8017, 0x8019, 0x801c, 0x801c, 0x8021, 0x8021, 0x8028, 0x8028,
0x8033, 0x8033, 0x8036, 0x8036, 0x803b, 0x803b, 0x803d, 0x803d,
0x803f, 0x803f, 0x8046, 0x8046, 0x804a, 0x804a, 0x8052, 0x8052,
0x8056, 0x8056, 0x8058, 0x8058, 0x805a, 0x805a, 0x805e, 0x805f,
0x8061, 0x8062, 0x8068, 0x8068, 0x806f, 0x8070, 0x8072, 0x8074,
0x8076, 0x8077, 0x8079, 0x8079, 0x807d, 0x807f, 0x8084, 0x8087,
0x8089, 0x8089, 0x808b, 0x808c, 0x8093, 0x8093, 0x8096, 0x8096,
0x8098, 0x8098, 0x809a, 0x809b, 0x809d, 0x809d, 0x80a1, 0x80a2,
0x80a5, 0x80a5, 0x80a9, 0x80aa, 0x80ac, 0x80ad, 0x80af, 0x80af,
0x80b1, 0x80b2, 0x80b4, 0x80b4, 0x80ba, 0x80ba, 0x80c3, 0x80c4,
0x80c6, 0x80c6, 0x80cc, 0x80cc, 0x80ce, 0x80ce, 0x80d6, 0x80d6,
0x80d9, 0x80db, 0x80dd, 0x80de, 0x80e1, 0x80e1, 0x80e4, 0x80e5,
0x80ef, 0x80ef, 0x80f1, 0x80f1, 0x80f4, 0x80f4, 0x80f8, 0x80f8,
0x80fc, 0x80fd, 0x8102, 0x8102, 0x8105, 0x810a, 0x811a, 0x811b,
0x8123, 0x8123, 0x8129, 0x8129, 0x812f, 0x812f, 0x8131, 0x8131,
0x8133, 0x8133, 0x8139, 0x8139, 0x813e, 0x813e, 0x8146, 0x8146,
0x814b, 0x814b, 0x814e, 0x814e, 0x8150, 0x8151, 0x8153, 0x8155,
0x815f, 0x815f, 0x8165, 0x8166, 0x816b, 0x816b, 0x816e, 0x816e,
0x8170, 0x8171, 0x8174, 0x8174, 0x8178, 0x817a, 0x817f, 0x8180,
0x8182, 0x8183, 0x8188, 0x8188, 0x818a, 0x818a, 0x818f, 0x818f,
0x8193, 0x8193, 0x8195, 0x8195, 0x819a, 0x819a, 0x819c, 0x819d,
0x81a0, 0x81a0, 0x81a3, 0x81a4, 0x81a8, 0x81a9, 0x81b0, 0x81b0,
0x81b3, 0x81b3, 0x81b5, 0x81b5, 0x81b8, 0x81b8, 0x81ba, 0x81ba,
0x81bd, 0x81c0, 0x81c2, 0x81c2, 0x81c6, 0x81c6, 0x81c8, 0x81c9,
0x81cd, 0x81cd, 0x81d1, 0x81d1, 0x81d3, 0x81d3, 0x81d8, 0x81da,
0x81df, 0x81e0, 0x81e3, 0x81e3, 0x81e5, 0x81e5, 0x81e7, 0x81e8,
0x81ea, 0x81ea, 0x81ed, 0x81ed, 0x81f3, 0x81f4, 0x81fa, 0x81fc,
0x81fe, 0x81fe, 0x8201, 0x8202, 0x8205, 0x8205, 0x8207, 0x820a,
0x820c, 0x820e, 0x8210, 0x8210, 0x8212, 0x8212, 0x8216, 0x8218,
0x821b, 0x821c, 0x821e, 0x821f, 0x8229, 0x822c, 0x822e, 0x822e,
0x8233, 0x8233, 0x8235, 0x8239, 0x8240, 0x8240, 0x8247, 0x8247,
0x8258, 0x825a, 0x825d, 0x825d, 0x825f, 0x825f, 0x8262, 0x8262,
0x8264, 0x8264, 0x8266, 0x8266, 0x8268, 0x8268, 0x826a, 0x826b,
0x826e, 0x826f, 0x8271, 0x8272, 0x8276, 0x8278, 0x827e, 0x827e,
0x828b, 0x828b, 0x828d, 0x828d, 0x8292, 0x8292, 0x8299, 0x8299,
0x829d, 0x829d, 0x829f, 0x829f, 0x82a5, 0x82a6, 0x82ab, 0x82ad,
0x82af, 0x82af, 0x82b1, 0x82b1, 0x82b3, 0x82b3, 0x82b8, 0x82b9,
0x82bb, 0x82bb, 0x82bd, 0x82bd, 0x82c5, 0x82c5, 0x82d1, 0x82d4,
0x82d7, 0x82d7, 0x82d9, 0x82d9, 0x82db, 0x82dc, 0x82de, 0x82df,
0x82e1, 0x82e1, 0x82e3, 0x82e3, 0x82e5, 0x82e7, 0x82eb, 0x82eb,
0x82f1, 0x82f1, 0x82f3, 0x82f4, 0x82f9, 0x82fb, 0x8301, 0x8306,
0x8309, 0x8309, 0x830e, 0x830e, 0x8316, 0x8318, 0x831c, 0x831c,
0x8323, 0x8323, 0x8328, 0x8328, 0x832b, 0x832b, 0x832f, 0x832f,
0x8331, 0x8332, 0x8334, 0x8336, 0x8338, 0x8339, 0x8340, 0x8340,
0x8345, 0x8345, 0x8349, 0x834a, 0x834f, 0x8350, 0x8352, 0x8352,
0x8358, 0x8358, 0x8362, 0x8362, 0x8373, 0x8373, 0x8375, 0x8375,
0x8377, 0x8377, 0x837b, 0x837c, 0x837f, 0x837f, 0x8385, 0x8385,
0x8387, 0x8387, 0x8389, 0x838a, 0x838e, 0x838e, 0x8393, 0x8393,
0x8396, 0x8396, 0x839a, 0x839a, 0x839e, 0x83a0, 0x83a2, 0x83a2,
0x83a8, 0x83a8, 0x83aa, 0x83ab, 0x83b1, 0x83b1, 0x83b5, 0x83b5,
0x83bd, 0x83bd, 0x83c1, 0x83c1, 0x83c5, 0x83c5, 0x83c7, 0x83c7,
0x83ca, 0x83ca, 0x83cc, 0x83cc, 0x83ce, 0x83ce, 0x83d3, 0x83d3,
0x83d6, 0x83d6, 0x83d8, 0x83d8, 0x83dc, 0x83dc, 0x83df, 0x83e0,
0x83e9, 0x83e9, 0x83eb, 0x83eb, 0x83ef, 0x83f2, 0x83f4, 0x83f4,
0x83f6, 0x83f7, 0x83fb, 0x83fb, 0x83fd, 0x83fd, 0x8403, 0x8404,
0x8407, 0x8407, 0x840b, 0x840e, 0x8413, 0x8413, 0x8420, 0x8420,
0x8422, 0x8422, 0x8429, 0x842a, 0x842c, 0x842c, 0x8431, 0x8431,
0x8435, 0x8435, 0x8438, 0x8438, 0x843c, 0x843d, 0x8446, 0x8446,
0x8448, 0x8449, 0x844e, 0x844e, 0x8457, 0x8457, 0x845b, 0x845b,
0x8461, 0x8463, 0x8466, 0x8466, 0x8469, 0x8469, 0x846b, 0x846f,
0x8471, 0x8471, 0x8475, 0x8475, 0x8477, 0x8477, 0x8479, 0x847a,
0x8482, 0x8482, 0x8484, 0x8484, 0x848b, 0x848b, 0x8490, 0x8490,
0x8494, 0x8494, 0x8499, 0x8499, 0x849c, 0x849c, 0x849f, 0x849f,
0x84a1, 0x84a1, 0x84ad, 0x84ad, 0x84b2, 0x84b2, 0x84b4, 0x84b4,
0x84b8, 0x84b9, 0x84bb, 0x84bc, 0x84bf, 0x84bf, 0x84c1, 0x84c1,
0x84c4, 0x84c4, 0x84c6, 0x84c6, 0x84c9, 0x84cb, 0x84cd, 0x84cd,
0x84d0, 0x84d1, 0x84d6, 0x84d6, 0x84d9, 0x84da, 0x84dc, 0x84dc,
0x84ec, 0x84ec, 0x84ee, 0x84ee, 0x84f4, 0x84f4, 0x84fc, 0x84fc,
0x84ff, 0x8500, 0x8506, 0x8506, 0x8511, 0x8511, 0x8513, 0x8515,
0x8517, 0x8518, 0x851a, 0x851a, 0x851f, 0x851f, 0x8521, 0x8521,
0x8526, 0x8526, 0x852c, 0x852d, 0x8535, 0x8535, 0x853d, 0x853d,
0x8540, 0x8541, 0x8543, 0x8543, 0x8548, 0x854b, 0x854e, 0x854e,
0x8553, 0x8553, 0x8555, 0x8555, 0x8557, 0x855a, 0x8563, 0x8563,
0x8568, 0x856b, 0x856d, 0x856d, 0x8577, 0x8577, 0x857e, 0x857e,
0x8580, 0x8580, 0x8584, 0x8584, 0x8587, 0x8588, 0x858a, 0x858a,
0x8590, 0x8591, 0x8594, 0x8594, 0x8597, 0x8597, 0x8599, 0x8599,
0x859b, 0x859c, 0x85a4, 0x85a4, 0x85a6, 0x85a6, 0x85a8, 0x85ac,
0x85ae, 0x85b0, 0x85b9, 0x85ba, 0x85c1, 0x85c1, 0x85c9, 0x85c9,
0x85cd, 0x85cd, 0x85cf, 0x85d0, 0x85d5, 0x85d5, 0x85dc, 0x85dd,
0x85e4, 0x85e5, 0x85e9, 0x85ea, 0x85f7, 0x85f7, 0x85f9, 0x85fb,
0x85fe, 0x85fe, 0x8602, 0x8602, 0x8606, 0x8607, 0x860a, 0x860b,
0x8613, 0x8613, 0x8616, 0x8617, 0x861a, 0x861a, 0x8622, 0x8622,
0x862d, 0x862d, 0x862f, 0x8630, 0x863f, 0x863f, 0x864d, 0x864e,
0x8650, 0x8650, 0x8654, 0x8655, 0x865a, 0x865a, 0x865c, 0x865c,
0x865e, 0x865f, 0x8667, 0x8667, 0x866b, 0x866b, 0x8671, 0x8671,
0x8679, 0x8679, 0x867b, 0x867b, 0x868a, 0x868c, 0x8693, 0x8693,
0x8695, 0x8695, 0x86a3, 0x86a4, 0x86a9, 0x86ab, 0x86af, 0x86b0,
0x86b6, 0x86b6, 0x86c4, 0x86c4, 0x86c6, 0x86c7, 0x86c9, 0x86c9,
0x86cb, 0x86cb, 0x86cd, 0x86ce, 0x86d4, 0x86d4, 0x86d9, 0x86d9,
0x86db, 0x86db, 0x86de, 0x86df, 0x86e4, 0x86e4, 0x86e9, 0x86e9,
0x86ec, 0x86ef, 0x86f8, 0x86f9, 0x86fb, 0x86fb, 0x86fe, 0x86fe,
0x8700, 0x8700, 0x8702, 0x8703, 0x8706, 0x8706, 0x8708, 0x870a,
0x870d, 0x870d, 0x8711, 0x8712, 0x8718, 0x8718, 0x871a, 0x871a,
0x871c, 0x871c, 0x8725, 0x8725, 0x8729, 0x8729, 0x8734, 0x8734,
0x8737, 0x8737, 0x873b, 0x873b, 0x873f, 0x873f, 0x8749, 0x8749,
0x874b, 0x874c, 0x874e, 0x874e, 0x8753, 0x8753, 0x8755, 0x8755,
0x8757, 0x8757, 0x8759, 0x8759, 0x875f, 0x8760, 0x8763, 0x8763,
0x8766, 0x8766, 0x8768, 0x8768, 0x876a, 0x876a, 0x876e, 0x876e,
0x8774, 0x8774, 0x8776, 0x8776, 0x8778, 0x8778, 0x877f, 0x877f,
0x8782, 0x8782, 0x878d, 0x878d, 0x879f, 0x879f, 0x87a2, 0x87a2,
0x87ab, 0x87ab, 0x87af, 0x87af, 0x87b3, 0x87b3, 0x87ba, 0x87bb,
0x87bd, 0x87bd, 0x87c0, 0x87c0, 0x87c4, 0x87c4, 0x87c6, 0x87c7,
0x87cb, 0x87cb, 0x87d0, 0x87d0, 0x87d2, 0x87d2, 0x87e0, 0x87e0,
0x87ef, 0x87ef, 0x87f2, 0x87f2, 0x87f6, 0x87f7, 0x87f9, 0x87f9,
0x87fb, 0x87fb, 0x87fe, 0x87fe, 0x8805, 0x8805, 0x8807, 0x8807,
0x880d, 0x880f, 0x8811, 0x8811, 0x8815, 0x8816, 0x8821, 0x8823,
0x8827, 0x8827, 0x8831, 0x8831, 0x8836, 0x8836, 0x8839, 0x8839,
0x883b, 0x883b, 0x8840, 0x8840, 0x8842, 0x8842, 0x8844, 0x8844,
0x8846, 0x8846, 0x884c, 0x884d, 0x8852, 0x8853, 0x8857, 0x8857,
0x8859, 0x8859, 0x885b, 0x885b, 0x885d, 0x885e, 0x8861, 0x8863,
0x8868, 0x8868, 0x886b, 0x886b, 0x8870, 0x8870, 0x8872, 0x8872,
0x8875, 0x8875, 0x8877, 0x8877, 0x887d, 0x887f, 0x8881, 0x8882,
0x8888, 0x8888, 0x888b, 0x888b, 0x888d, 0x888d, 0x8892, 0x8892,
0x8896, 0x8897, 0x8899, 0x8899, 0x889e, 0x889e, 0x88a2, 0x88a2,
0x88a4, 0x88a4, 0x88ab, 0x88ab, 0x88ae, 0x88ae, 0x88b0, 0x88b1,
0x88b4, 0x88b5, 0x88b7, 0x88b7, 0x88bf, 0x88bf, 0x88c1, 0x88c5,
0x88cf, 0x88cf, 0x88d4, 0x88d5, 0x88d8, 0x88d9, 0x88dc, 0x88dd,
0x88df, 0x88df, 0x88e1, 0x88e1, 0x88e8, 0x88e8, 0x88f2, 0x88f5,
0x88f8, 0x88f9, 0x88fc, 0x88fe, 0x8902, 0x8902, 0x8904, 0x8904,
0x8907, 0x8907, 0x890a, 0x890a, 0x890c, 0x890c, 0x8910, 0x8910,
0x8912, 0x8913, 0x891c, 0x891e, 0x8925, 0x8925, 0x892a, 0x892b,
0x8936, 0x8936, 0x8938, 0x8938, 0x893b, 0x893b, 0x8941, 0x8941,
0x8943, 0x8944, 0x894c, 0x894d, 0x8956, 0x8956, 0x895e, 0x8960,
0x8964, 0x8964, 0x8966, 0x8966, 0x896a, 0x896a, 0x896d, 0x896d,
0x896f, 0x896f, 0x8972, 0x8972, 0x8974, 0x8974, 0x8977, 0x8977,
0x897e, 0x897f, 0x8981, 0x8981, 0x8983, 0x8983, 0x8986, 0x8988,
0x898a, 0x898b, 0x898f, 0x898f, 0x8993, 0x8993, 0x8996, 0x8998,
0x899a, 0x899a, 0x89a1, 0x89a1, 0x89a6, 0x89a7, 0x89a9, 0x89aa,
0x89ac, 0x89ac, 0x89af, 0x89af, 0x89b2, 0x89b3, 0x89ba, 0x89ba,
0x89bd, 0x89bd, 0x89bf, 0x89c0, 0x89d2, 0x89d2, 0x89da, 0x89da,
0x89dc, 0x89dd, 0x89e3, 0x89e3, 0x89e6, 0x89e7, 0x89f4, 0x89f4,
0x89f8, 0x89f8, 0x8a00, 0x8a00, 0x8a02, 0x8a03, 0x8a08, 0x8a08,
0x8a0a, 0x8a0a, 0x8a0c, 0x8a0c, 0x8a0e, 0x8a0e, 0x8a10, 0x8a10,
0x8a12, 0x8a13, 0x8a16, 0x8a18, 0x8a1b, 0x8a1b, 0x8a1d, 0x8a1d,
0x8a1f, 0x8a1f, 0x8a23, 0x8a23, 0x8a25, 0x8a25, 0x8a2a, 0x8a2a,
0x8a2d, 0x8a2d, 0x8a31, 0x8a31, 0x8a33, 0x8a34, 0x8a36, 0x8a37,
0x8a3a, 0x8a3c, 0x8a41, 0x8a41, 0x8a46, 0x8a46, 0x8a48, 0x8a48,
0x8a50, 0x8a52, 0x8a54, 0x8a55, 0x8a5b, 0x8a5b, 0x8a5e, 0x8a5e,
0x8a60, 0x8a60, 0x8a62, 0x8a63, 0x8a66, 0x8a66, 0x8a69, 0x8a69,
0x8a6b, 0x8a6e, 0x8a70, 0x8a73, 0x8a79, 0x8a79, 0x8a7c, 0x8a7c,
0x8a82, 0x8a82, 0x8a84, 0x8a85, 0x8a87, 0x8a87, 0x8a89, 0x8a89,
0x8a8c, 0x8a8d, 0x8a91, 0x8a91, 0x8a93, 0x8a93, 0x8a95, 0x8a95,
0x8a98, 0x8a98, 0x8a9a, 0x8a9a, 0x8a9e, 0x8a9e, 0x8aa0, 0x8aa1,
0x8aa3, 0x8aa8, 0x8aac, 0x8aad, 0x8ab0, 0x8ab0, 0x8ab2, 0x8ab2,
0x8ab9, 0x8ab9, 0x8abc, 0x8abc, 0x8abe, 0x8abf, 0x8ac2, 0x8ac2,
0x8ac4, 0x8ac4, 0x8ac7, 0x8ac7, 0x8acb, 0x8acd, 0x8acf, 0x8acf,
0x8ad2, 0x8ad2, 0x8ad6, 0x8ad6, 0x8ada, 0x8adc, 0x8ade, 0x8ae2,
0x8ae4, 0x8ae4, 0x8ae6, 0x8ae7, 0x8aeb, 0x8aeb, 0x8aed, 0x8aee,
0x8af1, 0x8af1, 0x8af3, 0x8af3, 0x8af6, 0x8af8, 0x8afa, 0x8afa,
0x8afe, 0x8afe, 0x8b00, 0x8b02, 0x8b04, 0x8b04, 0x8b07, 0x8b07,
0x8b0c, 0x8b0c, 0x8b0e, 0x8b0e, 0x8b10, 0x8b10, 0x8b14, 0x8b14,
0x8b16, 0x8b17, 0x8b19, 0x8b1b, 0x8b1d, 0x8b1d, 0x8b20, 0x8b21,
0x8b26, 0x8b26, 0x8b28, 0x8b28, 0x8b2b, 0x8b2c, 0x8b33, 0x8b33,
0x8b39, 0x8b39, 0x8b3e, 0x8b3e, 0x8b41, 0x8b41, 0x8b49, 0x8b49,
0x8b4c, 0x8b4c, 0x8b4e, 0x8b4f, 0x8b53, 0x8b53, 0x8b56, 0x8b56,
0x8b58, 0x8b58, 0x8b5a, 0x8b5c, 0x8b5f, 0x8b5f, 0x8b66, 0x8b66,
0x8b6b, 0x8b6c, 0x8b6f, 0x8b72, 0x8b74, 0x8b74, 0x8b77, 0x8b77,
0x8b7d, 0x8b7d, 0x8b7f, 0x8b80, 0x8b83, 0x8b83, 0x8b8a, 0x8b8a,
0x8b8c, 0x8b8c, 0x8b8e, 0x8b8e, 0x8b90, 0x8b90, 0x8b92, 0x8b93,
0x8b96, 0x8b96, 0x8b99, 0x8b9a, 0x8c37, 0x8c37, 0x8c3a, 0x8c3a,
0x8c3f, 0x8c3f, 0x8c41, 0x8c41, 0x8c46, 0x8c46, 0x8c48, 0x8c48,
0x8c4a, 0x8c4a, 0x8c4c, 0x8c4c, 0x8c4e, 0x8c4e, 0x8c50, 0x8c50,
0x8c55, 0x8c55, 0x8c5a, 0x8c5a, 0x8c61, 0x8c62, 0x8c6a, 0x8c6c,
0x8c78, 0x8c7a, 0x8c7c, 0x8c7c, 0x8c82, 0x8c82, 0x8c85, 0x8c85,
0x8c89, 0x8c8a, 0x8c8c, 0x8c8e, 0x8c94, 0x8c94, 0x8c98, 0x8c98,
0x8c9d, 0x8c9e, 0x8ca0, 0x8ca2, 0x8ca7, 0x8cb0, 0x8cb2, 0x8cb4,
0x8cb6, 0x8cb8, 0x8cbb, 0x8cbd, 0x8cbf, 0x8cc4, 0x8cc7, 0x8cc8,
0x8cca, 0x8cca, 0x8ccd, 0x8cce, 0x8cd1, 0x8cd1, 0x8cd3, 0x8cd3,
0x8cda, 0x8cdc, 0x8cde, 0x8cde, 0x8ce0, 0x8ce0, 0x8ce2, 0x8ce4,
0x8ce6, 0x8ce6, 0x8cea, 0x8cea, 0x8ced, 0x8ced, 0x8cf0, 0x8cf0,
0x8cf4, 0x8cf4, 0x8cfa, 0x8cfd, 0x8d04, 0x8d05, 0x8d07, 0x8d08,
0x8d0a, 0x8d0b, 0x8d0d, 0x8d0d, 0x8d0f, 0x8d10, 0x8d12, 0x8d14,
0x8d16, 0x8d16, 0x8d64, 0x8d64, 0x8d66, 0x8d67, 0x8d6b, 0x8d6b,
0x8d6d, 0x8d6d, 0x8d70, 0x8d71, 0x8d73, 0x8d74, 0x8d76, 0x8d77,
0x8d81, 0x8d81, 0x8d85, 0x8d85, 0x8d8a, 0x8d8a, 0x8d99, 0x8d99,
0x8da3, 0x8da3, 0x8da8, 0x8da8, 0x8db3, 0x8db3, 0x8dba, 0x8dba,
0x8dbe, 0x8dbe, 0x8dc2, 0x8dc2, 0x8dcb, 0x8dcc, 0x8dcf, 0x8dcf,
0x8dd6, 0x8dd6, 0x8dda, 0x8ddb, 0x8ddd, 0x8ddd, 0x8ddf, 0x8ddf,
0x8de1, 0x8de1, 0x8de3, 0x8de3, 0x8de8, 0x8de8, 0x8dea, 0x8deb,
0x8def, 0x8def, 0x8df3, 0x8df3, 0x8df5, 0x8df5, 0x8dfc, 0x8dfc,
0x8dff, 0x8dff, 0x8e08, 0x8e0a, 0x8e0f, 0x8e10, 0x8e1d, 0x8e1f,
0x8e2a, 0x8e2a, 0x8e30, 0x8e30, 0x8e34, 0x8e35, 0x8e42, 0x8e42,
0x8e44, 0x8e44, 0x8e47, 0x8e4a, 0x8e4c, 0x8e4c, 0x8e50, 0x8e50,
0x8e55, 0x8e55, 0x8e59, 0x8e59, 0x8e5f, 0x8e60, 0x8e63, 0x8e64,
0x8e72, 0x8e72, 0x8e74, 0x8e74, 0x8e76, 0x8e76, 0x8e7c, 0x8e7c,
0x8e81, 0x8e81, 0x8e84, 0x8e85, 0x8e87, 0x8e87, 0x8e8a, 0x8e8b,
0x8e8d, 0x8e8d, 0x8e91, 0x8e91, 0x8e93, 0x8e94, 0x8e99, 0x8e99,
0x8ea1, 0x8ea1, 0x8eaa, 0x8eac, 0x8eaf, 0x8eb1, 0x8ebe, 0x8ebe,
0x8ec5, 0x8ec6, 0x8ec8, 0x8ec8, 0x8eca, 0x8ecd, 0x8ecf, 0x8ecf,
0x8ed2, 0x8ed2, 0x8edb, 0x8edb, 0x8edf, 0x8edf, 0x8ee2, 0x8ee3,
0x8eeb, 0x8eeb, 0x8ef8, 0x8ef8, 0x8efb, 0x8efe, 0x8f03, 0x8f03,
0x8f05, 0x8f05, 0x8f09, 0x8f0a, 0x8f0c, 0x8f0c, 0x8f12, 0x8f15,
0x8f19, 0x8f19, 0x8f1b, 0x8f1d, 0x8f1f, 0x8f1f, 0x8f26, 0x8f26,
0x8f29, 0x8f2a, 0x8f2f, 0x8f2f, 0x8f33, 0x8f33, 0x8f38, 0x8f39,
0x8f3b, 0x8f3b, 0x8f3e, 0x8f3f, 0x8f42, 0x8f42, 0x8f44, 0x8f46,
0x8f49, 0x8f49, 0x8f4c, 0x8f4e, 0x8f57, 0x8f57, 0x8f5c, 0x8f5c,
0x8f5f, 0x8f5f, 0x8f61, 0x8f64, 0x8f9b, 0x8f9c, 0x8f9e, 0x8f9f,
0x8fa3, 0x8fa3, 0x8fa7, 0x8fa8, 0x8fad, 0x8fb2, 0x8fb7, 0x8fb7,
0x8fba, 0x8fbc, 0x8fbf, 0x8fbf, 0x8fc2, 0x8fc2, 0x8fc4, 0x8fc5,
0x8fce, 0x8fce, 0x8fd1, 0x8fd1, 0x8fd4, 0x8fd4, 0x8fda, 0x8fda,
0x8fe2, 0x8fe2, 0x8fe5, 0x8fe6, 0x8fe9, 0x8feb, 0x8fed, 0x8fed,
0x8fef, 0x8ff0, 0x8ff4, 0x8ff4, 0x8ff7, 0x8ffa, 0x8ffd, 0x8ffd,
0x9000, 0x9001, 0x9003, 0x9003, 0x9005, 0x9006, 0x900b, 0x900b,
0x900d, 0x9011, 0x9013, 0x9017, 0x9019, 0x901a, 0x901d, 0x9023,
0x9027, 0x9027, 0x902e, 0x902e, 0x9031, 0x9032, 0x9035, 0x9036,
0x9038, 0x9039, 0x903c, 0x903c, 0x903e, 0x903e, 0x9041, 0x9042,
0x9045, 0x9045, 0x9047, 0x9047, 0x9049, 0x904b, 0x904d, 0x9056,
0x9058, 0x9059, 0x905c, 0x905c, 0x905e, 0x905e, 0x9060, 0x9061,
0x9063, 0x9063, 0x9065, 0x9065, 0x9067, 0x9069, 0x906d, 0x906f,
0x9072, 0x9072, 0x9075, 0x9078, 0x907a, 0x907a, 0x907c, 0x907d,
0x907f, 0x9084, 0x9087, 0x9087, 0x9089, 0x908a, 0x908f, 0x908f,
0x9091, 0x9091, 0x90a3, 0x90a3, 0x90a6, 0x90a6, 0x90a8, 0x90a8,
0x90aa, 0x90aa, 0x90af, 0x90af, 0x90b1, 0x90b1, 0x90b5, 0x90b5,
0x90b8, 0x90b8, 0x90c1, 0x90c1, 0x90ca, 0x90ca, 0x90ce, 0x90ce,
0x90db, 0x90db, 0x90de, 0x90de, 0x90e1, 0x90e2, 0x90e4, 0x90e4,
0x90e8, 0x90e8, 0x90ed, 0x90ed, 0x90f5, 0x90f5, 0x90f7, 0x90f7,
0x90fd, 0x90fd, 0x9102, 0x9102, 0x9112, 0x9112, 0x9115, 0x9115,
0x9119, 0x9119, 0x9127, 0x9127, 0x912d, 0x912d, 0x9130, 0x9130,
0x9132, 0x9132, 0x9149, 0x914e, 0x9152, 0x9152, 0x9154, 0x9154,
0x9156, 0x9156, 0x9158, 0x9158, 0x9162, 0x9163, 0x9165, 0x9165,
0x9169, 0x916a, 0x916c, 0x916c, 0x9172, 0x9173, 0x9175, 0x9175,
0x9177, 0x9178, 0x9182, 0x9182, 0x9187, 0x9187, 0x9189, 0x9189,
0x918b, 0x918b, 0x918d, 0x918d, 0x9190, 0x9190, 0x9192, 0x9192,
0x9197, 0x9197, 0x919c, 0x919c, 0x91a2, 0x91a2, 0x91a4, 0x91a4,
0x91aa, 0x91ab, 0x91af, 0x91af, 0x91b4, 0x91b5, 0x91b8, 0x91b8,
0x91ba, 0x91ba, 0x91c0, 0x91c1, 0x91c6, 0x91c9, 0x91cb, 0x91d1,
0x91d6, 0x91d8, 0x91da, 0x91df, 0x91e1, 0x91e1, 0x91e3, 0x91e7,
0x91ed, 0x91ee, 0x91f5, 0x91f6, 0x91fc, 0x91fc, 0x91ff, 0x91ff,
0x9206, 0x9206, 0x920a, 0x920a, 0x920d, 0x920e, 0x9210, 0x9211,
0x9214, 0x9215, 0x921e, 0x921e, 0x9229, 0x9229, 0x922c, 0x922c,
0x9234, 0x9234, 0x9237, 0x9237, 0x9239, 0x923a, 0x923c, 0x923c,
0x923f, 0x9240, 0x9244, 0x9245, 0x9248, 0x9249, 0x924b, 0x924b,
0x924e, 0x924e, 0x9250, 0x9251, 0x9257, 0x9257, 0x9259, 0x925b,
0x925e, 0x925e, 0x9262, 0x9262, 0x9264, 0x9264, 0x9266, 0x9267,
0x9271, 0x9271, 0x9277, 0x9278, 0x927e, 0x927e, 0x9280, 0x9280,
0x9283, 0x9283, 0x9285, 0x9285, 0x9288, 0x9288, 0x9291, 0x9291,
0x9293, 0x9293, 0x9295, 0x9296, 0x9298, 0x9298, 0x929a, 0x929c,
0x92a7, 0x92a7, 0x92ad, 0x92ad, 0x92b7, 0x92b7, 0x92b9, 0x92b9,
0x92cf, 0x92d0, 0x92d2, 0x92d3, 0x92d5, 0x92d5, 0x92d7, 0x92d7,
0x92d9, 0x92d9, 0x92e0, 0x92e0, 0x92e4, 0x92e4, 0x92e7, 0x92e7,
0x92e9, 0x92ea, 0x92ed, 0x92ed, 0x92f2, 0x92f3, 0x92f8, 0x92fc,
0x92ff, 0x92ff, 0x9302, 0x9302, 0x9306, 0x9306, 0x930f, 0x9310,
0x9318, 0x931a, 0x931d, 0x931e, 0x9320, 0x9323, 0x9325, 0x9326,
0x9328, 0x9328, 0x932b, 0x932c, 0x932e, 0x932f, 0x9332, 0x9332,
0x9335, 0x9335, 0x933a, 0x933b, 0x9344, 0x9344, 0x9348, 0x9348,
0x934b, 0x934b, 0x934d, 0x934d, 0x9354, 0x9354, 0x9356, 0x9357,
0x935b, 0x935c, 0x9360, 0x9360, 0x936c, 0x936c, 0x936e, 0x936e,
0x9370, 0x9370, 0x9375, 0x9375, 0x937c, 0x937c, 0x937e, 0x937e,
0x938c, 0x938c, 0x9394, 0x9394, 0x9396, 0x9397, 0x939a, 0x939a,
0x93a4, 0x93a4, 0x93a7, 0x93a7, 0x93ac, 0x93ae, 0x93b0, 0x93b0,
0x93b9, 0x93b9, 0x93c3, 0x93c3, 0x93c6, 0x93c6, 0x93c8, 0x93c8,
0x93d0, 0x93d1, 0x93d6, 0x93d8, 0x93dd, 0x93de, 0x93e1, 0x93e1,
0x93e4, 0x93e5, 0x93e8, 0x93e8, 0x93f8, 0x93f8, 0x9403, 0x9403,
0x9407, 0x9407, 0x9410, 0x9410, 0x9413, 0x9414, 0x9418, 0x941a,
0x9421, 0x9421, 0x942b, 0x942b, 0x9431, 0x9431, 0x9435, 0x9436,
0x9438, 0x9438, 0x943a, 0x943a, 0x9441, 0x9441, 0x9444, 0x9445,
0x9448, 0x9448, 0x9451, 0x9453, 0x945a, 0x945b, 0x945e, 0x945e,
0x9460, 0x9460, 0x9462, 0x9462, 0x946a, 0x946a, 0x9470, 0x9470,
0x9475, 0x9475, 0x9477, 0x9477, 0x947c, 0x947f, 0x9481, 0x9481,
0x9577, 0x9577, 0x9580, 0x9580, 0x9582, 0x9583, 0x9587, 0x9587,
0x9589, 0x958b, 0x958f, 0x958f, 0x9591, 0x9594, 0x9596, 0x9596,
0x9598, 0x9599, 0x95a0, 0x95a0, 0x95a2, 0x95a5, 0x95a7, 0x95a8,
0x95ad, 0x95ad, 0x95b2, 0x95b2, 0x95b9, 0x95b9, 0x95bb, 0x95bc,
0x95be, 0x95be, 0x95c3, 0x95c3, 0x95c7, 0x95c7, 0x95ca, 0x95ca,
0x95cc, 0x95cd, 0x95d4, 0x95d6, 0x95d8, 0x95d8, 0x95dc, 0x95dc,
0x95e1, 0x95e2, 0x95e5, 0x95e5, 0x961c, 0x961c, 0x9621, 0x9621,
0x9628, 0x9628, 0x962a, 0x962a, 0x962e, 0x962f, 0x9632, 0x9632,
0x963b, 0x963b, 0x963f, 0x9640, 0x9642, 0x9642, 0x9644, 0x9644,
0x964b, 0x964d, 0x964f, 0x9650, 0x965b, 0x965f, 0x9662, 0x9666,
0x966a, 0x966a, 0x966c, 0x966c, 0x9670, 0x9670, 0x9672, 0x9673,
0x9675, 0x9678, 0x967a, 0x967a, 0x967d, 0x967d, 0x9685, 0x9686,
0x9688, 0x9688, 0x968a, 0x968b, 0x968d, 0x968f, 0x9694, 0x9695,
0x9697, 0x9699, 0x969b, 0x969d, 0x96a0, 0x96a0, 0x96a3, 0x96a3,
0x96a7, 0x96a8, 0x96aa, 0x96aa, 0x96af, 0x96b2, 0x96b4, 0x96b4,
0x96b6, 0x96b9, 0x96bb, 0x96bc, 0x96c0, 0x96c1, 0x96c4, 0x96c7,
0x96c9, 0x96c9, 0x96cb, 0x96ce, 0x96d1, 0x96d1, 0x96d5, 0x96d6,
0x96d9, 0x96d9, 0x96db, 0x96dc, 0x96e2, 0x96e3, 0x96e8, 0x96e8,
0x96ea, 0x96eb, 0x96f0, 0x96f0, 0x96f2, 0x96f2, 0x96f6, 0x96f7,
0x96f9, 0x96f9, 0x96fb, 0x96fb, 0x9700, 0x9700, 0x9704, 0x9704,
0x9706, 0x9708, 0x970a, 0x970a, 0x970d, 0x970f, 0x9711, 0x9711,
0x9713, 0x9713, 0x9716, 0x9716, 0x9719, 0x9719, 0x971c, 0x971c,
0x971e, 0x971e, 0x9724, 0x9724, 0x9727, 0x9727, 0x972a, 0x972a,
0x9730, 0x9730, 0x9732, 0x9733, 0x9738, 0x9739, 0x973b, 0x973b,
0x973d, 0x973e, 0x9742, 0x9744, 0x9746, 0x9746, 0x9748, 0x9749,
0x974d, 0x974d, 0x974f, 0x974f, 0x9751, 0x9752, 0x9755, 0x9756,
0x9759, 0x9759, 0x975c, 0x975c, 0x975e, 0x975e, 0x9760, 0x9762,
0x9764, 0x9764, 0x9766, 0x9766, 0x9768, 0x9769, 0x976b, 0x976b,
0x976d, 0x976d, 0x9771, 0x9771, 0x9774, 0x9774, 0x9779, 0x977a,
0x977c, 0x977c, 0x9781, 0x9781, 0x9784, 0x9786, 0x978b, 0x978b,
0x978d, 0x978d, 0x978f, 0x9790, 0x9798, 0x9798, 0x979c, 0x979c,
0x97a0, 0x97a0, 0x97a3, 0x97a3, 0x97a6, 0x97a6, 0x97a8, 0x97a8,
0x97ab, 0x97ab, 0x97ad, 0x97ad, 0x97b3, 0x97b4, 0x97c3, 0x97c3,
0x97c6, 0x97c6, 0x97c8, 0x97c8, 0x97cb, 0x97cb, 0x97d3, 0x97d3,
0x97dc, 0x97dc, 0x97ed, 0x97ee, 0x97f2, 0x97f3, 0x97f5, 0x97f6,
0x97fb, 0x97fb, 0x97ff, 0x97ff, 0x9801, 0x9803, 0x9805, 0x9806,
0x9808, 0x9808, 0x980c, 0x980c, 0x980f, 0x9813, 0x9817, 0x9818,
0x981a, 0x981a, 0x9821, 0x9821, 0x9824, 0x9824, 0x982c, 0x982d,
0x9834, 0x9834, 0x9837, 0x9838, 0x983b, 0x983d, 0x9846, 0x9846,
0x984b, 0x984f, 0x9854, 0x9855, 0x9857, 0x9858, 0x985b, 0x985b,
0x985e, 0x985e, 0x9865, 0x9865, 0x9867, 0x9867, 0x986b, 0x986b,
0x986f, 0x9871, 0x9873, 0x9874, 0x98a8, 0x98a8, 0x98aa, 0x98aa,
0x98af, 0x98af, 0x98b1, 0x98b1, 0x98b6, 0x98b6, 0x98c3, 0x98c4,
0x98c6, 0x98c6, 0x98db, 0x98dc, 0x98df, 0x98df, 0x98e2, 0x98e2,
0x98e9, 0x98e9, 0x98eb, 0x98eb, 0x98ed, 0x98ef, 0x98f2, 0x98f2,
0x98f4, 0x98f4, 0x98fc, 0x98fe, 0x9903, 0x9903, 0x9905, 0x9905,
0x9909, 0x990a, 0x990c, 0x990c, 0x9910, 0x9910, 0x9912, 0x9914,
0x9918, 0x9918, 0x991d, 0x991e, 0x9920, 0x9921, 0x9924, 0x9924,
0x9927, 0x9928, 0x992c, 0x992c, 0x992e, 0x992e, 0x993d, 0x993e,
0x9942, 0x9942, 0x9945, 0x9945, 0x9949, 0x9949, 0x994b, 0x994c,
0x9950, 0x9952, 0x9955, 0x9955, 0x9957, 0x9957, 0x9996, 0x9999,
0x999e, 0x999e, 0x99a5, 0x99a5, 0x99a8, 0x99a8, 0x99ac, 0x99ae,
0x99b3, 0x99b4, 0x99bc, 0x99bc, 0x99c1, 0x99c1, 0x99c4, 0x99c6,
0x99c8, 0x99c8, 0x99d0, 0x99d2, 0x99d5, 0x99d5, 0x99d8, 0x99d8,
0x99db, 0x99db, 0x99dd, 0x99dd, 0x99df, 0x99df, 0x99e2, 0x99e2,
0x99ed, 0x99ee, 0x99f1, 0x99f2, 0x99f8, 0x99f8, 0x99fb, 0x99fb,
0x99ff, 0x99ff, 0x9a01, 0x9a01, 0x9a05, 0x9a05, 0x9a0e, 0x9a0f,
0x9a12, 0x9a13, 0x9a19, 0x9a19, 0x9a28, 0x9a28, 0x9a2b, 0x9a2b,
0x9a30, 0x9a30, 0x9a37, 0x9a37, 0x9a3e, 0x9a3e, 0x9a40, 0x9a40,
0x9a42, 0x9a43, 0x9a45, 0x9a45, 0x9a4d, 0x9a4e, 0x9a55, 0x9a55,
0x9a57, 0x9a57, 0x9a5a, 0x9a5b, 0x9a5f, 0x9a5f, 0x9a62, 0x9a62,
0x9a64, 0x9a65, 0x9a69, 0x9a6b, 0x9aa8, 0x9aa8, 0x9aad, 0x9aad,
0x9ab0, 0x9ab0, 0x9ab8, 0x9ab8, 0x9abc, 0x9abc, 0x9ac0, 0x9ac0,
0x9ac4, 0x9ac4, 0x9acf, 0x9acf, 0x9ad1, 0x9ad1, 0x9ad3, 0x9ad4,
0x9ad8, 0x9ad9, 0x9adc, 0x9adc, 0x9ade, 0x9adf, 0x9ae2, 0x9ae3,
0x9ae6, 0x9ae6, 0x9aea, 0x9aeb, 0x9aed, 0x9aef, 0x9af1, 0x9af1,
0x9af4, 0x9af4, 0x9af7, 0x9af7, 0x9afb, 0x9afb, 0x9b06, 0x9b06,
0x9b18, 0x9b18, 0x9b1a, 0x9b1a, 0x9b1f, 0x9b1f, 0x9b22, 0x9b23,
0x9b25, 0x9b25, 0x9b27, 0x9b2a, 0x9b2e, 0x9b2f, 0x9b31, 0x9b32,
0x9b3b, 0x9b3c, 0x9b41, 0x9b45, 0x9b4d, 0x9b4f, 0x9b51, 0x9b51,
0x9b54, 0x9b54, 0x9b58, 0x9b58, 0x9b5a, 0x9b5a, 0x9b6f, 0x9b6f,
0x9b72, 0x9b72, 0x9b74, 0x9b75, 0x9b83, 0x9b83, 0x9b8e, 0x9b8f,
0x9b91, 0x9b93, 0x9b96, 0x9b97, 0x9b9f, 0x9ba0, 0x9ba8, 0x9ba8,
0x9baa, 0x9bab, 0x9bad, 0x9bae, 0x9bb1, 0x9bb1, 0x9bb4, 0x9bb4,
0x9bb9, 0x9bb9, 0x9bbb, 0x9bbb, 0x9bc0, 0x9bc0, 0x9bc6, 0x9bc6,
0x9bc9, 0x9bca, 0x9bcf, 0x9bcf, 0x9bd1, 0x9bd2, 0x9bd4, 0x9bd4,
0x9bd6, 0x9bd6, 0x9bdb, 0x9bdb, 0x9be1, 0x9be4, 0x9be8, 0x9be8,
0x9bf0, 0x9bf2, 0x9bf5, 0x9bf5, 0x9c00, 0x9c00, 0x9c04, 0x9c04,
0x9c06, 0x9c06, 0x9c08, 0x9c0a, 0x9c0c, 0x9c0d, 0x9c10, 0x9c10,
0x9c12, 0x9c15, 0x9c1b, 0x9c1b, 0x9c21, 0x9c21, 0x9c24, 0x9c25,
0x9c2d, 0x9c30, 0x9c32, 0x9c32, 0x9c39, 0x9c3b, 0x9c3e, 0x9c3e,
0x9c46, 0x9c48, 0x9c52, 0x9c52, 0x9c57, 0x9c57, 0x9c5a, 0x9c5a,
0x9c60, 0x9c60, 0x9c67, 0x9c67, 0x9c76, 0x9c76, 0x9c78, 0x9c78,
0x9ce5, 0x9ce5, 0x9ce7, 0x9ce7, 0x9ce9, 0x9ce9, 0x9ceb, 0x9cec,
0x9cf0, 0x9cf0, 0x9cf3, 0x9cf4, 0x9cf6, 0x9cf6, 0x9d03, 0x9d03,
0x9d06, 0x9d09, 0x9d0e, 0x9d0e, 0x9d12, 0x9d12, 0x9d15, 0x9d15,
0x9d1b, 0x9d1b, 0x9d1f, 0x9d1f, 0x9d23, 0x9d23, 0x9d26, 0x9d26,
0x9d28, 0x9d28, 0x9d2a, 0x9d2c, 0x9d3b, 0x9d3b, 0x9d3e, 0x9d3f,
0x9d41, 0x9d41, 0x9d44, 0x9d44, 0x9d46, 0x9d46, 0x9d48, 0x9d48,
0x9d50, 0x9d51, 0x9d59, 0x9d59, 0x9d5c, 0x9d5e, 0x9d60, 0x9d61,
0x9d64, 0x9d64, 0x9d6b, 0x9d6c, 0x9d6f, 0x9d70, 0x9d72, 0x9d72,
0x9d7a, 0x9d7a, 0x9d87, 0x9d87, 0x9d89, 0x9d89, 0x9d8f, 0x9d8f,
0x9d9a, 0x9d9a, 0x9da4, 0x9da4, 0x9da9, 0x9da9, 0x9dab, 0x9dab,
0x9daf, 0x9daf, 0x9db2, 0x9db2, 0x9db4, 0x9db4, 0x9db8, 0x9db8,
0x9dba, 0x9dbb, 0x9dc1, 0x9dc2, 0x9dc4, 0x9dc4, 0x9dc6, 0x9dc6,
0x9dcf, 0x9dcf, 0x9dd3, 0x9dd3, 0x9dd9, 0x9dd9, 0x9de6, 0x9de6,
0x9ded, 0x9ded, 0x9def, 0x9def, 0x9df2, 0x9df2, 0x9df8, 0x9dfa,
0x9dfd, 0x9dfd, 0x9e19, 0x9e1b, 0x9e1e, 0x9e1e, 0x9e75, 0x9e75,
0x9e78, 0x9e79, 0x9e7d, 0x9e7d, 0x9e7f, 0x9e7f, 0x9e81, 0x9e81,
0x9e88, 0x9e88, 0x9e8b, 0x9e8c, 0x9e91, 0x9e93, 0x9e95, 0x9e95,
0x9e97, 0x9e97, 0x9e9d, 0x9e9d, 0x9e9f, 0x9e9f, 0x9ea5, 0x9ea6,
0x9ea9, 0x9eaa, 0x9ead, 0x9ead, 0x9eb8, 0x9ebc, 0x9ebe, 0x9ebf,
0x9ec4, 0x9ec4, 0x9ecc, 0x9ed2, 0x9ed4, 0x9ed4, 0x9ed8, 0x9ed9,
0x9edb, 0x9ede, 0x9ee0, 0x9ee0, 0x9ee5, 0x9ee5, 0x9ee8, 0x9ee8,
0x9eef, 0x9eef, 0x9ef4, 0x9ef4, 0x9ef6, 0x9ef7, 0x9ef9, 0x9ef9,
0x9efb, 0x9efd, 0x9f07, 0x9f08, 0x9f0e, 0x9f0e, 0x9f13, 0x9f13,
0x9f15, 0x9f15, 0x9f20, 0x9f21, 0x9f2c, 0x9f2c, 0x9f3b, 0x9f3b,
0x9f3e, 0x9f3e, 0x9f4a, 0x9f4b, 0x9f4e, 0x9f4f, 0x9f52, 0x9f52,
0x9f54, 0x9f54, 0x9f5f, 0x9f63, 0x9f66, 0x9f67, 0x9f6a, 0x9f6a,
0x9f6c, 0x9f6c, 0x9f72, 0x9f72, 0x9f76, 0x9f77, 0x9f8d, 0x9f8d,
0x9f95, 0x9f95, 0x9f9c, 0x9f9d, 0x9fa0, 0x9fa0, 0xe000, 0xe06b,
0xe070, 0xe07e, 0xe080, 0xe099, 0xe0a0, 0xe0ba, 0xe0c0, 0xe0d6,
0xe0e0, 0xe0f5, 0xe100, 0xe105, 0xe110, 0xe116, 0xe121, 0xe12c,
0xe130, 0xe13c, 0xe140, 0xe14d, 0xe150, 0xe153, 0xf929, 0xf929,
0xf9dc, 0xf9dc, 0xfa0e, 0xfa2d, 0xfb01, 0xfb02, 0xfe30, 0xfe33,
0xfe35, 0xfe44, 0xff01, 0xff5e, 0xff61, 0xff9f, 0xffe0, 0xffe6,
// clang-format on
};
/// \brief Handle applet hook
/// \param hook_ Callback reason
/// \param param_ User param
void handleAppletHook (AppletHookType const hook_, void *const param_)
{
(void)param_;
switch (hook_)
{
case AppletHookType_OnFocusState:
// grab focus state
s_focused = (appletGetFocusState () == AppletFocusState_Focused);
break;
case AppletHookType_OnOperationMode:
switch (appletGetOperationMode ())
{
default:
case AppletOperationMode_Handheld:
// use handheld mode resolution (720p)
s_width = 1280.0f;
s_height = 720.0f;
break;
case AppletOperationMode_Docked:
// use docked mode resolution (1080p)
s_width = 1920.0f;
s_height = 1080.0f;
break;
}
break;
default:
break;
}
}
/// \brief Get clipboard text callback
/// \param userData_ User data
char const *getClipboardText (void *const userData_)
{
(void)userData_;
return s_clipboard.c_str ();
}
/// \brief Set clipboard text callback
/// \param userData_ User data
/// \param text_ Clipboard text
void setClipboardText (void *const userData_, char const *const text_)
{
(void)userData_;
s_clipboard = text_;
}
/// \brief Move mouse cursor
/// \param io_ ImGui IO
/// \param pos_ New mouse position
/// \param force_ Whether to ignore prior mouse position
void moveMouse (ImGuiIO &io_, ImVec2 const &pos_, bool const force_ = false)
{
// get update timestamp
auto const now = std::chrono::steady_clock::now ();
// check if the mouse position has been updated
if (!force_ && pos_.x == s_mousePos.x && pos_.y == s_mousePos.y)
{
// stop displaying mouse cursor after inactivity timeout
if (now - s_lastMouseUpdate > 1s)
s_showMouse = false;
return;
}
// update mouse position
s_showMouse = true;
s_lastMouseUpdate = now;
s_mousePos = pos_;
}
/// \brief Update mouse buttons
/// \param io_ ImGui IO
void updateMouseButtons (ImGuiIO &io_)
{
// read mouse buttons
auto const buttons = hidMouseButtonsHeld ();
for (std::size_t i = 0; i < IM_ARRAYSIZE (io_.MouseDown); ++i)
{
io_.MouseDown[i] = buttons & BIT (i);
// force mouse cursor to show on click
if (io_.MouseDown[i])
moveMouse (io_, s_mousePos, true);
}
}
/// \brief Update mouse position
/// \param io_ ImGui IO
void updateMousePos (ImGuiIO &io_)
{
MousePosition pos;
hidMouseRead (&pos);
if (pos.scrollVelocityX > 0)
io_.MouseWheel += 1;
else if (pos.scrollVelocityX < 0)
io_.MouseWheel -= 1;
if (pos.scrollVelocityY > 0)
io_.MouseWheelH += 1;
else if (pos.scrollVelocityY < 0)
io_.MouseWheelH -= 1;
moveMouse (
io_, ImVec2 (s_mousePos.x + 2.0f * pos.velocityX, s_mousePos.y + 2.0f * pos.velocityY));
}
/// \brief Update touch position
/// \param io_ ImGui IO
void updateTouch (ImGuiIO &io_)
{
// read touch positions
auto const touchCount = hidTouchCount ();
if (touchCount < 1)
return;
// use first touch position
touchPosition pos;
hidTouchRead (&pos, 0);
// set mouse position to touch point; force hide mouse cursor
moveMouse (io_, ImVec2 (pos.px, pos.py));
io_.MouseDown[0] = true;
s_showMouse = false;
}
/// \brief Update gamepad inputs
/// \param io_ ImGui IO
void updateGamepads (ImGuiIO &io_)
{
// clear navigation inputs
std::memset (io_.NavInputs, 0, sizeof (io_.NavInputs));
auto const buttonMapping = {
std::make_pair (KEY_A, ImGuiNavInput_Activate),
std::make_pair (KEY_B, ImGuiNavInput_Cancel),
std::make_pair (KEY_X, ImGuiNavInput_Input),
std::make_pair (KEY_Y, ImGuiNavInput_Menu),
std::make_pair (KEY_L, ImGuiNavInput_FocusPrev),
std::make_pair (KEY_L, ImGuiNavInput_TweakSlow),
std::make_pair (KEY_R, ImGuiNavInput_FocusNext),
std::make_pair (KEY_R, ImGuiNavInput_TweakFast),
std::make_pair (KEY_DUP, ImGuiNavInput_DpadUp),
std::make_pair (KEY_DRIGHT, ImGuiNavInput_DpadRight),
std::make_pair (KEY_DDOWN, ImGuiNavInput_DpadDown),
std::make_pair (KEY_DLEFT, ImGuiNavInput_DpadLeft),
};
// read buttons from primary controller
auto const keys = hidKeysHeld (CONTROLLER_P1_AUTO);
for (auto const &[in, out] : buttonMapping)
{
if (keys & in)
io_.NavInputs[out] = 1.0f;
}
// use ZR/ZL as left-click/right-click, respectively
if (keys & KEY_ZR)
{
io_.MouseDown[0] = true;
moveMouse (io_, s_mousePos, true);
}
if (keys & KEY_ZL)
{
io_.MouseDown[1] = true;
moveMouse (io_, s_mousePos, true);
}
// update joystick
JoystickPosition js;
auto const analogMapping = {
std::make_tuple (std::ref (js.dx), ImGuiNavInput_LStickLeft, -0.3f, -0.9f),
std::make_tuple (std::ref (js.dx), ImGuiNavInput_LStickRight, +0.3f, +0.9f),
std::make_tuple (std::ref (js.dy), ImGuiNavInput_LStickUp, +0.3f, +0.9f),
std::make_tuple (std::ref (js.dy), ImGuiNavInput_LStickDown, -0.3f, -0.9f),
};
// read left joystick from primary controller
hidJoystickRead (&js, CONTROLLER_P1_AUTO, JOYSTICK_LEFT);
for (auto const &[in, out, min, max] : analogMapping)
{
auto const value = in / static_cast<float> (JOYSTICK_MAX);
io_.NavInputs[out] = std::clamp ((value - min) / (max - min), 0.0f, 1.0f);
}
// use right stick as mouse
auto scale = 5.0f;
if (keys & KEY_L)
scale = 1.0f;
if (keys & KEY_R)
scale = 20.0f;
hidJoystickRead (&js, CONTROLLER_P1_AUTO, JOYSTICK_RIGHT);
// move mouse
moveMouse (io_,
ImVec2 (s_mousePos.x + js.dx / static_cast<float> (JOYSTICK_MAX) * scale,
s_mousePos.y - js.dy / static_cast<float> (JOYSTICK_MAX) * scale));
}
/// \brief Update keyboard inputs
/// \param io_ ImGui IO
void updateKeyboard (ImGuiIO &io_)
{
io_.KeyCtrl =
hidKeyboardModifierHeld (static_cast<HidKeyboardModifier> (KBD_MOD_LCTRL | KBD_MOD_RCTRL));
io_.KeyShift = hidKeyboardModifierHeld (
static_cast<HidKeyboardModifier> (KBD_MOD_LSHIFT | KBD_MOD_RSHIFT));
io_.KeyAlt =
hidKeyboardModifierHeld (static_cast<HidKeyboardModifier> (KBD_MOD_LALT | KBD_MOD_RALT));
io_.KeySuper =
hidKeyboardModifierHeld (static_cast<HidKeyboardModifier> (KBD_MOD_LMETA | KBD_MOD_RMETA));
for (int i = 0; i < 256; ++i)
io_.KeysDown[i] = hidKeyboardHeld (static_cast<HidKeyboardScancode> (i));
}
}
bool imgui::nx::init ()
{
auto &io = ImGui::GetIO ();
// get system language
u64 languageCode;
auto rc = setInitialize ();
if (R_FAILED (rc))
return false;
rc = setGetSystemLanguage (&languageCode);
if (R_FAILED (rc))
{
setExit ();
return false;
}
setExit ();
// get fonts for system language
std::vector<PlFontData> fonts (PlSharedFontType_Total);
s32 numFonts = 0;
rc = plGetSharedFont (languageCode, fonts.data (), fonts.size (), &numFonts);
if (R_FAILED (rc))
return false;
fonts.resize (numFonts);
// add fonts
ImFontConfig config;
config.MergeMode = false;
config.FontDataOwnedByAtlas = false;
for (auto const &font : fonts)
{
io.Fonts->AddFontFromMemoryTTF (font.address, font.size, 24.0f, &config, nxFontRanges);
config.MergeMode = true;
}
// build font atlas
io.Fonts->Flags |= ImFontAtlasFlags_NoPowerOfTwoHeight;
io.Fonts->Build ();
// initialize applet hooks
appletSetFocusHandlingMode (AppletFocusHandlingMode_NoSuspend);
appletHook (&s_appletHookCookie, handleAppletHook, nullptr);
handleAppletHook (AppletHookType_OnFocusState, nullptr);
handleAppletHook (AppletHookType_OnOperationMode, nullptr);
// disable imgui.ini file
io.IniFilename = nullptr;
// setup config flags
io.ConfigFlags |= ImGuiConfigFlags_IsTouchScreen;
io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad;
io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;
// setup platform backend
io.BackendFlags |= ImGuiBackendFlags_HasGamepad;
io.BackendPlatformName = "Switch";
// keyboard mapping. ImGui will use those indices to peek into the io.KeysDown[] array.
io.KeyMap[ImGuiKey_Tab] = KBD_TAB;
io.KeyMap[ImGuiKey_LeftArrow] = KBD_LEFT;
io.KeyMap[ImGuiKey_RightArrow] = KBD_RIGHT;
io.KeyMap[ImGuiKey_UpArrow] = KBD_UP;
io.KeyMap[ImGuiKey_DownArrow] = KBD_DOWN;
io.KeyMap[ImGuiKey_PageUp] = KBD_PAGEUP;
io.KeyMap[ImGuiKey_PageDown] = KBD_PAGEDOWN;
io.KeyMap[ImGuiKey_Home] = KBD_HOME;
io.KeyMap[ImGuiKey_End] = KBD_END;
io.KeyMap[ImGuiKey_Insert] = KBD_INSERT;
io.KeyMap[ImGuiKey_Delete] = KBD_DELETE;
io.KeyMap[ImGuiKey_Backspace] = KBD_BACKSPACE;
io.KeyMap[ImGuiKey_Space] = KBD_SPACE;
io.KeyMap[ImGuiKey_Enter] = KBD_ENTER;
io.KeyMap[ImGuiKey_Escape] = KBD_ESC;
io.KeyMap[ImGuiKey_KeyPadEnter] = KBD_KPENTER;
io.KeyMap[ImGuiKey_A] = KBD_A;
io.KeyMap[ImGuiKey_C] = KBD_C;
io.KeyMap[ImGuiKey_V] = KBD_V;
io.KeyMap[ImGuiKey_X] = KBD_X;
io.KeyMap[ImGuiKey_Y] = KBD_Y;
io.KeyMap[ImGuiKey_Z] = KBD_Z;
// initially disable mouse cursor
io.MouseDrawCursor = false;
// clipboard callbacks
io.SetClipboardTextFn = setClipboardText;
io.GetClipboardTextFn = getClipboardText;
io.ClipboardUserData = nullptr;
return true;
}
void imgui::nx::newFrame ()
{
auto &io = ImGui::GetIO ();
// check that font was built
IM_ASSERT (io.Fonts->IsBuilt () &&
"Font atlas not built! It is generally built by the renderer back-end. Missing call "
"to renderer _NewFrame() function?");
// setup display metrics
io.DisplaySize = ImVec2 (s_width, s_height);
io.DisplayFramebufferScale = ImVec2 (1.0f, 1.0f);
// time step
static auto const start = platform::steady_clock::now ();
static auto prev = start;
auto const now = platform::steady_clock::now ();
io.DeltaTime = std::chrono::duration<float> (now - prev).count ();
prev = now;
if (s_focused)
{
// update inputs
updateMouseButtons (io);
updateMousePos (io);
updateTouch (io);
updateGamepads (io);
updateKeyboard (io);
}
// whether to draw mouse cursor
io.MouseDrawCursor = s_showMouse;
// clamp mouse to screen
s_mousePos.x = std::clamp (s_mousePos.x, 0.0f, s_width);
s_mousePos.y = std::clamp (s_mousePos.y, 0.0f, s_height);
io.MousePos = s_mousePos;
}
void imgui::nx::exit ()
{
// deinitialize applet hooks
appletUnhook (&s_appletHookCookie);
}
#endif