summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Kconfig3
-rw-r--r--lib/Kconfig.debug72
-rw-r--r--lib/Makefile2
-rw-r--r--lib/base64.c189
-rw-r--r--lib/cache_maint.c138
-rw-r--r--lib/dynamic_debug.c1
-rw-r--r--lib/fonts/Kconfig12
-rw-r--r--lib/fonts/Makefile1
-rw-r--r--lib/fonts/font_ter10x18.c5143
-rw-r--r--lib/fonts/fonts.c3
-rw-r--r--lib/hweight.c4
-rw-r--r--lib/math/div64.c185
-rw-r--r--lib/math/test_mul_u64_u64_div_u64.c191
-rw-r--r--lib/plist.c4
-rw-r--r--lib/raid6/recov_rvv.c7
-rw-r--r--lib/raid6/rvv.c299
-rw-r--r--lib/raid6/rvv.h17
-rw-r--r--lib/raid6/test/Makefile8
-rw-r--r--lib/ratelimit.c2
-rw-r--r--lib/rbtree.c29
-rw-r--r--lib/sys_info.c169
-rw-r--r--lib/test_kho.c140
-rw-r--r--lib/tests/Makefile1
-rw-r--r--lib/tests/base64_kunit.c294
-rw-r--r--lib/usercopy.c4
-rw-r--r--lib/xxhash.c29
-rw-r--r--lib/xz/xz_dec_bcj.c95
-rw-r--r--lib/xz/xz_private.h4
28 files changed, 6413 insertions, 633 deletions
diff --git a/lib/Kconfig b/lib/Kconfig
index e629449dd2a3..2923924bea78 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -542,6 +542,9 @@ config MEMREGION
config ARCH_HAS_CPU_CACHE_INVALIDATE_MEMREGION
bool
+config GENERIC_CPU_CACHE_MAINTENANCE
+ bool
+
config ARCH_HAS_MEMREMAP_COMPAT_ALIGN
bool
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 742b23ef0d8b..ba36939fda79 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -342,8 +342,7 @@ config DEBUG_INFO_COMPRESSED_ZLIB
depends on $(cc-option,-gz=zlib)
depends on $(ld-option,--compress-debug-sections=zlib)
help
- Compress the debug information using zlib. Requires GCC 5.0+ or Clang
- 5.0+, binutils 2.26+, and zlib.
+ Compress the debug information using zlib.
Users of dpkg-deb via debian/rules may find an increase in
size of their debug .deb packages with this config set, due to the
@@ -493,23 +492,23 @@ config DEBUG_SECTION_MISMATCH
bool "Enable full Section mismatch analysis"
depends on CC_IS_GCC
help
- The section mismatch analysis checks if there are illegal
- references from one section to another section.
- During linktime or runtime, some sections are dropped;
- any use of code/data previously in these sections would
- most likely result in an oops.
- In the code, functions and variables are annotated with
- __init,, etc. (see the full list in include/linux/init.h),
- which results in the code/data being placed in specific sections.
+ The section mismatch analysis checks if there are illegal references
+ from one section to another. During linktime or runtime, some
+ sections are dropped; any use of code/data previously in these
+ sections would most likely result in an oops.
+
+ In the code, functions and variables are annotated with __init,
+ __initdata, and so on (see the full list in include/linux/init.h).
+ This directs the toolchain to place code/data in specific sections.
+
The section mismatch analysis is always performed after a full
- kernel build, and enabling this option causes the following
- additional step to occur:
- - Add the option -fno-inline-functions-called-once to gcc commands.
- When inlining a function annotated with __init in a non-init
- function, we would lose the section information and thus
- the analysis would not catch the illegal reference.
- This option tells gcc to inline less (but it does result in
- a larger kernel).
+ kernel build, and enabling this option causes the option
+ -fno-inline-functions-called-once to be added to gcc commands.
+
+ However, when inlining a function annotated with __init in
+ a non-init function, we would lose the section information and thus
+ the analysis would not catch the illegal reference. This option
+ tells gcc to inline less (but it does result in a larger kernel).
config SECTION_MISMATCH_WARN_ONLY
bool "Make section mismatch errors non-fatal"
@@ -688,7 +687,7 @@ choice
help
This selects the default access restrictions for debugfs.
It can be overridden with kernel command line option
- debugfs=[on,no-mount,off]. The restrictions apply for API access
+ debugfs=[on,off]. The restrictions apply for API access
and filesystem registration.
config DEBUG_FS_ALLOW_ALL
@@ -697,13 +696,6 @@ config DEBUG_FS_ALLOW_ALL
No restrictions apply. Both API and filesystem registration
is on. This is the normal default operation.
-config DEBUG_FS_DISALLOW_MOUNT
- bool "Do not register debugfs as filesystem"
- help
- The API is open but filesystem is not loaded. Clients can still do
- their work and read with debug tools that do not need
- debugfs filesystem.
-
config DEBUG_FS_ALLOW_NONE
bool "No access"
help
@@ -1267,12 +1259,13 @@ config DEFAULT_HUNG_TASK_TIMEOUT
Keeping the default should be fine in most cases.
config BOOTPARAM_HUNG_TASK_PANIC
- bool "Panic (Reboot) On Hung Tasks"
+ int "Number of hung tasks to trigger kernel panic"
depends on DETECT_HUNG_TASK
+ default 0
help
- Say Y here to enable the kernel to panic on "hung tasks",
- which are bugs that cause the kernel to leave a task stuck
- in uninterruptible "D" state.
+ When set to a non-zero value, a kernel panic will be triggered
+ if the number of hung tasks found during a single scan reaches
+ this value.
The panic can be used in combination with panic_timeout,
to cause the system to reboot automatically after a
@@ -2824,8 +2817,25 @@ config CMDLINE_KUNIT_TEST
If unsure, say N.
+config BASE64_KUNIT
+ tristate "KUnit test for base64 decoding and encoding" if !KUNIT_ALL_TESTS
+ depends on KUNIT
+ default KUNIT_ALL_TESTS
+ help
+ This builds the base64 unit tests.
+
+ The tests cover the encoding and decoding logic of Base64 functions
+ in the kernel.
+ In addition to correctness checks, simple performance benchmarks
+ for both encoding and decoding are also included.
+
+ For more information on KUnit and unit tests in general please refer
+ to the KUnit documentation in Documentation/dev-tools/kunit/.
+
+ If unsure, say N.
+
config BITS_TEST
- tristate "KUnit test for bits.h" if !KUNIT_ALL_TESTS
+ tristate "KUnit test for bit functions and macros" if !KUNIT_ALL_TESTS
depends on KUNIT
default KUNIT_ALL_TESTS
help
diff --git a/lib/Makefile b/lib/Makefile
index 1ab2c4be3b66..aaf677cf4527 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -127,6 +127,8 @@ obj-$(CONFIG_HAS_IOMEM) += iomap_copy.o devres.o
obj-$(CONFIG_CHECK_SIGNATURE) += check_signature.o
obj-$(CONFIG_DEBUG_LOCKING_API_SELFTESTS) += locking-selftest.o
+obj-$(CONFIG_GENERIC_CPU_CACHE_MAINTENANCE) += cache_maint.o
+
lib-y += logic_pio.o
lib-$(CONFIG_INDIRECT_IOMEM) += logic_iomem.o
diff --git a/lib/base64.c b/lib/base64.c
index b736a7a431c5..41961a444028 100644
--- a/lib/base64.c
+++ b/lib/base64.c
@@ -1,12 +1,12 @@
// SPDX-License-Identifier: GPL-2.0
/*
- * base64.c - RFC4648-compliant base64 encoding
+ * base64.c - Base64 with support for multiple variants
*
* Copyright (c) 2020 Hannes Reinecke, SUSE
*
* Based on the base64url routines from fs/crypto/fname.c
- * (which are using the URL-safe base64 encoding),
- * modified to use the standard coding table from RFC4648 section 4.
+ * (which are using the URL-safe Base64 encoding),
+ * modified to support multiple Base64 variants.
*/
#include <linux/kernel.h>
@@ -15,89 +15,170 @@
#include <linux/string.h>
#include <linux/base64.h>
-static const char base64_table[65] =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+static const char base64_tables[][65] = {
+ [BASE64_STD] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
+ [BASE64_URLSAFE] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",
+ [BASE64_IMAP] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+,",
+};
+/*
+ * Initialize the base64 reverse mapping for a single character
+ * This macro maps a character to its corresponding base64 value,
+ * returning -1 if the character is invalid.
+ * char 'A'-'Z' maps to 0-25, 'a'-'z' maps to 26-51, '0'-'9' maps to 52-61,
+ * ch_62 maps to 62, ch_63 maps to 63, and other characters return -1
+ */
+#define INIT_1(v, ch_62, ch_63) \
+ [v] = (v) >= 'A' && (v) <= 'Z' ? (v) - 'A' \
+ : (v) >= 'a' && (v) <= 'z' ? (v) - 'a' + 26 \
+ : (v) >= '0' && (v) <= '9' ? (v) - '0' + 52 \
+ : (v) == (ch_62) ? 62 : (v) == (ch_63) ? 63 : -1
+
+/*
+ * Recursive macros to generate multiple Base64 reverse mapping table entries.
+ * Each macro generates a sequence of entries in the lookup table:
+ * INIT_2 generates 2 entries, INIT_4 generates 4, INIT_8 generates 8, and so on up to INIT_32.
+ */
+#define INIT_2(v, ...) INIT_1(v, __VA_ARGS__), INIT_1((v) + 1, __VA_ARGS__)
+#define INIT_4(v, ...) INIT_2(v, __VA_ARGS__), INIT_2((v) + 2, __VA_ARGS__)
+#define INIT_8(v, ...) INIT_4(v, __VA_ARGS__), INIT_4((v) + 4, __VA_ARGS__)
+#define INIT_16(v, ...) INIT_8(v, __VA_ARGS__), INIT_8((v) + 8, __VA_ARGS__)
+#define INIT_32(v, ...) INIT_16(v, __VA_ARGS__), INIT_16((v) + 16, __VA_ARGS__)
+
+#define BASE64_REV_INIT(ch_62, ch_63) { \
+ [0 ... 0x1f] = -1, \
+ INIT_32(0x20, ch_62, ch_63), \
+ INIT_32(0x40, ch_62, ch_63), \
+ INIT_32(0x60, ch_62, ch_63), \
+ [0x80 ... 0xff] = -1 }
+
+static const s8 base64_rev_maps[][256] = {
+ [BASE64_STD] = BASE64_REV_INIT('+', '/'),
+ [BASE64_URLSAFE] = BASE64_REV_INIT('-', '_'),
+ [BASE64_IMAP] = BASE64_REV_INIT('+', ',')
+};
+
+#undef BASE64_REV_INIT
+#undef INIT_32
+#undef INIT_16
+#undef INIT_8
+#undef INIT_4
+#undef INIT_2
+#undef INIT_1
/**
- * base64_encode() - base64-encode some binary data
+ * base64_encode() - Base64-encode some binary data
* @src: the binary data to encode
* @srclen: the length of @src in bytes
- * @dst: (output) the base64-encoded string. Not NUL-terminated.
+ * @dst: (output) the Base64-encoded string. Not NUL-terminated.
+ * @padding: whether to append '=' padding characters
+ * @variant: which base64 variant to use
*
- * Encodes data using base64 encoding, i.e. the "Base 64 Encoding" specified
- * by RFC 4648, including the '='-padding.
+ * Encodes data using the selected Base64 variant.
*
- * Return: the length of the resulting base64-encoded string in bytes.
+ * Return: the length of the resulting Base64-encoded string in bytes.
*/
-int base64_encode(const u8 *src, int srclen, char *dst)
+int base64_encode(const u8 *src, int srclen, char *dst, bool padding, enum base64_variant variant)
{
u32 ac = 0;
- int bits = 0;
- int i;
char *cp = dst;
+ const char *base64_table = base64_tables[variant];
- for (i = 0; i < srclen; i++) {
- ac = (ac << 8) | src[i];
- bits += 8;
- do {
- bits -= 6;
- *cp++ = base64_table[(ac >> bits) & 0x3f];
- } while (bits >= 6);
- }
- if (bits) {
- *cp++ = base64_table[(ac << (6 - bits)) & 0x3f];
- bits -= 6;
+ while (srclen >= 3) {
+ ac = src[0] << 16 | src[1] << 8 | src[2];
+ *cp++ = base64_table[ac >> 18];
+ *cp++ = base64_table[(ac >> 12) & 0x3f];
+ *cp++ = base64_table[(ac >> 6) & 0x3f];
+ *cp++ = base64_table[ac & 0x3f];
+
+ src += 3;
+ srclen -= 3;
}
- while (bits < 0) {
- *cp++ = '=';
- bits += 2;
+
+ switch (srclen) {
+ case 2:
+ ac = src[0] << 16 | src[1] << 8;
+ *cp++ = base64_table[ac >> 18];
+ *cp++ = base64_table[(ac >> 12) & 0x3f];
+ *cp++ = base64_table[(ac >> 6) & 0x3f];
+ if (padding)
+ *cp++ = '=';
+ break;
+ case 1:
+ ac = src[0] << 16;
+ *cp++ = base64_table[ac >> 18];
+ *cp++ = base64_table[(ac >> 12) & 0x3f];
+ if (padding) {
+ *cp++ = '=';
+ *cp++ = '=';
+ }
+ break;
}
return cp - dst;
}
EXPORT_SYMBOL_GPL(base64_encode);
/**
- * base64_decode() - base64-decode a string
+ * base64_decode() - Base64-decode a string
* @src: the string to decode. Doesn't need to be NUL-terminated.
* @srclen: the length of @src in bytes
* @dst: (output) the decoded binary data
+ * @padding: whether to append '=' padding characters
+ * @variant: which base64 variant to use
*
- * Decodes a string using base64 encoding, i.e. the "Base 64 Encoding"
- * specified by RFC 4648, including the '='-padding.
- *
- * This implementation hasn't been optimized for performance.
+ * Decodes a string using the selected Base64 variant.
*
* Return: the length of the resulting decoded binary data in bytes,
- * or -1 if the string isn't a valid base64 string.
+ * or -1 if the string isn't a valid Base64 string.
*/
-int base64_decode(const char *src, int srclen, u8 *dst)
+int base64_decode(const char *src, int srclen, u8 *dst, bool padding, enum base64_variant variant)
{
- u32 ac = 0;
- int bits = 0;
- int i;
u8 *bp = dst;
+ s8 input[4];
+ s32 val;
+ const u8 *s = (const u8 *)src;
+ const s8 *base64_rev_tables = base64_rev_maps[variant];
- for (i = 0; i < srclen; i++) {
- const char *p = strchr(base64_table, src[i]);
+ while (srclen >= 4) {
+ input[0] = base64_rev_tables[s[0]];
+ input[1] = base64_rev_tables[s[1]];
+ input[2] = base64_rev_tables[s[2]];
+ input[3] = base64_rev_tables[s[3]];
- if (src[i] == '=') {
- ac = (ac << 6);
- bits += 6;
- if (bits >= 8)
- bits -= 8;
- continue;
- }
- if (p == NULL || src[i] == 0)
- return -1;
- ac = (ac << 6) | (p - base64_table);
- bits += 6;
- if (bits >= 8) {
- bits -= 8;
- *bp++ = (u8)(ac >> bits);
+ val = input[0] << 18 | input[1] << 12 | input[2] << 6 | input[3];
+
+ if (unlikely(val < 0)) {
+ if (!padding || srclen != 4 || s[3] != '=')
+ return -1;
+ padding = 0;
+ srclen = s[2] == '=' ? 2 : 3;
+ break;
}
+
+ *bp++ = val >> 16;
+ *bp++ = val >> 8;
+ *bp++ = val;
+
+ s += 4;
+ srclen -= 4;
}
- if (ac & ((1 << bits) - 1))
+
+ if (likely(!srclen))
+ return bp - dst;
+ if (padding || srclen == 1)
return -1;
+
+ val = (base64_rev_tables[s[0]] << 12) | (base64_rev_tables[s[1]] << 6);
+ *bp++ = val >> 10;
+
+ if (srclen == 2) {
+ if (val & 0x800003ff)
+ return -1;
+ } else {
+ val |= base64_rev_tables[s[2]];
+ if (val & 0x80000003)
+ return -1;
+ *bp++ = val >> 2;
+ }
return bp - dst;
}
EXPORT_SYMBOL_GPL(base64_decode);
diff --git a/lib/cache_maint.c b/lib/cache_maint.c
new file mode 100644
index 000000000000..9256a9ffc34c
--- /dev/null
+++ b/lib/cache_maint.c
@@ -0,0 +1,138 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Generic support for Memory System Cache Maintenance operations.
+ *
+ * Coherency maintenance drivers register with this simple framework that will
+ * iterate over each registered instance to first kick off invalidation and
+ * then to wait until it is complete.
+ *
+ * If no implementations are registered yet cpu_cache_has_invalidate_memregion()
+ * will return false. If this runs concurrently with unregistration then a
+ * race exists but this is no worse than the case where the operations instance
+ * responsible for a given memory region has not yet registered.
+ */
+#include <linux/cache_coherency.h>
+#include <linux/cleanup.h>
+#include <linux/container_of.h>
+#include <linux/export.h>
+#include <linux/kref.h>
+#include <linux/list.h>
+#include <linux/memregion.h>
+#include <linux/module.h>
+#include <linux/rwsem.h>
+#include <linux/slab.h>
+
+static LIST_HEAD(cache_ops_instance_list);
+static DECLARE_RWSEM(cache_ops_instance_list_lock);
+
+static void __cache_coherency_ops_instance_free(struct kref *kref)
+{
+ struct cache_coherency_ops_inst *cci =
+ container_of(kref, struct cache_coherency_ops_inst, kref);
+ kfree(cci);
+}
+
+void cache_coherency_ops_instance_put(struct cache_coherency_ops_inst *cci)
+{
+ kref_put(&cci->kref, __cache_coherency_ops_instance_free);
+}
+EXPORT_SYMBOL_GPL(cache_coherency_ops_instance_put);
+
+static int cache_inval_one(struct cache_coherency_ops_inst *cci, void *data)
+{
+ if (!cci->ops)
+ return -EINVAL;
+
+ return cci->ops->wbinv(cci, data);
+}
+
+static int cache_inval_done_one(struct cache_coherency_ops_inst *cci)
+{
+ if (!cci->ops)
+ return -EINVAL;
+
+ if (!cci->ops->done)
+ return 0;
+
+ return cci->ops->done(cci);
+}
+
+static int cache_invalidate_memregion(phys_addr_t addr, size_t size)
+{
+ int ret;
+ struct cache_coherency_ops_inst *cci;
+ struct cc_inval_params params = {
+ .addr = addr,
+ .size = size,
+ };
+
+ guard(rwsem_read)(&cache_ops_instance_list_lock);
+ list_for_each_entry(cci, &cache_ops_instance_list, node) {
+ ret = cache_inval_one(cci, &params);
+ if (ret)
+ return ret;
+ }
+ list_for_each_entry(cci, &cache_ops_instance_list, node) {
+ ret = cache_inval_done_one(cci);
+ if (ret)
+ return ret;
+ }
+
+ return 0;
+}
+
+struct cache_coherency_ops_inst *
+_cache_coherency_ops_instance_alloc(const struct cache_coherency_ops *ops,
+ size_t size)
+{
+ struct cache_coherency_ops_inst *cci;
+
+ if (!ops || !ops->wbinv)
+ return NULL;
+
+ cci = kzalloc(size, GFP_KERNEL);
+ if (!cci)
+ return NULL;
+
+ cci->ops = ops;
+ INIT_LIST_HEAD(&cci->node);
+ kref_init(&cci->kref);
+
+ return cci;
+}
+EXPORT_SYMBOL_NS_GPL(_cache_coherency_ops_instance_alloc, "CACHE_COHERENCY");
+
+int cache_coherency_ops_instance_register(struct cache_coherency_ops_inst *cci)
+{
+ guard(rwsem_write)(&cache_ops_instance_list_lock);
+ list_add(&cci->node, &cache_ops_instance_list);
+
+ return 0;
+}
+EXPORT_SYMBOL_NS_GPL(cache_coherency_ops_instance_register, "CACHE_COHERENCY");
+
+void cache_coherency_ops_instance_unregister(struct cache_coherency_ops_inst *cci)
+{
+ guard(rwsem_write)(&cache_ops_instance_list_lock);
+ list_del(&cci->node);
+}
+EXPORT_SYMBOL_NS_GPL(cache_coherency_ops_instance_unregister, "CACHE_COHERENCY");
+
+int cpu_cache_invalidate_memregion(phys_addr_t start, size_t len)
+{
+ return cache_invalidate_memregion(start, len);
+}
+EXPORT_SYMBOL_NS_GPL(cpu_cache_invalidate_memregion, "DEVMEM");
+
+/*
+ * Used for optimization / debug purposes only as removal can race
+ *
+ * Machines that do not support invalidation, e.g. VMs, will not have any
+ * operations instance to register and so this will always return false.
+ */
+bool cpu_cache_has_invalidate_memregion(void)
+{
+ guard(rwsem_read)(&cache_ops_instance_list_lock);
+ return !list_empty(&cache_ops_instance_list);
+}
+EXPORT_SYMBOL_NS_GPL(cpu_cache_has_invalidate_memregion, "DEVMEM");
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index 5a007952f7f2..7d7892e57a01 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -95,6 +95,7 @@ static const struct { unsigned flag:8; char opt_char; } opt_array[] = {
{ _DPRINTK_FLAGS_INCL_SOURCENAME, 's' },
{ _DPRINTK_FLAGS_INCL_LINENO, 'l' },
{ _DPRINTK_FLAGS_INCL_TID, 't' },
+ { _DPRINTK_FLAGS_INCL_STACK, 'd' },
{ _DPRINTK_FLAGS_NONE, '_' },
};
diff --git a/lib/fonts/Kconfig b/lib/fonts/Kconfig
index ae59b5b4e225..7d03823e46dc 100644
--- a/lib/fonts/Kconfig
+++ b/lib/fonts/Kconfig
@@ -112,6 +112,17 @@ config FONT_SUN12x22
big letters (like the letters used in the SPARC PROM). If the
standard font is unreadable for you, say Y, otherwise say N.
+config FONT_TER10x18
+ bool "Terminus 10x18 font (not supported by all drivers)"
+ depends on FRAMEBUFFER_CONSOLE || DRM_PANIC
+ depends on !SPARC && FONTS || SPARC
+ help
+ Terminus Font is a clean, fixed width bitmap font, designed
+ for long (8 and more hours per day) work with computers.
+ This is the high resolution version made for use with 13-16" laptops.
+ It fits between the normal 8x16 font and Terminus 16x32.
+ If other fonts are unreadable for you, say Y, otherwise say N.
+
config FONT_TER16x32
bool "Terminus 16x32 font (not supported by all drivers)"
depends on FRAMEBUFFER_CONSOLE || DRM_PANIC
@@ -140,6 +151,7 @@ config FONT_AUTOSELECT
depends on !FONT_SUN8x16
depends on !FONT_SUN12x22
depends on !FONT_10x18
+ depends on !FONT_TER10x18
depends on !FONT_TER16x32
depends on !FONT_6x8
select FONT_8x16
diff --git a/lib/fonts/Makefile b/lib/fonts/Makefile
index e16f68492174..30a85a4292fa 100644
--- a/lib/fonts/Makefile
+++ b/lib/fonts/Makefile
@@ -14,6 +14,7 @@ font-objs-$(CONFIG_FONT_PEARL_8x8) += font_pearl_8x8.o
font-objs-$(CONFIG_FONT_ACORN_8x8) += font_acorn_8x8.o
font-objs-$(CONFIG_FONT_MINI_4x6) += font_mini_4x6.o
font-objs-$(CONFIG_FONT_6x10) += font_6x10.o
+font-objs-$(CONFIG_FONT_TER10x18) += font_ter10x18.o
font-objs-$(CONFIG_FONT_TER16x32) += font_ter16x32.o
font-objs-$(CONFIG_FONT_6x8) += font_6x8.o
diff --git a/lib/fonts/font_ter10x18.c b/lib/fonts/font_ter10x18.c
new file mode 100644
index 000000000000..80356e9d56c7
--- /dev/null
+++ b/lib/fonts/font_ter10x18.c
@@ -0,0 +1,5143 @@
+// SPDX-License-Identifier: GPL-2.0
+#include <linux/font.h>
+#include <linux/module.h>
+
+#define FONTDATAMAX 9216
+
+static const struct font_data fontdata_ter10x18 = {
+ { 0, 0, FONTDATAMAX, 0 }, {
+ /* 0 0x00 '^@' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 1 0x01 '^A' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x80, 0x40, /* #--------# */
+ 0x80, 0x40, /* #--------# */
+ 0xb3, 0x40, /* #-##--##-# */
+ 0xb3, 0x40, /* #-##--##-# */
+ 0x80, 0x40, /* #--------# */
+ 0x80, 0x40, /* #--------# */
+ 0xbf, 0x40, /* #-######-# */
+ 0x9e, 0x40, /* #--####--# */
+ 0x80, 0x40, /* #--------# */
+ 0x80, 0x40, /* #--------# */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 2 0x02 '^B' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xcc, 0xc0, /* ##--##--## */
+ 0xcc, 0xc0, /* ##--##--## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xc0, 0xc0, /* ##------## */
+ 0xe1, 0xc0, /* ###----### */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 3 0x03 '^C' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x73, 0x80, /* -###--###- */
+ 0xf3, 0xc0, /* ####--#### */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x7f, 0x80, /* -########- */
+ 0x3f, 0x00, /* --######-- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 4 0x04 '^D' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x3f, 0x00, /* --######-- */
+ 0x7f, 0x80, /* -########- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x7f, 0x80, /* -########- */
+ 0x3f, 0x00, /* --######-- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 5 0x05 '^E' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x3f, 0x00, /* --######-- */
+ 0x3f, 0x00, /* --######-- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 6 0x06 '^F' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x3f, 0x00, /* --######-- */
+ 0x7f, 0x80, /* -########- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 7 0x07 '^G' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 8 0x08 '^H' */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xf3, 0xc0, /* ####--#### */
+ 0xe1, 0xc0, /* ###----### */
+ 0xe1, 0xc0, /* ###----### */
+ 0xf3, 0xc0, /* ####--#### */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+
+ /* 9 0x09 '^I' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x21, 0x00, /* --#----#-- */
+ 0x21, 0x00, /* --#----#-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 10 0x0a '^J' */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xe1, 0xc0, /* ###----### */
+ 0xcc, 0xc0, /* ##--##--## */
+ 0xde, 0xc0, /* ##-####-## */
+ 0xde, 0xc0, /* ##-####-## */
+ 0xcc, 0xc0, /* ##--##--## */
+ 0xe1, 0xc0, /* ###----### */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+
+ /* 11 0x0b '^K' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0f, 0x80, /* ----#####- */
+ 0x03, 0x80, /* ------###- */
+ 0x06, 0x80, /* -----##-#- */
+ 0x0c, 0x80, /* ----##--#- */
+ 0x3e, 0x00, /* --#####--- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x3e, 0x00, /* --#####--- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 12 0x0c '^L' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x7f, 0x80, /* -########- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 13 0x0d '^M' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x80, /* --#######- */
+ 0x31, 0x80, /* --##---##- */
+ 0x31, 0x80, /* --##---##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x30, 0x00, /* --##------ */
+ 0x30, 0x00, /* --##------ */
+ 0x30, 0x00, /* --##------ */
+ 0x30, 0x00, /* --##------ */
+ 0x30, 0x00, /* --##------ */
+ 0x30, 0x00, /* --##------ */
+ 0xf0, 0x00, /* ####------ */
+ 0xe0, 0x00, /* ###------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 14 0x0e '^N' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x7f, 0x80, /* -########- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x63, 0x80, /* -##---###- */
+ 0xe3, 0x00, /* ###---##-- */
+ 0xc0, 0x00, /* ##-------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 15 0x0f '^O' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0xcc, 0xc0, /* ##--##--## */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x1e, 0x00, /* ---####--- */
+ 0xf3, 0xc0, /* ####--#### */
+ 0x1e, 0x00, /* ---####--- */
+ 0x3f, 0x00, /* --######-- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0xcc, 0xc0, /* ##--##--## */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 16 0x10 '^P' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0xc0, 0x00, /* ##-------- */
+ 0xf0, 0x00, /* ####------ */
+ 0xfc, 0x00, /* ######---- */
+ 0xff, 0x00, /* ########-- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0x00, /* ########-- */
+ 0xfc, 0x00, /* ######---- */
+ 0xf0, 0x00, /* ####------ */
+ 0xc0, 0x00, /* ##-------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 17 0x11 '^Q' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0xc0, /* --------## */
+ 0x03, 0xc0, /* ------#### */
+ 0x0f, 0xc0, /* ----###### */
+ 0x3f, 0xc0, /* --######## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x3f, 0xc0, /* --######## */
+ 0x0f, 0xc0, /* ----###### */
+ 0x03, 0xc0, /* ------#### */
+ 0x00, 0xc0, /* --------## */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 18 0x12 '^R' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x3f, 0x00, /* --######-- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 19 0x13 '^S' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 20 0x14 '^T' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x80, /* --#######- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x3d, 0x80, /* --####-##- */
+ 0x0d, 0x80, /* ----##-##- */
+ 0x0d, 0x80, /* ----##-##- */
+ 0x0d, 0x80, /* ----##-##- */
+ 0x0d, 0x80, /* ----##-##- */
+ 0x0d, 0x80, /* ----##-##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 21 0x15 '^U' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x30, 0x00, /* --##------ */
+ 0x1c, 0x00, /* ---###---- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x1b, 0x00, /* ---##-##-- */
+ 0x0e, 0x00, /* ----###--- */
+ 0x03, 0x00, /* ------##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 22 0x16 '^V' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0xff, 0x80, /* #########- */
+ 0xff, 0x80, /* #########- */
+ 0xff, 0x80, /* #########- */
+ 0xff, 0x80, /* #########- */
+ 0xff, 0x80, /* #########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 23 0x17 '^W' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x3f, 0x00, /* --######-- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 24 0x18 '^X' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x3f, 0x00, /* --######-- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 25 0x19 '^Y' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 26 0x1a '^Z' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x04, 0x00, /* -----#---- */
+ 0x06, 0x00, /* -----##--- */
+ 0x03, 0x00, /* ------##-- */
+ 0xff, 0x80, /* #########- */
+ 0xff, 0x80, /* #########- */
+ 0x03, 0x00, /* ------##-- */
+ 0x06, 0x00, /* -----##--- */
+ 0x04, 0x00, /* -----#---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 27 0x1b '^[' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x10, 0x00, /* ---#------ */
+ 0x30, 0x00, /* --##------ */
+ 0x60, 0x00, /* -##------- */
+ 0xff, 0x80, /* #########- */
+ 0xff, 0x80, /* #########- */
+ 0x60, 0x00, /* -##------- */
+ 0x30, 0x00, /* --##------ */
+ 0x10, 0x00, /* ---#------ */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 28 0x1c '^\' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 29 0x1d '^]' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x12, 0x00, /* ---#--#--- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x61, 0x80, /* -##----##- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x61, 0x80, /* -##----##- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x12, 0x00, /* ---#--#--- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 30 0x1e '^^' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x3f, 0x00, /* --######-- */
+ 0x3f, 0x00, /* --######-- */
+ 0x7f, 0x80, /* -########- */
+ 0x7f, 0x80, /* -########- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 31 0x1f '^_' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x7f, 0x80, /* -########- */
+ 0x7f, 0x80, /* -########- */
+ 0x3f, 0x00, /* --######-- */
+ 0x3f, 0x00, /* --######-- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 32 0x20 ' ' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 33 0x21 '!' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 34 0x22 '"' */
+ 0x00, 0x00, /* ---------- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 35 0x23 '#' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x7f, 0x80, /* -########- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x7f, 0x80, /* -########- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 36 0x24 '$' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x3f, 0x00, /* --######-- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6c, 0x00, /* -##-##---- */
+ 0x6c, 0x00, /* -##-##---- */
+ 0x6c, 0x00, /* -##-##---- */
+ 0x3f, 0x00, /* --######-- */
+ 0x0d, 0x80, /* ----##-##- */
+ 0x0d, 0x80, /* ----##-##- */
+ 0x0d, 0x80, /* ----##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 37 0x25 '%' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x73, 0x00, /* -###--##-- */
+ 0x53, 0x00, /* -#-#--##-- */
+ 0x76, 0x00, /* -###-##--- */
+ 0x06, 0x00, /* -----##--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x30, 0x00, /* --##------ */
+ 0x37, 0x00, /* --##-###-- */
+ 0x65, 0x00, /* -##--#-#-- */
+ 0x67, 0x00, /* -##--###-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 38 0x26 '&' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3c, 0x00, /* --####---- */
+ 0x66, 0x00, /* -##--##--- */
+ 0x66, 0x00, /* -##--##--- */
+ 0x66, 0x00, /* -##--##--- */
+ 0x3c, 0x00, /* --####---- */
+ 0x39, 0x80, /* --###--##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0xc7, 0x00, /* ##---###-- */
+ 0xc3, 0x00, /* ##----##-- */
+ 0xc3, 0x00, /* ##----##-- */
+ 0x67, 0x80, /* -##--####- */
+ 0x3d, 0x80, /* --####-##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 39 0x27 ''' */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 40 0x28 '(' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x06, 0x00, /* -----##--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x06, 0x00, /* -----##--- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 41 0x29 ')' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x18, 0x00, /* ---##----- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x06, 0x00, /* -----##--- */
+ 0x06, 0x00, /* -----##--- */
+ 0x06, 0x00, /* -----##--- */
+ 0x06, 0x00, /* -----##--- */
+ 0x06, 0x00, /* -----##--- */
+ 0x06, 0x00, /* -----##--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x18, 0x00, /* ---##----- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 42 0x2a '*' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x1c, 0x00, /* ---###---- */
+ 0xff, 0x80, /* #########- */
+ 0x1c, 0x00, /* ---###---- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 43 0x2b '+' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x7f, 0x80, /* -########- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 44 0x2c ',' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x18, 0x00, /* ---##----- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 45 0x2d '-' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 46 0x2e '.' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 47 0x2f '/' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x03, 0x00, /* ------##-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x06, 0x00, /* -----##--- */
+ 0x06, 0x00, /* -----##--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x30, 0x00, /* --##------ */
+ 0x30, 0x00, /* --##------ */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 48 0x30 '0' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x63, 0x80, /* -##---###- */
+ 0x67, 0x80, /* -##--####- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x79, 0x80, /* -####--##- */
+ 0x71, 0x80, /* -###---##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 49 0x31 '1' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x1c, 0x00, /* ---###---- */
+ 0x3c, 0x00, /* --####---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 50 0x32 '2' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x01, 0x80, /* -------##- */
+ 0x03, 0x00, /* ------##-- */
+ 0x06, 0x00, /* -----##--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x18, 0x00, /* ---##----- */
+ 0x30, 0x00, /* --##------ */
+ 0x60, 0x00, /* -##------- */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 51 0x33 '3' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x1f, 0x00, /* ---#####-- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 52 0x34 '4' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x01, 0x80, /* -------##- */
+ 0x03, 0x80, /* ------###- */
+ 0x07, 0x80, /* -----####- */
+ 0x0d, 0x80, /* ----##-##- */
+ 0x19, 0x80, /* ---##--##- */
+ 0x31, 0x80, /* --##---##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x7f, 0x80, /* -########- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 53 0x35 '5' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x7f, 0x00, /* -#######-- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 54 0x36 '6' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x1f, 0x00, /* ---#####-- */
+ 0x30, 0x00, /* --##------ */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x7f, 0x00, /* -#######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 55 0x37 '7' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x01, 0x80, /* -------##- */
+ 0x03, 0x00, /* ------##-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x06, 0x00, /* -----##--- */
+ 0x06, 0x00, /* -----##--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 56 0x38 '8' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 57 0x39 '9' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x03, 0x00, /* ------##-- */
+ 0x3e, 0x00, /* --#####--- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 58 0x3a ':' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 59 0x3b ';' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x18, 0x00, /* ---##----- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 60 0x3c '<' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x03, 0x00, /* ------##-- */
+ 0x06, 0x00, /* -----##--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x18, 0x00, /* ---##----- */
+ 0x30, 0x00, /* --##------ */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x30, 0x00, /* --##------ */
+ 0x18, 0x00, /* ---##----- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x06, 0x00, /* -----##--- */
+ 0x03, 0x00, /* ------##-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 61 0x3d '=' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 62 0x3e '>' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x60, 0x00, /* -##------- */
+ 0x30, 0x00, /* --##------ */
+ 0x18, 0x00, /* ---##----- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x06, 0x00, /* -----##--- */
+ 0x03, 0x00, /* ------##-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x06, 0x00, /* -----##--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x18, 0x00, /* ---##----- */
+ 0x30, 0x00, /* --##------ */
+ 0x60, 0x00, /* -##------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 63 0x3f '?' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x01, 0x80, /* -------##- */
+ 0x03, 0x00, /* ------##-- */
+ 0x06, 0x00, /* -----##--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 64 0x40 '@' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x00, /* -#######-- */
+ 0xc1, 0x80, /* ##-----##- */
+ 0xc1, 0x80, /* ##-----##- */
+ 0xcf, 0x80, /* ##--#####- */
+ 0xd9, 0x80, /* ##-##--##- */
+ 0xd9, 0x80, /* ##-##--##- */
+ 0xd9, 0x80, /* ##-##--##- */
+ 0xd9, 0x80, /* ##-##--##- */
+ 0xcf, 0x80, /* ##--#####- */
+ 0xc0, 0x00, /* ##-------- */
+ 0xc0, 0x00, /* ##-------- */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 65 0x41 'A' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x7f, 0x80, /* -########- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 66 0x42 'B' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x00, /* -#######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x7f, 0x00, /* -#######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x7f, 0x00, /* -#######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 67 0x43 'C' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 68 0x44 'D' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7e, 0x00, /* -######--- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x7e, 0x00, /* -######--- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 69 0x45 'E' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x7e, 0x00, /* -######--- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 70 0x46 'F' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x7e, 0x00, /* -######--- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 71 0x47 'G' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x67, 0x80, /* -##--####- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 72 0x48 'H' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x7f, 0x80, /* -########- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 73 0x49 'I' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 74 0x4a 'J' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x07, 0x80, /* -----####- */
+ 0x03, 0x00, /* ------##-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x3e, 0x00, /* --#####--- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 75 0x4b 'K' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x66, 0x00, /* -##--##--- */
+ 0x6c, 0x00, /* -##-##---- */
+ 0x78, 0x00, /* -####----- */
+ 0x78, 0x00, /* -####----- */
+ 0x6c, 0x00, /* -##-##---- */
+ 0x66, 0x00, /* -##--##--- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 76 0x4c 'L' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 77 0x4d 'M' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x80, 0x80, /* #-------#- */
+ 0xc1, 0x80, /* ##-----##- */
+ 0xe3, 0x80, /* ###---###- */
+ 0xf7, 0x80, /* ####-####- */
+ 0xdd, 0x80, /* ##-###-##- */
+ 0xc9, 0x80, /* ##--#--##- */
+ 0xc1, 0x80, /* ##-----##- */
+ 0xc1, 0x80, /* ##-----##- */
+ 0xc1, 0x80, /* ##-----##- */
+ 0xc1, 0x80, /* ##-----##- */
+ 0xc1, 0x80, /* ##-----##- */
+ 0xc1, 0x80, /* ##-----##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 78 0x4e 'N' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x71, 0x80, /* -###---##- */
+ 0x79, 0x80, /* -####--##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x67, 0x80, /* -##--####- */
+ 0x63, 0x80, /* -##---###- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 79 0x4f 'O' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 80 0x50 'P' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x00, /* -#######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x7f, 0x00, /* -#######-- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 81 0x51 'Q' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x67, 0x80, /* -##--####- */
+ 0x3f, 0x00, /* --######-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x01, 0x80, /* -------##- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 82 0x52 'R' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x00, /* -#######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x7f, 0x00, /* -#######-- */
+ 0x78, 0x00, /* -####----- */
+ 0x6c, 0x00, /* -##-##---- */
+ 0x66, 0x00, /* -##--##--- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 83 0x53 'S' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 84 0x54 'T' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 85 0x55 'U' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 86 0x56 'V' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 87 0x57 'W' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0xc1, 0x80, /* ##-----##- */
+ 0xc1, 0x80, /* ##-----##- */
+ 0xc1, 0x80, /* ##-----##- */
+ 0xc1, 0x80, /* ##-----##- */
+ 0xc1, 0x80, /* ##-----##- */
+ 0xc1, 0x80, /* ##-----##- */
+ 0xc9, 0x80, /* ##--#--##- */
+ 0xdd, 0x80, /* ##-###-##- */
+ 0xf7, 0x80, /* ####-####- */
+ 0xe3, 0x80, /* ###---###- */
+ 0xc1, 0x80, /* ##-----##- */
+ 0x80, 0x80, /* #-------#- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 88 0x58 'X' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 89 0x59 'Y' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 90 0x5a 'Z' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x03, 0x00, /* ------##-- */
+ 0x06, 0x00, /* -----##--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x18, 0x00, /* ---##----- */
+ 0x30, 0x00, /* --##------ */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 91 0x5b '[' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 92 0x5c '\' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x30, 0x00, /* --##------ */
+ 0x30, 0x00, /* --##------ */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x06, 0x00, /* -----##--- */
+ 0x06, 0x00, /* -----##--- */
+ 0x03, 0x00, /* ------##-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 93 0x5d ']' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x06, 0x00, /* -----##--- */
+ 0x06, 0x00, /* -----##--- */
+ 0x06, 0x00, /* -----##--- */
+ 0x06, 0x00, /* -----##--- */
+ 0x06, 0x00, /* -----##--- */
+ 0x06, 0x00, /* -----##--- */
+ 0x06, 0x00, /* -----##--- */
+ 0x06, 0x00, /* -----##--- */
+ 0x06, 0x00, /* -----##--- */
+ 0x06, 0x00, /* -----##--- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 94 0x5e '^' */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 95 0x5f '_' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 96 0x60 '`' */
+ 0x30, 0x00, /* --##------ */
+ 0x18, 0x00, /* ---##----- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 97 0x61 'a' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 98 0x62 'b' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x7f, 0x00, /* -#######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x7f, 0x00, /* -#######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 99 0x63 'c' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 100 0x64 'd' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 101 0x65 'e' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x7f, 0x80, /* -########- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 102 0x66 'f' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x07, 0x80, /* -----####- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x3f, 0x00, /* --######-- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 103 0x67 'g' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x80, /* --#######- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x3f, 0x00, /* --######-- */
+
+ /* 104 0x68 'h' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x7f, 0x00, /* -#######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 105 0x69 'i' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x1c, 0x00, /* ---###---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 106 0x6a 'j' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x03, 0x00, /* ------##-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x00, 0x00, /* ---------- */
+ 0x07, 0x00, /* -----###-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x1e, 0x00, /* ---####--- */
+
+ /* 107 0x6b 'k' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x66, 0x00, /* -##--##--- */
+ 0x6c, 0x00, /* -##-##---- */
+ 0x78, 0x00, /* -####----- */
+ 0x6c, 0x00, /* -##-##---- */
+ 0x66, 0x00, /* -##--##--- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 108 0x6c 'l' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x1c, 0x00, /* ---###---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 109 0x6d 'm' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x00, /* -#######-- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 110 0x6e 'n' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x00, /* -#######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 111 0x6f 'o' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 112 0x70 'p' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x00, /* -#######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x7f, 0x00, /* -#######-- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+
+ /* 113 0x71 'q' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x80, /* --#######- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+
+ /* 114 0x72 'r' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x6f, 0x80, /* -##-#####- */
+ 0x78, 0x00, /* -####----- */
+ 0x70, 0x00, /* -###------ */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 115 0x73 's' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 116 0x74 't' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x7e, 0x00, /* -######--- */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x18, 0x00, /* ---##----- */
+ 0x0f, 0x00, /* ----####-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 117 0x75 'u' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 118 0x76 'v' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 119 0x77 'w' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 120 0x78 'x' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 121 0x79 'y' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x3f, 0x00, /* --######-- */
+
+ /* 122 0x7a 'z' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x01, 0x80, /* -------##- */
+ 0x03, 0x00, /* ------##-- */
+ 0x06, 0x00, /* -----##--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x18, 0x00, /* ---##----- */
+ 0x30, 0x00, /* --##------ */
+ 0x60, 0x00, /* -##------- */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 123 0x7b '{' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x07, 0x00, /* -----###-- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x38, 0x00, /* --###----- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x07, 0x00, /* -----###-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 124 0x7c '|' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 125 0x7d '}' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x38, 0x00, /* --###----- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x07, 0x00, /* -----###-- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x38, 0x00, /* --###----- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 126 0x7e '~' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x39, 0x80, /* --###--##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x67, 0x00, /* -##--###-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 127 0x7f '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x08, 0x00, /* ----#----- */
+ 0x1c, 0x00, /* ---###---- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x63, 0x00, /* -##---##-- */
+ 0xc1, 0x80, /* ##-----##- */
+ 0xc1, 0x80, /* ##-----##- */
+ 0xc1, 0x80, /* ##-----##- */
+ 0xc1, 0x80, /* ##-----##- */
+ 0xc1, 0x80, /* ##-----##- */
+ 0xff, 0x80, /* #########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 128 0x80 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x18, 0x00, /* ---##----- */
+
+ /* 129 0x81 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x00, 0x00, /* ---------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 130 0x82 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x06, 0x00, /* -----##--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x7f, 0x80, /* -########- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 131 0x83 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 132 0x84 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 133 0x85 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x18, 0x00, /* ---##----- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 134 0x86 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x3f, 0x00, /* --######-- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 135 0x87 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x18, 0x00, /* ---##----- */
+
+ /* 136 0x88 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x7f, 0x80, /* -########- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 137 0x89 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x7f, 0x80, /* -########- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 138 0x8a '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x18, 0x00, /* ---##----- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x7f, 0x80, /* -########- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 139 0x8b '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x00, 0x00, /* ---------- */
+ 0x1c, 0x00, /* ---###---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 140 0x8c '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x00, 0x00, /* ---------- */
+ 0x1c, 0x00, /* ---###---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 141 0x8d '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x18, 0x00, /* ---##----- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x1c, 0x00, /* ---###---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 142 0x8e '' */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x7f, 0x80, /* -########- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 143 0x8f '' */
+ 0x1e, 0x00, /* ---####--- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x7f, 0x80, /* -########- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 144 0x90 '' */
+ 0x06, 0x00, /* -----##--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x7e, 0x00, /* -######--- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 145 0x91 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7b, 0x80, /* -####-###- */
+ 0x0c, 0xc0, /* ----##--## */
+ 0x0c, 0xc0, /* ----##--## */
+ 0x7c, 0xc0, /* -#####--## */
+ 0xcf, 0xc0, /* ##--###### */
+ 0xcc, 0x00, /* ##--##---- */
+ 0xcc, 0x00, /* ##--##---- */
+ 0xcc, 0xc0, /* ##--##--## */
+ 0x77, 0x80, /* -###-####- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 146 0x92 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0xc0, /* -######### */
+ 0xc6, 0x00, /* ##---##--- */
+ 0xc6, 0x00, /* ##---##--- */
+ 0xc6, 0x00, /* ##---##--- */
+ 0xc6, 0x00, /* ##---##--- */
+ 0xff, 0xc0, /* ########## */
+ 0xc6, 0x00, /* ##---##--- */
+ 0xc6, 0x00, /* ##---##--- */
+ 0xc6, 0x00, /* ##---##--- */
+ 0xc6, 0x00, /* ##---##--- */
+ 0xc6, 0x00, /* ##---##--- */
+ 0xc7, 0xc0, /* ##---##### */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 147 0x93 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 148 0x94 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 149 0x95 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x18, 0x00, /* ---##----- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 150 0x96 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x00, 0x00, /* ---------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 151 0x97 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x18, 0x00, /* ---##----- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 152 0x98 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x00, 0x00, /* ---------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x3f, 0x00, /* --######-- */
+
+ /* 153 0x99 '' */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 154 0x9a '' */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x00, 0x00, /* ---------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 155 0x9b '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x3f, 0x00, /* --######-- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6c, 0x00, /* -##-##---- */
+ 0x6c, 0x00, /* -##-##---- */
+ 0x6c, 0x00, /* -##-##---- */
+ 0x6c, 0x00, /* -##-##---- */
+ 0x6c, 0x00, /* -##-##---- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 156 0x9c '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x30, 0x00, /* --##------ */
+ 0x30, 0x00, /* --##------ */
+ 0x30, 0x00, /* --##------ */
+ 0x7e, 0x00, /* -######--- */
+ 0x30, 0x00, /* --##------ */
+ 0x30, 0x00, /* --##------ */
+ 0x30, 0x00, /* --##------ */
+ 0x30, 0x00, /* --##------ */
+ 0x31, 0x80, /* --##---##- */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 157 0x9d '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x3f, 0x00, /* --######-- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x3f, 0x00, /* --######-- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 158 0x9e '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0xf8, 0x00, /* #####----- */
+ 0xcc, 0x00, /* ##--##---- */
+ 0xcc, 0x00, /* ##--##---- */
+ 0xcc, 0x00, /* ##--##---- */
+ 0xcc, 0x00, /* ##--##---- */
+ 0xfb, 0x00, /* #####-##-- */
+ 0xc3, 0x00, /* ##----##-- */
+ 0xc7, 0x80, /* ##---####- */
+ 0xc3, 0x00, /* ##----##-- */
+ 0xc3, 0x00, /* ##----##-- */
+ 0xc3, 0x00, /* ##----##-- */
+ 0xc1, 0x80, /* ##-----##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 159 0x9f '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x07, 0x00, /* -----###-- */
+ 0x0d, 0x80, /* ----##-##- */
+ 0x0d, 0x80, /* ----##-##- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x3f, 0x00, /* --######-- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x6c, 0x00, /* -##-##---- */
+ 0x6c, 0x00, /* -##-##---- */
+ 0x38, 0x00, /* --###----- */
+
+ /* 160 0xa0 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x06, 0x00, /* -----##--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 161 0xa1 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x06, 0x00, /* -----##--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x1c, 0x00, /* ---###---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 162 0xa2 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x06, 0x00, /* -----##--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 163 0xa3 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x06, 0x00, /* -----##--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x80, /* --#######- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 164 0xa4 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3b, 0x80, /* --###-###- */
+ 0x6e, 0x00, /* -##-###--- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x00, /* -#######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 165 0xa5 '' */
+ 0x3b, 0x80, /* --###-###- */
+ 0x6e, 0x00, /* -##-###--- */
+ 0x00, 0x00, /* ---------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x71, 0x80, /* -###---##- */
+ 0x79, 0x80, /* -####--##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x67, 0x80, /* -##--####- */
+ 0x63, 0x80, /* -##---###- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 166 0xa6 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x3e, 0x00, /* --#####--- */
+ 0x03, 0x00, /* ------##-- */
+ 0x3f, 0x00, /* --######-- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x00, /* -#######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 167 0xa7 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x3e, 0x00, /* --#####--- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x3e, 0x00, /* --#####--- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x00, /* -#######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 168 0xa8 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x18, 0x00, /* ---##----- */
+ 0x30, 0x00, /* --##------ */
+ 0x60, 0x00, /* -##------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 169 0xa9 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 170 0xaa '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 171 0xab '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x30, 0x00, /* --##------ */
+ 0x70, 0x00, /* -###------ */
+ 0x30, 0x80, /* --##----#- */
+ 0x31, 0x80, /* --##---##- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x18, 0x00, /* ---##----- */
+ 0x37, 0x00, /* --##-###-- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0xc1, 0x80, /* ##-----##- */
+ 0x83, 0x00, /* #-----##-- */
+ 0x06, 0x00, /* -----##--- */
+ 0x0f, 0x80, /* ----#####- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 172 0xac '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x30, 0x00, /* --##------ */
+ 0x70, 0x00, /* -###------ */
+ 0x30, 0x80, /* --##----#- */
+ 0x31, 0x80, /* --##---##- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x19, 0x80, /* ---##--##- */
+ 0x33, 0x80, /* --##--###- */
+ 0x67, 0x80, /* -##--####- */
+ 0xcd, 0x80, /* ##--##-##- */
+ 0x8f, 0x80, /* #---#####- */
+ 0x01, 0x80, /* -------##- */
+ 0x01, 0x80, /* -------##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 173 0xad '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 174 0xae '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0xc0, /* ----##--## */
+ 0x19, 0x80, /* ---##--##- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x66, 0x00, /* -##--##--- */
+ 0xcc, 0x00, /* ##--##---- */
+ 0x66, 0x00, /* -##--##--- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x19, 0x80, /* ---##--##- */
+ 0x0c, 0xc0, /* ----##--## */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 175 0xaf '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0xcc, 0x00, /* ##--##---- */
+ 0x66, 0x00, /* -##--##--- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x19, 0x80, /* ---##--##- */
+ 0x0c, 0xc0, /* ----##--## */
+ 0x19, 0x80, /* ---##--##- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x66, 0x00, /* -##--##--- */
+ 0xcc, 0x00, /* ##--##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 176 0xb0 '' */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0x00, 0x00, /* ---------- */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0x00, 0x00, /* ---------- */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0x00, 0x00, /* ---------- */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0x00, 0x00, /* ---------- */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0x00, 0x00, /* ---------- */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0x00, 0x00, /* ---------- */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0x00, 0x00, /* ---------- */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0x00, 0x00, /* ---------- */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 177 0xb1 '' */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0x55, 0x40, /* -#-#-#-#-# */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0x55, 0x40, /* -#-#-#-#-# */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0x55, 0x40, /* -#-#-#-#-# */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0x55, 0x40, /* -#-#-#-#-# */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0x55, 0x40, /* -#-#-#-#-# */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0x55, 0x40, /* -#-#-#-#-# */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0x55, 0x40, /* -#-#-#-#-# */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0x55, 0x40, /* -#-#-#-#-# */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0x55, 0x40, /* -#-#-#-#-# */
+
+ /* 178 0xb2 '' */
+ 0xff, 0xc0, /* ########## */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0xff, 0xc0, /* ########## */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0xff, 0xc0, /* ########## */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0xff, 0xc0, /* ########## */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0xff, 0xc0, /* ########## */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0xff, 0xc0, /* ########## */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0xff, 0xc0, /* ########## */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0xff, 0xc0, /* ########## */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+ 0xff, 0xc0, /* ########## */
+ 0xaa, 0x80, /* #-#-#-#-#- */
+
+ /* 179 0xb3 '' */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+
+ /* 180 0xb4 '' */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0xfc, 0x00, /* ######---- */
+ 0xfc, 0x00, /* ######---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+
+ /* 181 0xb5 '' */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0xfc, 0x00, /* ######---- */
+ 0xfc, 0x00, /* ######---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0xfc, 0x00, /* ######---- */
+ 0xfc, 0x00, /* ######---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+
+ /* 182 0xb6 '' */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0xf6, 0x00, /* ####-##--- */
+ 0xf6, 0x00, /* ####-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+
+ /* 183 0xb7 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0xfe, 0x00, /* #######--- */
+ 0xfe, 0x00, /* #######--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+
+ /* 184 0xb8 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0xfc, 0x00, /* ######---- */
+ 0xfc, 0x00, /* ######---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0xfc, 0x00, /* ######---- */
+ 0xfc, 0x00, /* ######---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+
+ /* 185 0xb9 '' */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0xf6, 0x00, /* ####-##--- */
+ 0xf6, 0x00, /* ####-##--- */
+ 0x06, 0x00, /* -----##--- */
+ 0xf6, 0x00, /* ####-##--- */
+ 0xf6, 0x00, /* ####-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+
+ /* 186 0xba '' */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+
+ /* 187 0xbb '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0xfe, 0x00, /* #######--- */
+ 0xfe, 0x00, /* #######--- */
+ 0x06, 0x00, /* -----##--- */
+ 0xf6, 0x00, /* ####-##--- */
+ 0xf6, 0x00, /* ####-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+
+ /* 188 0xbc '' */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0xf6, 0x00, /* ####-##--- */
+ 0xf6, 0x00, /* ####-##--- */
+ 0x06, 0x00, /* -----##--- */
+ 0xfe, 0x00, /* #######--- */
+ 0xfe, 0x00, /* #######--- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 189 0xbd '' */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0xfe, 0x00, /* #######--- */
+ 0xfe, 0x00, /* #######--- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 190 0xbe '' */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0xfc, 0x00, /* ######---- */
+ 0xfc, 0x00, /* ######---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0xfc, 0x00, /* ######---- */
+ 0xfc, 0x00, /* ######---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 191 0xbf '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0xfc, 0x00, /* ######---- */
+ 0xfc, 0x00, /* ######---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+
+ /* 192 0xc0 '' */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0f, 0xc0, /* ----###### */
+ 0x0f, 0xc0, /* ----###### */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 193 0xc1 '' */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 194 0xc2 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+
+ /* 195 0xc3 '' */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0f, 0xc0, /* ----###### */
+ 0x0f, 0xc0, /* ----###### */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+
+ /* 196 0xc4 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 197 0xc5 '' */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+
+ /* 198 0xc6 '' */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0f, 0xc0, /* ----###### */
+ 0x0f, 0xc0, /* ----###### */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0f, 0xc0, /* ----###### */
+ 0x0f, 0xc0, /* ----###### */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+
+ /* 199 0xc7 '' */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x37, 0xc0, /* --##-##### */
+ 0x37, 0xc0, /* --##-##### */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+
+ /* 200 0xc8 '' */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x37, 0xc0, /* --##-##### */
+ 0x37, 0xc0, /* --##-##### */
+ 0x30, 0x00, /* --##------ */
+ 0x3f, 0xc0, /* --######## */
+ 0x3f, 0xc0, /* --######## */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 201 0xc9 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0xc0, /* --######## */
+ 0x3f, 0xc0, /* --######## */
+ 0x30, 0x00, /* --##------ */
+ 0x37, 0xc0, /* --##-##### */
+ 0x37, 0xc0, /* --##-##### */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+
+ /* 202 0xca '' */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0xf7, 0xc0, /* ####-##### */
+ 0xf7, 0xc0, /* ####-##### */
+ 0x00, 0x00, /* ---------- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 203 0xcb '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x00, 0x00, /* ---------- */
+ 0xf7, 0xc0, /* ####-##### */
+ 0xf7, 0xc0, /* ####-##### */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+
+ /* 204 0xcc '' */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x37, 0xc0, /* --##-##### */
+ 0x37, 0xc0, /* --##-##### */
+ 0x30, 0x00, /* --##------ */
+ 0x37, 0xc0, /* --##-##### */
+ 0x37, 0xc0, /* --##-##### */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+
+ /* 205 0xcd '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x00, 0x00, /* ---------- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 206 0xce '' */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0xf7, 0xc0, /* ####-##### */
+ 0xf7, 0xc0, /* ####-##### */
+ 0x00, 0x00, /* ---------- */
+ 0xf7, 0xc0, /* ####-##### */
+ 0xf7, 0xc0, /* ####-##### */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+
+ /* 207 0xcf '' */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x00, 0x00, /* ---------- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 208 0xd0 '' */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 209 0xd1 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x00, 0x00, /* ---------- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+
+ /* 210 0xd2 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+
+ /* 211 0xd3 '' */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x3f, 0xc0, /* --######## */
+ 0x3f, 0xc0, /* --######## */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 212 0xd4 '' */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0f, 0xc0, /* ----###### */
+ 0x0f, 0xc0, /* ----###### */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0f, 0xc0, /* ----###### */
+ 0x0f, 0xc0, /* ----###### */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 213 0xd5 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0f, 0xc0, /* ----###### */
+ 0x0f, 0xc0, /* ----###### */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0f, 0xc0, /* ----###### */
+ 0x0f, 0xc0, /* ----###### */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+
+ /* 214 0xd6 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0xc0, /* --######## */
+ 0x3f, 0xc0, /* --######## */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+
+ /* 215 0xd7 '' */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+ 0x36, 0x00, /* --##-##--- */
+
+ /* 216 0xd8 '' */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x0c, 0x00, /* ----##---- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+
+ /* 217 0xd9 '' */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0xfc, 0x00, /* ######---- */
+ 0xfc, 0x00, /* ######---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 218 0xda '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0f, 0xc0, /* ----###### */
+ 0x0f, 0xc0, /* ----###### */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+
+ /* 219 0xdb '' */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+
+ /* 220 0xdc '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+
+ /* 221 0xdd '' */
+ 0xf8, 0x00, /* #####----- */
+ 0xf8, 0x00, /* #####----- */
+ 0xf8, 0x00, /* #####----- */
+ 0xf8, 0x00, /* #####----- */
+ 0xf8, 0x00, /* #####----- */
+ 0xf8, 0x00, /* #####----- */
+ 0xf8, 0x00, /* #####----- */
+ 0xf8, 0x00, /* #####----- */
+ 0xf8, 0x00, /* #####----- */
+ 0xf8, 0x00, /* #####----- */
+ 0xf8, 0x00, /* #####----- */
+ 0xf8, 0x00, /* #####----- */
+ 0xf8, 0x00, /* #####----- */
+ 0xf8, 0x00, /* #####----- */
+ 0xf8, 0x00, /* #####----- */
+ 0xf8, 0x00, /* #####----- */
+ 0xf8, 0x00, /* #####----- */
+ 0xf8, 0x00, /* #####----- */
+
+ /* 222 0xde '' */
+ 0x07, 0xc0, /* -----##### */
+ 0x07, 0xc0, /* -----##### */
+ 0x07, 0xc0, /* -----##### */
+ 0x07, 0xc0, /* -----##### */
+ 0x07, 0xc0, /* -----##### */
+ 0x07, 0xc0, /* -----##### */
+ 0x07, 0xc0, /* -----##### */
+ 0x07, 0xc0, /* -----##### */
+ 0x07, 0xc0, /* -----##### */
+ 0x07, 0xc0, /* -----##### */
+ 0x07, 0xc0, /* -----##### */
+ 0x07, 0xc0, /* -----##### */
+ 0x07, 0xc0, /* -----##### */
+ 0x07, 0xc0, /* -----##### */
+ 0x07, 0xc0, /* -----##### */
+ 0x07, 0xc0, /* -----##### */
+ 0x07, 0xc0, /* -----##### */
+ 0x07, 0xc0, /* -----##### */
+
+ /* 223 0xdf '' */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0xff, 0xc0, /* ########## */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 224 0xe0 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7d, 0x80, /* -#####-##- */
+ 0xc7, 0x00, /* ##---###-- */
+ 0xc6, 0x00, /* ##---##--- */
+ 0xc6, 0x00, /* ##---##--- */
+ 0xc6, 0x00, /* ##---##--- */
+ 0xc6, 0x00, /* ##---##--- */
+ 0xc6, 0x00, /* ##---##--- */
+ 0xc7, 0x00, /* ##---###-- */
+ 0x7d, 0x80, /* -#####-##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 225 0xe1 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3e, 0x00, /* --#####--- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x62, 0x00, /* -##---#--- */
+ 0x7f, 0x00, /* -#######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x7f, 0x00, /* -#######-- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+
+ /* 226 0xe2 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 227 0xe3 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 228 0xe4 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x60, 0x00, /* -##------- */
+ 0x30, 0x00, /* --##------ */
+ 0x18, 0x00, /* ---##----- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x06, 0x00, /* -----##--- */
+ 0x06, 0x00, /* -----##--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x18, 0x00, /* ---##----- */
+ 0x30, 0x00, /* --##------ */
+ 0x60, 0x00, /* -##------- */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 229 0xe5 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x1f, 0xc0, /* ---####### */
+ 0x33, 0x00, /* --##--##-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 230 0xe6 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x63, 0x80, /* -##---###- */
+ 0x7d, 0x80, /* -#####-##- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+
+ /* 231 0xe7 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x07, 0x00, /* -----###-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 232 0xe8 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x3f, 0x00, /* --######-- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 233 0xe9 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 234 0xea '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x73, 0x80, /* -###--###- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 235 0xeb '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x18, 0x00, /* ---##----- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 236 0xec '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 237 0xed '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x01, 0x80, /* -------##- */
+ 0x03, 0x00, /* ------##-- */
+ 0x3f, 0x00, /* --######-- */
+ 0x67, 0x80, /* -##--####- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x79, 0x80, /* -####--##- */
+ 0x3f, 0x00, /* --######-- */
+ 0x30, 0x00, /* --##------ */
+ 0x60, 0x00, /* -##------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 238 0xee '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x1f, 0x80, /* ---######- */
+ 0x30, 0x00, /* --##------ */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x7f, 0x80, /* -########- */
+ 0x60, 0x00, /* -##------- */
+ 0x60, 0x00, /* -##------- */
+ 0x30, 0x00, /* --##------ */
+ 0x1f, 0x80, /* ---######- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 239 0xef '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x61, 0x80, /* -##----##- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 240 0xf0 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 241 0xf1 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x7f, 0x80, /* -########- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 242 0xf2 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x30, 0x00, /* --##------ */
+ 0x18, 0x00, /* ---##----- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x06, 0x00, /* -----##--- */
+ 0x03, 0x00, /* ------##-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x06, 0x00, /* -----##--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x18, 0x00, /* ---##----- */
+ 0x30, 0x00, /* --##------ */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 243 0xf3 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x03, 0x00, /* ------##-- */
+ 0x06, 0x00, /* -----##--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x18, 0x00, /* ---##----- */
+ 0x30, 0x00, /* --##------ */
+ 0x30, 0x00, /* --##------ */
+ 0x18, 0x00, /* ---##----- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x06, 0x00, /* -----##--- */
+ 0x03, 0x00, /* ------##-- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 244 0xf4 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x07, 0x00, /* -----###-- */
+ 0x0d, 0x80, /* ----##-##- */
+ 0x0d, 0x80, /* ----##-##- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+
+ /* 245 0xf5 '' */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x6c, 0x00, /* -##-##---- */
+ 0x6c, 0x00, /* -##-##---- */
+ 0x38, 0x00, /* --###----- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 246 0xf6 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x7f, 0x80, /* -########- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 247 0xf7 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x39, 0x80, /* --###--##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x67, 0x00, /* -##--###-- */
+ 0x00, 0x00, /* ---------- */
+ 0x39, 0x80, /* --###--##- */
+ 0x6d, 0x80, /* -##-##-##- */
+ 0x67, 0x00, /* -##--###-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 248 0xf8 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 249 0xf9 '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x1c, 0x00, /* ---###---- */
+ 0x1c, 0x00, /* ---###---- */
+ 0x1c, 0x00, /* ---###---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 250 0xfa '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 251 0xfb '' */
+ 0x00, 0x00, /* ---------- */
+ 0x03, 0x80, /* ------###- */
+ 0x03, 0x80, /* ------###- */
+ 0x03, 0x00, /* ------##-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x03, 0x00, /* ------##-- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x63, 0x00, /* -##---##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x1b, 0x00, /* ---##-##-- */
+ 0x0f, 0x00, /* ----####-- */
+ 0x07, 0x00, /* -----###-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 252 0xfc '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3e, 0x00, /* --#####--- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 253 0xfd '' */
+ 0x00, 0x00, /* ---------- */
+ 0x1e, 0x00, /* ---####--- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x33, 0x00, /* --##--##-- */
+ 0x06, 0x00, /* -----##--- */
+ 0x0c, 0x00, /* ----##---- */
+ 0x18, 0x00, /* ---##----- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 254 0xfe '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x3f, 0x00, /* --######-- */
+ 0x3f, 0x00, /* --######-- */
+ 0x3f, 0x00, /* --######-- */
+ 0x3f, 0x00, /* --######-- */
+ 0x3f, 0x00, /* --######-- */
+ 0x3f, 0x00, /* --######-- */
+ 0x3f, 0x00, /* --######-- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+
+ /* 255 0xff '' */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+ 0x00, 0x00, /* ---------- */
+} };
+
+
+const struct font_desc font_ter_10x18 = {
+ .idx = TER10x18_IDX,
+ .name = "TER10x18",
+ .width = 10,
+ .height = 18,
+ .charcount = 256,
+ .data = fontdata_ter10x18.data,
+#ifdef __sparc__
+ .pref = 5,
+#else
+ .pref = -1,
+#endif
+};
diff --git a/lib/fonts/fonts.c b/lib/fonts/fonts.c
index 47e34950b665..a7f118b30171 100644
--- a/lib/fonts/fonts.c
+++ b/lib/fonts/fonts.c
@@ -54,6 +54,9 @@ static const struct font_desc *fonts[] = {
#ifdef CONFIG_FONT_6x10
&font_6x10,
#endif
+#ifdef CONFIG_FONT_TER10x18
+ &font_ter_10x18,
+#endif
#ifdef CONFIG_FONT_TER16x32
&font_ter_16x32,
#endif
diff --git a/lib/hweight.c b/lib/hweight.c
index c94586b62551..0dfcafc3fd39 100644
--- a/lib/hweight.c
+++ b/lib/hweight.c
@@ -4,8 +4,8 @@
#include <asm/types.h>
/**
- * hweightN - returns the hamming weight of a N-bit word
- * @x: the word to weigh
+ * DOC: __sw_hweightN - returns the hamming weight of a N-bit word
+ * @w: the word to weigh
*
* The Hamming Weight of a number is the total number of bits set in it.
*/
diff --git a/lib/math/div64.c b/lib/math/div64.c
index bf77b9843175..d1e92ea24fce 100644
--- a/lib/math/div64.c
+++ b/lib/math/div64.c
@@ -177,94 +177,157 @@ EXPORT_SYMBOL(div64_s64);
* Iterative div/mod for use when dividend is not expected to be much
* bigger than divisor.
*/
+#ifndef iter_div_u64_rem
u32 iter_div_u64_rem(u64 dividend, u32 divisor, u64 *remainder)
{
return __iter_div_u64_rem(dividend, divisor, remainder);
}
EXPORT_SYMBOL(iter_div_u64_rem);
+#endif
-#ifndef mul_u64_u64_div_u64
-u64 mul_u64_u64_div_u64(u64 a, u64 b, u64 c)
-{
- if (ilog2(a) + ilog2(b) <= 62)
- return div64_u64(a * b, c);
+#if !defined(mul_u64_add_u64_div_u64) || defined(test_mul_u64_add_u64_div_u64)
-#if defined(__SIZEOF_INT128__)
+#define mul_add(a, b, c) add_u64_u32(mul_u32_u32(a, b), c)
+#if defined(__SIZEOF_INT128__) && !defined(test_mul_u64_add_u64_div_u64)
+static inline u64 mul_u64_u64_add_u64(u64 *p_lo, u64 a, u64 b, u64 c)
+{
/* native 64x64=128 bits multiplication */
- u128 prod = (u128)a * b;
- u64 n_lo = prod, n_hi = prod >> 64;
+ u128 prod = (u128)a * b + c;
+ *p_lo = prod;
+ return prod >> 64;
+}
#else
-
- /* perform a 64x64=128 bits multiplication manually */
- u32 a_lo = a, a_hi = a >> 32, b_lo = b, b_hi = b >> 32;
+static inline u64 mul_u64_u64_add_u64(u64 *p_lo, u64 a, u64 b, u64 c)
+{
+ /* perform a 64x64=128 bits multiplication in 32bit chunks */
u64 x, y, z;
- x = (u64)a_lo * b_lo;
- y = (u64)a_lo * b_hi + (u32)(x >> 32);
- z = (u64)a_hi * b_hi + (u32)(y >> 32);
- y = (u64)a_hi * b_lo + (u32)y;
- z += (u32)(y >> 32);
- x = (y << 32) + (u32)x;
-
- u64 n_lo = x, n_hi = z;
+ /* Since (x-1)(x-1) + 2(x-1) == x.x - 1 two u32 can be added to a u64 */
+ x = mul_add(a, b, c);
+ y = mul_add(a, b >> 32, c >> 32);
+ y = add_u64_u32(y, x >> 32);
+ z = mul_add(a >> 32, b >> 32, y >> 32);
+ y = mul_add(a >> 32, b, y);
+ *p_lo = (y << 32) + (u32)x;
+ return add_u64_u32(z, y >> 32);
+}
+#endif
+#ifndef BITS_PER_ITER
+#define BITS_PER_ITER (__LONG_WIDTH__ >= 64 ? 32 : 16)
#endif
- /* make sure c is not zero, trigger runtime exception otherwise */
- if (unlikely(c == 0)) {
- unsigned long zero = 0;
+#if BITS_PER_ITER == 32
+#define mul_u64_long_add_u64(p_lo, a, b, c) mul_u64_u64_add_u64(p_lo, a, b, c)
+#define add_u64_long(a, b) ((a) + (b))
+#else
+#undef BITS_PER_ITER
+#define BITS_PER_ITER 16
+static inline u32 mul_u64_long_add_u64(u64 *p_lo, u64 a, u32 b, u64 c)
+{
+ u64 n_lo = mul_add(a, b, c);
+ u64 n_med = mul_add(a >> 32, b, c >> 32);
- OPTIMIZER_HIDE_VAR(zero);
- return ~0UL/zero;
- }
+ n_med = add_u64_u32(n_med, n_lo >> 32);
+ *p_lo = n_med << 32 | (u32)n_lo;
+ return n_med >> 32;
+}
+
+#define add_u64_long(a, b) add_u64_u32(a, b)
+#endif
+
+u64 mul_u64_add_u64_div_u64(u64 a, u64 b, u64 c, u64 d)
+{
+ unsigned long d_msig, q_digit;
+ unsigned int reps, d_z_hi;
+ u64 quotient, n_lo, n_hi;
+ u32 overflow;
- int shift = __builtin_ctzll(c);
+ n_hi = mul_u64_u64_add_u64(&n_lo, a, b, c);
- /* try reducing the fraction in case the dividend becomes <= 64 bits */
- if ((n_hi >> shift) == 0) {
- u64 n = shift ? (n_lo >> shift) | (n_hi << (64 - shift)) : n_lo;
+ if (!n_hi)
+ return div64_u64(n_lo, d);
- return div64_u64(n, c >> shift);
- /*
- * The remainder value if needed would be:
- * res = div64_u64_rem(n, c >> shift, &rem);
- * rem = (rem << shift) + (n_lo - (n << shift));
- */
- }
+ if (unlikely(n_hi >= d)) {
+ /* trigger runtime exception if divisor is zero */
+ if (d == 0) {
+ unsigned long zero = 0;
- if (n_hi >= c) {
+ OPTIMIZER_HIDE_VAR(zero);
+ return ~0UL/zero;
+ }
/* overflow: result is unrepresentable in a u64 */
- return -1;
+ return ~0ULL;
}
- /* Do the full 128 by 64 bits division */
-
- shift = __builtin_clzll(c);
- c <<= shift;
+ /* Left align the divisor, shifting the dividend to match */
+ d_z_hi = __builtin_clzll(d);
+ if (d_z_hi) {
+ d <<= d_z_hi;
+ n_hi = n_hi << d_z_hi | n_lo >> (64 - d_z_hi);
+ n_lo <<= d_z_hi;
+ }
- int p = 64 + shift;
- u64 res = 0;
- bool carry;
+ reps = 64 / BITS_PER_ITER;
+ /* Optimise loop count for small dividends */
+ if (!(u32)(n_hi >> 32)) {
+ reps -= 32 / BITS_PER_ITER;
+ n_hi = n_hi << 32 | n_lo >> 32;
+ n_lo <<= 32;
+ }
+#if BITS_PER_ITER == 16
+ if (!(u32)(n_hi >> 48)) {
+ reps--;
+ n_hi = add_u64_u32(n_hi << 16, n_lo >> 48);
+ n_lo <<= 16;
+ }
+#endif
- do {
- carry = n_hi >> 63;
- shift = carry ? 1 : __builtin_clzll(n_hi);
- if (p < shift)
- break;
- p -= shift;
- n_hi <<= shift;
- n_hi |= n_lo >> (64 - shift);
- n_lo <<= shift;
- if (carry || (n_hi >= c)) {
- n_hi -= c;
- res |= 1ULL << p;
+ /* Invert the dividend so we can use add instead of subtract. */
+ n_lo = ~n_lo;
+ n_hi = ~n_hi;
+
+ /*
+ * Get the most significant BITS_PER_ITER bits of the divisor.
+ * This is used to get a low 'guestimate' of the quotient digit.
+ */
+ d_msig = (d >> (64 - BITS_PER_ITER)) + 1;
+
+ /*
+ * Now do a 'long division' with BITS_PER_ITER bit 'digits'.
+ * The 'guess' quotient digit can be low and BITS_PER_ITER+1 bits.
+ * The worst case is dividing ~0 by 0x8000 which requires two subtracts.
+ */
+ quotient = 0;
+ while (reps--) {
+ q_digit = (unsigned long)(~n_hi >> (64 - 2 * BITS_PER_ITER)) / d_msig;
+ /* Shift 'n' left to align with the product q_digit * d */
+ overflow = n_hi >> (64 - BITS_PER_ITER);
+ n_hi = add_u64_u32(n_hi << BITS_PER_ITER, n_lo >> (64 - BITS_PER_ITER));
+ n_lo <<= BITS_PER_ITER;
+ /* Add product to negated divisor */
+ overflow += mul_u64_long_add_u64(&n_hi, d, q_digit, n_hi);
+ /* Adjust for the q_digit 'guestimate' being low */
+ while (overflow < 0xffffffff >> (32 - BITS_PER_ITER)) {
+ q_digit++;
+ n_hi += d;
+ overflow += n_hi < d;
}
- } while (n_hi);
- /* The remainder value if needed would be n_hi << p */
+ quotient = add_u64_long(quotient << BITS_PER_ITER, q_digit);
+ }
- return res;
+ /*
+ * The above only ensures the remainder doesn't overflow,
+ * it can still be possible to add (aka subtract) another copy
+ * of the divisor.
+ */
+ if ((n_hi + d) > n_hi)
+ quotient++;
+ return quotient;
}
-EXPORT_SYMBOL(mul_u64_u64_div_u64);
+#if !defined(test_mul_u64_add_u64_div_u64)
+EXPORT_SYMBOL(mul_u64_add_u64_div_u64);
+#endif
#endif
diff --git a/lib/math/test_mul_u64_u64_div_u64.c b/lib/math/test_mul_u64_u64_div_u64.c
index 58d058de4e73..338d014f0c73 100644
--- a/lib/math/test_mul_u64_u64_div_u64.c
+++ b/lib/math/test_mul_u64_u64_div_u64.c
@@ -10,80 +10,141 @@
#include <linux/printk.h>
#include <linux/math64.h>
-typedef struct { u64 a; u64 b; u64 c; u64 result; } test_params;
+typedef struct { u64 a; u64 b; u64 d; u64 result; uint round_up;} test_params;
static test_params test_values[] = {
/* this contains many edge values followed by a couple random values */
-{ 0xb, 0x7, 0x3, 0x19 },
-{ 0xffff0000, 0xffff0000, 0xf, 0x1110eeef00000000 },
-{ 0xffffffff, 0xffffffff, 0x1, 0xfffffffe00000001 },
-{ 0xffffffff, 0xffffffff, 0x2, 0x7fffffff00000000 },
-{ 0x1ffffffff, 0xffffffff, 0x2, 0xfffffffe80000000 },
-{ 0x1ffffffff, 0xffffffff, 0x3, 0xaaaaaaa9aaaaaaab },
-{ 0x1ffffffff, 0x1ffffffff, 0x4, 0xffffffff00000000 },
-{ 0xffff000000000000, 0xffff000000000000, 0xffff000000000001, 0xfffeffffffffffff },
-{ 0x3333333333333333, 0x3333333333333333, 0x5555555555555555, 0x1eb851eb851eb851 },
-{ 0x7fffffffffffffff, 0x2, 0x3, 0x5555555555555554 },
-{ 0xffffffffffffffff, 0x2, 0x8000000000000000, 0x3 },
-{ 0xffffffffffffffff, 0x2, 0xc000000000000000, 0x2 },
-{ 0xffffffffffffffff, 0x4000000000000004, 0x8000000000000000, 0x8000000000000007 },
-{ 0xffffffffffffffff, 0x4000000000000001, 0x8000000000000000, 0x8000000000000001 },
-{ 0xffffffffffffffff, 0x8000000000000001, 0xffffffffffffffff, 0x8000000000000001 },
-{ 0xfffffffffffffffe, 0x8000000000000001, 0xffffffffffffffff, 0x8000000000000000 },
-{ 0xffffffffffffffff, 0x8000000000000001, 0xfffffffffffffffe, 0x8000000000000001 },
-{ 0xffffffffffffffff, 0x8000000000000001, 0xfffffffffffffffd, 0x8000000000000002 },
-{ 0x7fffffffffffffff, 0xffffffffffffffff, 0xc000000000000000, 0xaaaaaaaaaaaaaaa8 },
-{ 0xffffffffffffffff, 0x7fffffffffffffff, 0xa000000000000000, 0xccccccccccccccca },
-{ 0xffffffffffffffff, 0x7fffffffffffffff, 0x9000000000000000, 0xe38e38e38e38e38b },
-{ 0x7fffffffffffffff, 0x7fffffffffffffff, 0x5000000000000000, 0xccccccccccccccc9 },
-{ 0xffffffffffffffff, 0xfffffffffffffffe, 0xffffffffffffffff, 0xfffffffffffffffe },
-{ 0xe6102d256d7ea3ae, 0x70a77d0be4c31201, 0xd63ec35ab3220357, 0x78f8bf8cc86c6e18 },
-{ 0xf53bae05cb86c6e1, 0x3847b32d2f8d32e0, 0xcfd4f55a647f403c, 0x42687f79d8998d35 },
-{ 0x9951c5498f941092, 0x1f8c8bfdf287a251, 0xa3c8dc5f81ea3fe2, 0x1d887cb25900091f },
-{ 0x374fee9daa1bb2bb, 0x0d0bfbff7b8ae3ef, 0xc169337bd42d5179, 0x03bb2dbaffcbb961 },
-{ 0xeac0d03ac10eeaf0, 0x89be05dfa162ed9b, 0x92bb1679a41f0e4b, 0xdc5f5cc9e270d216 },
+{ 0xb, 0x7, 0x3, 0x19, 1 },
+{ 0xffff0000, 0xffff0000, 0xf, 0x1110eeef00000000, 0 },
+{ 0xffffffff, 0xffffffff, 0x1, 0xfffffffe00000001, 0 },
+{ 0xffffffff, 0xffffffff, 0x2, 0x7fffffff00000000, 1 },
+{ 0x1ffffffff, 0xffffffff, 0x2, 0xfffffffe80000000, 1 },
+{ 0x1ffffffff, 0xffffffff, 0x3, 0xaaaaaaa9aaaaaaab, 0 },
+{ 0x1ffffffff, 0x1ffffffff, 0x4, 0xffffffff00000000, 1 },
+{ 0xffff000000000000, 0xffff000000000000, 0xffff000000000001, 0xfffeffffffffffff, 1 },
+{ 0x3333333333333333, 0x3333333333333333, 0x5555555555555555, 0x1eb851eb851eb851, 1 },
+{ 0x7fffffffffffffff, 0x2, 0x3, 0x5555555555555554, 1 },
+{ 0xffffffffffffffff, 0x2, 0x8000000000000000, 0x3, 1 },
+{ 0xffffffffffffffff, 0x2, 0xc000000000000000, 0x2, 1 },
+{ 0xffffffffffffffff, 0x4000000000000004, 0x8000000000000000, 0x8000000000000007, 1 },
+{ 0xffffffffffffffff, 0x4000000000000001, 0x8000000000000000, 0x8000000000000001, 1 },
+{ 0xffffffffffffffff, 0x8000000000000001, 0xffffffffffffffff, 0x8000000000000001, 0 },
+{ 0xfffffffffffffffe, 0x8000000000000001, 0xffffffffffffffff, 0x8000000000000000, 1 },
+{ 0xffffffffffffffff, 0x8000000000000001, 0xfffffffffffffffe, 0x8000000000000001, 1 },
+{ 0xffffffffffffffff, 0x8000000000000001, 0xfffffffffffffffd, 0x8000000000000002, 1 },
+{ 0x7fffffffffffffff, 0xffffffffffffffff, 0xc000000000000000, 0xaaaaaaaaaaaaaaa8, 1 },
+{ 0xffffffffffffffff, 0x7fffffffffffffff, 0xa000000000000000, 0xccccccccccccccca, 1 },
+{ 0xffffffffffffffff, 0x7fffffffffffffff, 0x9000000000000000, 0xe38e38e38e38e38b, 1 },
+{ 0x7fffffffffffffff, 0x7fffffffffffffff, 0x5000000000000000, 0xccccccccccccccc9, 1 },
+{ 0xffffffffffffffff, 0xfffffffffffffffe, 0xffffffffffffffff, 0xfffffffffffffffe, 0 },
+{ 0xe6102d256d7ea3ae, 0x70a77d0be4c31201, 0xd63ec35ab3220357, 0x78f8bf8cc86c6e18, 1 },
+{ 0xf53bae05cb86c6e1, 0x3847b32d2f8d32e0, 0xcfd4f55a647f403c, 0x42687f79d8998d35, 1 },
+{ 0x9951c5498f941092, 0x1f8c8bfdf287a251, 0xa3c8dc5f81ea3fe2, 0x1d887cb25900091f, 1 },
+{ 0x374fee9daa1bb2bb, 0x0d0bfbff7b8ae3ef, 0xc169337bd42d5179, 0x03bb2dbaffcbb961, 1 },
+{ 0xeac0d03ac10eeaf0, 0x89be05dfa162ed9b, 0x92bb1679a41f0e4b, 0xdc5f5cc9e270d216, 1 },
};
/*
* The above table can be verified with the following shell script:
- *
- * #!/bin/sh
- * sed -ne 's/^{ \+\(.*\), \+\(.*\), \+\(.*\), \+\(.*\) },$/\1 \2 \3 \4/p' \
- * lib/math/test_mul_u64_u64_div_u64.c |
- * while read a b c r; do
- * expected=$( printf "obase=16; ibase=16; %X * %X / %X\n" $a $b $c | bc )
- * given=$( printf "%X\n" $r )
- * if [ "$expected" = "$given" ]; then
- * echo "$a * $b / $c = $r OK"
- * else
- * echo "$a * $b / $c = $r is wrong" >&2
- * echo "should be equivalent to 0x$expected" >&2
- * exit 1
- * fi
- * done
+
+#!/bin/sh
+sed -ne 's/^{ \+\(.*\), \+\(.*\), \+\(.*\), \+\(.*\), \+\(.*\) },$/\1 \2 \3 \4 \5/p' \
+ lib/math/test_mul_u64_u64_div_u64.c |
+while read a b d r e; do
+ expected=$( printf "obase=16; ibase=16; %X * %X / %X\n" $a $b $d | bc )
+ given=$( printf "%X\n" $r )
+ if [ "$expected" = "$given" ]; then
+ echo "$a * $b / $d = $r OK"
+ else
+ echo "$a * $b / $d = $r is wrong" >&2
+ echo "should be equivalent to 0x$expected" >&2
+ exit 1
+ fi
+ expected=$( printf "obase=16; ibase=16; (%X * %X + %X) / %X\n" $a $b $((d-1)) $d | bc )
+ given=$( printf "%X\n" $((r + e)) )
+ if [ "$expected" = "$given" ]; then
+ echo "$a * $b +/ $d = $(printf '%#x' $((r + e))) OK"
+ else
+ echo "$a * $b +/ $d = $(printf '%#x' $((r + e))) is wrong" >&2
+ echo "should be equivalent to 0x$expected" >&2
+ exit 1
+ fi
+done
+
*/
-static int __init test_init(void)
+static u64 test_mul_u64_add_u64_div_u64(u64 a, u64 b, u64 c, u64 d);
+#if __LONG_WIDTH__ >= 64
+#define TEST_32BIT_DIV
+static u64 test_mul_u64_add_u64_div_u64_32bit(u64 a, u64 b, u64 c, u64 d);
+#endif
+
+static int __init test_run(unsigned int fn_no, const char *fn_name)
{
+ u64 start_time;
+ int errors = 0;
+ int tests = 0;
int i;
- pr_info("Starting mul_u64_u64_div_u64() test\n");
+ start_time = ktime_get_ns();
for (i = 0; i < ARRAY_SIZE(test_values); i++) {
u64 a = test_values[i].a;
u64 b = test_values[i].b;
- u64 c = test_values[i].c;
+ u64 d = test_values[i].d;
u64 expected_result = test_values[i].result;
- u64 result = mul_u64_u64_div_u64(a, b, c);
+ u64 result, result_up;
+
+ switch (fn_no) {
+ default:
+ result = mul_u64_u64_div_u64(a, b, d);
+ result_up = mul_u64_u64_div_u64_roundup(a, b, d);
+ break;
+ case 1:
+ result = test_mul_u64_add_u64_div_u64(a, b, 0, d);
+ result_up = test_mul_u64_add_u64_div_u64(a, b, d - 1, d);
+ break;
+#ifdef TEST_32BIT_DIV
+ case 2:
+ result = test_mul_u64_add_u64_div_u64_32bit(a, b, 0, d);
+ result_up = test_mul_u64_add_u64_div_u64_32bit(a, b, d - 1, d);
+ break;
+#endif
+ }
+
+ tests += 2;
if (result != expected_result) {
- pr_err("ERROR: 0x%016llx * 0x%016llx / 0x%016llx\n", a, b, c);
+ pr_err("ERROR: 0x%016llx * 0x%016llx / 0x%016llx\n", a, b, d);
pr_err("ERROR: expected result: %016llx\n", expected_result);
pr_err("ERROR: obtained result: %016llx\n", result);
+ errors++;
+ }
+ expected_result += test_values[i].round_up;
+ if (result_up != expected_result) {
+ pr_err("ERROR: 0x%016llx * 0x%016llx +/ 0x%016llx\n", a, b, d);
+ pr_err("ERROR: expected result: %016llx\n", expected_result);
+ pr_err("ERROR: obtained result: %016llx\n", result_up);
+ errors++;
}
}
- pr_info("Completed mul_u64_u64_div_u64() test\n");
+ pr_info("Completed %s() test, %d tests, %d errors, %llu ns\n",
+ fn_name, tests, errors, ktime_get_ns() - start_time);
+ return errors;
+}
+
+static int __init test_init(void)
+{
+ pr_info("Starting mul_u64_u64_div_u64() test\n");
+ if (test_run(0, "mul_u64_u64_div_u64"))
+ return -EINVAL;
+ if (test_run(1, "test_mul_u64_u64_div_u64"))
+ return -EINVAL;
+#ifdef TEST_32BIT_DIV
+ if (test_run(2, "test_mul_u64_u64_div_u64_32bit"))
+ return -EINVAL;
+#endif
return 0;
}
@@ -91,6 +152,36 @@ static void __exit test_exit(void)
{
}
+/* Compile the generic mul_u64_add_u64_div_u64() code */
+#undef __div64_32
+#define __div64_32 __div64_32
+#define div_s64_rem div_s64_rem
+#define div64_u64_rem div64_u64_rem
+#define div64_u64 div64_u64
+#define div64_s64 div64_s64
+#define iter_div_u64_rem iter_div_u64_rem
+
+#undef mul_u64_add_u64_div_u64
+#define mul_u64_add_u64_div_u64 test_mul_u64_add_u64_div_u64
+#define test_mul_u64_add_u64_div_u64 test_mul_u64_add_u64_div_u64
+
+#include "div64.c"
+
+#ifdef TEST_32BIT_DIV
+/* Recompile the generic code for 32bit long */
+#undef test_mul_u64_add_u64_div_u64
+#define test_mul_u64_add_u64_div_u64 test_mul_u64_add_u64_div_u64_32bit
+#undef BITS_PER_ITER
+#define BITS_PER_ITER 16
+
+#define mul_u64_u64_add_u64 mul_u64_u64_add_u64_32bit
+#undef mul_u64_long_add_u64
+#undef add_u64_long
+#undef mul_add
+
+#include "div64.c"
+#endif
+
module_init(test_init);
module_exit(test_exit);
diff --git a/lib/plist.c b/lib/plist.c
index 330febb4bd7d..ba677c31e8f3 100644
--- a/lib/plist.c
+++ b/lib/plist.c
@@ -47,8 +47,8 @@ static void plist_check_list(struct list_head *top)
plist_check_prev_next(top, prev, next);
while (next != top) {
- WRITE_ONCE(prev, next);
- WRITE_ONCE(next, prev->next);
+ prev = next;
+ next = prev->next;
plist_check_prev_next(top, prev, next);
}
}
diff --git a/lib/raid6/recov_rvv.c b/lib/raid6/recov_rvv.c
index 5f779719c3d3..40c393206b6a 100644
--- a/lib/raid6/recov_rvv.c
+++ b/lib/raid6/recov_rvv.c
@@ -4,13 +4,8 @@
* Author: Chunyan Zhang <zhangchunyan@iscas.ac.cn>
*/
-#include <asm/vector.h>
#include <linux/raid/pq.h>
-
-static int rvv_has_vector(void)
-{
- return has_vector();
-}
+#include "rvv.h"
static void __raid6_2data_recov_rvv(int bytes, u8 *p, u8 *q, u8 *dp,
u8 *dq, const u8 *pbmul,
diff --git a/lib/raid6/rvv.c b/lib/raid6/rvv.c
index 89da5fc247aa..75c9dafedb28 100644
--- a/lib/raid6/rvv.c
+++ b/lib/raid6/rvv.c
@@ -9,22 +9,17 @@
* Copyright 2002-2004 H. Peter Anvin
*/
-#include <asm/vector.h>
-#include <linux/raid/pq.h>
#include "rvv.h"
-#define NSIZE (riscv_v_vsize / 32) /* NSIZE = vlenb */
-
-static int rvv_has_vector(void)
-{
- return has_vector();
-}
+#ifdef __riscv_vector
+#error "This code must be built without compiler support for vector"
+#endif
static void raid6_rvv1_gen_syndrome_real(int disks, unsigned long bytes, void **ptrs)
{
u8 **dptr = (u8 **)ptrs;
u8 *p, *q;
- unsigned long vl, d;
+ unsigned long vl, d, nsize;
int z, z0;
z0 = disks - 3; /* Highest data disk */
@@ -38,8 +33,10 @@ static void raid6_rvv1_gen_syndrome_real(int disks, unsigned long bytes, void **
: "=&r" (vl)
);
+ nsize = vl;
+
/* v0:wp0, v1:wq0, v2:wd0/w20, v3:w10 */
- for (d = 0; d < bytes; d += NSIZE * 1) {
+ for (d = 0; d < bytes; d += nsize * 1) {
/* wq$$ = wp$$ = *(unative_t *)&dptr[z0][d+$$*NSIZE]; */
asm volatile (".option push\n"
".option arch,+v\n"
@@ -47,7 +44,7 @@ static void raid6_rvv1_gen_syndrome_real(int disks, unsigned long bytes, void **
"vmv.v.v v1, v0\n"
".option pop\n"
: :
- [wp0]"r"(&dptr[z0][d + 0 * NSIZE])
+ [wp0]"r"(&dptr[z0][d + 0 * nsize])
);
for (z = z0 - 1 ; z >= 0 ; z--) {
@@ -71,7 +68,7 @@ static void raid6_rvv1_gen_syndrome_real(int disks, unsigned long bytes, void **
"vxor.vv v0, v0, v2\n"
".option pop\n"
: :
- [wd0]"r"(&dptr[z][d + 0 * NSIZE]),
+ [wd0]"r"(&dptr[z][d + 0 * nsize]),
[x1d]"r"(0x1d)
);
}
@@ -86,8 +83,8 @@ static void raid6_rvv1_gen_syndrome_real(int disks, unsigned long bytes, void **
"vse8.v v1, (%[wq0])\n"
".option pop\n"
: :
- [wp0]"r"(&p[d + NSIZE * 0]),
- [wq0]"r"(&q[d + NSIZE * 0])
+ [wp0]"r"(&p[d + nsize * 0]),
+ [wq0]"r"(&q[d + nsize * 0])
);
}
}
@@ -97,7 +94,7 @@ static void raid6_rvv1_xor_syndrome_real(int disks, int start, int stop,
{
u8 **dptr = (u8 **)ptrs;
u8 *p, *q;
- unsigned long vl, d;
+ unsigned long vl, d, nsize;
int z, z0;
z0 = stop; /* P/Q right side optimization */
@@ -111,8 +108,10 @@ static void raid6_rvv1_xor_syndrome_real(int disks, int start, int stop,
: "=&r" (vl)
);
+ nsize = vl;
+
/* v0:wp0, v1:wq0, v2:wd0/w20, v3:w10 */
- for (d = 0 ; d < bytes ; d += NSIZE * 1) {
+ for (d = 0 ; d < bytes ; d += nsize * 1) {
/* wq$$ = wp$$ = *(unative_t *)&dptr[z0][d+$$*NSIZE]; */
asm volatile (".option push\n"
".option arch,+v\n"
@@ -120,7 +119,7 @@ static void raid6_rvv1_xor_syndrome_real(int disks, int start, int stop,
"vmv.v.v v1, v0\n"
".option pop\n"
: :
- [wp0]"r"(&dptr[z0][d + 0 * NSIZE])
+ [wp0]"r"(&dptr[z0][d + 0 * nsize])
);
/* P/Q data pages */
@@ -145,7 +144,7 @@ static void raid6_rvv1_xor_syndrome_real(int disks, int start, int stop,
"vxor.vv v0, v0, v2\n"
".option pop\n"
: :
- [wd0]"r"(&dptr[z][d + 0 * NSIZE]),
+ [wd0]"r"(&dptr[z][d + 0 * nsize]),
[x1d]"r"(0x1d)
);
}
@@ -185,8 +184,8 @@ static void raid6_rvv1_xor_syndrome_real(int disks, int start, int stop,
"vse8.v v3, (%[wq0])\n"
".option pop\n"
: :
- [wp0]"r"(&p[d + NSIZE * 0]),
- [wq0]"r"(&q[d + NSIZE * 0])
+ [wp0]"r"(&p[d + nsize * 0]),
+ [wq0]"r"(&q[d + nsize * 0])
);
}
}
@@ -195,7 +194,7 @@ static void raid6_rvv2_gen_syndrome_real(int disks, unsigned long bytes, void **
{
u8 **dptr = (u8 **)ptrs;
u8 *p, *q;
- unsigned long vl, d;
+ unsigned long vl, d, nsize;
int z, z0;
z0 = disks - 3; /* Highest data disk */
@@ -209,11 +208,13 @@ static void raid6_rvv2_gen_syndrome_real(int disks, unsigned long bytes, void **
: "=&r" (vl)
);
+ nsize = vl;
+
/*
* v0:wp0, v1:wq0, v2:wd0/w20, v3:w10
* v4:wp1, v5:wq1, v6:wd1/w21, v7:w11
*/
- for (d = 0; d < bytes; d += NSIZE * 2) {
+ for (d = 0; d < bytes; d += nsize * 2) {
/* wq$$ = wp$$ = *(unative_t *)&dptr[z0][d+$$*NSIZE]; */
asm volatile (".option push\n"
".option arch,+v\n"
@@ -223,8 +224,8 @@ static void raid6_rvv2_gen_syndrome_real(int disks, unsigned long bytes, void **
"vmv.v.v v5, v4\n"
".option pop\n"
: :
- [wp0]"r"(&dptr[z0][d + 0 * NSIZE]),
- [wp1]"r"(&dptr[z0][d + 1 * NSIZE])
+ [wp0]"r"(&dptr[z0][d + 0 * nsize]),
+ [wp1]"r"(&dptr[z0][d + 1 * nsize])
);
for (z = z0 - 1; z >= 0; z--) {
@@ -256,8 +257,8 @@ static void raid6_rvv2_gen_syndrome_real(int disks, unsigned long bytes, void **
"vxor.vv v4, v4, v6\n"
".option pop\n"
: :
- [wd0]"r"(&dptr[z][d + 0 * NSIZE]),
- [wd1]"r"(&dptr[z][d + 1 * NSIZE]),
+ [wd0]"r"(&dptr[z][d + 0 * nsize]),
+ [wd1]"r"(&dptr[z][d + 1 * nsize]),
[x1d]"r"(0x1d)
);
}
@@ -274,10 +275,10 @@ static void raid6_rvv2_gen_syndrome_real(int disks, unsigned long bytes, void **
"vse8.v v5, (%[wq1])\n"
".option pop\n"
: :
- [wp0]"r"(&p[d + NSIZE * 0]),
- [wq0]"r"(&q[d + NSIZE * 0]),
- [wp1]"r"(&p[d + NSIZE * 1]),
- [wq1]"r"(&q[d + NSIZE * 1])
+ [wp0]"r"(&p[d + nsize * 0]),
+ [wq0]"r"(&q[d + nsize * 0]),
+ [wp1]"r"(&p[d + nsize * 1]),
+ [wq1]"r"(&q[d + nsize * 1])
);
}
}
@@ -287,7 +288,7 @@ static void raid6_rvv2_xor_syndrome_real(int disks, int start, int stop,
{
u8 **dptr = (u8 **)ptrs;
u8 *p, *q;
- unsigned long vl, d;
+ unsigned long vl, d, nsize;
int z, z0;
z0 = stop; /* P/Q right side optimization */
@@ -301,11 +302,13 @@ static void raid6_rvv2_xor_syndrome_real(int disks, int start, int stop,
: "=&r" (vl)
);
+ nsize = vl;
+
/*
* v0:wp0, v1:wq0, v2:wd0/w20, v3:w10
* v4:wp1, v5:wq1, v6:wd1/w21, v7:w11
*/
- for (d = 0; d < bytes; d += NSIZE * 2) {
+ for (d = 0; d < bytes; d += nsize * 2) {
/* wq$$ = wp$$ = *(unative_t *)&dptr[z0][d+$$*NSIZE]; */
asm volatile (".option push\n"
".option arch,+v\n"
@@ -315,8 +318,8 @@ static void raid6_rvv2_xor_syndrome_real(int disks, int start, int stop,
"vmv.v.v v5, v4\n"
".option pop\n"
: :
- [wp0]"r"(&dptr[z0][d + 0 * NSIZE]),
- [wp1]"r"(&dptr[z0][d + 1 * NSIZE])
+ [wp0]"r"(&dptr[z0][d + 0 * nsize]),
+ [wp1]"r"(&dptr[z0][d + 1 * nsize])
);
/* P/Q data pages */
@@ -349,8 +352,8 @@ static void raid6_rvv2_xor_syndrome_real(int disks, int start, int stop,
"vxor.vv v4, v4, v6\n"
".option pop\n"
: :
- [wd0]"r"(&dptr[z][d + 0 * NSIZE]),
- [wd1]"r"(&dptr[z][d + 1 * NSIZE]),
+ [wd0]"r"(&dptr[z][d + 0 * nsize]),
+ [wd1]"r"(&dptr[z][d + 1 * nsize]),
[x1d]"r"(0x1d)
);
}
@@ -403,10 +406,10 @@ static void raid6_rvv2_xor_syndrome_real(int disks, int start, int stop,
"vse8.v v7, (%[wq1])\n"
".option pop\n"
: :
- [wp0]"r"(&p[d + NSIZE * 0]),
- [wq0]"r"(&q[d + NSIZE * 0]),
- [wp1]"r"(&p[d + NSIZE * 1]),
- [wq1]"r"(&q[d + NSIZE * 1])
+ [wp0]"r"(&p[d + nsize * 0]),
+ [wq0]"r"(&q[d + nsize * 0]),
+ [wp1]"r"(&p[d + nsize * 1]),
+ [wq1]"r"(&q[d + nsize * 1])
);
}
}
@@ -415,7 +418,7 @@ static void raid6_rvv4_gen_syndrome_real(int disks, unsigned long bytes, void **
{
u8 **dptr = (u8 **)ptrs;
u8 *p, *q;
- unsigned long vl, d;
+ unsigned long vl, d, nsize;
int z, z0;
z0 = disks - 3; /* Highest data disk */
@@ -429,13 +432,15 @@ static void raid6_rvv4_gen_syndrome_real(int disks, unsigned long bytes, void **
: "=&r" (vl)
);
+ nsize = vl;
+
/*
* v0:wp0, v1:wq0, v2:wd0/w20, v3:w10
* v4:wp1, v5:wq1, v6:wd1/w21, v7:w11
* v8:wp2, v9:wq2, v10:wd2/w22, v11:w12
* v12:wp3, v13:wq3, v14:wd3/w23, v15:w13
*/
- for (d = 0; d < bytes; d += NSIZE * 4) {
+ for (d = 0; d < bytes; d += nsize * 4) {
/* wq$$ = wp$$ = *(unative_t *)&dptr[z0][d+$$*NSIZE]; */
asm volatile (".option push\n"
".option arch,+v\n"
@@ -449,10 +454,10 @@ static void raid6_rvv4_gen_syndrome_real(int disks, unsigned long bytes, void **
"vmv.v.v v13, v12\n"
".option pop\n"
: :
- [wp0]"r"(&dptr[z0][d + 0 * NSIZE]),
- [wp1]"r"(&dptr[z0][d + 1 * NSIZE]),
- [wp2]"r"(&dptr[z0][d + 2 * NSIZE]),
- [wp3]"r"(&dptr[z0][d + 3 * NSIZE])
+ [wp0]"r"(&dptr[z0][d + 0 * nsize]),
+ [wp1]"r"(&dptr[z0][d + 1 * nsize]),
+ [wp2]"r"(&dptr[z0][d + 2 * nsize]),
+ [wp3]"r"(&dptr[z0][d + 3 * nsize])
);
for (z = z0 - 1; z >= 0; z--) {
@@ -500,10 +505,10 @@ static void raid6_rvv4_gen_syndrome_real(int disks, unsigned long bytes, void **
"vxor.vv v12, v12, v14\n"
".option pop\n"
: :
- [wd0]"r"(&dptr[z][d + 0 * NSIZE]),
- [wd1]"r"(&dptr[z][d + 1 * NSIZE]),
- [wd2]"r"(&dptr[z][d + 2 * NSIZE]),
- [wd3]"r"(&dptr[z][d + 3 * NSIZE]),
+ [wd0]"r"(&dptr[z][d + 0 * nsize]),
+ [wd1]"r"(&dptr[z][d + 1 * nsize]),
+ [wd2]"r"(&dptr[z][d + 2 * nsize]),
+ [wd3]"r"(&dptr[z][d + 3 * nsize]),
[x1d]"r"(0x1d)
);
}
@@ -524,14 +529,14 @@ static void raid6_rvv4_gen_syndrome_real(int disks, unsigned long bytes, void **
"vse8.v v13, (%[wq3])\n"
".option pop\n"
: :
- [wp0]"r"(&p[d + NSIZE * 0]),
- [wq0]"r"(&q[d + NSIZE * 0]),
- [wp1]"r"(&p[d + NSIZE * 1]),
- [wq1]"r"(&q[d + NSIZE * 1]),
- [wp2]"r"(&p[d + NSIZE * 2]),
- [wq2]"r"(&q[d + NSIZE * 2]),
- [wp3]"r"(&p[d + NSIZE * 3]),
- [wq3]"r"(&q[d + NSIZE * 3])
+ [wp0]"r"(&p[d + nsize * 0]),
+ [wq0]"r"(&q[d + nsize * 0]),
+ [wp1]"r"(&p[d + nsize * 1]),
+ [wq1]"r"(&q[d + nsize * 1]),
+ [wp2]"r"(&p[d + nsize * 2]),
+ [wq2]"r"(&q[d + nsize * 2]),
+ [wp3]"r"(&p[d + nsize * 3]),
+ [wq3]"r"(&q[d + nsize * 3])
);
}
}
@@ -541,7 +546,7 @@ static void raid6_rvv4_xor_syndrome_real(int disks, int start, int stop,
{
u8 **dptr = (u8 **)ptrs;
u8 *p, *q;
- unsigned long vl, d;
+ unsigned long vl, d, nsize;
int z, z0;
z0 = stop; /* P/Q right side optimization */
@@ -555,13 +560,15 @@ static void raid6_rvv4_xor_syndrome_real(int disks, int start, int stop,
: "=&r" (vl)
);
+ nsize = vl;
+
/*
* v0:wp0, v1:wq0, v2:wd0/w20, v3:w10
* v4:wp1, v5:wq1, v6:wd1/w21, v7:w11
* v8:wp2, v9:wq2, v10:wd2/w22, v11:w12
* v12:wp3, v13:wq3, v14:wd3/w23, v15:w13
*/
- for (d = 0; d < bytes; d += NSIZE * 4) {
+ for (d = 0; d < bytes; d += nsize * 4) {
/* wq$$ = wp$$ = *(unative_t *)&dptr[z0][d+$$*NSIZE]; */
asm volatile (".option push\n"
".option arch,+v\n"
@@ -575,10 +582,10 @@ static void raid6_rvv4_xor_syndrome_real(int disks, int start, int stop,
"vmv.v.v v13, v12\n"
".option pop\n"
: :
- [wp0]"r"(&dptr[z0][d + 0 * NSIZE]),
- [wp1]"r"(&dptr[z0][d + 1 * NSIZE]),
- [wp2]"r"(&dptr[z0][d + 2 * NSIZE]),
- [wp3]"r"(&dptr[z0][d + 3 * NSIZE])
+ [wp0]"r"(&dptr[z0][d + 0 * nsize]),
+ [wp1]"r"(&dptr[z0][d + 1 * nsize]),
+ [wp2]"r"(&dptr[z0][d + 2 * nsize]),
+ [wp3]"r"(&dptr[z0][d + 3 * nsize])
);
/* P/Q data pages */
@@ -627,10 +634,10 @@ static void raid6_rvv4_xor_syndrome_real(int disks, int start, int stop,
"vxor.vv v12, v12, v14\n"
".option pop\n"
: :
- [wd0]"r"(&dptr[z][d + 0 * NSIZE]),
- [wd1]"r"(&dptr[z][d + 1 * NSIZE]),
- [wd2]"r"(&dptr[z][d + 2 * NSIZE]),
- [wd3]"r"(&dptr[z][d + 3 * NSIZE]),
+ [wd0]"r"(&dptr[z][d + 0 * nsize]),
+ [wd1]"r"(&dptr[z][d + 1 * nsize]),
+ [wd2]"r"(&dptr[z][d + 2 * nsize]),
+ [wd3]"r"(&dptr[z][d + 3 * nsize]),
[x1d]"r"(0x1d)
);
}
@@ -709,14 +716,14 @@ static void raid6_rvv4_xor_syndrome_real(int disks, int start, int stop,
"vse8.v v15, (%[wq3])\n"
".option pop\n"
: :
- [wp0]"r"(&p[d + NSIZE * 0]),
- [wq0]"r"(&q[d + NSIZE * 0]),
- [wp1]"r"(&p[d + NSIZE * 1]),
- [wq1]"r"(&q[d + NSIZE * 1]),
- [wp2]"r"(&p[d + NSIZE * 2]),
- [wq2]"r"(&q[d + NSIZE * 2]),
- [wp3]"r"(&p[d + NSIZE * 3]),
- [wq3]"r"(&q[d + NSIZE * 3])
+ [wp0]"r"(&p[d + nsize * 0]),
+ [wq0]"r"(&q[d + nsize * 0]),
+ [wp1]"r"(&p[d + nsize * 1]),
+ [wq1]"r"(&q[d + nsize * 1]),
+ [wp2]"r"(&p[d + nsize * 2]),
+ [wq2]"r"(&q[d + nsize * 2]),
+ [wp3]"r"(&p[d + nsize * 3]),
+ [wq3]"r"(&q[d + nsize * 3])
);
}
}
@@ -725,7 +732,7 @@ static void raid6_rvv8_gen_syndrome_real(int disks, unsigned long bytes, void **
{
u8 **dptr = (u8 **)ptrs;
u8 *p, *q;
- unsigned long vl, d;
+ unsigned long vl, d, nsize;
int z, z0;
z0 = disks - 3; /* Highest data disk */
@@ -739,6 +746,8 @@ static void raid6_rvv8_gen_syndrome_real(int disks, unsigned long bytes, void **
: "=&r" (vl)
);
+ nsize = vl;
+
/*
* v0:wp0, v1:wq0, v2:wd0/w20, v3:w10
* v4:wp1, v5:wq1, v6:wd1/w21, v7:w11
@@ -749,7 +758,7 @@ static void raid6_rvv8_gen_syndrome_real(int disks, unsigned long bytes, void **
* v24:wp6, v25:wq6, v26:wd6/w26, v27:w16
* v28:wp7, v29:wq7, v30:wd7/w27, v31:w17
*/
- for (d = 0; d < bytes; d += NSIZE * 8) {
+ for (d = 0; d < bytes; d += nsize * 8) {
/* wq$$ = wp$$ = *(unative_t *)&dptr[z0][d+$$*NSIZE]; */
asm volatile (".option push\n"
".option arch,+v\n"
@@ -771,14 +780,14 @@ static void raid6_rvv8_gen_syndrome_real(int disks, unsigned long bytes, void **
"vmv.v.v v29, v28\n"
".option pop\n"
: :
- [wp0]"r"(&dptr[z0][d + 0 * NSIZE]),
- [wp1]"r"(&dptr[z0][d + 1 * NSIZE]),
- [wp2]"r"(&dptr[z0][d + 2 * NSIZE]),
- [wp3]"r"(&dptr[z0][d + 3 * NSIZE]),
- [wp4]"r"(&dptr[z0][d + 4 * NSIZE]),
- [wp5]"r"(&dptr[z0][d + 5 * NSIZE]),
- [wp6]"r"(&dptr[z0][d + 6 * NSIZE]),
- [wp7]"r"(&dptr[z0][d + 7 * NSIZE])
+ [wp0]"r"(&dptr[z0][d + 0 * nsize]),
+ [wp1]"r"(&dptr[z0][d + 1 * nsize]),
+ [wp2]"r"(&dptr[z0][d + 2 * nsize]),
+ [wp3]"r"(&dptr[z0][d + 3 * nsize]),
+ [wp4]"r"(&dptr[z0][d + 4 * nsize]),
+ [wp5]"r"(&dptr[z0][d + 5 * nsize]),
+ [wp6]"r"(&dptr[z0][d + 6 * nsize]),
+ [wp7]"r"(&dptr[z0][d + 7 * nsize])
);
for (z = z0 - 1; z >= 0; z--) {
@@ -858,14 +867,14 @@ static void raid6_rvv8_gen_syndrome_real(int disks, unsigned long bytes, void **
"vxor.vv v28, v28, v30\n"
".option pop\n"
: :
- [wd0]"r"(&dptr[z][d + 0 * NSIZE]),
- [wd1]"r"(&dptr[z][d + 1 * NSIZE]),
- [wd2]"r"(&dptr[z][d + 2 * NSIZE]),
- [wd3]"r"(&dptr[z][d + 3 * NSIZE]),
- [wd4]"r"(&dptr[z][d + 4 * NSIZE]),
- [wd5]"r"(&dptr[z][d + 5 * NSIZE]),
- [wd6]"r"(&dptr[z][d + 6 * NSIZE]),
- [wd7]"r"(&dptr[z][d + 7 * NSIZE]),
+ [wd0]"r"(&dptr[z][d + 0 * nsize]),
+ [wd1]"r"(&dptr[z][d + 1 * nsize]),
+ [wd2]"r"(&dptr[z][d + 2 * nsize]),
+ [wd3]"r"(&dptr[z][d + 3 * nsize]),
+ [wd4]"r"(&dptr[z][d + 4 * nsize]),
+ [wd5]"r"(&dptr[z][d + 5 * nsize]),
+ [wd6]"r"(&dptr[z][d + 6 * nsize]),
+ [wd7]"r"(&dptr[z][d + 7 * nsize]),
[x1d]"r"(0x1d)
);
}
@@ -894,22 +903,22 @@ static void raid6_rvv8_gen_syndrome_real(int disks, unsigned long bytes, void **
"vse8.v v29, (%[wq7])\n"
".option pop\n"
: :
- [wp0]"r"(&p[d + NSIZE * 0]),
- [wq0]"r"(&q[d + NSIZE * 0]),
- [wp1]"r"(&p[d + NSIZE * 1]),
- [wq1]"r"(&q[d + NSIZE * 1]),
- [wp2]"r"(&p[d + NSIZE * 2]),
- [wq2]"r"(&q[d + NSIZE * 2]),
- [wp3]"r"(&p[d + NSIZE * 3]),
- [wq3]"r"(&q[d + NSIZE * 3]),
- [wp4]"r"(&p[d + NSIZE * 4]),
- [wq4]"r"(&q[d + NSIZE * 4]),
- [wp5]"r"(&p[d + NSIZE * 5]),
- [wq5]"r"(&q[d + NSIZE * 5]),
- [wp6]"r"(&p[d + NSIZE * 6]),
- [wq6]"r"(&q[d + NSIZE * 6]),
- [wp7]"r"(&p[d + NSIZE * 7]),
- [wq7]"r"(&q[d + NSIZE * 7])
+ [wp0]"r"(&p[d + nsize * 0]),
+ [wq0]"r"(&q[d + nsize * 0]),
+ [wp1]"r"(&p[d + nsize * 1]),
+ [wq1]"r"(&q[d + nsize * 1]),
+ [wp2]"r"(&p[d + nsize * 2]),
+ [wq2]"r"(&q[d + nsize * 2]),
+ [wp3]"r"(&p[d + nsize * 3]),
+ [wq3]"r"(&q[d + nsize * 3]),
+ [wp4]"r"(&p[d + nsize * 4]),
+ [wq4]"r"(&q[d + nsize * 4]),
+ [wp5]"r"(&p[d + nsize * 5]),
+ [wq5]"r"(&q[d + nsize * 5]),
+ [wp6]"r"(&p[d + nsize * 6]),
+ [wq6]"r"(&q[d + nsize * 6]),
+ [wp7]"r"(&p[d + nsize * 7]),
+ [wq7]"r"(&q[d + nsize * 7])
);
}
}
@@ -919,7 +928,7 @@ static void raid6_rvv8_xor_syndrome_real(int disks, int start, int stop,
{
u8 **dptr = (u8 **)ptrs;
u8 *p, *q;
- unsigned long vl, d;
+ unsigned long vl, d, nsize;
int z, z0;
z0 = stop; /* P/Q right side optimization */
@@ -933,6 +942,8 @@ static void raid6_rvv8_xor_syndrome_real(int disks, int start, int stop,
: "=&r" (vl)
);
+ nsize = vl;
+
/*
* v0:wp0, v1:wq0, v2:wd0/w20, v3:w10
* v4:wp1, v5:wq1, v6:wd1/w21, v7:w11
@@ -943,7 +954,7 @@ static void raid6_rvv8_xor_syndrome_real(int disks, int start, int stop,
* v24:wp6, v25:wq6, v26:wd6/w26, v27:w16
* v28:wp7, v29:wq7, v30:wd7/w27, v31:w17
*/
- for (d = 0; d < bytes; d += NSIZE * 8) {
+ for (d = 0; d < bytes; d += nsize * 8) {
/* wq$$ = wp$$ = *(unative_t *)&dptr[z0][d+$$*NSIZE]; */
asm volatile (".option push\n"
".option arch,+v\n"
@@ -965,14 +976,14 @@ static void raid6_rvv8_xor_syndrome_real(int disks, int start, int stop,
"vmv.v.v v29, v28\n"
".option pop\n"
: :
- [wp0]"r"(&dptr[z0][d + 0 * NSIZE]),
- [wp1]"r"(&dptr[z0][d + 1 * NSIZE]),
- [wp2]"r"(&dptr[z0][d + 2 * NSIZE]),
- [wp3]"r"(&dptr[z0][d + 3 * NSIZE]),
- [wp4]"r"(&dptr[z0][d + 4 * NSIZE]),
- [wp5]"r"(&dptr[z0][d + 5 * NSIZE]),
- [wp6]"r"(&dptr[z0][d + 6 * NSIZE]),
- [wp7]"r"(&dptr[z0][d + 7 * NSIZE])
+ [wp0]"r"(&dptr[z0][d + 0 * nsize]),
+ [wp1]"r"(&dptr[z0][d + 1 * nsize]),
+ [wp2]"r"(&dptr[z0][d + 2 * nsize]),
+ [wp3]"r"(&dptr[z0][d + 3 * nsize]),
+ [wp4]"r"(&dptr[z0][d + 4 * nsize]),
+ [wp5]"r"(&dptr[z0][d + 5 * nsize]),
+ [wp6]"r"(&dptr[z0][d + 6 * nsize]),
+ [wp7]"r"(&dptr[z0][d + 7 * nsize])
);
/* P/Q data pages */
@@ -1053,14 +1064,14 @@ static void raid6_rvv8_xor_syndrome_real(int disks, int start, int stop,
"vxor.vv v28, v28, v30\n"
".option pop\n"
: :
- [wd0]"r"(&dptr[z][d + 0 * NSIZE]),
- [wd1]"r"(&dptr[z][d + 1 * NSIZE]),
- [wd2]"r"(&dptr[z][d + 2 * NSIZE]),
- [wd3]"r"(&dptr[z][d + 3 * NSIZE]),
- [wd4]"r"(&dptr[z][d + 4 * NSIZE]),
- [wd5]"r"(&dptr[z][d + 5 * NSIZE]),
- [wd6]"r"(&dptr[z][d + 6 * NSIZE]),
- [wd7]"r"(&dptr[z][d + 7 * NSIZE]),
+ [wd0]"r"(&dptr[z][d + 0 * nsize]),
+ [wd1]"r"(&dptr[z][d + 1 * nsize]),
+ [wd2]"r"(&dptr[z][d + 2 * nsize]),
+ [wd3]"r"(&dptr[z][d + 3 * nsize]),
+ [wd4]"r"(&dptr[z][d + 4 * nsize]),
+ [wd5]"r"(&dptr[z][d + 5 * nsize]),
+ [wd6]"r"(&dptr[z][d + 6 * nsize]),
+ [wd7]"r"(&dptr[z][d + 7 * nsize]),
[x1d]"r"(0x1d)
);
}
@@ -1191,22 +1202,22 @@ static void raid6_rvv8_xor_syndrome_real(int disks, int start, int stop,
"vse8.v v31, (%[wq7])\n"
".option pop\n"
: :
- [wp0]"r"(&p[d + NSIZE * 0]),
- [wq0]"r"(&q[d + NSIZE * 0]),
- [wp1]"r"(&p[d + NSIZE * 1]),
- [wq1]"r"(&q[d + NSIZE * 1]),
- [wp2]"r"(&p[d + NSIZE * 2]),
- [wq2]"r"(&q[d + NSIZE * 2]),
- [wp3]"r"(&p[d + NSIZE * 3]),
- [wq3]"r"(&q[d + NSIZE * 3]),
- [wp4]"r"(&p[d + NSIZE * 4]),
- [wq4]"r"(&q[d + NSIZE * 4]),
- [wp5]"r"(&p[d + NSIZE * 5]),
- [wq5]"r"(&q[d + NSIZE * 5]),
- [wp6]"r"(&p[d + NSIZE * 6]),
- [wq6]"r"(&q[d + NSIZE * 6]),
- [wp7]"r"(&p[d + NSIZE * 7]),
- [wq7]"r"(&q[d + NSIZE * 7])
+ [wp0]"r"(&p[d + nsize * 0]),
+ [wq0]"r"(&q[d + nsize * 0]),
+ [wp1]"r"(&p[d + nsize * 1]),
+ [wq1]"r"(&q[d + nsize * 1]),
+ [wp2]"r"(&p[d + nsize * 2]),
+ [wq2]"r"(&q[d + nsize * 2]),
+ [wp3]"r"(&p[d + nsize * 3]),
+ [wq3]"r"(&q[d + nsize * 3]),
+ [wp4]"r"(&p[d + nsize * 4]),
+ [wq4]"r"(&q[d + nsize * 4]),
+ [wp5]"r"(&p[d + nsize * 5]),
+ [wq5]"r"(&q[d + nsize * 5]),
+ [wp6]"r"(&p[d + nsize * 6]),
+ [wq6]"r"(&q[d + nsize * 6]),
+ [wp7]"r"(&p[d + nsize * 7]),
+ [wq7]"r"(&q[d + nsize * 7])
);
}
}
diff --git a/lib/raid6/rvv.h b/lib/raid6/rvv.h
index 94044a1b707b..6d0708a2c8a4 100644
--- a/lib/raid6/rvv.h
+++ b/lib/raid6/rvv.h
@@ -7,6 +7,23 @@
* Definitions for RISC-V RAID-6 code
*/
+#ifdef __KERNEL__
+#include <asm/vector.h>
+#else
+#define kernel_vector_begin()
+#define kernel_vector_end()
+#include <sys/auxv.h>
+#include <asm/hwcap.h>
+#define has_vector() (getauxval(AT_HWCAP) & COMPAT_HWCAP_ISA_V)
+#endif
+
+#include <linux/raid/pq.h>
+
+static int rvv_has_vector(void)
+{
+ return has_vector();
+}
+
#define RAID6_RVV_WRAPPER(_n) \
static void raid6_rvv ## _n ## _gen_syndrome(int disks, \
size_t bytes, void **ptrs) \
diff --git a/lib/raid6/test/Makefile b/lib/raid6/test/Makefile
index 8f2dd2210ba8..09bbe2b14cce 100644
--- a/lib/raid6/test/Makefile
+++ b/lib/raid6/test/Makefile
@@ -35,6 +35,11 @@ ifeq ($(ARCH),aarch64)
HAS_NEON = yes
endif
+ifeq ($(findstring riscv,$(ARCH)),riscv)
+ CFLAGS += -I../../../arch/riscv/include -DCONFIG_RISCV=1
+ HAS_RVV = yes
+endif
+
ifeq ($(findstring ppc,$(ARCH)),ppc)
CFLAGS += -I../../../arch/powerpc/include
HAS_ALTIVEC := $(shell printf '$(pound)include <altivec.h>\nvector int a;\n' |\
@@ -63,6 +68,9 @@ else ifeq ($(HAS_ALTIVEC),yes)
vpermxor1.o vpermxor2.o vpermxor4.o vpermxor8.o
else ifeq ($(ARCH),loongarch64)
OBJS += loongarch_simd.o recov_loongarch_simd.o
+else ifeq ($(HAS_RVV),yes)
+ OBJS += rvv.o recov_rvv.o
+ CFLAGS += -DCONFIG_RISCV_ISA_V=1
endif
.c.o:
diff --git a/lib/ratelimit.c b/lib/ratelimit.c
index 859c251b23ce..e2d65d3b1c35 100644
--- a/lib/ratelimit.c
+++ b/lib/ratelimit.c
@@ -27,7 +27,7 @@
int ___ratelimit(struct ratelimit_state *rs, const char *func)
{
/* Paired with WRITE_ONCE() in .proc_handler().
- * Changing two values seperately could be inconsistent
+ * Changing two values separately could be inconsistent
* and some message could be lost. (See: net_ratelimit_state).
*/
int interval = READ_ONCE(rs->interval);
diff --git a/lib/rbtree.c b/lib/rbtree.c
index 5114eda6309c..18d42bcf4ec9 100644
--- a/lib/rbtree.c
+++ b/lib/rbtree.c
@@ -460,35 +460,6 @@ void __rb_insert_augmented(struct rb_node *node, struct rb_root *root,
}
EXPORT_SYMBOL(__rb_insert_augmented);
-/*
- * This function returns the first node (in sort order) of the tree.
- */
-struct rb_node *rb_first(const struct rb_root *root)
-{
- struct rb_node *n;
-
- n = root->rb_node;
- if (!n)
- return NULL;
- while (n->rb_left)
- n = n->rb_left;
- return n;
-}
-EXPORT_SYMBOL(rb_first);
-
-struct rb_node *rb_last(const struct rb_root *root)
-{
- struct rb_node *n;
-
- n = root->rb_node;
- if (!n)
- return NULL;
- while (n->rb_right)
- n = n->rb_right;
- return n;
-}
-EXPORT_SYMBOL(rb_last);
-
struct rb_node *rb_next(const struct rb_node *node)
{
struct rb_node *parent;
diff --git a/lib/sys_info.c b/lib/sys_info.c
index 496f9151c9b6..f32a06ec9ed4 100644
--- a/lib/sys_info.c
+++ b/lib/sys_info.c
@@ -1,31 +1,35 @@
// SPDX-License-Identifier: GPL-2.0-only
-#include <linux/sched/debug.h>
+#include <linux/array_size.h>
+#include <linux/bitops.h>
+#include <linux/cleanup.h>
#include <linux/console.h>
+#include <linux/log2.h>
#include <linux/kernel.h>
#include <linux/ftrace.h>
-#include <linux/sysctl.h>
#include <linux/nmi.h>
+#include <linux/sched/debug.h>
+#include <linux/string.h>
+#include <linux/sysctl.h>
#include <linux/sys_info.h>
-struct sys_info_name {
- unsigned long bit;
- const char *name;
+static const char * const si_names[] = {
+ [ilog2(SYS_INFO_TASKS)] = "tasks",
+ [ilog2(SYS_INFO_MEM)] = "mem",
+ [ilog2(SYS_INFO_TIMERS)] = "timers",
+ [ilog2(SYS_INFO_LOCKS)] = "locks",
+ [ilog2(SYS_INFO_FTRACE)] = "ftrace",
+ [ilog2(SYS_INFO_PANIC_CONSOLE_REPLAY)] = "",
+ [ilog2(SYS_INFO_ALL_BT)] = "all_bt",
+ [ilog2(SYS_INFO_BLOCKED_TASKS)] = "blocked_tasks",
};
/*
- * When 'si_names' gets updated, please make sure the 'sys_info_avail'
- * below is updated accordingly.
+ * Default kernel sys_info mask.
+ * If a kernel module calls sys_info() with "parameter == 0", then
+ * this mask will be used.
*/
-static const struct sys_info_name si_names[] = {
- { SYS_INFO_TASKS, "tasks" },
- { SYS_INFO_MEM, "mem" },
- { SYS_INFO_TIMERS, "timers" },
- { SYS_INFO_LOCKS, "locks" },
- { SYS_INFO_FTRACE, "ftrace" },
- { SYS_INFO_ALL_CPU_BT, "all_bt" },
- { SYS_INFO_BLOCKED_TASKS, "blocked_tasks" },
-};
+static unsigned long kernel_si_mask;
/* Expecting string like "xxx_sys_info=tasks,mem,timers,locks,ftrace,..." */
unsigned long sys_info_parse_param(char *str)
@@ -36,12 +40,9 @@ unsigned long sys_info_parse_param(char *str)
s = str;
while ((name = strsep(&s, ",")) && *name) {
- for (i = 0; i < ARRAY_SIZE(si_names); i++) {
- if (!strcmp(name, si_names[i].name)) {
- si_bits |= si_names[i].bit;
- break;
- }
- }
+ i = match_string(si_names, ARRAY_SIZE(si_names), name);
+ if (i >= 0)
+ __set_bit(i, &si_bits);
}
return si_bits;
@@ -49,56 +50,93 @@ unsigned long sys_info_parse_param(char *str)
#ifdef CONFIG_SYSCTL
-static const char sys_info_avail[] __maybe_unused = "tasks,mem,timers,locks,ftrace,all_bt,blocked_tasks";
+static int sys_info_write_handler(const struct ctl_table *table,
+ void *buffer, size_t *lenp, loff_t *ppos,
+ unsigned long *si_bits_global)
+{
+ unsigned long si_bits;
+ int ret;
+
+ ret = proc_dostring(table, 1, buffer, lenp, ppos);
+ if (ret)
+ return ret;
+
+ si_bits = sys_info_parse_param(table->data);
+
+ /* The access to the global value is not synchronized. */
+ WRITE_ONCE(*si_bits_global, si_bits);
+
+ return 0;
+}
+
+static int sys_info_read_handler(const struct ctl_table *table,
+ void *buffer, size_t *lenp, loff_t *ppos,
+ unsigned long *si_bits_global)
+{
+ unsigned long si_bits;
+ unsigned int len = 0;
+ char *delim = "";
+ unsigned int i;
+
+ /* The access to the global value is not synchronized. */
+ si_bits = READ_ONCE(*si_bits_global);
+
+ for_each_set_bit(i, &si_bits, ARRAY_SIZE(si_names)) {
+ if (*si_names[i]) {
+ len += scnprintf(table->data + len, table->maxlen - len,
+ "%s%s", delim, si_names[i]);
+ delim = ",";
+ }
+ }
+
+ return proc_dostring(table, 0, buffer, lenp, ppos);
+}
int sysctl_sys_info_handler(const struct ctl_table *ro_table, int write,
void *buffer, size_t *lenp,
loff_t *ppos)
{
- char names[sizeof(sys_info_avail)];
struct ctl_table table;
- unsigned long *si_bits_global;
-
- si_bits_global = ro_table->data;
-
- if (write) {
- unsigned long si_bits;
- int ret;
-
- table = *ro_table;
- table.data = names;
- table.maxlen = sizeof(names);
- ret = proc_dostring(&table, write, buffer, lenp, ppos);
- if (ret)
- return ret;
-
- si_bits = sys_info_parse_param(names);
- /* The access to the global value is not synchronized. */
- WRITE_ONCE(*si_bits_global, si_bits);
- return 0;
- } else {
- /* for 'read' operation */
- char *delim = "";
- int i, len = 0;
-
- names[0] = '\0';
- for (i = 0; i < ARRAY_SIZE(si_names); i++) {
- if (*si_bits_global & si_names[i].bit) {
- len += scnprintf(names + len, sizeof(names) - len,
- "%s%s", delim, si_names[i].name);
- delim = ",";
- }
- }
+ unsigned int i;
+ size_t maxlen;
- table = *ro_table;
- table.data = names;
- table.maxlen = sizeof(names);
- return proc_dostring(&table, write, buffer, lenp, ppos);
- }
+ maxlen = 0;
+ for (i = 0; i < ARRAY_SIZE(si_names); i++)
+ maxlen += strlen(si_names[i]) + 1;
+
+ char *names __free(kfree) = kzalloc(maxlen, GFP_KERNEL);
+ if (!names)
+ return -ENOMEM;
+
+ table = *ro_table;
+ table.data = names;
+ table.maxlen = maxlen;
+
+ if (write)
+ return sys_info_write_handler(&table, buffer, lenp, ppos, ro_table->data);
+ else
+ return sys_info_read_handler(&table, buffer, lenp, ppos, ro_table->data);
+}
+
+static const struct ctl_table sys_info_sysctls[] = {
+ {
+ .procname = "kernel_sys_info",
+ .data = &kernel_si_mask,
+ .maxlen = sizeof(kernel_si_mask),
+ .mode = 0644,
+ .proc_handler = sysctl_sys_info_handler,
+ },
+};
+
+static int __init sys_info_sysctl_init(void)
+{
+ register_sysctl_init("kernel", sys_info_sysctls);
+ return 0;
}
+subsys_initcall(sys_info_sysctl_init);
#endif
-void sys_info(unsigned long si_mask)
+static void __sys_info(unsigned long si_mask)
{
if (si_mask & SYS_INFO_TASKS)
show_state();
@@ -115,9 +153,14 @@ void sys_info(unsigned long si_mask)
if (si_mask & SYS_INFO_FTRACE)
ftrace_dump(DUMP_ALL);
- if (si_mask & SYS_INFO_ALL_CPU_BT)
+ if (si_mask & SYS_INFO_ALL_BT)
trigger_all_cpu_backtrace();
if (si_mask & SYS_INFO_BLOCKED_TASKS)
show_state_filter(TASK_UNINTERRUPTIBLE);
}
+
+void sys_info(unsigned long si_mask)
+{
+ __sys_info(si_mask ? : kernel_si_mask);
+}
diff --git a/lib/test_kho.c b/lib/test_kho.c
index fff018e5548d..47de56280795 100644
--- a/lib/test_kho.c
+++ b/lib/test_kho.c
@@ -33,44 +33,28 @@ struct kho_test_state {
unsigned int nr_folios;
struct folio **folios;
phys_addr_t *folios_info;
+ struct kho_vmalloc folios_info_phys;
+ int nr_folios_preserved;
struct folio *fdt;
__wsum csum;
};
static struct kho_test_state kho_test_state;
-static int kho_test_notifier(struct notifier_block *self, unsigned long cmd,
- void *v)
+static void kho_test_unpreserve_data(struct kho_test_state *state)
{
- struct kho_test_state *state = &kho_test_state;
- struct kho_serialization *ser = v;
- int err = 0;
-
- switch (cmd) {
- case KEXEC_KHO_ABORT:
- return NOTIFY_DONE;
- case KEXEC_KHO_FINALIZE:
- /* Handled below */
- break;
- default:
- return NOTIFY_BAD;
- }
-
- err |= kho_preserve_folio(state->fdt);
- err |= kho_add_subtree(ser, KHO_TEST_FDT, folio_address(state->fdt));
+ for (int i = 0; i < state->nr_folios_preserved; i++)
+ kho_unpreserve_folio(state->folios[i]);
- return err ? NOTIFY_BAD : NOTIFY_DONE;
+ kho_unpreserve_vmalloc(&state->folios_info_phys);
+ vfree(state->folios_info);
}
-static struct notifier_block kho_test_nb = {
- .notifier_call = kho_test_notifier,
-};
-
-static int kho_test_save_data(struct kho_test_state *state, void *fdt)
+static int kho_test_preserve_data(struct kho_test_state *state)
{
- phys_addr_t *folios_info __free(kvfree) = NULL;
struct kho_vmalloc folios_info_phys;
- int err = 0;
+ phys_addr_t *folios_info;
+ int err;
folios_info = vmalloc_array(state->nr_folios, sizeof(*folios_info));
if (!folios_info)
@@ -78,62 +62,98 @@ static int kho_test_save_data(struct kho_test_state *state, void *fdt)
err = kho_preserve_vmalloc(folios_info, &folios_info_phys);
if (err)
- return err;
+ goto err_free_info;
+
+ state->folios_info_phys = folios_info_phys;
+ state->folios_info = folios_info;
for (int i = 0; i < state->nr_folios; i++) {
struct folio *folio = state->folios[i];
unsigned int order = folio_order(folio);
folios_info[i] = virt_to_phys(folio_address(folio)) | order;
-
err = kho_preserve_folio(folio);
if (err)
- break;
+ goto err_unpreserve;
+ state->nr_folios_preserved++;
}
+ return 0;
+
+err_unpreserve:
+ /*
+ * kho_test_unpreserve_data frees folio_info, bail out immediately to
+ * avoid double free
+ */
+ kho_test_unpreserve_data(state);
+ return err;
+
+err_free_info:
+ vfree(folios_info);
+ return err;
+}
+
+static int kho_test_prepare_fdt(struct kho_test_state *state, ssize_t fdt_size)
+{
+ const char compatible[] = KHO_TEST_COMPAT;
+ unsigned int magic = KHO_TEST_MAGIC;
+ void *fdt = folio_address(state->fdt);
+ int err;
+
+ err = fdt_create(fdt, fdt_size);
+ err |= fdt_finish_reservemap(fdt);
+ err |= fdt_begin_node(fdt, "");
+ err |= fdt_property(fdt, "compatible", compatible, sizeof(compatible));
+ err |= fdt_property(fdt, "magic", &magic, sizeof(magic));
+
err |= fdt_begin_node(fdt, "data");
err |= fdt_property(fdt, "nr_folios", &state->nr_folios,
sizeof(state->nr_folios));
- err |= fdt_property(fdt, "folios_info", &folios_info_phys,
- sizeof(folios_info_phys));
+ err |= fdt_property(fdt, "folios_info", &state->folios_info_phys,
+ sizeof(state->folios_info_phys));
err |= fdt_property(fdt, "csum", &state->csum, sizeof(state->csum));
err |= fdt_end_node(fdt);
- if (!err)
- state->folios_info = no_free_ptr(folios_info);
+ err |= fdt_end_node(fdt);
+ err |= fdt_finish(fdt);
return err;
}
-static int kho_test_prepare_fdt(struct kho_test_state *state)
+static int kho_test_preserve(struct kho_test_state *state)
{
- const char compatible[] = KHO_TEST_COMPAT;
- unsigned int magic = KHO_TEST_MAGIC;
ssize_t fdt_size;
- int err = 0;
- void *fdt;
+ int err;
fdt_size = state->nr_folios * sizeof(phys_addr_t) + PAGE_SIZE;
state->fdt = folio_alloc(GFP_KERNEL, get_order(fdt_size));
if (!state->fdt)
return -ENOMEM;
- fdt = folio_address(state->fdt);
-
- err |= fdt_create(fdt, fdt_size);
- err |= fdt_finish_reservemap(fdt);
+ err = kho_preserve_folio(state->fdt);
+ if (err)
+ goto err_free_fdt;
- err |= fdt_begin_node(fdt, "");
- err |= fdt_property(fdt, "compatible", compatible, sizeof(compatible));
- err |= fdt_property(fdt, "magic", &magic, sizeof(magic));
- err |= kho_test_save_data(state, fdt);
- err |= fdt_end_node(fdt);
+ err = kho_test_preserve_data(state);
+ if (err)
+ goto err_unpreserve_fdt;
- err |= fdt_finish(fdt);
+ err = kho_test_prepare_fdt(state, fdt_size);
+ if (err)
+ goto err_unpreserve_data;
+ err = kho_add_subtree(KHO_TEST_FDT, folio_address(state->fdt));
if (err)
- folio_put(state->fdt);
+ goto err_unpreserve_data;
+
+ return 0;
+err_unpreserve_data:
+ kho_test_unpreserve_data(state);
+err_unpreserve_fdt:
+ kho_unpreserve_folio(state->fdt);
+err_free_fdt:
+ folio_put(state->fdt);
return err;
}
@@ -199,18 +219,12 @@ static int kho_test_save(void)
if (err)
goto err_free_folios;
- err = kho_test_prepare_fdt(state);
+ err = kho_test_preserve(state);
if (err)
goto err_free_folios;
- err = register_kho_notifier(&kho_test_nb);
- if (err)
- goto err_free_fdt;
-
return 0;
-err_free_fdt:
- folio_put(state->fdt);
err_free_folios:
kvfree(folios);
return err;
@@ -292,7 +306,6 @@ static int kho_test_restore(phys_addr_t fdt_phys)
if (err)
return err;
- pr_info("KHO restore succeeded\n");
return 0;
}
@@ -305,8 +318,15 @@ static int __init kho_test_init(void)
return 0;
err = kho_retrieve_subtree(KHO_TEST_FDT, &fdt_phys);
- if (!err)
- return kho_test_restore(fdt_phys);
+ if (!err) {
+ err = kho_test_restore(fdt_phys);
+ if (err)
+ pr_err("KHO restore failed\n");
+ else
+ pr_info("KHO restore succeeded\n");
+
+ return err;
+ }
if (err != -ENOENT) {
pr_warn("failed to retrieve %s FDT: %d\n", KHO_TEST_FDT, err);
@@ -329,7 +349,7 @@ static void kho_test_cleanup(void)
static void __exit kho_test_exit(void)
{
- unregister_kho_notifier(&kho_test_nb);
+ kho_remove_subtree(folio_address(kho_test_state.fdt));
kho_test_cleanup();
}
module_exit(kho_test_exit);
diff --git a/lib/tests/Makefile b/lib/tests/Makefile
index f7460831cfdd..601dba4b7d96 100644
--- a/lib/tests/Makefile
+++ b/lib/tests/Makefile
@@ -4,6 +4,7 @@
# KUnit tests
CFLAGS_bitfield_kunit.o := $(DISABLE_STRUCTLEAK_PLUGIN)
+obj-$(CONFIG_BASE64_KUNIT) += base64_kunit.o
obj-$(CONFIG_BITFIELD_KUNIT) += bitfield_kunit.o
obj-$(CONFIG_BITS_TEST) += test_bits.o
obj-$(CONFIG_BLACKHOLE_DEV_KUNIT_TEST) += blackhole_dev_kunit.o
diff --git a/lib/tests/base64_kunit.c b/lib/tests/base64_kunit.c
new file mode 100644
index 000000000000..f7252070c359
--- /dev/null
+++ b/lib/tests/base64_kunit.c
@@ -0,0 +1,294 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * base64_kunit_test.c - KUnit tests for base64 encoding and decoding functions
+ *
+ * Copyright (c) 2025, Guan-Chun Wu <409411716@gms.tku.edu.tw>
+ */
+
+#include <kunit/test.h>
+#include <linux/base64.h>
+
+/* ---------- Benchmark helpers ---------- */
+static u64 bench_encode_ns(const u8 *data, int len, char *dst, int reps,
+ enum base64_variant variant)
+{
+ u64 t0, t1;
+
+ t0 = ktime_get_ns();
+ for (int i = 0; i < reps; i++)
+ base64_encode(data, len, dst, true, variant);
+ t1 = ktime_get_ns();
+
+ return div64_u64(t1 - t0, (u64)reps);
+}
+
+static u64 bench_decode_ns(const char *data, int len, u8 *dst, int reps,
+ enum base64_variant variant)
+{
+ u64 t0, t1;
+
+ t0 = ktime_get_ns();
+ for (int i = 0; i < reps; i++)
+ base64_decode(data, len, dst, true, variant);
+ t1 = ktime_get_ns();
+
+ return div64_u64(t1 - t0, (u64)reps);
+}
+
+static void run_perf_and_check(struct kunit *test, const char *label, int size,
+ enum base64_variant variant)
+{
+ const int reps = 1000;
+ size_t outlen = DIV_ROUND_UP(size, 3) * 4;
+ u8 *in = kmalloc(size, GFP_KERNEL);
+ char *enc = kmalloc(outlen, GFP_KERNEL);
+ u8 *decoded = kmalloc(size, GFP_KERNEL);
+
+ KUNIT_ASSERT_NOT_ERR_OR_NULL(test, in);
+ KUNIT_ASSERT_NOT_ERR_OR_NULL(test, enc);
+ KUNIT_ASSERT_NOT_ERR_OR_NULL(test, decoded);
+
+ get_random_bytes(in, size);
+ int enc_len = base64_encode(in, size, enc, true, variant);
+ int dec_len = base64_decode(enc, enc_len, decoded, true, variant);
+
+ /* correctness sanity check */
+ KUNIT_EXPECT_EQ(test, dec_len, size);
+ KUNIT_EXPECT_MEMEQ(test, decoded, in, size);
+
+ /* benchmark encode */
+
+ u64 t1 = bench_encode_ns(in, size, enc, reps, variant);
+
+ kunit_info(test, "[%s] encode run : %lluns", label, t1);
+
+ u64 t2 = bench_decode_ns(enc, enc_len, decoded, reps, variant);
+
+ kunit_info(test, "[%s] decode run : %lluns", label, t2);
+
+ kfree(in);
+ kfree(enc);
+ kfree(decoded);
+}
+
+static void base64_performance_tests(struct kunit *test)
+{
+ /* run on STD variant only */
+ run_perf_and_check(test, "64B", 64, BASE64_STD);
+ run_perf_and_check(test, "1KB", 1024, BASE64_STD);
+}
+
+/* ---------- Helpers for encode ---------- */
+static void expect_encode_ok(struct kunit *test, const u8 *src, int srclen,
+ const char *expected, bool padding,
+ enum base64_variant variant)
+{
+ char buf[128];
+ int encoded_len = base64_encode(src, srclen, buf, padding, variant);
+
+ buf[encoded_len] = '\0';
+
+ KUNIT_EXPECT_EQ(test, encoded_len, strlen(expected));
+ KUNIT_EXPECT_STREQ(test, buf, expected);
+}
+
+/* ---------- Helpers for decode ---------- */
+static void expect_decode_ok(struct kunit *test, const char *src,
+ const u8 *expected, int expected_len, bool padding,
+ enum base64_variant variant)
+{
+ u8 buf[128];
+ int decoded_len = base64_decode(src, strlen(src), buf, padding, variant);
+
+ KUNIT_EXPECT_EQ(test, decoded_len, expected_len);
+ KUNIT_EXPECT_MEMEQ(test, buf, expected, expected_len);
+}
+
+static void expect_decode_err(struct kunit *test, const char *src,
+ int srclen, bool padding,
+ enum base64_variant variant)
+{
+ u8 buf[64];
+ int decoded_len = base64_decode(src, srclen, buf, padding, variant);
+
+ KUNIT_EXPECT_EQ(test, decoded_len, -1);
+}
+
+/* ---------- Encode Tests ---------- */
+static void base64_std_encode_tests(struct kunit *test)
+{
+ /* With padding */
+ expect_encode_ok(test, (const u8 *)"", 0, "", true, BASE64_STD);
+ expect_encode_ok(test, (const u8 *)"f", 1, "Zg==", true, BASE64_STD);
+ expect_encode_ok(test, (const u8 *)"fo", 2, "Zm8=", true, BASE64_STD);
+ expect_encode_ok(test, (const u8 *)"foo", 3, "Zm9v", true, BASE64_STD);
+ expect_encode_ok(test, (const u8 *)"foob", 4, "Zm9vYg==", true, BASE64_STD);
+ expect_encode_ok(test, (const u8 *)"fooba", 5, "Zm9vYmE=", true, BASE64_STD);
+ expect_encode_ok(test, (const u8 *)"foobar", 6, "Zm9vYmFy", true, BASE64_STD);
+
+ /* Extra cases with padding */
+ expect_encode_ok(test, (const u8 *)"Hello, world!", 13, "SGVsbG8sIHdvcmxkIQ==",
+ true, BASE64_STD);
+ expect_encode_ok(test, (const u8 *)"ABCDEFGHIJKLMNOPQRSTUVWXYZ", 26,
+ "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVo=", true, BASE64_STD);
+ expect_encode_ok(test, (const u8 *)"abcdefghijklmnopqrstuvwxyz", 26,
+ "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo=", true, BASE64_STD);
+ expect_encode_ok(test, (const u8 *)"0123456789+/", 12, "MDEyMzQ1Njc4OSsv",
+ true, BASE64_STD);
+
+ /* Without padding */
+ expect_encode_ok(test, (const u8 *)"", 0, "", false, BASE64_STD);
+ expect_encode_ok(test, (const u8 *)"f", 1, "Zg", false, BASE64_STD);
+ expect_encode_ok(test, (const u8 *)"fo", 2, "Zm8", false, BASE64_STD);
+ expect_encode_ok(test, (const u8 *)"foo", 3, "Zm9v", false, BASE64_STD);
+ expect_encode_ok(test, (const u8 *)"foob", 4, "Zm9vYg", false, BASE64_STD);
+ expect_encode_ok(test, (const u8 *)"fooba", 5, "Zm9vYmE", false, BASE64_STD);
+ expect_encode_ok(test, (const u8 *)"foobar", 6, "Zm9vYmFy", false, BASE64_STD);
+
+ /* Extra cases without padding */
+ expect_encode_ok(test, (const u8 *)"Hello, world!", 13, "SGVsbG8sIHdvcmxkIQ",
+ false, BASE64_STD);
+ expect_encode_ok(test, (const u8 *)"ABCDEFGHIJKLMNOPQRSTUVWXYZ", 26,
+ "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVo", false, BASE64_STD);
+ expect_encode_ok(test, (const u8 *)"abcdefghijklmnopqrstuvwxyz", 26,
+ "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo", false, BASE64_STD);
+ expect_encode_ok(test, (const u8 *)"0123456789+/", 12, "MDEyMzQ1Njc4OSsv",
+ false, BASE64_STD);
+}
+
+/* ---------- Decode Tests ---------- */
+static void base64_std_decode_tests(struct kunit *test)
+{
+ /* -------- With padding --------*/
+ expect_decode_ok(test, "", (const u8 *)"", 0, true, BASE64_STD);
+ expect_decode_ok(test, "Zg==", (const u8 *)"f", 1, true, BASE64_STD);
+ expect_decode_ok(test, "Zm8=", (const u8 *)"fo", 2, true, BASE64_STD);
+ expect_decode_ok(test, "Zm9v", (const u8 *)"foo", 3, true, BASE64_STD);
+ expect_decode_ok(test, "Zm9vYg==", (const u8 *)"foob", 4, true, BASE64_STD);
+ expect_decode_ok(test, "Zm9vYmE=", (const u8 *)"fooba", 5, true, BASE64_STD);
+ expect_decode_ok(test, "Zm9vYmFy", (const u8 *)"foobar", 6, true, BASE64_STD);
+ expect_decode_ok(test, "SGVsbG8sIHdvcmxkIQ==", (const u8 *)"Hello, world!", 13,
+ true, BASE64_STD);
+ expect_decode_ok(test, "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVo=",
+ (const u8 *)"ABCDEFGHIJKLMNOPQRSTUVWXYZ", 26, true, BASE64_STD);
+ expect_decode_ok(test, "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo=",
+ (const u8 *)"abcdefghijklmnopqrstuvwxyz", 26, true, BASE64_STD);
+
+ /* Error cases */
+ expect_decode_err(test, "Zg=!", 4, true, BASE64_STD);
+ expect_decode_err(test, "Zm$=", 4, true, BASE64_STD);
+ expect_decode_err(test, "Z===", 4, true, BASE64_STD);
+ expect_decode_err(test, "Zg", 2, true, BASE64_STD);
+ expect_decode_err(test, "Zm9v====", 8, true, BASE64_STD);
+ expect_decode_err(test, "Zm==A", 5, true, BASE64_STD);
+
+ {
+ char with_nul[4] = { 'Z', 'g', '\0', '=' };
+
+ expect_decode_err(test, with_nul, 4, true, BASE64_STD);
+ }
+
+ /* -------- Without padding --------*/
+ expect_decode_ok(test, "", (const u8 *)"", 0, false, BASE64_STD);
+ expect_decode_ok(test, "Zg", (const u8 *)"f", 1, false, BASE64_STD);
+ expect_decode_ok(test, "Zm8", (const u8 *)"fo", 2, false, BASE64_STD);
+ expect_decode_ok(test, "Zm9v", (const u8 *)"foo", 3, false, BASE64_STD);
+ expect_decode_ok(test, "Zm9vYg", (const u8 *)"foob", 4, false, BASE64_STD);
+ expect_decode_ok(test, "Zm9vYmE", (const u8 *)"fooba", 5, false, BASE64_STD);
+ expect_decode_ok(test, "Zm9vYmFy", (const u8 *)"foobar", 6, false, BASE64_STD);
+ expect_decode_ok(test, "TWFu", (const u8 *)"Man", 3, false, BASE64_STD);
+ expect_decode_ok(test, "SGVsbG8sIHdvcmxkIQ", (const u8 *)"Hello, world!", 13,
+ false, BASE64_STD);
+ expect_decode_ok(test, "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVo",
+ (const u8 *)"ABCDEFGHIJKLMNOPQRSTUVWXYZ", 26, false, BASE64_STD);
+ expect_decode_ok(test, "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo",
+ (const u8 *)"abcdefghijklmnopqrstuvwxyz", 26, false, BASE64_STD);
+ expect_decode_ok(test, "MDEyMzQ1Njc4OSsv", (const u8 *)"0123456789+/", 12,
+ false, BASE64_STD);
+
+ /* Error cases */
+ expect_decode_err(test, "Zg=!", 4, false, BASE64_STD);
+ expect_decode_err(test, "Zm$=", 4, false, BASE64_STD);
+ expect_decode_err(test, "Z===", 4, false, BASE64_STD);
+ expect_decode_err(test, "Zg=", 3, false, BASE64_STD);
+ expect_decode_err(test, "Zm9v====", 8, false, BASE64_STD);
+ expect_decode_err(test, "Zm==v", 4, false, BASE64_STD);
+
+ {
+ char with_nul[4] = { 'Z', 'g', '\0', '=' };
+
+ expect_decode_err(test, with_nul, 4, false, BASE64_STD);
+ }
+}
+
+/* ---------- Variant tests (URLSAFE / IMAP) ---------- */
+static void base64_variant_tests(struct kunit *test)
+{
+ const u8 sample1[] = { 0x00, 0xfb, 0xff, 0x7f, 0x80 };
+ char std_buf[128], url_buf[128], imap_buf[128];
+ u8 back[128];
+ int n_std, n_url, n_imap, m;
+ int i;
+
+ n_std = base64_encode(sample1, sizeof(sample1), std_buf, false, BASE64_STD);
+ n_url = base64_encode(sample1, sizeof(sample1), url_buf, false, BASE64_URLSAFE);
+ std_buf[n_std] = '\0';
+ url_buf[n_url] = '\0';
+
+ for (i = 0; i < n_std; i++) {
+ if (std_buf[i] == '+')
+ std_buf[i] = '-';
+ else if (std_buf[i] == '/')
+ std_buf[i] = '_';
+ }
+ KUNIT_EXPECT_STREQ(test, std_buf, url_buf);
+
+ m = base64_decode(url_buf, n_url, back, false, BASE64_URLSAFE);
+ KUNIT_EXPECT_EQ(test, m, (int)sizeof(sample1));
+ KUNIT_EXPECT_MEMEQ(test, back, sample1, sizeof(sample1));
+
+ n_std = base64_encode(sample1, sizeof(sample1), std_buf, false, BASE64_STD);
+ n_imap = base64_encode(sample1, sizeof(sample1), imap_buf, false, BASE64_IMAP);
+ std_buf[n_std] = '\0';
+ imap_buf[n_imap] = '\0';
+
+ for (i = 0; i < n_std; i++)
+ if (std_buf[i] == '/')
+ std_buf[i] = ',';
+ KUNIT_EXPECT_STREQ(test, std_buf, imap_buf);
+
+ m = base64_decode(imap_buf, n_imap, back, false, BASE64_IMAP);
+ KUNIT_EXPECT_EQ(test, m, (int)sizeof(sample1));
+ KUNIT_EXPECT_MEMEQ(test, back, sample1, sizeof(sample1));
+
+ {
+ const char *bad = "Zg==";
+ u8 tmp[8];
+
+ m = base64_decode(bad, strlen(bad), tmp, false, BASE64_URLSAFE);
+ KUNIT_EXPECT_EQ(test, m, -1);
+
+ m = base64_decode(bad, strlen(bad), tmp, false, BASE64_IMAP);
+ KUNIT_EXPECT_EQ(test, m, -1);
+ }
+}
+
+/* ---------- Test registration ---------- */
+static struct kunit_case base64_test_cases[] = {
+ KUNIT_CASE(base64_performance_tests),
+ KUNIT_CASE(base64_std_encode_tests),
+ KUNIT_CASE(base64_std_decode_tests),
+ KUNIT_CASE(base64_variant_tests),
+ {}
+};
+
+static struct kunit_suite base64_test_suite = {
+ .name = "base64",
+ .test_cases = base64_test_cases,
+};
+
+kunit_test_suite(base64_test_suite);
+
+MODULE_AUTHOR("Guan-Chun Wu <409411716@gms.tku.edu.tw>");
+MODULE_DESCRIPTION("KUnit tests for Base64 encoding/decoding, including performance checks");
+MODULE_LICENSE("GPL");
diff --git a/lib/usercopy.c b/lib/usercopy.c
index 7b17b83c8042..b00a3a957de6 100644
--- a/lib/usercopy.c
+++ b/lib/usercopy.c
@@ -12,7 +12,7 @@
/* out-of-line parts */
-#if !defined(INLINE_COPY_FROM_USER) || defined(CONFIG_RUST)
+#if !defined(INLINE_COPY_FROM_USER)
unsigned long _copy_from_user(void *to, const void __user *from, unsigned long n)
{
return _inline_copy_from_user(to, from, n);
@@ -20,7 +20,7 @@ unsigned long _copy_from_user(void *to, const void __user *from, unsigned long n
EXPORT_SYMBOL(_copy_from_user);
#endif
-#if !defined(INLINE_COPY_TO_USER) || defined(CONFIG_RUST)
+#if !defined(INLINE_COPY_TO_USER)
unsigned long _copy_to_user(void __user *to, const void *from, unsigned long n)
{
return _inline_copy_to_user(to, from, n);
diff --git a/lib/xxhash.c b/lib/xxhash.c
index cf629766f376..4125b3e3cf7f 100644
--- a/lib/xxhash.c
+++ b/lib/xxhash.c
@@ -73,21 +73,6 @@ static const uint64_t PRIME64_3 = 1609587929392839161ULL;
static const uint64_t PRIME64_4 = 9650029242287828579ULL;
static const uint64_t PRIME64_5 = 2870177450012600261ULL;
-/*-**************************
- * Utils
- ***************************/
-void xxh32_copy_state(struct xxh32_state *dst, const struct xxh32_state *src)
-{
- memcpy(dst, src, sizeof(*dst));
-}
-EXPORT_SYMBOL(xxh32_copy_state);
-
-void xxh64_copy_state(struct xxh64_state *dst, const struct xxh64_state *src)
-{
- memcpy(dst, src, sizeof(*dst));
-}
-EXPORT_SYMBOL(xxh64_copy_state);
-
/*-***************************
* Simple Hash Functions
****************************/
@@ -239,20 +224,6 @@ EXPORT_SYMBOL(xxh64);
/*-**************************************************
* Advanced Hash Functions
***************************************************/
-void xxh32_reset(struct xxh32_state *statePtr, const uint32_t seed)
-{
- /* use a local state for memcpy() to avoid strict-aliasing warnings */
- struct xxh32_state state;
-
- memset(&state, 0, sizeof(state));
- state.v1 = seed + PRIME32_1 + PRIME32_2;
- state.v2 = seed + PRIME32_2;
- state.v3 = seed + 0;
- state.v4 = seed - PRIME32_1;
- memcpy(statePtr, &state, sizeof(state));
-}
-EXPORT_SYMBOL(xxh32_reset);
-
void xxh64_reset(struct xxh64_state *statePtr, const uint64_t seed)
{
/* use a local state for memcpy() to avoid strict-aliasing warnings */
diff --git a/lib/xz/xz_dec_bcj.c b/lib/xz/xz_dec_bcj.c
index 8237db17eee3..610d58d947ab 100644
--- a/lib/xz/xz_dec_bcj.c
+++ b/lib/xz/xz_dec_bcj.c
@@ -20,7 +20,6 @@ struct xz_dec_bcj {
enum {
BCJ_X86 = 4, /* x86 or x86-64 */
BCJ_POWERPC = 5, /* Big endian only */
- BCJ_IA64 = 6, /* Big or little endian */
BCJ_ARM = 7, /* Little endian only */
BCJ_ARMTHUMB = 8, /* Little endian only */
BCJ_SPARC = 9, /* Big or little endian */
@@ -180,92 +179,6 @@ static size_t bcj_powerpc(struct xz_dec_bcj *s, uint8_t *buf, size_t size)
}
#endif
-#ifdef XZ_DEC_IA64
-static size_t bcj_ia64(struct xz_dec_bcj *s, uint8_t *buf, size_t size)
-{
- static const uint8_t branch_table[32] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 4, 6, 6, 0, 0, 7, 7,
- 4, 4, 0, 0, 4, 4, 0, 0
- };
-
- /*
- * The local variables take a little bit stack space, but it's less
- * than what LZMA2 decoder takes, so it doesn't make sense to reduce
- * stack usage here without doing that for the LZMA2 decoder too.
- */
-
- /* Loop counters */
- size_t i;
- size_t j;
-
- /* Instruction slot (0, 1, or 2) in the 128-bit instruction word */
- uint32_t slot;
-
- /* Bitwise offset of the instruction indicated by slot */
- uint32_t bit_pos;
-
- /* bit_pos split into byte and bit parts */
- uint32_t byte_pos;
- uint32_t bit_res;
-
- /* Address part of an instruction */
- uint32_t addr;
-
- /* Mask used to detect which instructions to convert */
- uint32_t mask;
-
- /* 41-bit instruction stored somewhere in the lowest 48 bits */
- uint64_t instr;
-
- /* Instruction normalized with bit_res for easier manipulation */
- uint64_t norm;
-
- size &= ~(size_t)15;
-
- for (i = 0; i < size; i += 16) {
- mask = branch_table[buf[i] & 0x1F];
- for (slot = 0, bit_pos = 5; slot < 3; ++slot, bit_pos += 41) {
- if (((mask >> slot) & 1) == 0)
- continue;
-
- byte_pos = bit_pos >> 3;
- bit_res = bit_pos & 7;
- instr = 0;
- for (j = 0; j < 6; ++j)
- instr |= (uint64_t)(buf[i + j + byte_pos])
- << (8 * j);
-
- norm = instr >> bit_res;
-
- if (((norm >> 37) & 0x0F) == 0x05
- && ((norm >> 9) & 0x07) == 0) {
- addr = (norm >> 13) & 0x0FFFFF;
- addr |= ((uint32_t)(norm >> 36) & 1) << 20;
- addr <<= 4;
- addr -= s->pos + (uint32_t)i;
- addr >>= 4;
-
- norm &= ~((uint64_t)0x8FFFFF << 13);
- norm |= (uint64_t)(addr & 0x0FFFFF) << 13;
- norm |= (uint64_t)(addr & 0x100000)
- << (36 - 20);
-
- instr &= (1 << bit_res) - 1;
- instr |= norm << bit_res;
-
- for (j = 0; j < 6; j++)
- buf[i + j + byte_pos]
- = (uint8_t)(instr >> (8 * j));
- }
- }
- }
-
- return i;
-}
-#endif
-
#ifdef XZ_DEC_ARM
static size_t bcj_arm(struct xz_dec_bcj *s, uint8_t *buf, size_t size)
{
@@ -509,11 +422,6 @@ static void bcj_apply(struct xz_dec_bcj *s,
filtered = bcj_powerpc(s, buf, size);
break;
#endif
-#ifdef XZ_DEC_IA64
- case BCJ_IA64:
- filtered = bcj_ia64(s, buf, size);
- break;
-#endif
#ifdef XZ_DEC_ARM
case BCJ_ARM:
filtered = bcj_arm(s, buf, size);
@@ -699,9 +607,6 @@ enum xz_ret xz_dec_bcj_reset(struct xz_dec_bcj *s, uint8_t id)
#ifdef XZ_DEC_POWERPC
case BCJ_POWERPC:
#endif
-#ifdef XZ_DEC_IA64
- case BCJ_IA64:
-#endif
#ifdef XZ_DEC_ARM
case BCJ_ARM:
#endif
diff --git a/lib/xz/xz_private.h b/lib/xz/xz_private.h
index 8409784b1639..6775078f3cce 100644
--- a/lib/xz/xz_private.h
+++ b/lib/xz/xz_private.h
@@ -24,9 +24,6 @@
# ifdef CONFIG_XZ_DEC_POWERPC
# define XZ_DEC_POWERPC
# endif
-# ifdef CONFIG_XZ_DEC_IA64
-# define XZ_DEC_IA64
-# endif
# ifdef CONFIG_XZ_DEC_ARM
# define XZ_DEC_ARM
# endif
@@ -103,7 +100,6 @@
*/
#ifndef XZ_DEC_BCJ
# if defined(XZ_DEC_X86) || defined(XZ_DEC_POWERPC) \
- || defined(XZ_DEC_IA64) \
|| defined(XZ_DEC_ARM) || defined(XZ_DEC_ARMTHUMB) \
|| defined(XZ_DEC_SPARC) || defined(XZ_DEC_ARM64) \
|| defined(XZ_DEC_RISCV)