From 797e9c1229e2d8fd0d77f17745406fa830599980 Mon Sep 17 00:00:00 2001 From: Kirill Yatsenko Date: Wed, 31 Dec 2025 09:50:58 +0100 Subject: [PATCH 1/5] [dmm] init structure Copy-paste from lvgl/lv_port_linux and remove irrelevant files. --- .gitmodules | 3 + software/dmm/.clang-format | 97 +++++ software/dmm/.gitignore | 62 +++ software/dmm/CMakeLists.txt | 391 ++++++++++++++++++ software/dmm/LICENSE | 21 + software/dmm/README.md | 173 ++++++++ software/dmm/configs/drm-egl-2d.defaults | 84 ++++ software/dmm/configs/drm-egl-3d.defaults | 96 +++++ software/dmm/configs/fbdev.defaults | 85 ++++ software/dmm/configs/glfw-3d.defaults | 90 ++++ software/dmm/configs/glfw.defaults | 78 ++++ software/dmm/configs/sdl.defaults | 83 ++++ .../template/linux-default-settings.defaults | 79 ++++ software/dmm/configs/wayland-g2d.defaults | 89 ++++ software/dmm/configs/wayland.defaults | 81 ++++ software/dmm/docker/Dockerfile_DEBIAN | 23 ++ software/dmm/docker/Dockerfile_cross | 28 ++ software/dmm/lv_conf.defaults | 175 ++++++++ software/dmm/lv_conf.defconfig | 10 + software/dmm/lvgl | 1 + software/dmm/manifest.json | 121 ++++++ software/dmm/src/lib/backends.h | 97 +++++ software/dmm/src/lib/display_backends/drm.c | 117 ++++++ software/dmm/src/lib/display_backends/fbdev.c | 116 ++++++ software/dmm/src/lib/display_backends/glfw3.c | 144 +++++++ software/dmm/src/lib/display_backends/sdl.c | 134 ++++++ .../dmm/src/lib/display_backends/wayland.c | 143 +++++++ software/dmm/src/lib/display_backends/x11.c | 124 ++++++ software/dmm/src/lib/driver_backends.c | 286 +++++++++++++ software/dmm/src/lib/driver_backends.h | 93 +++++ software/dmm/src/lib/indev_backends/evdev.c | 176 ++++++++ software/dmm/src/lib/mouse_cursor_icon.c | 46 +++ software/dmm/src/lib/simulator_settings.h | 53 +++ software/dmm/src/lib/simulator_util.c | 66 +++ software/dmm/src/lib/simulator_util.h | 62 +++ software/dmm/src/main.c | 168 ++++++++ software/dmm/user_cross_compile_setup.cmake | 15 + 37 files changed, 3710 insertions(+) create mode 100644 software/dmm/.clang-format create mode 100644 software/dmm/.gitignore create mode 100644 software/dmm/CMakeLists.txt create mode 100644 software/dmm/LICENSE create mode 100644 software/dmm/README.md create mode 100644 software/dmm/configs/drm-egl-2d.defaults create mode 100644 software/dmm/configs/drm-egl-3d.defaults create mode 100644 software/dmm/configs/fbdev.defaults create mode 100644 software/dmm/configs/glfw-3d.defaults create mode 100644 software/dmm/configs/glfw.defaults create mode 100644 software/dmm/configs/sdl.defaults create mode 100644 software/dmm/configs/template/linux-default-settings.defaults create mode 100644 software/dmm/configs/wayland-g2d.defaults create mode 100644 software/dmm/configs/wayland.defaults create mode 100644 software/dmm/docker/Dockerfile_DEBIAN create mode 100644 software/dmm/docker/Dockerfile_cross create mode 100644 software/dmm/lv_conf.defaults create mode 100644 software/dmm/lv_conf.defconfig create mode 160000 software/dmm/lvgl create mode 100644 software/dmm/manifest.json create mode 100644 software/dmm/src/lib/backends.h create mode 100644 software/dmm/src/lib/display_backends/drm.c create mode 100644 software/dmm/src/lib/display_backends/fbdev.c create mode 100644 software/dmm/src/lib/display_backends/glfw3.c create mode 100644 software/dmm/src/lib/display_backends/sdl.c create mode 100644 software/dmm/src/lib/display_backends/wayland.c create mode 100644 software/dmm/src/lib/display_backends/x11.c create mode 100644 software/dmm/src/lib/driver_backends.c create mode 100644 software/dmm/src/lib/driver_backends.h create mode 100644 software/dmm/src/lib/indev_backends/evdev.c create mode 100644 software/dmm/src/lib/mouse_cursor_icon.c create mode 100644 software/dmm/src/lib/simulator_settings.h create mode 100644 software/dmm/src/lib/simulator_util.c create mode 100644 software/dmm/src/lib/simulator_util.h create mode 100644 software/dmm/src/main.c create mode 100644 software/dmm/user_cross_compile_setup.cmake diff --git a/.gitmodules b/.gitmodules index 01a141f..a4a0ab6 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,3 +7,6 @@ [submodule "bsp/u-boot/u-boot-v2025.04"] path = board/u-boot/u-boot-v2025.04 url = git@github.com:u-boot/u-boot.git +[submodule "software/dmm/lvgl"] + path = software/dmm/lvgl + url = https://github.com/lvgl/lvgl.git diff --git a/software/dmm/.clang-format b/software/dmm/.clang-format new file mode 100644 index 0000000..a8674b3 --- /dev/null +++ b/software/dmm/.clang-format @@ -0,0 +1,97 @@ +--- +Language: Cpp +# BasedOnStyle: LLVM +AccessModifierOffset: -2 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: true +AlignConsecutiveDeclarations: false +AlignEscapedNewlinesLeft: false +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: true +AllowShortFunctionsOnASingleLine: None +AllowShortIfStatementsOnASingleLine: true +AllowShortLoopsOnASingleLine: true +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: false +BinPackArguments: true +BinPackParameters: true +BreakBeforeBraces: Custom +BraceWrapping: + AfterClass: false + AfterControlStatement: false + AfterEnum: false + AfterFunction: true + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: true + AfterUnion: true + BeforeCatch: false + BeforeElse: false + IndentBraces: false + SplitEmptyFunction: false +BreakBeforeBinaryOperators: None +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +ColumnLimit: 120 +CommentPragmas: '^ IWYU pragma:' +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] +IncludeCategories: + - Regex: '^"(llvm|llvm-c|clang|clang-c)/' + Priority: 2 + - Regex: '^(<|"(gtest|isl|json)/)' + Priority: 3 + - Regex: '.*' + Priority: 1 +IncludeIsMainRegex: '$' +IndentCaseLabels: true +IndentWidth: 4 +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: true +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Middle +ReflowComments: true +SortIncludes: false +SpaceAfterCStyleCast: false +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: Never +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInContainerLiterals: false +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Cpp11 +TabWidth: 4 +UseTab: Never +... + diff --git a/software/dmm/.gitignore b/software/dmm/.gitignore new file mode 100644 index 0000000..e9749d9 --- /dev/null +++ b/software/dmm/.gitignore @@ -0,0 +1,62 @@ +demo + +# Prerequisites +*.d + +# Object files +*.o +*.ko +*.obj +*.elf +/build/ +/bin/ + +# Linker output +*.ilk +*.map +*.exp + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +*.su +*.idb +*.pdb + +# Kernel Module Compile Results +*.mod* +*.cmd +.tmp_versions/ +modules.order +Module.symvers +Mkfile.old +dkms.conf +/Debug/ +.cache + +# IDE Project files +/.settings/ +.*project diff --git a/software/dmm/CMakeLists.txt b/software/dmm/CMakeLists.txt new file mode 100644 index 0000000..1468d82 --- /dev/null +++ b/software/dmm/CMakeLists.txt @@ -0,0 +1,391 @@ +cmake_minimum_required(VERSION 3.11) +project(lvgl) + +option(WERROR "Treat warnings as errors for LVGL targets" OFF) + +# Set policy to allow to run the target_link_libraries cmd on targets that are build +# in another directory. +# Currently, the linking is not handled by env_support/cmake/os.cmake +# This means that if a driver is enabled and it requires linking an external library +# it needs to be handled in the top-level project. + +cmake_policy(SET CMP0079 NEW) + +# Uncomment if the program needs debugging +#set(CMAKE_BUILD_TYPE Debug) + +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +set(CMAKE_C_STANDARD 99) # LVGL officially supports C99 and above +set(CMAKE_CXX_STANDARD 17) #C17 +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wpedantic") + +set(CONFIG "default" CACHE STRING "Config name to use. Leave empty for default `lv_conf.defaults`") + +set(LV_CONF_DEFAULTS_PATH "${CMAKE_SOURCE_DIR}/lv_conf.defaults") + +# If CONFIG is not default, update LV_CONF_DEFAULTS_PATH to the selected config +if(NOT CONFIG STREQUAL "default") + set(LV_CONF_DEFAULTS_PATH "${CMAKE_SOURCE_DIR}/configs/${CONFIG}.defaults") +endif() + +if(NOT EXISTS "${LV_CONF_DEFAULTS_PATH}") + message(FATAL_ERROR "Config file not found: ${LV_CONF_DEFAULTS_PATH}") +endif() +message(STATUS "Using config: ${LV_CONF_DEFAULTS_PATH}") + +set(LV_BUILD_SET_CONFIG_OPTS ON CACHE BOOL + "create CMAKE variables from lv_conf_internal.h" FORCE) + +set(LV_BUILD_CONF_PATH + "${CMAKE_BINARY_DIR}/lv_conf.h" + CACHE PATH "path to lv_conf.h" FORCE) + +set(LVGL_TEMPLATE_PATH "${CMAKE_SOURCE_DIR}/lvgl/lv_conf_template.h") +set(GENERATE_SCRIPT_PATH "${CMAKE_SOURCE_DIR}/lvgl/scripts/generate_lv_conf.py") + +set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${LVGL_TEMPLATE_PATH}) +set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${LV_CONF_DEFAULTS_PATH}) +set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${GENERATE_SCRIPT_PATH}) + +execute_process( + COMMAND + ${Python3_EXECUTABLE} ${GENERATE_SCRIPT_PATH} --template + ${LVGL_TEMPLATE_PATH} --defaults ${LV_CONF_DEFAULTS_PATH} --config + ${LV_BUILD_CONF_PATH} + RESULT_VARIABLE config_result + OUTPUT_VARIABLE config_output + ERROR_VARIABLE config_output) + +if(NOT config_result EQUAL 0) + message(FATAL_ERROR "Failed to generate lv_conf.h: ${config_output}") +endif() + +message(STATUS "${LV_BUILD_CONF_PATH} generated successfully") + +add_subdirectory(lvgl) + +if (CONFIG_LV_USE_EVDEV) + message("Including EVDEV support") + find_package(PkgConfig REQUIRED) + pkg_check_modules(EVDEV REQUIRED libevdev) + + list(APPEND PKG_CONFIG_LIB ${EVDEV_LIBRARIES}) + list(APPEND PKG_CONFIG_INC ${EVDEV_INCLUDE_DIRS}) + list(APPEND LV_LINUX_BACKEND_SRC src/lib/indev_backends/evdev.c) + +endif() + +if (CONFIG_LV_USE_LINUX_DRM) + + message("Including DRM support") + find_package(PkgConfig REQUIRED) + pkg_check_modules(LIBDRM REQUIRED libdrm) + + list(APPEND PKG_CONFIG_LIB ${LIBDRM_LIBRARIES}) + list(APPEND PKG_CONFIG_INC ${LIBDRM_INCLUDE_DIRS}) + list(APPEND LV_LINUX_BACKEND_SRC src/lib/display_backends/drm.c) + +endif() + +if (CONFIG_LV_USE_LINUX_DRM_GBM_BUFFERS OR CONFIG_LV_LINUX_DRM_USE_EGL) + + message("Including GBM support") + + find_package(PkgConfig REQUIRED) + pkg_check_modules(LIBGBM REQUIRED gbm) + + list(APPEND PKG_CONFIG_LIB ${LIBGBM_LIBRARIES}) + list(APPEND PKG_CONFIG_INC ${LIBGBM_INCLUDE_DIRS}) + +endif() + +if (CONFIG_LV_USE_LIBINPUT) + message("Including libinput support") + + find_package(PkgConfig REQUIRED) + pkg_check_modules(LIBINPUT REQUIRED libinput) + + list(APPEND PKG_CONFIG_LIB ${LIBINPUT_LIBRARIES}) + list(APPEND PKG_CONFIG_INC ${LIBINPUT_INCLUDE_DIRS}) + +endif() + +if (CONFIG_LV_USE_FREETYPE) + message("Including Freetype support") + + find_package(PkgConfig REQUIRED) + pkg_check_modules(LIBFREETYPE REQUIRED freetype2) + + list(APPEND PKG_CONFIG_LIB ${LIBFREETYPE_LIBRARIES}) + list(APPEND PKG_CONFIG_INC ${LIBFREETYPE_INCLUDE_DIRS}) + +endif() + +if (CONFIG_LV_USE_SDL OR CONFIG_LV_USE_DRAW_SDL) + + message("Including SDL2 support") + find_package(PkgConfig REQUIRED) + pkg_check_modules(SDL2 REQUIRED sdl2) + pkg_check_modules(SDL2_IMAGE REQUIRED SDL2_image) + + list(APPEND PKG_CONFIG_LIB ${SDL2_LIBRARIES} ${SDL2_IMAGE_LIBRARIES}) + list(APPEND PKG_CONFIG_INC ${SDL2_INCLUDE_DIRS} ${SDL2_IMAGE_INCLUDE_DIRS}) + + list(APPEND LV_LINUX_BACKEND_SRC src/lib/display_backends/sdl.c) +endif() + + +if (CONFIG_LV_USE_WAYLAND) + + message("Including Wayland support") + + find_package(PkgConfig REQUIRED) + pkg_check_modules(WAYLAND_CLIENT REQUIRED wayland-client) + pkg_check_modules(WAYLAND_CURSOR REQUIRED wayland-cursor) + pkg_check_modules(XKBCOMMON REQUIRED xkbcommon) + + list(APPEND PKG_CONFIG_LIB ${WAYLAND_CLIENT_LIBRARIES}) + list(APPEND PKG_CONFIG_LIB ${WAYLAND_CURSOR_LIBRARIES}) + list(APPEND PKG_CONFIG_LIB ${XKBCOMMON_LIBRARIES}) + + # Wayland protocols + pkg_check_modules(WAYLAND_PROTOCOLS REQUIRED wayland-protocols>=1.25) + pkg_get_variable(WAYLAND_PROTOCOLS_BASE wayland-protocols pkgdatadir) + + if(DEFINED ENV{SDKTARGETSYSROOT} AND DEFINED ENV{SYSROOT}) + message(FATAL_ERROR "Both SDKTARGETSYSROOT and SYSROOT are set. Please set only one.") + endif() + + if(DEFINED ENV{SDKTARGETSYSROOT}) + set(PROTOCOL_ROOT "$ENV{SDKTARGETSYSROOT}/usr/share/wayland-protocols") + elseif(DEFINED ENV{SYSROOT}) + set(PROTOCOL_ROOT "$ENV{SYSROOT}/usr/share/wayland-protocols") + else() + set(PROTOCOL_ROOT "/usr/share/wayland-protocols") + endif() + + if(NOT EXISTS ${PROTOCOL_ROOT}) + message(FATAL_ERROR "Wayland protocols not found at ${PROTOCOL_ROOT}") + endif() + + set(PROTOCOLS_DIR "${CMAKE_CURRENT_BINARY_DIR}/protocols") + file(MAKE_DIRECTORY ${PROTOCOLS_DIR}) + + set(WAYLAND_PROTOCOLS_SRC "") + + # Use public-code for shared libs, private-code for static libs + if(BUILD_SHARED_LIBS) + set(WAYLAND_SCANNER_CODE_MODE "public-code") + else() + set(WAYLAND_SCANNER_CODE_MODE "private-code") + endif() + + # Generate xdg-shell protocol (always) + set(XDG_SHELL_XML "${PROTOCOL_ROOT}/stable/xdg-shell/xdg-shell.xml") + set(XDG_SHELL_HEADER "${PROTOCOLS_DIR}/wayland_xdg_shell.h") + set(XDG_SHELL_SOURCE "${PROTOCOLS_DIR}/wayland_xdg_shell.c") + + if(NOT EXISTS ${XDG_SHELL_HEADER} OR NOT EXISTS ${XDG_SHELL_SOURCE}) + execute_process(COMMAND wayland-scanner client-header ${XDG_SHELL_XML} ${XDG_SHELL_HEADER}) + execute_process(COMMAND wayland-scanner ${WAYLAND_SCANNER_CODE_MODE} ${XDG_SHELL_XML} ${XDG_SHELL_SOURCE}) + endif() + list(APPEND WAYLAND_PROTOCOLS_SRC ${XDG_SHELL_SOURCE}) + + # Generate dmabuf protocol (if config is set) + if(CONFIG_LV_WAYLAND_USE_DMABUF) + set(DMABUF_XML "${PROTOCOL_ROOT}/stable/linux-dmabuf/linux-dmabuf-v1.xml") + set(DMABUF_HEADER "${PROTOCOLS_DIR}/wayland_linux_dmabuf.h") + set(DMABUF_SOURCE "${PROTOCOLS_DIR}/wayland_linux_dmabuf.c") + + if(NOT EXISTS ${DMABUF_HEADER} OR NOT EXISTS ${DMABUF_SOURCE}) + execute_process(COMMAND wayland-scanner client-header ${DMABUF_XML} ${DMABUF_HEADER}) + execute_process(COMMAND wayland-scanner ${WAYLAND_SCANNER_CODE_MODE} ${DMABUF_XML} ${DMABUF_SOURCE}) + endif() + list(APPEND WAYLAND_PROTOCOLS_SRC ${DMABUF_SOURCE}) + endif() + + list(APPEND PKG_CONFIG_INC ${PROTOCOLS_DIR}) + list(APPEND LV_LINUX_BACKEND_SRC src/lib/display_backends/wayland.c ${WAYLAND_PROTOCOLS_SRC}) + +endif() + +if (CONFIG_LV_USE_X11) + + find_package(PkgConfig REQUIRED) + pkg_check_modules(X11 REQUIRED x11) + + message("Including X11 support") + + list(APPEND PKG_CONFIG_INC ${X11_INCLUDE_DIRS}) + list(APPEND PKG_CONFIG_LIB ${X11_LIBRARIES}) + list(APPEND LV_LINUX_BACKEND_SRC src/lib/display_backends/x11.c) + +endif() + +if (CONFIG_LV_USE_LINUX_FBDEV) + + # FBDEV has no dependencies + message("Including FBDEV support") + list(APPEND LV_LINUX_BACKEND_SRC src/lib/display_backends/fbdev.c) + +endif() + +if (CONFIG_LV_USE_GLFW) + + message("Including GLFW support") + find_package(PkgConfig REQUIRED) + pkg_check_modules(GLFW3 REQUIRED glfw3) + pkg_check_modules(GLEW REQUIRED glew) + + list(APPEND PKG_CONFIG_LIB ${GLFW3_LIBRARIES}) + list(APPEND PKG_CONFIG_LIB ${GLEW_LIBRARIES}) + list(APPEND LV_LINUX_BACKEND_SRC src/lib/display_backends/glfw3.c) + +endif() + +if (CONFIG_LV_USE_DRAW_G2D) + message("Including G2D support") + find_library(G2D_LIBRARY NAMES g2d) + list(APPEND PKG_CONFIG_LIB ${G2D_LIBRARY}) +endif() + +if (CONFIG_LV_USE_GLTF) + message(STATUS "Including with GLTF support") + include(FetchContent) + + FetchContent_Declare( + fastgltf + GIT_REPOSITORY https://github.com/spnda/fastgltf + GIT_TAG 4e2261350888bae7c35a1f39991f6233d57795f5) + + set(FASTGLTF_ENABLE_DEPRECATED_EXT + ON + CACHE BOOL "" FORCE) + + set(FASTGLTF_DIFFUSE_TRANSMISSION_SUPPORT + ON + CACHE BOOL "" FORCE) + + FetchContent_MakeAvailable(fastgltf) + + set(WEBP_BUILD_ANIM_UTILS + OFF + CACHE BOOL "" FORCE) + set(WEBP_BUILD_CWEBP + OFF + CACHE BOOL "" FORCE) + set(WEBP_BUILD_DWEBP + OFF + CACHE BOOL "" FORCE) + set(WEBP_BUILD_GIF2WEBP + OFF + CACHE BOOL "" FORCE) + set(WEBP_BUILD_IMG2WEBP + OFF + CACHE BOOL "" FORCE) + set(WEBP_BUILD_VWEBP + OFF + CACHE BOOL "" FORCE) + set(WEBP_BUILD_WEBPINFO + OFF + CACHE BOOL "" FORCE) + set(WEBP_BUILD_WEBPMUX + OFF + CACHE BOOL "" FORCE) + set(WEBP_BUILD_EXTRAS + OFF + CACHE BOOL "" FORCE) + + FetchContent_Declare( + webp + GIT_REPOSITORY https://github.com/webmproject/libwebp + GIT_TAG fa6f56496a442eed59b103250021e4b14ebf1427) + + FetchContent_MakeAvailable(webp) + + list(APPEND PKG_CONFIG_LIB fastgltf webp) +endif() + +if (CONFIG_LV_USE_GSTREAMER) + + message("Including GSTREAMER support") + find_package(PkgConfig REQUIRED) + + pkg_check_modules(GSTREAMER REQUIRED gstreamer-1.0) + pkg_check_modules(GSTREAMER_VIDEO REQUIRED gstreamer-video-1.0) + pkg_check_modules(GSTREAMER_APP REQUIRED gstreamer-app-1.0) + + list(APPEND PKG_CONFIG_LIB ${GSTREAMER_VIDEO_LIBRARIES} ${GSTREAMER_APP_LIBRARIES}) + list(APPEND PKG_CONFIG_INC ${GSTREAMER_VIDEO_INCLUDE_DIRS} ${GSTREAMER_APP_INCLUDE_DIRS}) +endif() + +# Check for external demos +if(CONFIG_LV_USE_DEMO_FLEX_LAYOUT + OR CONFIG_LV_USE_DEMO_MULTILANG + OR CONFIG_LV_USE_DEMO_TRANSFORM + OR CONFIG_LV_USE_DEMO_SCROLL + OR CONFIG_LV_USE_DEMO_EBIKE + OR CONFIG_LV_USE_DEMO_HIGH_RES + OR CONFIG_LV_USE_DEMO_SMARTWATCH) + + set(USE_EXTERNAL_DEMOS ON) +else() + set(USE_EXTERNAL_DEMOS OFF) +endif() + +if(USE_EXTERNAL_DEMOS) + message("Including external demos") + include(FetchContent) + FetchContent_Declare(lv_demos_ext GIT_REPOSITORY https://github.com/lvgl/lv_demos) + FetchContent_MakeAvailable(lv_demos_ext) + list(APPEND PKG_CONFIG_LIB lv_demos_ext) +endif() + + +file(GLOB LV_LINUX_SRC src/lib/*.c) +set(LV_LINUX_INC src/lib) + +target_include_directories(lvgl PUBLIC ${PKG_CONFIG_INC}) + +# Library type is determined by BUILD_SHARED_LIBS (shared if ON, static if OFF) +add_library(lvgl_linux ${LV_LINUX_SRC} ${LV_LINUX_BACKEND_SRC}) +target_include_directories(lvgl_linux PUBLIC ${PKG_CONFIG_INC}) + +# If LVGL is configured to use LV_CONF_PATH or Kconfig +# Set the exactly the same definitions on the lvgl_linux target +set_target_properties(lvgl_linux PROPERTIES COMPILE_DEFINITIONS "${LVGL_COMPILER_DEFINES}") +target_include_directories(lvgl_linux PUBLIC + ${LV_LINUX_INC} ${CMAKE_CURRENT_SOURCE_DIR} + ${PROJECT_SOURCE_DIR}/src/lib ${LVGL_CONF_INC_DIR}) + +# Link LVGL with external dependencies - Modern CMake/CMP0079 allows this +target_link_libraries(lvgl PUBLIC ${PKG_CONFIG_LIB} m pthread) + +add_executable(lvglsim src/main.c) + +# Repeat lvgl_linux to resolve circular dependency with lvgl +target_link_libraries(lvglsim lvgl_linux lvgl lvgl_linux) + +if(WERROR) + target_compile_options(lvglsim PRIVATE -Werror) + target_compile_options(lvgl PRIVATE -Werror) + target_compile_options(lvgl_linux PRIVATE -Werror) +endif() + + +# Install the lvgl_linux library and its headers +install(DIRECTORY src/lib/ + DESTINATION include/lvgl + FILES_MATCHING + PATTERN "backends*" EXCLUDE + PATTERN "*.h") + +install(TARGETS lvgl_linux + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib +) + +add_custom_target(run COMMAND ${EXECUTABLE_OUTPUT_PATH}/lvglsim DEPENDS lvglsim) diff --git a/software/dmm/LICENSE b/software/dmm/LICENSE new file mode 100644 index 0000000..e418490 --- /dev/null +++ b/software/dmm/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Littlev Graphics Library + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/software/dmm/README.md b/software/dmm/README.md new file mode 100644 index 0000000..f782587 --- /dev/null +++ b/software/dmm/README.md @@ -0,0 +1,173 @@ +# LVGL on top of Linux graphics stack + +This is an example project demonstrating how to use LVGL on +a GNU/Linux systems and other Unix-like operating systems + +LVGL provides drivers for many graphics backends. +Legacy framebuffer (fbdev), modern DRM/KMS, Wayland, X11, GLFW3 and SDL2. + +Check out this blog post for a step by step tutorial for fbdev +https://blog.lvgl.io/2018-01-03/linux_fb + +## Clone the project + +Clone the project + +``` +git clone https://github.com/lvgl/lv_port_linux.git +cd lv_port_linux/ +``` + +LVGL is a submodule of `lv_port_linux`, use the following command +to fetch it, it will be downloaded to the `lvgl/` directory + +``` +git submodule update --init --recursive +``` + +## Configure drivers and libraries + +By default `lv_conf.defaults` is by used to generate the configuration header +file `lv_conf.h` that is used during the build. +Adjust `lv_conf.defaults` to select the drivers and libraries that will be compiled by +modifying the following definitions, setting them to `1` or `0` + +You can also start with a default config based on the drivers you want to use, +you can find a default config for each graphic driver inside the `configs/` directory. + +You can either replace `lv_conf.defaults` manually before configuring: + +```bash +mv configs/.defaults lv_conf.defaults +cmake -B build +``` + +or have CMake directly use that file in-place during configuration: + +```bash +cmake -B build -DCONFIG= +``` + +With `` the name of the config without the `.defaults` extension, +eg: `-DCONFIG=wayland` will use `configs/wayland.defaults`. + +### Graphics drivers + +| Definition | Description | +| ------------------ | ----------------------------------------| +| LV_USE_LINUX_FBDEV | Legacy frame buffer (/dev/fb*) | +| LV_USE_LINUX_DRM | DRM/KMS (/dev/dri/*) | +| LV_USE_SDL | SDL | +| LV_USE_WAYLAND | WAYLAND | +| LV_USE_X11 | X11 | +| LV_USE_GLFW | GLFW3 | + +### Device drivers + +| Definition | Description | +| ------------------ | ----------------------------------------| +| LV_USE_EVDEV | libevdev input devices | +| LV_USE_LIBINPUT | libinput input devices | + +## Install dependencies + +Install the required dependencies for the selected drivers by checking +the documentation for each driver [here](https://docs.lvgl.io/master/integration/embedded_linux/drivers/) + +You can also check the [Dockerfiles](docker/) to get the names +of the packages for various distributions + +## Build instructions + +LVGL supports GNU make and CMake + +### CMake + +``` +cmake -B build +cmake --build build -j$(nproc) +``` + +Cross compilation is supported with CMake, edit the `user_cross_compile_setup.cmake` +to set the location of the compiler toolchain and build using the commands below + +``` +cmake -B build -DCMAKE_TOOLCHAIN_FILE=./user_cross_compile_setup.cmake +cmake --build build -j$(nproc) +``` + +### Installing LVGL + +It is possible to install LVGL to your system using cmake: + +``` +cmake --install ./build +``` + +## Run the demo application + +``` +./build/bin/lvglsim +``` + +This will start the widgets demo + +If multiple backends are enabled you can run with a specific backend via the `-b` option + +``` +./build/bin/lvglsim -b sdl +``` + +To get a list of supported backends use the `-B` option + +## Supported Boards + +The `boards/` directory contains hardware-specific documentation and configuration files for running LVGL on various embedded Linux development boards. +Each board folder includes setup instructions, build configurations, and optimization guides tailored to that platform's specific hardware capabilities. Currently supported boards include: + +- **F&S PicoCoreMX93** - NXP i.MX93-based system-on-module +- **NXP i.MX93** - NXP's i.MX93 evaluation platform +- **Renesas RZ/G3E EVKit** - Renesas RZ/G3E evaluation kit +- **Texas Instruments SK-AM62B-P1** - AM62B starter kit +- **Texas Instruments SK-AM62L** - AM62L starter kit +- **Texas Instruments SK-AM62P-LP** - AM62P low-power starter kit +- **Toradex Verdin AM62** - Toradex Verdin module with TI AM62 processor +- **Toradex Verdin iMX8M Mini** - Toradex Verdin module with NXP i.MX8M Mini processor + +## Environment variables + +Environment variables can be set to modify the behavior of the driver(s) +Check the documentation of the drivers for more details + + +### Legacy framebuffer (fbdev) + +- `LV_LINUX_FBDEV_DEVICE` - override default (`/dev/fb0`) framebuffer device node. + + +### EVDEV touchscreen/mouse pointer device + +- `LV_LINUX_EVDEV_POINTER_DEVICE` - the path of the input device, i.e. + `/dev/input/by-id/my-mouse-or-touchscreen`. If not set, devices will + be discovered and added automatically. + +### DRM/KMS + +- `LV_LINUX_DRM_CARD` - override default (`/dev/dri/card0`) card. + +### Simulator + +- `LV_SIM_WINDOW_WIDTH` - width of the window (default `800`). +- `LV_SIM_WINDOW_HEIGHT` - height of the window (default `480`). + + +## Permissions + +By default, unprivileged users don't have access to the framebuffer device `/dev/fb0`. In such cases, you can either run the application +with `sudo` privileges or you can grant access to the `video` group. + +```bash +sudo adduser $USER video +newgrp video +./build/bin/lvglsim +``` diff --git a/software/dmm/configs/drm-egl-2d.defaults b/software/dmm/configs/drm-egl-2d.defaults new file mode 100644 index 0000000..9181101 --- /dev/null +++ b/software/dmm/configs/drm-egl-2d.defaults @@ -0,0 +1,84 @@ +LV_COLOR_DEPTH 16 +LV_USE_OPENGLES 1 +LV_USE_LINUX_DRM 1 +LV_LINUX_DRM_USE_EGL 1 + +# Input support (enable when using FBDEV or DRM) +LV_USE_EVDEV 1 +LV_USE_LIBINPUT 0 + +# Examples +LV_BUILD_EXAMPLES 1 + +# Demos +LV_BUILD_DEMOS 1 +LV_USE_DEMO_WIDGETS 1 +LV_USE_DEMO_KEYPAD_AND_ENCODER 1 +LV_USE_DEMO_BENCHMARK 1 +LV_USE_DEMO_RENDER 1 +LV_USE_DEMO_STRESS 1 +LV_USE_DEMO_MUSIC 1 + +# Enable logging for easier debugging +LV_USE_LOG 1 +LV_LOG_LEVEL LV_LOG_LEVEL_WARN +LV_LOG_PRINTF 1 + +# Enable sysmon to track performance +LV_USE_SYSMON 1 +LV_USE_PERF_MONITOR 1 +LV_SYSMON_PROC_IDLE_AVAILABLE 1 + +# Vector graphics +LV_USE_FLOAT 1 +LV_USE_MATRIX 1 +LV_USE_VECTOR_GRAPHIC 1 +LV_USE_THORVG_INTERNAL 1 +LV_USE_LOTTIE 1 + +# Assert handler +LV_ASSERT_HANDLER_INCLUDE +LV_ASSERT_HANDLER assert(0); + +# FS support +LV_USE_FS_STDIO 1 +LV_FS_DEFAULT_DRIVER_LETTER 'A' +LV_FS_STDIO_LETTER 'A' + +# Performance +LV_DRAW_LAYER_SIMPLE_BUF_SIZE (256 * 1024) +LV_OBJ_STYLE_CACHE 1 + +# Gradients +LV_USE_DRAW_SW_COMPLEX_GRADIENTS 1 + +# Enable built-in fonts +LV_FONT_MONTSERRAT_12 1 +LV_FONT_MONTSERRAT_14 1 +LV_FONT_MONTSERRAT_16 1 +LV_FONT_MONTSERRAT_18 1 +LV_FONT_MONTSERRAT_20 1 +LV_FONT_MONTSERRAT_22 1 +LV_FONT_MONTSERRAT_24 1 +LV_FONT_MONTSERRAT_26 1 +LV_FONT_MONTSERRAT_28 1 +LV_FONT_MONTSERRAT_30 1 +LV_FONT_MONTSERRAT_32 1 +LV_FONT_MONTSERRAT_34 1 +LV_FONT_MONTSERRAT_36 1 +LV_FONT_MONTSERRAT_38 1 +LV_FONT_MONTSERRAT_40 1 +LV_FONT_MONTSERRAT_42 1 +LV_FONT_MONTSERRAT_44 1 +LV_FONT_MONTSERRAT_46 1 +LV_FONT_MONTSERRAT_48 1 +LV_FONT_MONTSERRAT_28_COMPRESSED 1 +LV_FONT_DEJAVU_16_PERSIAN_HEBREW 1 +LV_FONT_SOURCE_HAN_SANS_SC_16_CJK 1 +LV_FONT_UNSCII_8 1 +LV_FONT_FMT_TXT_LARGE 1 + +# Stdlib +LV_USE_STDLIB_MALLOC LV_STDLIB_CLIB +LV_USE_STDLIB_STRING LV_STDLIB_CLIB +LV_USE_STDLIB_SPRINTF LV_STDLIB_CLIB diff --git a/software/dmm/configs/drm-egl-3d.defaults b/software/dmm/configs/drm-egl-3d.defaults new file mode 100644 index 0000000..b58a0c8 --- /dev/null +++ b/software/dmm/configs/drm-egl-3d.defaults @@ -0,0 +1,96 @@ +LV_COLOR_DEPTH 16 + +# drivers +LV_USE_OPENGLES 1 +LV_USE_LINUX_DRM 1 +LV_LINUX_DRM_USE_EGL 1 + +# 3d draw unit +LV_USE_DRAW_OPENGLES 1 + +# 3d widgets +LV_USE_3DTEXTURE 1 +LV_USE_GLTF 1 + +# 3d demo +LV_USE_DEMO_GLTF 1 + +# Input support (enable when using FBDEV or DRM) +LV_USE_EVDEV 1 +LV_USE_LIBINPUT 0 + +# Examples +LV_BUILD_EXAMPLES 1 + +# Demos +LV_BUILD_DEMOS 1 +LV_USE_DEMO_WIDGETS 1 +LV_USE_DEMO_KEYPAD_AND_ENCODER 1 +LV_USE_DEMO_BENCHMARK 1 +LV_USE_DEMO_RENDER 1 +LV_USE_DEMO_STRESS 1 +LV_USE_DEMO_MUSIC 1 + +# Enable logging for easier debugging +LV_USE_LOG 1 +LV_LOG_LEVEL LV_LOG_LEVEL_WARN +LV_LOG_PRINTF 1 + +# Enable sysmon to track performance +LV_USE_SYSMON 1 +LV_USE_PERF_MONITOR 1 +LV_SYSMON_PROC_IDLE_AVAILABLE 1 + +# Vector graphics +LV_USE_FLOAT 1 +LV_USE_MATRIX 1 +LV_USE_VECTOR_GRAPHIC 1 +LV_USE_THORVG_INTERNAL 1 +LV_USE_LOTTIE 1 + +# Assert handler +LV_ASSERT_HANDLER_INCLUDE +LV_ASSERT_HANDLER assert(0); + +# FS support +LV_USE_FS_STDIO 1 +LV_FS_DEFAULT_DRIVER_LETTER 'A' +LV_FS_STDIO_LETTER 'A' + +# Performance +LV_DRAW_LAYER_SIMPLE_BUF_SIZE (256 * 1024) +LV_OBJ_STYLE_CACHE 1 + +# Gradients +LV_USE_DRAW_SW_COMPLEX_GRADIENTS 1 + +# Enable built-in fonts +LV_FONT_MONTSERRAT_12 1 +LV_FONT_MONTSERRAT_14 1 +LV_FONT_MONTSERRAT_16 1 +LV_FONT_MONTSERRAT_18 1 +LV_FONT_MONTSERRAT_20 1 +LV_FONT_MONTSERRAT_22 1 +LV_FONT_MONTSERRAT_24 1 +LV_FONT_MONTSERRAT_26 1 +LV_FONT_MONTSERRAT_28 1 +LV_FONT_MONTSERRAT_30 1 +LV_FONT_MONTSERRAT_32 1 +LV_FONT_MONTSERRAT_34 1 +LV_FONT_MONTSERRAT_36 1 +LV_FONT_MONTSERRAT_38 1 +LV_FONT_MONTSERRAT_40 1 +LV_FONT_MONTSERRAT_42 1 +LV_FONT_MONTSERRAT_44 1 +LV_FONT_MONTSERRAT_46 1 +LV_FONT_MONTSERRAT_48 1 +LV_FONT_MONTSERRAT_28_COMPRESSED 1 +LV_FONT_DEJAVU_16_PERSIAN_HEBREW 1 +LV_FONT_SOURCE_HAN_SANS_SC_16_CJK 1 +LV_FONT_UNSCII_8 1 +LV_FONT_FMT_TXT_LARGE 1 + +# Stdlib +LV_USE_STDLIB_MALLOC LV_STDLIB_CLIB +LV_USE_STDLIB_STRING LV_STDLIB_CLIB +LV_USE_STDLIB_SPRINTF LV_STDLIB_CLIB diff --git a/software/dmm/configs/fbdev.defaults b/software/dmm/configs/fbdev.defaults new file mode 100644 index 0000000..af7dbbd --- /dev/null +++ b/software/dmm/configs/fbdev.defaults @@ -0,0 +1,85 @@ +LV_COLOR_DEPTH 16 + +LV_USE_LINUX_FBDEV 1 +LV_LINUX_FBDEV_RENDER_MODE LV_DISPLAY_RENDER_MODE_DIRECT +LV_LINUX_FBDEV_BUFFER_COUNT 2 + +# Input support (enable when using FBDEV or DRM) +LV_USE_EVDEV 1 +LV_USE_LIBINPUT 0 + +# Examples +LV_BUILD_EXAMPLES 1 + +# Demos +LV_BUILD_DEMOS 1 +LV_USE_DEMO_WIDGETS 1 +LV_USE_DEMO_KEYPAD_AND_ENCODER 1 +LV_USE_DEMO_BENCHMARK 1 +LV_USE_DEMO_RENDER 1 +LV_USE_DEMO_STRESS 1 +LV_USE_DEMO_MUSIC 1 + +# Enable logging for easier debugging +LV_USE_LOG 1 +LV_LOG_LEVEL LV_LOG_LEVEL_WARN +LV_LOG_PRINTF 1 + +# Enable sysmon to track performance +LV_USE_SYSMON 1 +LV_USE_PERF_MONITOR 1 +LV_SYSMON_PROC_IDLE_AVAILABLE 1 + +# Vector graphics +LV_USE_FLOAT 1 +LV_USE_MATRIX 1 +LV_USE_VECTOR_GRAPHIC 1 +LV_USE_THORVG_INTERNAL 1 +LV_USE_LOTTIE 1 + +# Assert handler +LV_ASSERT_HANDLER_INCLUDE +LV_ASSERT_HANDLER assert(0); + +# FS support +LV_USE_FS_STDIO 1 +LV_FS_DEFAULT_DRIVER_LETTER 'A' +LV_FS_STDIO_LETTER 'A' + +# Performance +LV_DRAW_LAYER_SIMPLE_BUF_SIZE (256 * 1024) +LV_OBJ_STYLE_CACHE 1 + +# Gradients +LV_USE_DRAW_SW_COMPLEX_GRADIENTS 1 + +# Enable built-in fonts +LV_FONT_MONTSERRAT_12 1 +LV_FONT_MONTSERRAT_14 1 +LV_FONT_MONTSERRAT_16 1 +LV_FONT_MONTSERRAT_18 1 +LV_FONT_MONTSERRAT_20 1 +LV_FONT_MONTSERRAT_22 1 +LV_FONT_MONTSERRAT_24 1 +LV_FONT_MONTSERRAT_26 1 +LV_FONT_MONTSERRAT_28 1 +LV_FONT_MONTSERRAT_30 1 +LV_FONT_MONTSERRAT_32 1 +LV_FONT_MONTSERRAT_34 1 +LV_FONT_MONTSERRAT_36 1 +LV_FONT_MONTSERRAT_38 1 +LV_FONT_MONTSERRAT_40 1 +LV_FONT_MONTSERRAT_42 1 +LV_FONT_MONTSERRAT_44 1 +LV_FONT_MONTSERRAT_46 1 +LV_FONT_MONTSERRAT_48 1 +LV_FONT_MONTSERRAT_28_COMPRESSED 1 +LV_FONT_DEJAVU_16_PERSIAN_HEBREW 1 +LV_FONT_SOURCE_HAN_SANS_SC_16_CJK 1 +LV_FONT_UNSCII_8 1 +LV_FONT_FMT_TXT_LARGE 1 + +# Stdlib +LV_USE_STDLIB_MALLOC LV_STDLIB_CLIB +LV_USE_STDLIB_STRING LV_STDLIB_CLIB +LV_USE_STDLIB_SPRINTF LV_STDLIB_CLIB diff --git a/software/dmm/configs/glfw-3d.defaults b/software/dmm/configs/glfw-3d.defaults new file mode 100644 index 0000000..b4e5d1d --- /dev/null +++ b/software/dmm/configs/glfw-3d.defaults @@ -0,0 +1,90 @@ + +LV_USE_GLFW 1 +LV_USE_OPENGLES 1 + +# 3d draw unit +LV_USE_DRAW_OPENGLES 1 + +# 3d widgets +LV_USE_3DTEXTURE 1 +LV_USE_GLTF 1 + +# 3d demo +LV_USE_DEMO_GLTF 1 + + +# Examples +LV_BUILD_EXAMPLES 1 + +# Demos +LV_BUILD_DEMOS 1 +LV_USE_DEMO_WIDGETS 1 +LV_USE_DEMO_KEYPAD_AND_ENCODER 1 +LV_USE_DEMO_BENCHMARK 1 +LV_USE_DEMO_RENDER 1 +LV_USE_DEMO_STRESS 1 +LV_USE_DEMO_MUSIC 1 + +# Enable logging for easier debugging +LV_USE_LOG 1 +LV_LOG_LEVEL LV_LOG_LEVEL_WARN +LV_LOG_PRINTF 1 + +# Enable sysmon to track performance +LV_USE_SYSMON 1 +LV_USE_PERF_MONITOR 1 +LV_SYSMON_PROC_IDLE_AVAILABLE 1 + +# Vector graphics +LV_USE_FLOAT 1 +LV_USE_MATRIX 1 +LV_USE_VECTOR_GRAPHIC 1 +LV_USE_THORVG_INTERNAL 1 +LV_USE_LOTTIE 1 + +# Assert handler +LV_ASSERT_HANDLER_INCLUDE +LV_ASSERT_HANDLER assert(0); + +# FS support +LV_USE_FS_STDIO 1 +LV_FS_DEFAULT_DRIVER_LETTER 'A' +LV_FS_STDIO_LETTER 'A' + +# Performance +LV_DRAW_LAYER_SIMPLE_BUF_SIZE (256 * 1024) +LV_OBJ_STYLE_CACHE 1 + +# Gradients +LV_USE_DRAW_SW_COMPLEX_GRADIENTS 1 + +# Enable built-in fonts +LV_FONT_MONTSERRAT_12 1 +LV_FONT_MONTSERRAT_14 1 +LV_FONT_MONTSERRAT_16 1 +LV_FONT_MONTSERRAT_18 1 +LV_FONT_MONTSERRAT_20 1 +LV_FONT_MONTSERRAT_22 1 +LV_FONT_MONTSERRAT_24 1 +LV_FONT_MONTSERRAT_26 1 +LV_FONT_MONTSERRAT_28 1 +LV_FONT_MONTSERRAT_30 1 +LV_FONT_MONTSERRAT_32 1 +LV_FONT_MONTSERRAT_34 1 +LV_FONT_MONTSERRAT_36 1 +LV_FONT_MONTSERRAT_38 1 +LV_FONT_MONTSERRAT_40 1 +LV_FONT_MONTSERRAT_42 1 +LV_FONT_MONTSERRAT_44 1 +LV_FONT_MONTSERRAT_46 1 +LV_FONT_MONTSERRAT_48 1 +LV_FONT_MONTSERRAT_28_COMPRESSED 1 +LV_FONT_DEJAVU_16_PERSIAN_HEBREW 1 +LV_FONT_SOURCE_HAN_SANS_SC_16_CJK 1 +LV_FONT_UNSCII_8 1 +LV_FONT_FMT_TXT_LARGE 1 + +# Stdlib +LV_USE_STDLIB_MALLOC LV_STDLIB_CLIB +LV_USE_STDLIB_STRING LV_STDLIB_CLIB +LV_USE_STDLIB_SPRINTF LV_STDLIB_CLIB diff --git a/software/dmm/configs/glfw.defaults b/software/dmm/configs/glfw.defaults new file mode 100644 index 0000000..03b659d --- /dev/null +++ b/software/dmm/configs/glfw.defaults @@ -0,0 +1,78 @@ +LV_USE_GLFW 1 +LV_USE_OPENGLES 1 + +# Examples +LV_BUILD_EXAMPLES 1 + +# Demos +LV_BUILD_DEMOS 1 +LV_USE_DEMO_WIDGETS 1 +LV_USE_DEMO_KEYPAD_AND_ENCODER 1 +LV_USE_DEMO_BENCHMARK 1 +LV_USE_DEMO_RENDER 1 +LV_USE_DEMO_STRESS 1 +LV_USE_DEMO_MUSIC 1 + +# Enable logging for easier debugging +LV_USE_LOG 1 +LV_LOG_LEVEL LV_LOG_LEVEL_WARN +LV_LOG_PRINTF 1 + +# Enable sysmon to track performance +LV_USE_SYSMON 1 +LV_USE_PERF_MONITOR 1 +LV_SYSMON_PROC_IDLE_AVAILABLE 1 + +# Vector graphics +LV_USE_FLOAT 1 +LV_USE_MATRIX 1 +LV_USE_VECTOR_GRAPHIC 1 +LV_USE_THORVG_INTERNAL 1 +LV_USE_LOTTIE 1 + +# Assert handler +LV_ASSERT_HANDLER_INCLUDE +LV_ASSERT_HANDLER assert(0); + +# FS support +LV_USE_FS_STDIO 1 +LV_FS_DEFAULT_DRIVER_LETTER 'A' +LV_FS_STDIO_LETTER 'A' + +# Performance +LV_DRAW_LAYER_SIMPLE_BUF_SIZE (256 * 1024) +LV_OBJ_STYLE_CACHE 1 + +# Gradients +LV_USE_DRAW_SW_COMPLEX_GRADIENTS 1 + +# Enable built-in fonts +LV_FONT_MONTSERRAT_12 1 +LV_FONT_MONTSERRAT_14 1 +LV_FONT_MONTSERRAT_16 1 +LV_FONT_MONTSERRAT_18 1 +LV_FONT_MONTSERRAT_20 1 +LV_FONT_MONTSERRAT_22 1 +LV_FONT_MONTSERRAT_24 1 +LV_FONT_MONTSERRAT_26 1 +LV_FONT_MONTSERRAT_28 1 +LV_FONT_MONTSERRAT_30 1 +LV_FONT_MONTSERRAT_32 1 +LV_FONT_MONTSERRAT_34 1 +LV_FONT_MONTSERRAT_36 1 +LV_FONT_MONTSERRAT_38 1 +LV_FONT_MONTSERRAT_40 1 +LV_FONT_MONTSERRAT_42 1 +LV_FONT_MONTSERRAT_44 1 +LV_FONT_MONTSERRAT_46 1 +LV_FONT_MONTSERRAT_48 1 +LV_FONT_MONTSERRAT_28_COMPRESSED 1 +LV_FONT_DEJAVU_16_PERSIAN_HEBREW 1 +LV_FONT_SOURCE_HAN_SANS_SC_16_CJK 1 +LV_FONT_UNSCII_8 1 +LV_FONT_FMT_TXT_LARGE 1 + +# Stdlib +LV_USE_STDLIB_MALLOC LV_STDLIB_CLIB +LV_USE_STDLIB_STRING LV_STDLIB_CLIB +LV_USE_STDLIB_SPRINTF LV_STDLIB_CLIB diff --git a/software/dmm/configs/sdl.defaults b/software/dmm/configs/sdl.defaults new file mode 100644 index 0000000..8c41f12 --- /dev/null +++ b/software/dmm/configs/sdl.defaults @@ -0,0 +1,83 @@ + +LV_USE_SDL 1 +LV_SDL_RENDER_MODE LV_DISPLAY_RENDER_MODE_DIRECT /**< LV_DISPLAY_RENDER_MODE_DIRECT is recommended for best performance */ +LV_SDL_BUF_COUNT 1 /**< 1 or 2 */ +LV_SDL_ACCELERATED 1 /**< 1: Use hardware acceleration*/ +LV_SDL_FULLSCREEN 0 /**< 1: Make the window full screen by default */ +LV_SDL_DIRECT_EXIT 1 /**< 1: Exit the application when all SDL windows are closed */ + +# Examples +LV_BUILD_EXAMPLES 1 + +# Demos +LV_BUILD_DEMOS 1 +LV_USE_DEMO_WIDGETS 1 +LV_USE_DEMO_KEYPAD_AND_ENCODER 1 +LV_USE_DEMO_BENCHMARK 1 +LV_USE_DEMO_RENDER 1 +LV_USE_DEMO_STRESS 1 +LV_USE_DEMO_MUSIC 1 + +# Enable logging for easier debugging +LV_USE_LOG 1 +LV_LOG_LEVEL LV_LOG_LEVEL_WARN +LV_LOG_PRINTF 1 + +# Enable sysmon to track performance +LV_USE_SYSMON 1 +LV_USE_PERF_MONITOR 1 +LV_SYSMON_PROC_IDLE_AVAILABLE 1 + +# Vector graphics +LV_USE_FLOAT 1 +LV_USE_MATRIX 1 +LV_USE_VECTOR_GRAPHIC 1 +LV_USE_THORVG_INTERNAL 1 +LV_USE_LOTTIE 1 + +# Assert handler +LV_ASSERT_HANDLER_INCLUDE +LV_ASSERT_HANDLER assert(0); + +# FS support +LV_USE_FS_STDIO 1 +LV_FS_DEFAULT_DRIVER_LETTER 'A' +LV_FS_STDIO_LETTER 'A' + +# Performance +LV_DRAW_LAYER_SIMPLE_BUF_SIZE (256 * 1024) +LV_OBJ_STYLE_CACHE 1 + +# Gradients +LV_USE_DRAW_SW_COMPLEX_GRADIENTS 1 + +# Enable built-in fonts +LV_FONT_MONTSERRAT_12 1 +LV_FONT_MONTSERRAT_14 1 +LV_FONT_MONTSERRAT_16 1 +LV_FONT_MONTSERRAT_18 1 +LV_FONT_MONTSERRAT_20 1 +LV_FONT_MONTSERRAT_22 1 +LV_FONT_MONTSERRAT_24 1 +LV_FONT_MONTSERRAT_26 1 +LV_FONT_MONTSERRAT_28 1 +LV_FONT_MONTSERRAT_30 1 +LV_FONT_MONTSERRAT_32 1 +LV_FONT_MONTSERRAT_34 1 +LV_FONT_MONTSERRAT_36 1 +LV_FONT_MONTSERRAT_38 1 +LV_FONT_MONTSERRAT_40 1 +LV_FONT_MONTSERRAT_42 1 +LV_FONT_MONTSERRAT_44 1 +LV_FONT_MONTSERRAT_46 1 +LV_FONT_MONTSERRAT_48 1 +LV_FONT_MONTSERRAT_28_COMPRESSED 1 +LV_FONT_DEJAVU_16_PERSIAN_HEBREW 1 +LV_FONT_SOURCE_HAN_SANS_SC_16_CJK 1 +LV_FONT_UNSCII_8 1 +LV_FONT_FMT_TXT_LARGE 1 + +# Stdlib +LV_USE_STDLIB_MALLOC LV_STDLIB_CLIB +LV_USE_STDLIB_STRING LV_STDLIB_CLIB +LV_USE_STDLIB_SPRINTF LV_STDLIB_CLIB diff --git a/software/dmm/configs/template/linux-default-settings.defaults b/software/dmm/configs/template/linux-default-settings.defaults new file mode 100644 index 0000000..dd1a068 --- /dev/null +++ b/software/dmm/configs/template/linux-default-settings.defaults @@ -0,0 +1,79 @@ +# This file includes some default linux settings that will always be present +# It can be copied when creating a new .defaults config +# Maybe some day we can add a way to include .defaults files but that would be less readable + +# Examples +LV_BUILD_EXAMPLES 1 + +# Demos +LV_BUILD_DEMOS 1 +LV_USE_DEMO_WIDGETS 1 +LV_USE_DEMO_KEYPAD_AND_ENCODER 1 +LV_USE_DEMO_BENCHMARK 1 +LV_USE_DEMO_RENDER 1 +LV_USE_DEMO_STRESS 1 +LV_USE_DEMO_MUSIC 1 + +# Enable logging for easier debugging +LV_USE_LOG 1 +LV_LOG_LEVEL LV_LOG_LEVEL_WARN +LV_LOG_PRINTF 1 + +# Enable sysmon to track performance +LV_USE_SYSMON 1 +LV_USE_PERF_MONITOR 1 +LV_SYSMON_PROC_IDLE_AVAILABLE 1 + +# Vector graphics +LV_USE_FLOAT 1 +LV_USE_MATRIX 1 +LV_USE_VECTOR_GRAPHIC 1 +LV_USE_THORVG_INTERNAL 1 +LV_USE_LOTTIE 1 + +# Assert handler +LV_ASSERT_HANDLER_INCLUDE +LV_ASSERT_HANDLER assert(0); + +# FS support +LV_USE_FS_STDIO 1 +LV_FS_DEFAULT_DRIVER_LETTER 'A' +LV_FS_STDIO_LETTER 'A' + +# Performance +LV_DRAW_LAYER_SIMPLE_BUF_SIZE (256 * 1024) +LV_OBJ_STYLE_CACHE 1 + +# Gradients +LV_USE_DRAW_SW_COMPLEX_GRADIENTS 1 + +# Enable built-in fonts +LV_FONT_MONTSERRAT_12 1 +LV_FONT_MONTSERRAT_14 1 +LV_FONT_MONTSERRAT_16 1 +LV_FONT_MONTSERRAT_18 1 +LV_FONT_MONTSERRAT_20 1 +LV_FONT_MONTSERRAT_22 1 +LV_FONT_MONTSERRAT_24 1 +LV_FONT_MONTSERRAT_26 1 +LV_FONT_MONTSERRAT_28 1 +LV_FONT_MONTSERRAT_30 1 +LV_FONT_MONTSERRAT_32 1 +LV_FONT_MONTSERRAT_34 1 +LV_FONT_MONTSERRAT_36 1 +LV_FONT_MONTSERRAT_38 1 +LV_FONT_MONTSERRAT_40 1 +LV_FONT_MONTSERRAT_42 1 +LV_FONT_MONTSERRAT_44 1 +LV_FONT_MONTSERRAT_46 1 +LV_FONT_MONTSERRAT_48 1 +LV_FONT_MONTSERRAT_28_COMPRESSED 1 +LV_FONT_DEJAVU_16_PERSIAN_HEBREW 1 +LV_FONT_SOURCE_HAN_SANS_SC_16_CJK 1 +LV_FONT_UNSCII_8 1 +LV_FONT_FMT_TXT_LARGE 1 + +# Stdlib +LV_USE_STDLIB_MALLOC LV_STDLIB_CLIB +LV_USE_STDLIB_STRING LV_STDLIB_CLIB +LV_USE_STDLIB_SPRINTF LV_STDLIB_CLIB diff --git a/software/dmm/configs/wayland-g2d.defaults b/software/dmm/configs/wayland-g2d.defaults new file mode 100644 index 0000000..983b4a3 --- /dev/null +++ b/software/dmm/configs/wayland-g2d.defaults @@ -0,0 +1,89 @@ +LV_COLOR_DEPTH 16 + +# draw unit +LV_USE_G2D 1 +LV_USE_DRAW_G2D 1 +LV_USE_ROTATE_G2D 1 + +# drivers +LV_USE_WAYLAND 1 +LV_WAYLAND_BUF_COUNT 3 +LV_WAYLAND_USE_DMABUF 1 +LV_WAYLAND_RENDER_MODE LV_DISPLAY_RENDER_MODE_DIRECT +LV_WAYLAND_WINDOW_DECORATIONS 1 + +# Examples +LV_BUILD_EXAMPLES 1 + +# Demos +LV_BUILD_DEMOS 1 +LV_USE_DEMO_WIDGETS 1 +LV_USE_DEMO_KEYPAD_AND_ENCODER 1 +LV_USE_DEMO_BENCHMARK 1 +LV_USE_DEMO_RENDER 1 +LV_USE_DEMO_STRESS 1 +LV_USE_DEMO_MUSIC 1 + +# Enable logging for easier debugging +LV_USE_LOG 1 +LV_LOG_LEVEL LV_LOG_LEVEL_WARN +LV_LOG_PRINTF 1 + +# Enable sysmon to track performance +LV_USE_SYSMON 1 +LV_USE_PERF_MONITOR 1 +LV_SYSMON_PROC_IDLE_AVAILABLE 1 + +# Vector graphics +LV_USE_FLOAT 1 +LV_USE_MATRIX 1 +LV_USE_VECTOR_GRAPHIC 1 +LV_USE_THORVG_INTERNAL 1 +LV_USE_LOTTIE 1 + +# Assert handler +LV_ASSERT_HANDLER_INCLUDE +LV_ASSERT_HANDLER assert(0); + +# FS support +LV_USE_FS_STDIO 1 +LV_FS_DEFAULT_DRIVER_LETTER 'A' +LV_FS_STDIO_LETTER 'A' + +# Performance +LV_DRAW_LAYER_SIMPLE_BUF_SIZE (256 * 1024) +LV_OBJ_STYLE_CACHE 1 + +# Gradients +LV_USE_DRAW_SW_COMPLEX_GRADIENTS 1 + +# Enable built-in fonts +LV_FONT_MONTSERRAT_12 1 +LV_FONT_MONTSERRAT_14 1 +LV_FONT_MONTSERRAT_16 1 +LV_FONT_MONTSERRAT_18 1 +LV_FONT_MONTSERRAT_20 1 +LV_FONT_MONTSERRAT_22 1 +LV_FONT_MONTSERRAT_24 1 +LV_FONT_MONTSERRAT_26 1 +LV_FONT_MONTSERRAT_28 1 +LV_FONT_MONTSERRAT_30 1 +LV_FONT_MONTSERRAT_32 1 +LV_FONT_MONTSERRAT_34 1 +LV_FONT_MONTSERRAT_36 1 +LV_FONT_MONTSERRAT_38 1 +LV_FONT_MONTSERRAT_40 1 +LV_FONT_MONTSERRAT_42 1 +LV_FONT_MONTSERRAT_44 1 +LV_FONT_MONTSERRAT_46 1 +LV_FONT_MONTSERRAT_48 1 +LV_FONT_MONTSERRAT_28_COMPRESSED 1 +LV_FONT_DEJAVU_16_PERSIAN_HEBREW 1 +LV_FONT_SOURCE_HAN_SANS_SC_16_CJK 1 +LV_FONT_UNSCII_8 1 +LV_FONT_FMT_TXT_LARGE 1 + +# Stdlib +LV_USE_STDLIB_MALLOC LV_STDLIB_CLIB +LV_USE_STDLIB_STRING LV_STDLIB_CLIB +LV_USE_STDLIB_SPRINTF LV_STDLIB_CLIB diff --git a/software/dmm/configs/wayland.defaults b/software/dmm/configs/wayland.defaults new file mode 100644 index 0000000..3789ea7 --- /dev/null +++ b/software/dmm/configs/wayland.defaults @@ -0,0 +1,81 @@ +LV_COLOR_DEPTH 16 + +# drivers +LV_USE_WAYLAND 1 +LV_WAYLAND_WINDOW_DECORATIONS 0 // Set to 1 on weston or gnome + +# Examples +LV_BUILD_EXAMPLES 1 + +# Demos +LV_BUILD_DEMOS 1 +LV_USE_DEMO_WIDGETS 1 +LV_USE_DEMO_KEYPAD_AND_ENCODER 1 +LV_USE_DEMO_BENCHMARK 1 +LV_USE_DEMO_RENDER 1 +LV_USE_DEMO_STRESS 1 +LV_USE_DEMO_MUSIC 1 + +# Enable logging for easier debugging +LV_USE_LOG 1 +LV_LOG_LEVEL LV_LOG_LEVEL_WARN +LV_LOG_PRINTF 1 + +# Enable sysmon to track performance +LV_USE_SYSMON 1 +LV_USE_PERF_MONITOR 1 +LV_SYSMON_PROC_IDLE_AVAILABLE 1 + +# Vector graphics +LV_USE_FLOAT 1 +LV_USE_MATRIX 1 +LV_USE_VECTOR_GRAPHIC 1 +LV_USE_THORVG_INTERNAL 1 +LV_USE_LOTTIE 1 + +# Assert handler +LV_ASSERT_HANDLER_INCLUDE +LV_ASSERT_HANDLER assert(0); + +# FS support +LV_USE_FS_STDIO 1 +LV_FS_DEFAULT_DRIVER_LETTER 'A' +LV_FS_STDIO_LETTER 'A' + +# Performance +LV_DRAW_LAYER_SIMPLE_BUF_SIZE (256 * 1024) +LV_OBJ_STYLE_CACHE 1 + +# Gradients +LV_USE_DRAW_SW_COMPLEX_GRADIENTS 1 + +# Enable built-in fonts +LV_FONT_MONTSERRAT_12 1 +LV_FONT_MONTSERRAT_14 1 +LV_FONT_MONTSERRAT_16 1 +LV_FONT_MONTSERRAT_18 1 +LV_FONT_MONTSERRAT_20 1 +LV_FONT_MONTSERRAT_22 1 +LV_FONT_MONTSERRAT_24 1 +LV_FONT_MONTSERRAT_26 1 +LV_FONT_MONTSERRAT_28 1 +LV_FONT_MONTSERRAT_30 1 +LV_FONT_MONTSERRAT_32 1 +LV_FONT_MONTSERRAT_34 1 +LV_FONT_MONTSERRAT_36 1 +LV_FONT_MONTSERRAT_38 1 +LV_FONT_MONTSERRAT_40 1 +LV_FONT_MONTSERRAT_42 1 +LV_FONT_MONTSERRAT_44 1 +LV_FONT_MONTSERRAT_46 1 +LV_FONT_MONTSERRAT_48 1 +LV_FONT_MONTSERRAT_28_COMPRESSED 1 +LV_FONT_DEJAVU_16_PERSIAN_HEBREW 1 +LV_FONT_SOURCE_HAN_SANS_SC_16_CJK 1 +LV_FONT_UNSCII_8 1 +LV_FONT_FMT_TXT_LARGE 1 + +# Stdlib +LV_USE_STDLIB_MALLOC LV_STDLIB_CLIB +LV_USE_STDLIB_STRING LV_STDLIB_CLIB +LV_USE_STDLIB_SPRINTF LV_STDLIB_CLIB diff --git a/software/dmm/docker/Dockerfile_DEBIAN b/software/dmm/docker/Dockerfile_DEBIAN new file mode 100644 index 0000000..aef66a4 --- /dev/null +++ b/software/dmm/docker/Dockerfile_DEBIAN @@ -0,0 +1,23 @@ +ARG BASE_OS +FROM "$BASE_OS" + +RUN DEBIAN_FRONTEND="noninteractive" apt-get update + +# Build tools +RUN DEBIAN_FRONTEND="noninteractive" apt-get install -y make cmake build-essential python3-venv git + +# Required for LV_USE_SDL +RUN DEBIAN_FRONTEND="noninteractive" apt-get install -y libsdl2-dev libsdl2-image-dev + +# Required for LV_USE_LINUX_DRM +RUN DEBIAN_FRONTEND="noninteractive" apt-get install -y libevdev-dev libdrm-dev linux-headers-generic libgbm-dev + +# Required for LV_USE_WAYLAND +RUN DEBIAN_FRONTEND="noninteractive" apt-get install -y libwayland-dev libxkbcommon-dev wayland-protocols + +# Required for LV_USE_GLFW +RUN DEBIAN_FRONTEND="noninteractive" apt-get install -y libglfw3-dev libglew-dev + + +RUN mkdir /workdir +WORKDIR /workdir diff --git a/software/dmm/docker/Dockerfile_cross b/software/dmm/docker/Dockerfile_cross new file mode 100644 index 0000000..3fa1e8b --- /dev/null +++ b/software/dmm/docker/Dockerfile_cross @@ -0,0 +1,28 @@ +FROM debian:12 + +# Set environment variables to avoid interactive prompts during package installations +ENV DEBIAN_FRONTEND=noninteractive + +# Update package list and install necessary packages, including Git +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + gcc \ + g++ \ + cmake \ + libdrm-dev \ + libsdl2-dev \ + libsdl2-image-dev \ + wayland-protocols \ + build-essential \ + ca-certificates \ + python3-venv \ + libevdev-dev \ + curl \ + git \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# Verify that GCC, G++, and CMake are installed +RUN gcc --version && g++ --version && cmake --version + +WORKDIR app diff --git a/software/dmm/lv_conf.defaults b/software/dmm/lv_conf.defaults new file mode 100644 index 0000000..e4a749e --- /dev/null +++ b/software/dmm/lv_conf.defaults @@ -0,0 +1,175 @@ +# This file gets converted into a `lv_conf.h` at compile time +# A list of all configuration options can be found inside `lvgl/lv_conf_template.h` +# You can also start from a vast list of configs inside the configs folder. +# To use one of those configs directly, set the `CONFIG` CMake variable: +# eg: `cmake -B build -DCONFIG=drm-egl-2d` for `configs/drm-egl-2d.defaults` + +LV_COLOR_DEPTH 16 + +# Draw units +# A draw unit is responsible for how the LVGL UI is rendered to the draw buffer +# tip: use LV_DRAW_SW_ASM_NEON if your MPU supports NEON +LV_USE_DRAW_SW_ASM LV_DRAW_SW_ASM_NONE + +# Opengl +LV_USE_DRAW_OPENGLES 0 + +# G2D +LV_USE_DRAW_G2D 0 + +# SDL +LV_USE_DRAW_SDL 0 + +# Display drivers +# A display driver is responsible for how the draw buffer is rendered to the screen + +# Simple framebuffer device +LV_USE_LINUX_FBDEV 1 +LV_LINUX_FBDEV_RENDER_MODE LV_DISPLAY_RENDER_MODE_DIRECT +LV_LINUX_FBDEV_BUFFER_COUNT 2 + +# DRM Support +LV_USE_LINUX_DRM 0 +LV_USE_LINUX_DRM_GBM_BUFFERS 0 +# USE_EGL requires LV_USE_OPENGLES +LV_LINUX_DRM_USE_EGL 0 + +# SDL2 +LV_USE_SDL 0 +LV_SDL_RENDER_MODE LV_DISPLAY_RENDER_MODE_DIRECT +LV_SDL_BUF_COUNT 1 +LV_SDL_ACCELERATED 1 +LV_SDL_FULLSCREEN 0 +LV_SDL_DIRECT_EXIT 1 +LV_SDL_MOUSEWHEEL_MODE LV_SDL_MOUSEWHEEL_MODE_ENCODER + +# Wayland +LV_USE_WAYLAND 0 +LV_WAYLAND_BUF_COUNT 1 +LV_WAYLAND_RENDER_MODE LV_DISPLAY_RENDER_MODE_PARTIAL +LV_WAYLAND_WINDOW_DECORATIONS 0 +LV_WAYLAND_USE_DMABUF 0 + +# GLFW +# GLFW requires LV_USE_OPENGLES +LV_USE_GLFW 0 + +# Input support (enable when using FBDEV or DRM) +LV_USE_EVDEV 1 +LV_USE_LIBINPUT 0 + +# Auxiliary drivers +# Enable OPENGLES when using GLFW or EGL +LV_USE_OPENGLES 0 + +# Demos +# Requires GLFW or EGL +LV_USE_DEMO_GLTF 0 + +# Demos from `https://github.com/lvgl/lv_demos` +LV_USE_DEMO_HIGH_RES 0 +LV_USE_DEMO_SCROLL 0 +LV_USE_DEMO_TRANSFORM 0 +LV_USE_DEMO_MULTILANG 0 +LV_USE_DEMO_FLEX_LAYOUT 0 + +# TTF decoder +LV_USE_TINY_TTF 1 + +# Support using images as font in label or span widgets +LV_USE_IMGFONT 1 + +# FS support +LV_USE_FS_STDIO 1 +LV_FS_DEFAULT_DRIVER_LETTER 'A' +LV_FS_STDIO_LETTER 'A' + +# Image decoding +LV_BIN_DECODER_RAM_LOAD 1 +LV_USE_TJPGD 1 +LV_USE_LODEPNG 1 +LV_USE_BMP 1 + +# Compression +LV_USE_LZ4_INTERNAL 1 +LV_USE_RLE 1 + +# Misc +LV_USE_BARCODE 1 +LV_USE_QRCODE 1 + +# Examples +LV_BUILD_EXAMPLES 1 + +# Demos +LV_BUILD_DEMOS 1 +LV_USE_DEMO_WIDGETS 1 +LV_USE_DEMO_KEYPAD_AND_ENCODER 1 +LV_USE_DEMO_BENCHMARK 1 +LV_USE_DEMO_RENDER 1 +LV_USE_DEMO_STRESS 1 +LV_USE_DEMO_MUSIC 1 + +# Enable logging for easier debugging +LV_USE_LOG 1 +LV_LOG_LEVEL LV_LOG_LEVEL_WARN +LV_LOG_PRINTF 1 + +# Enable sysmon to track performance +LV_USE_SYSMON 1 +LV_USE_PERF_MONITOR 1 +LV_SYSMON_PROC_IDLE_AVAILABLE 1 + +# Vector graphics +LV_USE_FLOAT 1 +LV_USE_MATRIX 1 +LV_USE_VECTOR_GRAPHIC 1 +LV_USE_THORVG_INTERNAL 1 +LV_USE_LOTTIE 1 + +# Assert handler +LV_ASSERT_HANDLER_INCLUDE +LV_ASSERT_HANDLER assert(0); + +# FS support +LV_USE_FS_STDIO 1 +LV_FS_DEFAULT_DRIVER_LETTER 'A' +LV_FS_STDIO_LETTER 'A' + +# Performance +LV_DRAW_LAYER_SIMPLE_BUF_SIZE (256 * 1024) +LV_OBJ_STYLE_CACHE 1 + +# Gradients +LV_USE_DRAW_SW_COMPLEX_GRADIENTS 1 + +# Enable built-in fonts +LV_FONT_MONTSERRAT_12 1 +LV_FONT_MONTSERRAT_14 1 +LV_FONT_MONTSERRAT_16 1 +LV_FONT_MONTSERRAT_18 1 +LV_FONT_MONTSERRAT_20 1 +LV_FONT_MONTSERRAT_22 1 +LV_FONT_MONTSERRAT_24 1 +LV_FONT_MONTSERRAT_26 1 +LV_FONT_MONTSERRAT_28 1 +LV_FONT_MONTSERRAT_30 1 +LV_FONT_MONTSERRAT_32 1 +LV_FONT_MONTSERRAT_34 1 +LV_FONT_MONTSERRAT_36 1 +LV_FONT_MONTSERRAT_38 1 +LV_FONT_MONTSERRAT_40 1 +LV_FONT_MONTSERRAT_42 1 +LV_FONT_MONTSERRAT_44 1 +LV_FONT_MONTSERRAT_46 1 +LV_FONT_MONTSERRAT_48 1 +LV_FONT_MONTSERRAT_28_COMPRESSED 1 +LV_FONT_DEJAVU_16_PERSIAN_HEBREW 1 +LV_FONT_SOURCE_HAN_SANS_SC_16_CJK 1 +LV_FONT_UNSCII_8 1 +LV_FONT_FMT_TXT_LARGE 1 + +# Stdlib +LV_USE_STDLIB_MALLOC LV_STDLIB_CLIB +LV_USE_STDLIB_STRING LV_STDLIB_CLIB +LV_USE_STDLIB_SPRINTF LV_STDLIB_CLIB diff --git a/software/dmm/lv_conf.defconfig b/software/dmm/lv_conf.defconfig new file mode 100644 index 0000000..51347ea --- /dev/null +++ b/software/dmm/lv_conf.defconfig @@ -0,0 +1,10 @@ +CONFIG_LV_COLOR_DEPTH_16=y +CONFIG_LV_USE_CLIB_SPRINTF=y +CONFIG_LV_USE_CLIB_MALLOC=y +CONFIG_LV_USE_CLIB_STRING=y +CONFIG_LV_USE_VECTOR_GRAPHICS=y +CONFIG_LV_USE_WAYLAND=y +CONFIG_LV_USE_LINUX_FBDEV=y + +CONFIG_LV_BUILD_DEMOS=y +CONFIG_LV_USE_DEMO_WIDGETS=y diff --git a/software/dmm/lvgl b/software/dmm/lvgl new file mode 160000 index 0000000..87f5ebd --- /dev/null +++ b/software/dmm/lvgl @@ -0,0 +1 @@ +Subproject commit 87f5ebd76a8bf5db2f706c7f528e97e3fb5c7f6a diff --git a/software/dmm/manifest.json b/software/dmm/manifest.json new file mode 100644 index 0000000..d4bcd82 --- /dev/null +++ b/software/dmm/manifest.json @@ -0,0 +1,121 @@ +{ + "name": "LVGL on Linux", + "maintainer": "LVGL", + "hostOperatingsystem": [ + "Linux" + ], + "environment": [ + "CMake", + "SDL", + "DRM", + "Linux" + ], + "description": "Example project to use LVGL on top of Linux graphics stack. Currently supported backends are either legacy framebuffer (fbdev), modern DRM/KMS, or SDL2.", + "shortDescription": "CMake project for Linux devices supporting various display drivers.", + "urlToClone": "https://github.com/lvgl/lv_port_linux", + "logos": [ + "https://raw.githubusercontent.com/lvgl/project-creator/master/meta/images/linux/logo.svg" + ], + "image": "https://raw.githubusercontent.com/lvgl/project-creator/master/meta/images/linux/logo.svg", + "branches": [ + "release/v9.2" + ], + "settings": [ + { + "type": "dropdown", + "label": "Color Depth", + "options": [ + { + "name": "16 (RGB565)", + "value": "16" + }, + { + "name": "24 (RGB565)", + "value": "24" + }, + { + "name": "32 (RGB565)", + "value": "32" + } + ], + "actions": [ + { + "toReplace": "LV_COLOR_DEPTH \\d+", + "newContent": "LV_COLOR_DEPTH {value}", + "filePath": "lv_conf.defaults" + } + ] + }, + { + "type": "dropdown", + "label": "Show performance monitor", + "options": [ + { + "name": "Yes", + "value": "1", + "default": "true" + }, + { + "name": "No", + "value": "0" + } + ], + "actions": [ + { + "toReplace": "LV_USE_PERF_MONITOR .*", + "newContent": "LV_USE_PERF_MONITOR {value}", + "filePath": "lv_conf.defaults" + } + ] + }, + { + "type": "dropdown", + "label": "Select display driver", + "options": [ + { + "name": "Linux frame buffer device", + "value": "0", + "default": "true" + }, + { + "name": "DRM", + "value": "1" + }, + { + "name": "SDL", + "value": "2" + }, + { + "name": "Wayland", + "value": "3" + } + ], + "actions": [ + { + "ifValue": "0", + "toReplace": "LV_USE_LINUX_FBDEV +\\d+", + "newContent": "LV_USE_LINUX_FBDEV 1", + "filePath": "lv_conf.defaults" + }, + { + "ifValue": "1", + "toReplace": "LV_USE_LINUX_DRM +\\d+", + "newContent": "LV_USE_LINUX_DRM 1", + "filePath": "lv_conf.defaults" + }, + { + "ifValue": "2", + "toReplace": "LV_USE_SDL +\\d+", + "newContent": "LV_USE_SDL 1", + "filePath": "lv_conf.defaults" + }, + { + "ifValue": "3", + "toReplace": "LV_USE_WAYLAND +\\d+", + "newContent": "LV_USE_WAYLAND 1", + "filePath": "lv_conf.defaults" + } + ] + } + ] +} diff --git a/software/dmm/src/lib/backends.h b/software/dmm/src/lib/backends.h new file mode 100644 index 0000000..69d558c --- /dev/null +++ b/software/dmm/src/lib/backends.h @@ -0,0 +1,97 @@ +/** + * @file backends.h + * + * Interface for abstraction layer of a device backend + * + * Copyright (c) 2025 EDGEMTech Ltd. + * + * Author: EDGEMTech Ltd, Erik Tagirov (erik.tagirov@edgemtech.ch) + * + */ +#ifndef BACKENDS_H +#define BACKENDS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/********************* + * INCLUDES + *********************/ + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ +/* Prototype of the display initialization functions */ +typedef lv_display_t * (*display_init_t)(void); + +/* Prototype of the run loop */ +typedef void (*run_loop_t)(void); + +/* Represents a display driver handle */ +typedef struct { + display_init_t init_display; /* The display creation/initialization function */ + run_loop_t run_loop; /* The run loop of the driver handle */ + lv_display_t * display; /* The LVGL display that was created */ +} display_backend_t; + +/* Prototype for the initialization of an indev driver backend */ +typedef lv_indev_t * (*indev_init_t)(lv_display_t * display); + +/* Represents an indev driver backend */ +typedef struct { + indev_init_t init_indev; +} indev_backend_t; + +/* Regroup all different types of driver backend */ +typedef union { + display_backend_t * display; + indev_backend_t * indev; +} backend_handle_t; + +/* Define each type of driver backend */ +typedef enum { + BACKEND_DISPLAY, + BACKEND_INDEV +} backend_type_t; + +/* Driver backend descriptor */ +typedef struct { + backend_handle_t * handle; + char * name; + backend_type_t type; +} backend_t; + +/* Prototype used to register a backend */ +typedef int (*backend_init_t)(backend_t *); + +/********************** + * GLOBAL PROTOTYPES + **********************/ + +/* Graphics backends */ +int backend_init_fbdev(backend_t * backend); +int backend_init_drm(backend_t * backend); +int backend_init_sdl(backend_t * backend); +int backend_init_glfw3(backend_t * backend); +int backend_init_wayland(backend_t * backend); +int backend_init_x11(backend_t * backend); + +/* Input device driver backends */ +int backend_init_evdev(backend_t * backend); + +/********************** + * MACROS + **********************/ + +#ifdef __cplusplus +} /*extern "C"*/ +#endif + +#endif /*BACKEND_H*/ + + diff --git a/software/dmm/src/lib/display_backends/drm.c b/software/dmm/src/lib/display_backends/drm.c new file mode 100644 index 0000000..5e2621a --- /dev/null +++ b/software/dmm/src/lib/display_backends/drm.c @@ -0,0 +1,117 @@ +/** + * + * @file drm.c + * + * The DRM/KMS backend + * + * Based on the original file from the repository + * + * - Move to a separate file + * 2025 EDGEMTech Ltd. + * + * Author: EDGEMTech Ltd, Erik Tagirov (erik.tagirov@edgemtech.ch) + * + */ + +/********************* + * INCLUDES + *********************/ +#include +#include +#include + +#include "lvgl/lvgl.h" +#if LV_USE_LINUX_DRM +#include "../simulator_util.h" +#include "../simulator_settings.h" +#include "../backends.h" + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * STATIC PROTOTYPES + **********************/ +static void run_loop_drm(void); +static lv_display_t * init_drm(void); + + +/********************** + * STATIC VARIABLES + **********************/ +static char * backend_name = "DRM"; + +/********************** + * MACROS + **********************/ + +/********************** + * GLOBAL FUNCTIONS + **********************/ + +/** + * Register the backend + * + * @param backend the backend descriptor + * @description configure the descriptor + */ +int backend_init_drm(backend_t * backend) +{ + LV_ASSERT_NULL(backend); + + backend->handle->display = malloc(sizeof(display_backend_t)); + LV_ASSERT_NULL(backend->handle->display); + + backend->handle->display->init_display = init_drm; + backend->handle->display->run_loop = run_loop_drm; + backend->name = backend_name; + backend->type = BACKEND_DISPLAY; + + return 0; +} + +/********************** + * STATIC FUNCTIONS + **********************/ + +/** + * Initialize the DRM display driver + * + * @return the LVGL display + */ +static lv_display_t * init_drm(void) +{ + const char * device = getenv_default("LV_LINUX_DRM_CARD", lv_linux_drm_find_device_path()); + lv_display_t * disp = lv_linux_drm_create(); + + if(disp == NULL) { + return NULL; + } + + lv_linux_drm_set_file(disp, device, -1); + + return disp; +} + + +/** + * The run loop of the DRM driver + */ +static void run_loop_drm(void) +{ + uint32_t idle_time; + + /* Handle LVGL tasks */ + while(true) { + /* Returns the time to the next timer execution */ + idle_time = lv_timer_handler(); + usleep(idle_time * 1000); + } +} + +#endif /*#if LV_USE_LINUX_DRM*/ diff --git a/software/dmm/src/lib/display_backends/fbdev.c b/software/dmm/src/lib/display_backends/fbdev.c new file mode 100644 index 0000000..f330fd8 --- /dev/null +++ b/software/dmm/src/lib/display_backends/fbdev.c @@ -0,0 +1,116 @@ +/** + * @file fbdev.c + * + * Legacy framebuffer device + * + * Based on the original file from the repository + * + * Move to a separate file + * 2025 EDGEMTech Ltd. + * + * Author: EDGEMTech Ltd, Erik Tagirov (erik.tagirov@edgemtech.ch) + * + */ + +/********************* + * INCLUDES + *********************/ +#include +#include +#include + +#include "lvgl/lvgl.h" +#if LV_USE_LINUX_FBDEV +#include "../simulator_util.h" +#include "../backends.h" + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * STATIC PROTOTYPES + **********************/ + +static lv_display_t * init_fbdev(void); +static void run_loop_fbdev(void); + +/********************** + * STATIC VARIABLES + **********************/ + +static char * backend_name = "FBDEV"; + +/********************** + * MACROS + **********************/ + +/********************** + * GLOBAL FUNCTIONS + **********************/ + +/** + * Register the backend + * + * @param backend the backend descriptor + * @description configures the descriptor + */ +int backend_init_fbdev(backend_t * backend) +{ + LV_ASSERT_NULL(backend); + + backend->handle->display = malloc(sizeof(display_backend_t)); + LV_ASSERT_NULL(backend->handle->display); + + backend->handle->display->init_display = init_fbdev; + backend->handle->display->run_loop = run_loop_fbdev; + backend->name = backend_name; + backend->type = BACKEND_DISPLAY; + + return 0; +} + +/********************** + * STATIC FUNCTIONS + **********************/ + +/** + * Initialize the fbdev driver + * + * @return the LVGL display + */ +static lv_display_t * init_fbdev(void) +{ + const char * device = getenv_default("LV_LINUX_FBDEV_DEVICE", "/dev/fb0"); + lv_display_t * disp = lv_linux_fbdev_create(); + + if(disp == NULL) { + return NULL; + } + + lv_linux_fbdev_set_file(disp, device); + + return disp; +} + +/** + * The run loop of the fbdev driver + */ +static void run_loop_fbdev(void) +{ + uint32_t idle_time; + + /* Handle LVGL tasks */ + while(true) { + + /* Returns the time to the next timer execution */ + idle_time = lv_timer_handler(); + usleep(idle_time * 1000); + } +} + +#endif /*LV_USE_LINUX_FBDEV*/ diff --git a/software/dmm/src/lib/display_backends/glfw3.c b/software/dmm/src/lib/display_backends/glfw3.c new file mode 100644 index 0000000..bd5da5e --- /dev/null +++ b/software/dmm/src/lib/display_backends/glfw3.c @@ -0,0 +1,144 @@ +/** + * @file glfw3.c + * + * The GLFW3 backend + * + * Based on the original file from the repository + * + * Move to a separate file + * 2025 EDGEMTech Ltd. + * + * Author: EDGEMTech Ltd, Erik Tagirov (erik.tagirov@edgemtech.ch) + * + */ + +/********************* + * INCLUDES + *********************/ + +#include +#include +#include + +#include "lvgl/lvgl.h" +#if LV_USE_GLFW +#include "../simulator_util.h" +#include "../simulator_settings.h" +#include "../backends.h" + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * STATIC PROTOTYPES + **********************/ +static void run_loop_glfw3(void); +static lv_display_t * init_glfw3(void); + +/********************** + * STATIC VARIABLES + **********************/ +static char * backend_name = "GLFW"; + +/********************** + * EXTERNAL VARIABLES + **********************/ +extern simulator_settings_t settings; + +/********************** + * MACROS + **********************/ + +/********************** + * GLOBAL FUNCTIONS + **********************/ + +/** + * Register the backend + * + * @param backend the backend descriptor + * @description configures the descriptor + */ +int backend_init_glfw3(backend_t * backend) +{ + + LV_ASSERT_NULL(backend); + backend->handle->display = malloc(sizeof(display_backend_t)); + + LV_ASSERT_NULL(backend->handle->display); + + backend->handle->display->init_display = init_glfw3; + backend->handle->display->run_loop = run_loop_glfw3; + backend->name = backend_name; + backend->type = BACKEND_DISPLAY; + + return 0; + +} + +/********************** + * STATIC FUNCTIONS + **********************/ + +/** + * Initialize the GLFW3 display driver + * + * @note GLFW3 provides OpenGL but also handles inputs devices + * @return the LVGL display + */ +static lv_display_t * init_glfw3(void) +{ + lv_glfw_texture_t * window_texture; + lv_indev_t * mouse; + lv_display_t * disp_texture; + uint32_t disp_texture_id; + lv_obj_t * cursor_obj; + + /* create a window and initialize OpenGL */ + lv_glfw_window_t * window = lv_glfw_window_create( + settings.window_width, settings.window_height, true); + + /* create a display that flushes to a texture */ + disp_texture = lv_opengles_texture_create( + settings.window_width, settings.window_height); + lv_display_set_default(disp_texture); + + /* add the texture to the window */ + disp_texture_id = lv_opengles_texture_get_texture_id(disp_texture); + window_texture = lv_glfw_window_add_texture(window, disp_texture_id, + settings.window_width, settings.window_height); + + /* get the mouse indev of the window texture */ + mouse = lv_glfw_texture_get_mouse_indev(window_texture); + + /* add a cursor to the mouse indev */ + LV_IMAGE_DECLARE(mouse_cursor_icon); + cursor_obj = lv_image_create(lv_screen_active()); + lv_image_set_src(cursor_obj, &mouse_cursor_icon); + lv_indev_set_cursor(mouse, cursor_obj); + + return disp_texture; +} + +/** + * The run loop of the GLFW3 driver + */ +void run_loop_glfw3(void) +{ + uint32_t idle_time; + + /* Handle LVGL tasks */ + while(true) { + + /* Returns the time to the next timer execution */ + idle_time = lv_timer_handler(); + usleep(idle_time * 1000); + } +} + +#endif /*#if LV_USE_GLFW*/ diff --git a/software/dmm/src/lib/display_backends/sdl.c b/software/dmm/src/lib/display_backends/sdl.c new file mode 100644 index 0000000..ee9d427 --- /dev/null +++ b/software/dmm/src/lib/display_backends/sdl.c @@ -0,0 +1,134 @@ +/** + * @file sdl.c + * + * The backend for the SDL simulator + * + * Based on the original file from the repository + * + * - Move to a separate file + * 2025 EDGEMTech Ltd. + * + * Author: EDGEMTech Ltd, Erik Tagirov (erik.tagirov@edgemtech.ch) + * + */ + +/********************* + * INCLUDES + *********************/ +#include +#include +#include + +#include "lvgl/lvgl.h" +#if LV_USE_SDL +#include "../simulator_util.h" +#include "../simulator_settings.h" +#include "../backends.h" + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * EXTERNAL VARIABLES + **********************/ +extern simulator_settings_t settings; + +/********************** + * STATIC PROTOTYPES + **********************/ +static void run_loop_sdl(void); +static lv_display_t * init_sdl(void); + +/********************** + * STATIC VARIABLES + **********************/ + +static char * backend_name = "SDL"; + +/********************** + * MACROS + **********************/ + +/********************** + * GLOBAL FUNCTIONS + **********************/ + +/** + * Register the backend + * @param backend the backend descriptor + * @description configures the descriptor + */ +int backend_init_sdl(backend_t * backend) +{ + LV_ASSERT_NULL(backend); + + backend->handle->display = malloc(sizeof(display_backend_t)); + LV_ASSERT_NULL(backend->handle->display); + + backend->handle->display->init_display = init_sdl; + backend->handle->display->run_loop = run_loop_sdl; + backend->name = backend_name; + backend->type = BACKEND_DISPLAY; + + return 0; +} + +/********************** + * STATIC FUNCTIONS + **********************/ + +/** + * Initialize the SDL display driver + * + * @return the LVGL display + */ +static lv_display_t * init_sdl(void) +{ + + lv_display_t * disp = lv_sdl_window_create(settings.window_width, settings.window_height); + + if(disp == NULL) { + return NULL; + } + + lv_indev_t * mouse = lv_sdl_mouse_create(); + lv_indev_set_group(mouse, lv_group_get_default()); + lv_indev_set_display(mouse, disp); + + LV_IMAGE_DECLARE(mouse_cursor_icon); + lv_obj_t * cursor_obj; + cursor_obj = lv_image_create(lv_screen_active()); + lv_image_set_src(cursor_obj, &mouse_cursor_icon); + lv_indev_set_cursor(mouse, cursor_obj); + + lv_indev_t * mousewheel = lv_sdl_mousewheel_create(); + lv_indev_set_display(mousewheel, disp); + lv_indev_set_group(mousewheel, lv_group_get_default()); + + lv_indev_t * kb = lv_sdl_keyboard_create(); + lv_indev_set_display(kb, disp); + lv_indev_set_group(kb, lv_group_get_default()); + + return disp; +} + +/** + * The run loop of the SDL driver + */ +static void run_loop_sdl(void) +{ + uint32_t idle_time; + + /* Handle LVGL tasks */ + while(true) { + /* Returns the time to the next timer execution */ + idle_time = lv_timer_handler(); + usleep(idle_time * 1000); + } +} +#endif /*#if LV_USE_SDL*/ diff --git a/software/dmm/src/lib/display_backends/wayland.c b/software/dmm/src/lib/display_backends/wayland.c new file mode 100644 index 0000000..be873b3 --- /dev/null +++ b/software/dmm/src/lib/display_backends/wayland.c @@ -0,0 +1,143 @@ +/** + * @file wayland.c + * + * The wayland backend + * + * Based on the original file from the repository + * + * - Move to a separate file + * 2025 EDGEMTech Ltd. + * + * Author: EDGEMTech Ltd, Erik Tagirov (erik.tagirov@edgemtech.ch) + * + */ + +/********************* + * INCLUDES + *********************/ +#include +#include +#include + +#include "lvgl/lvgl.h" +#if LV_USE_WAYLAND +#include "../simulator_util.h" +#include "../simulator_settings.h" +#include "../backends.h" + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * STATIC PROTOTYPES + **********************/ +static lv_display_t * init_wayland(void); +static void run_loop_wayland(void); + +/********************** + * STATIC VARIABLES + **********************/ +static char * backend_name = "WAYLAND"; + +/********************** + * EXTERNAL VARIABLES + **********************/ +extern simulator_settings_t settings; + +/********************** + * MACROS + **********************/ + +/********************** + * GLOBAL FUNCTIONS + **********************/ + +/** + * Register the backend + * + * @param backend the backend descriptor + * @description configures the descriptor + */ +int backend_init_wayland(backend_t * backend) +{ + LV_ASSERT_NULL(backend); + backend->handle->display = malloc(sizeof(display_backend_t)); + LV_ASSERT_NULL(backend->handle->display); + + backend->handle->display->init_display = init_wayland; + backend->handle->display->run_loop = run_loop_wayland; + backend->name = backend_name; + backend->type = BACKEND_DISPLAY; + + return 0; +} + +/********************** + * STATIC FUNCTIONS + **********************/ + +/** + * Initialize the Wayland display driver + * + * @return the LVGL display + */ +static lv_display_t * init_wayland(void) +{ + lv_display_t * disp; + lv_group_t * g; + + disp = lv_wayland_window_create(settings.window_width, settings.window_height, + "LVGL Simulator", NULL); + + if(disp == NULL) { + die("Failed to initialize Wayland backend\n"); + } + + if(settings.fullscreen) { + lv_wayland_window_set_fullscreen(disp, true); + } + else if(settings.maximize) { + lv_wayland_window_set_maximized(disp, true); + } + + g = lv_group_create(); + lv_group_set_default(g); + lv_indev_set_group(lv_wayland_get_keyboard(disp), g); + lv_indev_set_group(lv_wayland_get_pointeraxis(disp), g); + + return disp; + +} + +/** + * The run loop of the DRM driver + * + * @note Currently, the wayland driver calls lv_timer_handler internally + * The wayland driver needs to be re-written to match the other backends + */ +static void run_loop_wayland(void) +{ + + uint32_t idle_time; + + /* Handle LVGL tasks */ + while(true) { + + idle_time = lv_wayland_timer_handler(); + + if(idle_time != 0) { + usleep(idle_time * 1000); + } + /* Run until the last window closes */ + if(!lv_wayland_window_is_open(NULL)) { + break; + } + } +} + +#endif /*#if LV_USE_WAYLAND*/ diff --git a/software/dmm/src/lib/display_backends/x11.c b/software/dmm/src/lib/display_backends/x11.c new file mode 100644 index 0000000..e4155dc --- /dev/null +++ b/software/dmm/src/lib/display_backends/x11.c @@ -0,0 +1,124 @@ +/** + * @file x11.c + * + * The backend for the X11 windowing system + * + * Based on the original file from the repository. + * + * Move to a separate file + * 2025 EDGEMTech Ltd. + * + * Author: EDGEMTech Ltd, Erik Tagirov (erik.tagirov@edgemtech.ch) + * + */ + +/********************* + * INCLUDES + *********************/ + +#include +#include +#include + +#include "lvgl/lvgl.h" +#if LV_USE_X11 +#include "../simulator_util.h" +#include "../simulator_settings.h" +#include "../backends.h" + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * EXTERNAL VARIABLES + **********************/ +extern simulator_settings_t settings; + +/********************** + * STATIC PROTOTYPES + **********************/ +static lv_display_t * init_x11(void); +static void run_loop_x11(void); + +/********************** + * STATIC VARIABLES + **********************/ +static char * backend_name = "X11"; + +/********************** + * MACROS + **********************/ + +/********************** + * GLOBAL FUNCTIONS + **********************/ + +/** + * Register the backend + * + * @param backend the backend descriptor + * @description configures the descriptor + */ +int backend_init_x11(backend_t * backend) +{ + LV_ASSERT_NULL(backend); + backend->handle->display = malloc(sizeof(display_backend_t)); + LV_ASSERT_NULL(backend->handle->display); + + backend->name = backend_name; + backend->handle->display->init_display = init_x11; + backend->handle->display->run_loop = run_loop_x11; + backend->type = BACKEND_DISPLAY; + + return 0; +} + +/********************** + * STATIC FUNCTIONS + **********************/ + +/** + * Initialize the X11 display driver + * + * @return the LVGL display + */ +static lv_display_t * init_x11(void) +{ + lv_display_t * disp; + LV_IMG_DECLARE(mouse_cursor_icon); + + disp = lv_x11_window_create("LVGL simulator", + settings.window_width, settings.window_height); + + disp = lv_display_get_default(); + + if(disp == NULL) { + return NULL; + } + + lv_x11_inputs_create(disp, &mouse_cursor_icon); + + return disp; +} + +/** + * The run loop of the X11 driver + */ +void run_loop_x11(void) +{ + uint32_t idle_time; + + /* Handle LVGL tasks */ + while(true) { + /* Returns the time to the next timer execution */ + idle_time = lv_timer_handler(); + usleep(idle_time * 1000); + } +} + +#endif /*#if LV_USE_X11*/ diff --git a/software/dmm/src/lib/driver_backends.c b/software/dmm/src/lib/driver_backends.c new file mode 100644 index 0000000..ec278b8 --- /dev/null +++ b/software/dmm/src/lib/driver_backends.c @@ -0,0 +1,286 @@ +/** + * @file driver_backends.c + * + * Copyright (c) 2025 EDGEMTech Ltd. + * + * Author: EDGEMTech Ltd, Erik Tagirov (erik.tagirov@edgemtech.ch) + */ + +/********************* + * INCLUDES + *********************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "lvgl/lvgl.h" + +#include "simulator_util.h" +#include "simulator_settings.h" +#include "driver_backends.h" + +#include "backends.h" + +/********************* + * DEFINES + *********************/ + +/* Catch configuration errors at compile time - checks if no backend was selected */ +#if LV_USE_SDL == 0 && \ + LV_USE_WAYLAND == 0 && \ + LV_USE_LINUX_DRM == 0 && \ + LV_USE_GLFW == 0 && \ + LV_USE_X11 == 0 && \ + LV_USE_LINUX_FBDEV == 0 + + #error Unsupported configuration - Please select at least one graphics backend in lv_conf.h +#endif + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * STATIC PROTOTYPES + **********************/ + +/********************** + * STATIC VARIABLES + **********************/ + +/* The default backend is the one that will end up at index 0 + * To add support for a new driver backend add the declaration + * and append an entry to the available_backends array + */ +backend_init_t available_backends[] = { + +#if LV_USE_LINUX_FBDEV + backend_init_fbdev, +#endif + +#if LV_USE_LINUX_DRM + backend_init_drm, +#endif + +#if LV_USE_SDL + backend_init_sdl, +#endif + +#if LV_USE_WAYLAND + backend_init_wayland, +#endif + +#if LV_USE_X11 + backend_init_x11, +#endif + +#if LV_USE_GLFW + backend_init_glfw3, +#endif + +#if LV_USE_EVDEV + backend_init_evdev, +#endif + NULL /* Sentinel */ +}; + +/* Contains the backend descriptors */ +static backend_t * backends[sizeof(available_backends) / sizeof(available_backends[0])]; + +/* Set once the user selects a backend - or it is set to the default backend */ +static backend_t * sel_display_backend = NULL; + +/********************** + * GLOBAL VARIABLES + **********************/ +/* Contains global simulator settings common to each backend */ +simulator_settings_t settings; + +/********************** + * MACROS + **********************/ + +/********************** + * GLOBAL FUNCTIONS + **********************/ + +void driver_backends_register(void) +{ + int i; + backend_init_t init_backend; + backend_t * b; + + i = 0; + if(backends[i] != NULL) { + /* backends are already registered - leave */ + return; + } + + while((init_backend = available_backends[i]) != NULL) { + + b = malloc(sizeof(backend_t)); + LV_ASSERT_NULL(b); + + b->handle = malloc(sizeof(backend_handle_t)); + + init_backend = available_backends[i]; + LV_ASSERT_NULL(init_backend); + + init_backend(b); + backends[i] = b; + i++; + } +} + +int driver_backends_init_backend(char * backend_name) +{ + backend_t * b; + int i; + display_backend_t * dispb; + indev_backend_t * indevb; + + if(backends[0] == NULL) { + LV_LOG_ERROR("Please call driver_backends_register first"); + return -1; + } + + if(backend_name == NULL) { + + /* + * Set default display backend - which is the first defined + * item in available_backends array + */ + LV_ASSERT_NULL(backends[0]); + b = backends[0]; + + if(b->type != BACKEND_DISPLAY) { + LV_LOG_ERROR("The default backend: %s is not a display driver backend", b->name); + return -1; + } + + backend_name = backends[0]->name; + } + + i = 0; + while((b = backends[i]) != NULL) { + + /* Check if such a backend exists */ + if(strcmp(b->name, backend_name) == 0) { + + if(b->type == BACKEND_DISPLAY) { + /* Initialize the display */ + + dispb = b->handle->display; + LV_ASSERT_NULL(dispb->init_display); + dispb->display = dispb->init_display(); + + if(dispb->display == NULL) { + LV_LOG_ERROR("Failed to init display with %s backend", b->name); + return -1; + } + + sel_display_backend = b; + LV_LOG_INFO("Initialized %s display backend", b->name); + break; + + } + else if(b->type == BACKEND_INDEV) { + /* Initialize input device */ + + indevb = b->handle->indev; + LV_ASSERT_NULL(indevb->init_indev); + + /* The display driver backend - has to be initialized first */ + if(sel_display_backend == NULL) { + LV_LOG_ERROR( + "Failed to init indev backend: %s - display needs to be initialized", + b->name); + return -1; + } + + LV_LOG_INFO("Initialized %s indev backend", b->name); + + dispb = sel_display_backend->handle->display; + + LV_ASSERT_NULL(dispb->display); + indevb->init_indev(dispb->display); + break; + } + } + i++; + } + + return 0; +} + +int driver_backends_print_supported(void) +{ + int i; + backend_t * b; + + i = 0; + if(backends[i] == NULL) { + LV_LOG_ERROR("Please call driver_backends_register first"); + return -1; + } + + b = backends[i]; + + fprintf(stdout, "Default backend: %s\n", b->name); + fprintf(stdout, "Supported backends: "); + + while((b = backends[i++]) != NULL) { + fprintf(stdout, "%s ", b->name); + } + + fprintf(stdout, "\n"); + return 0; + +} + +int driver_backends_is_supported(char * backend_name) +{ + char c; + backend_t * b; + char * name = backend_name; + int i = 0; + + while((c = *backend_name) != '\0') { + *backend_name = toupper(c); + backend_name++; + } + + while((b = backends[i++]) != NULL) { + if(strcmp(b->name, name) == 0) { + return 1; + } + } + + return 0; +} + +void driver_backends_run_loop(void) +{ + display_backend_t * dispb; + + if(sel_display_backend != NULL && sel_display_backend->handle->display != NULL) { + + dispb = sel_display_backend->handle->display; + dispb->run_loop(); + + } + else { + LV_LOG_ERROR("No backend has been selected - initialize the backend first"); + } +} + +/********************** + * STATIC FUNCTIONS + **********************/ + diff --git a/software/dmm/src/lib/driver_backends.h b/software/dmm/src/lib/driver_backends.h new file mode 100644 index 0000000..1680230 --- /dev/null +++ b/software/dmm/src/lib/driver_backends.h @@ -0,0 +1,93 @@ +/** + * @file driver_backends.h + * + * provides an abstraction to support multiple graphical + * driver backends at the same time without recompiling everything + * each time + * + * E.g: this means LVGL can be compiled with both SDL or X11 + * + * - see backend.h for the details on the interface. + * - see the files in display_backends directory for examples + * on how to use each driver + * + * Copyright (c) 2025 EDGEMTech Ltd. + * + * Author: EDGEMTech Ltd, Erik Tagirov (erik.tagirov@edgemtech.ch) + */ + +#ifndef DRIVER_BACKENDS_H +#define DRIVER_BACKENDS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/********************* + * INCLUDES + *********************/ + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * GLOBAL PROTOTYPES + **********************/ + +/* + * Register all available backends + * This function must be called first before any other + * function + */ +void driver_backends_register(void); + +/** + * Initialize the specified backend + * @description in case of a display driver backend + * - create the lv_display, in case of a indev driver backend + * create an input device + * + * @param backend_name the name of the backend to initialize FBDEV,DRM etc + * @return 0 on success, -1 on error + */ +int driver_backends_init_backend(char * backend_name); + +/** + * @brief Checks if a backend exists and is supported + * @param backend_name the backend name to check + * @return 1 is supported, 0 not supported or invalid name + */ +int driver_backends_is_supported(char * backend_name); + +/** + * @brief Print supported backends + * @description Prints a list of supported backends + * + * @return -1 if an error occurred, 0 on success + */ +int driver_backends_print_supported(void); + +/** + * @brief Enter the run loop + * @description enter the run loop of the selected backend + */ +void driver_backends_run_loop(void); + +/********************** + * MACROS + **********************/ + +#ifdef __cplusplus +} /*extern "C"*/ +#endif + +#endif /*DRIVER_BACKENDS_H*/ + + + + diff --git a/software/dmm/src/lib/indev_backends/evdev.c b/software/dmm/src/lib/indev_backends/evdev.c new file mode 100644 index 0000000..c5a5bfb --- /dev/null +++ b/software/dmm/src/lib/indev_backends/evdev.c @@ -0,0 +1,176 @@ +/** + * + * @file evdev.c + * + * The lib evdev driver + * + * Based on the original file from the repository + * + * - Move the driver to a separate file to avoid excessive conditional + * compilation + * Author: EDGEMTech Ltd, Erik Tagirov (erik.tagirov@edgemtech.ch) + * + * Copyright (c) 2025 EDGEMTech Ltd. + * + */ + +/********************* + * INCLUDES + *********************/ +#include +#include +#include + +#include "lvgl/lvgl.h" +#if LV_USE_EVDEV +#include "lvgl/src/core/lv_global.h" +#include "../backends.h" + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * STATIC PROTOTYPES + **********************/ + +static void indev_deleted_cb(lv_event_t * e); +static void discovery_cb(lv_indev_t * indev, lv_evdev_type_t type, void * user_data); +static void set_mouse_cursor_icon(lv_indev_t * indev, lv_display_t * display); +static lv_indev_t * init_pointer_evdev(lv_display_t * display); + +/********************** + * STATIC VARIABLES + **********************/ + +static char * backend_name = "EVDEV"; + +/********************** + * MACROS + **********************/ + +/********************** + * GLOBAL FUNCTIONS + **********************/ + +/* + * Initialize the evdev driver + * + * @param backend the backend descriptor + */ +int backend_init_evdev(backend_t * backend) +{ + LV_ASSERT_NULL(backend); + backend->handle->indev = malloc(sizeof(indev_backend_t)); + LV_ASSERT_NULL(backend->handle->indev); + + backend->handle->indev->init_indev = init_pointer_evdev; + + backend->name = backend_name; + backend->type = BACKEND_INDEV; + return 0; +} + + +/********************** + * STATIC FUNCTIONS + **********************/ + +/* + * Remove cursor icon + * + * @description When the indev is deleted remove the mouse cursor icon + * @note called by the LVGL evdev driver + * @param e the deletion event + */ +static void indev_deleted_cb(lv_event_t * e) +{ + if(LV_GLOBAL_DEFAULT()->deinit_in_progress) return; + lv_obj_t * cursor_obj = lv_event_get_user_data(e); + lv_obj_delete(cursor_obj); +} + + +/* + * Set cursor icon + * + * @description Once the input device is discovered set the mouse cursor icon + * @note called by the LVGL evdev driver + * @param indev the input device + * @param type the type of the input device + * @param user_data the user data + */ +static void discovery_cb(lv_indev_t * indev, lv_evdev_type_t type, void * user_data) +{ + LV_LOG_USER("new '%s' device discovered", type == LV_EVDEV_TYPE_REL ? "REL" : + type == LV_EVDEV_TYPE_ABS ? "ABS" : + type == LV_EVDEV_TYPE_KEY ? "KEY" : + "unknown"); + + lv_display_t * disp = user_data; + lv_indev_set_display(indev, disp); + + if(type == LV_EVDEV_TYPE_REL) { + set_mouse_cursor_icon(indev, disp); + } +} + +/* + * Set cursor icon + * + * @description Enables a pointer (touchscreen/mouse) input device + * @param display the display on which to create + * @param indev the input device to set the cursor on + */ +static void set_mouse_cursor_icon(lv_indev_t * indev, lv_display_t * display) +{ + /* Set the cursor icon */ + LV_IMAGE_DECLARE(mouse_cursor_icon); + lv_obj_t * cursor_obj = lv_image_create(lv_display_get_screen_active(display)); + lv_image_set_src(cursor_obj, &mouse_cursor_icon); + lv_indev_set_cursor(indev, cursor_obj); + + /* delete the mouse cursor icon if the device is removed */ + lv_indev_add_event_cb(indev, indev_deleted_cb, LV_EVENT_DELETE, cursor_obj); + +} + +/* + * Initialize a mouse pointer device + * + * Enables a pointer (touchscreen/mouse) input device + * Use 'evtest' to find the correct input device. /dev/input/by-id/ is recommended if possible + * Use /dev/input/by-id/my-mouse-or-touchscreen or /dev/input/eventX + * + * If LV_LINUX_EVDEV_POINTER_DEVICE is not set, automatic evdev discovery will start + * + * @param display the LVGL display + * + * @return input device + */ +static lv_indev_t * init_pointer_evdev(lv_display_t * display) +{ + const char * input_device = getenv("LV_LINUX_EVDEV_POINTER_DEVICE"); + + if(input_device == NULL) { + LV_LOG_USER("Using evdev automatic discovery."); + lv_evdev_discovery_start(discovery_cb, display); + return NULL; + } + + lv_indev_t * indev = lv_evdev_create(LV_INDEV_TYPE_POINTER, input_device); + + if(indev == NULL) { + return NULL; + } + + lv_indev_set_display(indev, display); + + set_mouse_cursor_icon(indev, display); + return indev; +} +#endif /*#if LV_USE_EVDEV*/ diff --git a/software/dmm/src/lib/mouse_cursor_icon.c b/software/dmm/src/lib/mouse_cursor_icon.c new file mode 100644 index 0000000..7588a3b --- /dev/null +++ b/software/dmm/src/lib/mouse_cursor_icon.c @@ -0,0 +1,46 @@ +/** + * + * @file mouse_cursor_icon.c + * + * The C array containing the mouse cursor icon + * + * Based on the original file from the repository + * Copyright (c) 2025 EDGEMTech Ltd. + * + * Author: EDGEMTech Ltd, Erik Tagirov (erik.tagirov@edgemtech.ch) + * + */ +#include "lvgl/lvgl.h" + +const uint8_t mouse_cursor_icon_map[] = { + 0x19, 0x19, 0x19, 0xb8, 0x1e, 0x1e, 0x1e, 0xc8, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x48, 0x48, 0xcc, 0xb2, 0xb2, 0xb2, 0xff, 0x3a, 0x3a, 0x3a, 0xcc, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3b, 0x3b, 0x3b, 0xc8, 0xf6, 0xf6, 0xf6, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0x43, 0x43, 0x43, 0xe0, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3b, 0x3b, 0x3b, 0xcb, 0xe6, 0xe6, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe5, 0xe5, 0xe5, 0xff, 0x59, 0x59, 0x59, 0xf3, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x3c, 0x3c, 0xcb, 0xe9, 0xe9, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xf5, 0xf5, 0xff, 0x72, 0x72, 0x72, 0xff, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3d, 0x3d, 0x3d, 0xcb, 0xe9, 0xe9, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8a, 0x8a, 0x8a, 0xff, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x99, 0x99, 0x00, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3e, 0x3e, 0x3e, 0xcb, 0xe9, 0xe9, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa2, 0xa2, 0xa2, 0xff, 0x13, 0x13, 0x13, 0xab, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x3f, 0x3f, 0xcb, 0xe9, 0xe9, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xb7, 0xb7, 0xff, 0x1f, 0x1f, 0x1f, 0xbb, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x41, 0x41, 0x41, 0xcc, 0xea, 0xea, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xca, 0xca, 0xca, 0xff, 0x3d, 0x3d, 0x3d, 0xd8, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x41, 0x41, 0x41, 0xcc, 0xea, 0xea, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xde, 0xde, 0xde, 0xff, 0x56, 0x56, 0x56, 0xef, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, + 0x42, 0x42, 0x42, 0xcc, 0xea, 0xea, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf3, 0xf3, 0xff, 0x76, 0x76, 0x76, 0xff, 0x00, 0x00, 0x00, 0x6b, + 0x43, 0x43, 0x43, 0xcc, 0xea, 0xea, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xce, 0xce, 0xce, 0xff, 0x80, 0x80, 0x80, 0xf7, 0x74, 0x74, 0x74, 0xf8, 0x6d, 0x6d, 0x6d, 0xfb, 0x72, 0x72, 0x72, 0xf8, 0x57, 0x57, 0x57, 0xff, 0x0c, 0x0c, 0x0c, 0xb3, + 0x44, 0x44, 0x44, 0xcc, 0xeb, 0xeb, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfb, 0xfb, 0xfb, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0x13, 0x13, 0x13, 0xb7, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0c, 0x29, 0x29, 0x29, 0x07, + 0x45, 0x45, 0x45, 0xcc, 0xe8, 0xe8, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0x5e, 0x5e, 0x5e, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x62, 0x62, 0x62, 0xf0, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x45, 0x45, 0x45, 0xcc, 0xf9, 0xf9, 0xf9, 0xff, 0xec, 0xec, 0xec, 0xff, 0x4a, 0x4a, 0x4a, 0xd8, 0x00, 0x00, 0x00, 0x78, 0x8a, 0x8a, 0x8a, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xc3, 0xc3, 0xff, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x58, 0x58, 0x58, 0xd3, 0xd9, 0xd9, 0xd9, 0xff, 0x5e, 0x5e, 0x5e, 0xef, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x3b, 0x3b, 0xc7, 0xe9, 0xe9, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xf4, 0xf4, 0xff, 0x54, 0x54, 0x54, 0xdc, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x3e, 0x3e, 0x3e, 0xe0, 0x54, 0x54, 0x54, 0xff, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x8e, 0x8e, 0x8e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0xb0, 0xb0, 0xff, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x4c, 0x4c, 0x4c, 0xd0, 0xec, 0xec, 0xec, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf4, 0xf4, 0xf4, 0xff, 0x53, 0x53, 0x53, 0xd8, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x1e, 0x1e, 0x00, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xab, 0xab, 0xab, 0xff, 0xf6, 0xf6, 0xf6, 0xff, 0x80, 0x80, 0x80, 0xff, 0x31, 0x31, 0x31, 0xac, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x09, 0x09, 0x03, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x2e, 0x2e, 0x2e, 0xd7, 0x38, 0x38, 0x38, 0xc7, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +lv_image_dsc_t mouse_cursor_icon = { + .header.magic = LV_IMAGE_HEADER_MAGIC, + .header.w = 14, + .header.h = 20, + .header.stride = 56, + .data_size = 280 * 4, + .header.cf = LV_COLOR_FORMAT_ARGB8888, + .data = mouse_cursor_icon_map, +}; diff --git a/software/dmm/src/lib/simulator_settings.h b/software/dmm/src/lib/simulator_settings.h new file mode 100644 index 0000000..07c0597 --- /dev/null +++ b/software/dmm/src/lib/simulator_settings.h @@ -0,0 +1,53 @@ +/** + * @file simulator_settings.h + * + * global simulator settings + * + * The simulator settings is a global variable defined in + * simulator_settings.c + * + * Copyright (c) 2025 EDGEMTech Ltd. + * + * Author: EDGEMTech Ltd, Erik Tagirov (erik.tagirov@edgemtech.ch) + * + */ + +#ifndef SIMULATOR_SETTINGS_H +#define SIMULATOR_SETTINGS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/********************* + * INCLUDES + *********************/ + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +typedef struct { + uint32_t window_width; + uint32_t window_height; + bool maximize; + bool fullscreen; +} simulator_settings_t; + +/********************** + * GLOBAL PROTOTYPES + **********************/ + +/********************** + * MACROS + **********************/ + +#ifdef __cplusplus +} /*extern "C"*/ +#endif + +#endif /*SIMULATOR_SETTINGS_H*/ diff --git a/software/dmm/src/lib/simulator_util.c b/software/dmm/src/lib/simulator_util.c new file mode 100644 index 0000000..17f54f2 --- /dev/null +++ b/software/dmm/src/lib/simulator_util.c @@ -0,0 +1,66 @@ +/** + * @file simulator_util.c + * + * Utility functions + * Copyright (c) 2025 EDGEMTech Ltd. + * + * Based on the original file from the repo + * + * Author: EDGEMTech Ltd, Erik Tagirov (erik.tagirov@edgemtech.ch) + * + */ + +/********************* + * INCLUDES + *********************/ + +#include +#include +#include + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * STATIC PROTOTYPES + **********************/ + +/********************** + * STATIC VARIABLES + **********************/ + +/********************** + * MACROS + **********************/ + +/********************** + * GLOBAL FUNCTIONS + **********************/ + +const char * getenv_default(const char * name, const char * default_val) +{ + const char * value = getenv(name); + return value ? value : default_val; +} + + +void die(const char * msg, ...) +{ + va_list args; + + va_start(args, msg); + vfprintf(stderr, msg, args); + va_end(args); + + exit(EXIT_FAILURE); + +} + +/********************** + * STATIC FUNCTIONS + **********************/ diff --git a/software/dmm/src/lib/simulator_util.h b/software/dmm/src/lib/simulator_util.h new file mode 100644 index 0000000..f3f32aa --- /dev/null +++ b/software/dmm/src/lib/simulator_util.h @@ -0,0 +1,62 @@ +/** + * @file simulator_util.h + * + * simulator_util.h - Header file for the utility functions + * used by the simulator + * + * Copyright (c) 2025 EDGEMTech Ltd. + * + * Author: EDGEMTech Ltd, Erik Tagirov (erik.tagirov@edgemtech.ch) + */ + +#ifndef SIMULATOR_UTIL_H +#define SIMULATOR_UTIL_H + +#ifdef __cplusplus +extern "C" { +#endif + +/********************* + * INCLUDES + *********************/ +#include + + +/********************** + * GLOBAL PROTOTYPES + **********************/ + +/** + * @description Wrapper around getenv(3), allowing to set a default value + * @param name The name of the environment variable + * @param dflt The default value to set if the variable is not present. + * @return default value or value of environment variable. + */ +const char * getenv_default(const char * name, const char * default_val); + + +/** + * @description Centralized exit point, called due to an error + * @param msg The message to display on stderr before killing the program + * @param ... Values for the format string. + */ +void die(const char * msg, ...); + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * MACROS + **********************/ + + +#ifdef __cplusplus +} /*extern "C"*/ +#endif + +#endif /*SIMULATOR_UTIL_H*/ diff --git a/software/dmm/src/main.c b/software/dmm/src/main.c new file mode 100644 index 0000000..1a0890e --- /dev/null +++ b/software/dmm/src/main.c @@ -0,0 +1,168 @@ +/******************************************************************* + * + * main.c - LVGL simulator for GNU/Linux + * + * Based on the original file from the repository + * + * @note eventually this file won't contain a main function and will + * become a library supporting all major operating systems + * + * To see how each driver is initialized check the + * 'src/lib/display_backends' directory + * + * - Clean up + * - Support for multiple backends at once + * 2025 EDGEMTech Ltd. + * + * Author: EDGEMTech Ltd, Erik Tagirov (erik.tagirov@edgemtech.ch) + * + ******************************************************************/ +#include +#include +#include +#include +#include + +#include "lvgl/lvgl.h" +#include "lvgl/demos/lv_demos.h" + +#include "src/lib/driver_backends.h" +#include "src/lib/simulator_util.h" +#include "src/lib/simulator_settings.h" + +/* Internal functions */ +static void configure_simulator(int argc, char ** argv); +static void print_lvgl_version(void); +static void print_usage(void); + +/* contains the name of the selected backend if user + * has specified one on the command line */ +static char * selected_backend; + +/* Global simulator settings, defined in lv_linux_backend.c */ +extern simulator_settings_t settings; + + +/** + * @brief Print LVGL version + */ +static void print_lvgl_version(void) +{ + fprintf(stdout, "%d.%d.%d-%s\n", + LVGL_VERSION_MAJOR, + LVGL_VERSION_MINOR, + LVGL_VERSION_PATCH, + LVGL_VERSION_INFO); +} + +/** + * @brief Print usage information + */ +static void print_usage(void) +{ + fprintf(stdout, "\nlvglsim [-V] [-B] [-f] [-m] [-b backend_name] [-W window_width] [-H window_height]\n\n"); + fprintf(stdout, "-V print LVGL version\n"); + fprintf(stdout, "-B list supported backends\n"); + fprintf(stdout, "-f fullscreen\n"); + fprintf(stdout, "-m maximize\n"); +} + +/** + * @brief Configure simulator + * @description process arguments received by the program to select + * appropriate options + * @param argc the count of arguments in argv + * @param argv The arguments + */ +static void configure_simulator(int argc, char ** argv) +{ + int opt = 0; + + selected_backend = NULL; + driver_backends_register(); + + const char * env_w = getenv("LV_SIM_WINDOW_WIDTH"); + const char * env_h = getenv("LV_SIM_WINDOW_HEIGHT"); + /* Default values */ + settings.window_width = atoi(env_w ? env_w : "800"); + settings.window_height = atoi(env_h ? env_h : "480"); + + /* Parse the command-line options. */ + while((opt = getopt(argc, argv, "b:fmW:H:BVh")) != -1) { + switch(opt) { + case 'h': + print_usage(); + exit(EXIT_SUCCESS); + break; + case 'V': + print_lvgl_version(); + exit(EXIT_SUCCESS); + break; + case 'B': + driver_backends_print_supported(); + exit(EXIT_SUCCESS); + break; + case 'b': + if(driver_backends_is_supported(optarg) == 0) { + die("error no such backend: %s\n", optarg); + } + selected_backend = strdup(optarg); + break; + case 'f': + settings.fullscreen = true; + break; + case 'm': + settings.maximize = true; + break; + case 'W': + settings.window_width = atoi(optarg); + break; + case 'H': + settings.window_height = atoi(optarg); + break; + case ':': + print_usage(); + die("Option -%c requires an argument.\n", optopt); + break; + case '?': + print_usage(); + die("Unknown option -%c.\n", optopt); + } + } +} + +/** + * @brief entry point + * @description start a demo + * @param argc the count of arguments in argv + * @param argv The arguments + */ +int main(int argc, char ** argv) +{ + + configure_simulator(argc, argv); + + /* Initialize LVGL. */ + lv_init(); + + /* Initialize the configured backend */ + if(driver_backends_init_backend(selected_backend) == -1) { + die("Failed to initialize display backend"); + } + + /* Enable for EVDEV support */ +#if LV_USE_EVDEV + if(driver_backends_init_backend("EVDEV") == -1) { + die("Failed to initialize evdev"); + } +#endif + + /*Create a Demo*/ + lv_demo_widgets(); + lv_demo_widgets_start_slideshow(); + + /* Enter the run loop of the selected backend */ + driver_backends_run_loop(); + + return 0; +} diff --git a/software/dmm/user_cross_compile_setup.cmake b/software/dmm/user_cross_compile_setup.cmake new file mode 100644 index 0000000..ba42189 --- /dev/null +++ b/software/dmm/user_cross_compile_setup.cmake @@ -0,0 +1,15 @@ +# Usage: +# cmake -DCMAKE_TOOLCHAIN_FILE=./user_cross_compile_setup.cmake -B build -S . +# make -C build -j + +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR arm) + +set(tools /home/ubuntu/Your_SDK/prebuilt/rootfsbuilt/arm/toolchain-glibc-gcc/toolchain) +set(CMAKE_C_COMPILER ${tools}/bin/arm-openwrt-linux-gnueabi-gcc) +set(CMAKE_CXX_COMPILER ${tools}/bin/arm-openwrt-linux-gnueabi-g++) + +# If necessary, set STAGING_DIR +# if not work, please try(in shell command): export STAGING_DIR=/home/ubuntu/Your_SDK/out/xxx/openwrt/staging_dir/target +#set(ENV{STAGING_DIR} "/home/ubuntu/Your_SDK/out/xxx/openwrt/staging_dir/target") + From bacdd3358bfa57640c1299e13cd028058068fb00 Mon Sep 17 00:00:00 2001 From: Kirill Yatsenko Date: Tue, 6 Jan 2026 08:16:32 +0100 Subject: [PATCH 2/5] [dmm] apply clang-format where applicable --- software/dmm/src/lib/display_backends/drm.c | 2 -- software/dmm/src/lib/display_backends/glfw3.c | 1 - software/dmm/src/lib/display_backends/wayland.c | 4 +--- software/dmm/src/lib/driver_backends.c | 7 ++----- software/dmm/src/lib/indev_backends/evdev.c | 3 --- software/dmm/src/lib/simulator_util.c | 2 -- 6 files changed, 3 insertions(+), 16 deletions(-) diff --git a/software/dmm/src/lib/display_backends/drm.c b/software/dmm/src/lib/display_backends/drm.c index 5e2621a..faf9c45 100644 --- a/software/dmm/src/lib/display_backends/drm.c +++ b/software/dmm/src/lib/display_backends/drm.c @@ -40,7 +40,6 @@ static void run_loop_drm(void); static lv_display_t * init_drm(void); - /********************** * STATIC VARIABLES **********************/ @@ -98,7 +97,6 @@ static lv_display_t * init_drm(void) return disp; } - /** * The run loop of the DRM driver */ diff --git a/software/dmm/src/lib/display_backends/glfw3.c b/software/dmm/src/lib/display_backends/glfw3.c index bd5da5e..bce5d4a 100644 --- a/software/dmm/src/lib/display_backends/glfw3.c +++ b/software/dmm/src/lib/display_backends/glfw3.c @@ -78,7 +78,6 @@ int backend_init_glfw3(backend_t * backend) backend->type = BACKEND_DISPLAY; return 0; - } /********************** diff --git a/software/dmm/src/lib/display_backends/wayland.c b/software/dmm/src/lib/display_backends/wayland.c index be873b3..0d46095 100644 --- a/software/dmm/src/lib/display_backends/wayland.c +++ b/software/dmm/src/lib/display_backends/wayland.c @@ -100,8 +100,7 @@ static lv_display_t * init_wayland(void) if(settings.fullscreen) { lv_wayland_window_set_fullscreen(disp, true); - } - else if(settings.maximize) { + } else if(settings.maximize) { lv_wayland_window_set_maximized(disp, true); } @@ -111,7 +110,6 @@ static lv_display_t * init_wayland(void) lv_indev_set_group(lv_wayland_get_pointeraxis(disp), g); return disp; - } /** diff --git a/software/dmm/src/lib/driver_backends.c b/software/dmm/src/lib/driver_backends.c index ec278b8..d8a0438 100644 --- a/software/dmm/src/lib/driver_backends.c +++ b/software/dmm/src/lib/driver_backends.c @@ -189,8 +189,7 @@ int driver_backends_init_backend(char * backend_name) LV_LOG_INFO("Initialized %s display backend", b->name); break; - } - else if(b->type == BACKEND_INDEV) { + } else if(b->type == BACKEND_INDEV) { /* Initialize input device */ indevb = b->handle->indev; @@ -241,7 +240,6 @@ int driver_backends_print_supported(void) fprintf(stdout, "\n"); return 0; - } int driver_backends_is_supported(char * backend_name) @@ -274,8 +272,7 @@ void driver_backends_run_loop(void) dispb = sel_display_backend->handle->display; dispb->run_loop(); - } - else { + } else { LV_LOG_ERROR("No backend has been selected - initialize the backend first"); } } diff --git a/software/dmm/src/lib/indev_backends/evdev.c b/software/dmm/src/lib/indev_backends/evdev.c index c5a5bfb..7378df5 100644 --- a/software/dmm/src/lib/indev_backends/evdev.c +++ b/software/dmm/src/lib/indev_backends/evdev.c @@ -75,7 +75,6 @@ int backend_init_evdev(backend_t * backend) return 0; } - /********************** * STATIC FUNCTIONS **********************/ @@ -94,7 +93,6 @@ static void indev_deleted_cb(lv_event_t * e) lv_obj_delete(cursor_obj); } - /* * Set cursor icon * @@ -136,7 +134,6 @@ static void set_mouse_cursor_icon(lv_indev_t * indev, lv_display_t * display) /* delete the mouse cursor icon if the device is removed */ lv_indev_add_event_cb(indev, indev_deleted_cb, LV_EVENT_DELETE, cursor_obj); - } /* diff --git a/software/dmm/src/lib/simulator_util.c b/software/dmm/src/lib/simulator_util.c index 17f54f2..7e1003c 100644 --- a/software/dmm/src/lib/simulator_util.c +++ b/software/dmm/src/lib/simulator_util.c @@ -48,7 +48,6 @@ const char * getenv_default(const char * name, const char * default_val) return value ? value : default_val; } - void die(const char * msg, ...) { va_list args; @@ -58,7 +57,6 @@ void die(const char * msg, ...) va_end(args); exit(EXIT_FAILURE); - } /********************** From bd19b4b9770586c982cd149762e933f78f6a3c02 Mon Sep 17 00:00:00 2001 From: Kirill Yatsenko Date: Tue, 6 Jan 2026 08:33:50 +0100 Subject: [PATCH 3/5] [dmm] add assets folder containing fonts and icons --- software/dmm/CMakeLists.txt | 7 +- software/dmm/assets/fonts/dhurjati_140.c | 631 +++++++ software/dmm/assets/fonts/dhurjati_70.c | 1173 ++++++++++++ software/dmm/assets/fonts/digital7_230.c | 2101 ++++++++++++++++++++++ software/dmm/assets/icons/continuity.c | 148 ++ software/dmm/assets/icons/omega.c | 134 ++ 6 files changed, 4193 insertions(+), 1 deletion(-) create mode 100644 software/dmm/assets/fonts/dhurjati_140.c create mode 100644 software/dmm/assets/fonts/dhurjati_70.c create mode 100644 software/dmm/assets/fonts/digital7_230.c create mode 100644 software/dmm/assets/icons/continuity.c create mode 100644 software/dmm/assets/icons/omega.c diff --git a/software/dmm/CMakeLists.txt b/software/dmm/CMakeLists.txt index 1468d82..52216a3 100644 --- a/software/dmm/CMakeLists.txt +++ b/software/dmm/CMakeLists.txt @@ -364,7 +364,12 @@ target_include_directories(lvgl_linux PUBLIC # Link LVGL with external dependencies - Modern CMake/CMP0079 allows this target_link_libraries(lvgl PUBLIC ${PKG_CONFIG_LIB} m pthread) -add_executable(lvglsim src/main.c) +add_executable(lvglsim src/main.c + assets/fonts/dhurjati_70.c + assets/fonts/dhurjati_140.c + assets/fonts/digital7_230.c + assets/icons/continuity.c + assets/icons/omega.c) # Repeat lvgl_linux to resolve circular dependency with lvgl target_link_libraries(lvglsim lvgl_linux lvgl lvgl_linux) diff --git a/software/dmm/assets/fonts/dhurjati_140.c b/software/dmm/assets/fonts/dhurjati_140.c new file mode 100644 index 0000000..07b1bc9 --- /dev/null +++ b/software/dmm/assets/fonts/dhurjati_140.c @@ -0,0 +1,631 @@ +/******************************************************************************* + * Size: 140 px + * Bpp: 1 + * Opts: --bpp 1 --size 140 --no-compress --stride 1 --align 1 --font Dhurjati-Regular.ttf --symbols mkACDVHZ --format lvgl -o dhurjati_140.c + ******************************************************************************/ + +#ifdef __has_include + #if __has_include("lvgl.h") + #ifndef LV_LVGL_H_INCLUDE_SIMPLE + #define LV_LVGL_H_INCLUDE_SIMPLE + #endif + #endif +#endif + +#ifdef LV_LVGL_H_INCLUDE_SIMPLE + #include "lvgl.h" +#else + #include "lvgl/lvgl.h" +#endif + + + +#ifndef DHURJATI_140 +#define DHURJATI_140 1 +#endif + +#if DHURJATI_140 + +/*----------------- + * BITMAPS + *----------------*/ + +/*Store the image of the glyphs*/ +static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { + /* U+0041 "A" */ + 0x0, 0x0, 0x0, 0x7f, 0xff, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x3, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x3, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, 0xc0, 0x0, + 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xe0, + 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, + 0xe0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, + 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, + 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, + 0xf, 0xff, 0xe7, 0xff, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xff, 0xe7, 0xff, 0xf8, 0x0, 0x0, + 0x0, 0x0, 0x1f, 0xff, 0xe7, 0xff, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xff, 0xc3, 0xff, 0xf8, + 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xc3, 0xff, + 0xfc, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0x81, + 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, + 0x81, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x7f, + 0xff, 0x81, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0xff, 0x0, 0xff, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xfe, 0x0, 0x7f, 0xff, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xfe, 0x0, 0x7f, 0xff, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xfe, 0x0, 0x7f, + 0xff, 0x80, 0x0, 0x0, 0x1, 0xff, 0xfc, 0x0, + 0x3f, 0xff, 0x80, 0x0, 0x0, 0x3, 0xff, 0xfc, + 0x0, 0x3f, 0xff, 0x80, 0x0, 0x0, 0x3, 0xff, + 0xfc, 0x0, 0x3f, 0xff, 0xc0, 0x0, 0x0, 0x3, + 0xff, 0xf8, 0x0, 0x1f, 0xff, 0xc0, 0x0, 0x0, + 0x7, 0xff, 0xf8, 0x0, 0x1f, 0xff, 0xe0, 0x0, + 0x0, 0x7, 0xff, 0xf0, 0x0, 0xf, 0xff, 0xe0, + 0x0, 0x0, 0x7, 0xff, 0xf0, 0x0, 0xf, 0xff, + 0xe0, 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, 0xf, + 0xff, 0xf0, 0x0, 0x0, 0xf, 0xff, 0xe0, 0x0, + 0x7, 0xff, 0xf0, 0x0, 0x0, 0xf, 0xff, 0xe0, + 0x0, 0x7, 0xff, 0xf0, 0x0, 0x0, 0x1f, 0xff, + 0xc0, 0x0, 0x7, 0xff, 0xf8, 0x0, 0x0, 0x1f, + 0xff, 0xc0, 0x0, 0x3, 0xff, 0xf8, 0x0, 0x0, + 0x1f, 0xff, 0xc0, 0x0, 0x3, 0xff, 0xf8, 0x0, + 0x0, 0x3f, 0xff, 0x80, 0x0, 0x1, 0xff, 0xfc, + 0x0, 0x0, 0x3f, 0xff, 0x80, 0x0, 0x1, 0xff, + 0xfc, 0x0, 0x0, 0x7f, 0xff, 0x0, 0x0, 0x1, + 0xff, 0xfe, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfe, 0x0, 0x0, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x3, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xc0, 0x3, 0xff, 0xf8, 0x0, + 0x0, 0x0, 0x1f, 0xff, 0xc0, 0x7, 0xff, 0xf8, + 0x0, 0x0, 0x0, 0x1f, 0xff, 0xc0, 0x7, 0xff, + 0xf0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xe0, 0x7, + 0xff, 0xf0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xe0, + 0xf, 0xff, 0xf0, 0x0, 0x0, 0x0, 0xf, 0xff, + 0xf0, 0xf, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x7, + 0xff, 0xf0, 0xf, 0xff, 0xe0, 0x0, 0x0, 0x0, + 0x7, 0xff, 0xf0, 0x1f, 0xff, 0xe0, 0x0, 0x0, + 0x0, 0x7, 0xff, 0xf8, 0x1f, 0xff, 0xc0, 0x0, + 0x0, 0x0, 0x3, 0xff, 0xf8, 0x1f, 0xff, 0xc0, + 0x0, 0x0, 0x0, 0x3, 0xff, 0xf8, 0x3f, 0xff, + 0xc0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfc, 0x3f, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x1, 0xff, 0xfc, + 0x3f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xfc, 0x7f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xfe, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xfe, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xff, + + /* U+0043 "C" */ + 0x0, 0x7, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x7f, + 0xff, 0xff, 0xfe, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x7, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0xf, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x1f, 0xff, + 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, + 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, + 0xc0, 0x3, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, + 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x7f, 0xff, + 0xff, 0xfe, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, + 0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x7f, 0xff, + 0xff, 0xfe, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, + 0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x7f, 0xff, + 0xff, 0xfe, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, 0x7f, 0xff, + 0xff, 0xfe, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, + 0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x7f, 0xff, + 0xff, 0xfe, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, + 0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x7f, 0xff, + 0xff, 0xfe, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, + 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x3, + 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xff, + 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xff, 0xff, 0xff, + 0xff, 0xf8, 0xf, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0x7, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x7f, 0xff, 0xff, + 0xfe, 0x0, 0x0, 0x7, 0xff, 0xff, 0xe0, 0x0, + + /* U+0044 "D" */ + 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x3f, 0xff, + 0xff, 0xff, 0xff, 0xe0, 0xf, 0xff, 0xff, 0xff, + 0xff, 0xfe, 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x3f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xbf, 0xff, 0x80, 0x0, 0x3f, 0xff, 0xff, 0xff, + 0xe0, 0x0, 0x3, 0xff, 0xff, 0xff, 0xf8, 0x0, + 0x0, 0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x1f, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x7, 0xff, 0xff, + 0xff, 0xe0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xf8, + 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, + 0x1f, 0xff, 0xff, 0xff, 0x80, 0x0, 0x7, 0xff, + 0xff, 0xff, 0xe0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xf8, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfe, 0x0, + 0x0, 0x1f, 0xff, 0xff, 0xff, 0x80, 0x0, 0x7, + 0xff, 0xff, 0xff, 0xe0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xf8, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x7, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xf8, 0x0, 0x0, 0x7f, 0xff, 0xff, + 0xfe, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x7, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x7f, 0xff, + 0xff, 0xfe, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x7, 0xff, 0xff, 0xff, 0xe0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x7f, + 0xff, 0xff, 0xfe, 0x0, 0x0, 0x1f, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x7, 0xff, 0xff, 0xff, 0xe0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, + 0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x1f, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x7, 0xff, 0xff, 0xff, + 0xe0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xf8, 0x0, + 0x0, 0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x1f, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x7, 0xff, 0xff, + 0xff, 0xe0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xf8, + 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, + 0x1f, 0xff, 0xff, 0xff, 0x80, 0x0, 0x7, 0xff, + 0xff, 0xff, 0xe0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xf8, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfe, 0x0, + 0x0, 0x1f, 0xff, 0xff, 0xff, 0x80, 0x0, 0x7, + 0xff, 0xff, 0xff, 0xe0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xf8, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0x80, 0x0, + 0xf, 0xff, 0xff, 0xff, 0xe0, 0x0, 0xf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xff, + 0xff, 0xff, 0xff, 0xf8, 0xf, 0xff, 0xff, 0xff, + 0xff, 0xf0, 0x3, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0x0, + + /* U+0048 "H" */ + 0xff, 0xfe, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xf8, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xe0, + 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x7, 0xff, + 0xff, 0xff, 0xe0, 0x0, 0x0, 0x1f, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xf8, 0x0, + 0x0, 0x7, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, + 0x1f, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x7f, + 0xff, 0xff, 0xfe, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xf8, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, + 0xe0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x7, + 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x1f, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x7f, 0xff, 0xff, + 0xfe, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xf8, + 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xe0, 0x0, + 0x0, 0x1f, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xf8, 0x0, 0x0, 0x7, 0xff, 0xff, + 0xff, 0xe0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x7, 0xff, + 0xff, 0xff, 0xe0, 0x0, 0x0, 0x1f, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xf8, 0x0, + 0x0, 0x7, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, + 0x1f, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x7f, + 0xff, 0xff, 0xfe, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xf8, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, + 0xe0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x7, + 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x1f, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x7f, 0xff, 0xff, + 0xfe, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xf8, + 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xe0, 0x0, + 0x0, 0x1f, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xf8, 0x0, 0x0, 0x7, 0xff, 0xff, + 0xff, 0xe0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfe, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, + 0x7, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x1f, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x7f, 0xff, + 0xff, 0xfe, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xf8, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xe0, + 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x7f, 0xff, + + /* U+0056 "V" */ + 0xff, 0xff, 0x0, 0x0, 0x0, 0x1, 0xff, 0xfe, + 0xff, 0xfe, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfd, + 0xff, 0xfc, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf3, + 0xff, 0xfc, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xe3, + 0xff, 0xf8, 0x0, 0x0, 0x0, 0x3f, 0xff, 0x87, + 0xff, 0xf0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xf, + 0xff, 0xf0, 0x0, 0x0, 0x1, 0xff, 0xfe, 0xf, + 0xff, 0xe0, 0x0, 0x0, 0x3, 0xff, 0xf8, 0x1f, + 0xff, 0xe0, 0x0, 0x0, 0x7, 0xff, 0xf0, 0x3f, + 0xff, 0xc0, 0x0, 0x0, 0x1f, 0xff, 0xe0, 0x3f, + 0xff, 0x80, 0x0, 0x0, 0x3f, 0xff, 0x80, 0x7f, + 0xff, 0x80, 0x0, 0x0, 0x7f, 0xff, 0x0, 0xff, + 0xff, 0x0, 0x0, 0x1, 0xff, 0xfe, 0x0, 0xff, + 0xfe, 0x0, 0x0, 0x3, 0xff, 0xf8, 0x1, 0xff, + 0xfe, 0x0, 0x0, 0xf, 0xff, 0xf0, 0x1, 0xff, + 0xfc, 0x0, 0x0, 0x1f, 0xff, 0xe0, 0x3, 0xff, + 0xf8, 0x0, 0x0, 0x3f, 0xff, 0x80, 0x7, 0xff, + 0xf8, 0x0, 0x0, 0xff, 0xff, 0x0, 0x7, 0xff, + 0xf0, 0x0, 0x1, 0xff, 0xfe, 0x0, 0xf, 0xff, + 0xe0, 0x0, 0x3, 0xff, 0xf8, 0x0, 0x1f, 0xff, + 0xe0, 0x0, 0xf, 0xff, 0xf0, 0x0, 0x1f, 0xff, + 0xc0, 0x0, 0x1f, 0xff, 0xe0, 0x0, 0x3f, 0xff, + 0x80, 0x0, 0x3f, 0xff, 0x80, 0x0, 0x7f, 0xff, + 0x80, 0x0, 0xff, 0xff, 0x0, 0x0, 0x7f, 0xff, + 0x0, 0x1, 0xff, 0xfe, 0x0, 0x0, 0xff, 0xfe, + 0x0, 0x3, 0xff, 0xf8, 0x0, 0x1, 0xff, 0xfe, + 0x0, 0xf, 0xff, 0xf0, 0x0, 0x1, 0xff, 0xfc, + 0x0, 0x1f, 0xff, 0xc0, 0x0, 0x3, 0xff, 0xf8, + 0x0, 0x3f, 0xff, 0x80, 0x0, 0x7, 0xff, 0xf8, + 0x0, 0xff, 0xff, 0x0, 0x0, 0x7, 0xff, 0xf0, + 0x1, 0xff, 0xfc, 0x0, 0x0, 0xf, 0xff, 0xf0, + 0x3, 0xff, 0xf8, 0x0, 0x0, 0x1f, 0xff, 0xe0, + 0xf, 0xff, 0xf0, 0x0, 0x0, 0x1f, 0xff, 0xc0, + 0x1f, 0xff, 0xc0, 0x0, 0x0, 0x3f, 0xff, 0xc0, + 0x7f, 0xff, 0x80, 0x0, 0x0, 0x7f, 0xff, 0x80, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x1, + 0xff, 0xfc, 0x0, 0x0, 0x0, 0xff, 0xff, 0x7, + 0xff, 0xf8, 0x0, 0x0, 0x0, 0xff, 0xfe, 0xf, + 0xff, 0xf0, 0x0, 0x0, 0x1, 0xff, 0xfc, 0x1f, + 0xff, 0xc0, 0x0, 0x0, 0x3, 0xff, 0xfc, 0x7f, + 0xff, 0x80, 0x0, 0x0, 0x3, 0xff, 0xf8, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf1, 0xff, + 0xfc, 0x0, 0x0, 0x0, 0xf, 0xff, 0xf7, 0xff, + 0xf8, 0x0, 0x0, 0x0, 0xf, 0xff, 0xef, 0xff, + 0xf0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xdf, 0xff, + 0xc0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfc, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xf8, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xe0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xc0, + 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xfe, 0x0, + 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xe0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xc0, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xff, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xff, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xff, 0xf8, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xff, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xc0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xff, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7, 0xff, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7, 0xff, 0xf8, 0x0, 0x0, 0x0, + + /* U+005A "Z" */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xc0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xe0, 0x0, + 0x0, 0x0, 0x7, 0xff, 0xf8, 0x0, 0x0, 0x0, + 0x3, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xfe, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x3f, 0xff, 0xc0, 0x0, 0x0, + 0x0, 0x1f, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x7, + 0xff, 0xf8, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfc, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x3f, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x1f, 0xff, + 0xe0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf8, 0x0, + 0x0, 0x0, 0x3, 0xff, 0xfc, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x7f, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xc0, + 0x0, 0x0, 0x0, 0x1f, 0xff, 0xe0, 0x0, 0x0, + 0x0, 0x7, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x3, + 0xff, 0xfc, 0x0, 0x0, 0x0, 0x1, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x3f, 0xff, 0xc0, 0x0, 0x0, 0x0, + 0x1f, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x7, 0xff, + 0xf8, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfc, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x3f, + 0xff, 0xc0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xe0, + 0x0, 0x0, 0x0, 0x7, 0xff, 0xf8, 0x0, 0x0, + 0x0, 0x3, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xc0, 0x0, + 0x0, 0x0, 0x1f, 0xff, 0xe0, 0x0, 0x0, 0x0, + 0x7, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x3, 0xff, + 0xfc, 0x0, 0x0, 0x0, 0x1, 0xff, 0xfe, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x3f, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x1f, + 0xff, 0xe0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf8, + 0x0, 0x0, 0x0, 0x3, 0xff, 0xfc, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x3f, 0xff, + 0xc0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xe0, 0x0, + 0x0, 0x0, 0x7, 0xff, 0xf8, 0x0, 0x0, 0x0, + 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, + + /* U+006B "k" */ + 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, + 0xc0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xff, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x3, + 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, + 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xe0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x3f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x7, + 0xff, 0xf0, 0x0, 0x1, 0xff, 0xfe, 0xff, 0xfe, + 0x0, 0x0, 0x7f, 0xff, 0xdf, 0xff, 0xc0, 0x0, + 0x1f, 0xff, 0xf3, 0xff, 0xf8, 0x0, 0x3, 0xff, + 0xfc, 0x7f, 0xff, 0x0, 0x0, 0xff, 0xff, 0xf, + 0xff, 0xe0, 0x0, 0x3f, 0xff, 0xc1, 0xff, 0xfc, + 0x0, 0xf, 0xff, 0xf8, 0x3f, 0xff, 0x80, 0x3, + 0xff, 0xfe, 0x7, 0xff, 0xf0, 0x0, 0x7f, 0xff, + 0x80, 0xff, 0xfe, 0x0, 0x1f, 0xff, 0xe0, 0x1f, + 0xff, 0xc0, 0x7, 0xff, 0xfc, 0x3, 0xff, 0xf8, + 0x1, 0xff, 0xff, 0x0, 0x7f, 0xff, 0x0, 0x3f, + 0xff, 0xc0, 0xf, 0xff, 0xe0, 0xf, 0xff, 0xf0, + 0x1, 0xff, 0xfc, 0x3, 0xff, 0xfc, 0x0, 0x3f, + 0xff, 0x80, 0xff, 0xff, 0x80, 0x7, 0xff, 0xf0, + 0x3f, 0xff, 0xe0, 0x0, 0xff, 0xfe, 0x7, 0xff, + 0xf8, 0x0, 0x1f, 0xff, 0xc1, 0xff, 0xfe, 0x0, + 0x3, 0xff, 0xf8, 0x7f, 0xff, 0xc0, 0x0, 0x7f, + 0xff, 0x1f, 0xff, 0xf0, 0x0, 0xf, 0xff, 0xe3, + 0xff, 0xfc, 0x0, 0x1, 0xff, 0xfc, 0xff, 0xff, + 0x0, 0x0, 0x3f, 0xff, 0xbf, 0xff, 0xc0, 0x0, + 0x7, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0xff, + 0xff, 0xff, 0xfe, 0x0, 0x0, 0x1f, 0xff, 0xff, + 0xff, 0xe0, 0x0, 0x3, 0xff, 0xfb, 0xff, 0xfe, + 0x0, 0x0, 0x7f, 0xff, 0x3f, 0xff, 0xe0, 0x0, + 0xf, 0xff, 0xe3, 0xff, 0xfc, 0x0, 0x1, 0xff, + 0xfc, 0x3f, 0xff, 0xc0, 0x0, 0x3f, 0xff, 0x87, + 0xff, 0xfc, 0x0, 0x7, 0xff, 0xf0, 0x7f, 0xff, + 0xc0, 0x0, 0xff, 0xfe, 0x7, 0xff, 0xf8, 0x0, + 0x1f, 0xff, 0xc0, 0x7f, 0xff, 0x80, 0x3, 0xff, + 0xf8, 0xf, 0xff, 0xf8, 0x0, 0x7f, 0xff, 0x0, + 0xff, 0xff, 0x80, 0xf, 0xff, 0xe0, 0xf, 0xff, + 0xf0, 0x1, 0xff, 0xfc, 0x0, 0xff, 0xff, 0x0, + 0x3f, 0xff, 0x80, 0x1f, 0xff, 0xf0, 0x7, 0xff, + 0xf0, 0x1, 0xff, 0xff, 0x0, 0xff, 0xfe, 0x0, + 0x1f, 0xff, 0xf0, 0x1f, 0xff, 0xc0, 0x1, 0xff, + 0xfe, 0x3, 0xff, 0xf8, 0x0, 0x1f, 0xff, 0xe0, + 0x7f, 0xff, 0x0, 0x3, 0xff, 0xfe, 0xf, 0xff, + 0xe0, 0x0, 0x3f, 0xff, 0xe1, 0xff, 0xfc, 0x0, + 0x3, 0xff, 0xfc, 0x3f, 0xff, 0x80, 0x0, 0x3f, + 0xff, 0xc7, 0xff, 0xf0, 0x0, 0x7, 0xff, 0xfc, + 0xff, 0xfe, 0x0, 0x0, 0x7f, 0xff, 0xdf, 0xff, + 0xc0, 0x0, 0x7, 0xff, 0xf8, + + /* U+006D "m" */ + 0xff, 0xfe, 0x7, 0xff, 0xf0, 0x0, 0x1, 0xff, + 0xfc, 0x0, 0x1f, 0xff, 0xc7, 0xff, 0xff, 0xe0, + 0x3, 0xff, 0xff, 0xf8, 0x3, 0xff, 0xfb, 0xff, + 0xff, 0xff, 0x1, 0xff, 0xff, 0xff, 0xc0, 0x7f, + 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, + 0xfe, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xe1, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, + 0x0, 0x3f, 0xff, 0xff, 0x80, 0xf, 0xff, 0xff, + 0xff, 0xff, 0x0, 0x1, 0xff, 0xff, 0xc0, 0x0, + 0x7f, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x1f, 0xff, + 0xf0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xf0, 0x0, + 0x3, 0xff, 0xfc, 0x0, 0x0, 0xff, 0xff, 0xff, + 0xfc, 0x0, 0x0, 0x7f, 0xff, 0x0, 0x0, 0x1f, + 0xff, 0xff, 0xff, 0x80, 0x0, 0xf, 0xff, 0xe0, + 0x0, 0x3, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x1, + 0xff, 0xfc, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x3f, 0xff, 0x80, 0x0, 0xf, 0xff, + 0xff, 0xff, 0xc0, 0x0, 0x7, 0xff, 0xf0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0xff, + 0xfe, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, 0x0, + 0x0, 0x1f, 0xff, 0xc0, 0x0, 0x7, 0xff, 0xff, + 0xff, 0xe0, 0x0, 0x3, 0xff, 0xf8, 0x0, 0x0, + 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x7f, 0xff, + 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0x80, 0x0, + 0xf, 0xff, 0xe0, 0x0, 0x3, 0xff, 0xff, 0xff, + 0xf0, 0x0, 0x1, 0xff, 0xfc, 0x0, 0x0, 0x7f, + 0xff, 0xff, 0xfe, 0x0, 0x0, 0x3f, 0xff, 0x80, + 0x0, 0xf, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x7, + 0xff, 0xf0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xf8, + 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, 0x3f, 0xff, + 0xff, 0xff, 0x0, 0x0, 0x1f, 0xff, 0xc0, 0x0, + 0x7, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x3, 0xff, + 0xf8, 0x0, 0x0, 0xff, 0xff, 0xff, 0xfc, 0x0, + 0x0, 0x7f, 0xff, 0x0, 0x0, 0x1f, 0xff, 0xff, + 0xff, 0x80, 0x0, 0xf, 0xff, 0xe0, 0x0, 0x3, + 0xff, 0xff, 0xff, 0xf0, 0x0, 0x1, 0xff, 0xfc, + 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, + 0x3f, 0xff, 0x80, 0x0, 0xf, 0xff, 0xff, 0xff, + 0xc0, 0x0, 0x7, 0xff, 0xf0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xf8, 0x0, 0x0, 0xff, 0xfe, 0x0, + 0x0, 0x3f, 0xff, 0xff, 0xff, 0x0, 0x0, 0x1f, + 0xff, 0xc0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xe0, + 0x0, 0x3, 0xff, 0xf8, 0x0, 0x0, 0xff, 0xff, + 0xff, 0xfc, 0x0, 0x0, 0x7f, 0xff, 0x0, 0x0, + 0x1f, 0xff, 0xff, 0xff, 0x80, 0x0, 0xf, 0xff, + 0xe0, 0x0, 0x3, 0xff, 0xff, 0xff, 0xf0, 0x0, + 0x1, 0xff, 0xfc, 0x0, 0x0, 0x7f, 0xff, 0xff, + 0xfe, 0x0, 0x0, 0x3f, 0xff, 0x80, 0x0, 0xf, + 0xff, 0xff, 0xff, 0xc0, 0x0, 0x7, 0xff, 0xf0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, + 0xff, 0xfe, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, + 0x0, 0x0, 0x1f, 0xff, 0xc0, 0x0, 0x7, 0xff, + 0xff, 0xff, 0xe0, 0x0, 0x3, 0xff, 0xf8, 0x0, + 0x0, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x7f, + 0xff, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0x80, + 0x0, 0xf, 0xff, 0xe0, 0x0, 0x3, 0xff, 0xff, + 0xff, 0xf0, 0x0, 0x1, 0xff, 0xfc, 0x0, 0x0, + 0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x3f, 0xff, + 0x80, 0x0, 0xf, 0xff, 0xff, 0xff, 0xc0, 0x0, + 0x7, 0xff, 0xf0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xf8, 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, 0x3f, + 0xff, 0x80 +}; + + +/*--------------------- + * GLYPH DESCRIPTION + *--------------------*/ + +static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { + {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, + {.bitmap_index = 0, .adv_w = 1202, .box_w = 72, .box_h = 68, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 612, .adv_w = 950, .box_w = 48, .box_h = 68, .ofs_x = 5, .ofs_y = 0}, + {.bitmap_index = 1020, .adv_w = 950, .box_w = 50, .box_h = 68, .ofs_x = 5, .ofs_y = 0}, + {.bitmap_index = 1445, .adv_w = 1045, .box_w = 54, .box_h = 68, .ofs_x = 5, .ofs_y = 0}, + {.bitmap_index = 1904, .adv_w = 1053, .box_w = 63, .box_h = 68, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2440, .adv_w = 922, .box_w = 50, .box_h = 68, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 2865, .adv_w = 953, .box_w = 51, .box_h = 66, .ofs_x = 5, .ofs_y = 0}, + {.bitmap_index = 3286, .adv_w = 1522, .box_w = 83, .box_h = 51, .ofs_x = 5, .ofs_y = 0} +}; + +/*--------------------- + * CHARACTER MAPPING + *--------------------*/ + +static const uint16_t unicode_list_0[] = { + 0x0, 0x2, 0x3, 0x7, 0x15, 0x19, 0x2a, 0x2c +}; + +/*Collect the unicode lists and glyph_id offsets*/ +static const lv_font_fmt_txt_cmap_t cmaps[] = +{ + { + .range_start = 65, .range_length = 45, .glyph_id_start = 1, + .unicode_list = unicode_list_0, .glyph_id_ofs_list = NULL, .list_length = 8, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + } +}; + + + +/*-------------------- + * ALL CUSTOM DATA + *--------------------*/ + +#if LVGL_VERSION_MAJOR == 8 +/*Store all the custom data of the font*/ +static lv_font_fmt_txt_glyph_cache_t cache; +#endif + +#if LVGL_VERSION_MAJOR >= 8 +static const lv_font_fmt_txt_dsc_t font_dsc = { +#else +static lv_font_fmt_txt_dsc_t font_dsc = { +#endif + .glyph_bitmap = glyph_bitmap, + .glyph_dsc = glyph_dsc, + .cmaps = cmaps, + .kern_dsc = NULL, + .kern_scale = 0, + .cmap_num = 1, + .bpp = 1, + .kern_classes = 0, + .bitmap_format = 0, +#if LVGL_VERSION_MAJOR == 8 + .cache = &cache +#endif + +}; + + + +/*----------------- + * PUBLIC FONT + *----------------*/ + +/*Initialize a public general font descriptor*/ +#if LVGL_VERSION_MAJOR >= 8 +const lv_font_t dhurjati_140 = { +#else +lv_font_t dhurjati_140 = { +#endif + .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ + .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ + .line_height = 68, /*The maximum line height required by the font*/ + .base_line = 0, /*Baseline measured from the bottom of the line*/ +#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) + .subpx = LV_FONT_SUBPX_NONE, +#endif +#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8 + .underline_position = -87, + .underline_thickness = 3, +#endif + .static_bitmap = 0, + .dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ +#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9 + .fallback = NULL, +#endif + .user_data = NULL, +}; + + + +#endif /*#if DHURJATI_140*/ diff --git a/software/dmm/assets/fonts/dhurjati_70.c b/software/dmm/assets/fonts/dhurjati_70.c new file mode 100644 index 0000000..07b0e43 --- /dev/null +++ b/software/dmm/assets/fonts/dhurjati_70.c @@ -0,0 +1,1173 @@ +/******************************************************************************* + * Size: 70 px + * Bpp: 1 + * Opts: --bpp 1 --size 70 --no-compress --stride 1 --align 1 --font Dhurjati-Regular.ttf --symbols ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 --format lvgl -o dhurjati_70.c + ******************************************************************************/ + +#ifdef __has_include + #if __has_include("lvgl.h") + #ifndef LV_LVGL_H_INCLUDE_SIMPLE + #define LV_LVGL_H_INCLUDE_SIMPLE + #endif + #endif +#endif + +#ifdef LV_LVGL_H_INCLUDE_SIMPLE + #include "lvgl.h" +#else + #include "lvgl/lvgl.h" +#endif + + + +#ifndef DHURJATI_70 +#define DHURJATI_70 1 +#endif + +#if DHURJATI_70 + +/*----------------- + * BITMAPS + *----------------*/ + +/*Store the image of the glyphs*/ +static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { + /* U+0030 "0" */ + 0x1f, 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, + 0xfc, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x1f, 0xff, 0xf0, + 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0xf, 0xff, + 0xf0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0xf, + 0xff, 0xf0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, + 0xf, 0xff, 0xf0, 0x0, 0x0, 0xff, 0xff, 0x0, + 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, 0xff, 0xff, + 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, 0xff, + 0xff, 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, + 0xff, 0xff, 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, + 0x0, 0xff, 0xff, 0x0, 0x0, 0xf, 0xff, 0xf0, + 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0xf, 0xff, + 0xf0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0xf, + 0xff, 0xf0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, + 0xf, 0xff, 0xf0, 0x0, 0x0, 0xff, 0xff, 0x0, + 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, 0xff, 0xff, + 0x0, 0x0, 0xf, 0xff, 0xf8, 0x0, 0x1, 0xff, + 0x7f, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, + 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, + 0xff, 0xf0, + + /* U+0031 "1" */ + 0x0, 0xfc, 0x0, 0x1f, 0x80, 0x7, 0xf0, 0x38, + 0xfe, 0xf, 0x3f, 0xc1, 0xcf, 0xf8, 0x3f, 0xff, + 0x7, 0xff, 0xe0, 0xff, 0xfc, 0x0, 0x7f, 0x80, + 0xf, 0xf0, 0x1, 0xfe, 0x0, 0x3f, 0xc0, 0x7, + 0xf8, 0x0, 0xff, 0x0, 0x1f, 0xe0, 0x3, 0xfc, + 0x0, 0x7f, 0x80, 0xf, 0xf0, 0x1, 0xfe, 0x0, + 0x3f, 0xc0, 0x7, 0xf8, 0x0, 0xff, 0x0, 0x1f, + 0xe0, 0x3, 0xfc, 0x0, 0x7f, 0x80, 0xf, 0xf0, + 0x1, 0xfe, 0x0, 0x3f, 0xc0, 0x7, 0xf8, 0x0, + 0xff, 0x1, 0x9f, 0xe6, 0x7f, 0xff, 0xef, 0xff, + 0xfd, 0xff, 0xff, 0xf, 0xff, 0xc0, + + /* U+0032 "2" */ + 0x3f, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, + 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0, 0x0, 0x1f, 0xff, 0xf0, + 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0xf, 0xff, + 0xfc, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0xf, + 0xf0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, + 0xf, 0xf0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0xff, 0x0, + 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0xff, + 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0xff, 0xff, + 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xf8, + 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xf, + 0xf0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, + 0xf, 0xf0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x0, 0x7f, 0xff, 0x0, + 0x0, 0x1f, 0xff, 0xf0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x3, 0xff, 0xf0, 0x0, 0x0, 0x7f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xe1, 0xff, 0xff, + 0xff, 0xf8, + + /* U+0033 "3" */ + 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, + 0xfc, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, + 0xff, 0xff, 0xc0, 0x0, 0x0, 0x1f, 0xfe, 0x0, + 0x0, 0x0, 0xff, 0xe0, 0x0, 0x0, 0xf, 0xf4, + 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xf, + 0xf0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, + 0xf, 0xf0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xc, + 0x0, 0xf, 0xf0, 0x1, 0xc0, 0x1, 0xff, 0x0, + 0x1f, 0xff, 0xff, 0xe0, 0x1, 0xff, 0xff, 0xfe, + 0x0, 0x1f, 0xff, 0xff, 0xe0, 0x1, 0xff, 0xff, + 0xfe, 0x0, 0x1c, 0x0, 0x1f, 0xf0, 0x1, 0xc0, + 0x0, 0xff, 0x0, 0x1c, 0x0, 0xf, 0xf0, 0x0, + 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xf, 0xf0, + 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xf, + 0xf0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, + 0xf, 0xf0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, + 0x0, 0xf, 0xfe, 0x0, 0x0, 0x0, 0xff, 0xe0, + 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfe, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, + 0xff, 0xf8, + + /* U+0034 "4" */ + 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, + 0xf, 0xf0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xc0, 0x0, 0x0, 0x0, + 0x7f, 0xf8, 0x0, 0x0, 0x0, 0x3f, 0xff, 0x0, + 0x0, 0x0, 0x1f, 0xff, 0xe0, 0x0, 0x0, 0xf, + 0xff, 0xfc, 0x0, 0x0, 0x7, 0xff, 0x7f, 0x80, + 0x0, 0x1, 0xff, 0x8f, 0xf0, 0x0, 0x0, 0xff, + 0xc1, 0xfe, 0x0, 0x0, 0x3f, 0xe0, 0x3f, 0xc0, + 0x0, 0xf, 0xf0, 0x7, 0xf8, 0x0, 0x3, 0xfc, + 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x1f, 0xe0, + 0x0, 0x3f, 0xc0, 0x3, 0xfc, 0x0, 0x7, 0xf0, + 0x0, 0x7f, 0x80, 0x1, 0xfe, 0x0, 0xf, 0xf0, + 0x0, 0x7f, 0x80, 0x1, 0xfe, 0x0, 0xf, 0xe0, + 0x0, 0x3f, 0xc0, 0x3, 0xfc, 0x0, 0x7, 0xf8, + 0x0, 0x7f, 0x0, 0x0, 0xff, 0x7, 0x9f, 0xe0, + 0x0, 0x1f, 0xe1, 0xfb, 0xfc, 0x0, 0x3, 0xfc, + 0x3f, 0x7f, 0xf, 0xff, 0xff, 0x83, 0xff, 0xff, + 0xff, 0xff, 0xf8, 0x1d, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, + 0x0, 0x7, 0xff, 0xfe, 0xe, 0x0, 0x0, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, + 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x7f, + 0x98, 0x0, 0x0, 0x0, 0xf, 0xfb, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xe0, 0x0, 0x0, 0x0, 0xf, + 0xf8, 0x0, + + /* U+0035 "5" */ + 0xf, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, + 0xff, 0x3f, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, + 0xff, 0xff, 0x3f, 0xe0, 0x0, 0x0, 0x33, 0xfc, + 0x0, 0x0, 0x7, 0x3f, 0xc0, 0x0, 0x0, 0xf3, + 0xfc, 0x0, 0x0, 0x6, 0x3f, 0xc0, 0x0, 0x0, + 0x3, 0xfc, 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, + 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x3f, 0xff, + 0xff, 0xff, 0x83, 0xff, 0xff, 0xff, 0xfc, 0x3f, + 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, + 0x38, 0x0, 0x0, 0x1f, 0xf3, 0xc0, 0x0, 0x0, + 0xff, 0x18, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, + 0x0, 0xff, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, + 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xf, 0xf0, + 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xf, + 0xf0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, + 0xf, 0xf0, 0x0, 0x0, 0x0, 0xff, 0x60, 0x0, + 0x0, 0xf, 0xff, 0x0, 0x0, 0x0, 0xff, 0xf0, + 0x0, 0x0, 0xf, 0xfe, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfe, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, + 0xff, 0xf8, + + /* U+0036 "6" */ + 0x3f, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x3f, 0xf0, + 0x0, 0x0, 0x7, 0xff, 0x0, 0x0, 0x0, 0xff, + 0xf0, 0x0, 0x0, 0x6, 0xff, 0x0, 0x0, 0x0, + 0xf, 0xf0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xfc, 0xff, + 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x1f, 0xff, 0xf0, 0x0, 0x0, + 0xff, 0xff, 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, + 0x0, 0xff, 0xff, 0x0, 0x0, 0xf, 0xff, 0xf0, + 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0xf, 0xff, + 0xf0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0xf, + 0xff, 0xf0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, + 0xf, 0xff, 0xf0, 0x0, 0x0, 0xff, 0xff, 0x0, + 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, 0xff, 0xff, + 0x0, 0x0, 0xf, 0xff, 0xf8, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, + 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xe1, 0xff, 0xff, + 0xff, 0xf8, + + /* U+0037 "7" */ + 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, + 0xfc, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, + 0xff, 0xff, 0xe0, 0x0, 0x0, 0x1f, 0xff, 0x0, + 0x0, 0x0, 0xff, 0xf0, 0x0, 0x0, 0xf, 0xf6, + 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x1f, + 0xc0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, + 0x7f, 0x80, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, + 0x1, 0xfe, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, + 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x7f, 0x80, + 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x1, 0xfe, + 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x3, + 0xfc, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, + 0xf, 0xf0, 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, + 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x3, 0xfc, 0x0, + 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0xf, 0xf0, + 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, 0x0, 0x3f, + 0xe0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, + 0x7f, 0x80, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, + 0x1, 0xff, 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, + 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x7f, 0x80, + 0x0, 0x0, + + /* U+0038 "8" */ + 0x3f, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, + 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0xf, 0xff, 0xe0, 0x0, 0x0, 0xff, 0xfc, 0x0, + 0x0, 0x1f, 0xff, 0x80, 0x0, 0x3, 0xff, 0xf0, + 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, 0xf, 0xff, + 0xc0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x3f, + 0xff, 0xe0, 0x0, 0x7, 0xff, 0xf0, 0x0, 0x0, + 0xff, 0xfe, 0x0, 0x0, 0x3f, 0xdf, 0xff, 0xff, + 0xff, 0xf1, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xff, + 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xfb, 0xfc, + 0x0, 0x0, 0x7f, 0xff, 0x0, 0x0, 0x7, 0xff, + 0xe0, 0x0, 0x0, 0xff, 0xfc, 0x0, 0x0, 0x1f, + 0xff, 0x80, 0x0, 0x3, 0xff, 0xf0, 0x0, 0x0, + 0x7f, 0xfe, 0x0, 0x0, 0xf, 0xff, 0xc0, 0x0, + 0x1, 0xff, 0xf8, 0x0, 0x0, 0x3f, 0xff, 0xc0, + 0x0, 0x7, 0xff, 0xfc, 0x0, 0x0, 0xff, 0xfe, + 0x0, 0x0, 0x1f, 0xff, 0xc0, 0x0, 0x3, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, + 0xc7, 0xff, 0xff, 0xff, 0xf0, + + /* U+0039 "9" */ + 0x1f, 0xff, 0xff, 0xff, 0x83, 0xff, 0xff, 0xff, + 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x1f, 0xff, 0xf0, + 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0xf, 0xff, + 0xf0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0xf, + 0xff, 0xf0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, + 0xf, 0xff, 0xf0, 0x0, 0x0, 0xff, 0xff, 0x0, + 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, 0xff, 0xff, + 0x0, 0x0, 0xf, 0xff, 0xfc, 0x0, 0x0, 0xff, + 0xff, 0xe0, 0x0, 0xf, 0xff, 0xf8, 0x0, 0x0, + 0xff, 0xff, 0x80, 0x0, 0x1f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xf7, 0xff, + 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xf0, + 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xf, + 0xf0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, + 0xf, 0xf0, 0x0, 0x0, 0x0, 0xff, 0x40, 0x0, + 0x0, 0xf, 0xff, 0x0, 0x0, 0x0, 0xff, 0xf0, + 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, + 0xff, 0xfc, + + /* U+0041 "A" */ + 0x0, 0xf, 0xfe, 0x0, 0x0, 0x3, 0xff, 0xe0, + 0x0, 0x0, 0x7f, 0xfc, 0x0, 0x0, 0xf, 0xff, + 0x80, 0x0, 0x3, 0xff, 0xf8, 0x0, 0x0, 0x7f, + 0xff, 0x0, 0x0, 0x1f, 0xef, 0xe0, 0x0, 0x3, + 0xfd, 0xfe, 0x0, 0x0, 0x7f, 0xbf, 0xc0, 0x0, + 0x1f, 0xe3, 0xfc, 0x0, 0x3, 0xfc, 0x7f, 0x80, + 0x0, 0x7f, 0x7, 0xf0, 0x0, 0x1f, 0xe0, 0xff, + 0x0, 0x3, 0xfc, 0x1f, 0xe0, 0x0, 0xff, 0x1, + 0xfc, 0x0, 0x1f, 0xe0, 0x3f, 0xc0, 0x3, 0xf8, + 0x3, 0xf8, 0x0, 0xff, 0x0, 0x7f, 0x80, 0x1f, + 0xe0, 0xf, 0xf0, 0x3, 0xf8, 0x0, 0xfe, 0x0, + 0xff, 0x0, 0x1f, 0xe0, 0x1f, 0xff, 0xff, 0xfc, + 0x3, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, + 0xf8, 0x1f, 0xff, 0xff, 0xff, 0x7, 0xf8, 0x0, + 0xf, 0xf0, 0xff, 0x0, 0x1, 0xfe, 0x1f, 0xc0, + 0x0, 0x1f, 0xc7, 0xf8, 0x0, 0x3, 0xfc, 0xff, + 0x0, 0x0, 0x7f, 0x9f, 0xc0, 0x0, 0x7, 0xf7, + 0xf8, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x1f, + 0xe0, + + /* U+0042 "B" */ + 0xff, 0xff, 0xc0, 0xff, 0xff, 0xf0, 0xff, 0xff, + 0xfc, 0xff, 0xff, 0xfc, 0xff, 0x3, 0xfe, 0xff, + 0x1, 0xfe, 0xff, 0x1, 0xfe, 0xff, 0x1, 0xfe, + 0xff, 0x1, 0xfe, 0xff, 0x1, 0xfe, 0xff, 0x1, + 0xfe, 0xff, 0x1, 0xfe, 0xff, 0x3, 0xfe, 0xff, + 0xff, 0xfc, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xfc, + 0xff, 0xff, 0xfe, 0xff, 0x1, 0xff, 0xff, 0x0, + 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, + 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, + 0xff, 0xff, 0x0, 0xff, 0xff, 0x1, 0xff, 0xff, + 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xf8, + 0xff, 0xff, 0xe0, + + /* U+0043 "C" */ + 0x7, 0xff, 0xe0, 0x1f, 0xff, 0xf8, 0x3f, 0xff, + 0xfe, 0x7f, 0xff, 0xfe, 0xff, 0x81, 0xff, 0xff, + 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, + 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, + 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, + 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, + 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, + 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, + 0xff, 0xff, 0x0, 0xff, 0xff, 0x81, 0xff, 0x7f, + 0xff, 0xfe, 0x3f, 0xff, 0xfc, 0x1f, 0xff, 0xf8, + 0x7, 0xff, 0xe0, + + /* U+0044 "D" */ + 0xff, 0xff, 0xf0, 0x7f, 0xff, 0xfe, 0x3f, 0xff, + 0xff, 0xdf, 0xff, 0xff, 0xef, 0xf0, 0xf, 0xff, + 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xff, 0xfe, 0x0, + 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, 0x3f, 0xff, + 0xc0, 0x1f, 0xff, 0xe0, 0xf, 0xff, 0xf0, 0x7, + 0xff, 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xff, 0xfe, + 0x0, 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, 0x3f, + 0xff, 0xc0, 0x1f, 0xff, 0xe0, 0xf, 0xff, 0xf0, + 0x7, 0xff, 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xff, + 0xfe, 0x0, 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, + 0x3f, 0xff, 0xc0, 0x1f, 0xff, 0xe0, 0xf, 0xff, + 0xf0, 0xf, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, + 0xf9, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xe0, 0x0, + + /* U+0045 "E" */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x1f, 0xe0, + 0x0, 0x3f, 0xc0, 0x0, 0x7f, 0x80, 0x0, 0xff, + 0x0, 0x1, 0xfe, 0x0, 0x3, 0xfc, 0x0, 0x7, + 0xf8, 0x0, 0xf, 0xf0, 0x0, 0x1f, 0xff, 0xfe, + 0x3f, 0xff, 0xfc, 0x7f, 0xff, 0xf8, 0xff, 0xff, + 0xf1, 0xfe, 0x0, 0x3, 0xfc, 0x0, 0x7, 0xf8, + 0x0, 0xf, 0xf0, 0x0, 0x1f, 0xe0, 0x0, 0x3f, + 0xc0, 0x0, 0x7f, 0x80, 0x0, 0xff, 0x0, 0x1, + 0xfe, 0x0, 0x3, 0xfc, 0x0, 0x7, 0xf8, 0x0, + 0xf, 0xf0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + + /* U+0046 "F" */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x1f, 0xe0, + 0x0, 0x3f, 0xc0, 0x0, 0x7f, 0x80, 0x0, 0xff, + 0x0, 0x1, 0xfe, 0x0, 0x3, 0xfc, 0x0, 0x7, + 0xf8, 0x0, 0xf, 0xf0, 0x0, 0x1f, 0xff, 0xfe, + 0x3f, 0xff, 0xfc, 0x7f, 0xff, 0xf8, 0xff, 0xff, + 0xf1, 0xfe, 0x0, 0x3, 0xfc, 0x0, 0x7, 0xf8, + 0x0, 0xf, 0xf0, 0x0, 0x1f, 0xe0, 0x0, 0x3f, + 0xc0, 0x0, 0x7f, 0x80, 0x0, 0xff, 0x0, 0x1, + 0xfe, 0x0, 0x3, 0xfc, 0x0, 0x7, 0xf8, 0x0, + 0xf, 0xf0, 0x0, 0x1f, 0xe0, 0x0, 0x3f, 0xc0, + 0x0, 0x7f, 0x80, 0x0, 0xff, 0x0, 0x0, + + /* U+0047 "G" */ + 0x7, 0xff, 0xf0, 0xf, 0xff, 0xfe, 0xf, 0xff, + 0xff, 0xcf, 0xff, 0xff, 0xef, 0xf8, 0xf, 0xff, + 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xff, 0xfe, 0x0, + 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, 0x3f, 0xff, + 0xc0, 0x0, 0x1f, 0xe0, 0x0, 0xf, 0xf0, 0x0, + 0x7, 0xf8, 0x0, 0x3, 0xfc, 0x0, 0x1, 0xfe, + 0x0, 0x0, 0xff, 0x0, 0x0, 0x7f, 0x80, 0x0, + 0x3f, 0xc3, 0xff, 0xff, 0xe1, 0xff, 0xff, 0xf0, + 0xff, 0xff, 0xf8, 0x7f, 0xff, 0xfc, 0x1, 0xff, + 0xfe, 0x0, 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, + 0x3f, 0xff, 0xc0, 0x1f, 0xff, 0xe0, 0xf, 0xff, + 0xf8, 0xf, 0xfb, 0xff, 0xff, 0xf8, 0xff, 0xff, + 0xfc, 0x3f, 0xff, 0xf8, 0x7, 0xff, 0xf0, 0x0, + + /* U+0048 "H" */ + 0xff, 0x0, 0x1f, 0xff, 0xe0, 0x3, 0xff, 0xfc, + 0x0, 0x7f, 0xff, 0x80, 0xf, 0xff, 0xf0, 0x1, + 0xff, 0xfe, 0x0, 0x3f, 0xff, 0xc0, 0x7, 0xff, + 0xf8, 0x0, 0xff, 0xff, 0x0, 0x1f, 0xff, 0xe0, + 0x3, 0xff, 0xfc, 0x0, 0x7f, 0xff, 0x80, 0xf, + 0xff, 0xf0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xe0, 0x3, 0xff, 0xfc, 0x0, 0x7f, + 0xff, 0x80, 0xf, 0xff, 0xf0, 0x1, 0xff, 0xfe, + 0x0, 0x3f, 0xff, 0xc0, 0x7, 0xff, 0xf8, 0x0, + 0xff, 0xff, 0x0, 0x1f, 0xff, 0xe0, 0x3, 0xff, + 0xfc, 0x0, 0x7f, 0xff, 0x80, 0xf, 0xff, 0xf0, + 0x1, 0xff, 0xfe, 0x0, 0x3f, 0xff, 0xc0, 0x7, + 0xff, 0xf8, 0x0, 0xff, 0xff, 0x0, 0x1f, 0xe0, + + /* U+0049 "I" */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, + + /* U+004A "J" */ + 0x1, 0xfe, 0x3, 0xfc, 0x7, 0xf8, 0xf, 0xf0, + 0x1f, 0xe0, 0x3f, 0xc0, 0x7f, 0x80, 0xff, 0x1, + 0xfe, 0x3, 0xfc, 0x7, 0xf8, 0xf, 0xf0, 0x1f, + 0xe0, 0x3f, 0xc0, 0x7f, 0x80, 0xff, 0x1, 0xfe, + 0x3, 0xfc, 0x7, 0xf8, 0xf, 0xf0, 0x1f, 0xe0, + 0x3f, 0xc0, 0x7f, 0x80, 0xff, 0x1, 0xfe, 0x3, + 0xfc, 0x7, 0xf8, 0xf, 0xf0, 0x3f, 0xff, 0xff, + 0xbf, 0xfe, 0x7f, 0xf8, 0xff, 0x80, + + /* U+004B "K" */ + 0xff, 0x0, 0xf, 0xff, 0xf0, 0x1, 0xfe, 0xff, + 0x0, 0x3f, 0xcf, 0xf0, 0x3, 0xfc, 0xff, 0x0, + 0x7f, 0x8f, 0xf0, 0xf, 0xf0, 0xff, 0x1, 0xfe, + 0xf, 0xf0, 0x1f, 0xe0, 0xff, 0x3, 0xfc, 0xf, + 0xf0, 0x7f, 0x80, 0xff, 0xf, 0xf0, 0xf, 0xf0, + 0xff, 0x0, 0xff, 0x1f, 0xe0, 0xf, 0xf3, 0xfc, + 0x0, 0xff, 0x7f, 0x80, 0xf, 0xf7, 0xf8, 0x0, + 0xff, 0xff, 0x0, 0xf, 0xff, 0xf8, 0x0, 0xff, + 0x7f, 0x80, 0xf, 0xf3, 0xfc, 0x0, 0xff, 0x1f, + 0xe0, 0xf, 0xf1, 0xff, 0x0, 0xff, 0xf, 0xf0, + 0xf, 0xf0, 0x7f, 0x80, 0xff, 0x3, 0xfc, 0xf, + 0xf0, 0x3f, 0xe0, 0xff, 0x1, 0xfe, 0xf, 0xf0, + 0xf, 0xf0, 0xff, 0x0, 0x7f, 0x8f, 0xf0, 0x3, + 0xfc, 0xff, 0x0, 0x3f, 0xcf, 0xf0, 0x1, 0xfe, + 0xff, 0x0, 0xf, 0xf0, + + /* U+004C "L" */ + 0xff, 0x0, 0x1, 0xfe, 0x0, 0x3, 0xfc, 0x0, + 0x7, 0xf8, 0x0, 0xf, 0xf0, 0x0, 0x1f, 0xe0, + 0x0, 0x3f, 0xc0, 0x0, 0x7f, 0x80, 0x0, 0xff, + 0x0, 0x1, 0xfe, 0x0, 0x3, 0xfc, 0x0, 0x7, + 0xf8, 0x0, 0xf, 0xf0, 0x0, 0x1f, 0xe0, 0x0, + 0x3f, 0xc0, 0x0, 0x7f, 0x80, 0x0, 0xff, 0x0, + 0x1, 0xfe, 0x0, 0x3, 0xfc, 0x0, 0x7, 0xf8, + 0x0, 0xf, 0xf0, 0x0, 0x1f, 0xe0, 0x0, 0x3f, + 0xc0, 0x0, 0x7f, 0x80, 0x0, 0xff, 0x0, 0x1, + 0xfe, 0x0, 0x3, 0xfc, 0x0, 0x7, 0xf8, 0x0, + 0xf, 0xf0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + + /* U+004D "M" */ + 0xff, 0x0, 0x0, 0x1f, 0xff, 0xf0, 0x0, 0x7, + 0xff, 0xfe, 0x0, 0x0, 0xff, 0xff, 0xe0, 0x0, + 0x3f, 0xff, 0xfc, 0x0, 0x7, 0xff, 0xff, 0xc0, + 0x1, 0xff, 0xff, 0xf8, 0x0, 0x3f, 0xff, 0xff, + 0x80, 0xf, 0xff, 0xff, 0xf0, 0x1, 0xff, 0xff, + 0xff, 0x0, 0x7f, 0xff, 0xff, 0xe0, 0xf, 0xff, + 0xff, 0xfe, 0x3, 0xff, 0xff, 0xff, 0xc0, 0x7f, + 0xff, 0xff, 0xfc, 0x1f, 0xff, 0xff, 0xff, 0x83, + 0xff, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, + 0x1f, 0xff, 0xff, 0xef, 0xf3, 0xfb, 0xff, 0xfd, + 0xfe, 0xff, 0x7f, 0xff, 0x9f, 0xdf, 0xcf, 0xff, + 0xf3, 0xff, 0xf9, 0xff, 0xfe, 0x3f, 0xff, 0x3f, + 0xff, 0xc7, 0xff, 0xc7, 0xff, 0xf8, 0x7f, 0xf8, + 0xff, 0xff, 0xf, 0xfe, 0x1f, 0xff, 0xe0, 0xff, + 0xc3, 0xff, 0xfc, 0x1f, 0xf0, 0x7f, 0xff, 0x83, + 0xfe, 0xf, 0xff, 0xf0, 0x0, 0x1, 0xff, 0xfe, + 0x0, 0x0, 0x3f, 0xff, 0xc0, 0x0, 0x7, 0xff, + 0xf8, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x1f, + 0xe0, + + /* U+004E "N" */ + 0xff, 0x80, 0xf, 0xff, 0xf8, 0x0, 0xff, 0xff, + 0xc0, 0xf, 0xff, 0xfc, 0x0, 0xff, 0xff, 0xe0, + 0xf, 0xff, 0xfe, 0x0, 0xff, 0xff, 0xf0, 0xf, + 0xff, 0xff, 0x80, 0xff, 0xff, 0xf8, 0xf, 0xff, + 0xff, 0xc0, 0xff, 0xff, 0xfc, 0xf, 0xff, 0xff, + 0xe0, 0xff, 0xff, 0xff, 0xf, 0xff, 0xff, 0xf0, + 0xff, 0xff, 0x7f, 0x8f, 0xff, 0xf7, 0xf8, 0xff, + 0xff, 0x3f, 0xcf, 0xff, 0xf1, 0xfc, 0xff, 0xff, + 0x1f, 0xef, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xf, + 0xff, 0xff, 0xf0, 0x7f, 0xff, 0xff, 0x3, 0xff, + 0xff, 0xf0, 0x3f, 0xff, 0xff, 0x1, 0xff, 0xff, + 0xf0, 0x1f, 0xff, 0xff, 0x0, 0xff, 0xff, 0xf0, + 0xf, 0xff, 0xff, 0x0, 0x7f, 0xff, 0xf0, 0x3, + 0xff, 0xff, 0x0, 0x3f, 0xff, 0xf0, 0x1, 0xff, + 0xff, 0x0, 0x1f, 0xf0, + + /* U+004F "O" */ + 0x3, 0xff, 0xf8, 0x7, 0xff, 0xff, 0x83, 0xff, + 0xff, 0xf1, 0xff, 0xff, 0xfe, 0xff, 0x80, 0x7f, + 0xff, 0xc0, 0xf, 0xff, 0xf0, 0x3, 0xff, 0xfc, + 0x0, 0xff, 0xff, 0x0, 0x3f, 0xff, 0xc0, 0xf, + 0xff, 0xf0, 0x3, 0xff, 0xfc, 0x0, 0xff, 0xff, + 0x0, 0x3f, 0xff, 0xc0, 0xf, 0xff, 0xf0, 0x3, + 0xff, 0xfc, 0x0, 0xff, 0xff, 0x0, 0x3f, 0xff, + 0xc0, 0xf, 0xff, 0xf0, 0x3, 0xff, 0xfc, 0x0, + 0xff, 0xff, 0x0, 0x3f, 0xff, 0xc0, 0xf, 0xff, + 0xf0, 0x3, 0xff, 0xfc, 0x0, 0xff, 0xff, 0x0, + 0x3f, 0xff, 0xc0, 0xf, 0xff, 0xf0, 0x3, 0xff, + 0xfc, 0x0, 0xff, 0xff, 0x80, 0x7f, 0xdf, 0xff, + 0xff, 0xe3, 0xff, 0xff, 0xf0, 0x7f, 0xff, 0xf8, + 0x7, 0xff, 0xf0, 0x0, + + /* U+0050 "P" */ + 0xff, 0xff, 0xf0, 0x7f, 0xff, 0xfe, 0x3f, 0xff, + 0xff, 0xdf, 0xff, 0xff, 0xef, 0xf0, 0xf, 0xff, + 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xff, 0xfe, 0x0, + 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, 0x3f, 0xff, + 0xc0, 0x1f, 0xff, 0xe0, 0xf, 0xff, 0xf0, 0x7, + 0xff, 0xf8, 0x7, 0xff, 0xff, 0xff, 0xfd, 0xff, + 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xf8, + 0x3f, 0xc0, 0x0, 0x1f, 0xe0, 0x0, 0xf, 0xf0, + 0x0, 0x7, 0xf8, 0x0, 0x3, 0xfc, 0x0, 0x1, + 0xfe, 0x0, 0x0, 0xff, 0x0, 0x0, 0x7f, 0x80, + 0x0, 0x3f, 0xc0, 0x0, 0x1f, 0xe0, 0x0, 0xf, + 0xf0, 0x0, 0x7, 0xf8, 0x0, 0x3, 0xfc, 0x0, + 0x1, 0xfe, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, + + /* U+0051 "Q" */ + 0x3, 0xff, 0xf8, 0x7, 0xff, 0xff, 0x83, 0xff, + 0xff, 0xf1, 0xff, 0xff, 0xfe, 0xff, 0x80, 0x7f, + 0xff, 0xc0, 0xf, 0xff, 0xf0, 0x3, 0xff, 0xfc, + 0x0, 0xff, 0xff, 0x0, 0x3f, 0xff, 0xc0, 0xf, + 0xff, 0xf0, 0x3, 0xff, 0xfc, 0x0, 0xff, 0xff, + 0x0, 0x3f, 0xff, 0xc0, 0xf, 0xff, 0xf0, 0x3, + 0xff, 0xfc, 0x0, 0xff, 0xff, 0x0, 0x3f, 0xff, + 0xc0, 0xf, 0xff, 0xf0, 0x3, 0xff, 0xfc, 0x0, + 0xff, 0xff, 0x0, 0x3f, 0xff, 0xc0, 0xf, 0xff, + 0xf0, 0x3, 0xff, 0xfc, 0x0, 0xff, 0xff, 0x0, + 0x3f, 0xff, 0xc0, 0xf, 0xff, 0xf0, 0x3, 0xff, + 0xfc, 0x0, 0xff, 0xff, 0x80, 0x7f, 0xdf, 0xff, + 0xff, 0xe3, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0xf8, + 0x7, 0xff, 0xfc, 0x0, 0x0, 0x7f, 0x80, 0x0, + 0xf, 0xf0, 0x0, 0x1, 0xfe, + + /* U+0052 "R" */ + 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xff, 0x83, 0xff, + 0xff, 0xfc, 0x7f, 0xff, 0xff, 0x8f, 0xf0, 0xf, + 0xf9, 0xfe, 0x0, 0xff, 0x3f, 0xc0, 0x1f, 0xe7, + 0xf8, 0x3, 0xfc, 0xff, 0x0, 0x7f, 0x9f, 0xe0, + 0xf, 0xf3, 0xfc, 0x1, 0xfe, 0x7f, 0x80, 0x3f, + 0xcf, 0xf0, 0x7, 0xf9, 0xfe, 0x1, 0xff, 0x3f, + 0xff, 0xff, 0xc7, 0xff, 0xff, 0xf8, 0xff, 0xff, + 0xfc, 0x1f, 0xff, 0xfc, 0x3, 0xff, 0xfc, 0x0, + 0x7f, 0xbf, 0xc0, 0xf, 0xf3, 0xf8, 0x1, 0xfe, + 0x7f, 0x80, 0x3f, 0xc7, 0xf8, 0x7, 0xf8, 0x7f, + 0x80, 0xff, 0xf, 0xf0, 0x1f, 0xe0, 0xff, 0x3, + 0xfc, 0xf, 0xf0, 0x7f, 0x80, 0xff, 0xf, 0xf0, + 0x1f, 0xe1, 0xfe, 0x1, 0xfe, 0x3f, 0xc0, 0x1f, + 0xe7, 0xf8, 0x3, 0xfe, 0xff, 0x0, 0x3f, 0xc0, + + /* U+0053 "S" */ + 0x7, 0xff, 0xf0, 0xf, 0xff, 0xfe, 0xf, 0xff, + 0xff, 0xcf, 0xff, 0xff, 0xef, 0xf8, 0xf, 0xff, + 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xff, 0xfe, 0x0, + 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, 0x0, 0x3f, + 0xc0, 0x0, 0x1f, 0xe0, 0x0, 0xf, 0xf8, 0x0, + 0x3, 0xff, 0xff, 0x81, 0xff, 0xff, 0xf0, 0x3f, + 0xff, 0xfe, 0x7, 0xff, 0xff, 0x0, 0x0, 0x7f, + 0xc0, 0x0, 0x1f, 0xe0, 0x0, 0xf, 0xf0, 0x0, + 0x7, 0xf8, 0x0, 0x3, 0xfc, 0x0, 0x1, 0xff, + 0xfe, 0x0, 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, + 0x3f, 0xff, 0xc0, 0x1f, 0xff, 0xe0, 0xf, 0xff, + 0xf8, 0xf, 0xfb, 0xff, 0xff, 0xf9, 0xff, 0xff, + 0xf8, 0x3f, 0xff, 0xf8, 0x7, 0xff, 0xf0, 0x0, + + /* U+0054 "T" */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x7f, 0x80, + 0x0, 0x1f, 0xe0, 0x0, 0x7, 0xf8, 0x0, 0x1, + 0xfe, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x1f, 0xe0, + 0x0, 0x7, 0xf8, 0x0, 0x1, 0xfe, 0x0, 0x0, + 0x7f, 0x80, 0x0, 0x1f, 0xe0, 0x0, 0x7, 0xf8, + 0x0, 0x1, 0xfe, 0x0, 0x0, 0x7f, 0x80, 0x0, + 0x1f, 0xe0, 0x0, 0x7, 0xf8, 0x0, 0x1, 0xfe, + 0x0, 0x0, 0x7f, 0x80, 0x0, 0x1f, 0xe0, 0x0, + 0x7, 0xf8, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x7f, + 0x80, 0x0, 0x1f, 0xe0, 0x0, 0x7, 0xf8, 0x0, + 0x1, 0xfe, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x1f, + 0xe0, 0x0, 0x7, 0xf8, 0x0, 0x1, 0xfe, 0x0, + 0x0, 0x7f, 0x80, 0x0, + + /* U+0055 "U" */ + 0xff, 0x0, 0x3f, 0xff, 0xc0, 0xf, 0xff, 0xf0, + 0x3, 0xff, 0xfc, 0x0, 0xff, 0xff, 0x0, 0x3f, + 0xff, 0xc0, 0xf, 0xff, 0xf0, 0x3, 0xff, 0xfc, + 0x0, 0xff, 0xff, 0x0, 0x3f, 0xff, 0xc0, 0xf, + 0xff, 0xf0, 0x3, 0xff, 0xfc, 0x0, 0xff, 0xff, + 0x0, 0x3f, 0xff, 0xc0, 0xf, 0xff, 0xf0, 0x3, + 0xff, 0xfc, 0x0, 0xff, 0xff, 0x0, 0x3f, 0xff, + 0xc0, 0xf, 0xff, 0xf0, 0x3, 0xff, 0xfc, 0x0, + 0xff, 0xff, 0x0, 0x3f, 0xff, 0xc0, 0xf, 0xff, + 0xf0, 0x3, 0xff, 0xfc, 0x0, 0xff, 0xff, 0x0, + 0x3f, 0xff, 0xc0, 0xf, 0xff, 0xf0, 0x3, 0xff, + 0xfc, 0x0, 0xff, 0xff, 0x80, 0x7f, 0xdf, 0xff, + 0xff, 0xe3, 0xff, 0xff, 0xf0, 0x7f, 0xff, 0xf8, + 0x7, 0xff, 0xf0, 0x0, + + /* U+0056 "V" */ + 0xfe, 0x0, 0x1, 0xff, 0xfe, 0x0, 0x3, 0xff, + 0xfc, 0x0, 0xf, 0xf3, 0xfc, 0x0, 0x1f, 0xe7, + 0xf8, 0x0, 0x3f, 0x87, 0xf0, 0x0, 0xff, 0xf, + 0xf0, 0x1, 0xfe, 0x1f, 0xe0, 0x3, 0xf8, 0x1f, + 0xc0, 0xf, 0xf0, 0x3f, 0xc0, 0x1f, 0xe0, 0x7f, + 0x80, 0x7f, 0x80, 0x7f, 0x0, 0xff, 0x0, 0xff, + 0x1, 0xfe, 0x1, 0xfe, 0x7, 0xf8, 0x1, 0xfc, + 0xf, 0xf0, 0x3, 0xfc, 0x1f, 0xc0, 0x7, 0xf8, + 0x7f, 0x80, 0x7, 0xf8, 0xff, 0x0, 0xf, 0xf1, + 0xfc, 0x0, 0xf, 0xe7, 0xf8, 0x0, 0x1f, 0xef, + 0xf0, 0x0, 0x3f, 0xff, 0xc0, 0x0, 0x3f, 0xff, + 0x80, 0x0, 0x7f, 0xff, 0x0, 0x0, 0xff, 0xfc, + 0x0, 0x0, 0xff, 0xf8, 0x0, 0x1, 0xff, 0xf0, + 0x0, 0x3, 0xff, 0xc0, 0x0, 0x3, 0xff, 0x80, + 0x0, 0x7, 0xfe, 0x0, 0x0, 0x7, 0xfc, 0x0, + 0x0, 0xf, 0xf8, 0x0, 0x0, 0x1f, 0xe0, 0x0, + + /* U+0057 "W" */ + 0xff, 0x0, 0x1f, 0xe0, 0x1, 0xfc, 0xfe, 0x0, + 0x3f, 0xe0, 0x7, 0xf9, 0xfe, 0x0, 0x7f, 0xc0, + 0xf, 0xf3, 0xfc, 0x1, 0xff, 0x80, 0x1f, 0xc3, + 0xf8, 0x3, 0xff, 0x80, 0x7f, 0x87, 0xf8, 0x7, + 0xff, 0x0, 0xff, 0xf, 0xf0, 0xf, 0xfe, 0x1, + 0xfe, 0x1f, 0xe0, 0x3f, 0xfc, 0x7, 0xf8, 0x1f, + 0xc0, 0x7f, 0xfc, 0xf, 0xf0, 0x3f, 0xc0, 0xff, + 0xf8, 0x1f, 0xe0, 0x7f, 0x83, 0xff, 0xf0, 0x3f, + 0x80, 0x7f, 0x7, 0xff, 0xf0, 0xff, 0x0, 0xff, + 0xf, 0xff, 0xe1, 0xfe, 0x1, 0xfe, 0x1f, 0xff, + 0xc3, 0xfc, 0x3, 0xfc, 0x7f, 0xbf, 0x8f, 0xf0, + 0x3, 0xfc, 0xff, 0x7f, 0x9f, 0xe0, 0x7, 0xf9, + 0xfc, 0xff, 0x3f, 0xc0, 0xf, 0xf7, 0xf9, 0xfe, + 0x7f, 0x0, 0xf, 0xef, 0xf1, 0xff, 0xfe, 0x0, + 0x1f, 0xff, 0xe3, 0xff, 0xfc, 0x0, 0x3f, 0xff, + 0x87, 0xff, 0xf8, 0x0, 0x3f, 0xff, 0x7, 0xff, + 0xe0, 0x0, 0x7f, 0xfe, 0xf, 0xff, 0xc0, 0x0, + 0xff, 0xf8, 0x1f, 0xff, 0x80, 0x1, 0xff, 0xf0, + 0x1f, 0xfe, 0x0, 0x1, 0xff, 0xe0, 0x3f, 0xfc, + 0x0, 0x3, 0xff, 0xc0, 0x7f, 0xf8, 0x0, 0x7, + 0xff, 0x0, 0xff, 0xe0, 0x0, 0x7, 0xfe, 0x0, + 0xff, 0xc0, 0x0, 0xf, 0xfc, 0x1, 0xff, 0x80, + 0x0, 0x1f, 0xf0, 0x3, 0xff, 0x0, 0x0, 0x3f, + 0xe0, 0x3, 0xfc, 0x0, 0x0, 0x3f, 0xc0, 0x7, + 0xf8, 0x0, + + /* U+0058 "X" */ + 0x7f, 0x80, 0x0, 0x7f, 0x9f, 0xc0, 0x0, 0x7f, + 0x8f, 0xf0, 0x0, 0x7f, 0x83, 0xfc, 0x0, 0x3f, + 0x80, 0xff, 0x0, 0x3f, 0xc0, 0x3f, 0x80, 0x3f, + 0xc0, 0x1f, 0xe0, 0x3f, 0xc0, 0x7, 0xf8, 0x1f, + 0xc0, 0x1, 0xfe, 0x1f, 0xe0, 0x0, 0x7f, 0x1f, + 0xe0, 0x0, 0x3f, 0xdf, 0xe0, 0x0, 0xf, 0xff, + 0xe0, 0x0, 0x3, 0xff, 0xf0, 0x0, 0x0, 0xff, + 0xf0, 0x0, 0x0, 0x7f, 0xf0, 0x0, 0x0, 0x1f, + 0xf0, 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x7, + 0xfc, 0x0, 0x0, 0x7, 0xff, 0x0, 0x0, 0x3, + 0xff, 0xc0, 0x0, 0x3, 0xff, 0xf0, 0x0, 0x3, + 0xff, 0xf8, 0x0, 0x3, 0xfd, 0xfe, 0x0, 0x1, + 0xfc, 0x7f, 0x80, 0x1, 0xfe, 0x1f, 0xe0, 0x1, + 0xfe, 0x7, 0xf0, 0x1, 0xfe, 0x3, 0xfc, 0x0, + 0xfe, 0x0, 0xff, 0x0, 0xff, 0x0, 0x3f, 0xc0, + 0xff, 0x0, 0xf, 0xe0, 0xff, 0x0, 0x7, 0xf8, + 0x7f, 0x0, 0x1, 0xfe, 0x7f, 0x80, 0x0, 0x7f, + 0x80, + + /* U+0059 "Y" */ + 0xff, 0x0, 0x0, 0xff, 0x7f, 0x0, 0x0, 0xfe, + 0x7f, 0x80, 0x1, 0xfe, 0x3f, 0xc0, 0x3, 0xfc, + 0x1f, 0xe0, 0x7, 0xf8, 0xf, 0xf0, 0xf, 0xf0, + 0x7, 0xf0, 0xf, 0xf0, 0x7, 0xf8, 0x1f, 0xe0, + 0x3, 0xfc, 0x3f, 0xc0, 0x1, 0xfe, 0x7f, 0x80, + 0x1, 0xfe, 0x7f, 0x80, 0x0, 0xff, 0xff, 0x0, + 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x3f, 0xfc, 0x0, + 0x0, 0x1f, 0xf8, 0x0, 0x0, 0x1f, 0xf8, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x0, 0xf, 0xf0, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x0, 0xf, 0xf0, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x0, 0xf, 0xf0, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x0, 0xf, 0xf0, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x0, 0xf, 0xf0, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x0, 0xf, 0xf0, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x0, 0xf, 0xf0, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x0, 0xf, 0xf0, 0x0, + 0x0, 0xf, 0xf0, 0x0, + + /* U+005A "Z" */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x7, 0xf0, + 0x0, 0x7, 0xf8, 0x0, 0x7, 0xf8, 0x0, 0x3, + 0xfc, 0x0, 0x3, 0xfc, 0x0, 0x3, 0xfc, 0x0, + 0x1, 0xfe, 0x0, 0x1, 0xfe, 0x0, 0x1, 0xfe, + 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, + 0xff, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x7f, 0x80, + 0x0, 0x7f, 0x80, 0x0, 0x3f, 0xc0, 0x0, 0x3f, + 0xc0, 0x0, 0x3f, 0xc0, 0x0, 0x1f, 0xe0, 0x0, + 0x1f, 0xe0, 0x0, 0x1f, 0xe0, 0x0, 0xf, 0xf0, + 0x0, 0xf, 0xf0, 0x0, 0xf, 0xf0, 0x0, 0x7, + 0xf8, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, + + /* U+0061 "a" */ + 0x3, 0xff, 0xe0, 0xf, 0xff, 0xfe, 0x1f, 0xff, + 0xff, 0x8f, 0xff, 0xff, 0xef, 0xf8, 0xf, 0xff, + 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xfe, 0x0, 0x0, + 0xff, 0x0, 0x0, 0x7f, 0x81, 0xff, 0xbf, 0xc7, + 0xff, 0xff, 0xe7, 0xff, 0xff, 0xf7, 0xff, 0xff, + 0xff, 0xfc, 0x7, 0xff, 0xfc, 0x1, 0xff, 0xfe, + 0x0, 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, 0x3f, + 0xff, 0xc0, 0x1f, 0xff, 0xe0, 0xf, 0xff, 0xf8, + 0xf, 0xfb, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfe, + 0x3f, 0xff, 0xff, 0x7, 0xff, 0x7f, 0x80, + + /* U+0062 "b" */ + 0xff, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x3f, 0xc0, + 0x0, 0x1f, 0xe0, 0x0, 0xf, 0xf0, 0x0, 0x7, + 0xf8, 0x0, 0x3, 0xfc, 0x0, 0x1, 0xfe, 0xff, + 0xe0, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xbf, + 0xff, 0xff, 0xdf, 0xf0, 0x1f, 0xff, 0xf0, 0x7, + 0xff, 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xff, 0xfe, + 0x0, 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, 0x3f, + 0xff, 0xc0, 0x1f, 0xff, 0xe0, 0xf, 0xff, 0xf0, + 0x7, 0xff, 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xff, + 0xfe, 0x0, 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, + 0x3f, 0xff, 0xc0, 0x1f, 0xff, 0xf0, 0x1f, 0xff, + 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf3, 0xff, 0xff, + 0xf1, 0xfe, 0xff, 0xe0, + + /* U+0063 "c" */ + 0x7, 0xff, 0xe0, 0x1f, 0xff, 0xf8, 0x3f, 0xff, + 0xfc, 0x7f, 0xff, 0xfe, 0xff, 0x81, 0xff, 0xff, + 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, + 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, + 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, + 0xff, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, + 0xff, 0xff, 0x0, 0xff, 0xff, 0x81, 0xff, 0x7f, + 0xff, 0xfe, 0x3f, 0xff, 0xfc, 0x1f, 0xff, 0xf8, + 0x7, 0xff, 0xe0, + + /* U+0064 "d" */ + 0x0, 0x0, 0x7f, 0x80, 0x0, 0x3f, 0xc0, 0x0, + 0x1f, 0xe0, 0x0, 0xf, 0xf0, 0x0, 0x7, 0xf8, + 0x0, 0x3, 0xfc, 0x0, 0x1, 0xfe, 0xf, 0xfe, + 0xff, 0x1f, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xdf, + 0xff, 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xf0, 0x7, + 0xff, 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xff, 0xfe, + 0x0, 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, 0x3f, + 0xff, 0xc0, 0x1f, 0xff, 0xe0, 0xf, 0xff, 0xf0, + 0x7, 0xff, 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xff, + 0xfe, 0x0, 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, + 0x3f, 0xff, 0xc0, 0x1f, 0xff, 0xf0, 0x1f, 0xf7, + 0xff, 0xff, 0xf9, 0xff, 0xff, 0xfc, 0x7f, 0xff, + 0xfe, 0xf, 0xfe, 0xff, + + /* U+0065 "e" */ + 0x7, 0xff, 0xe0, 0x1f, 0xff, 0xf8, 0x3f, 0xff, + 0xfe, 0x7f, 0xff, 0xfe, 0xff, 0x81, 0xff, 0xff, + 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, + 0xff, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, + 0xff, 0xff, 0x0, 0xff, 0xff, 0x81, 0xff, 0x7f, + 0xff, 0xfe, 0x3f, 0xff, 0xfc, 0x1f, 0xff, 0xf8, + 0x7, 0xff, 0xe0, + + /* U+0066 "f" */ + 0x0, 0x7f, 0xf0, 0x1f, 0xff, 0x7, 0xff, 0xf0, + 0x7f, 0xff, 0xf, 0xf8, 0x0, 0xff, 0x0, 0xf, + 0xf0, 0xf, 0xff, 0xf0, 0xff, 0xff, 0xf, 0xff, + 0xf0, 0xff, 0xff, 0x0, 0xff, 0x0, 0xf, 0xf0, + 0x0, 0xff, 0x0, 0xf, 0xf0, 0x0, 0xff, 0x0, + 0xf, 0xf0, 0x0, 0xff, 0x0, 0xf, 0xf0, 0x0, + 0xff, 0x0, 0xf, 0xf0, 0x0, 0xff, 0x0, 0xf, + 0xf0, 0x0, 0xff, 0x0, 0xf, 0xf0, 0x0, 0xff, + 0x0, 0xf, 0xf0, 0x0, 0xff, 0x0, 0xf, 0xf0, + 0x0, 0xff, 0x0, 0xf, 0xf0, 0x0, 0xff, 0x0, + + /* U+0067 "g" */ + 0x3, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xcf, 0xff, + 0xff, 0xef, 0xff, 0xff, 0xff, 0xf8, 0xf, 0xff, + 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xff, 0xfe, 0x0, + 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, 0x3f, 0xff, + 0xc0, 0x1f, 0xff, 0xe0, 0xf, 0xff, 0xf0, 0x7, + 0xff, 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xff, 0xfe, + 0x0, 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, 0x3f, + 0xff, 0xc0, 0x1f, 0xff, 0xe0, 0xf, 0xff, 0xf8, + 0xf, 0xfb, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfe, + 0x3f, 0xff, 0xff, 0x7, 0xff, 0xff, 0x80, 0x0, + 0x3f, 0xc0, 0x0, 0x1f, 0xff, 0xe0, 0xf, 0xff, + 0xf0, 0x7, 0xff, 0xfc, 0x7, 0xfd, 0xff, 0xff, + 0xfc, 0xff, 0xff, 0xfc, 0x1f, 0xff, 0xfc, 0x1, + 0xff, 0xf8, 0x0, + + /* U+0068 "h" */ + 0xff, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x3f, 0xc0, + 0x0, 0x1f, 0xe0, 0x0, 0xf, 0xf0, 0x0, 0x7, + 0xf8, 0x0, 0x3, 0xfc, 0x0, 0x1, 0xfe, 0xff, + 0xe0, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0x3f, + 0xff, 0xff, 0xdf, 0xf0, 0x1f, 0xff, 0xf0, 0x7, + 0xff, 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xff, 0xfe, + 0x0, 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, 0x3f, + 0xff, 0xc0, 0x1f, 0xff, 0xe0, 0xf, 0xff, 0xf0, + 0x7, 0xff, 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xff, + 0xfe, 0x0, 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, + 0x3f, 0xff, 0xc0, 0x1f, 0xff, 0xe0, 0xf, 0xff, + 0xf0, 0x7, 0xff, 0xf8, 0x3, 0xff, 0xfc, 0x1, + 0xff, 0xfe, 0x0, 0xff, + + /* U+0069 "i" */ + 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + /* U+006A "j" */ + 0x7, 0xf8, 0x3f, 0xc1, 0xfe, 0xf, 0xf0, 0x0, + 0x0, 0x0, 0x1f, 0xe0, 0xff, 0x7, 0xf8, 0x3f, + 0xc1, 0xfe, 0xf, 0xf0, 0x7f, 0x83, 0xfc, 0x1f, + 0xe0, 0xff, 0x7, 0xf8, 0x3f, 0xc1, 0xfe, 0xf, + 0xf0, 0x7f, 0x83, 0xfc, 0x1f, 0xe0, 0xff, 0x7, + 0xf8, 0x3f, 0xc1, 0xfe, 0xf, 0xf0, 0x7f, 0x83, + 0xfc, 0x1f, 0xe0, 0xff, 0x7, 0xf8, 0x7f, 0xff, + 0xfd, 0xff, 0xcf, 0xfc, 0x7f, 0x80, + + /* U+006B "k" */ + 0xff, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0xf, 0xf0, + 0x0, 0x3, 0xfc, 0x0, 0x0, 0xff, 0x0, 0x0, + 0x3f, 0xc0, 0x0, 0xf, 0xf0, 0x0, 0x3, 0xfc, + 0x1, 0xfe, 0xff, 0x0, 0xff, 0xbf, 0xc0, 0x3f, + 0xcf, 0xf0, 0x1f, 0xe3, 0xfc, 0xf, 0xf0, 0xff, + 0x7, 0xfc, 0x3f, 0xc3, 0xfe, 0xf, 0xf0, 0xff, + 0x3, 0xfc, 0x7f, 0x80, 0xff, 0x3f, 0xc0, 0x3f, + 0xdf, 0xf0, 0xf, 0xf7, 0xf8, 0x3, 0xff, 0xfc, + 0x0, 0xff, 0x7f, 0x80, 0x3f, 0xdf, 0xf0, 0xf, + 0xf3, 0xfc, 0x3, 0xfc, 0x7f, 0x80, 0xff, 0xf, + 0xf0, 0x3f, 0xc1, 0xfe, 0xf, 0xf0, 0x7f, 0xc3, + 0xfc, 0xf, 0xf0, 0xff, 0x1, 0xfe, 0x3f, 0xc0, + 0x3f, 0xcf, 0xf0, 0xf, 0xfb, 0xfc, 0x1, 0xfe, + + /* U+006C "l" */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + + /* U+006D "m" */ + 0xff, 0x3f, 0xf0, 0x3f, 0xf8, 0x3f, 0xff, 0xff, + 0x3f, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf3, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xc0, 0xff, + 0xe0, 0x7f, 0xff, 0xe0, 0x1f, 0xf0, 0xf, 0xff, + 0xf0, 0x7, 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xfe, + 0x0, 0xff, 0xff, 0x0, 0x7f, 0x80, 0x3f, 0xff, + 0xc0, 0x1f, 0xe0, 0xf, 0xff, 0xf0, 0x7, 0xf8, + 0x3, 0xff, 0xfc, 0x1, 0xfe, 0x0, 0xff, 0xff, + 0x0, 0x7f, 0x80, 0x3f, 0xff, 0xc0, 0x1f, 0xe0, + 0xf, 0xff, 0xf0, 0x7, 0xf8, 0x3, 0xff, 0xfc, + 0x1, 0xfe, 0x0, 0xff, 0xff, 0x0, 0x7f, 0x80, + 0x3f, 0xff, 0xc0, 0x1f, 0xe0, 0xf, 0xff, 0xf0, + 0x7, 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xfe, 0x0, + 0xff, 0xff, 0x0, 0x7f, 0x80, 0x3f, 0xff, 0xc0, + 0x1f, 0xe0, 0xf, 0xff, 0xf0, 0x7, 0xf8, 0x3, + 0xff, 0xfc, 0x1, 0xfe, 0x0, 0xff, 0xff, 0x0, + 0x7f, 0x80, 0x3f, 0xc0, + + /* U+006E "n" */ + 0xff, 0x3f, 0xf0, 0x7f, 0xff, 0xfe, 0x3f, 0xff, + 0xff, 0x9f, 0xff, 0xff, 0xef, 0xfc, 0xf, 0xff, + 0xfc, 0x3, 0xff, 0xfc, 0x1, 0xff, 0xfe, 0x0, + 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, 0x3f, 0xff, + 0xc0, 0x1f, 0xff, 0xe0, 0xf, 0xff, 0xf0, 0x7, + 0xff, 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xff, 0xfe, + 0x0, 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, 0x3f, + 0xff, 0xc0, 0x1f, 0xff, 0xe0, 0xf, 0xff, 0xf0, + 0x7, 0xff, 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xff, + 0xfe, 0x0, 0xff, 0xff, 0x0, 0x7f, 0x80, + + /* U+006F "o" */ + 0x7, 0xff, 0xe0, 0x1f, 0xff, 0xf8, 0x3f, 0xff, + 0xfc, 0x7f, 0xff, 0xfe, 0xff, 0x81, 0xff, 0xff, + 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, + 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, + 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, + 0xff, 0xff, 0x0, 0xff, 0xff, 0x81, 0xff, 0x7f, + 0xff, 0xfe, 0x3f, 0xff, 0xfc, 0x1f, 0xff, 0xf8, + 0x7, 0xff, 0xe0, + + /* U+0070 "p" */ + 0xff, 0xff, 0xe0, 0x7f, 0xff, 0xfe, 0x3f, 0xff, + 0xff, 0x9f, 0xff, 0xff, 0xef, 0xf8, 0xf, 0xff, + 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xff, 0xfe, 0x0, + 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, 0x3f, 0xff, + 0xc0, 0x1f, 0xff, 0xe0, 0xf, 0xff, 0xf0, 0x7, + 0xff, 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xff, 0xfe, + 0x0, 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, 0x3f, + 0xff, 0xc0, 0x1f, 0xff, 0xe0, 0xf, 0xff, 0xf8, + 0xf, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xf9, + 0xff, 0xff, 0xf8, 0xff, 0x7f, 0xe0, 0x7f, 0x80, + 0x0, 0x3f, 0xc0, 0x0, 0x1f, 0xe0, 0x0, 0xf, + 0xf0, 0x0, 0x7, 0xf8, 0x0, 0x3, 0xfc, 0x0, + 0x1, 0xfe, 0x0, 0x0, + + /* U+0071 "q" */ + 0x3, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xcf, 0xff, + 0xff, 0xef, 0xff, 0xff, 0xff, 0xf8, 0xf, 0xff, + 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xff, 0xfe, 0x0, + 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, 0x3f, 0xff, + 0xc0, 0x1f, 0xff, 0xe0, 0xf, 0xff, 0xf0, 0x7, + 0xff, 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xff, 0xfe, + 0x0, 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, 0x3f, + 0xff, 0xc0, 0x1f, 0xff, 0xe0, 0xf, 0xff, 0xf8, + 0xf, 0xfb, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfe, + 0x3f, 0xff, 0xff, 0x7, 0xff, 0x7f, 0x80, 0x0, + 0x3f, 0xc0, 0x0, 0x1f, 0xe0, 0x0, 0xf, 0xf0, + 0x0, 0x7, 0xf8, 0x0, 0x3, 0xfc, 0x0, 0x1, + 0xfe, 0x0, 0x0, 0xff, + + /* U+0072 "r" */ + 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfc, 0x1f, 0xf0, 0x3f, 0xc0, 0x7f, 0x80, 0xff, + 0x1, 0xfe, 0x3, 0xfc, 0x7, 0xf8, 0xf, 0xf0, + 0x1f, 0xe0, 0x3f, 0xc0, 0x7f, 0x80, 0xff, 0x1, + 0xfe, 0x3, 0xfc, 0x7, 0xf8, 0xf, 0xf0, 0x1f, + 0xe0, 0x3f, 0xc0, 0x7f, 0x80, 0xff, 0x0, + + /* U+0073 "s" */ + 0x7, 0xff, 0xf0, 0xf, 0xff, 0xfe, 0x1f, 0xff, + 0xff, 0xcf, 0xff, 0xff, 0xef, 0xf8, 0xf, 0xff, + 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xff, 0xfe, 0x0, + 0x0, 0xff, 0x80, 0x0, 0x3f, 0xff, 0xf8, 0x1f, + 0xff, 0xff, 0x3, 0xff, 0xff, 0xc0, 0x7f, 0xff, + 0xf0, 0x0, 0x7, 0xfc, 0x0, 0x1, 0xfe, 0x0, + 0x0, 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, 0x3f, + 0xff, 0xc0, 0x1f, 0xff, 0xe0, 0xf, 0xff, 0xf8, + 0xf, 0xfb, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xf8, + 0x3f, 0xff, 0xf8, 0x7, 0xff, 0xe0, 0x0, + + /* U+0074 "t" */ + 0x7, 0xf8, 0x1, 0xfe, 0x0, 0x7f, 0x80, 0x1f, + 0xe0, 0x7, 0xf8, 0x1, 0xfe, 0xf, 0xff, 0xfb, + 0xff, 0xfe, 0xff, 0xff, 0xbf, 0xff, 0xe0, 0x7f, + 0x80, 0x1f, 0xe0, 0x7, 0xf8, 0x1, 0xfe, 0x0, + 0x7f, 0x80, 0x1f, 0xe0, 0x7, 0xf8, 0x1, 0xfe, + 0x0, 0x7f, 0x80, 0x1f, 0xe0, 0x7, 0xf8, 0x1, + 0xfe, 0x0, 0x7f, 0x80, 0x1f, 0xe0, 0x7, 0xf8, + 0x1, 0xfe, 0x0, 0x7f, 0xc0, 0xf, 0xff, 0x1, + 0xff, 0xc0, 0x3f, 0xf0, 0x3, 0xfc, + + /* U+0075 "u" */ + 0xff, 0x0, 0x7f, 0xff, 0x80, 0x3f, 0xff, 0xc0, + 0x1f, 0xff, 0xe0, 0xf, 0xff, 0xf0, 0x7, 0xff, + 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xff, 0xfe, 0x0, + 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, 0x3f, 0xff, + 0xc0, 0x1f, 0xff, 0xe0, 0xf, 0xff, 0xf0, 0x7, + 0xff, 0xf8, 0x3, 0xff, 0xfc, 0x1, 0xff, 0xfe, + 0x0, 0xff, 0xff, 0x0, 0x7f, 0xff, 0x80, 0x3f, + 0xff, 0xc0, 0x1f, 0xff, 0xe0, 0x1f, 0xff, 0xf8, + 0x1f, 0xfb, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfe, + 0x3f, 0xff, 0xff, 0x7, 0xfe, 0x7f, 0x80, + + /* U+0076 "v" */ + 0xff, 0x0, 0x7, 0xff, 0xf8, 0x0, 0x3f, 0xdf, + 0xc0, 0x3, 0xfc, 0xff, 0x0, 0x1f, 0xe3, 0xf8, + 0x1, 0xfe, 0x1f, 0xe0, 0xf, 0xf0, 0xff, 0x0, + 0x7f, 0x3, 0xfc, 0x7, 0xf8, 0x1f, 0xe0, 0x3f, + 0x80, 0x7f, 0x3, 0xfc, 0x3, 0xfc, 0x1f, 0xe0, + 0xf, 0xe1, 0xfe, 0x0, 0x7f, 0x8f, 0xf0, 0x3, + 0xfc, 0xff, 0x0, 0xf, 0xf7, 0xf8, 0x0, 0x7f, + 0xbf, 0x80, 0x1, 0xff, 0xfc, 0x0, 0xf, 0xff, + 0xe0, 0x0, 0x3f, 0xfe, 0x0, 0x1, 0xff, 0xf0, + 0x0, 0x7, 0xff, 0x0, 0x0, 0x3f, 0xf8, 0x0, + 0x1, 0xff, 0x80, 0x0, 0x7, 0xfc, 0x0, 0x0, + 0x3f, 0xc0, 0x0, + + /* U+0077 "w" */ + 0xfe, 0x0, 0x7f, 0x80, 0x3f, 0xff, 0xc0, 0x3f, + 0xe0, 0xf, 0xff, 0xf0, 0xf, 0xfc, 0x7, 0xf9, + 0xfc, 0x3, 0xff, 0x1, 0xfe, 0x7f, 0x81, 0xff, + 0xc0, 0x7f, 0x9f, 0xe0, 0x7f, 0xf8, 0x3f, 0xc3, + 0xfc, 0x1f, 0xfe, 0xf, 0xf0, 0xff, 0xf, 0xff, + 0x83, 0xf8, 0x1f, 0xc3, 0xff, 0xf1, 0xfe, 0x7, + 0xf8, 0xff, 0xfc, 0x7f, 0x81, 0xfe, 0x7f, 0xff, + 0x1f, 0xc0, 0x3f, 0x9f, 0xff, 0xef, 0xf0, 0xf, + 0xf7, 0xf7, 0xfb, 0xfc, 0x3, 0xff, 0xfc, 0xfe, + 0xfe, 0x0, 0x7f, 0xff, 0x3f, 0xff, 0x80, 0x1f, + 0xff, 0x8f, 0xff, 0xe0, 0x7, 0xff, 0xe1, 0xff, + 0xf0, 0x0, 0xff, 0xf8, 0x7f, 0xfc, 0x0, 0x3f, + 0xfc, 0x1f, 0xff, 0x0, 0xf, 0xff, 0x3, 0xff, + 0x80, 0x1, 0xff, 0xc0, 0xff, 0xe0, 0x0, 0x7f, + 0xe0, 0x3f, 0xf8, 0x0, 0x1f, 0xf8, 0x7, 0xfc, + 0x0, 0x3, 0xfe, 0x1, 0xff, 0x0, 0x0, 0xff, + 0x0, 0x7f, 0xc0, 0x0, + + /* U+0078 "x" */ + 0x7f, 0x80, 0x3, 0xfc, 0x7f, 0x80, 0xf, 0xf0, + 0x7f, 0x0, 0x1f, 0xc0, 0x7f, 0x0, 0x7f, 0x0, + 0xff, 0x1, 0xfe, 0x0, 0xff, 0x7, 0xf8, 0x0, + 0xff, 0x1f, 0xe0, 0x0, 0xff, 0x7f, 0x80, 0x0, + 0xff, 0xfe, 0x0, 0x0, 0xff, 0xf8, 0x0, 0x0, + 0xff, 0xe0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, + 0xfe, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0xf, + 0xfe, 0x0, 0x0, 0x3f, 0xfe, 0x0, 0x0, 0xff, + 0xfe, 0x0, 0x3, 0xfd, 0xfe, 0x0, 0xf, 0xf1, + 0xfe, 0x0, 0x3f, 0xc1, 0xfe, 0x0, 0x7f, 0x1, + 0xfe, 0x1, 0xfc, 0x1, 0xfc, 0x7, 0xf0, 0x1, + 0xfc, 0x1f, 0xe0, 0x3, 0xfc, 0x7f, 0x80, 0x3, + 0xfc, + + /* U+0079 "y" */ + 0x7f, 0x0, 0x3, 0xfd, 0xfe, 0x0, 0x1f, 0xe3, + 0xfc, 0x0, 0xff, 0x7, 0xf8, 0x7, 0xf8, 0xf, + 0xe0, 0x1f, 0xe0, 0x3f, 0xc0, 0xff, 0x0, 0x7f, + 0x87, 0xf8, 0x0, 0xff, 0x3f, 0xc0, 0x1, 0xfc, + 0xfe, 0x0, 0x7, 0xff, 0xf8, 0x0, 0xf, 0xff, + 0xc0, 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x3f, 0xf0, + 0x0, 0x0, 0xff, 0xc0, 0x0, 0x1, 0xfe, 0x0, + 0x0, 0x7, 0xf8, 0x0, 0x0, 0x1f, 0xe0, 0x0, + 0x0, 0x7f, 0x80, 0x0, 0x1, 0xfe, 0x0, 0x0, + 0x7, 0xf8, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, + 0x7f, 0x80, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x7, + 0xf8, 0x0, 0x0, 0x1f, 0xe0, 0x0, + + /* U+007A "z" */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x0, 0x3, 0xfe, 0x0, + 0x7, 0xfe, 0x0, 0x7, 0xfc, 0x0, 0xf, 0xf8, + 0x0, 0x1f, 0xf0, 0x0, 0x3f, 0xe0, 0x0, 0x7f, + 0xc0, 0x0, 0xff, 0x80, 0x1, 0xff, 0x80, 0x1, + 0xff, 0x0, 0x3, 0xfe, 0x0, 0x7, 0xfc, 0x0, + 0xf, 0xf8, 0x0, 0x1f, 0xf0, 0x0, 0x3f, 0xe0, + 0x0, 0x3f, 0xe0, 0x0, 0x7f, 0xc0, 0x0, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff +}; + + +/*--------------------- + * GLYPH DESCRIPTION + *--------------------*/ + +static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { + {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, + {.bitmap_index = 0, .adv_w = 704, .box_w = 36, .box_h = 36, .ofs_x = 4, .ofs_y = -1}, + {.bitmap_index = 162, .adv_w = 704, .box_w = 19, .box_h = 36, .ofs_x = 13, .ofs_y = 0}, + {.bitmap_index = 248, .adv_w = 704, .box_w = 36, .box_h = 36, .ofs_x = 4, .ofs_y = -1}, + {.bitmap_index = 410, .adv_w = 704, .box_w = 36, .box_h = 36, .ofs_x = 4, .ofs_y = -1}, + {.bitmap_index = 572, .adv_w = 704, .box_w = 43, .box_h = 36, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 766, .adv_w = 704, .box_w = 36, .box_h = 36, .ofs_x = 4, .ofs_y = -1}, + {.bitmap_index = 928, .adv_w = 704, .box_w = 36, .box_h = 36, .ofs_x = 4, .ofs_y = -1}, + {.bitmap_index = 1090, .adv_w = 704, .box_w = 36, .box_h = 36, .ofs_x = 4, .ofs_y = -1}, + {.bitmap_index = 1252, .adv_w = 704, .box_w = 35, .box_h = 34, .ofs_x = 4, .ofs_y = 0}, + {.bitmap_index = 1401, .adv_w = 704, .box_w = 36, .box_h = 36, .ofs_x = 4, .ofs_y = -1}, + {.bitmap_index = 1563, .adv_w = 601, .box_w = 35, .box_h = 33, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1708, .adv_w = 471, .box_w = 24, .box_h = 33, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 1807, .adv_w = 475, .box_w = 24, .box_h = 33, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 1906, .adv_w = 475, .box_w = 25, .box_h = 33, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 2010, .adv_w = 461, .box_w = 23, .box_h = 33, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 2105, .adv_w = 463, .box_w = 23, .box_h = 33, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 2200, .adv_w = 497, .box_w = 25, .box_h = 33, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 2304, .adv_w = 523, .box_w = 27, .box_h = 33, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 2416, .adv_w = 230, .box_w = 8, .box_h = 33, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 2449, .adv_w = 299, .box_w = 15, .box_h = 33, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2511, .adv_w = 497, .box_w = 28, .box_h = 33, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 2627, .adv_w = 457, .box_w = 23, .box_h = 33, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 2722, .adv_w = 658, .box_w = 35, .box_h = 33, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 2867, .adv_w = 550, .box_w = 28, .box_h = 33, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 2983, .adv_w = 509, .box_w = 26, .box_h = 33, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 3091, .adv_w = 492, .box_w = 25, .box_h = 33, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 3195, .adv_w = 509, .box_w = 26, .box_h = 36, .ofs_x = 3, .ofs_y = -3}, + {.bitmap_index = 3312, .adv_w = 475, .box_w = 27, .box_h = 33, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 3424, .adv_w = 497, .box_w = 25, .box_h = 33, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 3528, .adv_w = 462, .box_w = 26, .box_h = 33, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3636, .adv_w = 512, .box_w = 26, .box_h = 33, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 3744, .adv_w = 527, .box_w = 31, .box_h = 33, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3872, .adv_w = 747, .box_w = 47, .box_h = 33, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4066, .adv_w = 542, .box_w = 33, .box_h = 33, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4203, .adv_w = 538, .box_w = 32, .box_h = 33, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 4335, .adv_w = 461, .box_w = 25, .box_h = 33, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 4439, .adv_w = 487, .box_w = 25, .box_h = 25, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 4518, .adv_w = 502, .box_w = 25, .box_h = 32, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 4618, .adv_w = 481, .box_w = 24, .box_h = 25, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 4693, .adv_w = 499, .box_w = 25, .box_h = 32, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 4793, .adv_w = 483, .box_w = 24, .box_h = 25, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 4868, .adv_w = 355, .box_w = 20, .box_h = 32, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 4948, .adv_w = 492, .box_w = 25, .box_h = 34, .ofs_x = 3, .ofs_y = -9}, + {.bitmap_index = 5055, .adv_w = 502, .box_w = 25, .box_h = 32, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 5155, .adv_w = 237, .box_w = 8, .box_h = 31, .ofs_x = 4, .ofs_y = 0}, + {.bitmap_index = 5186, .adv_w = 264, .box_w = 13, .box_h = 38, .ofs_x = 1, .ofs_y = -7}, + {.bitmap_index = 5248, .adv_w = 476, .box_w = 26, .box_h = 32, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 5352, .adv_w = 232, .box_w = 8, .box_h = 32, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 5384, .adv_w = 761, .box_w = 42, .box_h = 25, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 5516, .adv_w = 487, .box_w = 25, .box_h = 25, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 5595, .adv_w = 481, .box_w = 24, .box_h = 25, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 5670, .adv_w = 492, .box_w = 25, .box_h = 32, .ofs_x = 3, .ofs_y = -7}, + {.bitmap_index = 5770, .adv_w = 492, .box_w = 25, .box_h = 32, .ofs_x = 3, .ofs_y = -7}, + {.bitmap_index = 5870, .adv_w = 296, .box_w = 15, .box_h = 25, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 5917, .adv_w = 498, .box_w = 25, .box_h = 25, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 5996, .adv_w = 330, .box_w = 18, .box_h = 31, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 6066, .adv_w = 499, .box_w = 25, .box_h = 25, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 6145, .adv_w = 497, .box_w = 29, .box_h = 25, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 6236, .adv_w = 705, .box_w = 42, .box_h = 25, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 6368, .adv_w = 506, .box_w = 31, .box_h = 25, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 6465, .adv_w = 494, .box_w = 30, .box_h = 25, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 6559, .adv_w = 439, .box_w = 24, .box_h = 25, .ofs_x = 1, .ofs_y = 0} +}; + +/*--------------------- + * CHARACTER MAPPING + *--------------------*/ + + + +/*Collect the unicode lists and glyph_id offsets*/ +static const lv_font_fmt_txt_cmap_t cmaps[] = +{ + { + .range_start = 48, .range_length = 10, .glyph_id_start = 1, + .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY + }, + { + .range_start = 65, .range_length = 26, .glyph_id_start = 11, + .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY + }, + { + .range_start = 97, .range_length = 26, .glyph_id_start = 37, + .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY + } +}; + + + +/*-------------------- + * ALL CUSTOM DATA + *--------------------*/ + +#if LVGL_VERSION_MAJOR == 8 +/*Store all the custom data of the font*/ +static lv_font_fmt_txt_glyph_cache_t cache; +#endif + +#if LVGL_VERSION_MAJOR >= 8 +static const lv_font_fmt_txt_dsc_t font_dsc = { +#else +static lv_font_fmt_txt_dsc_t font_dsc = { +#endif + .glyph_bitmap = glyph_bitmap, + .glyph_dsc = glyph_dsc, + .cmaps = cmaps, + .kern_dsc = NULL, + .kern_scale = 0, + .cmap_num = 3, + .bpp = 1, + .kern_classes = 0, + .bitmap_format = 0, +#if LVGL_VERSION_MAJOR == 8 + .cache = &cache +#endif + +}; + + + +/*----------------- + * PUBLIC FONT + *----------------*/ + +/*Initialize a public general font descriptor*/ +#if LVGL_VERSION_MAJOR >= 8 +const lv_font_t dhurjati_70 = { +#else +lv_font_t dhurjati_70 = { +#endif + .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ + .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ + .line_height = 45, /*The maximum line height required by the font*/ + .base_line = 9, /*Baseline measured from the bottom of the line*/ +#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) + .subpx = LV_FONT_SUBPX_NONE, +#endif +#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8 + .underline_position = -44, + .underline_thickness = 2, +#endif + .static_bitmap = 0, + .dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ +#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9 + .fallback = NULL, +#endif + .user_data = NULL, +}; + + + +#endif /*#if DHURJATI_70*/ diff --git a/software/dmm/assets/fonts/digital7_230.c b/software/dmm/assets/fonts/digital7_230.c new file mode 100644 index 0000000..3d1a44d --- /dev/null +++ b/software/dmm/assets/fonts/digital7_230.c @@ -0,0 +1,2101 @@ +/******************************************************************************* + * Size: 230 px + * Bpp: 1 + * Opts: --bpp 1 --size 230 --no-compress --stride 1 --align 1 --font digital-7.ttf --symbols -.0123456789 --format lvgl -o digital7_230.c + ******************************************************************************/ + +#ifdef __has_include + #if __has_include("lvgl.h") + #ifndef LV_LVGL_H_INCLUDE_SIMPLE + #define LV_LVGL_H_INCLUDE_SIMPLE + #endif + #endif +#endif + +#ifdef LV_LVGL_H_INCLUDE_SIMPLE + #include "lvgl.h" +#else + #include "lvgl/lvgl.h" +#endif + + + +#ifndef DIGITAL7_230 +#define DIGITAL7_230 1 +#endif + +#if DIGITAL7_230 + +/*----------------- + * BITMAPS + *----------------*/ + +/*Store the image of the glyphs*/ +static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { + /* U+002D "-" */ + 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xc0, 0x7, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xe0, 0xf, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x7f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfc, 0x1f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf8, 0xf, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf0, 0x7, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x3, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x0, + + /* U+002E "." */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x80, + + /* U+0030 "0" */ + 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x86, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x87, 0x80, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf, + 0xe0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf, 0xf0, 0x1f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf, 0xf8, 0x3f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x1f, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfe, 0x1f, 0xfc, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xfe, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfc, 0x3f, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, + 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf8, 0x7f, 0xff, 0x7, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0x0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0xff, 0xff, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf0, 0xff, 0xff, 0xc0, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, + 0xf0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe1, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xc0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, + 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xe0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0x7e, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7e, 0x3c, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, + 0x18, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x18, 0x3c, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, + 0x7e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7e, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xff, 0xff, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, + 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xf0, 0x0, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xe1, 0xff, 0xff, 0xc0, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, + 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf0, 0xff, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, + 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0x3f, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfc, 0x3f, 0xfe, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xfe, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfe, 0x1f, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0x1f, 0xfc, 0x1f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf, + 0xf8, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf, 0xf0, 0x7, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf, 0xe0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x87, 0x80, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x86, 0x0, + + /* U+0031 "1" */ + 0x3, 0x0, 0x1, 0xe0, 0x1, 0xfc, 0x0, 0xff, + 0x0, 0x7f, 0xc0, 0x7f, 0xf0, 0x3f, 0xf8, 0x1f, + 0xfe, 0x1f, 0xff, 0xf, 0xff, 0xcf, 0xff, 0xe7, + 0xff, 0xf3, 0xff, 0xfb, 0xff, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xfb, 0xff, 0xfc, 0xff, 0xfe, 0x3f, 0xff, + 0xf, 0xff, 0x83, 0xff, 0xc0, 0xff, 0xe0, 0x3f, + 0xf0, 0xf, 0xf8, 0x3, 0xfc, 0x0, 0xfc, 0x0, + 0x3c, 0x0, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30, + 0x0, 0x3c, 0x0, 0x3f, 0x0, 0x3f, 0xc0, 0x3f, + 0xe0, 0x3f, 0xf0, 0x3f, 0xf8, 0x3f, 0xfc, 0x3f, + 0xfe, 0x3f, 0xff, 0x3f, 0xff, 0xbf, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x7f, 0xff, 0xbf, 0xff, 0xcf, 0xff, 0xe7, + 0xff, 0xf3, 0xff, 0xf8, 0xff, 0xfc, 0x7f, 0xfc, + 0x1f, 0xfe, 0xf, 0xfe, 0x7, 0xff, 0x1, 0xff, + 0x0, 0xff, 0x0, 0x7f, 0x0, 0x1e, 0x0, 0xc, + 0x0, + + /* U+0032 "2" */ + 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x86, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x87, 0x80, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf, + 0xe0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf, 0xf0, 0x1f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf, 0xf8, 0x3f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x1f, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfe, 0x1f, 0xfc, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xfe, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfc, 0x3f, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, + 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf8, 0x7f, 0xff, 0x7, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0x0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0xff, 0xff, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf0, 0xff, 0xff, 0x0, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, + 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x3, 0xff, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0x0, + 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xc0, 0xff, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xe0, 0x7e, 0x0, 0xf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3c, + 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf8, 0x18, 0x0, 0x3f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x7f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0, 0x0, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfc, 0x0, 0x18, 0x1f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf8, 0x0, 0x3c, 0xf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, + 0x7e, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xe0, 0x0, 0xff, 0x3, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0, 0xff, 0x81, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x0, 0x0, 0xff, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xf0, 0x0, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0xc0, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0, + 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xc0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xe0, 0x0, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf0, 0x0, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf8, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x1f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfc, 0x0, 0x7, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfe, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0x0, + + /* U+0033 "3" */ + 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x86, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x87, 0x80, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf, + 0xe0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf, 0xf0, 0x1f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf, 0xf8, 0x3f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x1f, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfe, 0x1f, 0xfc, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xfe, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfc, 0x3f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, + 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf8, 0x7f, 0xff, 0x7, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf0, 0x7f, 0xff, 0x0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0xff, 0xff, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf0, 0xff, 0xff, 0x0, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x3, 0xff, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0x0, + 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xc0, 0xff, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xe0, 0x7e, 0x0, 0xf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3c, + 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf8, 0x18, 0x0, 0x3f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x7f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0, 0x0, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfc, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf8, 0x18, 0x0, 0xf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3c, + 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xe0, 0x7e, 0x0, 0x3, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, + 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x3, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xe1, 0xff, 0xff, 0x0, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, + 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf0, 0xff, 0xff, 0x1, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x7f, + 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0x3f, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfc, 0x3f, 0xfe, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xfe, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfe, 0x1f, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0x1f, 0xfc, 0x1f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf, + 0xf8, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf, 0xf0, 0x7, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf, 0xe0, 0x3, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x87, 0x80, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x86, 0x0, + + /* U+0034 "4" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7, 0xc0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1f, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xfe, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3f, 0xfe, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0xff, 0xff, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, + 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, + 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xe0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x3, 0xff, 0xff, 0x81, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, + 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xc0, 0xff, 0x7e, 0x7, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xe0, 0x7e, 0x3c, 0xf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3c, + 0x18, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf8, 0x18, 0x0, 0x3f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x7f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0, 0x0, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfc, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf8, 0x18, 0x0, 0xf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3c, + 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xe0, 0x7e, 0x0, 0x3, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, + 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x3, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x6, 0x0, + + /* U+0035 "5" */ + 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xfe, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfc, 0x0, 0x1f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x3f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf8, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf8, 0x0, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xe0, 0x0, 0x7, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xc0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xc0, 0x0, 0xc0, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0, + 0xf0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x0, 0x0, 0xff, 0x81, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0xff, + 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xc0, 0x0, 0x7e, 0x7, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xe0, 0x0, 0x3c, 0xf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, + 0x18, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf8, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x7f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0, 0x0, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfc, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf8, 0x18, 0x0, 0xf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3c, + 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xe0, 0x7e, 0x0, 0x3, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, + 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x3, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xe1, 0xff, 0xff, 0x0, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, + 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf0, 0xff, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, + 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0x3f, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfc, 0x3f, 0xfe, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xfe, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfe, 0x1f, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0x1f, 0xfc, 0x1f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf, + 0xf8, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf, 0xf0, 0x7, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf, 0xe0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x87, 0x80, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x86, 0x0, + + /* U+0036 "6" */ + 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xfe, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfc, 0x0, 0x1f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x3f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf8, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf8, 0x0, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xe0, 0x0, 0x7, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xc0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xc0, 0x0, 0xc0, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0, + 0xf0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x0, 0x0, 0xff, 0x81, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0xff, + 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xc0, 0x0, 0x7e, 0x7, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xe0, 0x0, 0x3c, 0xf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, + 0x18, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf8, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x7f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0, 0x0, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfc, 0x0, 0x18, 0x1f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf8, 0x18, 0x3c, 0xf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3c, + 0x7e, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xe0, 0x7e, 0xff, 0x3, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0x81, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, + 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x3, 0xff, 0xff, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, + 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xf0, 0x0, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xe1, 0xff, 0xff, 0xc0, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, + 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf0, 0xff, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, + 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0x3f, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfc, 0x3f, 0xfe, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xfe, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfe, 0x1f, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0x1f, 0xfc, 0x1f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf, + 0xf8, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf, 0xf0, 0x7, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf, 0xe0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x87, 0x80, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x86, 0x0, + + /* U+0037 "7" */ + 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x86, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x87, 0x80, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf, + 0xe0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf, 0xf0, 0x1f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf, 0xf8, 0x3f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x1f, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfe, 0x1f, 0xfc, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xfe, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfc, 0x3f, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, + 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf8, 0x7f, 0xff, 0x7, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0x0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0xff, 0xff, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf0, 0xff, 0xff, 0xc0, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, + 0xf0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe1, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xc0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xfe, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, + 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3f, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xe0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0x7e, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7e, 0x3c, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, + 0x18, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7c, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7, 0x0, + + /* U+0038 "8" */ + 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x86, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x87, 0x80, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf, + 0xe0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf, 0xf0, 0x1f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf, 0xf8, 0x3f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x1f, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfe, 0x1f, 0xfc, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xfe, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfc, 0x3f, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, + 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf8, 0x7f, 0xff, 0x7, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0x0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0xff, 0xff, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf0, 0xff, 0xff, 0xc0, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, + 0xf0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe1, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xc0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, + 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xe0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x3, 0xff, 0xff, 0x81, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, + 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xc0, 0xff, 0x7e, 0x7, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xe0, 0x7e, 0x3c, 0xf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3c, + 0x18, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf8, 0x18, 0x0, 0x3f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x7f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0, 0x0, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfc, 0x0, 0x18, 0x1f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf8, 0x18, 0x3c, 0xf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3c, + 0x7e, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xe0, 0x7e, 0xff, 0x3, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0x81, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, + 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x3, 0xff, 0xff, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, + 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xf0, 0x0, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xe1, 0xff, 0xff, 0xc0, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, + 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf0, 0xff, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, + 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0x3f, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfc, 0x3f, 0xfe, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xfe, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfe, 0x1f, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0x1f, 0xfc, 0x1f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf, + 0xf8, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf, 0xf0, 0x7, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf, 0xe0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x87, 0x80, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x86, 0x0, + + /* U+0039 "9" */ + 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x86, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x87, 0x80, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf, + 0xe0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf, 0xf0, 0x1f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf, 0xf8, 0x3f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x1f, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfe, 0x1f, 0xfc, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xfe, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfc, 0x3f, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, + 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf8, 0x7f, 0xff, 0x7, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0x0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0xff, 0xff, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf0, 0xff, 0xff, 0xc0, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, + 0xf0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe1, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xc0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, + 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xe0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x3, 0xff, 0xff, 0x81, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, + 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xc0, 0xff, 0x7e, 0x7, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xe0, 0x7e, 0x3c, 0xf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3c, + 0x18, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf8, 0x18, 0x0, 0x3f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x7f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0, 0x0, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfc, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf8, 0x18, 0x0, 0xf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3c, + 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xe0, 0x7e, 0x0, 0x3, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0x0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, + 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x3, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xe1, 0xff, 0xff, 0x0, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, + 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf0, 0xff, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, + 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0x3f, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfc, 0x3f, 0xfe, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xfe, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfe, 0x1f, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0x1f, 0xfc, 0x1f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf, + 0xf8, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf, 0xf0, 0x7, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf, 0xe0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x87, 0x80, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x86, 0x0 +}; + + +/*--------------------- + * GLYPH DESCRIPTION + *--------------------*/ + +static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { + {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, + {.bitmap_index = 0, .adv_w = 1472, .box_w = 72, .box_h = 17, .ofs_x = 10, .ofs_y = 67}, + {.bitmap_index = 153, .adv_w = 602, .box_w = 17, .box_h = 17, .ofs_x = 10, .ofs_y = 0}, + {.bitmap_index = 190, .adv_w = 1740, .box_w = 88, .box_h = 151, .ofs_x = 10, .ofs_y = 0}, + {.bitmap_index = 1851, .adv_w = 602, .box_w = 17, .box_h = 151, .ofs_x = 10, .ofs_y = 0}, + {.bitmap_index = 2172, .adv_w = 1740, .box_w = 88, .box_h = 151, .ofs_x = 10, .ofs_y = 0}, + {.bitmap_index = 3833, .adv_w = 1740, .box_w = 88, .box_h = 151, .ofs_x = 11, .ofs_y = 0}, + {.bitmap_index = 5494, .adv_w = 1740, .box_w = 88, .box_h = 151, .ofs_x = 10, .ofs_y = 0}, + {.bitmap_index = 7155, .adv_w = 1740, .box_w = 88, .box_h = 151, .ofs_x = 10, .ofs_y = 0}, + {.bitmap_index = 8816, .adv_w = 1740, .box_w = 88, .box_h = 151, .ofs_x = 10, .ofs_y = 0}, + {.bitmap_index = 10477, .adv_w = 1740, .box_w = 88, .box_h = 151, .ofs_x = 10, .ofs_y = 0}, + {.bitmap_index = 12138, .adv_w = 1740, .box_w = 88, .box_h = 151, .ofs_x = 10, .ofs_y = 0}, + {.bitmap_index = 13799, .adv_w = 1740, .box_w = 88, .box_h = 151, .ofs_x = 10, .ofs_y = 0} +}; + +/*--------------------- + * CHARACTER MAPPING + *--------------------*/ + +static const uint8_t glyph_id_ofs_list_0[] = { + 0, 1, 0, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11 +}; + +/*Collect the unicode lists and glyph_id offsets*/ +static const lv_font_fmt_txt_cmap_t cmaps[] = +{ + { + .range_start = 45, .range_length = 13, .glyph_id_start = 1, + .unicode_list = NULL, .glyph_id_ofs_list = glyph_id_ofs_list_0, .list_length = 13, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_FULL + } +}; + + + +/*-------------------- + * ALL CUSTOM DATA + *--------------------*/ + +#if LVGL_VERSION_MAJOR == 8 +/*Store all the custom data of the font*/ +static lv_font_fmt_txt_glyph_cache_t cache; +#endif + +#if LVGL_VERSION_MAJOR >= 8 +static const lv_font_fmt_txt_dsc_t font_dsc = { +#else +static lv_font_fmt_txt_dsc_t font_dsc = { +#endif + .glyph_bitmap = glyph_bitmap, + .glyph_dsc = glyph_dsc, + .cmaps = cmaps, + .kern_dsc = NULL, + .kern_scale = 0, + .cmap_num = 1, + .bpp = 1, + .kern_classes = 0, + .bitmap_format = 0, +#if LVGL_VERSION_MAJOR == 8 + .cache = &cache +#endif + +}; + + + +/*----------------- + * PUBLIC FONT + *----------------*/ + +/*Initialize a public general font descriptor*/ +#if LVGL_VERSION_MAJOR >= 8 +const lv_font_t digital7_230 = { +#else +lv_font_t digital7_230 = { +#endif + .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ + .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ + .line_height = 151, /*The maximum line height required by the font*/ + .base_line = 0, /*Baseline measured from the bottom of the line*/ +#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) + .subpx = LV_FONT_SUBPX_NONE, +#endif +#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8 + .underline_position = -25, + .underline_thickness = 15, +#endif + .static_bitmap = 0, + .dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ +#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9 + .fallback = NULL, +#endif + .user_data = NULL, +}; + + + +#endif /*#if DIGITAL7_230*/ diff --git a/software/dmm/assets/icons/continuity.c b/software/dmm/assets/icons/continuity.c new file mode 100644 index 0000000..f3af96b --- /dev/null +++ b/software/dmm/assets/icons/continuity.c @@ -0,0 +1,148 @@ + +#if defined(LV_LVGL_H_INCLUDE_SIMPLE) +#include "lvgl.h" +#elif defined(LV_LVGL_H_INCLUDE_SYSTEM) +#include +#elif defined(LV_BUILD_TEST) +#include "../lvgl.h" +#else +#include "lvgl/lvgl.h" +#endif + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_CONTINUITY +#define LV_ATTRIBUTE_CONTINUITY +#endif + +static const +LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_CONTINUITY +uint8_t continuity_map[] = { + + 0xe8,0xe8,0xe8,0xf9,0xd8,0xd8,0xd8,0x02, + + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x83,0xff,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0xff,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x3f,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x1f,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x07,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x01,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xe0,0x00,0x7f,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x87,0xff,0xf0,0x00,0x1f,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0xff,0xfc,0x00,0x0f,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x7f,0xff,0x00,0x07,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x3f,0xff,0xc0,0x03,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x0f,0xff,0xe0,0x01,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x07,0xff,0xf0,0x00,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x03,0xff,0xfc,0x00,0x7f,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0xff,0xfe,0x00,0x3f,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x7f,0xff,0x00,0x1f,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x3f,0xff,0x80,0x0f,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x1f,0xff,0xc0,0x0f,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x0f,0xff,0xe0,0x07,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0x9f,0xff,0xff,0x80,0x0f,0xff,0xf0,0x03,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0x07,0xff,0xff,0xc0,0x07,0xff,0xf8,0x03,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xe0,0x03,0xff,0xf8,0x01,0xff,0x80, + 0xff,0xff,0xff,0xff,0xfe,0x00,0xff,0xff,0xf0,0x01,0xff,0xfc,0x01,0xff,0x80, + 0xff,0xff,0xff,0xff,0xfe,0x00,0x7f,0xff,0xf8,0x01,0xff,0xfe,0x00,0xff,0x80, + 0xff,0xff,0xff,0xff,0xfc,0x00,0x1f,0xff,0xfc,0x00,0xff,0xff,0x00,0xff,0x80, + 0xff,0xff,0xff,0xff,0xfc,0x00,0x0f,0xff,0xfe,0x00,0xff,0xff,0x00,0x7f,0x80, + 0xff,0xff,0xff,0xff,0xfe,0x00,0x07,0xff,0xff,0x00,0x7f,0xff,0x80,0x7f,0x80, + 0xff,0xff,0xff,0xff,0xff,0x80,0x03,0xff,0xff,0x00,0x7f,0xff,0x80,0x3f,0x80, + 0xff,0xff,0xff,0xff,0xff,0xe0,0x03,0xff,0xff,0x80,0x3f,0xff,0xc0,0x3f,0x80, + 0xff,0xff,0xff,0xff,0xff,0xf0,0x01,0xff,0xff,0xc0,0x3f,0xff,0xc0,0x1f,0x80, + 0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0xff,0xff,0xc0,0x1f,0xff,0xe0,0x1f,0x80, + 0xff,0xff,0xff,0xdf,0xff,0xfe,0x00,0xff,0xff,0xe0,0x1f,0xff,0xe0,0x1f,0x80, + 0xff,0xff,0xff,0x87,0xff,0xff,0x00,0x7f,0xff,0xe0,0x1f,0xff,0xe0,0x0f,0x80, + 0xff,0xff,0xff,0x83,0xff,0xff,0x00,0x7f,0xff,0xf0,0x0f,0xff,0xf0,0x0f,0x80, + 0xff,0xff,0xff,0x80,0xff,0xff,0x80,0x3f,0xff,0xf0,0x0f,0xff,0xf0,0x0f,0x80, + 0xff,0xff,0xff,0x00,0x7f,0xff,0xc0,0x3f,0xff,0xf0,0x0f,0xff,0xf0,0x0f,0x80, + 0xff,0xff,0xff,0x00,0x3f,0xff,0xc0,0x1f,0xff,0xf0,0x0f,0xff,0xf8,0x0f,0x80, + 0xff,0xc7,0xfe,0x00,0x3f,0xff,0xe0,0x1f,0xff,0xf0,0x07,0xff,0xf8,0x07,0x80, + 0xfe,0x00,0xff,0x00,0x1f,0xff,0xe0,0x1f,0xff,0xf8,0x07,0xff,0xf8,0x07,0x80, + 0xfc,0x00,0x3f,0xc0,0x1f,0xff,0xe0,0x1f,0xff,0xf8,0x07,0xff,0xf8,0x07,0x80, + 0xf0,0x00,0x3f,0xe0,0x0f,0xff,0xf0,0x1f,0xff,0xf8,0x07,0xff,0xf8,0x07,0x80, + 0xf0,0x00,0x1f,0xf0,0x0f,0xff,0xf0,0x0f,0xff,0xf8,0x07,0xff,0xfc,0x07,0x80, + 0xe0,0x00,0x0f,0xf0,0x0f,0xff,0xf0,0x1f,0xff,0xf8,0x07,0xff,0xf8,0x07,0x80, + 0xe0,0x00,0x0f,0xf8,0x0f,0xff,0xf0,0x0f,0xff,0xf8,0x07,0xff,0xfc,0x07,0x80, + 0xe0,0x00,0x0f,0xf8,0x07,0xff,0xf0,0x0f,0xff,0xf8,0x07,0xff,0xf8,0x07,0x80, + 0xe0,0x00,0x07,0xf8,0x07,0xff,0xf0,0x1f,0xff,0xf8,0x07,0xff,0xfc,0x07,0x80, + 0xe0,0x00,0x07,0xf8,0x0f,0xff,0xf0,0x0f,0xff,0xf8,0x07,0xff,0xf8,0x07,0x80, + 0xe0,0x00,0x07,0xf0,0x0f,0xff,0xf0,0x1f,0xff,0xf8,0x07,0xff,0xfc,0x07,0x80, + 0xe0,0x00,0x0f,0xf0,0x0f,0xff,0xe0,0x1f,0xff,0xf8,0x07,0xff,0xf8,0x07,0x80, + 0xe0,0x00,0x0f,0xe0,0x0f,0xff,0xe0,0x1f,0xff,0xf0,0x0f,0xff,0xfc,0x07,0x80, + 0xf0,0x00,0x0f,0xc0,0x0f,0xff,0xe0,0x1f,0xff,0xf0,0x0f,0xff,0xf8,0x07,0x80, + 0xf0,0x00,0x1f,0x00,0x1f,0xff,0xc0,0x3f,0xff,0xf0,0x0f,0xff,0xf8,0x07,0x80, + 0xf8,0x00,0x3f,0x00,0x1f,0xff,0xc0,0x3f,0xff,0xf0,0x0f,0xff,0xf8,0x07,0x80, + 0xfc,0x00,0x7f,0x00,0x3f,0xff,0x80,0x3f,0xff,0xe0,0x1f,0xff,0xf8,0x0f,0x80, + 0xff,0x00,0xff,0x00,0x7f,0xff,0x00,0x7f,0xff,0xe0,0x1f,0xff,0xf0,0x0f,0x80, + 0xff,0xef,0xff,0x80,0xff,0xfe,0x00,0x7f,0xff,0xc0,0x1f,0xff,0xf0,0x0f,0x80, + 0xff,0xff,0xff,0x81,0xff,0xfc,0x00,0xff,0xff,0xc0,0x3f,0xff,0xf0,0x0f,0x80, + 0xff,0xff,0xff,0x83,0xff,0xf8,0x00,0xff,0xff,0x80,0x3f,0xff,0xf0,0x0f,0x80, + 0xff,0xff,0xff,0xcf,0xff,0xf0,0x01,0xff,0xff,0x80,0x7f,0xff,0xe0,0x1f,0x80, + 0xff,0xff,0xff,0xff,0xff,0xe0,0x03,0xff,0xff,0x00,0x7f,0xff,0xe0,0x1f,0x80, + 0xff,0xff,0xff,0xff,0xff,0x80,0x03,0xff,0xfe,0x00,0x7f,0xff,0xc0,0x1f,0x80, + 0xff,0xff,0xff,0xff,0xfe,0x00,0x07,0xff,0xfe,0x00,0xff,0xff,0xc0,0x3f,0x80, + 0xff,0xff,0xff,0xff,0xfc,0x00,0x0f,0xff,0xfc,0x01,0xff,0xff,0xc0,0x3f,0x80, + 0xff,0xff,0xff,0xff,0xfe,0x00,0x1f,0xff,0xf8,0x01,0xff,0xff,0x80,0x3f,0x80, + 0xff,0xff,0xff,0xff,0xfe,0x00,0x7f,0xff,0xf0,0x03,0xff,0xff,0x00,0x7f,0x80, + 0xff,0xff,0xff,0xff,0xfe,0x00,0xff,0xff,0xe0,0x03,0xff,0xff,0x00,0x7f,0x80, + 0xff,0xff,0xff,0xff,0xff,0x03,0xff,0xff,0xc0,0x0f,0xff,0xfe,0x00,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0x07,0xff,0xff,0x00,0x0f,0xff,0xfe,0x00,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0x9f,0xff,0xfe,0x00,0x1f,0xff,0xfc,0x01,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x3f,0xff,0xf8,0x01,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x7f,0xff,0xf0,0x03,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0xff,0xff,0xf0,0x07,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x01,0xff,0xff,0xc0,0x07,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x07,0xff,0xff,0xc0,0x0f,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x0f,0xff,0xff,0x00,0x1f,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x3f,0xff,0xff,0x00,0x3f,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x7f,0xff,0xfc,0x00,0x7f,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0xff,0xff,0xf8,0x00,0x7f,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x87,0xff,0xff,0xf0,0x00,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x9f,0xff,0xff,0xc0,0x01,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x03,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x07,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x1f,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x3f,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x7f,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x01,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x03,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x0f,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x1f,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x7f,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x81,0xff,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x87,0xff,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80, + +}; + +const lv_image_dsc_t continuity_icon = { + .header = { + .magic = LV_IMAGE_HEADER_MAGIC, + .cf = LV_COLOR_FORMAT_I1, + .flags = 0, + .w = 113, + .h = 105, + .stride = 15, + .reserved_2 = 0, + }, + .data_size = sizeof(continuity_map), + .data = continuity_map, + .reserved = NULL, +}; + diff --git a/software/dmm/assets/icons/omega.c b/software/dmm/assets/icons/omega.c new file mode 100644 index 0000000..a1a4b2e --- /dev/null +++ b/software/dmm/assets/icons/omega.c @@ -0,0 +1,134 @@ + +#if defined(LV_LVGL_H_INCLUDE_SIMPLE) +#include "lvgl.h" +#elif defined(LV_LVGL_H_INCLUDE_SYSTEM) +#include +#elif defined(LV_BUILD_TEST) +#include "../lvgl.h" +#else +#include "lvgl/lvgl.h" +#endif + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_OMEGA +#define LV_ATTRIBUTE_OMEGA +#endif + +static const +LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_OMEGA +uint8_t omega_map[] = { + + 0xb9,0xb9,0xba,0x04,0xea,0xea,0xea,0xfc, + + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x3f,0xd0,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00, + 0x00,0x00,0x00,0x3f,0xff,0xc0,0x3f,0xff,0xe0,0x00,0x00,0x00, + 0x00,0x00,0x00,0xff,0xfc,0x00,0x03,0xff,0xf8,0x00,0x00,0x00, + 0x00,0x00,0x03,0xff,0xf0,0x00,0x00,0xff,0xfc,0x00,0x00,0x00, + 0x00,0x00,0x07,0xff,0xc0,0x00,0x00,0x3f,0xfe,0x00,0x00,0x00, + 0x00,0x00,0x0f,0xff,0x80,0x00,0x00,0x0f,0xff,0x80,0x00,0x00, + 0x00,0x00,0x1f,0xfe,0x00,0x00,0x00,0x07,0xff,0xc0,0x00,0x00, + 0x00,0x00,0x7f,0xfc,0x00,0x00,0x00,0x03,0xff,0xe0,0x00,0x00, + 0x00,0x00,0x7f,0xf8,0x00,0x00,0x00,0x01,0xff,0xf0,0x00,0x00, + 0x00,0x00,0xff,0xf0,0x00,0x00,0x00,0x00,0xff,0xf8,0x00,0x00, + 0x00,0x01,0xff,0xe0,0x00,0x00,0x00,0x00,0x7f,0xfc,0x00,0x00, + 0x00,0x03,0xff,0xe0,0x00,0x00,0x00,0x00,0x3f,0xfc,0x00,0x00, + 0x00,0x07,0xff,0xc0,0x00,0x00,0x00,0x00,0x1f,0xfe,0x00,0x00, + 0x00,0x07,0xff,0x80,0x00,0x00,0x00,0x00,0x1f,0xff,0x00,0x00, + 0x00,0x0f,0xff,0x80,0x00,0x00,0x00,0x00,0x0f,0xff,0x00,0x00, + 0x00,0x1f,0xff,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0x80,0x00, + 0x00,0x1f,0xff,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xc0,0x00, + 0x00,0x3f,0xfe,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xc0,0x00, + 0x00,0x3f,0xfe,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xe0,0x00, + 0x00,0x7f,0xfc,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xe0,0x00, + 0x00,0x7f,0xfc,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xf0,0x00, + 0x00,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xf0,0x00, + 0x00,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xf0,0x00, + 0x00,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xf8,0x00, + 0x01,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xf8,0x00, + 0x01,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xf8,0x00, + 0x01,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xf8,0x00, + 0x01,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xfc,0x00, + 0x03,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xfc,0x00, + 0x03,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xfc,0x00, + 0x03,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xfc,0x00, + 0x03,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xfc,0x00, + 0x03,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xfe,0x00, + 0x03,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xfc,0x00, + 0x03,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xfe,0x00, + 0x03,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xfe,0x00, + 0x03,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xfc,0x00, + 0x03,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xfe,0x00, + 0x03,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xfc,0x00, + 0x03,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xfc,0x00, + 0x03,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xfc,0x00, + 0x03,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xfc,0x00, + 0x03,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xfc,0x00, + 0x01,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xfc,0x00, + 0x01,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xfc,0x00, + 0x01,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xf8,0x00, + 0x01,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xf8,0x00, + 0x00,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xf8,0x00, + 0x00,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xf0,0x00, + 0x00,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xf0,0x00, + 0x00,0x7f,0xf8,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xf0,0x00, + 0x00,0x7f,0xfc,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xe0,0x00, + 0x00,0x3f,0xfc,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xe0,0x00, + 0x00,0x3f,0xfc,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xc0,0x00, + 0x00,0x1f,0xfe,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xc0,0x00, + 0x00,0x1f,0xfe,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0x80,0x00, + 0x00,0x0f,0xfe,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0x80,0x00, + 0x00,0x07,0xff,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0x00,0x00, + 0x00,0x07,0xff,0x00,0x00,0x00,0x00,0x00,0x0f,0xfe,0x00,0x00, + 0x00,0x03,0xff,0x00,0x00,0x00,0x00,0x00,0x0f,0xfe,0x00,0x00, + 0x00,0x01,0xff,0x80,0x00,0x00,0x00,0x00,0x0f,0xfc,0x00,0x00, + 0x00,0x01,0xff,0x80,0x00,0x00,0x00,0x00,0x1f,0xf8,0x00,0x00, + 0x00,0x00,0xff,0xc0,0x00,0x00,0x00,0x00,0x1f,0xf0,0x00,0x00, + 0x00,0x00,0x7f,0xc0,0x00,0x00,0x00,0x00,0x3f,0xe0,0x00,0x00, + 0x10,0x00,0x3f,0xe0,0x00,0x00,0x00,0x00,0x3f,0xe0,0x00,0x00, + 0x38,0x00,0x1f,0xe0,0x00,0x00,0x00,0x00,0x7f,0xc0,0x00,0xe0, + 0x3c,0x00,0x1f,0xf0,0x00,0x00,0x00,0x00,0x7f,0x80,0x01,0xe0, + 0x3e,0x00,0x0f,0xf0,0x00,0x00,0x00,0x00,0xff,0x00,0x03,0xc0, + 0x3e,0x00,0x07,0xf8,0x00,0x00,0x00,0x01,0xfe,0x00,0x07,0xc0, + 0x3f,0x00,0x03,0xfc,0x00,0x00,0x00,0x01,0xfc,0x00,0x07,0xc0, + 0x1f,0x00,0x01,0xfc,0x00,0x00,0x00,0x03,0xfc,0x00,0x0f,0xc0, + 0x1f,0x80,0x00,0xfe,0x00,0x00,0x00,0x03,0xf8,0x00,0x0f,0xc0, + 0x1f,0x80,0x00,0x7e,0x00,0x00,0x00,0x07,0xf0,0x00,0x1f,0xc0, + 0x1f,0xe0,0x00,0x7f,0x00,0x00,0x00,0x0f,0xe0,0x00,0x3f,0xc0, + 0x1f,0xff,0xd7,0xff,0x80,0x00,0x00,0x0f,0xff,0x5f,0xff,0x80, + 0x1f,0xff,0xff,0xff,0x80,0x00,0x00,0x1f,0xff,0xff,0xff,0x80, + 0x1f,0xff,0xff,0xff,0xc0,0x00,0x00,0x1f,0xff,0xff,0xff,0x80, + 0x1f,0xff,0xff,0xff,0xc0,0x00,0x00,0x3f,0xff,0xff,0xff,0x80, + 0x1f,0xff,0xff,0xff,0xe0,0x00,0x00,0x7f,0xff,0xff,0xff,0x80, + 0x0f,0xff,0xff,0xff,0xf0,0x00,0x00,0x7f,0xff,0xff,0xff,0x80, + 0x0f,0xff,0xff,0xff,0xf0,0x00,0x00,0xff,0xff,0xff,0xff,0x80, + 0x0f,0xff,0xff,0xff,0xf8,0x00,0x00,0xff,0xff,0xff,0xff,0x80, + 0x0f,0xff,0xff,0xff,0xf8,0x00,0x01,0xff,0xff,0xff,0xff,0x00, + 0x07,0xff,0xff,0xff,0xf8,0x00,0x00,0xff,0xff,0xff,0xff,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + +}; + +const lv_image_dsc_t omega_icon = { + .header = { + .magic = LV_IMAGE_HEADER_MAGIC, + .cf = LV_COLOR_FORMAT_I1, + .flags = 0, + .w = 91, + .h = 91, + .stride = 12, + .reserved_2 = 0, + }, + .data_size = sizeof(omega_map), + .data = omega_map, + .reserved = NULL, +}; + From 5bdf2d0e3b8f728c73ed0ed3612532b0456dc514 Mon Sep 17 00:00:00 2001 From: Kirill Yatsenko Date: Tue, 6 Jan 2026 08:45:28 +0100 Subject: [PATCH 4/5] [dmm] initial multimeter frontend --- software/dmm/src/main.c | 197 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 193 insertions(+), 4 deletions(-) diff --git a/software/dmm/src/main.c b/software/dmm/src/main.c index 1a0890e..b779df2 100644 --- a/software/dmm/src/main.c +++ b/software/dmm/src/main.c @@ -42,6 +42,17 @@ static char * selected_backend; /* Global simulator settings, defined in lv_linux_backend.c */ extern simulator_settings_t settings; +/* DMM section */ +static lv_style_t style_grid; +static lv_style_t style_btn_mode; +static lv_style_t style_lbl_mode_selected; +static lv_style_t style_img_mode_selected; +static lv_style_t style_btn_ac_dc_selected; +static lv_style_t style_lbl_measurments; +static lv_style_t style_lbl_indicators; + +static lv_obj_t * dmm_selected_mode; +static lv_obj_t * dmm_selected_ac_dc; /** * @brief Print LVGL version @@ -131,6 +142,187 @@ static void configure_simulator(int argc, char ** argv) } } +static void configure_styles(void) +{ + static int32_t col_dsc[] = {LV_GRID_FR(25), LV_GRID_FR(25), LV_GRID_FR(25), LV_GRID_FR(25), LV_GRID_TEMPLATE_LAST}; + static int32_t row_dsc[] = {LV_GRID_FR(33), LV_GRID_FR(34), LV_GRID_FR(33), LV_GRID_TEMPLATE_LAST}; + + LV_FONT_DECLARE(dhurjati_70); + LV_FONT_DECLARE(dhurjati_140); + LV_FONT_DECLARE(digital7_230); + + lv_style_init(&style_grid); + lv_style_set_pad_row(&style_grid, 1); + lv_style_set_pad_column(&style_grid, 1); + lv_style_set_pad_all(&style_grid, 0); + lv_style_set_grid_column_dsc_array(&style_grid, col_dsc); + lv_style_set_grid_row_dsc_array(&style_grid, row_dsc); + lv_style_set_height(&style_grid, lv_pct(100)); + lv_style_set_width(&style_grid, lv_pct(100)); + lv_style_set_align(&style_grid, LV_ALIGN_CENTER); + lv_style_set_layout(&style_grid, LV_LAYOUT_GRID); + + lv_style_init(&style_btn_mode); + lv_style_set_radius(&style_btn_mode, 0); + lv_style_set_bg_color(&style_btn_mode, lv_color_hex(0x1d1b1b)); + lv_style_set_text_font(&style_btn_mode, &dhurjati_140); + + lv_style_init(&style_lbl_mode_selected); + lv_style_set_bg_color(&style_lbl_mode_selected, lv_color_hex(0x3C7ACC)); + lv_style_set_bg_opa(&style_lbl_mode_selected, LV_OPA_100); + lv_style_set_pad_all(&style_lbl_mode_selected, 20); + lv_style_set_radius(&style_lbl_mode_selected, 20); + lv_style_set_text_color(&style_lbl_mode_selected, lv_color_hex(0x1d1b1b)); + lv_style_set_align(&style_lbl_mode_selected, LV_ALIGN_CENTER); + + lv_style_init(&style_img_mode_selected); + lv_style_copy(&style_img_mode_selected, &style_lbl_mode_selected); + lv_style_set_image_recolor(&style_img_mode_selected, lv_color_hex(0x1d1b1b)); + lv_style_set_image_recolor_opa(&style_img_mode_selected, LV_OPA_100); + + lv_style_init(&style_btn_ac_dc_selected); + lv_style_set_bg_color(&style_btn_ac_dc_selected, lv_color_white()); + lv_style_set_text_color(&style_btn_ac_dc_selected, lv_color_hex(0x1d1b1b)); + + lv_style_init(&style_lbl_measurments); + lv_style_set_text_font(&style_lbl_measurments, &digital7_230); + lv_style_set_text_color(&style_lbl_measurments, lv_color_hex(0xFFBB00)); + + lv_style_init(&style_lbl_indicators); + lv_style_set_bg_color(&style_lbl_indicators, lv_color_hex(0xA3363F)); + lv_style_set_bg_opa(&style_lbl_indicators, LV_OPA_100); + lv_style_set_pad_all(&style_lbl_indicators, 5); + lv_style_set_pad_left(&style_lbl_indicators, 20); + lv_style_set_pad_right(&style_lbl_indicators, 20); + lv_style_set_radius(&style_lbl_indicators, 20); + lv_style_set_text_color(&style_lbl_indicators, lv_color_hex(0xFFFFFF)); + lv_style_set_text_font(&style_lbl_indicators, &dhurjati_70); +} + +static lv_obj_t * cell_selected_event(lv_event_t * e, lv_obj_t * selected_cell) +{ + lv_event_code_t code = lv_event_get_code(e); + lv_obj_t * cell = lv_event_get_target_obj(e); + + if(code != LV_EVENT_VALUE_CHANGED) { + LV_LOG_ERROR("Unhandled event"); + return selected_cell; + } + + if(selected_cell) { + lv_obj_remove_state(selected_cell, LV_STATE_CHECKED); + lv_obj_add_flag(selected_cell, LV_OBJ_FLAG_CHECKABLE); + } + + lv_obj_remove_flag(cell, LV_OBJ_FLAG_CHECKABLE); + selected_cell = cell; + + return selected_cell; +} + +static void mode_cell_selected_event(lv_event_t * e) +{ + dmm_selected_mode = cell_selected_event(e, dmm_selected_mode); +} + +static void ac_dc_cell_selected_event(lv_event_t * e) +{ + dmm_selected_ac_dc = cell_selected_event(e, dmm_selected_ac_dc); +} + +static lv_obj_t * create_mode_cell(lv_obj_t * parent, int col, int row) +{ + lv_obj_t * cell = lv_button_create(parent); + lv_obj_set_grid_cell(cell, LV_GRID_ALIGN_STRETCH, col, 1, LV_GRID_ALIGN_STRETCH, row, 1); + lv_obj_add_event_cb(cell, mode_cell_selected_event, LV_EVENT_VALUE_CHANGED, NULL); + + /* Remove default "RED" background when clicking on button */ + lv_obj_remove_style(cell, NULL, LV_STATE_CHECKED); + + lv_obj_add_style(cell, &style_btn_mode, 0); + + /* Propogate events from the button to children so the style will be applied + on LV_STATE_CHECKED to children as well */ + lv_obj_add_flag(cell, LV_OBJ_FLAG_STATE_TRICKLE); + lv_obj_add_flag(cell, LV_OBJ_FLAG_CHECKABLE); + + return cell; +} + +static void create_mode_cell_label(lv_obj_t * parent, int col, int row, const char * text) +{ + lv_obj_t * cell = create_mode_cell(parent, col, row); + + lv_obj_t * label = lv_label_create(cell); + lv_label_set_text(label, text); + lv_obj_add_style(label, &style_lbl_mode_selected, LV_STATE_CHECKED); + lv_obj_center(label); +} + +static void create_mode_cell_icon(lv_obj_t * parent, int col, int row, const lv_image_dsc_t * icon) +{ + lv_obj_t * cell = create_mode_cell(parent, col, row); + + lv_obj_t * img = lv_image_create(cell); + lv_img_set_src(img, icon); + lv_obj_add_style(img, &style_img_mode_selected, LV_STATE_CHECKED); + lv_obj_center(img); +} + +static void create_measurments_cell(lv_obj_t * parent, int col, int row) +{ + lv_obj_t * cell = lv_button_create(parent); + lv_obj_set_grid_cell(cell, LV_GRID_ALIGN_STRETCH, col, 2, LV_GRID_ALIGN_STRETCH, row, 2); + lv_obj_remove_flag(cell, LV_OBJ_FLAG_CLICKABLE); + lv_obj_add_style(cell, &style_btn_mode, 0); + + lv_obj_t * label = lv_label_create(cell); + lv_label_set_text(label, "auto"); + lv_obj_align(label, LV_ALIGN_CENTER, -140, -100); + lv_obj_add_style(label, &style_lbl_indicators, 0); + + label = lv_label_create(cell); + lv_label_set_text_fmt(label, "%.2f", 22.15); + lv_obj_align(label, LV_ALIGN_CENTER, 0, 20); + lv_obj_add_style(label, &style_lbl_measurments, 0); +} + +static void create_ac_dc_cell(lv_obj_t * parent, int col, int row, const char * text) +{ + lv_obj_t * cell = lv_button_create(parent); + lv_obj_set_grid_cell(cell, LV_GRID_ALIGN_STRETCH, col, 1, LV_GRID_ALIGN_STRETCH, row, 1); + lv_obj_add_event_cb(cell, ac_dc_cell_selected_event, LV_EVENT_VALUE_CHANGED, NULL); + lv_obj_add_style(cell, &style_btn_mode, 0); + lv_obj_add_style(cell, &style_btn_ac_dc_selected, LV_STATE_CHECKED); + lv_obj_add_flag(cell, LV_OBJ_FLAG_CHECKABLE); + + lv_obj_t * label = lv_label_create(cell); + lv_label_set_text(label, text); + lv_obj_center(label); +} + +static void setup_dmm_ui(void) +{ + LV_IMAGE_DECLARE(omega_icon); + LV_IMAGE_DECLARE(continuity_icon); + + configure_styles(); + + /*Create a container with grid*/ + lv_obj_t * mode_grid = lv_obj_create(lv_screen_active()); + lv_obj_add_style(mode_grid, &style_grid, 0); + + create_mode_cell_icon(mode_grid, 0, 0, &omega_icon); + create_measurments_cell(mode_grid, 1, 0); + create_mode_cell_label(mode_grid, 3, 0, "A"); + create_mode_cell_icon(mode_grid, 0, 1, &continuity_icon); + create_mode_cell_label(mode_grid, 3, 1, "mA"); + create_mode_cell_label(mode_grid, 0, 2, "kHZ"); + create_ac_dc_cell(mode_grid, 1, 2, "DC"); + create_ac_dc_cell(mode_grid, 2, 2, "AC"); + create_mode_cell_label(mode_grid, 3, 2, "V"); +} + /** * @brief entry point * @description start a demo @@ -139,7 +331,6 @@ static void configure_simulator(int argc, char ** argv) */ int main(int argc, char ** argv) { - configure_simulator(argc, argv); /* Initialize LVGL. */ @@ -157,9 +348,7 @@ int main(int argc, char ** argv) } #endif - /*Create a Demo*/ - lv_demo_widgets(); - lv_demo_widgets_start_slideshow(); + setup_dmm_ui(); /* Enter the run loop of the selected backend */ driver_backends_run_loop(); From 7ffbc558576e0a5e65d2ec2a9de6ae34c6c6701a Mon Sep 17 00:00:00 2001 From: Kirill Yatsenko Date: Wed, 7 Jan 2026 11:01:10 +0100 Subject: [PATCH 5/5] [dmm] apply review suggestions --- .../{Dockerfile_cross => cross.Dockerfile} | 0 .../{Dockerfile_DEBIAN => debian.Dockerfile} | 0 software/dmm/manifest.json | 121 ------------------ software/dmm/src/lib/mouse_cursor_icon.c | 91 +++++++++---- 4 files changed, 65 insertions(+), 147 deletions(-) rename software/dmm/docker/{Dockerfile_cross => cross.Dockerfile} (100%) rename software/dmm/docker/{Dockerfile_DEBIAN => debian.Dockerfile} (100%) delete mode 100644 software/dmm/manifest.json diff --git a/software/dmm/docker/Dockerfile_cross b/software/dmm/docker/cross.Dockerfile similarity index 100% rename from software/dmm/docker/Dockerfile_cross rename to software/dmm/docker/cross.Dockerfile diff --git a/software/dmm/docker/Dockerfile_DEBIAN b/software/dmm/docker/debian.Dockerfile similarity index 100% rename from software/dmm/docker/Dockerfile_DEBIAN rename to software/dmm/docker/debian.Dockerfile diff --git a/software/dmm/manifest.json b/software/dmm/manifest.json deleted file mode 100644 index d4bcd82..0000000 --- a/software/dmm/manifest.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "name": "LVGL on Linux", - "maintainer": "LVGL", - "hostOperatingsystem": [ - "Linux" - ], - "environment": [ - "CMake", - "SDL", - "DRM", - "Linux" - ], - "description": "Example project to use LVGL on top of Linux graphics stack. Currently supported backends are either legacy framebuffer (fbdev), modern DRM/KMS, or SDL2.", - "shortDescription": "CMake project for Linux devices supporting various display drivers.", - "urlToClone": "https://github.com/lvgl/lv_port_linux", - "logos": [ - "https://raw.githubusercontent.com/lvgl/project-creator/master/meta/images/linux/logo.svg" - ], - "image": "https://raw.githubusercontent.com/lvgl/project-creator/master/meta/images/linux/logo.svg", - "branches": [ - "release/v9.2" - ], - "settings": [ - { - "type": "dropdown", - "label": "Color Depth", - "options": [ - { - "name": "16 (RGB565)", - "value": "16" - }, - { - "name": "24 (RGB565)", - "value": "24" - }, - { - "name": "32 (RGB565)", - "value": "32" - } - ], - "actions": [ - { - "toReplace": "LV_COLOR_DEPTH \\d+", - "newContent": "LV_COLOR_DEPTH {value}", - "filePath": "lv_conf.defaults" - } - ] - }, - { - "type": "dropdown", - "label": "Show performance monitor", - "options": [ - { - "name": "Yes", - "value": "1", - "default": "true" - }, - { - "name": "No", - "value": "0" - } - ], - "actions": [ - { - "toReplace": "LV_USE_PERF_MONITOR .*", - "newContent": "LV_USE_PERF_MONITOR {value}", - "filePath": "lv_conf.defaults" - } - ] - }, - { - "type": "dropdown", - "label": "Select display driver", - "options": [ - { - "name": "Linux frame buffer device", - "value": "0", - "default": "true" - }, - { - "name": "DRM", - "value": "1" - }, - { - "name": "SDL", - "value": "2" - }, - { - "name": "Wayland", - "value": "3" - } - ], - "actions": [ - { - "ifValue": "0", - "toReplace": "LV_USE_LINUX_FBDEV +\\d+", - "newContent": "LV_USE_LINUX_FBDEV 1", - "filePath": "lv_conf.defaults" - }, - { - "ifValue": "1", - "toReplace": "LV_USE_LINUX_DRM +\\d+", - "newContent": "LV_USE_LINUX_DRM 1", - "filePath": "lv_conf.defaults" - }, - { - "ifValue": "2", - "toReplace": "LV_USE_SDL +\\d+", - "newContent": "LV_USE_SDL 1", - "filePath": "lv_conf.defaults" - }, - { - "ifValue": "3", - "toReplace": "LV_USE_WAYLAND +\\d+", - "newContent": "LV_USE_WAYLAND 1", - "filePath": "lv_conf.defaults" - } - ] - } - ] -} diff --git a/software/dmm/src/lib/mouse_cursor_icon.c b/software/dmm/src/lib/mouse_cursor_icon.c index 7588a3b..fa6bacf 100644 --- a/software/dmm/src/lib/mouse_cursor_icon.c +++ b/software/dmm/src/lib/mouse_cursor_icon.c @@ -13,34 +13,73 @@ #include "lvgl/lvgl.h" const uint8_t mouse_cursor_icon_map[] = { - 0x19, 0x19, 0x19, 0xb8, 0x1e, 0x1e, 0x1e, 0xc8, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x48, 0x48, 0xcc, 0xb2, 0xb2, 0xb2, 0xff, 0x3a, 0x3a, 0x3a, 0xcc, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3b, 0x3b, 0x3b, 0xc8, 0xf6, 0xf6, 0xf6, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0x43, 0x43, 0x43, 0xe0, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3b, 0x3b, 0x3b, 0xcb, 0xe6, 0xe6, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe5, 0xe5, 0xe5, 0xff, 0x59, 0x59, 0x59, 0xf3, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3c, 0x3c, 0x3c, 0xcb, 0xe9, 0xe9, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xf5, 0xf5, 0xff, 0x72, 0x72, 0x72, 0xff, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3d, 0x3d, 0x3d, 0xcb, 0xe9, 0xe9, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8a, 0x8a, 0x8a, 0xff, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x99, 0x99, 0x00, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3e, 0x3e, 0x3e, 0xcb, 0xe9, 0xe9, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa2, 0xa2, 0xa2, 0xff, 0x13, 0x13, 0x13, 0xab, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3f, 0x3f, 0x3f, 0xcb, 0xe9, 0xe9, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xb7, 0xb7, 0xff, 0x1f, 0x1f, 0x1f, 0xbb, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x41, 0x41, 0x41, 0xcc, 0xea, 0xea, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xca, 0xca, 0xca, 0xff, 0x3d, 0x3d, 0x3d, 0xd8, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x41, 0x41, 0x41, 0xcc, 0xea, 0xea, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xde, 0xde, 0xde, 0xff, 0x56, 0x56, 0x56, 0xef, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, - 0x42, 0x42, 0x42, 0xcc, 0xea, 0xea, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf3, 0xf3, 0xff, 0x76, 0x76, 0x76, 0xff, 0x00, 0x00, 0x00, 0x6b, - 0x43, 0x43, 0x43, 0xcc, 0xea, 0xea, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xce, 0xce, 0xce, 0xff, 0x80, 0x80, 0x80, 0xf7, 0x74, 0x74, 0x74, 0xf8, 0x6d, 0x6d, 0x6d, 0xfb, 0x72, 0x72, 0x72, 0xf8, 0x57, 0x57, 0x57, 0xff, 0x0c, 0x0c, 0x0c, 0xb3, - 0x44, 0x44, 0x44, 0xcc, 0xeb, 0xeb, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfb, 0xfb, 0xfb, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0x13, 0x13, 0x13, 0xb7, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0c, 0x29, 0x29, 0x29, 0x07, - 0x45, 0x45, 0x45, 0xcc, 0xe8, 0xe8, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0x5e, 0x5e, 0x5e, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x62, 0x62, 0x62, 0xf0, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x45, 0x45, 0x45, 0xcc, 0xf9, 0xf9, 0xf9, 0xff, 0xec, 0xec, 0xec, 0xff, 0x4a, 0x4a, 0x4a, 0xd8, 0x00, 0x00, 0x00, 0x78, 0x8a, 0x8a, 0x8a, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xc3, 0xc3, 0xff, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x58, 0x58, 0x58, 0xd3, 0xd9, 0xd9, 0xd9, 0xff, 0x5e, 0x5e, 0x5e, 0xef, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x3b, 0x3b, 0xc7, 0xe9, 0xe9, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xf4, 0xf4, 0xff, 0x54, 0x54, 0x54, 0xdc, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x3e, 0x3e, 0x3e, 0xe0, 0x54, 0x54, 0x54, 0xff, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x8e, 0x8e, 0x8e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0xb0, 0xb0, 0xff, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x4c, 0x4c, 0x4c, 0xd0, 0xec, 0xec, 0xec, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf4, 0xf4, 0xf4, 0xff, 0x53, 0x53, 0x53, 0xd8, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x1e, 0x1e, 0x00, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xab, 0xab, 0xab, 0xff, 0xf6, 0xf6, 0xf6, 0xff, 0x80, 0x80, 0x80, 0xff, 0x31, 0x31, 0x31, 0xac, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x09, 0x09, 0x03, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x2e, 0x2e, 0x2e, 0xd7, 0x38, 0x38, 0x38, 0xc7, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x19, 0x19, 0x19, 0xb8, 0x1e, 0x1e, 0x1e, 0xc8, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, + 0x48, 0x48, 0xcc, 0xb2, 0xb2, 0xb2, 0xff, 0x3a, 0x3a, 0x3a, 0xcc, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x3b, + 0x3b, 0xc8, 0xf6, 0xf6, 0xf6, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0x43, 0x43, 0x43, 0xe0, 0x00, 0x00, 0x00, 0x3b, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x3b, 0x3b, + 0xcb, 0xe6, 0xe6, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe5, 0xe5, 0xe5, 0xff, 0x59, 0x59, 0x59, 0xf3, 0x00, 0x00, + 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x3c, 0xcb, + 0xe9, 0xe9, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xf5, 0xf5, 0xff, 0x72, 0x72, 0x72, + 0xff, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x3d, 0x3d, 0xcb, 0xe9, + 0xe9, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x8a, 0x8a, 0x8a, 0xff, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x99, 0x99, + 0x00, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x3e, 0xcb, 0xe9, 0xe9, + 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xa2, 0xa2, 0xa2, 0xff, 0x13, 0x13, 0x13, 0xab, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0xcb, 0xe9, 0xe9, 0xe9, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xb7, 0xb7, 0xff, 0x1f, 0x1f, 0x1f, 0xbb, 0x00, 0x00, 0x00, 0x17, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x41, 0x41, 0xcc, 0xea, 0xea, 0xea, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xca, 0xca, 0xca, 0xff, 0x3d, 0x3d, 0x3d, 0xd8, 0x00, 0x00, + 0x00, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x41, 0x41, 0xcc, 0xea, 0xea, 0xea, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xde, 0xde, 0xde, 0xff, 0x56, 0x56, 0x56, + 0xef, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0xcc, 0xea, 0xea, 0xea, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf3, 0xf3, 0xff, + 0x76, 0x76, 0x76, 0xff, 0x00, 0x00, 0x00, 0x6b, 0x43, 0x43, 0x43, 0xcc, 0xea, 0xea, 0xea, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xce, 0xce, + 0xce, 0xff, 0x80, 0x80, 0x80, 0xf7, 0x74, 0x74, 0x74, 0xf8, 0x6d, 0x6d, 0x6d, 0xfb, 0x72, 0x72, 0x72, 0xf8, 0x57, + 0x57, 0x57, 0xff, 0x0c, 0x0c, 0x0c, 0xb3, 0x44, 0x44, 0x44, 0xcc, 0xeb, 0xeb, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfc, 0xfb, 0xfb, 0xfb, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc9, 0xc9, 0xc9, + 0xff, 0x13, 0x13, 0x13, 0xb7, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, + 0x00, 0x0c, 0x29, 0x29, 0x29, 0x07, 0x45, 0x45, 0x45, 0xcc, 0xe8, 0xe8, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd9, + 0xd9, 0xd9, 0xff, 0x5e, 0x5e, 0x5e, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x62, 0x62, 0x62, 0xf0, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x45, 0x45, 0xcc, 0xf9, 0xf9, 0xf9, 0xff, 0xec, 0xec, 0xec, 0xff, 0x4a, 0x4a, + 0x4a, 0xd8, 0x00, 0x00, 0x00, 0x78, 0x8a, 0x8a, 0x8a, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, + 0xc3, 0xc3, 0xff, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x58, 0x58, 0x58, 0xd3, 0xd9, 0xd9, 0xd9, 0xff, 0x5e, 0x5e, 0x5e, 0xef, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x3b, 0x3b, 0xc7, 0xe9, 0xe9, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xf4, + 0xf4, 0xff, 0x54, 0x54, 0x54, 0xdc, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x3e, 0xe0, 0x54, 0x54, 0x54, 0xff, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x8e, 0x8e, 0x8e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xb0, 0xb0, 0xb0, 0xff, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x4c, 0x4c, 0x4c, 0xd0, 0xec, 0xec, 0xec, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0xf4, 0xf4, 0xf4, 0xff, 0x53, 0x53, 0x53, 0xd8, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x1e, 0x1e, 0x00, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xab, 0xab, 0xab, 0xff, 0xf6, 0xf6, 0xf6, 0xff, 0x80, + 0x80, 0x80, 0xff, 0x31, 0x31, 0x31, 0xac, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x09, 0x09, 0x03, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x2e, 0x2e, 0x2e, 0xd7, 0x38, 0x38, 0x38, 0xc7, 0x00, 0x00, + 0x00, 0x47, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; lv_image_dsc_t mouse_cursor_icon = { - .header.magic = LV_IMAGE_HEADER_MAGIC, - .header.w = 14, - .header.h = 20, + .header.magic = LV_IMAGE_HEADER_MAGIC, + .header.w = 14, + .header.h = 20, .header.stride = 56, - .data_size = 280 * 4, - .header.cf = LV_COLOR_FORMAT_ARGB8888, - .data = mouse_cursor_icon_map, + .data_size = 280 * 4, + .header.cf = LV_COLOR_FORMAT_ARGB8888, + .data = mouse_cursor_icon_map, };