diff --git a/Source/Horizon-OC-Monitor/Horizon-OC-Monitor.lst b/Source/Horizon-OC-Monitor/Horizon-OC-Monitor.lst new file mode 100644 index 00000000..1a834f7f --- /dev/null +++ b/Source/Horizon-OC-Monitor/Horizon-OC-Monitor.lst @@ -0,0 +1,2 @@ +-CSn +/home/sould/Documents/GitHub/Horizon-OC/Source/Horizon-OC-Monitor/Horizon-OC-Monitor.elf diff --git a/Source/Horizon-OC-Monitor/Makefile b/Source/Horizon-OC-Monitor/Makefile index 5e774165..cec7db78 100644 --- a/Source/Horizon-OC-Monitor/Makefile +++ b/Source/Horizon-OC-Monitor/Makefile @@ -38,11 +38,11 @@ include $(DEVKITPRO)/libnx/switch_rules # NACP building is skipped as well. #--------------------------------------------------------------------------------- APP_TITLE := Horizon OC Monitor -APP_VERSION := 1.3.2+r4-hoc-r2 +APP_VERSION := 1.3.2+r4-hoc-r3 TARGET := $(notdir $(CURDIR)) BUILD := build SOURCES := source -INCLUDES := include lib/Atmosphere-libs/libstratosphere/source/dmnt lib/Atmosphere-libs/libstratosphere/source ../sys-clk/common/include/ +INCLUDES := include lib/Atmosphere-libs/libstratosphere/source/dmnt lib/Atmosphere-libs/libstratosphere/source ../hoc-clk/common/include/ NO_ICON := 1 #ROMFS := romfs diff --git a/Source/rewrite-hoc-clk/.gitignore b/Source/hoc-clk/.gitignore similarity index 100% rename from Source/rewrite-hoc-clk/.gitignore rename to Source/hoc-clk/.gitignore diff --git a/Source/rewrite-hoc-clk/.gitlab-ci.yml b/Source/hoc-clk/.gitlab-ci.yml similarity index 100% rename from Source/rewrite-hoc-clk/.gitlab-ci.yml rename to Source/hoc-clk/.gitlab-ci.yml diff --git a/Source/rewrite-hoc-clk/.gitmodules b/Source/hoc-clk/.gitmodules similarity index 100% rename from Source/rewrite-hoc-clk/.gitmodules rename to Source/hoc-clk/.gitmodules diff --git a/Source/rewrite-hoc-clk/LICENSE b/Source/hoc-clk/LICENSE similarity index 100% rename from Source/rewrite-hoc-clk/LICENSE rename to Source/hoc-clk/LICENSE diff --git a/Source/rewrite-hoc-clk/README.md b/Source/hoc-clk/README.md similarity index 100% rename from Source/rewrite-hoc-clk/README.md rename to Source/hoc-clk/README.md diff --git a/Source/rewrite-hoc-clk/bitmap.py b/Source/hoc-clk/bitmap.py similarity index 100% rename from Source/rewrite-hoc-clk/bitmap.py rename to Source/hoc-clk/bitmap.py diff --git a/Source/rewrite-hoc-clk/build.sh b/Source/hoc-clk/build.sh similarity index 56% rename from Source/rewrite-hoc-clk/build.sh rename to Source/hoc-clk/build.sh index be77b3e4..8ad2c457 100644 --- a/Source/rewrite-hoc-clk/build.sh +++ b/Source/hoc-clk/build.sh @@ -24,19 +24,18 @@ cp -vf "$ROOT_DIR/sysmodule/out/horizon-oc.nsp" "$DIST_DIR/atmosphere/contents/$ >"$DIST_DIR/atmosphere/contents/$TITLE_ID/flags/boot2.flag" cp -vf "$ROOT_DIR/sysmodule/toolbox.json" "$DIST_DIR/atmosphere/contents/$TITLE_ID/toolbox.json" -# echo "*** overlay ***" -# pushd "$ROOT_DIR/overlay" -# make -j$CORES -# popd > /dev/null +echo "*** overlay ***" +pushd "$ROOT_DIR/overlay" +make -j$CORES +popd > /dev/null -# mkdir -p "$DIST_DIR/switch/.overlays" -# cp -vf "$ROOT_DIR/overlay/out/horizon-oc-overlay.ovl" "$DIST_DIR/switch/.overlays/horizon-oc-overlay.ovl" +mkdir -p "$DIST_DIR/switch/.overlays" +cp -vf "$ROOT_DIR/overlay/out/horizon-oc-overlay.ovl" "$DIST_DIR/switch/.overlays/horizon-oc-overlay.ovl" -# echo "*** assets ***" -# mkdir -p "$DIST_DIR/config/horizon-oc" -# cp -vf "$ROOT_DIR/config.ini.template" "$DIST_DIR/config/horizon-oc/config.ini.template" -# cp -vf "$ROOT_DIR/../../README.md" "$DIST_DIR/README.md" +echo "*** assets ***" +mkdir -p "$DIST_DIR/config/horizon-oc" +cp -vf "$ROOT_DIR/config.ini.template" "$DIST_DIR/config/horizon-oc/config.ini.template" +cp -vf "$ROOT_DIR/../../README.md" "$DIST_DIR/README.md" -# echo "*** lang ***" - -# cp -r "$ROOT_DIR/overlay/lang/" "$DIST_DIR/config/horizon-oc/lang/" +echo "*** lang ***" +cp -r "$ROOT_DIR/overlay/lang/" "$DIST_DIR/config/horizon-oc/lang/" diff --git a/Source/rewrite-hoc-clk/common/include/SaltyNX.h b/Source/hoc-clk/common/include/SaltyNX.h similarity index 100% rename from Source/rewrite-hoc-clk/common/include/SaltyNX.h rename to Source/hoc-clk/common/include/SaltyNX.h diff --git a/Source/rewrite-hoc-clk/common/include/battery.h b/Source/hoc-clk/common/include/battery.h similarity index 100% rename from Source/rewrite-hoc-clk/common/include/battery.h rename to Source/hoc-clk/common/include/battery.h diff --git a/Source/rewrite-hoc-clk/common/include/cpp_util.hpp b/Source/hoc-clk/common/include/cpp_util.hpp similarity index 100% rename from Source/rewrite-hoc-clk/common/include/cpp_util.hpp rename to Source/hoc-clk/common/include/cpp_util.hpp diff --git a/Source/rewrite-hoc-clk/common/include/crc32.h b/Source/hoc-clk/common/include/crc32.h similarity index 100% rename from Source/rewrite-hoc-clk/common/include/crc32.h rename to Source/hoc-clk/common/include/crc32.h diff --git a/Source/rewrite-hoc-clk/common/include/fuse.h b/Source/hoc-clk/common/include/fuse.h similarity index 100% rename from Source/rewrite-hoc-clk/common/include/fuse.h rename to Source/hoc-clk/common/include/fuse.h diff --git a/Source/rewrite-hoc-clk/common/include/i2c.h b/Source/hoc-clk/common/include/i2c.h similarity index 100% rename from Source/rewrite-hoc-clk/common/include/i2c.h rename to Source/hoc-clk/common/include/i2c.h diff --git a/Source/rewrite-hoc-clk/common/include/ipc.h b/Source/hoc-clk/common/include/ipc.h similarity index 100% rename from Source/rewrite-hoc-clk/common/include/ipc.h rename to Source/hoc-clk/common/include/ipc.h diff --git a/Source/rewrite-hoc-clk/common/include/memmem.h b/Source/hoc-clk/common/include/memmem.h similarity index 100% rename from Source/rewrite-hoc-clk/common/include/memmem.h rename to Source/hoc-clk/common/include/memmem.h diff --git a/Source/rewrite-hoc-clk/common/include/notification.h b/Source/hoc-clk/common/include/notification.h similarity index 100% rename from Source/rewrite-hoc-clk/common/include/notification.h rename to Source/hoc-clk/common/include/notification.h diff --git a/Source/rewrite-hoc-clk/common/include/pcv_types.h b/Source/hoc-clk/common/include/pcv_types.h similarity index 100% rename from Source/rewrite-hoc-clk/common/include/pcv_types.h rename to Source/hoc-clk/common/include/pcv_types.h diff --git a/Source/rewrite-hoc-clk/common/include/pwm.h b/Source/hoc-clk/common/include/pwm.h similarity index 100% rename from Source/rewrite-hoc-clk/common/include/pwm.h rename to Source/hoc-clk/common/include/pwm.h diff --git a/Source/rewrite-hoc-clk/common/include/registers.h b/Source/hoc-clk/common/include/registers.h similarity index 100% rename from Source/rewrite-hoc-clk/common/include/registers.h rename to Source/hoc-clk/common/include/registers.h diff --git a/Source/rewrite-hoc-clk/common/include/rgltr.h b/Source/hoc-clk/common/include/rgltr.h similarity index 100% rename from Source/rewrite-hoc-clk/common/include/rgltr.h rename to Source/hoc-clk/common/include/rgltr.h diff --git a/Source/rewrite-hoc-clk/common/include/rgltr_services.h b/Source/hoc-clk/common/include/rgltr_services.h similarity index 100% rename from Source/rewrite-hoc-clk/common/include/rgltr_services.h rename to Source/hoc-clk/common/include/rgltr_services.h diff --git a/Source/rewrite-hoc-clk/common/include/service_guard.h b/Source/hoc-clk/common/include/service_guard.h similarity index 100% rename from Source/rewrite-hoc-clk/common/include/service_guard.h rename to Source/hoc-clk/common/include/service_guard.h diff --git a/Source/rewrite-hoc-clk/common/include/sysclk.h b/Source/hoc-clk/common/include/sysclk.h similarity index 100% rename from Source/rewrite-hoc-clk/common/include/sysclk.h rename to Source/hoc-clk/common/include/sysclk.h diff --git a/Source/rewrite-hoc-clk/common/include/sysclk/apm.h b/Source/hoc-clk/common/include/sysclk/apm.h similarity index 100% rename from Source/rewrite-hoc-clk/common/include/sysclk/apm.h rename to Source/hoc-clk/common/include/sysclk/apm.h diff --git a/Source/rewrite-hoc-clk/common/include/sysclk/board.h b/Source/hoc-clk/common/include/sysclk/board.h similarity index 100% rename from Source/rewrite-hoc-clk/common/include/sysclk/board.h rename to Source/hoc-clk/common/include/sysclk/board.h diff --git a/Source/rewrite-hoc-clk/common/include/sysclk/client/ipc.h b/Source/hoc-clk/common/include/sysclk/client/ipc.h similarity index 100% rename from Source/rewrite-hoc-clk/common/include/sysclk/client/ipc.h rename to Source/hoc-clk/common/include/sysclk/client/ipc.h diff --git a/Source/rewrite-hoc-clk/common/include/sysclk/client/types.h b/Source/hoc-clk/common/include/sysclk/client/types.h similarity index 100% rename from Source/rewrite-hoc-clk/common/include/sysclk/client/types.h rename to Source/hoc-clk/common/include/sysclk/client/types.h diff --git a/Source/rewrite-hoc-clk/common/include/sysclk/clock_manager.h b/Source/hoc-clk/common/include/sysclk/clock_manager.h similarity index 100% rename from Source/rewrite-hoc-clk/common/include/sysclk/clock_manager.h rename to Source/hoc-clk/common/include/sysclk/clock_manager.h diff --git a/Source/rewrite-hoc-clk/common/include/sysclk/config.h b/Source/hoc-clk/common/include/sysclk/config.h similarity index 100% rename from Source/rewrite-hoc-clk/common/include/sysclk/config.h rename to Source/hoc-clk/common/include/sysclk/config.h diff --git a/Source/rewrite-hoc-clk/common/include/sysclk/errors.h b/Source/hoc-clk/common/include/sysclk/errors.h similarity index 100% rename from Source/rewrite-hoc-clk/common/include/sysclk/errors.h rename to Source/hoc-clk/common/include/sysclk/errors.h diff --git a/Source/rewrite-hoc-clk/common/include/sysclk/ipc.h b/Source/hoc-clk/common/include/sysclk/ipc.h similarity index 100% rename from Source/rewrite-hoc-clk/common/include/sysclk/ipc.h rename to Source/hoc-clk/common/include/sysclk/ipc.h diff --git a/Source/rewrite-hoc-clk/common/include/sysclk/psm_ext.h b/Source/hoc-clk/common/include/sysclk/psm_ext.h similarity index 100% rename from Source/rewrite-hoc-clk/common/include/sysclk/psm_ext.h rename to Source/hoc-clk/common/include/sysclk/psm_ext.h diff --git a/Source/rewrite-hoc-clk/common/src/apm_profile_table.c b/Source/hoc-clk/common/src/apm_profile_table.c similarity index 100% rename from Source/rewrite-hoc-clk/common/src/apm_profile_table.c rename to Source/hoc-clk/common/src/apm_profile_table.c diff --git a/Source/rewrite-hoc-clk/common/src/battery.cpp b/Source/hoc-clk/common/src/battery.cpp similarity index 100% rename from Source/rewrite-hoc-clk/common/src/battery.cpp rename to Source/hoc-clk/common/src/battery.cpp diff --git a/Source/rewrite-hoc-clk/common/src/client/ipc.c b/Source/hoc-clk/common/src/client/ipc.c similarity index 100% rename from Source/rewrite-hoc-clk/common/src/client/ipc.c rename to Source/hoc-clk/common/src/client/ipc.c diff --git a/Source/rewrite-hoc-clk/common/src/crc32.cpp b/Source/hoc-clk/common/src/crc32.cpp similarity index 100% rename from Source/rewrite-hoc-clk/common/src/crc32.cpp rename to Source/hoc-clk/common/src/crc32.cpp diff --git a/Source/rewrite-hoc-clk/common/src/i2c.cpp b/Source/hoc-clk/common/src/i2c.cpp similarity index 100% rename from Source/rewrite-hoc-clk/common/src/i2c.cpp rename to Source/hoc-clk/common/src/i2c.cpp diff --git a/Source/rewrite-hoc-clk/common/src/memmem.c b/Source/hoc-clk/common/src/memmem.c similarity index 100% rename from Source/rewrite-hoc-clk/common/src/memmem.c rename to Source/hoc-clk/common/src/memmem.c diff --git a/Source/rewrite-hoc-clk/common/src/notification.cpp b/Source/hoc-clk/common/src/notification.cpp similarity index 100% rename from Source/rewrite-hoc-clk/common/src/notification.cpp rename to Source/hoc-clk/common/src/notification.cpp diff --git a/Source/rewrite-hoc-clk/common/src/psm_ext.c b/Source/hoc-clk/common/src/psm_ext.c similarity index 100% rename from Source/rewrite-hoc-clk/common/src/psm_ext.c rename to Source/hoc-clk/common/src/psm_ext.c diff --git a/Source/rewrite-hoc-clk/common/src/pwm.c b/Source/hoc-clk/common/src/pwm.c similarity index 100% rename from Source/rewrite-hoc-clk/common/src/pwm.c rename to Source/hoc-clk/common/src/pwm.c diff --git a/Source/rewrite-hoc-clk/common/src/rgltr_services.cpp b/Source/hoc-clk/common/src/rgltr_services.cpp similarity index 100% rename from Source/rewrite-hoc-clk/common/src/rgltr_services.cpp rename to Source/hoc-clk/common/src/rgltr_services.cpp diff --git a/Source/rewrite-hoc-clk/config.ini.template b/Source/hoc-clk/config.ini.template similarity index 100% rename from Source/rewrite-hoc-clk/config.ini.template rename to Source/hoc-clk/config.ini.template diff --git a/Source/rewrite-hoc-clk/sysmodule/.gitignore b/Source/hoc-clk/overlay/.gitignore similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/.gitignore rename to Source/hoc-clk/overlay/.gitignore diff --git a/Source/hoc-clk/overlay/Makefile b/Source/hoc-clk/overlay/Makefile new file mode 100644 index 00000000..1f8312f8 --- /dev/null +++ b/Source/hoc-clk/overlay/Makefile @@ -0,0 +1,173 @@ +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- + +ifeq ($(strip $(DEVKITPRO)),) +$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=/devkitpro") +endif + +TOPDIR ?= $(CURDIR) +include $(DEVKITPRO)/libnx/switch_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# DATA is a list of directories containing data files +# INCLUDES is a list of directories containing header files +# EXEFS_SRC is the optional input directory containing data copied into exefs, if anything this normally should only contain "main.npdm". +#--------------------------------------------------------------------------------- +TARGET := horizon-oc-overlay +BUILD := build +OUTDIR := out +RESOURCES := res +SOURCES := src src/ui/gui src/ui/elements ../common/src ../common/src/client +DATA := data +INCLUDES := ../common/include +EXEFS_SRC := exefs_src +IS_MINIMAL := 0 + +APP_TITLE := Horizon OC Zeus +NO_ICON := 1 + + +# This location should reflect where you place the libultrahand directory (lib can vary between projects). +include ${TOPDIR}/lib/libultrahand/ultrahand.mk + + +#--------------------------------------------------------------------------------- +# version control constants +#--------------------------------------------------------------------------------- +#TARGET_VERSION := $(shell git describe --dirty --always --tags) +APP_VERSION := 1.1.0 +TARGET_VERSION := $(APP_VERSION) + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- +DEFINES := -DDISABLE_IPC -DTARGET="\"$(TARGET)\"" -DTARGET_VERSION="\"$(TARGET_VERSION)\"" -DIS_MINIMAL=$(IS_MINIMAL) + +ARCH := -march=armv8-a+crc+crypto -mtune=cortex-a57 -mtp=soft -fPIE + +CFLAGS := -O2 -Wall -flto -fdata-sections -ffunction-sections -fno-rtti -fno-common \ + $(ARCH) $(DEFINES) + +CFLAGS += $(INCLUDE) -D__SWITCH__ + +# Enable appearance overriding +export MSYS2_ARG_CONV_EXCL := -DUI_OVERRIDE_PATH +UI_OVERRIDE_PATH := /config/horizon-oc/ +CFLAGS += -DUI_OVERRIDE_PATH="\"$(UI_OVERRIDE_PATH)\"" + +# Disable fstream +#NO_FSTREAM_DIRECTIVE := 1 +#CFLAGS += -DNO_FSTREAM_DIRECTIVE=$(NO_FSTREAM_DIRECTIVE) + + +CXXFLAGS := $(CFLAGS) -fno-exceptions -std=gnu++20 + +ASFLAGS := -g $(ARCH) +LDFLAGS = -specs=$(DEVKITPRO)/libnx/switch.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map) + +LIBS := -lcurl -lz -lzzip -lmbedtls -lmbedx509 -lmbedcrypto -ljansson -lnx + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := $(PORTLIBS) $(LIBNX) + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(OUTDIR)/$(TARGET) +export TOPDIR := $(CURDIR) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) +#--------------------------------------------------------------------------------- + export LD := $(CC) +#--------------------------------------------------------------------------------- +else +#--------------------------------------------------------------------------------- + export LD := $(CXX) +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- + +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) + +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) + +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) + +export BUILD_EXEFS_SRC := $(TOPDIR)/$(EXEFS_SRC) + +.PHONY: $(BUILD) clean all + +#--------------------------------------------------------------------------------- +all: $(BUILD) + +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @[ -d $(OUTDIR) ] || mkdir -p $(OUTDIR) + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(TARGET).ovl $(TARGET).nacp $(TARGET).nso $(TARGET).elf $(OUTDIR) + + +#--------------------------------------------------------------------------------- +else +.PHONY: all + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- + +all: $(OUTPUT).ovl + +$(OUTPUT).ovl: $(OUTPUT).elf $(OUTPUT).nacp + @elf2nro $< $@ --nacp=$(OUTPUT).nacp + @echo "built ... $(notdir $(OUTPUT).ovl)" + @printf 'ULTR' >> $@ + @printf "Ultrahand signature has been added.\n" + +$(OUTPUT).elf: $(OFILES) + +#--------------------------------------------------------------------------------- +# you need a rule like this for each extension you use as binary data +#--------------------------------------------------------------------------------- +%.bin.o : %.bin +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + @$(bin2o) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------------- diff --git a/Source/hoc-clk/overlay/data/logo_rgba.bin b/Source/hoc-clk/overlay/data/logo_rgba.bin new file mode 100644 index 00000000..d5b9ced7 Binary files /dev/null and b/Source/hoc-clk/overlay/data/logo_rgba.bin differ diff --git a/Source/hoc-clk/overlay/lang/de.json b/Source/hoc-clk/overlay/lang/de.json new file mode 100644 index 00000000..d2eedf0b --- /dev/null +++ b/Source/hoc-clk/overlay/lang/de.json @@ -0,0 +1,141 @@ +{ + "Information": "Informationen", + "IDDQ:": "IDDQ:", + "Module: ": "Modul:", + "sys-dock status:": "Sys-Dock-Status:", + "SaltyNX status:": "SaltyNX-Status:", + "RR Display status:": "RR Anzeigestatus:", + "Wafer Position:": "Waferposition:", + "Credits": "Credits", + "Developers": "Entwickler", + "Contributors": "Mitwirkende", + "Testers": "Tester", + "Special Thanks": "Besonderer Dank", + "Unknown": "Unbekannt", + "Installed": "Installiert", + "Not Installed": "Nicht installiert", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "DIE BIERWAREN-LIZENZ", + "Default": "Standard", + "Do Not Override": "Nicht überschreiben", + "Disabled": "Deaktiviert", + "Enabled": "Aktiviert", + " \\ue0e3 Reset": "\\ue0e3 Zurücksetzen", + "Display": "Anzeige", + "Application changed\\n\\n": "Anwendung geändert\\n\\n", + "The running application changed\\n\\n": "Die laufende Anwendung hat sich geändert\\n\\n", + "while editing was going on.": "während die Bearbeitung im Gange war.", + "Board": "Vorstand", + "%u.%u%u mV": "%u.%u%u mV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "Es konnte keine Verbindung zum hoc-clk-Systemmodul hergestellt werden.\\n\\n", + "Please make sure everything is\\n\\n": "Bitte stellen Sie sicher, dass alles in Ordnung ist\\n\\n", + "correctly installed and enabled.": "korrekt installiert und aktiviert.", + "Fatal error": "Fataler Fehler", + "Temporary Overrides ": "Temporäre Überschreibungen", + "Sleep Mode": "Schlafmodus", + "Stock": "Lager", + "Dev OC": "Entwickler OC", + "Boost Mode": "Boost-Modus", + "Safe Max": "Sicher max", + "Unsafe Max": "Unsicher max", + "Absolute Max": "Absolutes Maximum", + "Handheld Safe Max": "Handsafe max", + "Enable": "Aktivieren", + "Edit App Profile": "App-Profil bearbeiten", + "Edit Global Profile": "Globales Profil bearbeiten", + "Temporary Overrides": "Temporäre Überschreibungen", + "Settings": "Einstellungen", + "About": "Über", + "Compiling with minimal features": "Kompilieren mit minimalen Funktionen", + "General Settings": "Allgemeine Einstellungen", + "Governor Settings": "Gouverneurseinstellungen", + "Safety Settings": "Sicherheitseinstellungen", + "Save KIP Settings": "Speichern Sie die KIP-Einstellungen", + "RAM Settings": "RAM-Einstellungen", + "CPU Settings": "CPU-Einstellungen", + "GPU Settings": "GPU-Einstellungen", + "Display Settings": "Anzeigeeinstellungen", + "Experimental": "Experimentell", + "GPU Scheduling Override Method": "GPU-Planungsüberschreibungsmethode", + "can be dangerous and may cause": "kann gefährlich sein und verursachen", + "damage to your battery or charger!": "Schäden an Ihrem Akku oder Ladegerät!", + "Charge Current Override": "Ladestrom-Überbrückung", + "RAM Voltage Display Mode": "RAM-Spannungsanzeigemodus", + "Polling Interval": "Abfrageintervall", + "CPU Governor Minimum Frequency": "Mindestfrequenz des CPU-Reglers", + "refresh rates may cause stress": "Bildwiederholraten können Stress verursachen", + "or damage to your display! ": "oder Schäden an Ihrem Display!", + "Proceed at your own risk!": "Das Vorgehen erfolgt auf eigene Gefahr!", + "Max Handheld Display": "Max Handheld-Display", + "Display Clock": "Uhr anzeigen", + "Official Rating": "Offizielle Bewertung", + "TDP Threshold": "TDP-Schwellenwert", + "Power": "Macht", + "Thermal Throttle Limit": "Thermische Drosselgrenze", + "HP Mode": "HP-Modus", + "Default (Mariko)": "Standard (Mariko)", + "Default (Erista)": "Standard (Erista)", + "Rating": "Bewertung", + "Safe Max (Mariko)": "Safe Max (Mariko)", + "Safe Max (Erista)": "Safe Max (Erista)", + "RAM VDD2 Voltage": "RAM VDD2 Spannung", + "Voltage": "Spannung", + "RAM VDDQ Voltage": "RAM-VDDQ-Spannung", + "RAM Frequency Editor": "RAM-Frequenzeditor", + "JEDEC.": "JEDEC.", + "High speedo needed!": "Hoher Tacho erforderlich!", + "3333MHz (Needs extreme Speedo/PLL)": "3333 MHz (Benötigt extremen Tacho/PLL)", + "3366MHz (Needs extreme Speedo/PLL)": "3366 MHz (Benötigt extremen Tacho/PLL)", + "3400MHz (Needs extreme Speedo/PLL)": "3400 MHz (Benötigt extremen Tacho/PLL)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433 MHz (Benötigt lächerlichen Tacho/PLL)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466 MHz (Benötigt lächerlichen Tacho/PLL)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500 MHz (Benötigt lächerlichen Tacho/PLL)", + "Ram Max Clock": "Ram Max Uhr", + "RAM Latency Editor": "RAM-Latenz-Editor", + "RAM Timing Reductions": "Reduzierung des RAM-Timings", + "Memory Timings": "Speicherzeiten", + "Advanced": "Fortgeschritten", + "t6 tRTW Fine Tune": "t6 tRTW Feinabstimmung", + "tRTW Fine Tune": "tRTW-Feinabstimmung", + "t7 tWTR Fine Tune": "t7 tWTR Feinabstimmung", + "tWTR Fine Tune": "tWTR-Feinabstimmung", + "Memory Latencies": "Speicherlatenzen", + "Read Latency": "Leselatenz", + "Write Latency": "Schreiblatenz", + "CPU Boost Clock": "CPU-Boost-Takt", + "CPU UV": "CPU-UV", + "CPU Unlock": "CPU-Entsperrung", + "CPU VMIN": "CPU-VMIN", + "CPU Max Voltage": "Maximale CPU-Spannung", + "CPU Max Clock": "Maximaler CPU-Takt", + "Extreme UV Table": "Extremer UV-Tisch", + "CPU UV Table": "CPU-UV-Tisch", + "CPU Low UV": "CPU-niedrige UV-Strahlung", + "CPU High UV": "CPU Hohe UV-Strahlung", + "CPU Low VMIN": "CPU niedrig VMIN", + "CPU High VMIN": "CPU hoch VMIN", + "No Undervolt": "Kein Undervolt", + "SLT Table": "SLT-Tisch", + "HiOPT Table": "HiOPT-Tabelle", + "GPU Undervolt Table": "GPU-Unterspannungstabelle", + "GPU Minimum Voltage": "GPU-Mindestspannung", + "Calculate GPU Vmin": "Berechnen Sie die GPU-Vmin", + "GPU VMIN": "GPU-VMIN", + "GPU Maximum Voltage": "Maximale GPU-Spannung", + "GPU Voltage Offset": "GPU-Spannungsoffset", + "Do not override": "Nicht überschreiben", + "Enabled (Default)": "Aktiviert (Standard)", + "96.6% limit": "96,6 %-Grenze", + "99.7% limit": "99,7 %-Grenze", + "GPU Scheduling Override": "GPU-Planungsüberschreibung", + "Official Service": "Offizieller Dienst", + "GPU DVFS Mode": "GPU-DVFS-Modus", + "GPU DVFS Offset": "GPU-DVFS-Offset", + "GPU Voltage Table": "GPU-Spannungstabelle", + "GPU Custom Table (mV)": "Benutzerdefinierte GPU-Tabelle (mV)", + "1075MHz without UV, 1152MHz on SLT": "1075 MHz ohne UV, 1152 MHz auf SLT", + "or 1228MHz on HiOPT can cause ": "oder 1228 MHz auf HiOPT kann dazu führen", + "permanent damage to your Switch!": "Dauerhafter Schaden an Ihrem Switch!", + "921MHz without UV and 960MHz on": "921 MHz ohne UV und 960 MHz eingeschaltet", + "SLT or HiOPT can cause ": "SLT oder HiOPT können dazu führen" +} diff --git a/Source/hoc-clk/overlay/lang/en.json b/Source/hoc-clk/overlay/lang/en.json new file mode 100644 index 00000000..727fab93 --- /dev/null +++ b/Source/hoc-clk/overlay/lang/en.json @@ -0,0 +1,141 @@ +{ + "Information": "Information", + "IDDQ:": "IDDQ:", + "Module: ": "Module: ", + "sys-dock status:": "sys-dock status:", + "SaltyNX status:": "SaltyNX status:", + "RR Display status:": "RR Display status:", + "Wafer Position:": "Wafer Position:", + "Credits": "Credits", + "Developers": "Developers", + "Contributors": "Contributors", + "Testers": "Testers", + "Special Thanks": "Special Thanks", + "Unknown": "Unknown", + "Installed": "Installed", + "Not Installed": "Not Installed", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "THE BEER-WARE LICENSE", + "Default": "Default", + "Do Not Override": "Do Not Override", + "Disabled": "Disabled", + "Enabled": "Enabled", + " \\ue0e3 Reset": " \\ue0e3 Reset", + "Display": "Display", + "Application changed\\n\\n": "Application changed\\n\\n", + "The running application changed\\n\\n": "The running application changed\\n\\n", + "while editing was going on.": "while editing was going on.", + "Board": "Board", + "%u.%u%u mV": "%u.%u%u mV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "Could not connect to hoc-clk sysmodule.\\n\\n", + "Please make sure everything is\\n\\n": "Please make sure everything is\\n\\n", + "correctly installed and enabled.": "correctly installed and enabled.", + "Fatal error": "Fatal error", + "Temporary Overrides ": "Temporary Overrides ", + "Sleep Mode": "Sleep Mode", + "Stock": "Stock", + "Dev OC": "Dev OC", + "Boost Mode": "Boost Mode", + "Safe Max": "Safe Max", + "Unsafe Max": "Unsafe Max", + "Absolute Max": "Absolute Max", + "Handheld Safe Max": "Handheld Safe Max", + "Enable": "Enable", + "Edit App Profile": "Edit App Profile", + "Edit Global Profile": "Edit Global Profile", + "Temporary Overrides": "Temporary Overrides", + "Settings": "Settings", + "About": "About", + "Compiling with minimal features": "Compiling with minimal features", + "General Settings": "General Settings", + "Governor Settings": "Governor Settings", + "Safety Settings": "Safety Settings", + "Save KIP Settings": "Save KIP Settings", + "RAM Settings": "RAM Settings", + "CPU Settings": "CPU Settings", + "GPU Settings": "GPU Settings", + "Display Settings": "Display Settings", + "Experimental": "Experimental", + "GPU Scheduling Override Method": "GPU Scheduling Override Method", + "can be dangerous and may cause": "can be dangerous and may cause", + "damage to your battery or charger!": "damage to your battery or charger!", + "Charge Current Override": "Charge Current Override", + "RAM Voltage Display Mode": "RAM Voltage Display Mode", + "Polling Interval": "Polling Interval", + "CPU Governor Minimum Frequency": "CPU Governor Minimum Frequency", + "refresh rates may cause stress": "refresh rates may cause stress", + "or damage to your display! ": "or damage to your display! ", + "Proceed at your own risk!": "Proceed at your own risk!", + "Max Handheld Display": "Max Handheld Display", + "Display Clock": "Display Clock", + "Official Rating": "Official Rating", + "TDP Threshold": "TDP Threshold", + "Power": "Power", + "Thermal Throttle Limit": "Thermal Throttle Limit", + "HP Mode": "HP Mode", + "Default (Mariko)": "Default (Mariko)", + "Default (Erista)": "Default (Erista)", + "Rating": "Rating", + "Safe Max (Mariko)": "Safe Max (Mariko)", + "Safe Max (Erista)": "Safe Max (Erista)", + "RAM VDD2 Voltage": "RAM VDD2 Voltage", + "Voltage": "Voltage", + "RAM VDDQ Voltage": "RAM VDDQ Voltage", + "RAM Frequency Editor": "RAM Frequency Editor", + "JEDEC.": "JEDEC.", + "High speedo needed!": "High speedo needed!", + "3333MHz (Needs extreme Speedo/PLL)": "3333MHz (Needs extreme Speedo/PLL)", + "3366MHz (Needs extreme Speedo/PLL)": "3366MHz (Needs extreme Speedo/PLL)", + "3400MHz (Needs extreme Speedo/PLL)": "3400MHz (Needs extreme Speedo/PLL)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (Needs ridiculous Speedo/PLL)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz (Needs ridiculous Speedo/PLL)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500MHz (Needs ridiculous Speedo/PLL)", + "Ram Max Clock": "Ram Max Clock", + "RAM Latency Editor": "RAM Latency Editor", + "RAM Timing Reductions": "RAM Timing Reductions", + "Memory Timings": "Memory Timings", + "Advanced": "Advanced", + "t6 tRTW Fine Tune": "t6 tRTW Fine Tune", + "tRTW Fine Tune": "tRTW Fine Tune", + "t7 tWTR Fine Tune": "t7 tWTR Fine Tune", + "tWTR Fine Tune": "tWTR Fine Tune", + "Memory Latencies": "Memory Latencies", + "Read Latency": "Read Latency", + "Write Latency": "Write Latency", + "CPU Boost Clock": "CPU Boost Clock", + "CPU UV": "CPU UV", + "CPU Unlock": "CPU Unlock", + "CPU VMIN": "CPU VMIN", + "CPU Max Voltage": "CPU Max Voltage", + "CPU Max Clock": "CPU Max Clock", + "Extreme UV Table": "Extreme UV Table", + "CPU UV Table": "CPU UV Table", + "CPU Low UV": "CPU Low UV", + "CPU High UV": "CPU High UV", + "CPU Low VMIN": "CPU Low VMIN", + "CPU High VMIN": "CPU High VMIN", + "No Undervolt": "No Undervolt", + "SLT Table": "SLT Table", + "HiOPT Table": "HiOPT Table", + "GPU Undervolt Table": "GPU Undervolt Table", + "GPU Minimum Voltage": "GPU Minimum Voltage", + "Calculate GPU Vmin": "Calculate GPU Vmin", + "GPU VMIN": "GPU VMIN", + "GPU Maximum Voltage": "GPU Maximum Voltage", + "GPU Voltage Offset": "GPU Voltage Offset", + "Do not override": "Do not override", + "Enabled (Default)": "Enabled (Default)", + "96.6% limit": "96.6% limit", + "99.7% limit": "99.7% limit", + "GPU Scheduling Override": "GPU Scheduling Override", + "Official Service": "Official Service", + "GPU DVFS Mode": "GPU DVFS Mode", + "GPU DVFS Offset": "GPU DVFS Offset", + "GPU Voltage Table": "GPU Voltage Table", + "GPU Custom Table (mV)": "GPU Custom Table (mV)", + "1075MHz without UV, 1152MHz on SLT": "1075MHz without UV, 1152MHz on SLT", + "or 1228MHz on HiOPT can cause ": "or 1228MHz on HiOPT can cause ", + "permanent damage to your Switch!": "permanent damage to your Switch!", + "921MHz without UV and 960MHz on": "921MHz without UV and 960MHz on", + "SLT or HiOPT can cause ": "SLT or HiOPT can cause " +} diff --git a/Source/hoc-clk/overlay/lang/es.json b/Source/hoc-clk/overlay/lang/es.json new file mode 100644 index 00000000..546b4429 --- /dev/null +++ b/Source/hoc-clk/overlay/lang/es.json @@ -0,0 +1,141 @@ +{ + "Information": "Información", + "IDDQ:": "IDDQ:", + "Module: ": "Módulo:", + "sys-dock status:": "estado del sys-dock:", + "SaltyNX status:": "Estado de SaltyNX:", + "RR Display status:": "Estado de visualización RR:", + "Wafer Position:": "Posición de la oblea:", + "Credits": "Créditos", + "Developers": "Desarrolladores", + "Contributors": "Colaboradores", + "Testers": "Probadores", + "Special Thanks": "agradecimiento especial", + "Unknown": "Desconocido", + "Installed": "Instalado", + "Not Installed": "No instalado", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "LA LICENCIA DE CERVEZA", + "Default": "Predeterminado", + "Do Not Override": "No anular", + "Disabled": "Discapacitado", + "Enabled": "Habilitado", + " \\ue0e3 Reset": "\\ue0e3 Restablecer", + "Display": "Pantalla", + "Application changed\\n\\n": "Aplicación modificada\\n\\n", + "The running application changed\\n\\n": "La aplicación en ejecución cambió\\n\\n", + "while editing was going on.": "mientras se realizaba la edición.", + "Board": "tablero", + "%u.%u%u mV": "%u.%u%u mV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "No se pudo conectar al módulo del sistema hoc-clk.\\n\\n", + "Please make sure everything is\\n\\n": "Por favor asegúrese de que todo esté\\n\\n", + "correctly installed and enabled.": "correctamente instalado y habilitado.", + "Fatal error": "error fatal", + "Temporary Overrides ": "Anulaciones temporales", + "Sleep Mode": "Modo de suspensión", + "Stock": "Valores", + "Dev OC": "Desarrollador OC", + "Boost Mode": "Modo de impulso", + "Safe Max": "Máximo seguro", + "Unsafe Max": "Máximo inseguro", + "Absolute Max": "Máximo absoluto", + "Handheld Safe Max": "Caja fuerte de mano máx.", + "Enable": "Habilitar", + "Edit App Profile": "Editar perfil de aplicación", + "Edit Global Profile": "Editar perfil global", + "Temporary Overrides": "Anulaciones temporales", + "Settings": "Configuración", + "About": "Acerca de", + "Compiling with minimal features": "Compilando con características mínimas", + "General Settings": "Configuraciones generales", + "Governor Settings": "Configuración del gobernador", + "Safety Settings": "Configuraciones de seguridad", + "Save KIP Settings": "Guardar configuración de KIP", + "RAM Settings": "Configuración de RAM", + "CPU Settings": "Configuración de la CPU", + "GPU Settings": "Configuración de GPU", + "Display Settings": "Configuración de pantalla", + "Experimental": "Experimental", + "GPU Scheduling Override Method": "Método de anulación de programación de GPU", + "can be dangerous and may cause": "puede ser peligroso y puede causar", + "damage to your battery or charger!": "¡Daños a su batería o cargador!", + "Charge Current Override": "Anulación de corriente de carga", + "RAM Voltage Display Mode": "Modo de visualización de voltaje de RAM", + "Polling Interval": "Intervalo de sondeo", + "CPU Governor Minimum Frequency": "Frecuencia mínima del gobernador de CPU", + "refresh rates may cause stress": "Las frecuencias de actualización pueden causar estrés.", + "or damage to your display! ": "o daños a su pantalla!", + "Proceed at your own risk!": "¡Continúe bajo su propio riesgo!", + "Max Handheld Display": "Pantalla portátil máxima", + "Display Clock": "Reloj de pantalla", + "Official Rating": "Calificación oficial", + "TDP Threshold": "Umbral de TDP", + "Power": "poder", + "Thermal Throttle Limit": "Límite del acelerador térmico", + "HP Mode": "Modo HP", + "Default (Mariko)": "Predeterminado (Mariko)", + "Default (Erista)": "Predeterminado (Erista)", + "Rating": "Calificación", + "Safe Max (Mariko)": "Max seguro (Mariko)", + "Safe Max (Erista)": "Safe Max (Erista)", + "RAM VDD2 Voltage": "Voltaje RAM VDD2", + "Voltage": "voltaje", + "RAM VDDQ Voltage": "Voltaje RAM VDDQ", + "RAM Frequency Editor": "Editor de frecuencia RAM", + "JEDEC.": "JEDEC.", + "High speedo needed!": "¡Se necesita alta velocidad!", + "3333MHz (Needs extreme Speedo/PLL)": "3333MHz (Necesita Speedo/PLL extremo)", + "3366MHz (Needs extreme Speedo/PLL)": "3366MHz (Necesita Speedo/PLL extremo)", + "3400MHz (Needs extreme Speedo/PLL)": "3400MHz (Necesita Speedo/PLL extremo)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (Necesita Speedo/PLL ridículo)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz (Necesita Speedo/PLL ridículo)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500MHz (Necesita Speedo/PLL ridículo)", + "Ram Max Clock": "Ram Max Reloj", + "RAM Latency Editor": "Editor de latencia de RAM", + "RAM Timing Reductions": "Reducciones de tiempo de RAM", + "Memory Timings": "Tiempos de memoria", + "Advanced": "Avanzado", + "t6 tRTW Fine Tune": "t6 tRTW Ajuste fino", + "tRTW Fine Tune": "Ajuste fino tRTW", + "t7 tWTR Fine Tune": "t7 tWTR Ajuste fino", + "tWTR Fine Tune": "Ajuste fino de tWTR", + "Memory Latencies": "Latencias de la memoria", + "Read Latency": "Leer latencia", + "Write Latency": "Latencia de escritura", + "CPU Boost Clock": "Reloj de aumento de CPU", + "CPU UV": "procesador ultravioleta", + "CPU Unlock": "Desbloqueo de CPU", + "CPU VMIN": "CPU VMIN", + "CPU Max Voltage": "Voltaje máximo de la CPU", + "CPU Max Clock": "Reloj máximo de CPU", + "Extreme UV Table": "Mesa UV extrema", + "CPU UV Table": "Tabla UV de CPU", + "CPU Low UV": "CPU baja radiación ultravioleta", + "CPU High UV": "CPU alta UV", + "CPU Low VMIN": "VMIN bajo de CPU", + "CPU High VMIN": "VMIN alto de CPU", + "No Undervolt": "Sin subvoltaje", + "SLT Table": "Mesa TR", + "HiOPT Table": "Tabla HiOPT", + "GPU Undervolt Table": "Tabla de subvoltaje de GPU", + "GPU Minimum Voltage": "Voltaje mínimo de GPU", + "Calculate GPU Vmin": "Calcular GPU Vmin", + "GPU VMIN": "GPU VMIN", + "GPU Maximum Voltage": "Voltaje máximo de GPU", + "GPU Voltage Offset": "Compensación de voltaje de GPU", + "Do not override": "no anular", + "Enabled (Default)": "Habilitado (predeterminado)", + "96.6% limit": "límite del 96,6%", + "99.7% limit": "límite del 99,7%", + "GPU Scheduling Override": "Anulación de programación de GPU", + "Official Service": "Servicio Oficial", + "GPU DVFS Mode": "Modo GPU DVFS", + "GPU DVFS Offset": "Compensación DVFS de GPU", + "GPU Voltage Table": "Tabla de voltaje de GPU", + "GPU Custom Table (mV)": "Tabla personalizada de GPU (mV)", + "1075MHz without UV, 1152MHz on SLT": "1075MHz sin UV, 1152MHz en SLT", + "or 1228MHz on HiOPT can cause ": "o 1228MHz en HiOPT pueden causar", + "permanent damage to your Switch!": "¡Daño permanente a tu Switch!", + "921MHz without UV and 960MHz on": "921MHz sin UV y 960MHz encendido", + "SLT or HiOPT can cause ": "SLT o HiOPT pueden causar" +} diff --git a/Source/hoc-clk/overlay/lang/fr.json b/Source/hoc-clk/overlay/lang/fr.json new file mode 100644 index 00000000..2494473a --- /dev/null +++ b/Source/hoc-clk/overlay/lang/fr.json @@ -0,0 +1,141 @@ +{ + "Information": "Informations", + "IDDQ:": "IDDQ :", + "Module: ": "Module :", + "sys-dock status:": "état du dock système :", + "SaltyNX status:": "Statut SaltyNX :", + "RR Display status:": "Etat d'affichage RR :", + "Wafer Position:": "Position de la plaquette :", + "Credits": "Crédits", + "Developers": "Développeurs", + "Contributors": "Contributeurs", + "Testers": "Testeurs", + "Special Thanks": "Remerciements spéciaux", + "Unknown": "Inconnu", + "Installed": "Installé", + "Not Installed": "Non installé", + "X: %u Y: %u": "X : %u Y : %u", + "THE BEER-WARE LICENSE": "LA LICENCE DE LA BIÈRE", + "Default": "Par défaut", + "Do Not Override": "Ne pas remplacer", + "Disabled": "Désactivé", + "Enabled": "Activé", + " \\ue0e3 Reset": "\\ue0e3 Réinitialiser", + "Display": "Affichage", + "Application changed\\n\\n": "Application modifiée\\n\\n", + "The running application changed\\n\\n": "L'application en cours d'exécution a changé\\n\\n", + "while editing was going on.": "pendant le montage.", + "Board": "Conseil", + "%u.%u%u mV": "%u.%u%u mV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "Impossible de se connecter au module système hoc-clk.\\n\\n", + "Please make sure everything is\\n\\n": "Veuillez vous assurer que tout est\\n\\n", + "correctly installed and enabled.": "correctement installé et activé.", + "Fatal error": "Erreur fatale", + "Temporary Overrides ": "Remplacements temporaires", + "Sleep Mode": "Mode veille", + "Stock": "Actions", + "Dev OC": "Développeur OC", + "Boost Mode": "Mode Boost", + "Safe Max": "Coffre-fort maximum", + "Unsafe Max": "Dangereux Max", + "Absolute Max": "Max absolu", + "Handheld Safe Max": "Coffre-fort portatif Max", + "Enable": "Activer", + "Edit App Profile": "Modifier le profil de l'application", + "Edit Global Profile": "Modifier le profil global", + "Temporary Overrides": "Remplacements temporaires", + "Settings": "Paramètres", + "About": "À propos", + "Compiling with minimal features": "Compilation avec des fonctionnalités minimales", + "General Settings": "Paramètres généraux", + "Governor Settings": "Paramètres du gouverneur", + "Safety Settings": "Paramètres de sécurité", + "Save KIP Settings": "Enregistrer les paramètres KIP", + "RAM Settings": "Paramètres de la RAM", + "CPU Settings": "Paramètres du processeur", + "GPU Settings": "Paramètres du processeur graphique", + "Display Settings": "Paramètres d'affichage", + "Experimental": "Expérimental", + "GPU Scheduling Override Method": "Méthode de remplacement de la planification GPU", + "can be dangerous and may cause": "peut être dangereux et provoquer", + "damage to your battery or charger!": "dommages à votre batterie ou à votre chargeur !", + "Charge Current Override": "Remplacement du courant de charge", + "RAM Voltage Display Mode": "Mode d'affichage de la tension de la RAM", + "Polling Interval": "Intervalle d'interrogation", + "CPU Governor Minimum Frequency": "Fréquence minimale du gouverneur du processeur", + "refresh rates may cause stress": "les taux de rafraîchissement peuvent causer du stress", + "or damage to your display! ": "ou endommager votre écran !", + "Proceed at your own risk!": "Procédez à vos propres risques !", + "Max Handheld Display": "Affichage portable maximum", + "Display Clock": "Affichage de l'horloge", + "Official Rating": "Classement officiel", + "TDP Threshold": "Seuil TDP", + "Power": "Puissance", + "Thermal Throttle Limit": "Limite d'accélérateur thermique", + "HP Mode": "Mode HP", + "Default (Mariko)": "Par défaut (Mariko)", + "Default (Erista)": "Par défaut (Erista)", + "Rating": "Note", + "Safe Max (Mariko)": "Coffre-fort Max (Mariko)", + "Safe Max (Erista)": "Coffre-fort Max (Erista)", + "RAM VDD2 Voltage": "Tension de la RAM VDD2", + "Voltage": "Tension", + "RAM VDDQ Voltage": "Tension VDDQ de la RAM", + "RAM Frequency Editor": "Éditeur de fréquence RAM", + "JEDEC.": "JEDEC.", + "High speedo needed!": "Besoin d'un speedo haut !", + "3333MHz (Needs extreme Speedo/PLL)": "3333 MHz (nécessite un Speedo/PLL extrême)", + "3366MHz (Needs extreme Speedo/PLL)": "3366 MHz (nécessite un Speedo/PLL extrême)", + "3400MHz (Needs extreme Speedo/PLL)": "3400 MHz (nécessite un Speedo/PLL extrême)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433 MHz (nécessite un Speedo/PLL ridicule)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466 MHz (nécessite un Speedo/PLL ridicule)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500 MHz (nécessite un Speedo/PLL ridicule)", + "Ram Max Clock": "Ram Max Horloge", + "RAM Latency Editor": "Éditeur de latence RAM", + "RAM Timing Reductions": "Réductions de synchronisation de la RAM", + "Memory Timings": "Horaires de mémoire", + "Advanced": "Avancé", + "t6 tRTW Fine Tune": "t6 tRTW réglage fin", + "tRTW Fine Tune": "tRTW Réglage fin", + "t7 tWTR Fine Tune": "t7 tWTR réglage fin", + "tWTR Fine Tune": "Réglage fin du tWTR", + "Memory Latencies": "Latences de mémoire", + "Read Latency": "Latence de lecture", + "Write Latency": "Latence d'écriture", + "CPU Boost Clock": "Horloge d'augmentation du processeur", + "CPU UV": "UV du processeur", + "CPU Unlock": "Déverrouillage du processeur", + "CPU VMIN": "CPU VMIN", + "CPU Max Voltage": "Tension maximale du processeur", + "CPU Max Clock": "Horloge maximale du processeur", + "Extreme UV Table": "Table UV Extrême", + "CPU UV Table": "Tableau UV du processeur", + "CPU Low UV": "CPU faible UV", + "CPU High UV": "CPU UV élevé", + "CPU Low VMIN": "CPU faible VMIN", + "CPU High VMIN": "Processeur VMIN élevé", + "No Undervolt": "Pas de sous-tension", + "SLT Table": "Tableau SLT", + "HiOPT Table": "Tableau HiOPT", + "GPU Undervolt Table": "Tableau de sous-tension GPU", + "GPU Minimum Voltage": "Tension minimale du GPU", + "Calculate GPU Vmin": "Calculer la Vmin du GPU", + "GPU VMIN": "GPU VMIN", + "GPU Maximum Voltage": "Tension maximale du GPU", + "GPU Voltage Offset": "Décalage de tension du GPU", + "Do not override": "Ne remplacez pas", + "Enabled (Default)": "Activé (par défaut)", + "96.6% limit": "Limite de 96,6 %", + "99.7% limit": "Limite de 99,7 %", + "GPU Scheduling Override": "Remplacement de la planification GPU", + "Official Service": "Service officiel", + "GPU DVFS Mode": "Mode GPU DVFS", + "GPU DVFS Offset": "Décalage GPU DVFS", + "GPU Voltage Table": "Tableau de tension du GPU", + "GPU Custom Table (mV)": "Tableau personnalisé GPU (mV)", + "1075MHz without UV, 1152MHz on SLT": "1075 MHz sans UV, 1152 MHz sur SLT", + "or 1228MHz on HiOPT can cause ": "ou 1228 MHz sur HiOPT peut provoquer", + "permanent damage to your Switch!": "dommages permanents à votre Switch !", + "921MHz without UV and 960MHz on": "921 MHz sans UV et 960 MHz activé", + "SLT or HiOPT can cause ": "SLT ou HiOPT peuvent provoquer" +} diff --git a/Source/hoc-clk/overlay/lang/it.json b/Source/hoc-clk/overlay/lang/it.json new file mode 100644 index 00000000..d7056f36 --- /dev/null +++ b/Source/hoc-clk/overlay/lang/it.json @@ -0,0 +1,141 @@ +{ + "Information": "Informazioni", + "IDDQ:": "IDDQ:", + "Module: ": "Modulo:", + "sys-dock status:": "stato del dock di sistema:", + "SaltyNX status:": "Stato di SaltyNX:", + "RR Display status:": "Stato di visualizzazione RR:", + "Wafer Position:": "Posizione del wafer:", + "Credits": "Crediti", + "Developers": "Sviluppatori", + "Contributors": "Collaboratori", + "Testers": "Tester", + "Special Thanks": "Un ringraziamento speciale", + "Unknown": "Sconosciuto", + "Installed": "Installato", + "Not Installed": "Non installato", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "LA LICENZA PER GLI ARTICOLI DI BIRRA", + "Default": "Predefinito", + "Do Not Override": "Non sovrascrivere", + "Disabled": "Disabilitato", + "Enabled": "Abilitato", + " \\ue0e3 Reset": "\\ue0e3 Ripristina", + "Display": "Visualizzazione", + "Application changed\\n\\n": "Applicazione modificata\\n\\n", + "The running application changed\\n\\n": "L'applicazione in esecuzione è cambiata\\n\\n", + "while editing was going on.": "mentre era in corso la modifica.", + "Board": "Consiglio", + "%u.%u%u mV": "%u.%u%u mV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "Impossibile connettersi al modulo di sistema hoc-clk.\\n\\n", + "Please make sure everything is\\n\\n": "Assicurati che tutto sia\\n\\n", + "correctly installed and enabled.": "correttamente installato e abilitato.", + "Fatal error": "Errore fatale", + "Temporary Overrides ": "Sostituzioni temporanee", + "Sleep Mode": "Modalità di sospensione", + "Stock": "Magazzino", + "Dev OC": "OC di sviluppo", + "Boost Mode": "Modalità potenziamento", + "Safe Max": "Sicuro massimo", + "Unsafe Max": "Non sicuro Max", + "Absolute Max": "Massimo assoluto", + "Handheld Safe Max": "Cassaforte portatile max", + "Enable": "Abilita", + "Edit App Profile": "Modifica profilo dell'app", + "Edit Global Profile": "Modifica profilo globale", + "Temporary Overrides": "Sostituzioni temporanee", + "Settings": "Impostazioni", + "About": "Circa", + "Compiling with minimal features": "Compilazione con funzionalità minime", + "General Settings": "Impostazioni generali", + "Governor Settings": "Impostazioni del governatore", + "Safety Settings": "Impostazioni di sicurezza", + "Save KIP Settings": "Salva le impostazioni KIP", + "RAM Settings": "Impostazioni della RAM", + "CPU Settings": "Impostazioni della CPU", + "GPU Settings": "Impostazioni della GPU", + "Display Settings": "Impostazioni di visualizzazione", + "Experimental": "Sperimentale", + "GPU Scheduling Override Method": "Metodo di override della pianificazione GPU", + "can be dangerous and may cause": "può essere pericoloso e può causare", + "damage to your battery or charger!": "danni alla batteria o al caricabatterie!", + "Charge Current Override": "Override della corrente di carica", + "RAM Voltage Display Mode": "Modalità di visualizzazione della tensione RAM", + "Polling Interval": "Intervallo di polling", + "CPU Governor Minimum Frequency": "Frequenza minima del governatore della CPU", + "refresh rates may cause stress": "le frequenze di aggiornamento possono causare stress", + "or damage to your display! ": "o danni al display!", + "Proceed at your own risk!": "Procedi a tuo rischio e pericolo!", + "Max Handheld Display": "Display portatile massimo", + "Display Clock": "Visualizza orologio", + "Official Rating": "Valutazione ufficiale", + "TDP Threshold": "Soglia TDP", + "Power": "Potenza", + "Thermal Throttle Limit": "Limite della valvola termica", + "HP Mode": "Modalità HP", + "Default (Mariko)": "Predefinito (Mariko)", + "Default (Erista)": "Predefinito (Erista)", + "Rating": "Valutazione", + "Safe Max (Mariko)": "Safe Max (Mariko)", + "Safe Max (Erista)": "Safe Max (Erista)", + "RAM VDD2 Voltage": "Tensione RAM VDD2", + "Voltage": "Voltaggio", + "RAM VDDQ Voltage": "Voltaggio VDDQ della RAM", + "RAM Frequency Editor": "Editor della frequenza RAM", + "JEDEC.": "JEDEC.", + "High speedo needed!": "È necessaria l'alta velocità!", + "3333MHz (Needs extreme Speedo/PLL)": "3333 MHz (richiede Speedo/PLL estremo)", + "3366MHz (Needs extreme Speedo/PLL)": "3366 MHz (richiede Speedo/PLL estremo)", + "3400MHz (Needs extreme Speedo/PLL)": "3400 MHz (richiede Speedo/PLL estremo)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433 MHz (è necessario un ridicolo Speedo/PLL)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466 MHz (è necessario un ridicolo Speedo/PLL)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500 MHz (è necessario un ridicolo Speedo/PLL)", + "Ram Max Clock": "Orologio Ram Max", + "RAM Latency Editor": "Editor della latenza RAM", + "RAM Timing Reductions": "Riduzioni della temporizzazione della RAM", + "Memory Timings": "Tempi di memoria", + "Advanced": "Avanzato", + "t6 tRTW Fine Tune": "t6 tRTW Sintonia fine", + "tRTW Fine Tune": "tRTW Sintonia fine", + "t7 tWTR Fine Tune": "t7 tWTR Sintonia fine", + "tWTR Fine Tune": "tWTR Sintonia fine", + "Memory Latencies": "Latenza della memoria", + "Read Latency": "Leggi latenza", + "Write Latency": "Scrivi latenza", + "CPU Boost Clock": "Orologio di potenziamento della CPU", + "CPU UV": "UV della CPU", + "CPU Unlock": "Sblocco della CPU", + "CPU VMIN": "CPUVMIN", + "CPU Max Voltage": "Voltaggio massimo della CPU", + "CPU Max Clock": "Orologio massimo della CPU", + "Extreme UV Table": "Tavolo UV estremo", + "CPU UV Table": "Tabella UV della CPU", + "CPU Low UV": "CPU con raggi UV bassi", + "CPU High UV": "UV elevato della CPU", + "CPU Low VMIN": "VMIN CPU basso", + "CPU High VMIN": "CPU alta VMIN", + "No Undervolt": "Nessuna sottotensione", + "SLT Table": "Tabella SLT", + "HiOPT Table": "Tabella HiOPT", + "GPU Undervolt Table": "Tabella di sottotensione GPU", + "GPU Minimum Voltage": "Voltaggio minimo della GPU", + "Calculate GPU Vmin": "Calcola GPU Vmin", + "GPU VMIN": "GPUVMIN", + "GPU Maximum Voltage": "Voltaggio massimo della GPU", + "GPU Voltage Offset": "Offset di tensione della GPU", + "Do not override": "Non sovrascrivere", + "Enabled (Default)": "Abilitato (impostazione predefinita)", + "96.6% limit": "Limite del 96,6%.", + "99.7% limit": "Limite del 99,7%.", + "GPU Scheduling Override": "Override della pianificazione GPU", + "Official Service": "Servizio ufficiale", + "GPU DVFS Mode": "Modalità DVFS GPU", + "GPU DVFS Offset": "Offset DVFS della GPU", + "GPU Voltage Table": "Tabella delle tensioni della GPU", + "GPU Custom Table (mV)": "Tabella personalizzata GPU (mV)", + "1075MHz without UV, 1152MHz on SLT": "1075 MHz senza UV, 1152 MHz su SLT", + "or 1228MHz on HiOPT can cause ": "o 1228 MHz su HiOPT possono causare", + "permanent damage to your Switch!": "danni permanenti al tuo Switch!", + "921MHz without UV and 960MHz on": "921 MHz senza UV e 960 MHz attivi", + "SLT or HiOPT can cause ": "SLT o HiOPT possono causare" +} diff --git a/Source/hoc-clk/overlay/lang/ja.json b/Source/hoc-clk/overlay/lang/ja.json new file mode 100644 index 00000000..fe415367 --- /dev/null +++ b/Source/hoc-clk/overlay/lang/ja.json @@ -0,0 +1,141 @@ +{ + "Information": "情報", + "IDDQ:": "IDQ:", + "Module: ": "モジュール:", + "sys-dock status:": "システムドックのステータス:", + "SaltyNX status:": "SaltyNX ステータス:", + "RR Display status:": "RR 表示ステータス:", + "Wafer Position:": "ウェーハの位置:", + "Credits": "クレジット", + "Developers": "開発者", + "Contributors": "貢献者", + "Testers": "テスター", + "Special Thanks": "特別な感謝の気持ち", + "Unknown": "不明", + "Installed": "インストール済み", + "Not Installed": "インストールされていません", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "ビール製品ライセンス", + "Default": "デフォルト", + "Do Not Override": "上書きしないでください", + "Disabled": "障害者", + "Enabled": "有効", + " \\ue0e3 Reset": "\\ue0e3 リセット", + "Display": "ディスプレイ", + "Application changed\\n\\n": "アプリケーションが変更されました\\n\\n", + "The running application changed\\n\\n": "実行中のアプリケーションが変更されました\\n\\n", + "while editing was going on.": "編集を進めている最中でした。", + "Board": "理事会", + "%u.%u%u mV": "%u.%u%u mV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "hoc-clk sysmodule に接続できませんでした。\\n\\n", + "Please make sure everything is\\n\\n": "すべてが正しいことを確認してください\\n\\n", + "correctly installed and enabled.": "正しくインストールされ、有効になっています。", + "Fatal error": "致命的なエラー", + "Temporary Overrides ": "一時的なオーバーライド", + "Sleep Mode": "スリープモード", + "Stock": "在庫", + "Dev OC": "開発OC", + "Boost Mode": "ブーストモード", + "Safe Max": "セーフマックス", + "Unsafe Max": "危険なマックス", + "Absolute Max": "絶対最大値", + "Handheld Safe Max": "手持ち金庫マックス", + "Enable": "有効にする", + "Edit App Profile": "アプリプロファイルの編集", + "Edit Global Profile": "グローバルプロファイルの編集", + "Temporary Overrides": "一時的なオーバーライド", + "Settings": "設定", + "About": "について", + "Compiling with minimal features": "最小限の機能でコンパイルする", + "General Settings": "一般設定", + "Governor Settings": "ガバナーの設定", + "Safety Settings": "安全設定", + "Save KIP Settings": "KIP 設定の保存", + "RAM Settings": "RAM設定", + "CPU Settings": "CPUの設定", + "GPU Settings": "GPU設定", + "Display Settings": "表示設定", + "Experimental": "実験的", + "GPU Scheduling Override Method": "GPU スケジューリング オーバーライド メソッド", + "can be dangerous and may cause": "危険であり、原因となる可能性があります", + "damage to your battery or charger!": "バッテリーまたは充電器が損傷します。", + "Charge Current Override": "充電電流オーバーライド", + "RAM Voltage Display Mode": "RAM電圧表示モード", + "Polling Interval": "ポーリング間隔", + "CPU Governor Minimum Frequency": "CPU ガバナの最小周波数", + "refresh rates may cause stress": "リフレッシュレートがストレスを引き起こす可能性がある", + "or damage to your display! ": "ディスプレイに損傷を与えてしまいます。", + "Proceed at your own risk!": "自己責任で進めてください!", + "Max Handheld Display": "最大ハンドヘルドディスプレイ", + "Display Clock": "時計の表示", + "Official Rating": "公式評価", + "TDP Threshold": "TDP しきい値", + "Power": "パワー", + "Thermal Throttle Limit": "サーマルスロットル制限", + "HP Mode": "HPモード", + "Default (Mariko)": "デフォルト(マリコ)", + "Default (Erista)": "デフォルト(エリスタ)", + "Rating": "評価", + "Safe Max (Mariko)": "セーフマックス(マリコ)", + "Safe Max (Erista)": "セーフマックス(エリスタ)", + "RAM VDD2 Voltage": "RAM VDD2 電圧", + "Voltage": "電圧", + "RAM VDDQ Voltage": "RAM VDDQ 電圧", + "RAM Frequency Editor": "RAM周波数エディター", + "JEDEC.": "JEDEC。", + "High speedo needed!": "ハイスピードが必要です!", + "3333MHz (Needs extreme Speedo/PLL)": "3333MHz (エクストリーム Speedo/PLL が必要)", + "3366MHz (Needs extreme Speedo/PLL)": "3366MHz (エクストリーム Speedo/PLL が必要)", + "3400MHz (Needs extreme Speedo/PLL)": "3400MHz (エクストリーム Speedo/PLL が必要)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (とんでもない Speedo/PLL が必要)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz (とんでもない Speedo/PLL が必要)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500MHz (とんでもない Speedo/PLL が必要)", + "Ram Max Clock": "ラムマックスクロック", + "RAM Latency Editor": "RAM レイテンシ エディター", + "RAM Timing Reductions": "RAM タイミングの削減", + "Memory Timings": "メモリタイミング", + "Advanced": "上級者向け", + "t6 tRTW Fine Tune": "t6 tRTW 微調整", + "tRTW Fine Tune": "tRTW 微調整", + "t7 tWTR Fine Tune": "t7 tWTR ファインチューン", + "tWTR Fine Tune": "tWTR ファインチューン", + "Memory Latencies": "メモリレイテンシ", + "Read Latency": "読み取りレイテンシー", + "Write Latency": "書き込みレイテンシ", + "CPU Boost Clock": "CPUブーストクロック", + "CPU UV": "CPU UV", + "CPU Unlock": "CPUロック解除", + "CPU VMIN": "CPU VMIN", + "CPU Max Voltage": "CPU最大電圧", + "CPU Max Clock": "CPU最大クロック", + "Extreme UV Table": "エクストリーム UV テーブル", + "CPU UV Table": "CPU UV テーブル", + "CPU Low UV": "CPU 低 UV", + "CPU High UV": "CPU 高紫外線", + "CPU Low VMIN": "CPU 低 VMIN", + "CPU High VMIN": "CPU の高い VMIN", + "No Undervolt": "不足電圧なし", + "SLT Table": "SLTテーブル", + "HiOPT Table": "HiOPT テーブル", + "GPU Undervolt Table": "GPUアンダーボルトテーブル", + "GPU Minimum Voltage": "GPUの最小電圧", + "Calculate GPU Vmin": "GPU Vmin を計算する", + "GPU VMIN": "GPU VMIN", + "GPU Maximum Voltage": "GPU最大電圧", + "GPU Voltage Offset": "GPU電圧オフセット", + "Do not override": "上書きしないでください", + "Enabled (Default)": "有効 (デフォルト)", + "96.6% limit": "96.6%制限", + "99.7% limit": "99.7%制限", + "GPU Scheduling Override": "GPU スケジュールのオーバーライド", + "Official Service": "正式サービス", + "GPU DVFS Mode": "GPU DVFS モード", + "GPU DVFS Offset": "GPU DVFS オフセット", + "GPU Voltage Table": "GPU電圧テーブル", + "GPU Custom Table (mV)": "GPUカスタムテーブル(mV)", + "1075MHz without UV, 1152MHz on SLT": "UVなしで1075MHz、SLTで1152MHz", + "or 1228MHz on HiOPT can cause ": "HiOPT で 1228MHz を使用すると、次のような問題が発生する可能性があります。", + "permanent damage to your Switch!": "Switch に永久的なダメージを与えます!", + "921MHz without UV and 960MHz on": "921MHz(UVなし)、960MHz(UVあり)", + "SLT or HiOPT can cause ": "SLT または HiOPT が原因となる可能性があります" +} diff --git a/Source/hoc-clk/overlay/lang/jp.json b/Source/hoc-clk/overlay/lang/jp.json new file mode 100644 index 00000000..af92cbf7 --- /dev/null +++ b/Source/hoc-clk/overlay/lang/jp.json @@ -0,0 +1,146 @@ +{ + "Information": "Information", + "IDDQ:": "IDDQ:", + "Module: ": "Module:", + "sys-dock status:": "sys-dock status:", + "SaltyNX status:": "SaltyNX status:", + "RR Display status:": "RR Display status:", + "Wafer Position:": "Wafer Position:", + "Credits": "Credits", + "Developers": "Developers", + "Contributors": "Contributors", + "Testers": "Testers", + "Special Thanks": "Special Thanks", + "Unknown": "Unknown", + "Installed": "Installed", + "Not Installed": "Not Installed", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "THE BEER-WARE LICENSE", + "Default": "Default", + "Do Not Override": "Do Not Override", + "Disabled": "Disabled", + "Enabled": "Enabled", + " \\ue0e3 Reset": "\\ue0e3 Reset", + "Display": "Display", + "Application changed\\n\\n": "Application changed\\n\\n", + "The running application changed\\n\\n": "The running application changed\\n\\n", + "while editing was going on.": "while editing was going on.", + "App ID": "App ID", + "Profile": "Profile", + "Board": "Board", + "USB Charger": "USB Charger", + "%u.%u%u mV": "%u.%u%u mV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "Could not connect to hoc-clk sysmodule.\\n\\n", + "Please make sure everything is\\n\\n": "Please make sure everything is\\n\\n", + "correctly installed and enabled.": "correctly installed and enabled.", + "Fatal error": "Fatal error", + "Temporary Overrides ": "Temporary Overrides", + "Sleep Mode": "Sleep Mode", + "Stock": "Stock", + "Dev OC": "Dev OC", + "Boost Mode": "Boost Mode", + "Safe Max": "Safe Max", + "Unsafe Max": "Unsafe Max", + "Absolute Max": "Absolute Max", + "Handheld": "Handheld", + "Handheld Safe Max": "Handheld Safe Max", + "Docked": "Docked", + "Enable": "Enable", + "Edit App Profile": "Edit App Profile", + "Edit Global Profile": "Edit Global Profile", + "Temporary Overrides": "Temporary Overrides", + "Settings": "Settings", + "About": "About", + "Compiling with minimal features": "Compiling with minimal features", + "General Settings": "General Settings", + "Governor Settings": "Governor Settings", + "Safety Settings": "Safety Settings", + "Save KIP Settings": "Save KIP Settings", + "RAM Settings": "RAM Settings", + "CPU Settings": "CPU Settings", + "GPU Settings": "GPU Settings", + "Display Settings": "Display Settings", + "Experimental": "Experimental", + "GPU Scheduling Override Method": "GPU Scheduling Override Method", + "can be dangerous and may cause": "can be dangerous and may cause", + "damage to your battery or charger!": "damage to your battery or charger!", + "Charge Current Override": "Charge Current Override", + "RAM Voltage Display Mode": "RAM Voltage Display Mode", + "Polling Interval": "Polling Interval", + "CPU Governor Minimum Frequency": "CPU Governor Minimum Frequency", + "refresh rates may cause stress": "refresh rates may cause stress", + "or damage to your display! ": "or damage to your display!", + "Proceed at your own risk!": "Proceed at your own risk!", + "Max Handheld Display": "Max Handheld Display", + "Display Clock": "Display Clock", + "Official Rating": "Official Rating", + "TDP Threshold": "TDP Threshold", + "Power": "Power", + "Thermal Throttle Limit": "Thermal Throttle Limit", + "HP Mode": "HP Mode", + "Default (Mariko)": "Default (Mariko)", + "Default (Erista)": "Default (Erista)", + "Rating": "Rating", + "Safe Max (Mariko)": "Safe Max (Mariko)", + "Safe Max (Erista)": "Safe Max (Erista)", + "RAM VDD2 Voltage": "RAM VDD2 Voltage", + "Voltage": "Voltage", + "RAM VDDQ Voltage": "RAM VDDQ Voltage", + "RAM Frequency Editor": "RAM Frequency Editor", + "JEDEC.": "JEDEC.", + "3333MHz (Needs extreme Speedo/PLL)": "3333MHz (Needs extreme Speedo/PLL)", + "3366MHz (Needs extreme Speedo/PLL)": "3366MHz (Needs extreme Speedo/PLL)", + "3400MHz (Needs extreme Speedo/PLL)": "3400MHz (Needs extreme Speedo/PLL)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (Needs ridiculous Speedo/PLL)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz (Needs ridiculous Speedo/PLL)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500MHz (Needs ridiculous Speedo/PLL)", + "Ram Max Clock": "Ram Max Clock", + "RAM Latency Editor": "RAM Latency Editor", + "RAM Timing Reductions": "RAM Timing Reductions", + "Memory Timings": "Memory Timings", + "tREFI": "tREFI", + "Advanced": "Advanced", + "t6 tRTW Fine Tune": "t6 tRTW Fine Tune", + "tRTW Fine Tune": "tRTW Fine Tune", + "t7 tWTR Fine Tune": "t7 tWTR Fine Tune", + "tWTR Fine Tune": "tWTR Fine Tune", + "Memory Latencies": "Memory Latencies", + "Read Latency": "Read Latency", + "Write Latency": "Write Latency", + "CPU Boost Clock": "CPU Boost Clock", + "CPU UV": "CPU UV", + "CPU Unlock": "CPU Unlock", + "CPU VMIN": "CPU VMIN", + "CPU Max Voltage": "CPU Max Voltage", + "CPU Max Clock": "CPU Max Clock", + "Extreme UV Table": "Extreme UV Table", + "CPU UV Table": "CPU UV Table", + "CPU Low UV": "CPU Low UV", + "CPU High UV": "CPU High UV", + "CPU Low VMIN": "CPU Low VMIN", + "CPU High VMIN": "CPU High VMIN", + "No Undervolt": "No Undervolt", + "SLT Table": "SLT Table", + "HiOPT Table": "HiOPT Table", + "GPU Undervolt Table": "GPU Undervolt Table", + "GPU Minimum Voltage": "GPU Minimum Voltage", + "Calculate GPU Vmin": "Calculate GPU Vmin", + "GPU VMIN": "GPU VMIN", + "GPU Maximum Voltage": "GPU Maximum Voltage", + "GPU Voltage Offset": "GPU Voltage Offset", + "Do not override": "Do not override", + "Enabled (Default)": "Enabled (Default)", + "96.6% limit": "96.6% limit", + "99.7% limit": "99.7% limit", + "GPU Scheduling Override": "GPU Scheduling Override", + "Official Service": "Official Service", + "GPU DVFS Mode": "GPU DVFS Mode", + "GPU DVFS Offset": "GPU DVFS Offset", + "GPU Voltage Table": "GPU Voltage Table", + "GPU Custom Table (mV)": "GPU Custom Table (mV)", + "1075MHz without UV, 1152MHz on SLT": "1075MHz without UV, 1152MHz on SLT", + "or 1228MHz on HiOPT can cause ": "or 1228MHz on HiOPT can cause", + "permanent damage to your Switch!": "permanent damage to your Switch!", + "921MHz without UV and 960MHz on": "921MHz without UV and 960MHz on", + "SLT or HiOPT can cause ": "SLT or HiOPT can cause" +} diff --git a/Source/hoc-clk/overlay/lang/ko.json b/Source/hoc-clk/overlay/lang/ko.json new file mode 100644 index 00000000..09e73e66 --- /dev/null +++ b/Source/hoc-clk/overlay/lang/ko.json @@ -0,0 +1,141 @@ +{ + "Information": "정보", + "IDDQ:": "IDDQ:", + "Module: ": "모듈:", + "sys-dock status:": "sys-dock 상태:", + "SaltyNX status:": "SaltyNX 상태:", + "RR Display status:": "RR 표시 상태:", + "Wafer Position:": "웨이퍼 위치:", + "Credits": "크레딧", + "Developers": "개발자", + "Contributors": "기여자", + "Testers": "테스터", + "Special Thanks": "특별한 분", + "Unknown": "알 수 없음", + "Installed": "설치됨", + "Not Installed": "설치되지 않음", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "맥주 제품 라이센스", + "Default": "기본값", + "Do Not Override": "재정의하지 마십시오", + "Disabled": "비활성화", + "Enabled": "활성화됨", + " \\ue0e3 Reset": "\\ue0e3 재설정", + "Display": "디스플레이", + "Application changed\\n\\n": "애플리케이션이 변경되었습니다.\\n\\n", + "The running application changed\\n\\n": "실행 중인 애플리케이션이 변경되었습니다.\\n\\n", + "while editing was going on.": "편집이 진행되는 동안.", + "Board": "보드", + "%u.%u%u mV": "%u.%u%umV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "hoc-clk 시스템 모듈에 연결할 수 없습니다.\\n\\n", + "Please make sure everything is\\n\\n": "모든 것이 올바른지 확인하십시오.\\n\\n", + "correctly installed and enabled.": "올바르게 설치되고 활성화되었습니다.", + "Fatal error": "치명적인 오류", + "Temporary Overrides ": "임시 재정의", + "Sleep Mode": "절전 모드", + "Stock": "주식", + "Dev OC": "개발 OC", + "Overwrite Boost Mode": "부스트 모드 덮어쓰기", + "Safe Max": "안전함 최대값", + "Unsafe Max": "불안정 최대값", + "Absolute Max": "절대 최대값", + "Handheld Safe Max": "휴대모드 안전함 최대값", + "Enable": "활성화", + "Edit App Profile": "앱 프로필 편집", + "Edit Global Profile": "글로벌 프로필 편집", + "Temporary Overrides": "임시 재정의", + "Settings": "설정", + "About": "소개", + "Compiling with minimal features": "최소한의 기능으로 컴파일하기", + "General Settings": "일반 설정", + "Governor Settings": "거버너 설정", + "Safety Settings": "안전 설정", + "Save KIP Settings": "KIP 설정 저장", + "RAM Settings": "RAM 설정", + "CPU Settings": "CPU 설정", + "GPU Settings": "GPU 설정", + "Display Settings": "디스플레이 설정", + "Experimental": "실험적", + "GPU Scheduling Override Method": "GPU 스케줄링 재정의 방법", + "can be dangerous and may cause": "위험할 수 있고 원인이 될 수 있습니다.", + "damage to your battery or charger!": "배터리나 충전기가 손상되었습니다!", + "Charge Current Override": "충전 전류 오버라이드", + "RAM Voltage Display Mode": "RAM 전압 표시 모드", + "Polling Interval": "폴링 간격", + "CPU Governor Minimum Frequency": "CPU 거버너 최소 주파수", + "refresh rates may cause stress": "디스플레이 주사율 빈도 변경은", + "or damage to your display! ": "기기에 손상이 발생될 수 있습니다!", + "Proceed at your own risk!": "책임하에 주의해서 사용하십시오!", + "Max Handheld Display": "최대 휴대용 디스플레이", + "Display Clock": "디스플레이 클럭", + "Official Rating": "공식 등급", + "TDP Threshold": "TDP 임계값", + "Power": "힘", + "Thermal Throttle Limit": "열 스로틀 한계", + "HP Mode": "HP 모드", + "Default (Mariko)": "기본값(마리코)", + "Default (Erista)": "기본값(에리스타)", + "Rating": "표준값", + "Safe Max (Mariko)": "안전함 최대치(마리코)", + "Safe Max (Erista)": "안전함 최대치(에리스타)", + "RAM VDD2 Voltage": "RAM VDD2 전압", + "Voltage": "전압", + "RAM VDDQ Voltage": "RAM VDDQ 전압", + "RAM Frequency Editor": "RAM 주파수 편집기", + "JEDEC.": "JEDEC.", + "High speedo needed!": "높은 스피도값이 필요합니다!", + "3333MHz (Needs extreme Speedo/PLL)": "3333MHz(극단적인 Speedo/PLL 필요)", + "3366MHz (Needs extreme Speedo/PLL)": "3366MHz(극단적인 Speedo/PLL 필요)", + "3400MHz (Needs extreme Speedo/PLL)": "3400MHz(극단적인 Speedo/PLL 필요)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (말도 안 되는 Speedo/PLL 필요)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz(터무니없는 Speedo/PLL 필요)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500MHz(터무니없는 Speedo/PLL 필요)", + "Ram Max Clock": "RAM 최대 클럭", + "RAM Latency Editor": "RAM 지연 시간 편집기", + "RAM Timing Reductions": "RAM 타이밍 편집기", + "Memory Timings": "메모리 타이밍", + "Advanced": "고급", + "t6 tRTW Fine Tune": "t6 tRTW 미세 조정", + "tRTW Fine Tune": "tRTW 미세 조정", + "t7 tWTR Fine Tune": "t7 tWTR 미세 조정", + "tWTR Fine Tune": "tWTR 미세 조정", + "Memory Latencies": "메모리 지연 시간", + "Read Latency": "읽기 지연 시간", + "Write Latency": "쓰기 지연 시간", + "CPU Boost Clock": "CPU 부스트 클럭", + "CPU UV": "CPU 언더볼트", + "CPU Unlock": "CPU 잠금 해제", + "CPU VMIN": "CPU VMIN", + "CPU Max Voltage": "CPU 최대 전압", + "CPU Max Clock": "CPU 최대 클럭", + "Extreme UV Table": "익스트림 테이블", + "CPU UV Table": "CPU 언더볼트 테이블", + "CPU Low UV": "CPU 저주파 언더볼트", + "CPU High UV": "CPU 고주파 언더볼트", + "CPU Low VMIN": "CPU 저주파 최소 전압", + "CPU High VMIN": "CPU 고주파 최소 전압", + "No Undervolt": "언더볼트 없음", + "SLT Table": "SLT 테이블", + "HiOPT Table": "HiOPT 테이블", + "GPU Undervolt Table": "GPU 언더볼트 테이블", + "GPU Minimum Voltage": "GPU 최소 전압", + "Calculate GPU Vmin": "GPU Vmin 계산", + "GPU VMIN": "GPU VMIN", + "GPU Maximum Voltage": "GPU 최대 전압", + "GPU Voltage Offset": "GPU 전압 오프셋", + "Do not override": "재정의하지 않음", + "Enabled (Default)": "활성화됨(기본값)", + "96.6% limit": "96.6% 한도", + "99.7% limit": "99.7% 한도", + "GPU Scheduling Override": "GPU 스케줄링 재정의", + "Official Service": "공식 서비스", + "GPU DVFS Mode": "GPU DVFS 모드", + "GPU DVFS Offset": "GPU DVFS 오프셋", + "GPU Voltage Table": "GPU 전압 테이블", + "GPU Custom Table (mV)": "GPU 사용자 정의 테이블(mV)", + "1075MHz without UV, 1152MHz on SLT": "UV 없이 1075MHz, SLT에서 1152MHz", + "or 1228MHz on HiOPT can cause ": "또는 HiOPT에서 1228MHz를 사용하면", + "permanent damage to your Switch!": "스위치가 영구적으로 손상될 수 있습니다!", + "921MHz without UV and 960MHz on": "UV가 없는 경우 921MHz, 켜진 경우에는 960MHz", + "SLT or HiOPT can cause ": "SLT 또는 HiOPT는 다음을 유발할 수 있습니다." +} diff --git a/Source/hoc-clk/overlay/lang/nl.json b/Source/hoc-clk/overlay/lang/nl.json new file mode 100644 index 00000000..1005d3c2 --- /dev/null +++ b/Source/hoc-clk/overlay/lang/nl.json @@ -0,0 +1,141 @@ +{ + "Information": "Informatie", + "IDDQ:": "IDDQ:", + "Module: ": "module:", + "sys-dock status:": "sys-dock-status:", + "SaltyNX status:": "SaltyNX-status:", + "RR Display status:": "RR Weergavestatus:", + "Wafer Position:": "Waferpositie:", + "Credits": "Kredieten", + "Developers": "Ontwikkelaars", + "Contributors": "Bijdragers", + "Testers": "Testers", + "Special Thanks": "Speciale dank", + "Unknown": "Onbekend", + "Installed": "Geïnstalleerd", + "Not Installed": "Niet geïnstalleerd", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "DE LICENTIE VOOR BIERWAREN", + "Default": "Standaard", + "Do Not Override": "Niet overschrijven", + "Disabled": "Uitgeschakeld", + "Enabled": "Ingeschakeld", + " \\ue0e3 Reset": "\\ue0e3 Opnieuw instellen", + "Display": "Weergave", + "Application changed\\n\\n": "Applicatie gewijzigd\\n\\n", + "The running application changed\\n\\n": "De actieve applicatie is gewijzigd\\n\\n", + "while editing was going on.": "terwijl er werd bewerkt.", + "Board": "Bord", + "%u.%u%u mV": "%u.%u%u mV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "Kan geen verbinding maken met hoc-clk sysmodule.\\n\\n", + "Please make sure everything is\\n\\n": "Zorg ervoor dat alles in orde is\\n\\n", + "correctly installed and enabled.": "correct geïnstalleerd en ingeschakeld.", + "Fatal error": "Fatale fout", + "Temporary Overrides ": "Tijdelijke overschrijvingen", + "Sleep Mode": "Slaapmodus", + "Stock": "Voorraad", + "Dev OC": "Ontwikkelaar OC", + "Boost Mode": "Boost-modus", + "Safe Max": "Veilig Max", + "Unsafe Max": "OnveiligMax", + "Absolute Max": "Absoluut Max", + "Handheld Safe Max": "Handkluis Max", + "Enable": "Inschakelen", + "Edit App Profile": "App-profiel bewerken", + "Edit Global Profile": "Globaal profiel bewerken", + "Temporary Overrides": "Tijdelijke overschrijvingen", + "Settings": "Instellingen", + "About": "Over", + "Compiling with minimal features": "Compileren met minimale functies", + "General Settings": "Algemene instellingen", + "Governor Settings": "Gouverneur instellingen", + "Safety Settings": "Veiligheidsinstellingen", + "Save KIP Settings": "Sla KIP-instellingen op", + "RAM Settings": "RAM-instellingen", + "CPU Settings": "CPU-instellingen", + "GPU Settings": "GPU-instellingen", + "Display Settings": "Weergave-instellingen", + "Experimental": "Experimenteel", + "GPU Scheduling Override Method": "Methode voor het overschrijven van GPU-planning", + "can be dangerous and may cause": "kan gevaarlijk zijn en kan veroorzaken", + "damage to your battery or charger!": "schade aan uw accu of lader!", + "Charge Current Override": "Laadstroom overschrijven", + "RAM Voltage Display Mode": "Weergavemodus RAM-spanning", + "Polling Interval": "Polling-interval", + "CPU Governor Minimum Frequency": "Minimale frequentie CPU-regelaar", + "refresh rates may cause stress": "vernieuwingsfrequenties kunnen stress veroorzaken", + "or damage to your display! ": "of schade aan uw display!", + "Proceed at your own risk!": "Ga verder op eigen risico!", + "Max Handheld Display": "Maximaal handheld-display", + "Display Clock": "Klok weergeven", + "Official Rating": "Officiële beoordeling", + "TDP Threshold": "TDP-drempel", + "Power": "Macht", + "Thermal Throttle Limit": "Thermische gaslimiet", + "HP Mode": "HP-modus", + "Default (Mariko)": "Standaard (Mariko)", + "Default (Erista)": "Standaard (Erista)", + "Rating": "Beoordeling", + "Safe Max (Mariko)": "Veilig Max (Mariko)", + "Safe Max (Erista)": "Veilige Max (Erista)", + "RAM VDD2 Voltage": "RAM VDD2-spanning", + "Voltage": "Spanning", + "RAM VDDQ Voltage": "RAM VDDQ-spanning", + "RAM Frequency Editor": "RAM-frequentie-editor", + "JEDEC.": "JEDEC.", + "High speedo needed!": "Hoge snelheid nodig!", + "3333MHz (Needs extreme Speedo/PLL)": "3333 MHz (vereist extreme snelheidsmeter/PLL)", + "3366MHz (Needs extreme Speedo/PLL)": "3366 MHz (vereist extreme snelheidsmeter/PLL)", + "3400MHz (Needs extreme Speedo/PLL)": "3400 MHz (vereist extreme snelheidsmeter/PLL)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (heeft een belachelijke snelheidsmeter/PLL nodig)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz (heeft een belachelijke snelheidsmeter/PLL nodig)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500 MHz (heeft een belachelijke snelheidsmeter/PLL nodig)", + "Ram Max Clock": "Ram Max-klok", + "RAM Latency Editor": "RAM-latentie-editor", + "RAM Timing Reductions": "RAM-timingreducties", + "Memory Timings": "Geheugentijden", + "Advanced": "Geavanceerd", + "t6 tRTW Fine Tune": "t6 tRTW Fijnafstemming", + "tRTW Fine Tune": "tRTW Fijnafstemming", + "t7 tWTR Fine Tune": "t7 tWTR Fijnafstemming", + "tWTR Fine Tune": "tWTR Fijnafstemming", + "Memory Latencies": "Geheugenlatenties", + "Read Latency": "Lees Latentie", + "Write Latency": "Schrijf latentie", + "CPU Boost Clock": "CPU-boostklok", + "CPU UV": "CPU-UV", + "CPU Unlock": "CPU-ontgrendeling", + "CPU VMIN": "CPU-VMIN", + "CPU Max Voltage": "Maximale CPU-spanning", + "CPU Max Clock": "CPU maximale klok", + "Extreme UV Table": "Extreme UV-tafel", + "CPU UV Table": "CPU UV-tabel", + "CPU Low UV": "CPU Lage UV", + "CPU High UV": "CPU Hoge UV", + "CPU Low VMIN": "CPU Lage VMIN", + "CPU High VMIN": "CPU Hoge VMIN", + "No Undervolt": "Geen ondervolt", + "SLT Table": "SLT-tabel", + "HiOPT Table": "HiOPT-tabel", + "GPU Undervolt Table": "GPU-undervolttabel", + "GPU Minimum Voltage": "GPU-minimale spanning", + "Calculate GPU Vmin": "Bereken GPU Vmin", + "GPU VMIN": "GPU-VMIN", + "GPU Maximum Voltage": "GPU maximale spanning", + "GPU Voltage Offset": "GPU-spanningsoffset", + "Do not override": "Niet overschrijven", + "Enabled (Default)": "Ingeschakeld (standaard)", + "96.6% limit": "96,6% limiet", + "99.7% limit": "99,7% limiet", + "GPU Scheduling Override": "GPU-planning negeren", + "Official Service": "Officiële dienst", + "GPU DVFS Mode": "GPU DVFS-modus", + "GPU DVFS Offset": "GPU DVFS-offset", + "GPU Voltage Table": "GPU-spanningstabel", + "GPU Custom Table (mV)": "Aangepaste GPU-tabel (mV)", + "1075MHz without UV, 1152MHz on SLT": "1075MHz zonder UV, 1152MHz op SLT", + "or 1228MHz on HiOPT can cause ": "of 1228MHz op HiOPT kan dit veroorzaken", + "permanent damage to your Switch!": "blijvende schade aan uw Switch!", + "921MHz without UV and 960MHz on": "921MHz zonder UV en 960MHz aan", + "SLT or HiOPT can cause ": "SLT of HiOPT kunnen dit veroorzaken" +} diff --git a/Source/hoc-clk/overlay/lang/pl.json b/Source/hoc-clk/overlay/lang/pl.json new file mode 100644 index 00000000..1233aa93 --- /dev/null +++ b/Source/hoc-clk/overlay/lang/pl.json @@ -0,0 +1,141 @@ +{ + "Information": "Informacje", + "IDDQ:": "IDDQ:", + "Module: ": "Moduł:", + "sys-dock status:": "stan sys-dock:", + "SaltyNX status:": "Stan SaltyNX:", + "RR Display status:": "Stan wyświetlacza:", + "Wafer Position:": "Pozycja wafla:", + "Credits": "Kredyty", + "Developers": "Deweloperzy", + "Contributors": "Współautorzy", + "Testers": "Testery", + "Special Thanks": "Specjalne podziękowania", + "Unknown": "Nieznany", + "Installed": "Zainstalowany", + "Not Installed": "Nie zainstalowano", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "LICENCJA NA WYROBY PIWNE", + "Default": "Domyślne", + "Do Not Override": "Nie zastępuj", + "Disabled": "Niepełnosprawny", + "Enabled": "Włączone", + " \\ue0e3 Reset": "\\ue0e3 Zresetuj", + "Display": "Wyświetlacz", + "Application changed\\n\\n": "Aplikacja została zmieniona\\n\\n", + "The running application changed\\n\\n": "Działająca aplikacja została zmieniona\\n\\n", + "while editing was going on.": "podczas gdy edycja była w toku.", + "Board": "Deska", + "%u.%u%u mV": "%u.%u%u mV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "Nie można połączyć się z modułem sysmodule hoc-clk.\\n\\n", + "Please make sure everything is\\n\\n": "Upewnij się, że wszystko jest\\n\\n", + "correctly installed and enabled.": "poprawnie zainstalowany i włączony.", + "Fatal error": "Fatalny błąd", + "Temporary Overrides ": "Tymczasowe nadpisania", + "Sleep Mode": "Tryb uśpienia", + "Stock": "Zapas", + "Dev OC": "Dev OC", + "Boost Mode": "Tryb wzmocnienia", + "Safe Max": "Bezpieczny maks", + "Unsafe Max": "Niebezpieczny maks", + "Absolute Max": "Absolutny maks", + "Handheld Safe Max": "Sejf ręczny Max", + "Enable": "Włącz", + "Edit App Profile": "Edytuj profil aplikacji", + "Edit Global Profile": "Edytuj profil globalny", + "Temporary Overrides": "Tymczasowe nadpisania", + "Settings": "Ustawienia", + "About": "O", + "Compiling with minimal features": "Kompilacja z minimalnymi funkcjami", + "General Settings": "Ustawienia ogólne", + "Governor Settings": "Ustawienia gubernatora", + "Safety Settings": "Ustawienia bezpieczeństwa", + "Save KIP Settings": "Zapisz ustawienia KIP", + "RAM Settings": "Ustawienia pamięci RAM", + "CPU Settings": "Ustawienia procesora", + "GPU Settings": "Ustawienia GPU", + "Display Settings": "Ustawienia wyświetlania", + "Experimental": "Eksperymentalny", + "GPU Scheduling Override Method": "Metoda obejścia harmonogramu GPU", + "can be dangerous and may cause": "może być niebezpieczne i powodować", + "damage to your battery or charger!": "uszkodzenie akumulatora lub ładowarki!", + "Charge Current Override": "Obejście prądu ładowania", + "RAM Voltage Display Mode": "Tryb wyświetlania napięcia RAM", + "Polling Interval": "Interwał odpytywania", + "CPU Governor Minimum Frequency": "Minimalna częstotliwość regulatora procesora", + "refresh rates may cause stress": "częstotliwości odświeżania mogą powodować stres", + "or damage to your display! ": "lub uszkodzenie wyświetlacza!", + "Proceed at your own risk!": "Postępuj na własne ryzyko!", + "Max Handheld Display": "Maksymalny wyświetlacz ręczny", + "Display Clock": "Wyświetl zegar", + "Official Rating": "Oficjalna ocena", + "TDP Threshold": "Próg TDP", + "Power": "Moc", + "Thermal Throttle Limit": "Limit przepustnicy termicznej", + "HP Mode": "Tryb HP", + "Default (Mariko)": "Domyślny (Mariko)", + "Default (Erista)": "Domyślny (Erista)", + "Rating": "Ocena", + "Safe Max (Mariko)": "Bezpieczny Max (Mariko)", + "Safe Max (Erista)": "Bezpieczny Max (Erista)", + "RAM VDD2 Voltage": "Napięcie pamięci RAM VDD2", + "Voltage": "Napięcie", + "RAM VDDQ Voltage": "Napięcie RAM VDDQ", + "RAM Frequency Editor": "Edytor częstotliwości RAM", + "JEDEC.": "JEDEC.", + "High speedo needed!": "Potrzebna duża prędkość!", + "3333MHz (Needs extreme Speedo/PLL)": "3333 MHz (wymaga ekstremalnego Speedo/PLL)", + "3366MHz (Needs extreme Speedo/PLL)": "3366 MHz (wymaga ekstremalnego Speedo/PLL)", + "3400MHz (Needs extreme Speedo/PLL)": "3400 MHz (wymaga ekstremalnego Speedo/PLL)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433 MHz (potrzebuje śmiesznego Speedo/PLL)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466 MHz (potrzebuje śmiesznego Speedo/PLL)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500 MHz (potrzebuje śmiesznego Speedo/PLL)", + "Ram Max Clock": "Zegar Ram Max", + "RAM Latency Editor": "Edytor opóźnień pamięci RAM", + "RAM Timing Reductions": "Zmniejszenie taktowania pamięci RAM", + "Memory Timings": "Taktowanie pamięci", + "Advanced": "Zaawansowane", + "t6 tRTW Fine Tune": "t6 tRTW Dostrój", + "tRTW Fine Tune": "tRTW Dostosuj", + "t7 tWTR Fine Tune": "t7 tWTR Dostosuj", + "tWTR Fine Tune": "tWTR Dostosuj", + "Memory Latencies": "Opóźnienia pamięci", + "Read Latency": "Przeczytaj Opóźnienie", + "Write Latency": "Opóźnienie zapisu", + "CPU Boost Clock": "Zegar wzmocnienia procesora", + "CPU UV": "Procesor UV", + "CPU Unlock": "Odblokowanie procesora", + "CPU VMIN": "Procesor VMIN", + "CPU Max Voltage": "Maksymalne napięcie procesora", + "CPU Max Clock": "Maks. zegar procesora", + "Extreme UV Table": "Ekstremalny stół UV", + "CPU UV Table": "Tabela UV procesora", + "CPU Low UV": "Niskie promieniowanie UV procesora", + "CPU High UV": "Wysokie promieniowanie UV procesora", + "CPU Low VMIN": "Niski poziom VMIN procesora", + "CPU High VMIN": "Wysoki poziom VMIN procesora", + "No Undervolt": "Brak Undervolta", + "SLT Table": "Stół SLT", + "HiOPT Table": "Stół HiOPT", + "GPU Undervolt Table": "Tabela niedoboru napięcia GPU", + "GPU Minimum Voltage": "Minimalne napięcie procesora graficznego", + "Calculate GPU Vmin": "Oblicz Vmin GPU", + "GPU VMIN": "VMIN GPU", + "GPU Maximum Voltage": "Maksymalne napięcie procesora graficznego", + "GPU Voltage Offset": "Przesunięcie napięcia GPU", + "Do not override": "Nie zastępuj", + "Enabled (Default)": "Włączone (domyślnie)", + "96.6% limit": "Limit 96,6%.", + "99.7% limit": "Limit 99,7%.", + "GPU Scheduling Override": "Zastąpienie harmonogramu GPU", + "Official Service": "Oficjalny serwis", + "GPU DVFS Mode": "Tryb DVFS procesora graficznego", + "GPU DVFS Offset": "Przesunięcie DVFS GPU", + "GPU Voltage Table": "Tabela napięć GPU", + "GPU Custom Table (mV)": "Tabela niestandardowa GPU (mV)", + "1075MHz without UV, 1152MHz on SLT": "1075 MHz bez UV, 1152 MHz na SLT", + "or 1228MHz on HiOPT can cause ": "lub 1228 MHz na HiOPT może powodować", + "permanent damage to your Switch!": "trwałe uszkodzenie Switcha!", + "921MHz without UV and 960MHz on": "921 MHz bez UV i 960 MHz włączone", + "SLT or HiOPT can cause ": "Przyczyną mogą być SLT lub HiOPT" +} diff --git a/Source/hoc-clk/overlay/lang/pt.json b/Source/hoc-clk/overlay/lang/pt.json new file mode 100644 index 00000000..fbddab17 --- /dev/null +++ b/Source/hoc-clk/overlay/lang/pt.json @@ -0,0 +1,141 @@ +{ + "Information": "Informação", + "IDDQ:": "IDDQ:", + "Module: ": "Módulo:", + "sys-dock status:": "status do dock do sistema:", + "SaltyNX status:": "Status do SaltyNX:", + "RR Display status:": "Status de exibição do RR:", + "Wafer Position:": "Posição da bolacha:", + "Credits": "Créditos", + "Developers": "Desenvolvedores", + "Contributors": "Colaboradores", + "Testers": "Testadores", + "Special Thanks": "Agradecimentos especiais", + "Unknown": "Desconhecido", + "Installed": "Instalado", + "Not Installed": "Não instalado", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "A LICENÇA DE CERVEJA", + "Default": "Padrão", + "Do Not Override": "Não substituir", + "Disabled": "Desativado", + "Enabled": "Habilitado", + " \\ue0e3 Reset": "\\ue0e3 Redefinir", + "Display": "Exibição", + "Application changed\\n\\n": "Aplicativo alterado\\n\\n", + "The running application changed\\n\\n": "O aplicativo em execução foi alterado\\n\\n", + "while editing was going on.": "enquanto a edição estava acontecendo.", + "Board": "Conselho", + "%u.%u%u mV": "%u.%u%u mV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "Não foi possível conectar-se ao sysmodule hoc-clk.\\n\\n", + "Please make sure everything is\\n\\n": "Verifique se tudo está\\n\\n", + "correctly installed and enabled.": "corretamente instalado e ativado.", + "Fatal error": "Erro fatal", + "Temporary Overrides ": "Substituições temporárias", + "Sleep Mode": "Modo de suspensão", + "Stock": "Estoque", + "Dev OC": "Desenvolvedor OC", + "Boost Mode": "Modo de reforço", + "Safe Max": "Máx. Seguro", + "Unsafe Max": "Máximo inseguro", + "Absolute Max": "Máximo absoluto", + "Handheld Safe Max": "Portátil Seguro Máx.", + "Enable": "Habilitar", + "Edit App Profile": "Editar perfil do aplicativo", + "Edit Global Profile": "Editar perfil global", + "Temporary Overrides": "Substituições temporárias", + "Settings": "Configurações", + "About": "Sobre", + "Compiling with minimal features": "Compilando com recursos mínimos", + "General Settings": "Configurações Gerais", + "Governor Settings": "Configurações do Governador", + "Safety Settings": "Configurações de segurança", + "Save KIP Settings": "Salvar configurações KIP", + "RAM Settings": "Configurações de RAM", + "CPU Settings": "Configurações de CPU", + "GPU Settings": "Configurações de GPU", + "Display Settings": "Configurações de exibição", + "Experimental": "Experimental", + "GPU Scheduling Override Method": "Método de substituição de agendamento de GPU", + "can be dangerous and may cause": "pode ser perigoso e causar", + "damage to your battery or charger!": "danos à sua bateria ou carregador!", + "Charge Current Override": "Substituição de corrente de carga", + "RAM Voltage Display Mode": "Modo de exibição de tensão RAM", + "Polling Interval": "Intervalo de votação", + "CPU Governor Minimum Frequency": "Frequência Mínima do Governador da CPU", + "refresh rates may cause stress": "taxas de atualização podem causar estresse", + "or damage to your display! ": "ou danos ao seu monitor!", + "Proceed at your own risk!": "Prossiga por sua conta e risco!", + "Max Handheld Display": "Visor portátil máximo", + "Display Clock": "Exibir relógio", + "Official Rating": "Classificação Oficial", + "TDP Threshold": "Limite de TDP", + "Power": "Poder", + "Thermal Throttle Limit": "Limite de aceleração térmica", + "HP Mode": "Modo HP", + "Default (Mariko)": "Padrão (Mariko)", + "Default (Erista)": "Padrão (Erista)", + "Rating": "Avaliação", + "Safe Max (Mariko)": "Máximo Seguro (Mariko)", + "Safe Max (Erista)": "Seguro Max (Erista)", + "RAM VDD2 Voltage": "Tensão RAM VDD2", + "Voltage": "Tensão", + "RAM VDDQ Voltage": "Tensão RAM VDDQ", + "RAM Frequency Editor": "Editor de frequência RAM", + "JEDEC.": "JEDEC.", + "High speedo needed!": "Alta velocidade necessária!", + "3333MHz (Needs extreme Speedo/PLL)": "3333MHz (precisa de Speedo/PLL extremo)", + "3366MHz (Needs extreme Speedo/PLL)": "3366 MHz (precisa de Speedo/PLL extremo)", + "3400MHz (Needs extreme Speedo/PLL)": "3400 MHz (precisa de Speedo/PLL extremo)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (precisa de Speedo/PLL ridículo)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466 MHz (precisa de Speedo/PLL ridículo)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500 MHz (precisa de Speedo/PLL ridículo)", + "Ram Max Clock": "Relógio máximo de Ram", + "RAM Latency Editor": "Editor de latência de RAM", + "RAM Timing Reductions": "Reduções de tempo de RAM", + "Memory Timings": "Tempos de memória", + "Advanced": "Avançado", + "t6 tRTW Fine Tune": "t6 tRTW Ajuste fino", + "tRTW Fine Tune": "Ajuste fino tRTW", + "t7 tWTR Fine Tune": "t7 tWTR Ajuste fino", + "tWTR Fine Tune": "Ajuste fino tWTR", + "Memory Latencies": "Latências de memória", + "Read Latency": "Latência de leitura", + "Write Latency": "Latência de gravação", + "CPU Boost Clock": "Relógio de aumento da CPU", + "CPU UV": "UV da CPU", + "CPU Unlock": "Desbloqueio da CPU", + "CPU VMIN": "CPU VMIN", + "CPU Max Voltage": "Tensão máxima da CPU", + "CPU Max Clock": "Relógio máximo da CPU", + "Extreme UV Table": "Mesa UV Extrema", + "CPU UV Table": "Tabela UV da CPU", + "CPU Low UV": "UV baixo da CPU", + "CPU High UV": "CPU alta UV", + "CPU Low VMIN": "CPU baixa VMIN", + "CPU High VMIN": "VMIN alto da CPU", + "No Undervolt": "Sem subtensão", + "SLT Table": "Tabela SLT", + "HiOPT Table": "Tabela HiOPT", + "GPU Undervolt Table": "Tabela de subtensão da GPU", + "GPU Minimum Voltage": "Tensão mínima da GPU", + "Calculate GPU Vmin": "Calcular Vmin da GPU", + "GPU VMIN": "GPU VMIN", + "GPU Maximum Voltage": "Tensão máxima da GPU", + "GPU Voltage Offset": "Compensação de tensão da GPU", + "Do not override": "Não substitua", + "Enabled (Default)": "Habilitado (padrão)", + "96.6% limit": "Limite de 96,6%", + "99.7% limit": "Limite de 99,7%", + "GPU Scheduling Override": "Substituição de agendamento de GPU", + "Official Service": "Serviço Oficial", + "GPU DVFS Mode": "Modo GPU DVFS", + "GPU DVFS Offset": "Deslocamento DVFS da GPU", + "GPU Voltage Table": "Tabela de tensão da GPU", + "GPU Custom Table (mV)": "Tabela personalizada de GPU (mV)", + "1075MHz without UV, 1152MHz on SLT": "1075 MHz sem UV, 1152 MHz em SLT", + "or 1228MHz on HiOPT can cause ": "ou 1228 MHz em HiOPT pode causar", + "permanent damage to your Switch!": "danos permanentes ao seu Switch!", + "921MHz without UV and 960MHz on": "921 MHz sem UV e 960 MHz ativado", + "SLT or HiOPT can cause ": "SLT ou HiOPT podem causar" +} diff --git a/Source/hoc-clk/overlay/lang/ru.json b/Source/hoc-clk/overlay/lang/ru.json new file mode 100644 index 00000000..4cfdb1bd --- /dev/null +++ b/Source/hoc-clk/overlay/lang/ru.json @@ -0,0 +1,141 @@ +{ + "Information": "Информация", + "IDDQ:": "ИДДК:", + "Module: ": "Модуль:", + "sys-dock status:": "Статус системной док-станции:", + "SaltyNX status:": "Статус SaltyNX:", + "RR Display status:": "Статус отображения RR:", + "Wafer Position:": "Позиция вафли:", + "Credits": "Кредиты", + "Developers": "Разработчики", + "Contributors": "Авторы", + "Testers": "Тестеры", + "Special Thanks": "Особая благодарность", + "Unknown": "Неизвестно", + "Installed": "Установлено", + "Not Installed": "Не установлено", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "ЛИЦЕНЗИЯ НА ПРОДАЖУ ПИВА", + "Default": "По умолчанию", + "Do Not Override": "Не переопределять", + "Disabled": "Отключено", + "Enabled": "Включено", + " \\ue0e3 Reset": "\\ue0e3 Сброс", + "Display": "Дисплей", + "Application changed\\n\\n": "Приложение изменено\\n\\n", + "The running application changed\\n\\n": "Запущенное приложение изменилось\\n\\n", + "while editing was going on.": "пока шло редактирование.", + "Board": "Совет", + "%u.%u%u mV": "%u.%u%u мВ", + "Could not connect to hoc-clk sysmodule.\\n\\n": "Не удалось подключиться к системному модулю hoc-clk.\\n\\n", + "Please make sure everything is\\n\\n": "Пожалуйста, убедитесь, что все в порядке\\n\\n", + "correctly installed and enabled.": "правильно установлен и включен.", + "Fatal error": "Неустранимая ошибка", + "Temporary Overrides ": "Временные переопределения", + "Sleep Mode": "Спящий режим", + "Stock": "Акции", + "Dev OC": "Разработчик OC", + "Boost Mode": "Режим повышения", + "Safe Max": "Сейф Макс", + "Unsafe Max": "Небезопасный Макс", + "Absolute Max": "Абсолютный Макс", + "Handheld Safe Max": "Ручной сейф Макс", + "Enable": "Включить", + "Edit App Profile": "Редактировать профиль приложения", + "Edit Global Profile": "Редактировать глобальный профиль", + "Temporary Overrides": "Временные переопределения", + "Settings": "Настройки", + "About": "О", + "Compiling with minimal features": "Компиляция с минимальными возможностями", + "General Settings": "Общие настройки", + "Governor Settings": "Настройки губернатора", + "Safety Settings": "Настройки безопасности", + "Save KIP Settings": "Сохранить настройки КИП", + "RAM Settings": "Настройки ОЗУ", + "CPU Settings": "Настройки процессора", + "GPU Settings": "Настройки графического процессора", + "Display Settings": "Настройки дисплея", + "Experimental": "Экспериментальный", + "GPU Scheduling Override Method": "Метод переопределения планирования графического процессора", + "can be dangerous and may cause": "может быть опасным и может вызвать", + "damage to your battery or charger!": "повреждение аккумулятора или зарядного устройства!", + "Charge Current Override": "Блокировка зарядного тока", + "RAM Voltage Display Mode": "Режим отображения напряжения ОЗУ", + "Polling Interval": "Интервал опроса", + "CPU Governor Minimum Frequency": "Минимальная частота регулятора ЦП", + "refresh rates may cause stress": "частота обновления может вызвать стресс", + "or damage to your display! ": "или повреждение дисплея!", + "Proceed at your own risk!": "Действуйте на свой страх и риск!", + "Max Handheld Display": "Макс. портативный дисплей", + "Display Clock": "Дисплей Часы", + "Official Rating": "Официальный рейтинг", + "TDP Threshold": "Порог TDP", + "Power": "Мощность", + "Thermal Throttle Limit": "Температурный предел дроссельной заслонки", + "HP Mode": "Режим HP", + "Default (Mariko)": "По умолчанию (Марико)", + "Default (Erista)": "По умолчанию (Эриста)", + "Rating": "Рейтинг", + "Safe Max (Mariko)": "Сейф Макс (Марико)", + "Safe Max (Erista)": "Сейф Макс (Эриста)", + "RAM VDD2 Voltage": "Напряжение ОЗУ VDD2", + "Voltage": "Напряжение", + "RAM VDDQ Voltage": "Напряжение ОЗУ VDDQ", + "RAM Frequency Editor": "Редактор частоты оперативной памяти", + "JEDEC.": "ДЖЕДЕК.", + "High speedo needed!": "Нужен высокий спидометр!", + "3333MHz (Needs extreme Speedo/PLL)": "3333 МГц (требуется экстремальный спидометр/PLL)", + "3366MHz (Needs extreme Speedo/PLL)": "3366 МГц (требуется экстремальный спидометр/PLL)", + "3400MHz (Needs extreme Speedo/PLL)": "3400 МГц (требуется экстремальный спидометр/PLL)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433 МГц (нужен нелепый спидометр/PLL)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466 МГц (нужен нелепый спидометр/PLL)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500 МГц (нужен нелепый спидометр/PLL)", + "Ram Max Clock": "Рам Макс Часы", + "RAM Latency Editor": "Редактор задержки оперативной памяти", + "RAM Timing Reductions": "Сокращение таймингов ОЗУ", + "Memory Timings": "Тайминги памяти", + "Advanced": "Расширенный", + "t6 tRTW Fine Tune": "t6 tRTW Точная настройка", + "tRTW Fine Tune": "tRTW Точная настройка", + "t7 tWTR Fine Tune": "t7 tWTR Тонкая настройка", + "tWTR Fine Tune": "tWTR Тонкая настройка", + "Memory Latencies": "Задержки памяти", + "Read Latency": "Задержка чтения", + "Write Latency": "Задержка записи", + "CPU Boost Clock": "Тактовая частота процессора", + "CPU UV": "УФ процессора", + "CPU Unlock": "Разблокировка процессора", + "CPU VMIN": "ЦП VMIN", + "CPU Max Voltage": "Максимальное напряжение процессора", + "CPU Max Clock": "Максимальная частота процессора", + "Extreme UV Table": "Стол для экстремального УФ-излучения", + "CPU UV Table": "UV-таблица процессора", + "CPU Low UV": "ЦП с низким УФ-излучением", + "CPU High UV": "Процессор с высоким УФ", + "CPU Low VMIN": "Низкий VMIN процессора", + "CPU High VMIN": "Высокий VMIN процессора", + "No Undervolt": "Нет Андервольта", + "SLT Table": "Таблица ТА", + "HiOPT Table": "Таблица HiOPT", + "GPU Undervolt Table": "Таблица пониженного напряжения графического процессора", + "GPU Minimum Voltage": "Минимальное напряжение графического процессора", + "Calculate GPU Vmin": "Рассчитать Vmin графического процессора", + "GPU VMIN": "Вмин графического процессора", + "GPU Maximum Voltage": "Максимальное напряжение графического процессора", + "GPU Voltage Offset": "Смещение напряжения графического процессора", + "Do not override": "Не переопределять", + "Enabled (Default)": "Включено (по умолчанию)", + "96.6% limit": "Предел 96,6%", + "99.7% limit": "лимит 99,7%", + "GPU Scheduling Override": "Переопределение планирования графического процессора", + "Official Service": "Официальная служба", + "GPU DVFS Mode": "Режим графического процессора DVFS", + "GPU DVFS Offset": "Смещение DVFS графического процессора", + "GPU Voltage Table": "Таблица напряжений графического процессора", + "GPU Custom Table (mV)": "Пользовательская таблица графического процессора (мВ)", + "1075MHz without UV, 1152MHz on SLT": "1075 МГц без УФ, 1152 МГц на SLT", + "or 1228MHz on HiOPT can cause ": "или 1228 МГц на HiOPT может привести к", + "permanent damage to your Switch!": "необратимое повреждение вашего коммутатора!", + "921MHz without UV and 960MHz on": "921 МГц без УФ и 960 МГц с включенным", + "SLT or HiOPT can cause ": "SLT или HiOPT могут вызвать" +} diff --git a/Source/hoc-clk/overlay/lang/uk.json b/Source/hoc-clk/overlay/lang/uk.json new file mode 100644 index 00000000..c0239f8a --- /dev/null +++ b/Source/hoc-clk/overlay/lang/uk.json @@ -0,0 +1,141 @@ +{ + "Information": "Інформація", + "IDDQ:": "IDDQ:", + "Module: ": "Модуль:", + "sys-dock status:": "стан sys-dock:", + "SaltyNX status:": "Статус SaltyNX:", + "RR Display status:": "Статус дисплея RR:", + "Wafer Position:": "Позиція пластини:", + "Credits": "Кредити", + "Developers": "Розробники", + "Contributors": "Дописувачі", + "Testers": "Тестери", + "Special Thanks": "Особлива подяка", + "Unknown": "Невідомий", + "Installed": "встановлено", + "Not Installed": "Не встановлено", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "ЛІЦЕНЗІЯ НА ПИВНИЙ ПОСУД", + "Default": "За замовчуванням", + "Do Not Override": "Не перевизначати", + "Disabled": "Вимкнено", + "Enabled": "Увімкнено", + " \\ue0e3 Reset": "\\ue0e3 Скидання", + "Display": "Дисплей", + "Application changed\\n\\n": "Додаток змінено\\n\\n", + "The running application changed\\n\\n": "Запущена програма змінена\\n\\n", + "while editing was going on.": "поки йшло редагування.", + "Board": "дошка", + "%u.%u%u mV": "%u.%u%u мВ", + "Could not connect to hoc-clk sysmodule.\\n\\n": "Не вдалося підключитися до системного модуля hoc-clk.\\n\\n", + "Please make sure everything is\\n\\n": "Переконайтеся, що все\\n\\n", + "correctly installed and enabled.": "правильно встановлено та включено.", + "Fatal error": "Фатальна помилка", + "Temporary Overrides ": "Тимчасові перевизначення", + "Sleep Mode": "Режим сну", + "Stock": "Запас", + "Dev OC": "Розробник OC", + "Boost Mode": "Режим посилення", + "Safe Max": "Безпечний макс", + "Unsafe Max": "Небезпечний макс", + "Absolute Max": "Абсолютний макс", + "Handheld Safe Max": "Портативний сейф Макс", + "Enable": "Увімкнути", + "Edit App Profile": "Редагувати профіль програми", + "Edit Global Profile": "Редагувати глобальний профіль", + "Temporary Overrides": "Тимчасові перевизначення", + "Settings": "Налаштування", + "About": "про", + "Compiling with minimal features": "Компіляція з мінімальними можливостями", + "General Settings": "Загальні налаштування", + "Governor Settings": "Налаштування губернатора", + "Safety Settings": "Налаштування безпеки", + "Save KIP Settings": "Зберегти налаштування KIP", + "RAM Settings": "Налаштування оперативної пам'яті", + "CPU Settings": "Налаштування ЦП", + "GPU Settings": "Налаштування GPU", + "Display Settings": "Налаштування дисплея", + "Experimental": "Експериментальний", + "GPU Scheduling Override Method": "Метод перевизначення планування GPU", + "can be dangerous and may cause": "може бути небезпечним і може спричинити", + "damage to your battery or charger!": "пошкодження акумулятора або зарядного пристрою!", + "Charge Current Override": "Перевизначення струму заряду", + "RAM Voltage Display Mode": "Режим відображення напруги RAM", + "Polling Interval": "Інтервал опитування", + "CPU Governor Minimum Frequency": "Мінімальна частота регулятора ЦП", + "refresh rates may cause stress": "частоти оновлення можуть викликати стрес", + "or damage to your display! ": "або пошкодження дисплея!", + "Proceed at your own risk!": "Продовжуйте на свій страх і ризик!", + "Max Handheld Display": "Максимальний портативний дисплей", + "Display Clock": "Відображення годинника", + "Official Rating": "Офіційний рейтинг", + "TDP Threshold": "Поріг TDP", + "Power": "потужність", + "Thermal Throttle Limit": "Термічний дросельний ліміт", + "HP Mode": "Режим HP", + "Default (Mariko)": "За замовчуванням (Маріко)", + "Default (Erista)": "За замовчуванням (Erista)", + "Rating": "Рейтинг", + "Safe Max (Mariko)": "Сейф Макс (Маріко)", + "Safe Max (Erista)": "Сейф Макс (Еріста)", + "RAM VDD2 Voltage": "Напруга RAM VDD2", + "Voltage": "Напруга", + "RAM VDDQ Voltage": "Напруга RAM VDDQ", + "RAM Frequency Editor": "Редактор частоти оперативної пам'яті", + "JEDEC.": "JEDEC.", + "High speedo needed!": "Потрібна висока швидкість!", + "3333MHz (Needs extreme Speedo/PLL)": "3333 МГц (потрібна екстремальна швидкість/PLL)", + "3366MHz (Needs extreme Speedo/PLL)": "3366 МГц (потрібна екстремальна швидкість/PLL)", + "3400MHz (Needs extreme Speedo/PLL)": "3400 МГц (потрібна екстремальна швидкість/PLL)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433 МГц (потрібен смішний Speedo/PLL)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466 МГц (потрібен смішний Speedo/PLL)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500 МГц (потрібен смішний Speedo/PLL)", + "Ram Max Clock": "Годинник Ram Max", + "RAM Latency Editor": "Редактор затримки оперативної пам'яті", + "RAM Timing Reductions": "Скорочення оперативної пам'яті", + "Memory Timings": "Таймінг пам'яті", + "Advanced": "Просунутий", + "t6 tRTW Fine Tune": "t6 tRTW Точне налаштування", + "tRTW Fine Tune": "Точне налаштування tRTW", + "t7 tWTR Fine Tune": "t7 tWTR Точне налаштування", + "tWTR Fine Tune": "Точна настройка tWTR", + "Memory Latencies": "Затримки пам'яті", + "Read Latency": "Прочитати затримку", + "Write Latency": "Затримка запису", + "CPU Boost Clock": "CPU Boost Clock", + "CPU UV": "CPU UV", + "CPU Unlock": "Розблокування ЦП", + "CPU VMIN": "CPU VMIN", + "CPU Max Voltage": "Максимальна напруга ЦП", + "CPU Max Clock": "Максимальна частота ЦП", + "Extreme UV Table": "Екстремальний ультрафіолетовий стіл", + "CPU UV Table": "CPU UV Таблиця", + "CPU Low UV": "CPU Low UV", + "CPU High UV": "CPU High UV", + "CPU Low VMIN": "CPU Low VMIN", + "CPU High VMIN": "CPU High VMIN", + "No Undervolt": "Без андервольта", + "SLT Table": "Таблиця SLT", + "HiOPT Table": "Таблиця HiOPT", + "GPU Undervolt Table": "Таблиця зниження напруги GPU", + "GPU Minimum Voltage": "Мінімальна напруга GPU", + "Calculate GPU Vmin": "Розрахувати GPU Vmin", + "GPU VMIN": "GPU VMIN", + "GPU Maximum Voltage": "Максимальна напруга GPU", + "GPU Voltage Offset": "Зсув напруги GPU", + "Do not override": "Не перевизначати", + "Enabled (Default)": "Увімкнено (за замовчуванням)", + "96.6% limit": "96,6% обмеження", + "99.7% limit": "Обмеження 99,7%.", + "GPU Scheduling Override": "Перевизначення планування GPU", + "Official Service": "Офіційний сервіс", + "GPU DVFS Mode": "Режим GPU DVFS", + "GPU DVFS Offset": "GPU DVFS Offset", + "GPU Voltage Table": "Таблиця напруги GPU", + "GPU Custom Table (mV)": "Спеціальна таблиця GPU (мВ)", + "1075MHz without UV, 1152MHz on SLT": "1075 МГц без УФ, 1152 МГц на SLT", + "or 1228MHz on HiOPT can cause ": "або 1228 МГц на HiOPT може спричинити", + "permanent damage to your Switch!": "незворотне пошкодження вашого комутатора!", + "921MHz without UV and 960MHz on": "921 МГц без УФ і 960 МГц увімкнено", + "SLT or HiOPT can cause ": "SLT або HiOPT можуть спричинити" +} diff --git a/Source/hoc-clk/overlay/lang/zh-cn.json b/Source/hoc-clk/overlay/lang/zh-cn.json new file mode 100644 index 00000000..53989929 --- /dev/null +++ b/Source/hoc-clk/overlay/lang/zh-cn.json @@ -0,0 +1,157 @@ +{ + "Information": "信息", + "IDDQ:": "IDDQ:", + "Module: ": "模块: ", + "sys-dock status:": "sys-dock 状态:", + "SaltyNX status:": "SaltyNX 状态:", + "RR Display status:": "RR 显示状态:", + "Wafer Position:": "晶圆位置:", + "Credits": "致谢", + "Developers": "开发者", + "Contributors": "贡献者", + "Testers": "测试者", + "Special Thanks": "特别感谢", + "Unknown": "未知", + "Installed": "已安装", + "Not Installed": "未安装", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "啤酒软件许可协议", + "Default": "默认", + "Do Not Override": "不修改", + "Disabled": "已禁用", + "Enabled": "已启用", + " \\ue0e3 Reset": " \\ue0e3 重置", + "Display": "显示", + "Application changed\\n\\n": "应用已变更\\n\\n", + "The running application changed\\n\\n": "正在运行的应用已变更\\n\\n", + "while editing was going on.": "编辑过程中发生变更。", + "Board": "主板", + "%u.%u%u mV": "%u.%u%u mV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "无法连接到 hoc-clk 系统模块。\\n\\n", + "Please make sure everything is\\n\\n": "请确保所有内容均已\\n\\n", + "correctly installed and enabled.": "正确安装并启用。", + "Fatal error": "致命错误", + "Temporary Overrides ": "临时配置 ", + "Sleep Mode": "睡眠模式", + "Stock": "原厂默认", + "Dev OC": "开发者超频", + "Boost Mode": "加速模式", + "Safe Max": "安全最大值", + "Unsafe Max": "危险最大值", + "Absolute Max": "绝对最大值", + "Handheld Safe Max": "掌机模式安全最大值", + "Enable": "启用", + "Edit App Profile": "编辑应用配置", + "Edit Global Profile": "编辑全局配置", + "Temporary Overrides": "临时配置", + "Settings": "设置", + "About": "关于", + "Compiling with minimal features": "以最小功能编译", + "General Settings": "通用设置", + "Governor Settings": "调频器设置", + "Safety Settings": "安全设置", + "Save KIP Settings": "保存 KIP 设置", + "RAM Settings": "内存设置", + "CPU Settings": "CPU 设置", + "GPU Settings": "GPU 设置", + "Display Settings": "显示设置", + "Experimental": "实验性功能", + "GPU Scheduling Override Method": "GPU 调度覆盖方式", + "can be dangerous and may cause": "存在风险,可能导致", + "damage to your battery or charger!": "电池或充电器损坏!", + "Charge Current Override": "充电电流修改", + "RAM Voltage Display Mode": "内存电压显示模式", + "Polling Interval": "刷新间隔", + "CPU Governor Minimum Frequency": "CPU 调频器最低频率", + "\uE150 Usage of unsafe display": "\uE150 不安全的显示屏", + "refresh rates may cause stress": "刷新率可能会对", + "or damage to your display! ": "显示屏造成压力或损坏! ", + "Proceed at your own risk!": "操作风险自负!", + "Max Handheld Display": "掌机模式最大显示率", + "Display Clock": "显示时钟", + "Official Rating": "官方额定值", + "TDP Threshold": "TDP 阈值", + "Power": "电源", + "Thermal Throttle Limit": "温控设置", + "HP Mode": "高性能模式", + "Default (Mariko)": "默认 (Mariko)", + "Default (Erista)": "默认 (Erista)", + "Rating": "额定值", + "Safe Max (Mariko)": "安全最大值 (Mariko)", + "Safe Max (Erista)": "安全最大值 (Erista)", + "RAM VDD2 Voltage": "内存 VDD2 电压", + "Voltage": "电压", + "RAM VDDQ Voltage": "内存 VDDQ 电压", + "RAM Frequency Editor": "内存频率编辑器", + "JEDEC.": "JEDEC 标准。", + "High speedo needed!": "需要高 Speedo 配置!", + "3333MHz (Needs extreme Speedo/PLL)": "3333MHz (需要极限 Speedo/PLL)", + "3366MHz (Needs extreme Speedo/PLL)": "3366MHz (需要极限 Speedo/PLL)", + "3400MHz (Needs extreme Speedo/PLL)": "3400MHz (需要极限 Speedo/PLL)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (需要极端 Speedo/PLL)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz (需要极端 Speedo/PLL)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500MHz (需要极端 Speedo/PLL)", + "Ram Max Clock": "内存最大频率", + "RAM Latency Editor": "内存延迟编辑器", + "RAM Timing Reductions": "内存时序优化", + "Memory Timings": "内存时序", + "Memory": "内存", + "mem": "内存", + "Governor": "调频器", + "Advanced": "高级", + "Docked": "底座模式", + "Handheld": "掌机模式", + "Charging": "充电中", + "USB Charger": "USB 充电器", + "PD Charger": "PD 充电器", + "Handheld TDP": "掌机模式功耗限制", + "Thermal Throttle": "温度控制", + "Uncapped Clocks": "解除频率上限", + "Soc DVB Shift": "SoC DVB偏移", + "Overwrite Boost Mode": "接管官方CPU调度", + "Display Refresh Rate Changing": "显示刷新率变更", + "t6 tRTW Fine Tune": "t6 tRTW 微调", + "tRTW Fine Tune": "tRTW 微调", + "t7 tWTR Fine Tune": "t7 tWTR 微调", + "tWTR Fine Tune": "tWTR 微调", + "Memory Latencies": "内存延迟", + "Read Latency": "读取延迟", + "Write Latency": "写入延迟", + "CPU Boost Clock": "CPU 超频频率", + "CPU UV": "CPU 降压", + "CPU Unlock": "CPU 解锁", + "CPU VMIN": "CPU 最低电压", + "CPU Max Voltage": "CPU 最大电压", + "CPU Max Clock": "CPU 最大频率", + "Extreme UV Table": "极限降压表", + "CPU UV Table": "CPU 降压表", + "CPU Low UV": "CPU 低压降压", + "CPU High UV": "CPU 高压降压", + "CPU Low VMIN": "CPU 低压最低电压", + "CPU High VMIN": "CPU 高压最低电压", + "No Undervolt": "不降压", + "SLT Table": "SLT 表", + "HiOPT Table": "HiOPT 表", + "GPU Undervolt Table": "GPU 降压表", + "GPU Minimum Voltage": "GPU 最低电压", + "Calculate GPU Vmin": "计算 GPU 最低电压", + "GPU VMIN": "GPU 最低电压", + "GPU Maximum Voltage": "GPU 最大电压", + "GPU Voltage Offset": "GPU 电压偏移", + "Do not override": "不修改", + "Enabled (Default)": "已启用 (默认)", + "96.6% limit": "96.6% 限制", + "99.7% limit": "99.7% 限制", + "GPU Scheduling Override": "GPU 调度修改", + "Official Service": "官方服务", + "GPU DVFS Mode": "GPU DVFS 模式", + "GPU DVFS Offset": "GPU DVFS 偏移", + "GPU Voltage Table": "GPU 电压表", + "GPU Custom Table (mV)": "GPU 自定义表 (mV)", + "\uE150 Setting GPU Clocks past": "\uE150 将 GPU 频率设置超过", + "1075MHz without UV, 1152MHz on SLT": "1075MHz 无降压,SLT 表下 1152MHz", + "or 1228MHz on HiOPT can cause ": "或 HiOPT 表下 1228MHz 可能导致 ", + "permanent damage to your Switch!": "Switch 永久损坏!", + "921MHz without UV and 960MHz on": "921MHz 无降压,SLT/HiOPT 表下 960MHz", + "SLT or HiOPT can cause ": "可能导致 " +} diff --git a/Source/hoc-clk/overlay/lang/zh-tw.json b/Source/hoc-clk/overlay/lang/zh-tw.json new file mode 100644 index 00000000..5a8a5dfa --- /dev/null +++ b/Source/hoc-clk/overlay/lang/zh-tw.json @@ -0,0 +1,141 @@ +{ + "Information": "資訊", + "IDDQ:": "國際電話號碼:", + "Module: ": "模組:", + "sys-dock status:": "系統塢站狀態:", + "SaltyNX status:": "SaltyNX 狀態:", + "RR Display status:": "RR 顯示狀態:", + "Wafer Position:": "晶圓位置:", + "Credits": "製作人員", + "Developers": "開發商", + "Contributors": "貢獻者", + "Testers": "測試人員", + "Special Thanks": "特別感謝", + "Unknown": "未知", + "Installed": "已安裝", + "Not Installed": "未安裝", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "啤酒製品許可證", + "Default": "預設", + "Do Not Override": "不要覆蓋", + "Disabled": "殘障人士", + "Enabled": "啟用", + " \\ue0e3 Reset": "\\ue0e3 重設", + "Display": "顯示", + "Application changed\\n\\n": "應用程式已更改\\n\\n", + "The running application changed\\n\\n": "正在運行的應用程式已更改\\n\\n", + "while editing was going on.": "當編輯正在進行時。", + "Board": "董事會", + "%u.%u%u mV": "%u.%u%u mV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "無法連接到 hoc-clk 系統模組。 \\n\\n", + "Please make sure everything is\\n\\n": "請確保一切正常\\n\\n", + "correctly installed and enabled.": "正確安裝並啟用。", + "Fatal error": "致命錯誤", + "Temporary Overrides ": "臨時覆蓋", + "Sleep Mode": "睡眠模式", + "Stock": "庫存", + "Dev OC": "開發OC", + "Boost Mode": "升壓模式", + "Safe Max": "安全最大值", + "Unsafe Max": "不安全最大值", + "Absolute Max": "絕對最大值", + "Handheld Safe Max": "手持式安全最大", + "Enable": "啟用", + "Edit App Profile": "編輯應用程式設定檔", + "Edit Global Profile": "編輯全域設定檔", + "Temporary Overrides": "臨時覆蓋", + "Settings": "設定", + "About": "關於", + "Compiling with minimal features": "使用最少的功能進行編譯", + "General Settings": "常規設定", + "Governor Settings": "調速器設定", + "Safety Settings": "安全設定", + "Save KIP Settings": "儲存 KIP 設定", + "RAM Settings": "記憶體設定", + "CPU Settings": "中央處理器設定", + "GPU Settings": "GPU設定", + "Display Settings": "顯示設定", + "Experimental": "實驗性的", + "GPU Scheduling Override Method": "GPU調度覆蓋方法", + "can be dangerous and may cause": "可能很危險並可能導致", + "damage to your battery or charger!": "損壞電池或充電器!", + "Charge Current Override": "充電電流覆蓋", + "RAM Voltage Display Mode": "RAM電壓顯示模式", + "Polling Interval": "輪詢間隔", + "CPU Governor Minimum Frequency": "CPU調速器最低頻率", + "refresh rates may cause stress": "刷新率可能會造成壓力", + "or damage to your display! ": "或損壞您的顯示器!", + "Proceed at your own risk!": "請自行承擔風險!", + "Max Handheld Display": "最大手持顯示器", + "Display Clock": "顯示時鐘", + "Official Rating": "官方評級", + "TDP Threshold": "TDP閾值", + "Power": "電源", + "Thermal Throttle Limit": "熱油門限制", + "HP Mode": "惠普模式", + "Default (Mariko)": "預設(真理子)", + "Default (Erista)": "預設(埃里斯塔)", + "Rating": "評級", + "Safe Max (Mariko)": "安全最大(真理子)", + "Safe Max (Erista)": "安全最大(埃里斯塔)", + "RAM VDD2 Voltage": "RAM VDD2 電壓", + "Voltage": "電壓", + "RAM VDDQ Voltage": "RAM VDDQ 電壓", + "RAM Frequency Editor": "RAM頻率編輯器", + "JEDEC.": "JEDEC。", + "High speedo needed!": "需要高速!", + "3333MHz (Needs extreme Speedo/PLL)": "3333MHz(需要極高的 Speedo/PLL)", + "3366MHz (Needs extreme Speedo/PLL)": "3366MHz(需要極高的 Speedo/PLL)", + "3400MHz (Needs extreme Speedo/PLL)": "3400MHz(需要極高的 Speedo/PLL)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz(需要荒謬的 Speedo/PLL)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz(需要荒謬的 Speedo/PLL)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500MHz(需要荒謬的 Speedo/PLL)", + "Ram Max Clock": "記憶體最大時鐘", + "RAM Latency Editor": "RAM 延遲編輯器", + "RAM Timing Reductions": "RAM 時序減少", + "Memory Timings": "記憶體時序", + "Advanced": "進階", + "t6 tRTW Fine Tune": "t6 tRTW 微調", + "tRTW Fine Tune": "tRTW 微調", + "t7 tWTR Fine Tune": "t7 tWTR 微調", + "tWTR Fine Tune": "tWTR 微調", + "Memory Latencies": "記憶體延遲", + "Read Latency": "讀取延遲", + "Write Latency": "寫入延遲", + "CPU Boost Clock": "CPU 升壓時鐘", + "CPU UV": "中央處理器紫外線", + "CPU Unlock": "CPU解鎖", + "CPU VMIN": "CPU最低電壓", + "CPU Max Voltage": "CPU最大電壓", + "CPU Max Clock": "CPU 最大時脈", + "Extreme UV Table": "極端紫外線表", + "CPU UV Table": "CPU UV表", + "CPU Low UV": "CPU低紫外線", + "CPU High UV": "CPU高紫外線", + "CPU Low VMIN": "CPU 低 VMIN", + "CPU High VMIN": "CPU 高 VMIN", + "No Undervolt": "無欠壓", + "SLT Table": "SLT表", + "HiOPT Table": "HiOPT表", + "GPU Undervolt Table": "GPU 欠壓表", + "GPU Minimum Voltage": "GPU最低電壓", + "Calculate GPU Vmin": "計算 GPU Vmin", + "GPU VMIN": "GPU VMIN", + "GPU Maximum Voltage": "GPU最大電壓", + "GPU Voltage Offset": "GPU電壓偏移", + "Do not override": "不要覆蓋", + "Enabled (Default)": "啟用(預設)", + "96.6% limit": "96.6%限制", + "99.7% limit": "99.7%限制", + "GPU Scheduling Override": "GPU 調度覆蓋", + "Official Service": "官方服務", + "GPU DVFS Mode": "GPU DVFS 模式", + "GPU DVFS Offset": "GPU DVFS 偏移", + "GPU Voltage Table": "GPU電壓表", + "GPU Custom Table (mV)": "GPU 自訂表 (mV)", + "1075MHz without UV, 1152MHz on SLT": "無 UV 時為 1075MHz,SLT 時為 1152MHz", + "or 1228MHz on HiOPT can cause ": "或 HiOPT 上的 1228MHz 可能會導致", + "permanent damage to your Switch!": "對您的 Switch 造成永久性損壞!", + "921MHz without UV and 960MHz on": "無 UV 時為 921MHz,開啟時為 960MHz", + "SLT or HiOPT can cause ": "SLT 或 HiOPT 可能會導致" +} diff --git a/Source/hoc-clk/overlay/scripts/make_logo.sh b/Source/hoc-clk/overlay/scripts/make_logo.sh new file mode 100644 index 00000000..bbd01a7f --- /dev/null +++ b/Source/hoc-clk/overlay/scripts/make_logo.sh @@ -0,0 +1,16 @@ +#!/bin/bash +set -e + +CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +DEST="$CURRENT_DIR/../data/logo_rgba.bin" +FONT="$CURRENT_DIR/../../manager/resources/fira/FiraSans-Medium-rnx.ttf" +FONT_SIZE="30.5" +TEXT="sys-clk" + +function render() { + convert -background transparent -colorspace RGB -depth 8 -fill white -font "$1" -pointsize "$2" "label:$3" "$4" +} + +render "$FONT" "$FONT_SIZE" "$TEXT" info: +render "$FONT" "$FONT_SIZE" "$TEXT" "RGBA:$DEST" \ No newline at end of file diff --git a/Source/hoc-clk/overlay/src/ipc.h b/Source/hoc-clk/overlay/src/ipc.h new file mode 100644 index 00000000..8186849d --- /dev/null +++ b/Source/hoc-clk/overlay/src/ipc.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* -------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * , , + * wrote this file. As long as you retain this notice you can do whatever you + * want with this stuff. If you meet any of us some day, and you think this + * stuff is worth it, you can buy us a beer in return. - The sys-clk authors + * -------------------------------------------------------------------------- + */ + + +#pragma once + +#if defined(__cplusplus) +#include "cpp_util.hpp" + +extern "C" +{ +#endif + +#include +#include + +#if defined(__cplusplus) +} +#endif diff --git a/Source/hoc-clk/overlay/src/main.cpp b/Source/hoc-clk/overlay/src/main.cpp new file mode 100644 index 00000000..ec2fd36a --- /dev/null +++ b/Source/hoc-clk/overlay/src/main.cpp @@ -0,0 +1,97 @@ +/* + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* -------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * , , + * wrote this file. As long as you retain this notice you can do whatever you + * want with this stuff. If you meet any of us some day, and you think this + * stuff is worth it, you can buy us a beer in return. - The sys-clk authors + * -------------------------------------------------------------------------- + */ + + +#define TESLA_INIT_IMPL +#include +#include "ui/gui/fatal_gui.h" +#include "ui/gui/main_gui.h" +#include "rgltr_services.h" // for extern Service g_rgltrSrv, etc. + +class AppOverlay : public tsl::Overlay +{ + public: + AppOverlay() {} + ~AppOverlay() {} + + //virtual void initServices() override { + // rgltrInitialize(); + //} + + virtual void exitServices() override { + rgltrExit(); + sysclkIpcExit(); + } + + virtual std::unique_ptr loadInitialGui() override + { + uint32_t apiVersion; + smInitialize(); + + tsl::hlp::ScopeGuard smGuard([] { smExit(); }); + + if(!sysclkIpcRunning()) + { + return initially( + "hoc-clk is not running.\n\n" + "\n" + "Please make sure it is correctly\n\n" + "installed and enabled.", + "" + ); + } + + if(R_FAILED(sysclkIpcInitialize()) || R_FAILED(sysclkIpcGetAPIVersion(&apiVersion))) + { + return initially( + "Could not connect to hoc-clk.\n\n" + "\n" + "Please make sure it is correctly\n\n" + "installed and enabled.", + "" + ); + } + + if(SYSCLK_IPC_API_VERSION != apiVersion) + { + return initially( + "Overlay not compatible with\n\n" + "the running hoc-clk version.\n\n" + "\n" + "Please make sure everything is\n\n" + "installed and up to date.", + "" + ); + } + + return initially(); + } +}; + +int main(int argc, char **argv) +{ + return tsl::loop(argc, argv); +} diff --git a/Source/hoc-clk/overlay/src/ui/elements/base_frame.h b/Source/hoc-clk/overlay/src/ui/elements/base_frame.h new file mode 100644 index 00000000..58f6025f --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/elements/base_frame.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* -------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * , , + * wrote this file. As long as you retain this notice you can do whatever you + * want with this stuff. If you meet any of us some day, and you think this + * stuff is worth it, you can buy us a beer in return. - The sys-clk authors + * -------------------------------------------------------------------------- + */ + + +#pragma once + +#include +#include "../gui/base_gui.h" + +class BaseFrame : public tsl::elm::HeaderOverlayFrame +{ + public: + BaseFrame(BaseGui* gui) : tsl::elm::HeaderOverlayFrame(234) { + this->gui = gui; + } + + void draw(tsl::gfx::Renderer* renderer) override + { + tsl::elm::HeaderOverlayFrame::draw(renderer); + this->gui->preDraw(renderer); + } + + protected: + BaseGui* gui; +}; diff --git a/Source/hoc-clk/overlay/src/ui/format.h b/Source/hoc-clk/overlay/src/ui/format.h new file mode 100644 index 00000000..008c6a40 --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/format.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* -------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * , , + * wrote this file. As long as you retain this notice you can do whatever you + * want with this stuff. If you meet any of us some day, and you think this + * stuff is worth it, you can buy us a beer in return. - The sys-clk authors + * -------------------------------------------------------------------------- + */ + + +#pragma once + +#include +#include +#include + +#define FREQ_DEFAULT_TEXT "Do not override" + +static inline std::string formatListFreqMHz(std::uint32_t mhz) +{ + if(mhz == 0) + { + return FREQ_DEFAULT_TEXT; + } + + char buf[10]; + return std::string(buf, snprintf(buf, sizeof(buf), "%u MHz", mhz)); +} + +static inline std::string formatListFreqHz(std::uint32_t hz) { return formatListFreqMHz(hz / 1000000); } diff --git a/Source/hoc-clk/overlay/src/ui/gui/about_gui.cpp b/Source/hoc-clk/overlay/src/ui/gui/about_gui.cpp new file mode 100644 index 00000000..f4632ba6 --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/gui/about_gui.cpp @@ -0,0 +1,309 @@ +/* + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +#include "about_gui.h" +#include "../format.h" +#include +#include +#include "cat.h" +#include "ult_ext.h" + +tsl::elm::ListItem* SpeedoItem = NULL; +tsl::elm::ListItem* IddqItem = NULL; +tsl::elm::ListItem* DramModule = NULL; +tsl::elm::ListItem* sysdockStatusItem = NULL; +tsl::elm::ListItem* saltyNXStatusItem = NULL; +tsl::elm::ListItem* RETROStatusItem = NULL; +tsl::elm::ListItem* waferCordsItem = NULL; + +ImageElement* CatImage = NULL; +HideableCategoryHeader* CatHeader = NULL; +HideableCustomDrawer* CatSpacer = NULL; +int lightosClickCount = 0; + +AboutGui::AboutGui() +{ + memset(strings, 0, sizeof(strings)); +} + +AboutGui::~AboutGui() +{ +} + +void AboutGui::listUI() +{ + this->listElement->addItem( + new tsl::elm::CategoryHeader("Information") + ); + + SpeedoItem = + new tsl::elm::ListItem("Speedo:"); + this->listElement->addItem(SpeedoItem); + + IddqItem = + new tsl::elm::ListItem("IDDQ:"); + this->listElement->addItem(IddqItem); + + DramModule = + new tsl::elm::ListItem("Module: "); + this->listElement->addItem(DramModule); + + if(!IsHoag()) { + sysdockStatusItem = + new tsl::elm::ListItem("sys-dock status:"); + this->listElement->addItem(sysdockStatusItem); + } + + saltyNXStatusItem = + new tsl::elm::ListItem("SaltyNX status:"); + this->listElement->addItem(saltyNXStatusItem); + + if(IsHoag()) { + RETROStatusItem = + new tsl::elm::ListItem("RR Display status:"); + this->listElement->addItem(RETROStatusItem); + } + + waferCordsItem = + new tsl::elm::ListItem("Wafer Position:"); + this->listElement->addItem(waferCordsItem); + + this->listElement->addItem( + new tsl::elm::CategoryHeader("Credits") + ); + + this->listElement->addItem( + new tsl::elm::CategoryHeader("Developers") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("Souldbminer") + ); + + // Create special clickable item for Lightos + auto lightosItem = new tsl::elm::ListItem("Lightos_"); + lightosItem->setClickListener([this](u64 keys) -> bool { + if (keys & HidNpadButton_A) { + lightosClickCount++; + if (lightosClickCount >= 10) { + if (CatImage != NULL) CatImage->setVisible(true); + if (CatHeader != NULL) CatHeader->setVisible(true); + if (CatSpacer != NULL) CatSpacer->setVisible(true); + } + return true; + } + return false; + }); + this->listElement->addItem(lightosItem); + + // ---- Contributors ---- + this->listElement->addItem( + new tsl::elm::CategoryHeader("Contributors") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("Dom") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("Blaise25") + ); + + // ---- Testers ---- + this->listElement->addItem( + new tsl::elm::CategoryHeader("Testers") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("Dom") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("Samybigio2011") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("Delta") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("Miki1305") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("Happy") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("Flopsider") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("Winnerboi77") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("Blaise25") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("WE1ZARD") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("Alvise") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("TDRR") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("agjeococh") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("Xenshen") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("Frost") + ); + + // ---- Special Thanks ---- + this->listElement->addItem( + new tsl::elm::CategoryHeader("Special Thanks") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("ScriesM - Atmosphere CFW") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("KazushiMe - Switch OC Suite") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("hanai3bi - Switch OC Suite & EOS") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("NaGaa95 - L4T-OC-Kernel") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("B3711 - EOS") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("RetroNX - sys-clk") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("b0rd2death - Ultrahand") + ); + + this->listElement->addItem( + new tsl::elm::ListItem("MasaGratoR - Status Monitor") + ); + + // Create cat elements but hide them initially + CatHeader = new HideableCategoryHeader("Cat"); + CatHeader->setVisible(false); + this->listElement->addItem(CatHeader); + + CatImage = new ImageElement(CAT_DATA, CAT_WIDTH, CAT_HEIGHT); + CatImage->setVisible(false); + this->listElement->addItem(CatImage); + + CatSpacer = new HideableCustomDrawer(75); + CatSpacer->setVisible(false); + this->listElement->addItem(CatSpacer); +} + +std::string AboutGui::formatRamModule() { + switch (this->context->dramID) { + case 0: return "HB-MGCH 4GB"; + case 4: return "HM-MGCH 6GB"; + case 7: return "HM-MGXX 8GB"; + + case 1: return "NLE 4GB"; + case 2: return "WT:C 4GB"; + + case 3: + case 5 ... 6: return "NEE 4GB"; + + case 8: + case 12: return "AM-MGCJ 4GB"; + case 9: + case 13: return "AM-MGCJ 8GB"; + + case 10: + case 14: return "NME 4GB"; + + case 11: + case 15: return "WT:E 4GB"; + + case 17: + case 19: + case 24: return "AA-MGCL 4GB"; + + case 18: + case 23: + case 28: return "AA-MGCL 8GB"; + + case 20 ... 22: return "AB-MGCL 4GB"; + + case 25 ... 27: return "WT:F 4GB"; + + case 29 ... 31: return "x267 4GB"; + + case 32 ... 34: return "WT:B 4GB"; + + default: return "Unknown"; + } +} + +void AboutGui::update() +{ + BaseMenuGui::update(); +} + +void AboutGui::refresh() +{ + BaseMenuGui::refresh(); + + if (!this->context) + return; + // Format strings once per refresh + sprintf(strings[0], "%u/%u/%u", this->context->speedos[HorizonOCSpeedo_CPU], this->context->speedos[HorizonOCSpeedo_GPU], this->context->speedos[HorizonOCSpeedo_SOC]); + // This is how hekate does it + sprintf(strings[1], "%u/%u/%u", this->context->iddq[HorizonOCSpeedo_CPU], this->context->iddq[HorizonOCSpeedo_GPU], this->context->iddq[HorizonOCSpeedo_SOC]); + SpeedoItem->setValue(strings[0]); + IddqItem->setValue(strings[1]); + DramModule->setValue(formatRamModule()); + if(!IsHoag()) + sysdockStatusItem->setValue(this->context->isSysDockInstalled ? "Installed" : "Not Installed"); + + saltyNXStatusItem->setValue(this->context->isSaltyNXInstalled ? "Installed" : "Not Installed"); + + if(IsHoag()) + RETROStatusItem->setValue(this->context->isUsingRetroSuper ? "Installed" : "Not Installed"); + + sprintf(strings[2], "X: %u Y: %u", this->context->waferX, this->context->waferY); + waferCordsItem->setValue(strings[2]); +} diff --git a/Source/hoc-clk/overlay/src/ui/gui/about_gui.h b/Source/hoc-clk/overlay/src/ui/gui/about_gui.h new file mode 100644 index 00000000..f2fef93a --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/gui/about_gui.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once +#include "../../ipc.h" +#include "base_menu_gui.h" +#include "freq_choice_gui.h" +#include "value_choice_gui.h" +#include "fatal_gui.h" +#include +#include + +class AboutGui : public BaseMenuGui +{ +protected: + char strings[32][32]; + +public: + AboutGui(); + ~AboutGui(); + + void listUI() override; + void update() override; + void refresh() override; + +private: + std::string formatRamModule(); +}; \ No newline at end of file diff --git a/Source/hoc-clk/overlay/src/ui/gui/app_profile_gui.cpp b/Source/hoc-clk/overlay/src/ui/gui/app_profile_gui.cpp new file mode 100644 index 00000000..44a903e7 --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/gui/app_profile_gui.cpp @@ -0,0 +1,468 @@ +/* + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* -------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * , , + * wrote this file. As long as you retain this notice you can do whatever you + * want with this stuff. If you meet any of us some day, and you think this + * stuff is worth it, you can buy us a beer in return. - The sys-clk authors + * -------------------------------------------------------------------------- + */ + + +#include "app_profile_gui.h" + +#include "../format.h" +#include "fatal_gui.h" +#include "labels.h" +AppProfileGui::AppProfileGui(std::uint64_t applicationId, SysClkTitleProfileList* profileList) +{ + this->applicationId = applicationId; + this->profileList = profileList; +} + +AppProfileGui::~AppProfileGui() +{ + delete this->profileList; +} + +void AppProfileGui::openFreqChoiceGui(tsl::elm::ListItem* listItem, SysClkProfile profile, SysClkModule module) +{ + std::uint32_t hzList[SYSCLK_FREQ_LIST_MAX]; + std::uint32_t hzCount; + Result rc = sysclkIpcGetFreqList(module, &hzList[0], SYSCLK_FREQ_LIST_MAX, &hzCount); + if(R_FAILED(rc)) + { + FatalGui::openWithResultCode("sysclkIpcGetFreqList", rc); + return; + } + std::map labels = {}; + + if (module == SysClkModule_CPU) { + bool isUsingUv = IsMariko() ? configList.values[KipConfigValue_marikoCpuUVHigh] : configList.values[KipConfigValue_eristaCpuUV]; + labels = IsMariko() ? (isUsingUv ? cpu_freq_label_m_uv : cpu_freq_label_m) : (isUsingUv ? cpu_freq_label_e_uv : cpu_freq_label_e); + } else if (module == SysClkModule_GPU) { + labels = IsMariko() ? *(marikoUV[configList.values[KipConfigValue_marikoGpuUV]]) : *(eristaUV[configList.values[KipConfigValue_eristaGpuUV]]); + } + tsl::changeTo(this->profileList->mhzMap[profile][module] * 1000000, hzList, hzCount, module, [this, listItem, profile, module](std::uint32_t hz) { + this->profileList->mhzMap[profile][module] = hz / 1000000; + listItem->setValue(formatListFreqMHz(this->profileList->mhzMap[profile][module])); + Result rc = sysclkIpcSetProfiles(this->applicationId, this->profileList); + if(R_FAILED(rc)) + { + FatalGui::openWithResultCode("sysclkIpcSetProfiles", rc); + return false; + } + + return true; + }, true, labels + ); +} + +void AppProfileGui::openValueChoiceGui( + tsl::elm::ListItem* listItem, + std::uint32_t currentValue, + const ValueRange& range, + const std::string& categoryName, + ValueChoiceListener listener, + const ValueThresholds& thresholds, + bool enableThresholds, + const std::map& labels, + const std::vector& namedValues, + bool showDefaultValue +) +{ + tsl::changeTo( + currentValue, + range, + categoryName, + listener, + thresholds, + enableThresholds, + labels, + namedValues, + showDefaultValue, + true + ); +} + +void AppProfileGui::addModuleListItem(SysClkProfile profile, SysClkModule module) +{ + tsl::elm::ListItem* listItem = new tsl::elm::ListItem(sysclkFormatModule(module, true)); + listItem->setValue(formatListFreqMHz(this->profileList->mhzMap[profile][module])); + listItem->setClickListener([this, listItem, profile, module](u64 keys) { + if((keys & HidNpadButton_A) == HidNpadButton_A) + { + this->openFreqChoiceGui(listItem, profile, module); + return true; + } + else if((keys & HidNpadButton_Y) == HidNpadButton_Y) + { + // Reset to "Default" (0 MHz) + this->profileList->mhzMap[profile][module] = 0; + listItem->setValue(formatListFreqMHz(0)); + + Result rc = sysclkIpcSetProfiles(this->applicationId, this->profileList); + if(R_FAILED(rc)) + { + FatalGui::openWithResultCode("sysclkIpcSetProfiles", rc); + return false; + } + return true; + } + return false; + }); + this->listElement->addItem(listItem); +} + +void AppProfileGui::addModuleListItemToggle(SysClkProfile profile, SysClkModule module) +{ + const char* moduleName = sysclkFormatModule(module, true); + std::uint32_t currentValue = this->profileList->mhzMap[profile][module]; + + tsl::elm::ToggleListItem* toggle = new tsl::elm::ToggleListItem(moduleName, currentValue != 0); + + toggle->setStateChangedListener([this, profile, module](bool state) { + this->profileList->mhzMap[profile][module] = state ? 1 : 0; + + Result rc = sysclkIpcSetProfiles(this->applicationId, this->profileList); + if(R_FAILED(rc)) + { + FatalGui::openWithResultCode("sysclkIpcSetProfiles", rc); + } + }); + + this->listElement->addItem(toggle); +} + +std::string AppProfileGui::formatValueDisplay( + std::uint32_t value, + const std::vector& namedValues, + const std::string& suffix, + std::uint32_t divisor, + int decimalPlaces +) +{ + if (value == 0) { + return FREQ_DEFAULT_TEXT; + } + + if (!namedValues.empty()) { + for (const auto& namedValue : namedValues) { + if (namedValue.value == value) { + return namedValue.name; + } + } + } + + char buf[32]; + if (decimalPlaces > 0) { + double displayValue = (double)value / divisor; + snprintf(buf, sizeof(buf), "%.*f%s", decimalPlaces, displayValue, suffix.c_str()); + } else { + snprintf(buf, sizeof(buf), "%u%s", value / divisor, suffix.c_str()); + } + return std::string(buf); +} + +void AppProfileGui::addModuleListItemValue( + SysClkProfile profile, + SysClkModule module, + const std::string& categoryName, + std::uint32_t min, + std::uint32_t max, + std::uint32_t step, + const std::string& suffix, + std::uint32_t divisor, + int decimalPlaces, + ValueThresholds thresholds, + std::vector namedValues, + bool showDefaultValue +) +{ + tsl::elm::ListItem* listItem = + new tsl::elm::ListItem(sysclkFormatModule(module, true)); + std::uint32_t storedValue = this->profileList->mhzMap[profile][module]; + + listItem->setValue(this->formatValueDisplay(storedValue, namedValues, suffix, divisor, decimalPlaces)); + + listItem->setClickListener( + [this, + listItem, + profile, + module, + categoryName, + min, + max, + step, + suffix, + divisor, + decimalPlaces, + thresholds, + namedValues, + showDefaultValue](u64 keys) + { + if ((keys & HidNpadButton_A) == HidNpadButton_A) + { + std::uint32_t currentValue = + this->profileList->mhzMap[profile][module] * divisor; + ValueRange range( + min, + max, + step, + suffix, + divisor, + decimalPlaces + ); + this->openValueChoiceGui( + listItem, + currentValue, + range, + categoryName, + [this, listItem, profile, module, divisor, suffix, decimalPlaces, thresholds, namedValues](std::uint32_t value) -> bool + { + this->profileList->mhzMap[profile][module] = value / divisor; + listItem->setValue(this->formatValueDisplay(value / divisor, namedValues, suffix, divisor, decimalPlaces)); + + Result rc = + sysclkIpcSetProfiles(this->applicationId, + this->profileList); + if (R_FAILED(rc)) + { + FatalGui::openWithResultCode( + "sysclkIpcSetProfiles", rc); + return false; + } + return true; + }, + thresholds, + false, + {}, + namedValues, + showDefaultValue + ); + return true; + } + else if ((keys & HidNpadButton_Y) == HidNpadButton_Y) + { + this->profileList->mhzMap[profile][module] = 0; + listItem->setValue(FREQ_DEFAULT_TEXT); + Result rc = + sysclkIpcSetProfiles(this->applicationId, + this->profileList); + if (R_FAILED(rc)) + { + FatalGui::openWithResultCode("sysclkIpcSetProfiles", rc); + return false; + } + return true; + } + return false; + }); + this->listElement->addItem(listItem); +} + +class GovernorProfileSubMenuGui : public BaseMenuGui { + uint64_t applicationId; + SysClkTitleProfileList* profileList; + SysClkProfile profile; +public: + GovernorProfileSubMenuGui(uint64_t appId, SysClkTitleProfileList* pList, SysClkProfile prof) + : applicationId(appId), profileList(pList), profile(prof) {} + + void listUI() override { + Result rc = sysclkIpcGetConfigValues(&configList); + if (R_FAILED(rc)) [[unlikely]] { + FatalGui::openWithResultCode("sysclkIpcGetConfigValues", rc); + return; + } + this->listElement->addItem(new tsl::elm::CategoryHeader("Governor")); + + static constexpr struct { const char* label; int shift; } kAll[] = { + {"CPU", 0}, {"GPU", 8}, {"VRR", 16} + }; + int count = configList.values[HorizonOCConfigValue_OverwriteRefreshRate] ? 3 : 2; + + for (int i = 0; i < count; i++) { + u8 cur = (this->profileList->mhzMap[this->profile][HorizonOCModule_Governor] >> kAll[i].shift) & 0xFF; + auto* bar = new tsl::elm::NamedStepTrackBar( + "", {"Do Not Override", "Disabled", "Enabled"}, + true, kAll[i].label + ); + bar->setProgress(cur); + int shift = kAll[i].shift; + bar->setValueChangedListener([this, shift](u8 value) { + u32& packed = this->profileList->mhzMap[this->profile][HorizonOCModule_Governor]; + packed = (packed & ~(0xFFu << shift)) | ((u32)value << shift); + Result rc = sysclkIpcSetProfiles(this->applicationId, this->profileList); + if (R_FAILED(rc)) FatalGui::openWithResultCode("sysclkIpcSetProfiles", rc); + }); + this->listElement->addItem(bar); + } + } +}; + +void AppProfileGui::addGovernorSection(SysClkProfile profile) { + auto* item = new tsl::elm::ListItem("Governor"); + item->setValue("\u2192"); // Right arrow + item->setClickListener([this, profile](u64 keys) { + if (keys & HidNpadButton_A) { + tsl::changeTo( + this->applicationId, this->profileList, profile + ); + return true; + } + return false; + }); + this->listElement->addItem(item); +} + +void AppProfileGui::addProfileUI(SysClkProfile profile) +{ + BaseMenuGui::refresh(); + if(!this->context) + return; + Result rc = sysclkIpcGetConfigValues(&configList); + if (R_FAILED(rc)) [[unlikely]] { + FatalGui::openWithResultCode("sysclkIpcGetConfigValues", rc); + return; + } + if((profile == SysClkProfile_Docked && IsHoag()) || profile == SysClkProfile_HandheldCharging) + return; + this->listElement->addItem(new tsl::elm::CategoryHeader(sysclkFormatProfile(profile, true) + std::string(" ") + ult::DIVIDER_SYMBOL + " \ue0e3 Reset")); + this->addModuleListItem(profile, SysClkModule_CPU); + this->addModuleListItem(profile, SysClkModule_GPU); + this->addModuleListItem(profile, SysClkModule_MEM); + #if IS_MINIMAL == 0 + ValueThresholds lcdThresholds(60, 65); + ValueThresholds DThresholdsOLED(120, 500); // nothing is dangerous, past 120hz you can get applet crashes + + if(configList.values[HorizonOCConfigValue_OverwriteRefreshRate]) { + if(profile != SysClkProfile_Docked) { + this->addModuleListItemValue(profile, HorizonOCModule_Display, "Display", IsAula() ? 45 : 40, configList.values[HorizonOCConfigValue_MaxDisplayClockH], this->context->isUsingRetroSuper ? 5 : 1, " Hz", 1, 0, lcdThresholds); + } else { + if(IsAula() && this->context->isSysDockInstalled) { + std::vector dockedFreqs = { + NamedValue("40 Hz", 40), + NamedValue("45 Hz", 45), + NamedValue("50 Hz", 50), + NamedValue("55 Hz", 55), + NamedValue("60 Hz", 60), + NamedValue("70 Hz", 70), + NamedValue("72 Hz", 72), + NamedValue("75 Hz", 75), + NamedValue("80 Hz", 80), + NamedValue("90 Hz", 90), + NamedValue("95 Hz", 95), + NamedValue("100 Hz", 100), + NamedValue("110 Hz", 110), + NamedValue("120 Hz", 120), + NamedValue("130 Hz", 130), + NamedValue("140 Hz", 140), + NamedValue("144 Hz", 144), + NamedValue("150 Hz", 150), + NamedValue("160 Hz", 160), + NamedValue("165 Hz", 165), + NamedValue("170 Hz", 170), + NamedValue("180 Hz", 180), + NamedValue("190 Hz", 190), + NamedValue("200 Hz", 200), + NamedValue("210 Hz", 210), + NamedValue("220 Hz", 220), + NamedValue("230 Hz", 230), + NamedValue("240 Hz", 240) + }; + + this->addModuleListItemValue(profile, HorizonOCModule_Display, "Display", 40, 240, 1, " Hz", 1, 0, DThresholdsOLED, dockedFreqs); + } else if (IsAula() && !this->context->isSysDockInstalled) { + std::vector dockedFreqsLimited = { + NamedValue("50 Hz", 50), + NamedValue("55 Hz", 55), + NamedValue("60 Hz", 60), + NamedValue("65 Hz", 65), + NamedValue("70 Hz", 70), + NamedValue("72 Hz", 72), + NamedValue("75 Hz", 75) + }; + + this->addModuleListItemValue(profile, HorizonOCModule_Display, "Display", 50, 75, 1, " Hz", 1, 0, DThresholdsOLED, dockedFreqsLimited); + } else { + std::vector dockedFreqsStandard = { + NamedValue("50 Hz", 50), + NamedValue("55 Hz", 55), + NamedValue("60 Hz", 60), + NamedValue("65 Hz", 65), + NamedValue("70 Hz", 70), + NamedValue("72 Hz", 72), + NamedValue("75 Hz", 75), + NamedValue("80 Hz", 80), + NamedValue("85 Hz", 85), + NamedValue("90 Hz", 90), + NamedValue("95 Hz", 95), + NamedValue("100 Hz", 100), + NamedValue("105 Hz", 105), + NamedValue("110 Hz", 110), + NamedValue("115 Hz", 115), + NamedValue("120 Hz", 120) + }; + this->addModuleListItemValue(profile, HorizonOCModule_Display, "Display", 50, 120, 1, " Hz", 1, 0, ValueThresholds(), dockedFreqsStandard); + } + } + } + #endif + this->addGovernorSection(profile); +} + +void AppProfileGui::listUI() +{ + this->addProfileUI(SysClkProfile_Docked); + this->addProfileUI(SysClkProfile_Handheld); + this->addProfileUI(SysClkProfile_HandheldCharging); + this->addProfileUI(SysClkProfile_HandheldChargingOfficial); + this->addProfileUI(SysClkProfile_HandheldChargingUSB); +} + +void AppProfileGui::changeTo(std::uint64_t applicationId) +{ + SysClkTitleProfileList* profileList = new SysClkTitleProfileList; + Result rc = sysclkIpcGetProfiles(applicationId, profileList); + if(R_FAILED(rc)) + { + delete profileList; + FatalGui::openWithResultCode("sysclkIpcGetProfiles", rc); + return; + } + + tsl::changeTo(applicationId, profileList); +} + +void AppProfileGui::update() +{ + BaseMenuGui::update(); + + if((this->context && this->applicationId != this->context->applicationId) && this->applicationId != SYSCLK_GLOBAL_PROFILE_TID) + { + tsl::changeTo( + "Application changed\n\n" + "\n" + "The running application changed\n\n" + "while editing was going on.", + "" + ); + } +} \ No newline at end of file diff --git a/Source/hoc-clk/overlay/src/ui/gui/app_profile_gui.h b/Source/hoc-clk/overlay/src/ui/gui/app_profile_gui.h new file mode 100644 index 00000000..e261282f --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/gui/app_profile_gui.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* -------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * , , + * wrote this file. As long as you retain this notice you can do whatever you + * want with this stuff. If you meet any of us some day, and you think this + * stuff is worth it, you can buy us a beer in return. - The sys-clk authors + * -------------------------------------------------------------------------- + */ +#pragma once +#include "../../ipc.h" +#include "base_menu_gui.h" +#include "freq_choice_gui.h" +#include "value_choice_gui.h" +#define SYSCLK_GLOBAL_PROFILE_TID 0xA111111111111111 +class AppProfileGui : public BaseMenuGui +{ + protected: + std::uint64_t applicationId; + SysClkTitleProfileList* profileList; + void openFreqChoiceGui(tsl::elm::ListItem* listItem, SysClkProfile profile, SysClkModule module); + void addModuleListItem(SysClkProfile profile, SysClkModule module); + void addModuleListItemToggle(SysClkProfile profile, SysClkModule module); + void openValueChoiceGui( + tsl::elm::ListItem* listItem, + std::uint32_t currentValue, + const ValueRange& range, + const std::string& categoryName, + ValueChoiceListener listener, + const ValueThresholds& thresholds = ValueThresholds(), + bool enableThresholds = false, + const std::map& labels = {}, + const std::vector& namedValues = {}, + bool showDefaultValue = true + ); + std::string formatValueDisplay( + std::uint32_t value, + const std::vector& namedValues, + const std::string& suffix, + std::uint32_t divisor, + int decimalPlaces + ); + void addModuleListItemValue( + SysClkProfile profile, + SysClkModule module, + const std::string& categoryName, + std::uint32_t min, + std::uint32_t max, + std::uint32_t step, + const std::string& suffix, + std::uint32_t divisor, + int decimalPlaces, + ValueThresholds thresholds, + std::vector namedValues = {}, + bool showDefaultValue = true + ); + void addGovernorSection(SysClkProfile profile); + void addProfileUI(SysClkProfile profile); + public: + AppProfileGui(std::uint64_t applicationId, SysClkTitleProfileList* profileList); + ~AppProfileGui(); + void listUI() override; + static void changeTo(std::uint64_t applicationId); + void update() override; +}; \ No newline at end of file diff --git a/Source/hoc-clk/overlay/src/ui/gui/base_gui.cpp b/Source/hoc-clk/overlay/src/ui/gui/base_gui.cpp new file mode 100644 index 00000000..b98865f7 --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/gui/base_gui.cpp @@ -0,0 +1,144 @@ +/* + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* -------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * , , + * wrote this file. As long as you retain this notice you can do whatever you + * want with this stuff. If you meet any of us some day, and you think this + * stuff is worth it, you can buy us a beer in return. - The sys-clk authors + * -------------------------------------------------------------------------- + */ + +#include "base_gui.h" + +#include "../elements/base_frame.h" + +#include +#include + +#define LOGO_X 20 +#define LOGO_Y 50 +#define LOGO_LABEL_FONT_SIZE 45 + +#define VERSION_X (LOGO_X + 250) +#define VERSION_Y (LOGO_Y - 40) +#define VERSION_FONT_SIZE 15 + +std::string getVersionString() { + char buf[0x100] = ""; + Result rc = sysclkIpcGetVersionString(buf, sizeof(buf)); + if (R_FAILED(rc) || buf[0] == '\0') { + return "Unknown"; + } + return std::string(buf); +} + +static constexpr tsl::Color dynamicLogoRGB1 = tsl::Color(0, 4, 8, 15); +static constexpr tsl::Color dynamicLogoRGB2 = tsl::Color(7, 15, 15, 15); +static constexpr tsl::Color STATIC_AQUA = tsl::Color(2, 10, 12, 15); +const std::string name = "Horizon OC Zeus"; + +static s32 drawDynamicUltraText( + tsl::gfx::Renderer* renderer, + s32 startX, + s32 y, + u32 fontSize, + const tsl::Color& staticColor, + bool useNotificationMethod = false) +{ + static constexpr double cycleDuration = 1.6; + + s32 currentX = startX; + + const u64 currentTime_ns = armTicksToNs(armGetSystemTick()); + const double timeNow = static_cast(currentTime_ns) / 1e9; + const double timeBase = fmod(timeNow, cycleDuration); + + const double waveScale = 2.0 * M_PI / cycleDuration; + + for (size_t i = 0; i < name.size(); i++) + { + char letter = name[i]; + if (letter == '\0') break; + + double phase = waveScale * (timeBase + i * 0.12); + + double raw = cos(phase); + double n = (raw + 1.0) * 0.5; + double s1 = n * n * (3.0 - 2.0 * n); + double blend = std::clamp(s1, 0.0, 1.0); + + double glow = (cos(phase * 1.5) + 1.0) * 0.5; + double brightness = 0.75 + glow * 0.25; + + u8 r = static_cast( + (dynamicLogoRGB1.r + (dynamicLogoRGB2.r - dynamicLogoRGB1.r) * blend) * brightness + ); + u8 g = static_cast( + (dynamicLogoRGB1.g + (dynamicLogoRGB2.g - dynamicLogoRGB1.g) * blend) * brightness + ); + u8 b = static_cast( + (dynamicLogoRGB1.b + (dynamicLogoRGB2.b - dynamicLogoRGB1.b) * blend) * brightness + ); + + r = std::clamp(r, 0, 15); + g = std::clamp(g, 0, 15); + b = std::clamp(b, 0, 15); + + bool lightning = (fmod(timeNow, 5.0) < 0.15); + if (lightning) { + r = std::min(r + 4, 15); + g = std::min(g + 4, 15); + b = std::min(b + 15, 15); + } + + tsl::Color color(r, g, b, 15); + + std::string ls(1, letter); + + if (useNotificationMethod) + currentX += renderer->drawNotificationString(ls, false, currentX, y, fontSize, color).first; + else + currentX += renderer->drawString(ls, false, currentX, y, fontSize, color).first; + } + + return currentX; +} + +void BaseGui::preDraw(tsl::gfx::Renderer* renderer) { + drawDynamicUltraText( + renderer, + LOGO_X, + LOGO_Y, + LOGO_LABEL_FONT_SIZE, + STATIC_AQUA, + false + ); +} + +tsl::elm::Element* BaseGui::createUI() +{ + BaseFrame* rootFrame = new BaseFrame(this); + rootFrame->setContent(this->baseUI()); + return rootFrame; +} + +void BaseGui::update() +{ + this->refresh(); +} \ No newline at end of file diff --git a/Source/hoc-clk/overlay/src/ui/gui/base_gui.h b/Source/hoc-clk/overlay/src/ui/gui/base_gui.h new file mode 100644 index 00000000..eca76c09 --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/gui/base_gui.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* -------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * , , + * wrote this file. As long as you retain this notice you can do whatever you + * want with this stuff. If you meet any of us some day, and you think this + * stuff is worth it, you can buy us a beer in return. - The sys-clk authors + * -------------------------------------------------------------------------- + */ + + +#pragma once + +#include +#include +#include +#include +#include + +#include "../style.h" +#include "../../ipc.h" + +class BaseGui : public tsl::Gui +{ + public: + BaseGui() {} + ~BaseGui() {} + virtual void preDraw(tsl::gfx::Renderer* renderer); + void update() override; + tsl::elm::Element* createUI() override; + virtual tsl::elm::Element* baseUI() = 0; + virtual void refresh() {} + private: +}; + + +extern std::string getVersionString(); diff --git a/Source/hoc-clk/overlay/src/ui/gui/base_menu_gui.cpp b/Source/hoc-clk/overlay/src/ui/gui/base_menu_gui.cpp new file mode 100644 index 00000000..fdef64f9 --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/gui/base_menu_gui.cpp @@ -0,0 +1,323 @@ +/* + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* -------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * , , + * wrote this file. As long as you retain this notice you can do whatever you + * want with this stuff. If you meet any of us some day, and you think this + * stuff is worth it, you can buy us a beer in return. - The sys-clk authors + * -------------------------------------------------------------------------- + */ + + +#include "base_menu_gui.h" +#include "fatal_gui.h" + +// Cache hardware model to avoid repeated syscalls + +BaseMenuGui::BaseMenuGui() : tempColors{ tsl::Color(0), tsl::Color(0), tsl::Color(0), tsl::Color(0), tsl::Color(0), tsl::Color(0), tsl::Color(0), } +{ + tsl::initializeThemeVars(); + this->context = nullptr; + this->lastContextUpdate = 0; + this->listElement = nullptr; + + + // Pre-cache hardware model during initialization + IsAula(); + IsMariko(); + IsHoag(); + + // Initialize display strings + memset(displayStrings, 0, sizeof(displayStrings)); +} + +BaseMenuGui::~BaseMenuGui() { + delete this->context; // delete handles nullptr automatically +} + +// Fast preDraw - just renders pre-computed strings +void BaseMenuGui::preDraw(tsl::gfx::Renderer* renderer) { + BaseGui::preDraw(renderer); + if(!this->context) [[unlikely]] return; + + // All constants pre-calculated and cached + static constexpr const char* const labels[] = { + "App ID", "Profile", "CPU", "GPU", "MEM", "SoC", "Board", "Skin", "Now", "Avg", "BAT", "PMIC", "FAN", "DISP", "FPS", "RES" + }; + + static constexpr u32 dataPositions[6] = {63-3+3, 200-1, 344-1-3, 200-1, 342-1, 321-1}; + + static u32 labelWidths[10]; + static bool positionsInitialized = false; + + if (!positionsInitialized) { + for (int i = 0; i < 10; i++) { + labelWidths[i] = renderer->getTextDimensions(labels[i], false, SMALL_TEXT_SIZE).first; + } + positionsInitialized = true; + } + static u32 positions[10] = {24-1, 310-labelWidths[1], 24-1, 192-labelWidths[3], 332-labelWidths[4], 24-1, 192 - labelWidths[6], 332-labelWidths[7], 192 - labelWidths[8], 332-labelWidths[9]}; + + static u32 maxProfileValueWidth = renderer->getTextDimensions("USB Charger", false, SMALL_TEXT_SIZE).first; // longest word + + u32 y = 91; + + // === TOP SECTION === + renderer->drawRoundedRect(14, 70-1, 420, 30+2, 12.0f, renderer->aWithOpacity(tsl::tableBGColor)); + + // App ID - use pre-formatted string + renderer->drawString(labels[0], false, positions[0], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); + renderer->drawString(displayStrings[0], false, positions[0] + labelWidths[0] + 9, y, SMALL_TEXT_SIZE, tsl::infoTextColor); + + // Profile - use pre-formatted string + renderer->drawString(labels[1], false, 423 - maxProfileValueWidth - labelWidths[1] - 9, y, SMALL_TEXT_SIZE, tsl::sectionTextColor); + renderer->drawString(displayStrings[1], false, 423 - maxProfileValueWidth, y, SMALL_TEXT_SIZE, tsl::infoTextColor); + + y += 38; // Direct assignment instead of += 38 + + // === MAIN DATA SECTION === + // renderer->drawRoundedRect(14, 106, 420, 156, 10.0f, renderer->aWithOpacity(tsl::tableBGColor)); + renderer->drawRoundedRect(14, 106, 420, 136, 12.0f, renderer->aWithOpacity(tsl::tableBGColor)); + // === FREQUENCY SECTION === + // Labels first (better cache locality) + renderer->drawString(labels[2], false, positions[2], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); + renderer->drawString(labels[3], false, positions[3], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); + renderer->drawString(labels[4], false, positions[4], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); + + renderer->drawString(displayStrings[5], false, dataPositions[0], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // CPU real + renderer->drawString(displayStrings[6], false, dataPositions[1], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // GPU real + renderer->drawString(displayStrings[7], false, dataPositions[2], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // MEM real + + // Current frequencies - use pre-formatted strings + // renderer->drawString(displayStrings[2], false, dataPositions[0], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // CPU + // renderer->drawString(displayStrings[3], false, dataPositions[1], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // GPU + // renderer->drawString(displayStrings[4], false, dataPositions[2], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // MEM + + y += 20; // Direct assignment (129 + 20) + + renderer->drawString(displayStrings[19], false, positions[2], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // CPU Usage + renderer->drawString(displayStrings[17], false, positions[3], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // GPU Usage + if(configList.values[HorizonOCConfigValue_RAMVoltUsageDisplayMode] == RamDisplayMode_VDD2Usage || configList.values[HorizonOCConfigValue_RAMVoltUsageDisplayMode] == RamDisplayMode_VDDQUsage) + renderer->drawString(displayStrings[18], false, positions[4], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // RAM Usage + // === REAL FREQUENCIES === + + // y += 20; // Direct assignment (149 + 20) + + // === VOLTAGES === + renderer->drawString(displayStrings[8], false, dataPositions[0], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // CPU voltage + renderer->drawString(displayStrings[9], false, dataPositions[1], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // GPU voltage + + renderer->drawStringWithColoredSections(displayStrings[10], false, {""}, configList.values[HorizonOCConfigValue_RAMVoltUsageDisplayMode] == RamDisplayMode_VDD2VDDQ ? dataPositions[5]-16 : dataPositions[2], y, SMALL_TEXT_SIZE, tsl::infoTextColor, tsl::separatorColor); + + y += 22; // Direct assignment (169 + 22) + + // === TEMPERATURE SECTION === + // Labels + renderer->drawString(labels[5], false, positions[5], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); + renderer->drawString(labels[6], false, positions[6]-1, y, SMALL_TEXT_SIZE, tsl::sectionTextColor); + renderer->drawString(labels[7], false, positions[7], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); + + // Temperatures with color - use pre-computed colors + renderer->drawString(displayStrings[11], false, dataPositions[0], y, SMALL_TEXT_SIZE, tempColors[SysClkThermalSensor_SOC]); // SOC + renderer->drawString(displayStrings[12], false, dataPositions[1], y, SMALL_TEXT_SIZE, tempColors[SysClkThermalSensor_PCB]); // PCB + renderer->drawString(displayStrings[13], false, dataPositions[2], y, SMALL_TEXT_SIZE, tempColors[SysClkThermalSensor_Skin]); // Skin + + y += 20; // Direct assignment (191 + 20) + + renderer->drawString(displayStrings[14], false, dataPositions[0], y, SMALL_TEXT_SIZE, tsl::infoTextColor); + + // Power labels and values + renderer->drawString(labels[8], false, positions[8]-1, y, SMALL_TEXT_SIZE, tsl::sectionTextColor); + renderer->drawString(labels[9], false, positions[9], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); + + renderer->drawString(displayStrings[15], false, dataPositions[3], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // Power now + renderer->drawString(displayStrings[16], false, dataPositions[4], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // Power avg + + y+=20; + + renderer->drawString(labels[10], false, positions[2], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); + + renderer->drawString(displayStrings[20], false, dataPositions[0], y, SMALL_TEXT_SIZE, tempColors[HorizonOCThermalSensor_Battery]); // Battery + + renderer->drawString(labels[13], false, positions[4], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); // disp label + + renderer->drawString(displayStrings[25], false, dataPositions[2], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // disp freq + + renderer->drawString(labels[12], false, positions[3], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); // fan label + + renderer->drawString(displayStrings[24], false, dataPositions[1], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // fan speed + + y+=20; + + renderer->drawString(displayStrings[21], false, dataPositions[0], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // Bat voltage + renderer->drawString(displayStrings[23], false, positions[2] - 2, y, SMALL_TEXT_SIZE, tsl::infoTextColor); // Bat Age + + if(this->context->isSaltyNXInstalled) { + + renderer->drawString(labels[15], false, positions[3], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); // RES label + renderer->drawString(displayStrings[27], false, dataPositions[1], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // RES + + renderer->drawString(labels[14], false, positions[4], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); // FPS label + renderer->drawString(displayStrings[26], false, dataPositions[2], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // FPS + + } + + y+=20; +} + +// Optimized refresh - now does all the string formatting once per second +void BaseMenuGui::refresh() +{ + const u64 ticks = armGetSystemTick(); + // Use cached comparison - 1 billion nanoseconds + if (armTicksToNs(ticks - this->lastContextUpdate) <= 1000000000UL) [[likely]] { + return; // Early exit for most calls + } + + this->lastContextUpdate = ticks; + + // Lazy context allocation + if (!this->context) [[unlikely]] { + this->context = new SysClkContext; + } + + // === SYSCLK CONTEXT UPDATE === + Result rc = sysclkIpcGetCurrentContext(this->context); + if (R_FAILED(rc)) [[unlikely]] { + FatalGui::openWithResultCode("sysclkIpcGetCurrentContext", rc); + return; + } + + rc = sysclkIpcGetConfigValues(&configList); + if (R_FAILED(rc)) [[unlikely]] { + FatalGui::openWithResultCode("sysclkIpcGetConfigValues", rc); + return; + } + // dockedHighestAllowedRefreshRate = this->context->maxDisplayFreq; + + // === FORMAT ALL DISPLAY STRINGS (once per second) === + // App ID (hex conversion) + sprintf(displayStrings[0], "%016lX", context->applicationId); + + // Profile + strcpy(displayStrings[1], sysclkFormatProfile(context->profile, true)); + + // Current frequencies + u32 hz = context->freqs[SysClkModule_CPU]; // CPU + sprintf(displayStrings[2], "%u.%u MHz", hz / 1000000U, (hz / 100000U) % 10U); + + hz = context->freqs[SysClkModule_GPU]; // GPU + sprintf(displayStrings[3], "%u.%u MHz", hz / 1000000U, (hz / 100000U) % 10U); + + hz = context->freqs[SysClkModule_MEM]; // MEM + sprintf(displayStrings[4], "%u.%u MHz", hz / 1000000U, (hz / 100000U) % 10U); + + // Real frequencies + hz = context->realFreqs[SysClkModule_CPU]; // CPU + sprintf(displayStrings[5], "%u.%u MHz", hz / 1000000U, (hz / 100000U) % 10U); + + hz = context->realFreqs[SysClkModule_GPU]; // GPU + sprintf(displayStrings[6], "%u.%u MHz", hz / 1000000U, (hz / 100000U) % 10U); + + hz = context->realFreqs[SysClkModule_MEM]; // MEM + sprintf(displayStrings[7], "%u.%u MHz", hz / 1000000U, (hz / 100000U) % 10U); + + // Voltages + sprintf(displayStrings[8], "%.1f mV", context->voltages[HocClkVoltage_CPU] / 1000.0); + sprintf(displayStrings[9], "%.1f mV", context->voltages[HocClkVoltage_GPU] / 1000.0); + + switch(configList.values[HorizonOCConfigValue_RAMVoltUsageDisplayMode]) { + case RamDisplayMode_VDD2VDDQ: + sprintf(displayStrings[10], "%u.%u%u mV", context->voltages[HocClkVoltage_EMCVDD2] / 1000U, (context->voltages[HocClkVoltage_EMCVDD2] % 1000U) / 100U, context->voltages[HocClkVoltage_EMCVDDQ_MarikoOnly] / 1000U); + break; + case RamDisplayMode_VDD2Usage: + sprintf(displayStrings[10], "%u.%u mV", context->voltages[HocClkVoltage_EMCVDD2] / 1000U, (context->voltages[HocClkVoltage_EMCVDD2] % 1000U) / 100U); + break; + case RamDisplayMode_VDDQUsage: + sprintf(displayStrings[10], "%u.%u mV", context->voltages[HocClkVoltage_EMCVDDQ_MarikoOnly] / 1000U, (context->voltages[HocClkVoltage_EMCVDDQ_MarikoOnly] % 1000U) / 100U); + break; + default: + strcpy(displayStrings[10], "N/A"); + break; + } + + // Temperatures and pre-compute colors + u32 millis = context->temps[SysClkThermalSensor_SOC]; // SOC + sprintf(displayStrings[11], "%u.%u °C", millis / 1000U, (millis % 1000U) / 100U); + tempColors[SysClkThermalSensor_SOC] = tsl::GradientColor(millis * 0.001f); + + millis = context->temps[SysClkThermalSensor_PCB]; // PCB + sprintf(displayStrings[12], "%u.%u °C", millis / 1000U, (millis % 1000U) / 100U); + tempColors[SysClkThermalSensor_PCB] = tsl::GradientColor(millis * 0.001f); + + millis = context->temps[SysClkThermalSensor_Skin]; // Skin + sprintf(displayStrings[13], "%u.%u °C", millis / 1000U, (millis % 1000U) / 100U); + tempColors[SysClkThermalSensor_Skin] = tsl::GradientColor(millis * 0.001f); + + // SOC voltage (if available) + sprintf(displayStrings[14], "%u mV", context->voltages[HocClkVoltage_SOC] / 1000U); + + // Power + sprintf(displayStrings[15], "%d mW", context->power[0]); // Now + sprintf(displayStrings[16], "%d mW", context->power[1]); // Avg + + sprintf(displayStrings[17], "%u%%", context->partLoad[HocClkPartLoad_GPU] / 10); + sprintf(displayStrings[18], "%u%%", context->partLoad[SysClkPartLoad_EMC] / 10); + sprintf(displayStrings[19], "%u%%", context->partLoad[HocClkPartLoad_CPUMax] / 10); + + millis = context->temps[HorizonOCThermalSensor_Battery]; // Battery + sprintf(displayStrings[20], "%u.%u °C", millis / 1000U, (millis % 1000U) / 100U); + tempColors[HorizonOCThermalSensor_Battery] = tsl::GradientColor(millis * 0.001f); + + sprintf(displayStrings[21], "%d mV", context->voltages[HocClkVoltage_Battery]); // BAT AVG + + sprintf(displayStrings[23], "%u%%", context->partLoad[HocClkPartLoad_BAT] / 1000); + + sprintf(displayStrings[24], "%u%%", context->partLoad[HocClkPartLoad_FAN]); + + sprintf(displayStrings[25], "%u Hz", context->realFreqs[HorizonOCModule_Display]); + if(this->context->isSaltyNXInstalled) { + if(context->fps == 254) { + strcpy(displayStrings[26], "N/A"); + } else { + memset(displayStrings[26], 0, sizeof(displayStrings[26])); + sprintf(displayStrings[26], "%u", context->fps); + } + } + + if(this->context->isSaltyNXInstalled) { + if(context->resolutionHeight == 0) { + strcpy(displayStrings[27], "N/A"); + } else { + memset(displayStrings[27], 0, sizeof(displayStrings[27])); + sprintf(displayStrings[27], "%up", context->resolutionHeight); + } + } + +} + +tsl::elm::Element* BaseMenuGui::baseUI() +{ + auto* list = new tsl::elm::List(); + list->addItem(new tsl::elm::CustomDrawer([](tsl::gfx::Renderer*, s32, s32, s32, s32) {}), 10); // add a bit of space + this->listElement = list; + this->listUI(); + + return list; +} \ No newline at end of file diff --git a/Source/hoc-clk/overlay/src/ui/gui/base_menu_gui.h b/Source/hoc-clk/overlay/src/ui/gui/base_menu_gui.h new file mode 100644 index 00000000..50650986 --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/gui/base_menu_gui.h @@ -0,0 +1,91 @@ +/* + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* -------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * , , + * wrote this file. As long as you retain this notice you can do whatever you + * want with this stuff. If you meet any of us some day, and you think this + * stuff is worth it, you can buy us a beer in return. - The sys-clk authors + * -------------------------------------------------------------------------- + */ + + +#pragma once + +#include "../../ipc.h" +#include "base_gui.h" + +class BaseMenuGui : public BaseGui +{ + protected: + + public: + // u8 dockedHighestAllowedRefreshRate = 60; + SysClkContext* context; + std::uint64_t lastContextUpdate; + SysClkConfigValueList configList; + bool g_hardwareModelCached = false; + bool g_isMariko = false; + bool g_isAula = false; + bool g_isHoag = false; + SetSysProductModel HWmodel = SetSysProductModel_Invalid; + + bool IsAula() { + if (!g_hardwareModelCached) { + setsysGetProductModel(&HWmodel); + g_hardwareModelCached = true; + } + g_isAula = (HWmodel == SetSysProductModel_Aula); + return g_isAula; + } + bool IsHoag() { + if (!g_hardwareModelCached) { + setsysGetProductModel(&HWmodel); + g_hardwareModelCached = true; + } + g_isHoag = (HWmodel == SetSysProductModel_Hoag); + return g_isHoag; + } + bool IsMariko() { + if (!g_hardwareModelCached) { + setsysGetProductModel(&HWmodel); + g_hardwareModelCached = true; + } + g_isMariko = (HWmodel == SetSysProductModel_Iowa || + HWmodel == SetSysProductModel_Hoag || + HWmodel == SetSysProductModel_Calcio || + HWmodel == SetSysProductModel_Aula); + + return g_isMariko; + } + + bool IsErista() { + return !IsMariko(); + } + BaseMenuGui(); + ~BaseMenuGui(); + void preDraw(tsl::gfx::Renderer* renderer) override; + tsl::elm::List* listElement; + tsl::elm::Element* baseUI() override; + void refresh() override; + virtual void listUI() = 0; + + private: + char displayStrings[32][32]; // Pre-formatted display strings + tsl::Color tempColors[7]; // Pre-computed temperature colors +}; diff --git a/Source/hoc-clk/overlay/src/ui/gui/cat.h b/Source/hoc-clk/overlay/src/ui/gui/cat.h new file mode 100644 index 00000000..a4c56ff4 --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/gui/cat.h @@ -0,0 +1,4118 @@ +/* + * Copyright (c) Lightos and Souldbminer + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +// this is a generated file, do not edit manually. +// cat.png - 96x128 +static const unsigned int CAT_WIDTH = 96; +static const unsigned int CAT_HEIGHT = 128; +static const unsigned char CAT_DATA[] = { + 0xE0, 0xE0, 0xDC, 0xFF, 0xE0, 0xE0, 0xDC, 0xFF, 0xE1, 0xE1, 0xDD, 0xFF, + 0xE1, 0xE1, 0xDD, 0xFF, 0xE1, 0xE1, 0xDD, 0xFF, 0xE1, 0xE1, 0xDD, 0xFF, + 0xE2, 0xE3, 0xDE, 0xFF, 0xE2, 0xE3, 0xDE, 0xFF, 0xE3, 0xE4, 0xDF, 0xFF, + 0xE3, 0xE4, 0xDF, 0xFF, 0xE3, 0xE4, 0xDF, 0xFF, 0xE3, 0xE4, 0xDF, 0xFF, + 0xE3, 0xE4, 0xDF, 0xFF, 0xE3, 0xE4, 0xDF, 0xFF, 0xE3, 0xE4, 0xDF, 0xFF, + 0xE3, 0xE4, 0xDF, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE7, 0xE7, 0xE5, 0xFF, + 0xE9, 0xE9, 0xE7, 0xFF, 0xE1, 0xE1, 0xDF, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, + 0xD6, 0xD7, 0xD4, 0xFF, 0x56, 0x57, 0x54, 0xFF, 0x15, 0x15, 0x13, 0xFF, + 0x15, 0x15, 0x13, 0xFF, 0x15, 0x15, 0x13, 0xFF, 0x14, 0x14, 0x12, 0xFF, + 0x14, 0x14, 0x12, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x13, 0xFF, + 0x13, 0x13, 0x13, 0xFF, 0x1F, 0x1F, 0x21, 0xFF, 0x39, 0x39, 0x3B, 0xFF, + 0xB7, 0xB7, 0xB7, 0xFF, 0xE5, 0xE5, 0xE5, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE9, 0xEA, 0xE5, 0xFF, 0xE9, 0xEA, 0xE3, 0xFF, 0xE3, 0xE4, 0xDD, 0xFF, + 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, + 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, + 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, + 0xE7, 0xE8, 0xE0, 0xFF, 0xE5, 0xE7, 0xDF, 0xFF, 0xE4, 0xE5, 0xDE, 0xFF, + 0xE4, 0xE5, 0xDE, 0xFF, 0xE5, 0xE7, 0xDF, 0xFF, 0xE5, 0xE7, 0xDF, 0xFF, + 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, 0xEA, 0xEB, 0xE6, 0xFF, + 0xD5, 0xD6, 0xD1, 0xFF, 0xEA, 0xEB, 0xE6, 0xFF, 0xD2, 0xD2, 0xCE, 0xFF, + 0xDF, 0xDD, 0xD9, 0xFF, 0xF0, 0xEF, 0xEB, 0xFF, 0xDF, 0xDD, 0xD9, 0xFF, + 0xE1, 0xE0, 0xDC, 0xFF, 0xDE, 0xDA, 0xD7, 0xFF, 0xD5, 0xD1, 0xCE, 0xFF, + 0xE7, 0xE3, 0xE0, 0xFF, 0xE9, 0xE5, 0xE1, 0xFF, 0xDA, 0xD3, 0xD1, 0xFF, + 0xEC, 0xE6, 0xE4, 0xFF, 0xEC, 0xE6, 0xE4, 0xFF, 0xDA, 0xD3, 0xD1, 0xFF, + 0xE0, 0xE0, 0xDC, 0xFF, 0xE0, 0xE0, 0xDC, 0xFF, 0xE1, 0xE1, 0xDD, 0xFF, + 0xE1, 0xE1, 0xDD, 0xFF, 0xE1, 0xE1, 0xDD, 0xFF, 0xE1, 0xE1, 0xDD, 0xFF, + 0xE2, 0xE3, 0xDE, 0xFF, 0xE2, 0xE3, 0xDE, 0xFF, 0xE3, 0xE4, 0xDF, 0xFF, + 0xE3, 0xE4, 0xDF, 0xFF, 0xE3, 0xE4, 0xDF, 0xFF, 0xE3, 0xE4, 0xDF, 0xFF, + 0xE3, 0xE4, 0xDF, 0xFF, 0xE3, 0xE4, 0xDF, 0xFF, 0xE3, 0xE4, 0xDF, 0xFF, + 0xE3, 0xE4, 0xDF, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE8, 0xE8, 0xE6, 0xFF, 0xE8, 0xE8, 0xE6, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE2, 0xE2, 0xE0, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE1, 0xE1, 0xDF, 0xFF, + 0xA3, 0xA3, 0xA1, 0xFF, 0x22, 0x22, 0x20, 0xFF, 0x15, 0x15, 0x13, 0xFF, + 0x15, 0x15, 0x13, 0xFF, 0x15, 0x15, 0x13, 0xFF, 0x14, 0x14, 0x12, 0xFF, + 0x14, 0x14, 0x12, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x13, 0xFF, + 0x13, 0x13, 0x13, 0xFF, 0x0A, 0x0A, 0x0C, 0xFF, 0x22, 0x21, 0x24, 0xFF, + 0x6A, 0x6A, 0x6A, 0xFF, 0xD3, 0xD3, 0xD3, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE9, 0xEA, 0xE5, 0xFF, 0xE9, 0xEA, 0xE3, 0xFF, 0xE3, 0xE4, 0xDD, 0xFF, + 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, + 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, + 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, + 0xE5, 0xE7, 0xDF, 0xFF, 0xE9, 0xEA, 0xE3, 0xFF, 0xEE, 0xEF, 0xE7, 0xFF, + 0xF0, 0xF1, 0xEA, 0xFF, 0xE5, 0xE7, 0xDF, 0xFF, 0xE1, 0xE2, 0xDB, 0xFF, + 0xDB, 0xDC, 0xD5, 0xFF, 0xDA, 0xDB, 0xD4, 0xFF, 0xD5, 0xD6, 0xD1, 0xFF, + 0xE7, 0xE7, 0xE3, 0xFF, 0xEA, 0xEB, 0xE6, 0xFF, 0xEE, 0xEE, 0xE9, 0xFF, + 0xE6, 0xE4, 0xE0, 0xFF, 0xE6, 0xE4, 0xE0, 0xFF, 0xD7, 0xD5, 0xD1, 0xFF, + 0xD2, 0xD0, 0xCC, 0xFF, 0x9F, 0x9B, 0x98, 0xFF, 0x9D, 0x99, 0x96, 0xFF, + 0xB7, 0xB2, 0xAF, 0xFF, 0xE7, 0xE3, 0xE0, 0xFF, 0xEB, 0xE5, 0xE3, 0xFF, + 0xD9, 0xD2, 0xD0, 0xFF, 0xD9, 0xD2, 0xD0, 0xFF, 0xEB, 0xE5, 0xE3, 0xFF, + 0xE1, 0xE1, 0xDD, 0xFF, 0xE1, 0xE1, 0xDD, 0xFF, 0xE1, 0xE1, 0xDD, 0xFF, + 0xE1, 0xE1, 0xDD, 0xFF, 0xE2, 0xE3, 0xDE, 0xFF, 0xE2, 0xE3, 0xDE, 0xFF, + 0xE3, 0xE4, 0xDF, 0xFF, 0xE3, 0xE4, 0xDF, 0xFF, 0xE3, 0xE4, 0xDF, 0xFF, + 0xE3, 0xE4, 0xDF, 0xFF, 0xE4, 0xE5, 0xE0, 0xFF, 0xE4, 0xE5, 0xE0, 0xFF, + 0xE4, 0xE5, 0xE0, 0xFF, 0xE4, 0xE5, 0xE0, 0xFF, 0xE4, 0xE5, 0xE0, 0xFF, + 0xE4, 0xE5, 0xE0, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xEA, 0xEA, 0xE8, 0xFF, 0xE8, 0xE8, 0xE6, 0xFF, + 0xE0, 0xE0, 0xDE, 0xFF, 0xEC, 0xED, 0xEA, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0x77, 0x77, 0x75, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x16, 0x17, 0x14, 0xFF, + 0x16, 0x17, 0x14, 0xFF, 0x16, 0x17, 0x14, 0xFF, 0x15, 0x15, 0x13, 0xFF, + 0x15, 0x15, 0x13, 0xFF, 0x14, 0x14, 0x12, 0xFF, 0x14, 0x14, 0x14, 0xFF, + 0x14, 0x14, 0x14, 0xFF, 0x0F, 0x0F, 0x11, 0xFF, 0x13, 0x12, 0x15, 0xFF, + 0x1E, 0x1E, 0x1E, 0xFF, 0x9D, 0x9D, 0x9D, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE9, 0xEA, 0xE5, 0xFF, 0xE9, 0xEA, 0xE3, 0xFF, 0xE3, 0xE4, 0xDD, 0xFF, + 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, + 0xE8, 0xE8, 0xE4, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, + 0xE8, 0xE8, 0xE4, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, + 0xE8, 0xE8, 0xE4, 0xFF, 0xE8, 0xE9, 0xE2, 0xFF, 0xE8, 0xE9, 0xE2, 0xFF, + 0xE8, 0xE9, 0xE2, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, + 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, 0xE8, 0xE9, 0xE2, 0xFF, + 0xE7, 0xE8, 0xE0, 0xFF, 0xE4, 0xE5, 0xDE, 0xFF, 0xE1, 0xE2, 0xDB, 0xFF, + 0xDD, 0xDE, 0xD7, 0xFF, 0xE0, 0xE1, 0xDA, 0xFF, 0xE5, 0xE7, 0xDF, 0xFF, + 0xEE, 0xEF, 0xE7, 0xFF, 0xF1, 0xF2, 0xEB, 0xFF, 0xF1, 0xF2, 0xED, 0xFF, + 0xF0, 0xF1, 0xEC, 0xFF, 0xD5, 0xD6, 0xD1, 0xFF, 0xE3, 0xE4, 0xDF, 0xFF, + 0xE0, 0xDE, 0xDA, 0xFF, 0xBB, 0xB9, 0xB5, 0xFF, 0x7D, 0x7B, 0x77, 0xFF, + 0x37, 0x36, 0x32, 0xFF, 0x24, 0x20, 0x1D, 0xFF, 0x73, 0x6F, 0x6C, 0xFF, + 0xC4, 0xC0, 0xBD, 0xFF, 0xEE, 0xEA, 0xE7, 0xFF, 0xF2, 0xEC, 0xE9, 0xFF, + 0xE0, 0xD9, 0xD7, 0xFF, 0xE0, 0xD9, 0xD7, 0xFF, 0xF2, 0xEC, 0xE9, 0xFF, + 0xE1, 0xE1, 0xDD, 0xFF, 0xE1, 0xE1, 0xDD, 0xFF, 0xE1, 0xE1, 0xDD, 0xFF, + 0xE1, 0xE1, 0xDD, 0xFF, 0xE2, 0xE3, 0xDE, 0xFF, 0xE2, 0xE3, 0xDE, 0xFF, + 0xE3, 0xE4, 0xDF, 0xFF, 0xE3, 0xE4, 0xDF, 0xFF, 0xE3, 0xE4, 0xDF, 0xFF, + 0xE3, 0xE4, 0xDF, 0xFF, 0xE4, 0xE5, 0xE0, 0xFF, 0xE4, 0xE5, 0xE0, 0xFF, + 0xE4, 0xE5, 0xE0, 0xFF, 0xE4, 0xE5, 0xE0, 0xFF, 0xE4, 0xE5, 0xE0, 0xFF, + 0xE4, 0xE5, 0xE0, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xDD, 0xDE, 0xDB, 0xFF, 0xE9, 0xE9, 0xE7, 0xFF, 0xEC, 0xED, 0xEA, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xDE, 0xDF, 0xDC, 0xFF, + 0x5C, 0x5C, 0x5A, 0xFF, 0x1C, 0x1C, 0x1A, 0xFF, 0x16, 0x17, 0x14, 0xFF, + 0x16, 0x17, 0x14, 0xFF, 0x16, 0x17, 0x14, 0xFF, 0x15, 0x15, 0x13, 0xFF, + 0x15, 0x15, 0x13, 0xFF, 0x14, 0x14, 0x12, 0xFF, 0x14, 0x14, 0x14, 0xFF, + 0x14, 0x14, 0x14, 0xFF, 0x13, 0x12, 0x15, 0xFF, 0x13, 0x12, 0x15, 0xFF, + 0x0C, 0x0C, 0x0C, 0xFF, 0x5D, 0x5D, 0x5D, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE9, 0xEA, 0xE5, 0xFF, 0xE9, 0xEA, 0xE3, 0xFF, 0xE3, 0xE4, 0xDD, 0xFF, + 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, + 0xE8, 0xE8, 0xE4, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, + 0xE8, 0xE8, 0xE4, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, + 0xE8, 0xE8, 0xE4, 0xFF, 0xE8, 0xE9, 0xE2, 0xFF, 0xE8, 0xE9, 0xE2, 0xFF, + 0xE8, 0xE9, 0xE2, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, + 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, + 0xE7, 0xE8, 0xE0, 0xFF, 0xE8, 0xE9, 0xE2, 0xFF, 0xE9, 0xEA, 0xE3, 0xFF, + 0xE9, 0xEA, 0xE3, 0xFF, 0xE8, 0xE9, 0xE2, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, + 0xE4, 0xE5, 0xDE, 0xFF, 0xE3, 0xE4, 0xDD, 0xFF, 0xD2, 0xD2, 0xCE, 0xFF, + 0xEC, 0xED, 0xE8, 0xFF, 0xDB, 0xDC, 0xD7, 0xFF, 0xB2, 0xB3, 0xAE, 0xFF, + 0x70, 0x6F, 0x6B, 0xFF, 0x31, 0x30, 0x2C, 0xFF, 0x1B, 0x1A, 0x16, 0xFF, + 0x10, 0x0E, 0x0A, 0xFF, 0x43, 0x3F, 0x3C, 0xFF, 0xB2, 0xAE, 0xAB, 0xFF, + 0xF4, 0xF0, 0xED, 0xFF, 0xE6, 0xE2, 0xDF, 0xFF, 0xD8, 0xD1, 0xCF, 0xFF, + 0xEA, 0xE4, 0xE1, 0xFF, 0xEA, 0xE4, 0xE1, 0xFF, 0xD8, 0xD1, 0xCF, 0xFF, + 0xE1, 0xE1, 0xDF, 0xFF, 0xE1, 0xE1, 0xDF, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, + 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE1, 0xE1, 0xDF, 0xFF, 0xE8, 0xE8, 0xE6, 0xFF, 0xEE, 0xEE, 0xEC, 0xFF, + 0xDE, 0xDF, 0xDC, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, 0xC4, 0xC4, 0xC2, 0xFF, + 0x30, 0x30, 0x2E, 0xFF, 0x11, 0x12, 0x0F, 0xFF, 0x17, 0x18, 0x15, 0xFF, + 0x17, 0x18, 0x15, 0xFF, 0x17, 0x18, 0x15, 0xFF, 0x16, 0x17, 0x14, 0xFF, + 0x16, 0x17, 0x14, 0xFF, 0x15, 0x15, 0x13, 0xFF, 0x15, 0x15, 0x15, 0xFF, + 0x15, 0x15, 0x15, 0xFF, 0x16, 0x16, 0x18, 0xFF, 0x0A, 0x0A, 0x0C, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x22, 0x22, 0x22, 0xFF, 0x9D, 0x9E, 0x9B, 0xFF, + 0xE9, 0xEA, 0xE5, 0xFF, 0xE4, 0xE5, 0xDE, 0xFF, 0xE1, 0xE2, 0xDB, 0xFF, + 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE8, 0xE8, 0xE4, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, + 0xE8, 0xE8, 0xE4, 0xFF, 0xE9, 0xEA, 0xE5, 0xFF, 0xE9, 0xEA, 0xE5, 0xFF, + 0xE8, 0xE8, 0xE4, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, + 0xE8, 0xE8, 0xE4, 0xFF, 0xE8, 0xE9, 0xE2, 0xFF, 0xE8, 0xE9, 0xE2, 0xFF, + 0xE8, 0xE9, 0xE2, 0xFF, 0xE8, 0xE9, 0xE2, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE5, 0xE6, 0xE1, 0xFF, 0xE5, 0xE6, 0xE1, 0xFF, 0xE5, 0xE6, 0xE1, 0xFF, + 0xD9, 0xD9, 0xD5, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, 0xEC, 0xED, 0xE8, 0xFF, + 0xE5, 0xE6, 0xE1, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, + 0xE5, 0xE6, 0xE1, 0xFF, 0xEF, 0xEF, 0xEB, 0xFF, 0xDB, 0xDC, 0xD7, 0xFF, + 0x94, 0x95, 0x90, 0xFF, 0x5A, 0x5A, 0x56, 0xFF, 0x33, 0x34, 0x2F, 0xFF, + 0x21, 0x1F, 0x1B, 0xFF, 0x25, 0x23, 0x1F, 0xFF, 0x28, 0x26, 0x22, 0xFF, + 0x46, 0x45, 0x41, 0xFF, 0xBB, 0xB7, 0xB4, 0xFF, 0xED, 0xE9, 0xE6, 0xFF, + 0xEA, 0xE6, 0xE3, 0xFF, 0xDC, 0xD8, 0xD5, 0xFF, 0xE0, 0xD9, 0xD7, 0xFF, + 0xDC, 0xD6, 0xD3, 0xFF, 0xE3, 0xDD, 0xDA, 0xFF, 0xF1, 0xEB, 0xE8, 0xFF, + 0xE1, 0xE1, 0xDF, 0xFF, 0xE1, 0xE1, 0xDF, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, + 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE8, 0xE8, 0xE6, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, 0xE8, 0xE8, 0xE6, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xEB, 0xEC, 0xE9, 0xFF, 0xAD, 0xAE, 0xAB, 0xFF, + 0x24, 0x24, 0x22, 0xFF, 0x0A, 0x0B, 0x08, 0xFF, 0x17, 0x18, 0x15, 0xFF, + 0x17, 0x18, 0x15, 0xFF, 0x17, 0x18, 0x15, 0xFF, 0x16, 0x17, 0x14, 0xFF, + 0x16, 0x17, 0x14, 0xFF, 0x15, 0x15, 0x13, 0xFF, 0x15, 0x15, 0x15, 0xFF, + 0x15, 0x15, 0x15, 0xFF, 0x10, 0x10, 0x12, 0xFF, 0x15, 0x15, 0x17, 0xFF, + 0x17, 0x17, 0x17, 0xFF, 0x15, 0x15, 0x15, 0xFF, 0x53, 0x53, 0x51, 0xFF, + 0xCF, 0xD0, 0xCB, 0xFF, 0xE5, 0xE7, 0xDF, 0xFF, 0xF1, 0xF2, 0xEB, 0xFF, + 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE8, 0xE8, 0xE4, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, + 0xE8, 0xE8, 0xE4, 0xFF, 0xE9, 0xEA, 0xE5, 0xFF, 0xE9, 0xEA, 0xE5, 0xFF, + 0xE8, 0xE8, 0xE4, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, + 0xE8, 0xE8, 0xE4, 0xFF, 0xE8, 0xE9, 0xE2, 0xFF, 0xE8, 0xE9, 0xE2, 0xFF, + 0xE8, 0xE9, 0xE2, 0xFF, 0xE8, 0xE9, 0xE2, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE5, 0xE6, 0xE1, 0xFF, 0xE5, 0xE6, 0xE1, 0xFF, 0xE5, 0xE6, 0xE1, 0xFF, + 0xE5, 0xE6, 0xE1, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, 0xE4, 0xE5, 0xE0, 0xFF, + 0xE0, 0xE0, 0xDC, 0xFF, 0xF5, 0xF5, 0xF0, 0xFF, 0xEF, 0xEF, 0xEB, 0xFF, + 0xD4, 0xD5, 0xD0, 0xFF, 0xB4, 0xB5, 0xB0, 0xFF, 0x77, 0x78, 0x73, 0xFF, + 0x2D, 0x2E, 0x29, 0xFF, 0x18, 0x19, 0x14, 0xFF, 0x1D, 0x1E, 0x19, 0xFF, + 0x0E, 0x0D, 0x09, 0xFF, 0x0E, 0x0D, 0x09, 0xFF, 0x2E, 0x2C, 0x28, 0xFF, + 0x9B, 0x9A, 0x96, 0xFF, 0xDD, 0xD9, 0xD6, 0xFF, 0xE3, 0xDF, 0xDC, 0xFF, + 0xDC, 0xD8, 0xD5, 0xFF, 0xE0, 0xDC, 0xD9, 0xFF, 0xF6, 0xEF, 0xED, 0xFF, + 0xF5, 0xEE, 0xEC, 0xFF, 0xE8, 0xE1, 0xDF, 0xFF, 0xD5, 0xCF, 0xCC, 0xFF, + 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, + 0xE2, 0xE2, 0xE0, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xEA, 0xEA, 0xE8, 0xFF, 0xDE, 0xDF, 0xDC, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE8, 0xE8, 0xE6, 0xFF, 0xEB, 0xEC, 0xE9, 0xFF, 0x8C, 0x8C, 0x8A, 0xFF, + 0x1E, 0x1F, 0x1C, 0xFF, 0x16, 0x17, 0x14, 0xFF, 0x18, 0x19, 0x16, 0xFF, + 0x18, 0x19, 0x16, 0xFF, 0x18, 0x19, 0x16, 0xFF, 0x17, 0x18, 0x15, 0xFF, + 0x17, 0x18, 0x15, 0xFF, 0x16, 0x17, 0x14, 0xFF, 0x16, 0x16, 0x16, 0xFF, + 0x16, 0x16, 0x16, 0xFF, 0x11, 0x11, 0x13, 0xFF, 0x1A, 0x19, 0x1C, 0xFF, + 0x18, 0x18, 0x18, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x26, 0x27, 0x24, 0xFF, + 0xA0, 0xA0, 0x9B, 0xFF, 0xE1, 0xE2, 0xDB, 0xFF, 0xEB, 0xEC, 0xE5, 0xFF, + 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE8, 0xE8, 0xE4, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, 0xE9, 0xEA, 0xE5, 0xFF, + 0xE9, 0xEA, 0xE5, 0xFF, 0xEA, 0xEB, 0xE4, 0xFF, 0xEA, 0xEB, 0xE4, 0xFF, + 0xE9, 0xEA, 0xE3, 0xFF, 0xE9, 0xEA, 0xE3, 0xFF, 0xE9, 0xEA, 0xE3, 0xFF, + 0xE9, 0xEA, 0xE3, 0xFF, 0xE9, 0xEA, 0xE3, 0xFF, 0xE9, 0xEA, 0xE3, 0xFF, + 0xE9, 0xEA, 0xE3, 0xFF, 0xE8, 0xE9, 0xE2, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE5, 0xE6, 0xE1, 0xFF, 0xE5, 0xE6, 0xE1, 0xFF, 0xE5, 0xE6, 0xE1, 0xFF, + 0xEB, 0xEC, 0xE7, 0xFF, 0xF2, 0xF3, 0xEE, 0xFF, 0xEE, 0xEE, 0xE9, 0xFF, + 0xE1, 0xE1, 0xDD, 0xFF, 0xD0, 0xD1, 0xCC, 0xFF, 0xA4, 0xA5, 0xA0, 0xFF, + 0x63, 0x64, 0x5F, 0xFF, 0x30, 0x31, 0x2C, 0xFF, 0x10, 0x11, 0x0C, 0xFF, + 0x07, 0x08, 0x03, 0xFF, 0x1A, 0x1A, 0x16, 0xFF, 0x30, 0x31, 0x2C, 0xFF, + 0x17, 0x15, 0x11, 0xFF, 0x1C, 0x1B, 0x17, 0xFF, 0x63, 0x62, 0x5E, 0xFF, + 0xC4, 0xC2, 0xBE, 0xFF, 0xE8, 0xE7, 0xE3, 0xFF, 0xE1, 0xE0, 0xDC, 0xFF, + 0xE6, 0xE4, 0xE0, 0xFF, 0xE7, 0xE3, 0xE0, 0xFF, 0xD9, 0xD5, 0xD2, 0xFF, + 0xD0, 0xCC, 0xC9, 0xFF, 0xB7, 0xB2, 0xAF, 0xFF, 0x9C, 0x98, 0x94, 0xFF, + 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, + 0xE2, 0xE2, 0xE0, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE8, 0xE8, 0xE6, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, 0xE8, 0xE8, 0xE6, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xD3, 0xD3, 0xD1, 0xFF, 0x63, 0x63, 0x61, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x1D, 0x1D, 0x1B, 0xFF, 0x18, 0x19, 0x16, 0xFF, + 0x18, 0x19, 0x16, 0xFF, 0x18, 0x19, 0x16, 0xFF, 0x17, 0x18, 0x15, 0xFF, + 0x17, 0x18, 0x15, 0xFF, 0x16, 0x17, 0x14, 0xFF, 0x16, 0x16, 0x16, 0xFF, + 0x16, 0x16, 0x16, 0xFF, 0x18, 0x18, 0x1A, 0xFF, 0x17, 0x17, 0x19, 0xFF, + 0x13, 0x13, 0x13, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x14, 0x14, 0x12, 0xFF, + 0x5D, 0x5E, 0x59, 0xFF, 0xDA, 0xDB, 0xD4, 0xFF, 0xDA, 0xDB, 0xD4, 0xFF, + 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE8, 0xE0, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE8, 0xE8, 0xE4, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, 0xE9, 0xEA, 0xE5, 0xFF, + 0xE9, 0xEA, 0xE5, 0xFF, 0xEA, 0xEB, 0xE4, 0xFF, 0xEA, 0xEB, 0xE4, 0xFF, + 0xE9, 0xEA, 0xE3, 0xFF, 0xE9, 0xEA, 0xE3, 0xFF, 0xE9, 0xEA, 0xE3, 0xFF, + 0xE9, 0xEA, 0xE3, 0xFF, 0xE9, 0xEA, 0xE3, 0xFF, 0xE9, 0xEA, 0xE3, 0xFF, + 0xE9, 0xEA, 0xE3, 0xFF, 0xE8, 0xE9, 0xE2, 0xFF, 0xE7, 0xE7, 0xE3, 0xFF, + 0xE5, 0xE6, 0xE1, 0xFF, 0xE5, 0xE6, 0xE1, 0xFF, 0xE5, 0xE6, 0xE1, 0xFF, + 0xD6, 0xD7, 0xD2, 0xFF, 0xE0, 0xE0, 0xDC, 0xFF, 0xC5, 0xC6, 0xC1, 0xFF, + 0x97, 0x98, 0x93, 0xFF, 0x57, 0x58, 0x53, 0xFF, 0x31, 0x32, 0x2D, 0xFF, + 0x24, 0x25, 0x20, 0xFF, 0x18, 0x19, 0x14, 0xFF, 0x13, 0x13, 0x0F, 0xFF, + 0x2D, 0x2E, 0x29, 0xFF, 0x0D, 0x0E, 0x09, 0xFF, 0x10, 0x11, 0x0C, 0xFF, + 0x1B, 0x1A, 0x16, 0xFF, 0x42, 0x40, 0x3C, 0xFF, 0xAE, 0xAC, 0xA8, 0xFF, + 0xE1, 0xE0, 0xDC, 0xFF, 0xE1, 0xE0, 0xDC, 0xFF, 0xDF, 0xDD, 0xD9, 0xFF, + 0xD6, 0xD4, 0xD0, 0xFF, 0xC5, 0xC4, 0xC0, 0xFF, 0x97, 0x93, 0x90, 0xFF, + 0x96, 0x92, 0x8F, 0xFF, 0xA3, 0x9F, 0x9B, 0xFF, 0xB4, 0xB0, 0xAD, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE2, 0xE2, 0xE0, 0xFF, 0xEC, 0xED, 0xEA, 0xFF, 0xDE, 0xDF, 0xDC, 0xFF, + 0xE9, 0xE9, 0xE7, 0xFF, 0xE1, 0xE1, 0xDF, 0xFF, 0x4B, 0x4B, 0x48, 0xFF, + 0x1E, 0x1F, 0x1C, 0xFF, 0x15, 0x15, 0x13, 0xFF, 0x18, 0x19, 0x16, 0xFF, + 0x18, 0x19, 0x16, 0xFF, 0x18, 0x19, 0x16, 0xFF, 0x18, 0x19, 0x16, 0xFF, + 0x17, 0x18, 0x15, 0xFF, 0x16, 0x17, 0x14, 0xFF, 0x16, 0x16, 0x16, 0xFF, + 0x16, 0x16, 0x16, 0xFF, 0x1C, 0x1C, 0x1E, 0xFF, 0x16, 0x16, 0x18, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x0A, 0x0A, 0x0A, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x30, 0x31, 0x2C, 0xFF, 0x86, 0x87, 0x80, 0xFF, 0xCE, 0xCF, 0xC8, 0xFF, + 0xC9, 0xCB, 0xC3, 0xFF, 0xC9, 0xCB, 0xC3, 0xFF, 0xCB, 0xCB, 0xC7, 0xFF, + 0xCC, 0xCD, 0xC8, 0xFF, 0xD3, 0xD4, 0xCF, 0xFF, 0xDA, 0xDB, 0xD6, 0xFF, + 0xE5, 0xE7, 0xDF, 0xFF, 0xEC, 0xEE, 0xE6, 0xFF, 0xE0, 0xE1, 0xDA, 0xFF, + 0xE1, 0xE2, 0xDB, 0xFF, 0xE5, 0xE7, 0xDF, 0xFF, 0xEB, 0xEC, 0xE5, 0xFF, + 0xF0, 0xF1, 0xEC, 0xFF, 0xF2, 0xF3, 0xEE, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, + 0xD9, 0xD9, 0xD5, 0xFF, 0xD4, 0xD5, 0xD0, 0xFF, 0xE9, 0xEA, 0xE5, 0xFF, + 0xEA, 0xEB, 0xE6, 0xFF, 0xD6, 0xD7, 0xD2, 0xFF, 0xB8, 0xB9, 0xB4, 0xFF, + 0x95, 0x96, 0x91, 0xFF, 0x6F, 0x6F, 0x6B, 0xFF, 0x5D, 0x5E, 0x59, 0xFF, + 0x5D, 0x5E, 0x59, 0xFF, 0x63, 0x64, 0x5F, 0xFF, 0x48, 0x49, 0x44, 0xFF, + 0x1F, 0x20, 0x1B, 0xFF, 0x25, 0x26, 0x21, 0xFF, 0x1B, 0x1C, 0x17, 0xFF, + 0x15, 0x16, 0x11, 0xFF, 0x18, 0x19, 0x14, 0xFF, 0x0A, 0x0B, 0x06, 0xFF, + 0x10, 0x11, 0x0C, 0xFF, 0x1A, 0x1A, 0x16, 0xFF, 0x1E, 0x1F, 0x1A, 0xFF, + 0x4C, 0x4C, 0x48, 0xFF, 0xB4, 0xB5, 0xB0, 0xFF, 0xE5, 0xE6, 0xE1, 0xFF, + 0xD3, 0xD4, 0xCF, 0xFF, 0xB5, 0xB3, 0xAF, 0xFF, 0xAA, 0xA9, 0xA5, 0xFF, + 0x9E, 0x9C, 0x98, 0xFF, 0x93, 0x92, 0x8E, 0xFF, 0xA6, 0xA4, 0xA0, 0xFF, + 0xBB, 0xB9, 0xB5, 0xFF, 0xD0, 0xCE, 0xCA, 0xFF, 0xD9, 0xD7, 0xD3, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xEA, 0xEA, 0xE8, 0xFF, 0xE1, 0xE1, 0xDF, 0xFF, + 0xE8, 0xE8, 0xE6, 0xFF, 0xE0, 0xE0, 0xDE, 0xFF, 0x4E, 0x4E, 0x4C, 0xFF, + 0x1C, 0x1C, 0x1A, 0xFF, 0x17, 0x18, 0x15, 0xFF, 0x17, 0x18, 0x15, 0xFF, + 0x17, 0x18, 0x15, 0xFF, 0x17, 0x18, 0x15, 0xFF, 0x17, 0x18, 0x15, 0xFF, + 0x16, 0x17, 0x14, 0xFF, 0x16, 0x17, 0x14, 0xFF, 0x17, 0x17, 0x17, 0xFF, + 0x17, 0x17, 0x17, 0xFF, 0x18, 0x18, 0x1A, 0xFF, 0x18, 0x18, 0x1A, 0xFF, + 0x1A, 0x1A, 0x1A, 0xFF, 0x1A, 0x1A, 0x1A, 0xFF, 0x08, 0x09, 0x06, 0xFF, + 0x0F, 0x10, 0x0B, 0xFF, 0x2A, 0x2B, 0x24, 0xFF, 0x55, 0x56, 0x4F, 0xFF, + 0x58, 0x5A, 0x52, 0xFF, 0x52, 0x53, 0x4B, 0xFF, 0x48, 0x49, 0x44, 0xFF, + 0x41, 0x42, 0x3D, 0xFF, 0x55, 0x56, 0x51, 0xFF, 0x74, 0x75, 0x70, 0xFF, + 0xA2, 0xA3, 0x9C, 0xFF, 0xC2, 0xC4, 0xBC, 0xFF, 0xE3, 0xE4, 0xDD, 0xFF, + 0xE8, 0xE9, 0xE2, 0xFF, 0xE9, 0xEA, 0xE3, 0xFF, 0xE8, 0xE9, 0xE2, 0xFF, + 0xDB, 0xDC, 0xD7, 0xFF, 0xD4, 0xD5, 0xD0, 0xFF, 0xC5, 0xC6, 0xC1, 0xFF, + 0xB7, 0xB8, 0xB3, 0xFF, 0x86, 0x87, 0x82, 0xFF, 0x8B, 0x8B, 0x87, 0xFF, + 0x7A, 0x7B, 0x76, 0xFF, 0x5E, 0x5F, 0x5A, 0xFF, 0x3D, 0x3D, 0x39, 0xFF, + 0x32, 0x33, 0x2E, 0xFF, 0x21, 0x21, 0x1D, 0xFF, 0x18, 0x19, 0x14, 0xFF, + 0x24, 0x25, 0x20, 0xFF, 0x26, 0x27, 0x22, 0xFF, 0x22, 0x23, 0x1E, 0xFF, + 0x16, 0x17, 0x12, 0xFF, 0x1A, 0x1A, 0x16, 0xFF, 0x11, 0x12, 0x0D, 0xFF, + 0x0F, 0x10, 0x0B, 0xFF, 0x14, 0x15, 0x10, 0xFF, 0x15, 0x16, 0x11, 0xFF, + 0x1A, 0x1A, 0x16, 0xFF, 0x10, 0x11, 0x0C, 0xFF, 0x41, 0x42, 0x3D, 0xFF, + 0xAB, 0xAC, 0xA7, 0xFF, 0xB3, 0xB4, 0xAF, 0xFF, 0x94, 0x95, 0x90, 0xFF, + 0x7E, 0x7F, 0x7A, 0xFF, 0x9A, 0x98, 0x94, 0xFF, 0xA7, 0xA5, 0xA1, 0xFF, + 0xBA, 0xB8, 0xB4, 0xFF, 0xC6, 0xC5, 0xC1, 0xFF, 0xD0, 0xCE, 0xCA, 0xFF, + 0xD9, 0xD7, 0xD3, 0xFF, 0xE2, 0xE1, 0xDD, 0xFF, 0xE3, 0xE2, 0xDE, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xE7, 0xE7, 0xE5, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE7, 0xE7, 0xE5, 0xFF, 0xE1, 0xE1, 0xDF, 0xFF, 0x53, 0x53, 0x51, 0xFF, + 0x1B, 0x1B, 0x19, 0xFF, 0x1A, 0x1A, 0x18, 0xFF, 0x14, 0x14, 0x12, 0xFF, + 0x14, 0x14, 0x12, 0xFF, 0x15, 0x15, 0x13, 0xFF, 0x15, 0x15, 0x13, 0xFF, + 0x15, 0x15, 0x13, 0xFF, 0x15, 0x15, 0x13, 0xFF, 0x16, 0x16, 0x16, 0xFF, + 0x16, 0x16, 0x16, 0xFF, 0x10, 0x10, 0x12, 0xFF, 0x10, 0x10, 0x12, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x0A, 0x0B, 0x08, 0xFF, + 0x0D, 0x0E, 0x09, 0xFF, 0x1A, 0x1B, 0x14, 0xFF, 0x24, 0x25, 0x1E, 0xFF, + 0x2B, 0x2C, 0x25, 0xFF, 0x2D, 0x2F, 0x27, 0xFF, 0x30, 0x31, 0x2C, 0xFF, + 0x32, 0x33, 0x2E, 0xFF, 0x34, 0x35, 0x30, 0xFF, 0x3B, 0x3C, 0x37, 0xFF, + 0x46, 0x47, 0x40, 0xFF, 0x4E, 0x4F, 0x48, 0xFF, 0x6F, 0x70, 0x69, 0xFF, + 0x8F, 0x90, 0x89, 0xFF, 0xB0, 0xB1, 0xA8, 0xFF, 0xBE, 0xBF, 0xB8, 0xFF, + 0xA5, 0xA7, 0x9F, 0xFF, 0x7A, 0x7B, 0x74, 0xFF, 0x45, 0x46, 0x3F, 0xFF, + 0x22, 0x23, 0x1C, 0xFF, 0x2B, 0x2C, 0x27, 0xFF, 0x31, 0x32, 0x2D, 0xFF, + 0x2D, 0x2E, 0x29, 0xFF, 0x21, 0x21, 0x1D, 0xFF, 0x17, 0x18, 0x13, 0xFF, + 0x1F, 0x20, 0x1B, 0xFF, 0x23, 0x24, 0x1F, 0xFF, 0x1E, 0x1F, 0x1A, 0xFF, + 0x1E, 0x1F, 0x1A, 0xFF, 0x15, 0x16, 0x11, 0xFF, 0x13, 0x13, 0x0F, 0xFF, + 0x1B, 0x1C, 0x17, 0xFF, 0x1C, 0x1D, 0x18, 0xFF, 0x16, 0x17, 0x12, 0xFF, + 0x16, 0x17, 0x12, 0xFF, 0x1D, 0x1E, 0x19, 0xFF, 0x1A, 0x1A, 0x16, 0xFF, + 0x0C, 0x0C, 0x08, 0xFF, 0x38, 0x39, 0x34, 0xFF, 0x71, 0x72, 0x6D, 0xFF, + 0x94, 0x95, 0x90, 0xFF, 0x94, 0x95, 0x90, 0xFF, 0xA0, 0xA0, 0x9B, 0xFF, + 0xB8, 0xB9, 0xB4, 0xFF, 0xCB, 0xCB, 0xC7, 0xFF, 0xD3, 0xD4, 0xCF, 0xFF, + 0xDD, 0xDE, 0xD9, 0xFF, 0xE5, 0xE6, 0xE1, 0xFF, 0xE1, 0xE1, 0xDD, 0xFF, + 0xE2, 0xE3, 0xDE, 0xFF, 0xE3, 0xE4, 0xDF, 0xFF, 0xE3, 0xE4, 0xDF, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE7, 0xE7, 0xE5, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xE0, 0xE0, 0xDE, 0xFF, 0x55, 0x55, 0x53, 0xFF, + 0x1A, 0x1A, 0x18, 0xFF, 0x1A, 0x1A, 0x18, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x16, 0x17, 0x14, 0xFF, 0x15, 0x15, 0x13, 0xFF, 0x16, 0x16, 0x16, 0xFF, + 0x16, 0x16, 0x16, 0xFF, 0x1F, 0x1F, 0x21, 0xFF, 0x1A, 0x19, 0x1C, 0xFF, + 0x14, 0x14, 0x14, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x16, 0x17, 0x14, 0xFF, + 0x0D, 0x0E, 0x09, 0xFF, 0x15, 0x16, 0x0F, 0xFF, 0x1C, 0x1D, 0x16, 0xFF, + 0x28, 0x29, 0x22, 0xFF, 0x2B, 0x2C, 0x25, 0xFF, 0x31, 0x32, 0x2D, 0xFF, + 0x36, 0x36, 0x32, 0xFF, 0x29, 0x2A, 0x25, 0xFF, 0x2B, 0x2C, 0x27, 0xFF, + 0x2F, 0x30, 0x29, 0xFF, 0x31, 0x32, 0x2B, 0xFF, 0x31, 0x32, 0x2B, 0xFF, + 0x41, 0x42, 0x3B, 0xFF, 0x44, 0x45, 0x3B, 0xFF, 0x37, 0x38, 0x2F, 0xFF, + 0x30, 0x31, 0x2A, 0xFF, 0x25, 0x26, 0x1F, 0xFF, 0x21, 0x22, 0x1B, 0xFF, + 0x26, 0x28, 0x20, 0xFF, 0x14, 0x15, 0x10, 0xFF, 0x1C, 0x1D, 0x18, 0xFF, + 0x22, 0x23, 0x1E, 0xFF, 0x22, 0x23, 0x1E, 0xFF, 0x1D, 0x1E, 0x19, 0xFF, + 0x1F, 0x20, 0x1B, 0xFF, 0x1A, 0x1A, 0x16, 0xFF, 0x0E, 0x0F, 0x0A, 0xFF, + 0x1A, 0x1A, 0x16, 0xFF, 0x14, 0x15, 0x10, 0xFF, 0x11, 0x12, 0x0D, 0xFF, + 0x14, 0x15, 0x10, 0xFF, 0x10, 0x11, 0x0C, 0xFF, 0x0D, 0x0E, 0x09, 0xFF, + 0x11, 0x12, 0x0D, 0xFF, 0x1B, 0x1C, 0x17, 0xFF, 0x13, 0x13, 0x0F, 0xFF, + 0x30, 0x31, 0x2C, 0xFF, 0x64, 0x65, 0x60, 0xFF, 0x9C, 0x9D, 0x98, 0xFF, + 0xA3, 0xA4, 0x9F, 0xFF, 0xBD, 0xBD, 0xB9, 0xFF, 0xD4, 0xD5, 0xD0, 0xFF, + 0xDA, 0xDB, 0xD6, 0xFF, 0xE0, 0xE0, 0xDC, 0xFF, 0xE3, 0xE4, 0xDF, 0xFF, + 0xE7, 0xE7, 0xE3, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, 0xE5, 0xE6, 0xE1, 0xFF, + 0xE3, 0xE4, 0xDF, 0xFF, 0xE3, 0xE4, 0xDF, 0xFF, 0xE3, 0xE4, 0xDF, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE8, 0xE8, 0xE6, 0xFF, 0x61, 0x61, 0x5F, 0xFF, + 0x1B, 0x1B, 0x19, 0xFF, 0x1A, 0x1A, 0x18, 0xFF, 0x1A, 0x1A, 0x18, 0xFF, + 0x15, 0x15, 0x13, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x14, 0x14, 0x14, 0xFF, 0x16, 0x16, 0x16, 0xFF, + 0x17, 0x17, 0x17, 0xFF, 0x16, 0x16, 0x18, 0xFF, 0x14, 0x13, 0x16, 0xFF, + 0x13, 0x13, 0x13, 0xFF, 0x13, 0x13, 0x13, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x0F, 0x10, 0x0B, 0xFF, 0x0D, 0x0E, 0x09, 0xFF, 0x0A, 0x0B, 0x06, 0xFF, + 0x14, 0x15, 0x10, 0xFF, 0x1A, 0x1A, 0x16, 0xFF, 0x22, 0x23, 0x1E, 0xFF, + 0x29, 0x2A, 0x25, 0xFF, 0x23, 0x24, 0x1F, 0xFF, 0x29, 0x2A, 0x25, 0xFF, + 0x32, 0x33, 0x2C, 0xFF, 0x38, 0x39, 0x32, 0xFF, 0x28, 0x29, 0x22, 0xFF, + 0x2F, 0x30, 0x29, 0xFF, 0x31, 0x32, 0x29, 0xFF, 0x2C, 0x2E, 0x24, 0xFF, + 0x2D, 0x2F, 0x27, 0xFF, 0x28, 0x29, 0x22, 0xFF, 0x22, 0x23, 0x1C, 0xFF, + 0x1C, 0x1D, 0x16, 0xFF, 0x17, 0x18, 0x13, 0xFF, 0x17, 0x18, 0x13, 0xFF, + 0x17, 0x18, 0x13, 0xFF, 0x17, 0x18, 0x13, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x09, 0x0A, 0x07, 0xFF, 0x14, 0x14, 0x12, 0xFF, + 0x17, 0x18, 0x13, 0xFF, 0x11, 0x12, 0x0D, 0xFF, 0x22, 0x23, 0x1E, 0xFF, + 0x7B, 0x7C, 0x77, 0xFF, 0xA8, 0xA8, 0xA4, 0xFF, 0xB8, 0xB9, 0xB4, 0xFF, + 0xDE, 0xDF, 0xDA, 0xFF, 0xF2, 0xF3, 0xEE, 0xFF, 0xE0, 0xE0, 0xDC, 0xFF, + 0xD2, 0xD2, 0xCE, 0xFF, 0xD7, 0xD8, 0xD3, 0xFF, 0xDB, 0xDC, 0xD7, 0xFF, + 0xE0, 0xE0, 0xDC, 0xFF, 0xE1, 0xE1, 0xDD, 0xFF, 0xE0, 0xE0, 0xDC, 0xFF, + 0xE0, 0xE0, 0xDC, 0xFF, 0xE2, 0xE3, 0xDE, 0xFF, 0xE4, 0xE5, 0xE0, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, 0x65, 0x66, 0x63, 0xFF, + 0x1B, 0x1B, 0x19, 0xFF, 0x18, 0x19, 0x16, 0xFF, 0x1A, 0x1A, 0x18, 0xFF, + 0x16, 0x17, 0x14, 0xFF, 0x14, 0x14, 0x12, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x13, 0x13, 0x13, 0xFF, 0x16, 0x16, 0x16, 0xFF, + 0x18, 0x18, 0x18, 0xFF, 0x08, 0x08, 0x0A, 0xFF, 0x0C, 0x0B, 0x0E, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x13, 0x13, 0x13, 0xFF, 0x09, 0x0A, 0x07, 0xFF, + 0x0D, 0x0E, 0x09, 0xFF, 0x10, 0x11, 0x0C, 0xFF, 0x13, 0x13, 0x0F, 0xFF, + 0x13, 0x13, 0x0F, 0xFF, 0x1B, 0x1C, 0x17, 0xFF, 0x26, 0x27, 0x22, 0xFF, + 0x30, 0x31, 0x2C, 0xFF, 0x31, 0x32, 0x2D, 0xFF, 0x2D, 0x2E, 0x29, 0xFF, + 0x29, 0x2A, 0x23, 0xFF, 0x25, 0x26, 0x1F, 0xFF, 0x36, 0x37, 0x30, 0xFF, + 0x38, 0x39, 0x32, 0xFF, 0x34, 0x36, 0x2C, 0xFF, 0x2A, 0x2B, 0x22, 0xFF, + 0x28, 0x29, 0x22, 0xFF, 0x22, 0x23, 0x1C, 0xFF, 0x1C, 0x1D, 0x16, 0xFF, + 0x16, 0x17, 0x10, 0xFF, 0x14, 0x15, 0x10, 0xFF, 0x14, 0x15, 0x10, 0xFF, + 0x14, 0x15, 0x10, 0xFF, 0x14, 0x15, 0x10, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x14, 0x14, 0x12, 0xFF, 0x18, 0x19, 0x16, 0xFF, 0x1B, 0x1B, 0x19, 0xFF, + 0x13, 0x13, 0x13, 0xFF, 0x13, 0x13, 0x13, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x18, 0x19, 0x16, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x1A, 0x1A, 0x16, 0xFF, 0x2B, 0x2C, 0x27, 0xFF, 0x85, 0x86, 0x81, 0xFF, + 0xB6, 0xB6, 0xB2, 0xFF, 0xD4, 0xD5, 0xD0, 0xFF, 0xCD, 0xCE, 0xC9, 0xFF, + 0xD9, 0xD9, 0xD5, 0xFF, 0xD2, 0xD2, 0xCE, 0xFF, 0xE9, 0xEA, 0xE5, 0xFF, + 0xEF, 0xEF, 0xEB, 0xFF, 0xEB, 0xEC, 0xE7, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, + 0xE3, 0xE4, 0xDF, 0xFF, 0xE1, 0xE1, 0xDD, 0xFF, 0xE0, 0xE0, 0xDC, 0xFF, + 0xDC, 0xDD, 0xD8, 0xFF, 0xD5, 0xD6, 0xD1, 0xFF, 0xD0, 0xD1, 0xCC, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xDE, 0xDF, 0xDC, 0xFF, 0xE8, 0xE8, 0xE6, 0xFF, + 0xE2, 0xE2, 0xE0, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0x6B, 0x6C, 0x69, 0xFF, + 0x1C, 0x1C, 0x1A, 0xFF, 0x18, 0x19, 0x16, 0xFF, 0x1A, 0x1A, 0x18, 0xFF, + 0x16, 0x17, 0x14, 0xFF, 0x14, 0x14, 0x12, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x13, 0x13, 0x13, 0xFF, 0x17, 0x17, 0x17, 0xFF, + 0x1A, 0x1A, 0x1A, 0xFF, 0x1A, 0x19, 0x1C, 0xFF, 0x17, 0x17, 0x19, 0xFF, + 0x14, 0x14, 0x14, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x09, 0x0A, 0x07, 0xFF, + 0x0D, 0x0E, 0x09, 0xFF, 0x10, 0x11, 0x0C, 0xFF, 0x13, 0x13, 0x0F, 0xFF, + 0x13, 0x13, 0x0F, 0xFF, 0x11, 0x12, 0x0D, 0xFF, 0x11, 0x12, 0x0D, 0xFF, + 0x11, 0x12, 0x0D, 0xFF, 0x22, 0x23, 0x1E, 0xFF, 0x25, 0x26, 0x21, 0xFF, + 0x2A, 0x2B, 0x24, 0xFF, 0x2D, 0x2F, 0x27, 0xFF, 0x22, 0x23, 0x1C, 0xFF, + 0x2B, 0x2C, 0x25, 0xFF, 0x30, 0x31, 0x28, 0xFF, 0x2C, 0x2E, 0x24, 0xFF, + 0x30, 0x31, 0x2A, 0xFF, 0x2A, 0x2B, 0x24, 0xFF, 0x24, 0x25, 0x1E, 0xFF, + 0x1E, 0x1F, 0x18, 0xFF, 0x15, 0x16, 0x11, 0xFF, 0x15, 0x16, 0x11, 0xFF, + 0x15, 0x16, 0x11, 0xFF, 0x15, 0x16, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x0F, 0x10, 0x0D, 0xFF, 0x0C, 0x0C, 0x0A, 0xFF, 0x08, 0x09, 0x06, 0xFF, + 0x13, 0x13, 0x13, 0xFF, 0x13, 0x13, 0x13, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x16, 0x17, 0x14, 0xFF, 0x07, 0x07, 0x05, 0xFF, + 0x29, 0x2A, 0x25, 0xFF, 0x69, 0x6A, 0x65, 0xFF, 0xD3, 0xD4, 0xCF, 0xFF, + 0xC6, 0xC7, 0xC2, 0xFF, 0xD7, 0xD8, 0xD3, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, + 0xE1, 0xE1, 0xDD, 0xFF, 0xDE, 0xDF, 0xDA, 0xFF, 0xE9, 0xEA, 0xE5, 0xFF, + 0xD9, 0xD9, 0xD5, 0xFF, 0xE0, 0xE0, 0xDC, 0xFF, 0xDC, 0xDD, 0xD8, 0xFF, + 0xD7, 0xD8, 0xD3, 0xFF, 0xD6, 0xD7, 0xD2, 0xFF, 0xDA, 0xDB, 0xD6, 0xFF, + 0xE1, 0xE1, 0xDD, 0xFF, 0xE8, 0xE8, 0xE4, 0xFF, 0xEC, 0xED, 0xE8, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xDC, 0xDC, 0xDA, 0xFF, 0xE8, 0xE8, 0xE6, 0xFF, + 0xE2, 0xE2, 0xE0, 0xFF, 0xE1, 0xE1, 0xDF, 0xFF, 0x70, 0x70, 0x6E, 0xFF, + 0x1B, 0x1B, 0x19, 0xFF, 0x18, 0x19, 0x16, 0xFF, 0x1A, 0x1A, 0x18, 0xFF, + 0x16, 0x17, 0x14, 0xFF, 0x14, 0x14, 0x12, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x13, 0x13, 0x13, 0xFF, 0x17, 0x17, 0x17, 0xFF, + 0x18, 0x18, 0x18, 0xFF, 0x0E, 0x0E, 0x10, 0xFF, 0x0F, 0x0F, 0x11, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x0E, 0x0F, 0x0A, 0xFF, 0x0D, 0x0E, 0x09, 0xFF, 0x0C, 0x0C, 0x08, 0xFF, + 0x0D, 0x0E, 0x09, 0xFF, 0x0F, 0x10, 0x0B, 0xFF, 0x13, 0x13, 0x0F, 0xFF, + 0x15, 0x16, 0x11, 0xFF, 0x1F, 0x20, 0x1B, 0xFF, 0x23, 0x24, 0x1F, 0xFF, + 0x28, 0x28, 0x24, 0xFF, 0x2B, 0x2C, 0x25, 0xFF, 0x30, 0x31, 0x2A, 0xFF, + 0x34, 0x36, 0x2E, 0xFF, 0x33, 0x34, 0x2D, 0xFF, 0x2C, 0x2D, 0x26, 0xFF, + 0x2A, 0x2B, 0x24, 0xFF, 0x25, 0x26, 0x1F, 0xFF, 0x1E, 0x1F, 0x18, 0xFF, + 0x1A, 0x1B, 0x14, 0xFF, 0x15, 0x16, 0x11, 0xFF, 0x15, 0x16, 0x11, 0xFF, + 0x15, 0x16, 0x11, 0xFF, 0x13, 0x13, 0x0F, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x14, 0x14, 0x12, 0xFF, 0x14, 0x14, 0x12, 0xFF, + 0x14, 0x14, 0x14, 0xFF, 0x13, 0x13, 0x13, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x1D, 0x1D, 0x1B, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x53, 0x53, 0x4F, 0xFF, 0xBE, 0xBF, 0xBA, 0xFF, 0xC6, 0xC7, 0xC2, 0xFF, + 0xE5, 0xE6, 0xE1, 0xFF, 0xDE, 0xDF, 0xDA, 0xFF, 0xDC, 0xDD, 0xD8, 0xFF, + 0xE9, 0xEA, 0xE5, 0xFF, 0xE0, 0xE0, 0xDC, 0xFF, 0xD0, 0xD1, 0xCC, 0xFF, + 0xE9, 0xEA, 0xE5, 0xFF, 0xDC, 0xDD, 0xD8, 0xFF, 0xE0, 0xE0, 0xDC, 0xFF, + 0xE4, 0xE5, 0xE0, 0xFF, 0xE5, 0xE6, 0xE1, 0xFF, 0xE2, 0xE3, 0xDE, 0xFF, + 0xDD, 0xDE, 0xD9, 0xFF, 0xDB, 0xDC, 0xD7, 0xFF, 0xD9, 0xD9, 0xD5, 0xFF, + 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, + 0xE2, 0xE2, 0xE0, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, + 0xE2, 0xE2, 0xE0, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE5, 0xE6, 0xE3, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE5, 0xE6, 0xE3, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xD5, 0xD5, 0xD5, 0xFF, 0x63, 0x63, 0x63, 0xFF, + 0x18, 0x18, 0x18, 0xFF, 0x21, 0x21, 0x21, 0xFF, 0x22, 0x22, 0x22, 0xFF, + 0x1C, 0x1C, 0x1C, 0xFF, 0x16, 0x16, 0x16, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x18, 0x18, 0x18, 0xFF, 0x18, 0x18, 0x18, 0xFF, 0x17, 0x17, 0x17, 0xFF, + 0x18, 0x18, 0x18, 0xFF, 0x13, 0x13, 0x13, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x0E, 0x0E, 0x0E, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, 0x0C, 0x0C, 0x0A, 0xFF, + 0x0D, 0x0D, 0x0B, 0xFF, 0x0D, 0x0E, 0x09, 0xFF, 0x0D, 0x0E, 0x09, 0xFF, + 0x0D, 0x0E, 0x09, 0xFF, 0x0D, 0x0E, 0x09, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, + 0x0E, 0x0E, 0x0C, 0xFF, 0x18, 0x19, 0x16, 0xFF, 0x1D, 0x1D, 0x1B, 0xFF, + 0x24, 0x25, 0x20, 0xFF, 0x29, 0x2A, 0x25, 0xFF, 0x2D, 0x2E, 0x29, 0xFF, + 0x32, 0x33, 0x2E, 0xFF, 0x34, 0x36, 0x2E, 0xFF, 0x2F, 0x30, 0x29, 0xFF, + 0x29, 0x2D, 0x27, 0xFF, 0x26, 0x29, 0x24, 0xFF, 0x23, 0x26, 0x20, 0xFF, + 0x1F, 0x22, 0x1D, 0xFF, 0x1F, 0x22, 0x1D, 0xFF, 0x1A, 0x1E, 0x18, 0xFF, + 0x13, 0x17, 0x11, 0xFF, 0x10, 0x13, 0x0D, 0xFF, 0x10, 0x13, 0x0F, 0xFF, + 0x10, 0x13, 0x0F, 0xFF, 0x10, 0x12, 0x11, 0xFF, 0x10, 0x12, 0x11, 0xFF, + 0x15, 0x17, 0x16, 0xFF, 0x17, 0x19, 0x18, 0xFF, 0x11, 0x13, 0x13, 0xFF, + 0x02, 0x05, 0x01, 0xFF, 0x1A, 0x1A, 0x18, 0xFF, 0x5C, 0x5D, 0x58, 0xFF, + 0xC5, 0xC6, 0xC1, 0xFF, 0xDA, 0xDB, 0xD4, 0xFF, 0xD7, 0xD9, 0xD1, 0xFF, + 0xDB, 0xDC, 0xD5, 0xFF, 0xDE, 0xE0, 0xD8, 0xFF, 0xE1, 0xE2, 0xDB, 0xFF, + 0xE2, 0xE3, 0xDC, 0xFF, 0xE0, 0xE1, 0xDA, 0xFF, 0xDC, 0xDD, 0xD6, 0xFF, + 0xDA, 0xDB, 0xD4, 0xFF, 0xE0, 0xE1, 0xDA, 0xFF, 0xDD, 0xDE, 0xD7, 0xFF, + 0xDA, 0xDB, 0xD4, 0xFF, 0xD7, 0xD9, 0xD1, 0xFF, 0xE0, 0xE1, 0xDA, 0xFF, + 0xDC, 0xDD, 0xD6, 0xFF, 0xDA, 0xDB, 0xD4, 0xFF, 0xD7, 0xD9, 0xD1, 0xFF, + 0xDE, 0xDF, 0xDC, 0xFF, 0xDE, 0xDF, 0xDC, 0xFF, 0xDE, 0xDF, 0xDC, 0xFF, + 0xDE, 0xDF, 0xDC, 0xFF, 0xE0, 0xE0, 0xDE, 0xFF, 0xE0, 0xE0, 0xDE, 0xFF, + 0xE1, 0xE1, 0xDF, 0xFF, 0xE1, 0xE1, 0xDF, 0xFF, 0xE1, 0xE1, 0xDF, 0xFF, + 0xE1, 0xE1, 0xDF, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, + 0xE2, 0xE2, 0xE0, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xD9, 0xD9, 0xD9, 0xFF, 0x64, 0x64, 0x64, 0xFF, + 0x16, 0x16, 0x16, 0xFF, 0x1D, 0x1D, 0x1D, 0xFF, 0x1C, 0x1C, 0x1C, 0xFF, + 0x17, 0x17, 0x17, 0xFF, 0x14, 0x14, 0x14, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x18, 0x18, 0x18, 0xFF, 0x18, 0x18, 0x18, 0xFF, 0x17, 0x17, 0x17, 0xFF, + 0x18, 0x18, 0x18, 0xFF, 0x13, 0x13, 0x13, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x0E, 0x0E, 0x0C, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, 0x0C, 0x0C, 0x0A, 0xFF, + 0x0C, 0x0C, 0x0A, 0xFF, 0x0D, 0x0E, 0x09, 0xFF, 0x0D, 0x0E, 0x09, 0xFF, + 0x0D, 0x0E, 0x09, 0xFF, 0x0D, 0x0E, 0x09, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, + 0x0E, 0x0E, 0x0C, 0xFF, 0x16, 0x17, 0x14, 0xFF, 0x1B, 0x1B, 0x19, 0xFF, + 0x22, 0x23, 0x1E, 0xFF, 0x26, 0x27, 0x22, 0xFF, 0x2C, 0x2D, 0x28, 0xFF, + 0x30, 0x31, 0x2C, 0xFF, 0x33, 0x34, 0x2D, 0xFF, 0x32, 0x33, 0x2C, 0xFF, + 0x28, 0x2C, 0x26, 0xFF, 0x27, 0x2A, 0x25, 0xFF, 0x26, 0x29, 0x24, 0xFF, + 0x25, 0x28, 0x22, 0xFF, 0x21, 0x25, 0x1F, 0xFF, 0x1D, 0x20, 0x1A, 0xFF, + 0x16, 0x19, 0x13, 0xFF, 0x11, 0x14, 0x0F, 0xFF, 0x10, 0x13, 0x0F, 0xFF, + 0x10, 0x13, 0x0F, 0xFF, 0x10, 0x12, 0x11, 0xFF, 0x10, 0x12, 0x11, 0xFF, + 0x09, 0x0B, 0x0A, 0xFF, 0x0A, 0x0C, 0x0C, 0xFF, 0x11, 0x13, 0x13, 0xFF, + 0x25, 0x27, 0x26, 0xFF, 0x64, 0x65, 0x62, 0xFF, 0x9D, 0x9E, 0x99, 0xFF, + 0xD4, 0xD5, 0xCE, 0xFF, 0xCC, 0xCD, 0xC6, 0xFF, 0xD7, 0xD9, 0xD1, 0xFF, + 0xDB, 0xDC, 0xD5, 0xFF, 0xDE, 0xE0, 0xD8, 0xFF, 0xE1, 0xE2, 0xDB, 0xFF, + 0xE2, 0xE3, 0xDC, 0xFF, 0xE0, 0xE1, 0xDA, 0xFF, 0xDC, 0xDD, 0xD6, 0xFF, + 0xDA, 0xDB, 0xD4, 0xFF, 0xE0, 0xE1, 0xDA, 0xFF, 0xDD, 0xDE, 0xD7, 0xFF, + 0xDA, 0xDB, 0xD4, 0xFF, 0xD9, 0xDA, 0xD3, 0xFF, 0xDA, 0xDB, 0xD4, 0xFF, + 0xDA, 0xDB, 0xD4, 0xFF, 0xD7, 0xD9, 0xD1, 0xFF, 0xD4, 0xD5, 0xCE, 0xFF, + 0xE0, 0xE0, 0xDE, 0xFF, 0xE0, 0xE0, 0xDE, 0xFF, 0xE0, 0xE0, 0xDE, 0xFF, + 0xE0, 0xE0, 0xDE, 0xFF, 0xE1, 0xE1, 0xDF, 0xFF, 0xE1, 0xE1, 0xDF, 0xFF, + 0xE1, 0xE1, 0xDF, 0xFF, 0xE1, 0xE1, 0xDF, 0xFF, 0xE1, 0xE1, 0xDF, 0xFF, + 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, + 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, + 0xE2, 0xE2, 0xE0, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0x66, 0x66, 0x66, 0xFF, + 0x15, 0x15, 0x15, 0xFF, 0x18, 0x18, 0x18, 0xFF, 0x14, 0x14, 0x14, 0xFF, + 0x11, 0x11, 0x11, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x18, 0x18, 0x18, 0xFF, 0x18, 0x18, 0x18, 0xFF, 0x18, 0x18, 0x18, 0xFF, + 0x18, 0x18, 0x18, 0xFF, 0x13, 0x13, 0x13, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x0E, 0x0E, 0x0C, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, + 0x0D, 0x0D, 0x0B, 0xFF, 0x0D, 0x0E, 0x09, 0xFF, 0x0D, 0x0E, 0x09, 0xFF, + 0x0E, 0x0F, 0x0A, 0xFF, 0x0E, 0x0F, 0x0A, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, + 0x0E, 0x0E, 0x0C, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x17, 0x18, 0x15, 0xFF, + 0x1E, 0x1F, 0x1A, 0xFF, 0x23, 0x24, 0x1F, 0xFF, 0x29, 0x2A, 0x25, 0xFF, + 0x2D, 0x2E, 0x29, 0xFF, 0x32, 0x33, 0x2C, 0xFF, 0x34, 0x36, 0x2E, 0xFF, + 0x28, 0x2C, 0x26, 0xFF, 0x29, 0x2D, 0x27, 0xFF, 0x2B, 0x2E, 0x28, 0xFF, + 0x2C, 0x2F, 0x29, 0xFF, 0x25, 0x28, 0x22, 0xFF, 0x20, 0x23, 0x1E, 0xFF, + 0x19, 0x1C, 0x17, 0xFF, 0x15, 0x18, 0x12, 0xFF, 0x10, 0x13, 0x0F, 0xFF, + 0x10, 0x13, 0x0F, 0xFF, 0x10, 0x12, 0x11, 0xFF, 0x10, 0x12, 0x11, 0xFF, + 0x10, 0x12, 0x11, 0xFF, 0x0F, 0x11, 0x10, 0xFF, 0x0C, 0x0F, 0x0E, 0xFF, + 0x2C, 0x2E, 0x2D, 0xFF, 0x80, 0x80, 0x7E, 0xFF, 0xB9, 0xBA, 0xB5, 0xFF, + 0xD7, 0xD9, 0xD1, 0xFF, 0xCE, 0xCF, 0xC8, 0xFF, 0xD7, 0xD9, 0xD1, 0xFF, + 0xDB, 0xDC, 0xD5, 0xFF, 0xDE, 0xE0, 0xD8, 0xFF, 0xE1, 0xE2, 0xDB, 0xFF, + 0xE2, 0xE3, 0xDC, 0xFF, 0xE0, 0xE1, 0xDA, 0xFF, 0xDC, 0xDD, 0xD6, 0xFF, + 0xDA, 0xDB, 0xD4, 0xFF, 0xE0, 0xE1, 0xDA, 0xFF, 0xDD, 0xDE, 0xD7, 0xFF, + 0xDA, 0xDB, 0xD4, 0xFF, 0xD9, 0xDA, 0xD3, 0xFF, 0xD9, 0xDA, 0xD3, 0xFF, + 0xD7, 0xD9, 0xD1, 0xFF, 0xD4, 0xD5, 0xCE, 0xFF, 0xD2, 0xD3, 0xCC, 0xFF, + 0xD3, 0xD3, 0xD1, 0xFF, 0xD3, 0xD3, 0xD1, 0xFF, 0xD3, 0xD3, 0xD1, 0xFF, + 0xD3, 0xD3, 0xD1, 0xFF, 0xD4, 0xD4, 0xD2, 0xFF, 0xD4, 0xD4, 0xD2, 0xFF, + 0xD4, 0xD4, 0xD2, 0xFF, 0xD4, 0xD4, 0xD2, 0xFF, 0xDE, 0xDF, 0xDC, 0xFF, + 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, + 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, + 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, 0xE4, 0xE5, 0xE2, 0xFF, + 0xE4, 0xE5, 0xE2, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE0, 0xE0, 0xE0, 0xFF, 0x69, 0x69, 0x69, 0xFF, + 0x14, 0x14, 0x14, 0xFF, 0x15, 0x15, 0x15, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, + 0x0D, 0x0D, 0x0D, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x18, 0x18, 0x18, 0xFF, 0x18, 0x18, 0x18, 0xFF, 0x18, 0x18, 0x18, 0xFF, + 0x18, 0x18, 0x18, 0xFF, 0x13, 0x13, 0x13, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x0E, 0x0E, 0x0C, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, + 0x0D, 0x0D, 0x0B, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, + 0x0D, 0x0D, 0x0B, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, + 0x0D, 0x0D, 0x0B, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x14, 0x14, 0x12, 0xFF, + 0x1C, 0x1C, 0x1A, 0xFF, 0x21, 0x21, 0x1D, 0xFF, 0x26, 0x27, 0x22, 0xFF, + 0x2C, 0x2D, 0x28, 0xFF, 0x30, 0x31, 0x2C, 0xFF, 0x33, 0x34, 0x2D, 0xFF, + 0x27, 0x2A, 0x25, 0xFF, 0x29, 0x2D, 0x27, 0xFF, 0x2F, 0x33, 0x2D, 0xFF, + 0x32, 0x35, 0x2F, 0xFF, 0x27, 0x2A, 0x25, 0xFF, 0x23, 0x26, 0x20, 0xFF, + 0x1A, 0x1E, 0x18, 0xFF, 0x17, 0x1A, 0x14, 0xFF, 0x10, 0x13, 0x0F, 0xFF, + 0x10, 0x13, 0x0F, 0xFF, 0x10, 0x12, 0x11, 0xFF, 0x10, 0x12, 0x11, 0xFF, + 0x08, 0x0A, 0x09, 0xFF, 0x17, 0x19, 0x18, 0xFF, 0x11, 0x13, 0x13, 0xFF, + 0x32, 0x34, 0x33, 0xFF, 0x81, 0x82, 0x7F, 0xFF, 0xAA, 0xAB, 0xA6, 0xFF, + 0xC8, 0xC9, 0xC2, 0xFF, 0xD6, 0xD7, 0xD0, 0xFF, 0xD7, 0xD9, 0xD1, 0xFF, + 0xDB, 0xDC, 0xD5, 0xFF, 0xDE, 0xE0, 0xD8, 0xFF, 0xE1, 0xE2, 0xDB, 0xFF, + 0xE2, 0xE3, 0xDC, 0xFF, 0xE0, 0xE1, 0xDA, 0xFF, 0xDD, 0xDE, 0xD7, 0xFF, + 0xDA, 0xDB, 0xD4, 0xFF, 0xE0, 0xE1, 0xDA, 0xFF, 0xDD, 0xDE, 0xD7, 0xFF, + 0xDA, 0xDB, 0xD4, 0xFF, 0xD9, 0xDA, 0xD3, 0xFF, 0xD6, 0xD7, 0xD0, 0xFF, + 0xD4, 0xD5, 0xCE, 0xFF, 0xD2, 0xD3, 0xCC, 0xFF, 0xCF, 0xD0, 0xC9, 0xFF, + 0xBF, 0xC0, 0xBB, 0xFF, 0xBF, 0xC0, 0xBB, 0xFF, 0xBF, 0xC0, 0xBB, 0xFF, + 0xBF, 0xC0, 0xBB, 0xFF, 0xC0, 0xC1, 0xBC, 0xFF, 0xC0, 0xC1, 0xBC, 0xFF, + 0xC0, 0xC1, 0xBC, 0xFF, 0xC0, 0xC1, 0xBC, 0xFF, 0xCC, 0xCD, 0xC8, 0xFF, + 0xD2, 0xD2, 0xCE, 0xFF, 0xDD, 0xDE, 0xD9, 0xFF, 0xE0, 0xE0, 0xDC, 0xFF, + 0xE0, 0xE0, 0xDC, 0xFF, 0xE0, 0xE0, 0xDC, 0xFF, 0xE0, 0xE0, 0xDC, 0xFF, + 0xE1, 0xE1, 0xDD, 0xFF, 0xE1, 0xE1, 0xDF, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, + 0xE3, 0xE3, 0xE1, 0xFF, 0xE3, 0xE3, 0xE1, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, + 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, + 0xE2, 0xE2, 0xE0, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0x6A, 0x6A, 0x6A, 0xFF, + 0x14, 0x14, 0x14, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x14, 0x14, 0x14, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x18, 0x18, 0x1A, 0xFF, 0x18, 0x18, 0x1A, 0xFF, 0x18, 0x18, 0x18, 0xFF, + 0x18, 0x18, 0x18, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0F, 0x10, 0x0D, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, + 0x0D, 0x0D, 0x0D, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, + 0x0D, 0x0D, 0x0D, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, + 0x0D, 0x0D, 0x0D, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x15, 0x15, 0x13, 0xFF, 0x17, 0x18, 0x15, 0xFF, 0x1D, 0x1D, 0x1B, 0xFF, + 0x25, 0x26, 0x23, 0xFF, 0x2C, 0x2D, 0x28, 0xFF, 0x32, 0x33, 0x2E, 0xFF, + 0x29, 0x2D, 0x27, 0xFF, 0x29, 0x2D, 0x27, 0xFF, 0x26, 0x29, 0x24, 0xFF, + 0x25, 0x28, 0x22, 0xFF, 0x2D, 0x30, 0x2D, 0xFF, 0x25, 0x28, 0x24, 0xFF, + 0x1A, 0x1D, 0x1A, 0xFF, 0x11, 0x14, 0x11, 0xFF, 0x11, 0x14, 0x11, 0xFF, + 0x11, 0x14, 0x11, 0xFF, 0x11, 0x13, 0x13, 0xFF, 0x11, 0x13, 0x13, 0xFF, + 0x0C, 0x0E, 0x10, 0xFF, 0x17, 0x19, 0x1A, 0xFF, 0x17, 0x19, 0x18, 0xFF, + 0x4C, 0x4F, 0x4E, 0xFF, 0x9A, 0x9A, 0x98, 0xFF, 0xB6, 0xB6, 0xB2, 0xFF, + 0xCD, 0xCE, 0xC7, 0xFF, 0xD5, 0xD7, 0xCD, 0xFF, 0xE0, 0xE1, 0xD7, 0xFF, + 0xE0, 0xE1, 0xD7, 0xFF, 0xE0, 0xE1, 0xDA, 0xFF, 0xE0, 0xE1, 0xDA, 0xFF, + 0xE0, 0xE1, 0xDA, 0xFF, 0xE0, 0xE1, 0xDA, 0xFF, 0xDE, 0xE0, 0xD8, 0xFF, + 0xE0, 0xE1, 0xDA, 0xFF, 0xD9, 0xDA, 0xD3, 0xFF, 0xD6, 0xD7, 0xD0, 0xFF, + 0xD4, 0xD5, 0xCE, 0xFF, 0xD3, 0xD4, 0xCD, 0xFF, 0xD5, 0xD6, 0xCF, 0xFF, + 0xC9, 0xCB, 0xC3, 0xFF, 0xBA, 0xBB, 0xB4, 0xFF, 0xAF, 0xB0, 0xA9, 0xFF, + 0xB8, 0xB9, 0xB4, 0xFF, 0xB8, 0xB9, 0xB4, 0xFF, 0xB8, 0xB9, 0xB4, 0xFF, + 0xB8, 0xB9, 0xB4, 0xFF, 0xB9, 0xBA, 0xB5, 0xFF, 0xB9, 0xBA, 0xB5, 0xFF, + 0xB9, 0xBA, 0xB5, 0xFF, 0xB9, 0xBA, 0xB5, 0xFF, 0xC0, 0xC1, 0xBC, 0xFF, + 0xC7, 0xC8, 0xC3, 0xFF, 0xD0, 0xD1, 0xCC, 0xFF, 0xD7, 0xD8, 0xD3, 0xFF, + 0xDC, 0xDD, 0xD8, 0xFF, 0xE0, 0xE0, 0xDC, 0xFF, 0xE0, 0xE0, 0xDC, 0xFF, + 0xE0, 0xE0, 0xDC, 0xFF, 0xE0, 0xE0, 0xDE, 0xFF, 0xE1, 0xE1, 0xDF, 0xFF, + 0xE1, 0xE1, 0xDF, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, + 0xE2, 0xE2, 0xE0, 0xFF, 0xE2, 0xE2, 0xE0, 0xFF, 0xE1, 0xE1, 0xDF, 0xFF, + 0xE1, 0xE1, 0xDF, 0xFF, 0xE0, 0xE0, 0xDE, 0xFF, 0xE0, 0xE0, 0xDE, 0xFF, + 0xE0, 0xE0, 0xDE, 0xFF, 0xD9, 0xD9, 0xD9, 0xFF, 0x69, 0x69, 0x69, 0xFF, + 0x15, 0x15, 0x15, 0xFF, 0x13, 0x13, 0x13, 0xFF, 0x15, 0x15, 0x15, 0xFF, + 0x11, 0x11, 0x11, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x15, 0x15, 0x17, 0xFF, 0x15, 0x15, 0x17, 0xFF, 0x15, 0x15, 0x15, 0xFF, + 0x15, 0x15, 0x15, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0F, 0x10, 0x0D, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, + 0x0D, 0x0D, 0x0D, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, + 0x0C, 0x0C, 0x0C, 0xFF, 0x0C, 0x0C, 0x0C, 0xFF, 0x0C, 0x0C, 0x0C, 0xFF, + 0x0C, 0x0C, 0x0C, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x15, 0x15, 0x13, 0xFF, 0x17, 0x18, 0x15, 0xFF, 0x1B, 0x1B, 0x19, 0xFF, + 0x23, 0x23, 0x21, 0xFF, 0x2A, 0x2B, 0x26, 0xFF, 0x30, 0x31, 0x2C, 0xFF, + 0x2D, 0x30, 0x2B, 0xFF, 0x29, 0x2D, 0x27, 0xFF, 0x25, 0x28, 0x22, 0xFF, + 0x21, 0x25, 0x1F, 0xFF, 0x29, 0x2C, 0x29, 0xFF, 0x24, 0x26, 0x23, 0xFF, + 0x1A, 0x1D, 0x1A, 0xFF, 0x15, 0x17, 0x14, 0xFF, 0x11, 0x14, 0x11, 0xFF, + 0x11, 0x14, 0x11, 0xFF, 0x11, 0x13, 0x13, 0xFF, 0x11, 0x13, 0x13, 0xFF, + 0x0C, 0x0E, 0x10, 0xFF, 0x1C, 0x1E, 0x1F, 0xFF, 0x20, 0x23, 0x22, 0xFF, + 0x6C, 0x6E, 0x6D, 0xFF, 0xB6, 0xB6, 0xB4, 0xFF, 0xCE, 0xCF, 0xCA, 0xFF, + 0xD7, 0xD9, 0xD1, 0xFF, 0xDC, 0xDE, 0xD4, 0xFF, 0xE0, 0xE1, 0xD7, 0xFF, + 0xE0, 0xE1, 0xD7, 0xFF, 0xE0, 0xE1, 0xDA, 0xFF, 0xDE, 0xE0, 0xD8, 0xFF, + 0xDE, 0xE0, 0xD8, 0xFF, 0xDD, 0xDE, 0xD7, 0xFF, 0xDD, 0xDE, 0xD7, 0xFF, + 0xDD, 0xDE, 0xD7, 0xFF, 0xDD, 0xDE, 0xD7, 0xFF, 0xDA, 0xDB, 0xD4, 0xFF, + 0xD5, 0xD6, 0xCF, 0xFF, 0xD2, 0xD3, 0xCC, 0xFF, 0xCE, 0xCF, 0xC8, 0xFF, + 0xC0, 0xC1, 0xBA, 0xFF, 0xAD, 0xAF, 0xA7, 0xFF, 0xA1, 0xA2, 0x9B, 0xFF, + 0xB9, 0xBA, 0xB5, 0xFF, 0xB9, 0xBA, 0xB5, 0xFF, 0xB9, 0xBA, 0xB5, 0xFF, + 0xB9, 0xBA, 0xB5, 0xFF, 0xBA, 0xBB, 0xB6, 0xFF, 0xBA, 0xBB, 0xB6, 0xFF, + 0xBA, 0xBB, 0xB6, 0xFF, 0xBA, 0xBB, 0xB6, 0xFF, 0xBA, 0xBB, 0xB6, 0xFF, + 0xBE, 0xBF, 0xBA, 0xFF, 0xC4, 0xC4, 0xC0, 0xFF, 0xCD, 0xCE, 0xC9, 0xFF, + 0xD5, 0xD6, 0xD1, 0xFF, 0xDC, 0xDD, 0xD8, 0xFF, 0xE0, 0xE0, 0xDC, 0xFF, + 0xE0, 0xE0, 0xDC, 0xFF, 0xE0, 0xE0, 0xDE, 0xFF, 0xE0, 0xE0, 0xDE, 0xFF, + 0xE0, 0xE0, 0xDE, 0xFF, 0xE1, 0xE1, 0xDF, 0xFF, 0xE1, 0xE1, 0xDF, 0xFF, + 0xE1, 0xE1, 0xDF, 0xFF, 0xE1, 0xE1, 0xDF, 0xFF, 0xE0, 0xE0, 0xDE, 0xFF, + 0xE0, 0xE0, 0xDE, 0xFF, 0xDE, 0xDF, 0xDC, 0xFF, 0xDE, 0xDF, 0xDC, 0xFF, + 0xDE, 0xDF, 0xDC, 0xFF, 0xD3, 0xD3, 0xD3, 0xFF, 0x65, 0x65, 0x65, 0xFF, + 0x16, 0x16, 0x16, 0xFF, 0x15, 0x15, 0x15, 0xFF, 0x15, 0x15, 0x15, 0xFF, + 0x14, 0x14, 0x14, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x10, 0x10, 0x12, 0xFF, 0x10, 0x10, 0x12, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0F, 0x10, 0x0D, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, + 0x0E, 0x0E, 0x0E, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, + 0x0D, 0x0D, 0x0D, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, + 0x0D, 0x0D, 0x0D, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x15, 0x15, 0x13, 0xFF, 0x17, 0x18, 0x15, 0xFF, 0x17, 0x18, 0x15, 0xFF, + 0x1F, 0x20, 0x1D, 0xFF, 0x26, 0x27, 0x22, 0xFF, 0x2C, 0x2D, 0x28, 0xFF, + 0x32, 0x35, 0x2F, 0xFF, 0x2C, 0x2F, 0x29, 0xFF, 0x23, 0x26, 0x20, 0xFF, + 0x1D, 0x20, 0x1A, 0xFF, 0x25, 0x28, 0x24, 0xFF, 0x21, 0x24, 0x21, 0xFF, + 0x1D, 0x1F, 0x1C, 0xFF, 0x19, 0x1C, 0x19, 0xFF, 0x12, 0x15, 0x12, 0xFF, + 0x12, 0x15, 0x12, 0xFF, 0x12, 0x15, 0x14, 0xFF, 0x12, 0x15, 0x14, 0xFF, + 0x19, 0x1B, 0x1D, 0xFF, 0x19, 0x1B, 0x1D, 0xFF, 0x29, 0x2C, 0x2B, 0xFF, + 0x91, 0x94, 0x93, 0xFF, 0xCC, 0xCC, 0xCA, 0xFF, 0xE1, 0xE1, 0xDD, 0xFF, + 0xDB, 0xDC, 0xD5, 0xFF, 0xE2, 0xE3, 0xDA, 0xFF, 0xE0, 0xE1, 0xD7, 0xFF, + 0xE0, 0xE1, 0xD7, 0xFF, 0xE0, 0xE1, 0xDA, 0xFF, 0xE0, 0xE1, 0xDA, 0xFF, + 0xDA, 0xDB, 0xD4, 0xFF, 0xDA, 0xDB, 0xD4, 0xFF, 0xDA, 0xDB, 0xD4, 0xFF, + 0xDA, 0xDB, 0xD4, 0xFF, 0xDB, 0xDC, 0xD5, 0xFF, 0xD5, 0xD6, 0xCF, 0xFF, + 0xCC, 0xCD, 0xC6, 0xFF, 0xC6, 0xC7, 0xC0, 0xFF, 0xB9, 0xBA, 0xB3, 0xFF, + 0xA8, 0xA9, 0xA2, 0xFF, 0x93, 0x94, 0x8D, 0xFF, 0x82, 0x84, 0x7C, 0xFF, + 0xB1, 0xB2, 0xAD, 0xFF, 0xB1, 0xB2, 0xAD, 0xFF, 0xB1, 0xB2, 0xAD, 0xFF, + 0xB1, 0xB2, 0xAD, 0xFF, 0xB2, 0xB3, 0xAE, 0xFF, 0xB2, 0xB3, 0xAE, 0xFF, + 0xB2, 0xB3, 0xAE, 0xFF, 0xB2, 0xB3, 0xAE, 0xFF, 0xB0, 0xB1, 0xAC, 0xFF, + 0xB4, 0xB5, 0xB0, 0xFF, 0xBD, 0xBD, 0xB9, 0xFF, 0xC2, 0xC3, 0xBE, 0xFF, + 0xCB, 0xCB, 0xC7, 0xFF, 0xD5, 0xD6, 0xD1, 0xFF, 0xDC, 0xDD, 0xD8, 0xFF, + 0xE0, 0xE0, 0xDC, 0xFF, 0xE0, 0xE0, 0xDE, 0xFF, 0xE0, 0xE0, 0xDE, 0xFF, + 0xE0, 0xE0, 0xDE, 0xFF, 0xE0, 0xE0, 0xDE, 0xFF, 0xE0, 0xE0, 0xDE, 0xFF, + 0xE0, 0xE0, 0xDE, 0xFF, 0xE0, 0xE0, 0xDE, 0xFF, 0xDE, 0xDF, 0xDC, 0xFF, + 0xDE, 0xDF, 0xDC, 0xFF, 0xDD, 0xDE, 0xDB, 0xFF, 0xDD, 0xDE, 0xDB, 0xFF, + 0xDD, 0xDE, 0xDB, 0xFF, 0xCF, 0xCF, 0xCF, 0xFF, 0x63, 0x63, 0x63, 0xFF, + 0x16, 0x16, 0x16, 0xFF, 0x16, 0x16, 0x16, 0xFF, 0x15, 0x15, 0x15, 0xFF, + 0x15, 0x15, 0x15, 0xFF, 0x11, 0x11, 0x11, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x0D, 0x0C, 0x0F, 0xFF, 0x0D, 0x0C, 0x0F, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, + 0x0E, 0x0E, 0x0E, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, + 0x0F, 0x10, 0x0D, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, + 0x0E, 0x0E, 0x0E, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, + 0x0D, 0x0D, 0x0D, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, + 0x0D, 0x0D, 0x0D, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x15, 0x15, 0x13, 0xFF, 0x17, 0x18, 0x15, 0xFF, 0x15, 0x15, 0x13, 0xFF, + 0x1D, 0x1D, 0x1B, 0xFF, 0x24, 0x25, 0x20, 0xFF, 0x2A, 0x2B, 0x26, 0xFF, + 0x35, 0x38, 0x33, 0xFF, 0x2D, 0x30, 0x2B, 0xFF, 0x21, 0x25, 0x1F, 0xFF, + 0x19, 0x1C, 0x17, 0xFF, 0x23, 0x25, 0x22, 0xFF, 0x20, 0x23, 0x20, 0xFF, + 0x1E, 0x21, 0x1D, 0xFF, 0x1D, 0x1F, 0x1C, 0xFF, 0x12, 0x15, 0x12, 0xFF, + 0x12, 0x15, 0x12, 0xFF, 0x12, 0x15, 0x14, 0xFF, 0x12, 0x15, 0x14, 0xFF, + 0x12, 0x14, 0x16, 0xFF, 0x1D, 0x1F, 0x20, 0xFF, 0x4B, 0x4E, 0x4D, 0xFF, + 0xBB, 0xBD, 0xBD, 0xFF, 0xD4, 0xD4, 0xD2, 0xFF, 0xE1, 0xE1, 0xDD, 0xFF, + 0xDC, 0xDD, 0xD6, 0xFF, 0xDC, 0xDE, 0xD4, 0xFF, 0xDE, 0xE0, 0xD6, 0xFF, + 0xDE, 0xE0, 0xD6, 0xFF, 0xE0, 0xE1, 0xDA, 0xFF, 0xE0, 0xE1, 0xDA, 0xFF, + 0xD7, 0xD9, 0xD1, 0xFF, 0xD7, 0xD9, 0xD1, 0xFF, 0xD7, 0xD9, 0xD1, 0xFF, + 0xD7, 0xD9, 0xD1, 0xFF, 0xD3, 0xD4, 0xCD, 0xFF, 0xCB, 0xCC, 0xC5, 0xFF, + 0xBF, 0xC0, 0xB9, 0xFF, 0xB7, 0xB8, 0xB1, 0xFF, 0xA3, 0xA4, 0x9D, 0xFF, + 0x90, 0x92, 0x8A, 0xFF, 0x78, 0x79, 0x72, 0xFF, 0x66, 0x68, 0x60, 0xFF, + 0xB2, 0xB3, 0xAE, 0xFF, 0xB2, 0xB3, 0xAE, 0xFF, 0xB2, 0xB3, 0xAE, 0xFF, + 0xB2, 0xB3, 0xAE, 0xFF, 0xB1, 0xB2, 0xAD, 0xFF, 0xB1, 0xB2, 0xAD, 0xFF, + 0xB1, 0xB2, 0xAD, 0xFF, 0xB1, 0xB2, 0xAD, 0xFF, 0xB3, 0xB4, 0xAD, 0xFF, + 0xB2, 0xB3, 0xAC, 0xFF, 0xB3, 0xB4, 0xAD, 0xFF, 0xB7, 0xB8, 0xB1, 0xFF, + 0xBB, 0xBC, 0xB7, 0xFF, 0xC4, 0xC4, 0xC0, 0xFF, 0xD5, 0xD6, 0xD1, 0xFF, + 0xE1, 0xE1, 0xDD, 0xFF, 0xD7, 0xD8, 0xD3, 0xFF, 0xDA, 0xDB, 0xD6, 0xFF, + 0xDD, 0xDE, 0xD9, 0xFF, 0xE0, 0xE0, 0xDC, 0xFF, 0xDC, 0xDC, 0xDA, 0xFF, + 0xE1, 0xE1, 0xDF, 0xFF, 0xDE, 0xDF, 0xDC, 0xFF, 0xD6, 0xD7, 0xD4, 0xFF, + 0xE0, 0xE0, 0xDE, 0xFF, 0xC5, 0xC5, 0xC3, 0xFF, 0xC2, 0xC3, 0xC0, 0xFF, + 0xDA, 0xDA, 0xD8, 0xFF, 0xAC, 0xAD, 0xAA, 0xFF, 0x3B, 0x3C, 0x39, 0xFF, + 0x0C, 0x0C, 0x0A, 0xFF, 0x14, 0x14, 0x12, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x11, 0x12, 0x0F, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, + 0x0E, 0x0E, 0x0E, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, + 0x0D, 0x0D, 0x0D, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, + 0x0D, 0x0D, 0x0D, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, + 0x0D, 0x0D, 0x0D, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x14, 0x14, 0x12, 0xFF, + 0x17, 0x18, 0x15, 0xFF, 0x1D, 0x1E, 0x19, 0xFF, 0x24, 0x25, 0x20, 0xFF, + 0x30, 0x34, 0x2E, 0xFF, 0x2D, 0x30, 0x2B, 0xFF, 0x23, 0x26, 0x20, 0xFF, + 0x1F, 0x22, 0x1D, 0xFF, 0x1F, 0x22, 0x1F, 0xFF, 0x1F, 0x22, 0x1F, 0xFF, + 0x1E, 0x21, 0x1D, 0xFF, 0x1F, 0x22, 0x1F, 0xFF, 0x12, 0x15, 0x12, 0xFF, + 0x12, 0x15, 0x12, 0xFF, 0x12, 0x15, 0x14, 0xFF, 0x12, 0x15, 0x14, 0xFF, + 0x12, 0x14, 0x16, 0xFF, 0x20, 0x22, 0x24, 0xFF, 0x91, 0x94, 0x93, 0xFF, + 0xC7, 0xC9, 0xC8, 0xFF, 0xD9, 0xD9, 0xD7, 0xFF, 0xD7, 0xD8, 0xD3, 0xFF, + 0xE7, 0xE8, 0xE0, 0xFF, 0xDB, 0xDC, 0xD3, 0xFF, 0xDE, 0xE0, 0xD6, 0xFF, + 0xDE, 0xE0, 0xD6, 0xFF, 0xDD, 0xDE, 0xD7, 0xFF, 0xDA, 0xDB, 0xD4, 0xFF, + 0xD7, 0xD9, 0xD1, 0xFF, 0xD7, 0xD9, 0xD1, 0xFF, 0xD6, 0xD7, 0xD0, 0xFF, + 0xD2, 0xD3, 0xCC, 0xFF, 0xC7, 0xC8, 0xC1, 0xFF, 0xBE, 0xBF, 0xB8, 0xFF, + 0xB2, 0xB3, 0xAC, 0xFF, 0xA1, 0xA2, 0x9B, 0xFF, 0x96, 0x97, 0x90, 0xFF, + 0x7D, 0x7E, 0x77, 0xFF, 0x5E, 0x5F, 0x58, 0xFF, 0x4D, 0x4E, 0x47, 0xFF, + 0xB0, 0xB1, 0xAC, 0xFF, 0xB0, 0xB1, 0xAC, 0xFF, 0xB0, 0xB1, 0xAC, 0xFF, + 0xB0, 0xB1, 0xAC, 0xFF, 0xAF, 0xAF, 0xAB, 0xFF, 0xAF, 0xAF, 0xAB, 0xFF, + 0xAF, 0xAF, 0xAB, 0xFF, 0xAF, 0xAF, 0xAB, 0xFF, 0xAF, 0xB0, 0xA9, 0xFF, + 0xB0, 0xB1, 0xAA, 0xFF, 0xB1, 0xB2, 0xAB, 0xFF, 0xB0, 0xB1, 0xAA, 0xFF, + 0xB6, 0xB6, 0xB2, 0xFF, 0xBD, 0xBD, 0xB9, 0xFF, 0xC6, 0xC7, 0xC2, 0xFF, + 0xCD, 0xCE, 0xC9, 0xFF, 0xD0, 0xD1, 0xCC, 0xFF, 0xD3, 0xD4, 0xCF, 0xFF, + 0xD6, 0xD7, 0xD2, 0xFF, 0xD9, 0xD9, 0xD5, 0xFF, 0xE1, 0xE1, 0xDF, 0xFF, + 0xDE, 0xDF, 0xDC, 0xFF, 0xD3, 0xD3, 0xD1, 0xFF, 0xC4, 0xC4, 0xC2, 0xFF, + 0xC2, 0xC3, 0xC0, 0xFF, 0xB4, 0xB5, 0xB2, 0xFF, 0xB0, 0xB0, 0xAE, 0xFF, + 0xB7, 0xB7, 0xB5, 0xFF, 0x7E, 0x7E, 0x7C, 0xFF, 0x29, 0x29, 0x27, 0xFF, + 0x0C, 0x0C, 0x0A, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x11, 0x12, 0x0F, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x11, 0x11, 0x11, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, + 0x0E, 0x0E, 0x0E, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, + 0x0D, 0x0D, 0x0D, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, + 0x0D, 0x0D, 0x0D, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, + 0x0D, 0x0D, 0x0D, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x15, 0x15, 0x13, 0xFF, 0x17, 0x18, 0x13, 0xFF, 0x1D, 0x1E, 0x19, 0xFF, + 0x29, 0x2D, 0x27, 0xFF, 0x29, 0x2D, 0x27, 0xFF, 0x25, 0x28, 0x22, 0xFF, + 0x21, 0x25, 0x1F, 0xFF, 0x1C, 0x1E, 0x1B, 0xFF, 0x1C, 0x1E, 0x1B, 0xFF, + 0x1C, 0x1E, 0x1B, 0xFF, 0x1C, 0x1E, 0x1B, 0xFF, 0x12, 0x15, 0x12, 0xFF, + 0x12, 0x15, 0x12, 0xFF, 0x12, 0x15, 0x14, 0xFF, 0x12, 0x15, 0x14, 0xFF, + 0x16, 0x18, 0x19, 0xFF, 0x24, 0x26, 0x27, 0xFF, 0x6F, 0x72, 0x71, 0xFF, + 0x95, 0x97, 0x96, 0xFF, 0xCB, 0xCB, 0xC9, 0xFF, 0xD5, 0xD6, 0xD1, 0xFF, + 0xE1, 0xE2, 0xDB, 0xFF, 0xE2, 0xE3, 0xDA, 0xFF, 0xDD, 0xDF, 0xD5, 0xFF, + 0xDD, 0xDF, 0xD5, 0xFF, 0xDB, 0xDC, 0xD5, 0xFF, 0xD7, 0xD9, 0xD1, 0xFF, + 0xD7, 0xD9, 0xD1, 0xFF, 0xD6, 0xD7, 0xD0, 0xFF, 0xD2, 0xD3, 0xCC, 0xFF, + 0xC9, 0xCB, 0xC3, 0xFF, 0xBE, 0xBF, 0xB8, 0xFF, 0xB2, 0xB3, 0xAC, 0xFF, + 0xA1, 0xA2, 0x9B, 0xFF, 0x8D, 0x8E, 0x87, 0xFF, 0x74, 0x76, 0x6E, 0xFF, + 0x61, 0x62, 0x5B, 0xFF, 0x52, 0x53, 0x4B, 0xFF, 0x50, 0x52, 0x4A, 0xFF, + 0xAD, 0xAE, 0xA9, 0xFF, 0xAD, 0xAE, 0xA9, 0xFF, 0xAD, 0xAE, 0xA9, 0xFF, + 0xAD, 0xAE, 0xA9, 0xFF, 0xAC, 0xAD, 0xA8, 0xFF, 0xAC, 0xAD, 0xA8, 0xFF, + 0xAC, 0xAD, 0xA8, 0xFF, 0xAB, 0xAC, 0xA7, 0xFF, 0xAB, 0xAC, 0xA5, 0xFF, + 0xAB, 0xAC, 0xA5, 0xFF, 0xAC, 0xAD, 0xA6, 0xFF, 0xAD, 0xAF, 0xA7, 0xFF, + 0xB0, 0xB1, 0xAC, 0xFF, 0xB2, 0xB3, 0xAE, 0xFF, 0xB6, 0xB6, 0xB2, 0xFF, + 0xBB, 0xBC, 0xB7, 0xFF, 0xBE, 0xBF, 0xBA, 0xFF, 0xC0, 0xC1, 0xBC, 0xFF, + 0xC4, 0xC4, 0xC0, 0xFF, 0xC6, 0xC7, 0xC2, 0xFF, 0xD3, 0xD3, 0xD1, 0xFF, + 0xCE, 0xCE, 0xCC, 0xFF, 0xBF, 0xBF, 0xBD, 0xFF, 0xAD, 0xAE, 0xAB, 0xFF, + 0xAF, 0xAF, 0xAD, 0xFF, 0xB3, 0xB4, 0xB1, 0xFF, 0xAA, 0xAA, 0xA8, 0xFF, + 0x9A, 0x9A, 0x98, 0xFF, 0x4F, 0x50, 0x4D, 0xFF, 0x16, 0x17, 0x14, 0xFF, + 0x0D, 0x0D, 0x0B, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x11, 0x12, 0x0F, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x0E, 0x0E, 0x0E, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, + 0x0D, 0x0D, 0x0D, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, + 0x0E, 0x0E, 0x0E, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x15, 0x16, 0x11, 0xFF, 0x17, 0x18, 0x13, 0xFF, + 0x1E, 0x21, 0x1B, 0xFF, 0x25, 0x28, 0x22, 0xFF, 0x27, 0x2A, 0x25, 0xFF, + 0x23, 0x26, 0x20, 0xFF, 0x19, 0x1C, 0x19, 0xFF, 0x19, 0x1C, 0x19, 0xFF, + 0x19, 0x1C, 0x19, 0xFF, 0x19, 0x1C, 0x19, 0xFF, 0x13, 0x16, 0x13, 0xFF, + 0x13, 0x16, 0x13, 0xFF, 0x13, 0x16, 0x15, 0xFF, 0x13, 0x16, 0x15, 0xFF, + 0x0E, 0x10, 0x11, 0xFF, 0x17, 0x19, 0x1A, 0xFF, 0x42, 0x44, 0x44, 0xFF, + 0x71, 0x73, 0x72, 0xFF, 0xBD, 0xBD, 0xBB, 0xFF, 0xD0, 0xD1, 0xCC, 0xFF, + 0xCF, 0xD0, 0xC9, 0xFF, 0xDD, 0xDF, 0xD5, 0xFF, 0xDD, 0xDF, 0xD5, 0xFF, + 0xDD, 0xDF, 0xD5, 0xFF, 0xDA, 0xDB, 0xD4, 0xFF, 0xD5, 0xD6, 0xCF, 0xFF, + 0xD6, 0xD7, 0xD0, 0xFF, 0xD2, 0xD3, 0xCC, 0xFF, 0xC9, 0xCB, 0xC3, 0xFF, + 0xC0, 0xC1, 0xBA, 0xFF, 0xB2, 0xB3, 0xAC, 0xFF, 0xA1, 0xA2, 0x9B, 0xFF, + 0x8D, 0x8E, 0x87, 0xFF, 0x78, 0x79, 0x72, 0xFF, 0x56, 0x57, 0x50, 0xFF, + 0x4B, 0x4C, 0x44, 0xFF, 0x53, 0x54, 0x4D, 0xFF, 0x69, 0x6A, 0x63, 0xFF, + 0xAD, 0xAE, 0xA9, 0xFF, 0xAD, 0xAE, 0xA9, 0xFF, 0xAD, 0xAE, 0xA9, 0xFF, + 0xAD, 0xAE, 0xA9, 0xFF, 0xAB, 0xAC, 0xA7, 0xFF, 0xAB, 0xAC, 0xA7, 0xFF, + 0xAB, 0xAC, 0xA7, 0xFF, 0xAB, 0xAC, 0xA7, 0xFF, 0xA8, 0xA9, 0xA2, 0xFF, + 0xA8, 0xA9, 0xA2, 0xFF, 0xA9, 0xAA, 0xA3, 0xFF, 0xA9, 0xAA, 0xA3, 0xFF, + 0xA9, 0xAA, 0xA5, 0xFF, 0xA8, 0xA8, 0xA4, 0xFF, 0xA9, 0xAA, 0xA5, 0xFF, + 0xAA, 0xAB, 0xA6, 0xFF, 0xAA, 0xAB, 0xA6, 0xFF, 0xAC, 0xAD, 0xA8, 0xFF, + 0xB0, 0xB1, 0xAC, 0xFF, 0xB2, 0xB3, 0xAE, 0xFF, 0xBA, 0xBB, 0xB8, 0xFF, + 0xB8, 0xB8, 0xB6, 0xFF, 0xAC, 0xAD, 0xAA, 0xFF, 0x9E, 0x9F, 0x9C, 0xFF, + 0x96, 0x97, 0x94, 0xFF, 0xA7, 0xA7, 0xA4, 0xFF, 0x9C, 0x9C, 0x9A, 0xFF, + 0x7A, 0x7B, 0x78, 0xFF, 0x3D, 0x3D, 0x3B, 0xFF, 0x16, 0x17, 0x14, 0xFF, + 0x0D, 0x0D, 0x0B, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x11, 0x12, 0x0F, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, + 0x0C, 0x0C, 0x0C, 0xFF, 0x0C, 0x0C, 0x0C, 0xFF, 0x0C, 0x0C, 0x0C, 0xFF, + 0x0E, 0x0E, 0x0E, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x15, 0x16, 0x11, 0xFF, + 0x15, 0x18, 0x12, 0xFF, 0x1E, 0x21, 0x1B, 0xFF, 0x24, 0x27, 0x21, 0xFF, + 0x25, 0x28, 0x24, 0xFF, 0x17, 0x1A, 0x16, 0xFF, 0x17, 0x1A, 0x16, 0xFF, + 0x17, 0x1A, 0x16, 0xFF, 0x16, 0x18, 0x15, 0xFF, 0x15, 0x17, 0x14, 0xFF, + 0x13, 0x16, 0x13, 0xFF, 0x13, 0x16, 0x15, 0xFF, 0x13, 0x16, 0x15, 0xFF, + 0x17, 0x19, 0x1A, 0xFF, 0x19, 0x1B, 0x1D, 0xFF, 0x3B, 0x3D, 0x3D, 0xFF, + 0x87, 0x89, 0x86, 0xFF, 0xC9, 0xCA, 0xC5, 0xFF, 0xDD, 0xDE, 0xD7, 0xFF, + 0xD7, 0xD9, 0xCF, 0xFF, 0xE1, 0xE2, 0xD9, 0xFF, 0xDD, 0xDF, 0xD5, 0xFF, + 0xDB, 0xDC, 0xD5, 0xFF, 0xD7, 0xD9, 0xD1, 0xFF, 0xD5, 0xD6, 0xCF, 0xFF, + 0xD2, 0xD3, 0xCC, 0xFF, 0xC9, 0xCB, 0xC3, 0xFF, 0xC0, 0xC1, 0xBA, 0xFF, + 0xB9, 0xBA, 0xB3, 0xFF, 0xA1, 0xA2, 0x9B, 0xFF, 0x8D, 0x8E, 0x87, 0xFF, + 0x78, 0x79, 0x72, 0xFF, 0x69, 0x6A, 0x63, 0xFF, 0x4D, 0x4E, 0x47, 0xFF, + 0x48, 0x49, 0x42, 0xFF, 0x61, 0x62, 0x5B, 0xFF, 0x86, 0x87, 0x80, 0xFF, + 0xAC, 0xAD, 0xA8, 0xFF, 0xAC, 0xAD, 0xA8, 0xFF, 0xAC, 0xAD, 0xA8, 0xFF, + 0xAC, 0xAD, 0xA8, 0xFF, 0xAA, 0xAB, 0xA6, 0xFF, 0xAA, 0xAB, 0xA6, 0xFF, + 0xAA, 0xAB, 0xA6, 0xFF, 0xAA, 0xAB, 0xA6, 0xFF, 0xAA, 0xAB, 0xA4, 0xFF, + 0xA8, 0xA9, 0xA2, 0xFF, 0xA7, 0xA8, 0xA0, 0xFF, 0xA7, 0xA8, 0xA0, 0xFF, + 0xA7, 0xA7, 0xA2, 0xFF, 0xA5, 0xA6, 0xA1, 0xFF, 0xA3, 0xA4, 0x9F, 0xFF, + 0xA3, 0xA4, 0x9F, 0xFF, 0xA3, 0xA4, 0x9F, 0xFF, 0xA4, 0xA5, 0xA0, 0xFF, + 0xA4, 0xA5, 0xA0, 0xFF, 0xA4, 0xA5, 0xA0, 0xFF, 0xA7, 0xA7, 0xA4, 0xFF, + 0xA3, 0xA3, 0xA1, 0xFF, 0x9D, 0x9E, 0x9B, 0xFF, 0x99, 0x99, 0x97, 0xFF, + 0x94, 0x94, 0x92, 0xFF, 0x95, 0x95, 0x93, 0xFF, 0x82, 0x83, 0x80, 0xFF, + 0x4E, 0x4E, 0x4C, 0xFF, 0x1E, 0x1F, 0x1C, 0xFF, 0x16, 0x17, 0x14, 0xFF, + 0x0C, 0x0C, 0x0A, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, + 0x0E, 0x0E, 0x0C, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0F, 0x10, 0x0D, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, 0x0A, 0x0A, 0x0A, 0xFF, + 0x0D, 0x0D, 0x0D, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, + 0x0E, 0x0E, 0x0E, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0E, 0x0E, 0x0E, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, + 0x15, 0x17, 0x14, 0xFF, 0x19, 0x1C, 0x19, 0xFF, 0x21, 0x24, 0x21, 0xFF, + 0x25, 0x28, 0x24, 0xFF, 0x17, 0x19, 0x18, 0xFF, 0x17, 0x19, 0x18, 0xFF, + 0x17, 0x19, 0x18, 0xFF, 0x16, 0x18, 0x17, 0xFF, 0x16, 0x18, 0x17, 0xFF, + 0x18, 0x1A, 0x1A, 0xFF, 0x1C, 0x1E, 0x1D, 0xFF, 0x1E, 0x20, 0x1F, 0xFF, + 0x21, 0x24, 0x23, 0xFF, 0x0F, 0x11, 0x10, 0xFF, 0x4F, 0x51, 0x50, 0xFF, + 0xB3, 0xB6, 0xB2, 0xFF, 0xDC, 0xDD, 0xD8, 0xFF, 0xDE, 0xE0, 0xD8, 0xFF, + 0xE5, 0xE7, 0xDD, 0xFF, 0xD5, 0xD7, 0xCD, 0xFF, 0xD5, 0xD6, 0xCF, 0xFF, + 0xDB, 0xDC, 0xD5, 0xFF, 0xDD, 0xDE, 0xD9, 0xFF, 0xD6, 0xD7, 0xD2, 0xFF, + 0xCF, 0xD0, 0xCB, 0xFF, 0xC4, 0xC4, 0xC0, 0xFF, 0xB2, 0xB3, 0xAE, 0xFF, + 0x9D, 0x9E, 0x99, 0xFF, 0x8F, 0x92, 0x8C, 0xFF, 0x72, 0x75, 0x6F, 0xFF, + 0x61, 0x65, 0x5F, 0xFF, 0x49, 0x4C, 0x46, 0xFF, 0x3C, 0x3F, 0x3A, 0xFF, + 0x51, 0x54, 0x4F, 0xFF, 0x7C, 0x7F, 0x7A, 0xFF, 0x8C, 0x90, 0x8A, 0xFF, + 0xAB, 0xAC, 0xA7, 0xFF, 0xAB, 0xAC, 0xA7, 0xFF, 0xAB, 0xAC, 0xA7, 0xFF, + 0xAB, 0xAC, 0xA7, 0xFF, 0xA8, 0xA8, 0xA4, 0xFF, 0xA8, 0xA8, 0xA4, 0xFF, + 0xA8, 0xA8, 0xA4, 0xFF, 0xA8, 0xA8, 0xA4, 0xFF, 0xA8, 0xA9, 0xA2, 0xFF, + 0xA5, 0xA7, 0x9F, 0xFF, 0xA4, 0xA5, 0x9E, 0xFF, 0xA4, 0xA5, 0x9E, 0xFF, + 0xA4, 0xA5, 0xA0, 0xFF, 0xA3, 0xA4, 0x9F, 0xFF, 0xA1, 0xA1, 0x9D, 0xFF, + 0xA0, 0xA0, 0x9B, 0xFF, 0x9E, 0x9F, 0x9A, 0xFF, 0x9E, 0x9F, 0x9A, 0xFF, + 0x9E, 0x9F, 0x9A, 0xFF, 0x9D, 0x9E, 0x99, 0xFF, 0x9C, 0x9C, 0x9A, 0xFF, + 0x9A, 0x9A, 0x98, 0xFF, 0x99, 0x99, 0x97, 0xFF, 0x97, 0x98, 0x95, 0xFF, + 0x9B, 0x9B, 0x99, 0xFF, 0x92, 0x92, 0x90, 0xFF, 0x77, 0x77, 0x75, 0xFF, + 0x41, 0x42, 0x3F, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x15, 0x15, 0x13, 0xFF, + 0x0F, 0x10, 0x0D, 0xFF, 0x15, 0x15, 0x13, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x0E, 0x0E, 0x0C, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0F, 0x10, 0x0D, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, + 0x0E, 0x0E, 0x0E, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0E, 0x0E, 0x0E, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, + 0x0E, 0x0E, 0x0E, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, + 0x12, 0x15, 0x12, 0xFF, 0x17, 0x1A, 0x16, 0xFF, 0x1D, 0x1F, 0x1C, 0xFF, + 0x23, 0x25, 0x22, 0xFF, 0x15, 0x17, 0x16, 0xFF, 0x15, 0x17, 0x16, 0xFF, + 0x15, 0x17, 0x16, 0xFF, 0x13, 0x16, 0x15, 0xFF, 0x13, 0x16, 0x15, 0xFF, + 0x16, 0x18, 0x17, 0xFF, 0x19, 0x1C, 0x1B, 0xFF, 0x1C, 0x1E, 0x1D, 0xFF, + 0x23, 0x25, 0x24, 0xFF, 0x17, 0x19, 0x18, 0xFF, 0x4B, 0x4E, 0x4B, 0xFF, + 0xBD, 0xC0, 0xBD, 0xFF, 0xD6, 0xD7, 0xD2, 0xFF, 0xD6, 0xD7, 0xD0, 0xFF, + 0xD7, 0xD9, 0xCF, 0xFF, 0xD6, 0xD8, 0xCE, 0xFF, 0xD5, 0xD6, 0xCF, 0xFF, + 0xDA, 0xDB, 0xD4, 0xFF, 0xD7, 0xD8, 0xD3, 0xFF, 0xCC, 0xCD, 0xC8, 0xFF, + 0xC4, 0xC4, 0xC0, 0xFF, 0xB6, 0xB6, 0xB2, 0xFF, 0xA1, 0xA1, 0x9D, 0xFF, + 0x8B, 0x8B, 0x87, 0xFF, 0x7B, 0x7E, 0x79, 0xFF, 0x60, 0x63, 0x5E, 0xFF, + 0x52, 0x55, 0x50, 0xFF, 0x3C, 0x3F, 0x3A, 0xFF, 0x3A, 0x3D, 0x37, 0xFF, + 0x58, 0x5B, 0x56, 0xFF, 0x83, 0x86, 0x81, 0xFF, 0x8A, 0x8D, 0x88, 0xFF, + 0xA9, 0xAA, 0xA5, 0xFF, 0xA9, 0xAA, 0xA5, 0xFF, 0xA9, 0xAA, 0xA5, 0xFF, + 0xA9, 0xAA, 0xA5, 0xFF, 0xA5, 0xA6, 0xA1, 0xFF, 0xA5, 0xA6, 0xA1, 0xFF, + 0xA5, 0xA6, 0xA1, 0xFF, 0xA5, 0xA6, 0xA1, 0xFF, 0xA5, 0xA7, 0x9F, 0xFF, + 0xA3, 0xA4, 0x9D, 0xFF, 0xA2, 0xA3, 0x9C, 0xFF, 0xA2, 0xA3, 0x9C, 0xFF, + 0xA2, 0xA3, 0x9E, 0xFF, 0xA1, 0xA1, 0x9D, 0xFF, 0x9E, 0x9F, 0x9A, 0xFF, + 0x9C, 0x9D, 0x98, 0xFF, 0x9A, 0x9A, 0x96, 0xFF, 0x99, 0x99, 0x94, 0xFF, + 0x99, 0x99, 0x94, 0xFF, 0x99, 0x99, 0x94, 0xFF, 0x94, 0x94, 0x92, 0xFF, + 0x90, 0x91, 0x8E, 0xFF, 0x8C, 0x8C, 0x8A, 0xFF, 0x87, 0x87, 0x85, 0xFF, + 0x87, 0x87, 0x85, 0xFF, 0x7B, 0x7C, 0x79, 0xFF, 0x68, 0x68, 0x66, 0xFF, + 0x3F, 0x3F, 0x3D, 0xFF, 0x17, 0x18, 0x15, 0xFF, 0x17, 0x18, 0x15, 0xFF, + 0x0C, 0x0C, 0x0A, 0xFF, 0x16, 0x17, 0x14, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0F, 0x10, 0x0D, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, + 0x0E, 0x0E, 0x0E, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, + 0x0F, 0x12, 0x0E, 0xFF, 0x15, 0x17, 0x14, 0xFF, 0x19, 0x1C, 0x19, 0xFF, + 0x21, 0x24, 0x21, 0xFF, 0x13, 0x16, 0x15, 0xFF, 0x13, 0x16, 0x15, 0xFF, + 0x13, 0x16, 0x15, 0xFF, 0x12, 0x15, 0x14, 0xFF, 0x12, 0x15, 0x14, 0xFF, + 0x15, 0x17, 0x16, 0xFF, 0x18, 0x1A, 0x1A, 0xFF, 0x1A, 0x1D, 0x1C, 0xFF, + 0x20, 0x23, 0x22, 0xFF, 0x29, 0x2C, 0x2B, 0xFF, 0x44, 0x47, 0x44, 0xFF, + 0xAF, 0xB2, 0xAF, 0xFF, 0xD6, 0xD7, 0xD2, 0xFF, 0xDD, 0xDE, 0xD7, 0xFF, + 0xE0, 0xE1, 0xD7, 0xFF, 0xE0, 0xE1, 0xD7, 0xFF, 0xD7, 0xD9, 0xD1, 0xFF, + 0xD7, 0xD9, 0xD1, 0xFF, 0xCF, 0xD0, 0xCB, 0xFF, 0xBF, 0xC0, 0xBB, 0xFF, + 0xB2, 0xB3, 0xAE, 0xFF, 0xA1, 0xA1, 0x9D, 0xFF, 0x8E, 0x8F, 0x8A, 0xFF, + 0x7B, 0x7C, 0x77, 0xFF, 0x6C, 0x6F, 0x69, 0xFF, 0x53, 0x57, 0x51, 0xFF, + 0x48, 0x4B, 0x45, 0xFF, 0x35, 0x38, 0x33, 0xFF, 0x36, 0x39, 0x34, 0xFF, + 0x63, 0x66, 0x60, 0xFF, 0x8E, 0x91, 0x8B, 0xFF, 0x87, 0x8A, 0x84, 0xFF, + 0xA8, 0xA8, 0xA4, 0xFF, 0xA8, 0xA8, 0xA4, 0xFF, 0xA8, 0xA8, 0xA4, 0xFF, + 0xA8, 0xA8, 0xA4, 0xFF, 0xA4, 0xA5, 0xA0, 0xFF, 0xA4, 0xA5, 0xA0, 0xFF, + 0xA4, 0xA5, 0xA0, 0xFF, 0xA4, 0xA5, 0xA0, 0xFF, 0xA4, 0xA5, 0x9E, 0xFF, + 0xA2, 0xA3, 0x9C, 0xFF, 0xA1, 0xA2, 0x9B, 0xFF, 0xA1, 0xA2, 0x9B, 0xFF, + 0xA1, 0xA1, 0x9D, 0xFF, 0xA0, 0xA0, 0x9B, 0xFF, 0x9D, 0x9E, 0x99, 0xFF, + 0x9C, 0x9D, 0x98, 0xFF, 0x95, 0x96, 0x91, 0xFF, 0x95, 0x96, 0x91, 0xFF, + 0x95, 0x96, 0x91, 0xFF, 0x95, 0x96, 0x91, 0xFF, 0x92, 0x92, 0x90, 0xFF, + 0x87, 0x87, 0x85, 0xFF, 0x78, 0x78, 0x76, 0xFF, 0x6D, 0x6E, 0x6B, 0xFF, + 0x47, 0x47, 0x45, 0xFF, 0x45, 0x45, 0x43, 0xFF, 0x45, 0x45, 0x43, 0xFF, + 0x2D, 0x2E, 0x2B, 0xFF, 0x1F, 0x20, 0x1D, 0xFF, 0x14, 0x14, 0x12, 0xFF, + 0x07, 0x07, 0x05, 0xFF, 0x17, 0x18, 0x15, 0xFF, 0x14, 0x14, 0x12, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x13, 0x13, 0x13, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x13, 0x13, 0x13, 0xFF, 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, + 0x0E, 0x0E, 0x0E, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, + 0x0C, 0x0F, 0x0C, 0xFF, 0x11, 0x14, 0x11, 0xFF, 0x17, 0x1A, 0x16, 0xFF, + 0x1D, 0x1F, 0x1C, 0xFF, 0x0F, 0x11, 0x10, 0xFF, 0x10, 0x12, 0x11, 0xFF, + 0x0F, 0x11, 0x10, 0xFF, 0x0E, 0x10, 0x0F, 0xFF, 0x0E, 0x10, 0x0F, 0xFF, + 0x10, 0x12, 0x11, 0xFF, 0x13, 0x16, 0x15, 0xFF, 0x16, 0x18, 0x17, 0xFF, + 0x16, 0x18, 0x17, 0xFF, 0x36, 0x39, 0x38, 0xFF, 0x37, 0x3A, 0x37, 0xFF, + 0x8E, 0x91, 0x8B, 0xFF, 0xC9, 0xCB, 0xC3, 0xFF, 0xE0, 0xE1, 0xDA, 0xFF, + 0xD7, 0xD9, 0xCF, 0xFF, 0xD6, 0xD8, 0xCE, 0xFF, 0xD5, 0xD6, 0xCF, 0xFF, + 0xD2, 0xD3, 0xCC, 0xFF, 0xC5, 0xC6, 0xC1, 0xFF, 0xB6, 0xB6, 0xB2, 0xFF, + 0x9C, 0x9D, 0x98, 0xFF, 0x8B, 0x8B, 0x87, 0xFF, 0x7B, 0x7C, 0x77, 0xFF, + 0x72, 0x73, 0x6E, 0xFF, 0x61, 0x65, 0x5F, 0xFF, 0x4B, 0x4E, 0x49, 0xFF, + 0x43, 0x46, 0x41, 0xFF, 0x30, 0x34, 0x2E, 0xFF, 0x34, 0x37, 0x32, 0xFF, + 0x6B, 0x6E, 0x68, 0xFF, 0x96, 0x99, 0x93, 0xFF, 0x84, 0x88, 0x82, 0xFF, + 0xA2, 0xA3, 0x9E, 0xFF, 0xA1, 0xA1, 0x9D, 0xFF, 0xA3, 0xA4, 0x9F, 0xFF, + 0xA7, 0xA7, 0xA2, 0xFF, 0xAA, 0xAB, 0xA6, 0xFF, 0xA4, 0xA5, 0xA0, 0xFF, + 0xA1, 0xA1, 0x9D, 0xFF, 0xA1, 0xA1, 0x9D, 0xFF, 0xA4, 0xA5, 0xA0, 0xFF, + 0xA5, 0xA6, 0xA1, 0xFF, 0xA3, 0xA4, 0x9F, 0xFF, 0x9E, 0x9F, 0x9A, 0xFF, + 0x9B, 0x9C, 0x97, 0xFF, 0x9C, 0x9D, 0x98, 0xFF, 0x97, 0x98, 0x93, 0xFF, + 0x8E, 0x8F, 0x8A, 0xFF, 0xA3, 0xA4, 0x9D, 0xFF, 0x9B, 0x9C, 0x95, 0xFF, + 0x8E, 0x8F, 0x88, 0xFF, 0x7A, 0x7B, 0x76, 0xFF, 0x61, 0x61, 0x5D, 0xFF, + 0x4E, 0x4F, 0x4A, 0xFF, 0x41, 0x42, 0x3D, 0xFF, 0x3F, 0x40, 0x3B, 0xFF, + 0x56, 0x57, 0x52, 0xFF, 0x63, 0x64, 0x5F, 0xFF, 0x54, 0x55, 0x50, 0xFF, + 0x32, 0x33, 0x2E, 0xFF, 0x14, 0x14, 0x12, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x15, 0x15, 0x13, 0xFF, 0x14, 0x14, 0x14, 0xFF, + 0x13, 0x13, 0x13, 0xFF, 0x11, 0x11, 0x11, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x16, 0x17, 0x14, 0xFF, 0x15, 0x15, 0x13, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x16, 0x16, 0x16, 0xFF, 0x14, 0x14, 0x14, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, + 0x0D, 0x0D, 0x0B, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, + 0x0C, 0x0C, 0x0C, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x14, 0x14, 0x14, 0xFF, + 0x1A, 0x1A, 0x1A, 0xFF, 0x1A, 0x1A, 0x1A, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0E, 0x0E, 0x0E, 0xFF, 0x14, 0x14, 0x14, 0xFF, 0x08, 0x08, 0x08, 0xFF, + 0x0C, 0x0C, 0x0C, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x22, 0x22, 0x20, 0xFF, 0x26, 0x27, 0x24, 0xFF, 0x4F, 0x50, 0x4D, 0xFF, + 0xA5, 0xA6, 0xA1, 0xFF, 0xD5, 0xD6, 0xCF, 0xFF, 0xD6, 0xD7, 0xD0, 0xFF, + 0xCE, 0xCF, 0xC8, 0xFF, 0xD5, 0xD6, 0xCF, 0xFF, 0xC8, 0xC9, 0xC2, 0xFF, + 0xCE, 0xCF, 0xC8, 0xFF, 0xC7, 0xC8, 0xC3, 0xFF, 0xAC, 0xAD, 0xA8, 0xFF, + 0x99, 0x99, 0x94, 0xFF, 0x8F, 0x90, 0x8B, 0xFF, 0x7B, 0x7E, 0x79, 0xFF, + 0x63, 0x66, 0x60, 0xFF, 0x47, 0x4A, 0x44, 0xFF, 0x3A, 0x3D, 0x37, 0xFF, + 0x31, 0x37, 0x30, 0xFF, 0x2B, 0x31, 0x2B, 0xFF, 0x2F, 0x34, 0x2E, 0xFF, + 0x60, 0x65, 0x5F, 0xFF, 0x7E, 0x84, 0x7D, 0xFF, 0x77, 0x7D, 0x76, 0xFF, + 0xAA, 0xAB, 0xA6, 0xFF, 0xB0, 0xB1, 0xAC, 0xFF, 0xAB, 0xAC, 0xA7, 0xFF, + 0xA0, 0xA0, 0x9B, 0xFF, 0x9B, 0x9C, 0x97, 0xFF, 0x9A, 0x9A, 0x96, 0xFF, + 0x9C, 0x9D, 0x98, 0xFF, 0xA0, 0xA0, 0x9B, 0xFF, 0x9D, 0x9E, 0x99, 0xFF, + 0x9B, 0x9C, 0x97, 0xFF, 0x96, 0x97, 0x92, 0xFF, 0x92, 0x92, 0x8E, 0xFF, + 0x96, 0x97, 0x92, 0xFF, 0x99, 0x99, 0x94, 0xFF, 0x9D, 0x9E, 0x99, 0xFF, + 0x9E, 0x9F, 0x9A, 0xFF, 0x70, 0x71, 0x6A, 0xFF, 0x66, 0x68, 0x60, 0xFF, + 0x50, 0x52, 0x4A, 0xFF, 0x46, 0x47, 0x40, 0xFF, 0x45, 0x45, 0x41, 0xFF, + 0x50, 0x51, 0x4C, 0xFF, 0x65, 0x66, 0x61, 0xFF, 0x77, 0x78, 0x73, 0xFF, + 0x80, 0x81, 0x7C, 0xFF, 0x76, 0x76, 0x72, 0xFF, 0x54, 0x55, 0x50, 0xFF, + 0x2D, 0x2E, 0x29, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x15, 0x15, 0x13, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x18, 0x19, 0x16, 0xFF, 0x18, 0x19, 0x16, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x17, 0x17, 0x17, 0xFF, 0x14, 0x14, 0x14, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, + 0x0D, 0x0D, 0x0B, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, + 0x0C, 0x0C, 0x0C, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x16, 0x16, 0x16, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, + 0x11, 0x11, 0x11, 0xFF, 0x1D, 0x1D, 0x1D, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x15, 0x15, 0x15, 0xFF, 0x18, 0x18, 0x18, 0xFF, 0x1B, 0x1B, 0x1B, 0xFF, + 0x15, 0x15, 0x13, 0xFF, 0x21, 0x21, 0x1F, 0xFF, 0x44, 0x44, 0x3F, 0xFF, + 0x89, 0x8A, 0x85, 0xFF, 0xC5, 0xC6, 0xBF, 0xFF, 0xDC, 0xDD, 0xD6, 0xFF, + 0xD7, 0xD9, 0xD1, 0xFF, 0xCC, 0xCD, 0xC6, 0xFF, 0xE1, 0xE2, 0xDB, 0xFF, + 0xD4, 0xD5, 0xCE, 0xFF, 0xB9, 0xBA, 0xB5, 0xFF, 0x99, 0x99, 0x94, 0xFF, + 0x86, 0x87, 0x82, 0xFF, 0x7A, 0x7B, 0x76, 0xFF, 0x6B, 0x6E, 0x68, 0xFF, + 0x56, 0x59, 0x53, 0xFF, 0x4E, 0x51, 0x4B, 0xFF, 0x3B, 0x3E, 0x39, 0xFF, + 0x2A, 0x30, 0x29, 0xFF, 0x1F, 0x24, 0x1E, 0xFF, 0x30, 0x36, 0x2F, 0xFF, + 0x5C, 0x62, 0x5B, 0xFF, 0x7B, 0x80, 0x7A, 0xFF, 0x78, 0x7E, 0x77, 0xFF, + 0xA0, 0xA0, 0x9B, 0xFF, 0x9A, 0x9A, 0x96, 0xFF, 0x9E, 0x9F, 0x9A, 0xFF, + 0xAA, 0xAB, 0xA6, 0xFF, 0xAC, 0xAD, 0xA8, 0xFF, 0xB0, 0xB1, 0xAC, 0xFF, + 0xA1, 0xA1, 0x9D, 0xFF, 0x86, 0x87, 0x82, 0xFF, 0xAB, 0xAC, 0xA7, 0xFF, + 0x96, 0x97, 0x92, 0xFF, 0x8E, 0x8F, 0x8A, 0xFF, 0x96, 0x97, 0x92, 0xFF, + 0xA0, 0xA0, 0x9B, 0xFF, 0x90, 0x91, 0x8C, 0xFF, 0x6D, 0x6E, 0x69, 0xFF, + 0x48, 0x49, 0x44, 0xFF, 0x48, 0x49, 0x42, 0xFF, 0x44, 0x45, 0x3D, 0xFF, + 0x49, 0x4B, 0x43, 0xFF, 0x57, 0x58, 0x51, 0xFF, 0x69, 0x6A, 0x65, 0xFF, + 0x7A, 0x7B, 0x76, 0xFF, 0x8F, 0x90, 0x8B, 0xFF, 0x9B, 0x9C, 0x97, 0xFF, + 0x8B, 0x8B, 0x87, 0xFF, 0x6C, 0x6D, 0x68, 0xFF, 0x42, 0x43, 0x3E, 0xFF, + 0x25, 0x26, 0x21, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x15, 0x15, 0x13, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x11, 0x12, 0x0F, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x16, 0x17, 0x14, 0xFF, + 0x1C, 0x1C, 0x1A, 0xFF, 0x1C, 0x1C, 0x1A, 0xFF, 0x16, 0x17, 0x14, 0xFF, + 0x17, 0x17, 0x17, 0xFF, 0x14, 0x14, 0x14, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, 0x13, 0x13, 0x13, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x0C, 0x0C, 0x0A, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, + 0x0D, 0x0D, 0x0B, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, + 0x0A, 0x0A, 0x0A, 0xFF, 0x0C, 0x0C, 0x0C, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x14, 0x14, 0x14, 0xFF, 0x1D, 0x1D, 0x1D, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x0D, 0x0D, 0x0D, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x05, 0x05, 0x05, 0xFF, + 0x08, 0x08, 0x08, 0xFF, 0x0C, 0x0C, 0x0C, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, + 0x22, 0x22, 0x20, 0xFF, 0x37, 0x37, 0x35, 0xFF, 0x52, 0x52, 0x4D, 0xFF, + 0x80, 0x81, 0x7C, 0xFF, 0xB7, 0xB8, 0xB1, 0xFF, 0xDA, 0xDB, 0xD4, 0xFF, + 0xDA, 0xDB, 0xD4, 0xFF, 0xC9, 0xCB, 0xC3, 0xFF, 0xCB, 0xCC, 0xC5, 0xFF, + 0xB9, 0xBA, 0xB3, 0xFF, 0xA5, 0xA6, 0xA1, 0xFF, 0x8E, 0x8F, 0x8A, 0xFF, + 0x82, 0x83, 0x7E, 0xFF, 0x73, 0x74, 0x6F, 0xFF, 0x68, 0x6C, 0x66, 0xFF, + 0x53, 0x57, 0x51, 0xFF, 0x3C, 0x3F, 0x3A, 0xFF, 0x32, 0x35, 0x2F, 0xFF, + 0x2B, 0x31, 0x2B, 0xFF, 0x28, 0x2D, 0x27, 0xFF, 0x29, 0x2F, 0x28, 0xFF, + 0x4C, 0x52, 0x4B, 0xFF, 0x6A, 0x70, 0x69, 0xFF, 0x71, 0x77, 0x70, 0xFF, + 0xA8, 0xA8, 0xA4, 0xFF, 0xA9, 0xAA, 0xA5, 0xFF, 0xA8, 0xA8, 0xA4, 0xFF, + 0xA3, 0xA4, 0x9F, 0xFF, 0x9A, 0x9A, 0x96, 0xFF, 0x92, 0x92, 0x8E, 0xFF, + 0x96, 0x97, 0x92, 0xFF, 0xA2, 0xA3, 0x9E, 0xFF, 0x97, 0x98, 0x93, 0xFF, + 0x9A, 0x9A, 0x96, 0xFF, 0x8E, 0x8F, 0x8A, 0xFF, 0x7D, 0x7D, 0x79, 0xFF, + 0x53, 0x53, 0x4F, 0xFF, 0x40, 0x41, 0x3C, 0xFF, 0x41, 0x42, 0x3D, 0xFF, + 0x54, 0x55, 0x50, 0xFF, 0x5C, 0x5D, 0x56, 0xFF, 0x68, 0x69, 0x62, 0xFF, + 0x7F, 0x80, 0x79, 0xFF, 0x94, 0x95, 0x8E, 0xFF, 0xA1, 0xA1, 0x9D, 0xFF, + 0x9E, 0x9F, 0x9A, 0xFF, 0x92, 0x92, 0x8E, 0xFF, 0x7F, 0x80, 0x7B, 0xFF, + 0x6C, 0x6D, 0x68, 0xFF, 0x4B, 0x4B, 0x46, 0xFF, 0x29, 0x2A, 0x25, 0xFF, + 0x1C, 0x1D, 0x18, 0xFF, 0x15, 0x15, 0x13, 0xFF, 0x14, 0x14, 0x12, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x11, 0x12, 0x0F, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x18, 0x19, 0x16, 0xFF, + 0x1E, 0x1F, 0x1C, 0xFF, 0x1E, 0x1F, 0x1C, 0xFF, 0x18, 0x19, 0x16, 0xFF, + 0x17, 0x17, 0x17, 0xFF, 0x14, 0x14, 0x14, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x0C, 0x0C, 0x0C, 0xFF, 0x13, 0x13, 0x13, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x0C, 0x0C, 0x0A, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, + 0x0C, 0x0C, 0x0A, 0xFF, 0x0C, 0x0C, 0x0A, 0xFF, 0x0C, 0x0C, 0x0A, 0xFF, + 0x0A, 0x0A, 0x0A, 0xFF, 0x0C, 0x0C, 0x0C, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, + 0x11, 0x11, 0x11, 0xFF, 0x14, 0x14, 0x14, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x1A, 0x1A, 0x1A, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, + 0x11, 0x11, 0x11, 0xFF, 0x15, 0x15, 0x15, 0xFF, 0x17, 0x17, 0x17, 0xFF, + 0x24, 0x24, 0x22, 0xFF, 0x40, 0x40, 0x3E, 0xFF, 0x54, 0x55, 0x50, 0xFF, + 0x73, 0x74, 0x6F, 0xFF, 0xB6, 0xB7, 0xB0, 0xFF, 0xD2, 0xD3, 0xCC, 0xFF, + 0xD4, 0xD5, 0xCE, 0xFF, 0xCF, 0xD0, 0xC9, 0xFF, 0xCD, 0xCE, 0xC7, 0xFF, + 0xB3, 0xB4, 0xAD, 0xFF, 0xA0, 0xA0, 0x9B, 0xFF, 0x89, 0x8A, 0x85, 0xFF, + 0x71, 0x72, 0x6D, 0xFF, 0x5F, 0x60, 0x5B, 0xFF, 0x53, 0x57, 0x51, 0xFF, + 0x42, 0x45, 0x3F, 0xFF, 0x43, 0x46, 0x41, 0xFF, 0x33, 0x36, 0x30, 0xFF, + 0x24, 0x2A, 0x24, 0xFF, 0x1C, 0x22, 0x1B, 0xFF, 0x1B, 0x21, 0x1A, 0xFF, + 0x39, 0x3F, 0x39, 0xFF, 0x58, 0x5D, 0x57, 0xFF, 0x63, 0x69, 0x62, 0xFF, + 0xA7, 0xA7, 0xA2, 0xFF, 0xA2, 0xA3, 0x9E, 0xFF, 0x9E, 0x9F, 0x9A, 0xFF, + 0xA0, 0xA0, 0x9B, 0xFF, 0xA5, 0xA6, 0xA1, 0xFF, 0x9C, 0x9D, 0x98, 0xFF, + 0x9B, 0x9C, 0x97, 0xFF, 0x8F, 0x90, 0x8B, 0xFF, 0x79, 0x7A, 0x75, 0xFF, + 0x62, 0x63, 0x5E, 0xFF, 0x44, 0x44, 0x3F, 0xFF, 0x45, 0x45, 0x41, 0xFF, + 0x49, 0x4A, 0x45, 0xFF, 0x5B, 0x5C, 0x57, 0xFF, 0x6C, 0x6D, 0x68, 0xFF, + 0x78, 0x79, 0x74, 0xFF, 0x8E, 0x8F, 0x88, 0xFF, 0x97, 0x99, 0x91, 0xFF, + 0xA0, 0xA1, 0x99, 0xFF, 0x99, 0x9A, 0x92, 0xFF, 0x95, 0x96, 0x91, 0xFF, + 0x84, 0x84, 0x80, 0xFF, 0x6F, 0x6F, 0x6B, 0xFF, 0x63, 0x64, 0x5F, 0xFF, + 0x5A, 0x5A, 0x56, 0xFF, 0x41, 0x42, 0x3D, 0xFF, 0x25, 0x26, 0x21, 0xFF, + 0x24, 0x25, 0x20, 0xFF, 0x1D, 0x1D, 0x1B, 0xFF, 0x16, 0x17, 0x14, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x13, 0x13, 0x13, 0xFF, 0x13, 0x13, 0x13, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x11, 0x12, 0x0F, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x17, 0x18, 0x13, 0xFF, 0x1A, 0x1A, 0x16, 0xFF, 0x1E, 0x1F, 0x1A, 0xFF, + 0x1B, 0x1C, 0x17, 0xFF, 0x1D, 0x1E, 0x19, 0xFF, 0x25, 0x26, 0x23, 0xFF, + 0x21, 0x21, 0x1F, 0xFF, 0x1C, 0x1C, 0x1A, 0xFF, 0x17, 0x18, 0x15, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x11, 0x12, 0x0F, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, + 0x0F, 0x10, 0x0D, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, 0x0C, 0x0C, 0x0A, 0xFF, + 0x0C, 0x0C, 0x0A, 0xFF, 0x0C, 0x0C, 0x0A, 0xFF, 0x0C, 0x0C, 0x0A, 0xFF, + 0x0C, 0x0C, 0x0C, 0xFF, 0x0C, 0x0C, 0x0C, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x14, 0x13, 0x16, 0xFF, 0x0E, 0x0E, 0x10, 0xFF, + 0x14, 0x13, 0x16, 0xFF, 0x1E, 0x1E, 0x20, 0xFF, 0x0F, 0x0F, 0x11, 0xFF, + 0x11, 0x11, 0x13, 0xFF, 0x14, 0x14, 0x14, 0xFF, 0x16, 0x16, 0x16, 0xFF, + 0x3B, 0x3C, 0x39, 0xFF, 0x2C, 0x2D, 0x28, 0xFF, 0x36, 0x36, 0x32, 0xFF, + 0x78, 0x79, 0x74, 0xFF, 0xB7, 0xB8, 0xB3, 0xFF, 0xCF, 0xD0, 0xCB, 0xFF, + 0xCB, 0xCB, 0xC7, 0xFF, 0xD0, 0xD1, 0xCC, 0xFF, 0xB9, 0xBA, 0xB5, 0xFF, + 0x9B, 0x9C, 0x97, 0xFF, 0x7F, 0x80, 0x7B, 0xFF, 0x74, 0x75, 0x70, 0xFF, + 0x62, 0x62, 0x60, 0xFF, 0x66, 0x67, 0x64, 0xFF, 0x6C, 0x6F, 0x6B, 0xFF, + 0x72, 0x74, 0x71, 0xFF, 0x78, 0x7D, 0x79, 0xFF, 0x64, 0x6A, 0x66, 0xFF, + 0x3D, 0x42, 0x3E, 0xFF, 0x19, 0x21, 0x1C, 0xFF, 0x17, 0x1F, 0x1A, 0xFF, + 0x26, 0x2E, 0x29, 0xFF, 0x48, 0x50, 0x4B, 0xFF, 0x6A, 0x71, 0x6D, 0xFF, + 0xA0, 0xA0, 0x9B, 0xFF, 0x9C, 0x9D, 0x98, 0xFF, 0x9A, 0x9A, 0x96, 0xFF, + 0x9A, 0x9A, 0x96, 0xFF, 0xA1, 0xA1, 0x9D, 0xFF, 0x8B, 0x8B, 0x87, 0xFF, + 0x69, 0x6A, 0x65, 0xFF, 0x4D, 0x4E, 0x49, 0xFF, 0x36, 0x36, 0x32, 0xFF, + 0x4D, 0x4E, 0x49, 0xFF, 0x64, 0x65, 0x60, 0xFF, 0x74, 0x75, 0x70, 0xFF, + 0x79, 0x7A, 0x75, 0xFF, 0x88, 0x89, 0x84, 0xFF, 0x97, 0x98, 0x93, 0xFF, + 0xA2, 0xA3, 0x9E, 0xFF, 0x95, 0x96, 0x8F, 0xFF, 0x9A, 0x9B, 0x94, 0xFF, + 0x92, 0x93, 0x8B, 0xFF, 0x7F, 0x80, 0x79, 0xFF, 0x70, 0x71, 0x6C, 0xFF, + 0x69, 0x6A, 0x65, 0xFF, 0x62, 0x63, 0x5E, 0xFF, 0x5E, 0x5F, 0x5A, 0xFF, + 0x4E, 0x4F, 0x4A, 0xFF, 0x39, 0x3A, 0x35, 0xFF, 0x21, 0x21, 0x1D, 0xFF, + 0x22, 0x23, 0x1E, 0xFF, 0x1D, 0x1D, 0x1B, 0xFF, 0x17, 0x18, 0x15, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x13, 0x13, 0x13, 0xFF, 0x13, 0x13, 0x13, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x11, 0x12, 0x0F, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x17, 0x18, 0x13, 0xFF, 0x1A, 0x1A, 0x16, 0xFF, 0x1F, 0x20, 0x1B, 0xFF, + 0x18, 0x19, 0x14, 0xFF, 0x18, 0x19, 0x14, 0xFF, 0x1E, 0x1F, 0x1A, 0xFF, + 0x21, 0x21, 0x1F, 0xFF, 0x1C, 0x1C, 0x1A, 0xFF, 0x15, 0x15, 0x13, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x0A, 0x0B, 0x08, 0xFF, 0x09, 0x0A, 0x07, 0xFF, + 0x0A, 0x0B, 0x08, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, 0x0A, 0x0B, 0x08, 0xFF, + 0x0A, 0x0B, 0x08, 0xFF, 0x0A, 0x0B, 0x08, 0xFF, 0x0A, 0x0B, 0x08, 0xFF, + 0x0C, 0x0C, 0x0C, 0xFF, 0x0C, 0x0C, 0x0C, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x16, 0x16, 0x18, 0xFF, 0x0C, 0x0B, 0x0E, 0xFF, + 0x08, 0x08, 0x0A, 0xFF, 0x0D, 0x0C, 0x0F, 0xFF, 0x00, 0x00, 0x02, 0xFF, + 0x15, 0x15, 0x17, 0xFF, 0x32, 0x32, 0x32, 0xFF, 0x46, 0x46, 0x46, 0xFF, + 0x82, 0x83, 0x80, 0xFF, 0x44, 0x44, 0x3F, 0xFF, 0x3F, 0x40, 0x3B, 0xFF, + 0x86, 0x87, 0x82, 0xFF, 0xC6, 0xC7, 0xC2, 0xFF, 0xC8, 0xC9, 0xC4, 0xFF, + 0xBA, 0xBB, 0xB6, 0xFF, 0xB4, 0xB5, 0xB0, 0xFF, 0x9A, 0x9A, 0x96, 0xFF, + 0x8E, 0x8F, 0x8A, 0xFF, 0x84, 0x84, 0x80, 0xFF, 0x80, 0x81, 0x7C, 0xFF, + 0x88, 0x89, 0x86, 0xFF, 0x90, 0x91, 0x8E, 0xFF, 0x9A, 0x9D, 0x9A, 0xFF, + 0xA3, 0xA5, 0xA2, 0xFF, 0x94, 0x99, 0x95, 0xFF, 0x7D, 0x82, 0x7E, 0xFF, + 0x5C, 0x63, 0x5F, 0xFF, 0x43, 0x4B, 0x46, 0xFF, 0x30, 0x37, 0x32, 0xFF, + 0x2C, 0x34, 0x2F, 0xFF, 0x3A, 0x42, 0x3D, 0xFF, 0x56, 0x5E, 0x59, 0xFF, + 0xA0, 0xA0, 0x9B, 0xFF, 0xA2, 0xA3, 0x9E, 0xFF, 0x8F, 0x90, 0x8B, 0xFF, + 0x73, 0x74, 0x6F, 0xFF, 0x4D, 0x4E, 0x49, 0xFF, 0x44, 0x44, 0x3F, 0xFF, + 0x45, 0x45, 0x41, 0xFF, 0x56, 0x57, 0x52, 0xFF, 0x77, 0x78, 0x73, 0xFF, + 0x72, 0x73, 0x6E, 0xFF, 0x7E, 0x7F, 0x7A, 0xFF, 0x8B, 0x8B, 0x87, 0xFF, + 0xA0, 0xA0, 0x9B, 0xFF, 0xA1, 0xA1, 0x9D, 0xFF, 0x9D, 0x9E, 0x99, 0xFF, + 0x96, 0x97, 0x92, 0xFF, 0x85, 0x86, 0x7F, 0xFF, 0x89, 0x8B, 0x83, 0xFF, + 0x7F, 0x80, 0x79, 0xFF, 0x6F, 0x70, 0x69, 0xFF, 0x6C, 0x6D, 0x68, 0xFF, + 0x69, 0x6A, 0x65, 0xFF, 0x65, 0x66, 0x61, 0xFF, 0x63, 0x64, 0x5F, 0xFF, + 0x45, 0x45, 0x41, 0xFF, 0x32, 0x33, 0x2E, 0xFF, 0x1E, 0x1F, 0x1A, 0xFF, + 0x1D, 0x1E, 0x19, 0xFF, 0x1D, 0x1D, 0x1B, 0xFF, 0x17, 0x18, 0x15, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x14, 0x14, 0x14, 0xFF, 0x14, 0x14, 0x14, 0xFF, 0x14, 0x14, 0x12, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x14, 0x14, 0x12, 0xFF, + 0x17, 0x18, 0x13, 0xFF, 0x1A, 0x1A, 0x16, 0xFF, 0x1C, 0x1D, 0x18, 0xFF, + 0x1F, 0x20, 0x1B, 0xFF, 0x2F, 0x2F, 0x2B, 0xFF, 0x3F, 0x40, 0x3B, 0xFF, + 0x1F, 0x20, 0x1B, 0xFF, 0x1F, 0x20, 0x1B, 0xFF, 0x1F, 0x20, 0x1B, 0xFF, + 0x1F, 0x20, 0x1B, 0xFF, 0x16, 0x17, 0x14, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x0D, 0x0D, 0x0B, 0xFF, 0x0A, 0x0B, 0x08, 0xFF, 0x0A, 0x0B, 0x08, 0xFF, + 0x0A, 0x0B, 0x08, 0xFF, 0x0A, 0x0B, 0x08, 0xFF, 0x0A, 0x0B, 0x08, 0xFF, + 0x0C, 0x0C, 0x0C, 0xFF, 0x0C, 0x0C, 0x0C, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x16, 0x16, 0x16, 0xFF, 0x0C, 0x0C, 0x0C, 0xFF, + 0x08, 0x08, 0x08, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, 0x15, 0x15, 0x15, 0xFF, + 0x3A, 0x3A, 0x3A, 0xFF, 0x70, 0x70, 0x70, 0xFF, 0x95, 0x95, 0x95, 0xFF, + 0xAD, 0xAE, 0xAB, 0xFF, 0x4F, 0x50, 0x4B, 0xFF, 0x4C, 0x4C, 0x48, 0xFF, + 0x96, 0x97, 0x92, 0xFF, 0xB7, 0xB8, 0xB3, 0xFF, 0xA9, 0xAA, 0xA5, 0xFF, + 0xA5, 0xA6, 0xA1, 0xFF, 0xA1, 0xA1, 0x9D, 0xFF, 0xA1, 0xA5, 0x9F, 0xFF, + 0xA7, 0xAA, 0xA5, 0xFF, 0xAB, 0xAE, 0xA8, 0xFF, 0xAB, 0xAE, 0xA8, 0xFF, + 0xAE, 0xB1, 0xAE, 0xFF, 0xAE, 0xB1, 0xAE, 0xFF, 0xAB, 0xAE, 0xAA, 0xFF, + 0xA7, 0xAC, 0xA8, 0xFF, 0xA1, 0xA6, 0xA2, 0xFF, 0x9B, 0xA0, 0x9C, 0xFF, + 0x8D, 0x94, 0x90, 0xFF, 0x6C, 0x74, 0x6F, 0xFF, 0x65, 0x6D, 0x68, 0xFF, + 0x41, 0x49, 0x44, 0xFF, 0x31, 0x38, 0x34, 0xFF, 0x32, 0x3A, 0x35, 0xFF, + 0x72, 0x73, 0x6E, 0xFF, 0x5C, 0x5D, 0x58, 0xFF, 0x4B, 0x4B, 0x46, 0xFF, + 0x47, 0x48, 0x43, 0xFF, 0x5B, 0x5C, 0x57, 0xFF, 0x6B, 0x6C, 0x67, 0xFF, + 0x7E, 0x7F, 0x7A, 0xFF, 0x88, 0x89, 0x84, 0xFF, 0x93, 0x93, 0x8F, 0xFF, + 0xA3, 0xA4, 0x9F, 0xFF, 0xAC, 0xAD, 0xA8, 0xFF, 0xA9, 0xAA, 0xA5, 0xFF, + 0x94, 0x95, 0x90, 0xFF, 0x8F, 0x90, 0x8B, 0xFF, 0x89, 0x8A, 0x85, 0xFF, + 0x85, 0x86, 0x81, 0xFF, 0x80, 0x81, 0x7A, 0xFF, 0x7A, 0x7B, 0x74, 0xFF, + 0x73, 0x74, 0x6D, 0xFF, 0x6D, 0x6F, 0x67, 0xFF, 0x6B, 0x6C, 0x67, 0xFF, + 0x64, 0x65, 0x60, 0xFF, 0x5A, 0x5A, 0x56, 0xFF, 0x53, 0x53, 0x4F, 0xFF, + 0x3F, 0x40, 0x3B, 0xFF, 0x31, 0x32, 0x2D, 0xFF, 0x1D, 0x1E, 0x19, 0xFF, + 0x1A, 0x1A, 0x16, 0xFF, 0x1C, 0x1C, 0x1A, 0xFF, 0x17, 0x18, 0x15, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x13, 0x13, 0x13, 0xFF, 0x13, 0x13, 0x13, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x14, 0x14, 0x12, 0xFF, + 0x17, 0x18, 0x13, 0xFF, 0x1A, 0x1A, 0x16, 0xFF, 0x15, 0x16, 0x11, 0xFF, + 0x2A, 0x2B, 0x26, 0xFF, 0x50, 0x51, 0x4C, 0xFF, 0x72, 0x73, 0x6E, 0xFF, + 0x1C, 0x1D, 0x18, 0xFF, 0x24, 0x25, 0x20, 0xFF, 0x31, 0x32, 0x2D, 0xFF, + 0x3A, 0x3B, 0x36, 0xFF, 0x38, 0x38, 0x36, 0xFF, 0x22, 0x22, 0x20, 0xFF, + 0x14, 0x14, 0x12, 0xFF, 0x09, 0x0A, 0x07, 0xFF, 0x0A, 0x0B, 0x08, 0xFF, + 0x0A, 0x0B, 0x08, 0xFF, 0x0C, 0x0C, 0x0A, 0xFF, 0x0A, 0x0B, 0x08, 0xFF, + 0x0C, 0x0C, 0x0C, 0xFF, 0x0C, 0x0C, 0x0C, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x14, 0x14, 0x14, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x14, 0x14, 0x14, 0xFF, 0x1E, 0x1E, 0x1E, 0xFF, 0x14, 0x14, 0x14, 0xFF, + 0x29, 0x29, 0x29, 0xFF, 0x47, 0x47, 0x47, 0xFF, 0x5C, 0x5C, 0x5A, 0xFF, + 0xA0, 0xA0, 0x9D, 0xFF, 0x47, 0x48, 0x43, 0xFF, 0x56, 0x57, 0x52, 0xFF, + 0x9E, 0x9F, 0x9A, 0xFF, 0xAD, 0xAE, 0xA9, 0xFF, 0xA0, 0xA0, 0x9B, 0xFF, + 0xB4, 0xB5, 0xB0, 0xFF, 0xBB, 0xBC, 0xB7, 0xFF, 0xB4, 0xB7, 0xB2, 0xFF, + 0xC1, 0xC4, 0xBE, 0xFF, 0xC4, 0xC8, 0xC2, 0xFF, 0xBD, 0xC1, 0xBB, 0xFF, + 0xB3, 0xB6, 0xB2, 0xFF, 0xB4, 0xB7, 0xB4, 0xFF, 0xB4, 0xB9, 0xB5, 0xFF, + 0xB4, 0xB9, 0xB5, 0xFF, 0xAA, 0xB0, 0xAB, 0xFF, 0xAD, 0xB2, 0xAE, 0xFF, + 0xA4, 0xAC, 0xA7, 0xFF, 0x8E, 0x96, 0x91, 0xFF, 0x79, 0x81, 0x7C, 0xFF, + 0x55, 0x5C, 0x58, 0xFF, 0x3B, 0x43, 0x3E, 0xFF, 0x35, 0x3D, 0x38, 0xFF, + 0x4D, 0x4E, 0x49, 0xFF, 0x58, 0x59, 0x54, 0xFF, 0x6A, 0x6B, 0x66, 0xFF, + 0x76, 0x76, 0x72, 0xFF, 0x84, 0x84, 0x80, 0xFF, 0x96, 0x97, 0x92, 0xFF, + 0xAB, 0xAC, 0xA7, 0xFF, 0xB0, 0xB1, 0xAC, 0xFF, 0xAC, 0xAD, 0xA8, 0xFF, + 0xA2, 0xA3, 0x9E, 0xFF, 0x97, 0x98, 0x93, 0xFF, 0x92, 0x92, 0x8E, 0xFF, + 0x8D, 0x8E, 0x89, 0xFF, 0x86, 0x87, 0x82, 0xFF, 0x80, 0x81, 0x7C, 0xFF, + 0x7E, 0x7F, 0x7A, 0xFF, 0x7D, 0x7E, 0x77, 0xFF, 0x77, 0x78, 0x71, 0xFF, + 0x70, 0x71, 0x6A, 0xFF, 0x6A, 0x6B, 0x64, 0xFF, 0x69, 0x6A, 0x65, 0xFF, + 0x62, 0x63, 0x5E, 0xFF, 0x5A, 0x5A, 0x56, 0xFF, 0x4E, 0x4F, 0x4A, 0xFF, + 0x34, 0x35, 0x30, 0xFF, 0x26, 0x27, 0x22, 0xFF, 0x1C, 0x1D, 0x18, 0xFF, + 0x18, 0x19, 0x14, 0xFF, 0x1C, 0x1C, 0x1A, 0xFF, 0x17, 0x18, 0x15, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x1E, 0x1F, 0x1C, 0xFF, 0x16, 0x17, 0x14, 0xFF, + 0x21, 0x21, 0x1D, 0xFF, 0x18, 0x19, 0x14, 0xFF, 0x23, 0x24, 0x1F, 0xFF, + 0x2B, 0x2C, 0x27, 0xFF, 0x94, 0x95, 0x90, 0xFF, 0x76, 0x76, 0x72, 0xFF, + 0x13, 0x13, 0x0F, 0xFF, 0x16, 0x17, 0x12, 0xFF, 0x32, 0x33, 0x2E, 0xFF, + 0x82, 0x83, 0x7E, 0xFF, 0x5B, 0x5C, 0x57, 0xFF, 0x50, 0x51, 0x4C, 0xFF, + 0x11, 0x12, 0x0D, 0xFF, 0x18, 0x19, 0x14, 0xFF, 0x05, 0x05, 0x01, 0xFF, + 0x08, 0x09, 0x04, 0xFF, 0x0C, 0x0C, 0x08, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x0C, 0x0C, 0x0A, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x1B, 0x1B, 0x1B, 0xFF, 0x16, 0x16, 0x16, 0xFF, + 0x16, 0x16, 0x16, 0xFF, 0x78, 0x78, 0x78, 0xFF, 0x25, 0x25, 0x25, 0xFF, + 0x09, 0x09, 0x09, 0xFF, 0x37, 0x37, 0x35, 0xFF, 0x7A, 0x7B, 0x78, 0xFF, + 0x88, 0x89, 0x86, 0xFF, 0x48, 0x49, 0x46, 0xFF, 0x66, 0x67, 0x62, 0xFF, + 0xAA, 0xAB, 0xA6, 0xFF, 0xBA, 0xBD, 0xB7, 0xFF, 0xBA, 0xBD, 0xB7, 0xFF, + 0xBA, 0xBD, 0xB7, 0xFF, 0xBA, 0xBD, 0xB7, 0xFF, 0xC3, 0xC6, 0xC3, 0xFF, + 0xC3, 0xC6, 0xC3, 0xFF, 0xC3, 0xC6, 0xC3, 0xFF, 0xC3, 0xC6, 0xC3, 0xFF, + 0xB7, 0xBC, 0xB8, 0xFF, 0xBC, 0xC1, 0xBD, 0xFF, 0xBB, 0xC0, 0xBC, 0xFF, + 0xB4, 0xB9, 0xB5, 0xFF, 0xB0, 0xB7, 0xB2, 0xFF, 0xB8, 0xBF, 0xBB, 0xFF, + 0xB9, 0xC1, 0xBC, 0xFF, 0xB1, 0xB8, 0xB4, 0xFF, 0xA5, 0xAD, 0xA8, 0xFF, + 0x8A, 0x92, 0x8D, 0xFF, 0x6B, 0x73, 0x6E, 0xFF, 0x51, 0x59, 0x54, 0xFF, + 0x74, 0x75, 0x70, 0xFF, 0x80, 0x81, 0x7C, 0xFF, 0x90, 0x91, 0x8C, 0xFF, + 0x9C, 0x9D, 0x98, 0xFF, 0xA7, 0xA7, 0xA2, 0xFF, 0xA4, 0xA5, 0xA0, 0xFF, + 0xA3, 0xA4, 0x9F, 0xFF, 0x9D, 0x9E, 0x99, 0xFF, 0x94, 0x95, 0x90, 0xFF, + 0x8E, 0x8F, 0x8A, 0xFF, 0x88, 0x89, 0x84, 0xFF, 0x87, 0x88, 0x83, 0xFF, + 0x82, 0x83, 0x7E, 0xFF, 0x80, 0x81, 0x7C, 0xFF, 0x7E, 0x7F, 0x7A, 0xFF, + 0x7B, 0x7C, 0x77, 0xFF, 0x7A, 0x7B, 0x74, 0xFF, 0x74, 0x76, 0x6E, 0xFF, + 0x6D, 0x6F, 0x67, 0xFF, 0x68, 0x69, 0x62, 0xFF, 0x65, 0x66, 0x61, 0xFF, + 0x5E, 0x5F, 0x5A, 0xFF, 0x56, 0x57, 0x52, 0xFF, 0x4B, 0x4B, 0x46, 0xFF, + 0x32, 0x33, 0x2E, 0xFF, 0x24, 0x25, 0x20, 0xFF, 0x1A, 0x1A, 0x16, 0xFF, + 0x16, 0x17, 0x12, 0xFF, 0x1B, 0x1B, 0x19, 0xFF, 0x17, 0x18, 0x15, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x1A, 0x1A, 0x18, 0xFF, 0x18, 0x19, 0x16, 0xFF, + 0x1E, 0x1F, 0x1A, 0xFF, 0x1D, 0x1E, 0x19, 0xFF, 0x2D, 0x2E, 0x29, 0xFF, + 0x2C, 0x2D, 0x28, 0xFF, 0x7D, 0x7D, 0x79, 0xFF, 0x8E, 0x8F, 0x8A, 0xFF, + 0x1E, 0x1F, 0x1A, 0xFF, 0x0D, 0x0E, 0x09, 0xFF, 0x17, 0x18, 0x13, 0xFF, + 0x2F, 0x2F, 0x2B, 0xFF, 0x3F, 0x40, 0x3B, 0xFF, 0x71, 0x72, 0x6D, 0xFF, + 0x2C, 0x2D, 0x28, 0xFF, 0x0D, 0x0E, 0x09, 0xFF, 0x0C, 0x0C, 0x08, 0xFF, + 0x09, 0x0A, 0x05, 0xFF, 0x0C, 0x0C, 0x08, 0xFF, 0x0C, 0x0C, 0x08, 0xFF, + 0x0C, 0x0C, 0x0A, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x06, 0x06, 0x06, 0xFF, 0x1B, 0x1B, 0x1B, 0xFF, + 0x30, 0x30, 0x30, 0xFF, 0x8F, 0x8F, 0x8F, 0xFF, 0x5D, 0x5D, 0x5D, 0xFF, + 0x42, 0x42, 0x42, 0xFF, 0x70, 0x70, 0x6E, 0xFF, 0xAF, 0xAF, 0xAD, 0xFF, + 0x71, 0x71, 0x6F, 0xFF, 0x50, 0x51, 0x4E, 0xFF, 0x7B, 0x7C, 0x77, 0xFF, + 0xB0, 0xB1, 0xAC, 0xFF, 0xBA, 0xBD, 0xB7, 0xFF, 0xBA, 0xBD, 0xB7, 0xFF, + 0xBB, 0xBE, 0xB9, 0xFF, 0xBB, 0xBE, 0xB9, 0xFF, 0xBB, 0xBE, 0xBB, 0xFF, + 0xBB, 0xBE, 0xBB, 0xFF, 0xBC, 0xBF, 0xBC, 0xFF, 0xBC, 0xBF, 0xBC, 0xFF, + 0xB6, 0xBB, 0xB7, 0xFF, 0xBF, 0xC4, 0xC0, 0xFF, 0xC5, 0xCA, 0xC6, 0xFF, + 0xBC, 0xC1, 0xBD, 0xFF, 0xB4, 0xBC, 0xB7, 0xFF, 0xBD, 0xC4, 0xBF, 0xFF, + 0xBF, 0xC6, 0xC2, 0xFF, 0xB8, 0xBF, 0xBB, 0xFF, 0xAD, 0xB5, 0xB0, 0xFF, + 0x98, 0xA0, 0x9B, 0xFF, 0x87, 0x8F, 0x8A, 0xFF, 0x73, 0x7B, 0x76, 0xFF, + 0x9E, 0x9F, 0x9A, 0xFF, 0xA2, 0xA3, 0x9E, 0xFF, 0xA7, 0xA7, 0xA2, 0xFF, + 0xAA, 0xAB, 0xA6, 0xFF, 0xA7, 0xA7, 0xA2, 0xFF, 0x9E, 0x9F, 0x9A, 0xFF, + 0x94, 0x95, 0x90, 0xFF, 0x90, 0x91, 0x8C, 0xFF, 0x8B, 0x8B, 0x87, 0xFF, + 0x89, 0x8A, 0x85, 0xFF, 0x87, 0x88, 0x83, 0xFF, 0x84, 0x84, 0x80, 0xFF, + 0x80, 0x81, 0x7C, 0xFF, 0x7F, 0x80, 0x7B, 0xFF, 0x7D, 0x7D, 0x79, 0xFF, + 0x7A, 0x7B, 0x76, 0xFF, 0x79, 0x7A, 0x73, 0xFF, 0x73, 0x74, 0x6D, 0xFF, + 0x6C, 0x6D, 0x66, 0xFF, 0x66, 0x68, 0x60, 0xFF, 0x63, 0x64, 0x5F, 0xFF, + 0x5C, 0x5D, 0x58, 0xFF, 0x54, 0x55, 0x50, 0xFF, 0x48, 0x49, 0x44, 0xFF, + 0x2F, 0x2F, 0x2B, 0xFF, 0x21, 0x21, 0x1D, 0xFF, 0x16, 0x17, 0x12, 0xFF, + 0x13, 0x13, 0x0F, 0xFF, 0x1B, 0x1B, 0x19, 0xFF, 0x17, 0x18, 0x15, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x11, 0x12, 0x0F, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x14, 0x14, 0x12, 0xFF, 0x1B, 0x1B, 0x19, 0xFF, + 0x1C, 0x1D, 0x18, 0xFF, 0x23, 0x24, 0x1F, 0xFF, 0x44, 0x44, 0x3F, 0xFF, + 0x42, 0x43, 0x3E, 0xFF, 0x68, 0x68, 0x64, 0xFF, 0xA1, 0xA1, 0x9D, 0xFF, + 0x3B, 0x3D, 0x35, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x08, 0x09, 0x02, 0xFF, + 0x2F, 0x30, 0x29, 0xFF, 0x54, 0x55, 0x50, 0xFF, 0x78, 0x79, 0x74, 0xFF, + 0x18, 0x19, 0x14, 0xFF, 0x0E, 0x0F, 0x0A, 0xFF, 0x14, 0x15, 0x10, 0xFF, + 0x0C, 0x0C, 0x08, 0xFF, 0x09, 0x0A, 0x05, 0xFF, 0x08, 0x09, 0x04, 0xFF, + 0x0D, 0x0D, 0x0B, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x17, 0x18, 0x15, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, + 0x2D, 0x2E, 0x2B, 0xFF, 0x92, 0x92, 0x90, 0xFF, 0xA9, 0xA9, 0xA7, 0xFF, + 0x94, 0x94, 0x92, 0xFF, 0x8B, 0x8B, 0x89, 0xFF, 0x77, 0x77, 0x75, 0xFF, + 0x50, 0x51, 0x4E, 0xFF, 0x5C, 0x5C, 0x5A, 0xFF, 0x99, 0x99, 0x94, 0xFF, + 0xB9, 0xBA, 0xB5, 0xFF, 0xBA, 0xBD, 0xB7, 0xFF, 0xBA, 0xBD, 0xB7, 0xFF, + 0xBB, 0xBE, 0xB9, 0xFF, 0xBB, 0xBE, 0xB9, 0xFF, 0xB9, 0xBF, 0xBB, 0xFF, + 0xB9, 0xBF, 0xBB, 0xFF, 0xBB, 0xC0, 0xBC, 0xFF, 0xBB, 0xC0, 0xBC, 0xFF, + 0xB2, 0xB8, 0xB4, 0xFF, 0xBE, 0xC5, 0xC0, 0xFF, 0xC2, 0xCA, 0xC5, 0xFF, + 0xBE, 0xC5, 0xC0, 0xFF, 0xBA, 0xC2, 0xBD, 0xFF, 0xC1, 0xC9, 0xC4, 0xFF, + 0xC3, 0xCB, 0xC6, 0xFF, 0xBD, 0xC4, 0xBF, 0xFF, 0xB2, 0xBA, 0xB5, 0xFF, + 0xA2, 0xA9, 0xA4, 0xFF, 0x98, 0xA0, 0x9B, 0xFF, 0x93, 0x9A, 0x95, 0xFF, + 0xB1, 0xB2, 0xAD, 0xFF, 0xA9, 0xAA, 0xA5, 0xFF, 0xA0, 0xA0, 0x9B, 0xFF, + 0x99, 0x99, 0x94, 0xFF, 0x96, 0x97, 0x92, 0xFF, 0x95, 0x96, 0x91, 0xFF, + 0x94, 0x95, 0x90, 0xFF, 0x93, 0x93, 0x8F, 0xFF, 0x90, 0x91, 0x8C, 0xFF, + 0x8E, 0x8F, 0x8A, 0xFF, 0x8B, 0x8B, 0x87, 0xFF, 0x88, 0x89, 0x84, 0xFF, + 0x80, 0x81, 0x7C, 0xFF, 0x7D, 0x7D, 0x79, 0xFF, 0x7B, 0x7C, 0x77, 0xFF, + 0x79, 0x7A, 0x75, 0xFF, 0x77, 0x78, 0x71, 0xFF, 0x71, 0x72, 0x6B, 0xFF, + 0x6A, 0x6B, 0x64, 0xFF, 0x64, 0x65, 0x5E, 0xFF, 0x5F, 0x60, 0x5B, 0xFF, + 0x5A, 0x5A, 0x56, 0xFF, 0x50, 0x51, 0x4C, 0xFF, 0x46, 0x47, 0x42, 0xFF, + 0x2C, 0x2D, 0x28, 0xFF, 0x1E, 0x1F, 0x1A, 0xFF, 0x15, 0x16, 0x11, 0xFF, + 0x11, 0x12, 0x0D, 0xFF, 0x1A, 0x1A, 0x18, 0xFF, 0x17, 0x18, 0x15, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x11, 0x12, 0x0F, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, 0x1D, 0x1D, 0x1B, 0xFF, + 0x1A, 0x1A, 0x16, 0xFF, 0x28, 0x28, 0x24, 0xFF, 0x45, 0x45, 0x41, 0xFF, + 0x4B, 0x4B, 0x46, 0xFF, 0x49, 0x4A, 0x45, 0xFF, 0x8F, 0x90, 0x8B, 0xFF, + 0x8E, 0x8F, 0x88, 0xFF, 0x55, 0x56, 0x4F, 0xFF, 0x5C, 0x5D, 0x56, 0xFF, + 0x76, 0x76, 0x72, 0xFF, 0x7D, 0x7D, 0x79, 0xFF, 0x52, 0x52, 0x4D, 0xFF, + 0x03, 0x04, 0x00, 0xFF, 0x16, 0x17, 0x12, 0xFF, 0x16, 0x17, 0x12, 0xFF, + 0x10, 0x11, 0x0C, 0xFF, 0x08, 0x09, 0x04, 0xFF, 0x05, 0x05, 0x03, 0xFF, + 0x0D, 0x0D, 0x0B, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, 0x08, 0x09, 0x06, 0xFF, + 0x17, 0x18, 0x15, 0xFF, 0x44, 0x44, 0x42, 0xFF, 0x53, 0x53, 0x51, 0xFF, + 0x4C, 0x4C, 0x4A, 0xFF, 0x52, 0x52, 0x4F, 0xFF, 0x46, 0x46, 0x44, 0xFF, + 0x38, 0x38, 0x36, 0xFF, 0x64, 0x65, 0x62, 0xFF, 0xAD, 0xAE, 0xA9, 0xFF, + 0xC0, 0xC1, 0xBC, 0xFF, 0xB9, 0xBC, 0xB6, 0xFF, 0xB9, 0xBC, 0xB6, 0xFF, + 0xBA, 0xBD, 0xB7, 0xFF, 0xBD, 0xC1, 0xBB, 0xFF, 0xC0, 0xC6, 0xC2, 0xFF, + 0xC2, 0xC7, 0xC3, 0xFF, 0xC2, 0xC7, 0xC3, 0xFF, 0xC2, 0xC7, 0xC3, 0xFF, + 0xB6, 0xBD, 0xB8, 0xFF, 0xBF, 0xC6, 0xC2, 0xFF, 0xBF, 0xC6, 0xC2, 0xFF, + 0xBD, 0xC4, 0xBF, 0xFF, 0xBD, 0xC4, 0xBF, 0xFF, 0xC5, 0xCC, 0xC7, 0xFF, + 0xC8, 0xD0, 0xCB, 0xFF, 0xC1, 0xC9, 0xC4, 0xFF, 0xBA, 0xC2, 0xBD, 0xFF, + 0xAA, 0xB1, 0xAD, 0xFF, 0xA5, 0xAD, 0xA8, 0xFF, 0xA5, 0xAD, 0xA8, 0xFF, + 0x9E, 0x9F, 0x9A, 0xFF, 0x9B, 0x9C, 0x97, 0xFF, 0x99, 0x99, 0x94, 0xFF, + 0x96, 0x97, 0x92, 0xFF, 0x95, 0x96, 0x91, 0xFF, 0x94, 0x95, 0x90, 0xFF, + 0x90, 0x91, 0x8C, 0xFF, 0x8E, 0x8F, 0x8A, 0xFF, 0x8C, 0x8C, 0x88, 0xFF, + 0x89, 0x8A, 0x85, 0xFF, 0x86, 0x87, 0x82, 0xFF, 0x84, 0x84, 0x80, 0xFF, + 0x80, 0x81, 0x7C, 0xFF, 0x7D, 0x7D, 0x79, 0xFF, 0x79, 0x7A, 0x75, 0xFF, + 0x77, 0x78, 0x73, 0xFF, 0x70, 0x71, 0x6A, 0xFF, 0x6B, 0x6C, 0x65, 0xFF, + 0x64, 0x65, 0x5E, 0xFF, 0x5F, 0x61, 0x59, 0xFF, 0x5D, 0x5E, 0x59, 0xFF, + 0x57, 0x58, 0x53, 0xFF, 0x4E, 0x4F, 0x4A, 0xFF, 0x40, 0x41, 0x3C, 0xFF, + 0x28, 0x28, 0x24, 0xFF, 0x1D, 0x1E, 0x19, 0xFF, 0x15, 0x16, 0x11, 0xFF, + 0x14, 0x15, 0x10, 0xFF, 0x18, 0x19, 0x16, 0xFF, 0x17, 0x18, 0x15, 0xFF, + 0x14, 0x14, 0x12, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, + 0x0F, 0x10, 0x0D, 0xFF, 0x1A, 0x1A, 0x18, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x18, 0x19, 0x14, 0xFF, 0x2D, 0x2E, 0x29, 0xFF, 0x29, 0x2A, 0x25, 0xFF, + 0x48, 0x49, 0x44, 0xFF, 0x33, 0x34, 0x2F, 0xFF, 0x46, 0x47, 0x42, 0xFF, + 0x84, 0x84, 0x80, 0xFF, 0x7A, 0x7B, 0x76, 0xFF, 0x77, 0x78, 0x73, 0xFF, + 0x63, 0x64, 0x5F, 0xFF, 0x4F, 0x50, 0x4D, 0xFF, 0x24, 0x24, 0x22, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x23, 0x23, 0x21, 0xFF, 0x22, 0x22, 0x20, 0xFF, + 0x1B, 0x1B, 0x19, 0xFF, 0x0F, 0x12, 0x0E, 0xFF, 0x0A, 0x0D, 0x0A, 0xFF, + 0x0B, 0x0E, 0x0D, 0xFF, 0x0E, 0x10, 0x0F, 0xFF, 0x0F, 0x11, 0x10, 0xFF, + 0x11, 0x13, 0x13, 0xFF, 0x14, 0x14, 0x12, 0xFF, 0x18, 0x19, 0x16, 0xFF, + 0x25, 0x26, 0x23, 0xFF, 0x39, 0x39, 0x37, 0xFF, 0x36, 0x36, 0x34, 0xFF, + 0x2F, 0x2F, 0x2D, 0xFF, 0x4B, 0x4B, 0x48, 0xFF, 0x57, 0x58, 0x55, 0xFF, + 0x3D, 0x3D, 0x3B, 0xFF, 0x82, 0x83, 0x80, 0xFF, 0xBA, 0xBB, 0xB8, 0xFF, + 0xC6, 0xC6, 0xC4, 0xFF, 0xB8, 0xBA, 0xB7, 0xFF, 0xB5, 0xB8, 0xB5, 0xFF, + 0xC3, 0xC6, 0xC3, 0xFF, 0xBD, 0xC0, 0xBD, 0xFF, 0xBD, 0xC2, 0xBE, 0xFF, + 0xBD, 0xC2, 0xBE, 0xFF, 0xBD, 0xC2, 0xBE, 0xFF, 0xBD, 0xC2, 0xBE, 0xFF, + 0xB9, 0xBF, 0xBB, 0xFF, 0xC3, 0xC8, 0xC4, 0xFF, 0xCA, 0xCF, 0xCB, 0xFF, + 0xC5, 0xCA, 0xC6, 0xFF, 0xC2, 0xC7, 0xC3, 0xFF, 0xC9, 0xCE, 0xCA, 0xFF, + 0xCC, 0xD1, 0xCD, 0xFF, 0xC6, 0xCB, 0xC7, 0xFF, 0xB8, 0xBD, 0xB9, 0xFF, + 0xB8, 0xBD, 0xB9, 0xFF, 0xB8, 0xBD, 0xB9, 0xFF, 0xB8, 0xBD, 0xB9, 0xFF, + 0x9E, 0x9F, 0x9A, 0xFF, 0x9B, 0x9C, 0x97, 0xFF, 0x99, 0x99, 0x94, 0xFF, + 0x96, 0x97, 0x92, 0xFF, 0x95, 0x96, 0x91, 0xFF, 0x94, 0x95, 0x90, 0xFF, + 0x90, 0x91, 0x8C, 0xFF, 0x8E, 0x8F, 0x8A, 0xFF, 0x8B, 0x8B, 0x87, 0xFF, + 0x88, 0x89, 0x84, 0xFF, 0x85, 0x86, 0x81, 0xFF, 0x82, 0x83, 0x7E, 0xFF, + 0x7D, 0x7D, 0x79, 0xFF, 0x79, 0x7A, 0x75, 0xFF, 0x77, 0x78, 0x73, 0xFF, + 0x74, 0x75, 0x70, 0xFF, 0x70, 0x71, 0x6A, 0xFF, 0x6A, 0x6B, 0x64, 0xFF, + 0x64, 0x65, 0x5E, 0xFF, 0x5F, 0x61, 0x59, 0xFF, 0x5D, 0x5E, 0x59, 0xFF, + 0x57, 0x58, 0x53, 0xFF, 0x4D, 0x4E, 0x49, 0xFF, 0x40, 0x41, 0x3C, 0xFF, + 0x29, 0x2A, 0x25, 0xFF, 0x1D, 0x1E, 0x19, 0xFF, 0x16, 0x17, 0x12, 0xFF, + 0x15, 0x16, 0x11, 0xFF, 0x16, 0x17, 0x14, 0xFF, 0x16, 0x17, 0x14, 0xFF, + 0x14, 0x14, 0x12, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, 0x10, 0x10, 0x10, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, + 0x0F, 0x10, 0x0D, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, + 0x1B, 0x1C, 0x17, 0xFF, 0x2D, 0x2E, 0x29, 0xFF, 0x1A, 0x1A, 0x16, 0xFF, + 0x40, 0x41, 0x3C, 0xFF, 0x32, 0x33, 0x2E, 0xFF, 0x33, 0x34, 0x2F, 0xFF, + 0x32, 0x33, 0x2E, 0xFF, 0x3F, 0x40, 0x3B, 0xFF, 0x2F, 0x2F, 0x2B, 0xFF, + 0x24, 0x25, 0x20, 0xFF, 0x16, 0x17, 0x14, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, + 0x2A, 0x2A, 0x28, 0xFF, 0x2B, 0x2B, 0x29, 0xFF, 0x22, 0x22, 0x20, 0xFF, + 0x1B, 0x1B, 0x19, 0xFF, 0x0F, 0x12, 0x0E, 0xFF, 0x0A, 0x0D, 0x0A, 0xFF, + 0x0B, 0x0E, 0x0D, 0xFF, 0x0E, 0x10, 0x0F, 0xFF, 0x0F, 0x11, 0x10, 0xFF, + 0x11, 0x13, 0x13, 0xFF, 0x1B, 0x1B, 0x19, 0xFF, 0x1A, 0x1A, 0x18, 0xFF, + 0x1E, 0x1F, 0x1C, 0xFF, 0x2C, 0x2D, 0x2A, 0xFF, 0x4D, 0x4D, 0x4B, 0xFF, + 0x47, 0x47, 0x45, 0xFF, 0x42, 0x43, 0x40, 0xFF, 0x33, 0x34, 0x31, 0xFF, + 0x64, 0x65, 0x62, 0xFF, 0x99, 0x99, 0x97, 0xFF, 0xB8, 0xB8, 0xB6, 0xFF, + 0xC0, 0xC1, 0xBE, 0xFF, 0xBA, 0xBD, 0xB9, 0xFF, 0xB5, 0xB8, 0xB5, 0xFF, + 0xC1, 0xC4, 0xC0, 0xFF, 0xBC, 0xBF, 0xBC, 0xFF, 0xBD, 0xC2, 0xBE, 0xFF, + 0xBD, 0xC2, 0xBE, 0xFF, 0xBD, 0xC2, 0xBE, 0xFF, 0xBD, 0xC2, 0xBE, 0xFF, + 0xBB, 0xC0, 0xBC, 0xFF, 0xC4, 0xC9, 0xC5, 0xFF, 0xCA, 0xCF, 0xCB, 0xFF, + 0xC5, 0xCA, 0xC6, 0xFF, 0xC3, 0xC8, 0xC4, 0xFF, 0xC9, 0xCE, 0xCA, 0xFF, + 0xCB, 0xD0, 0xCC, 0xFF, 0xC6, 0xCB, 0xC7, 0xFF, 0xBB, 0xC0, 0xBC, 0xFF, + 0xBB, 0xC0, 0xBC, 0xFF, 0xBB, 0xC0, 0xBC, 0xFF, 0xBB, 0xC0, 0xBC, 0xFF, + 0x9D, 0x9E, 0x99, 0xFF, 0x9A, 0x9A, 0x96, 0xFF, 0x97, 0x98, 0x93, 0xFF, + 0x95, 0x96, 0x91, 0xFF, 0x95, 0x96, 0x91, 0xFF, 0x93, 0x93, 0x8F, 0xFF, + 0x8F, 0x90, 0x8B, 0xFF, 0x8D, 0x8E, 0x89, 0xFF, 0x8B, 0x8B, 0x87, 0xFF, + 0x88, 0x89, 0x84, 0xFF, 0x85, 0x86, 0x81, 0xFF, 0x82, 0x83, 0x7E, 0xFF, + 0x7A, 0x7B, 0x76, 0xFF, 0x77, 0x78, 0x73, 0xFF, 0x74, 0x75, 0x70, 0xFF, + 0x72, 0x73, 0x6E, 0xFF, 0x70, 0x71, 0x6A, 0xFF, 0x6A, 0x6B, 0x64, 0xFF, + 0x63, 0x64, 0x5D, 0xFF, 0x5E, 0x5F, 0x58, 0xFF, 0x5C, 0x5D, 0x58, 0xFF, + 0x57, 0x58, 0x53, 0xFF, 0x4D, 0x4E, 0x49, 0xFF, 0x40, 0x41, 0x3C, 0xFF, + 0x29, 0x2A, 0x25, 0xFF, 0x1E, 0x1F, 0x1A, 0xFF, 0x16, 0x17, 0x12, 0xFF, + 0x15, 0x16, 0x11, 0xFF, 0x16, 0x17, 0x14, 0xFF, 0x16, 0x17, 0x14, 0xFF, + 0x14, 0x14, 0x12, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x1A, 0x1A, 0x16, 0xFF, 0x22, 0x23, 0x1E, 0xFF, 0x1C, 0x1D, 0x18, 0xFF, + 0x3E, 0x3E, 0x3A, 0xFF, 0x38, 0x39, 0x34, 0xFF, 0x32, 0x33, 0x2E, 0xFF, + 0x28, 0x28, 0x24, 0xFF, 0x23, 0x24, 0x1F, 0xFF, 0x1B, 0x1C, 0x17, 0xFF, + 0x2C, 0x2D, 0x28, 0xFF, 0x1F, 0x20, 0x1D, 0xFF, 0x16, 0x17, 0x14, 0xFF, + 0x1F, 0x20, 0x1D, 0xFF, 0x22, 0x22, 0x20, 0xFF, 0x22, 0x22, 0x20, 0xFF, + 0x1B, 0x1B, 0x19, 0xFF, 0x0F, 0x12, 0x0E, 0xFF, 0x0A, 0x0D, 0x0A, 0xFF, + 0x0E, 0x10, 0x0F, 0xFF, 0x10, 0x12, 0x11, 0xFF, 0x11, 0x13, 0x13, 0xFF, + 0x12, 0x15, 0x14, 0xFF, 0x17, 0x18, 0x15, 0xFF, 0x16, 0x17, 0x14, 0xFF, + 0x1A, 0x1A, 0x18, 0xFF, 0x28, 0x28, 0x26, 0xFF, 0x2F, 0x2F, 0x2D, 0xFF, + 0x3F, 0x3F, 0x3D, 0xFF, 0x47, 0x47, 0x45, 0xFF, 0x55, 0x55, 0x53, 0xFF, + 0x92, 0x92, 0x90, 0xFF, 0xB0, 0xB0, 0xAE, 0xFF, 0xB2, 0xB3, 0xB0, 0xFF, + 0xB9, 0xBA, 0xB7, 0xFF, 0xC0, 0xC2, 0xBF, 0xFF, 0xB8, 0xBA, 0xB7, 0xFF, + 0xBF, 0xC1, 0xBE, 0xFF, 0xB6, 0xB9, 0xB6, 0xFF, 0xBD, 0xC2, 0xBE, 0xFF, + 0xBD, 0xC2, 0xBE, 0xFF, 0xBD, 0xC2, 0xBE, 0xFF, 0xBD, 0xC2, 0xBE, 0xFF, + 0xBB, 0xC0, 0xBC, 0xFF, 0xC5, 0xCA, 0xC6, 0xFF, 0xCA, 0xCF, 0xCB, 0xFF, + 0xC5, 0xCA, 0xC6, 0xFF, 0xC3, 0xC8, 0xC4, 0xFF, 0xC9, 0xCE, 0xCA, 0xFF, + 0xCB, 0xD0, 0xCC, 0xFF, 0xC6, 0xCB, 0xC7, 0xFF, 0xBF, 0xC4, 0xC0, 0xFF, + 0xBF, 0xC4, 0xC0, 0xFF, 0xBF, 0xC4, 0xC0, 0xFF, 0xBF, 0xC4, 0xC0, 0xFF, + 0x9D, 0x9E, 0x99, 0xFF, 0x9A, 0x9A, 0x96, 0xFF, 0x97, 0x98, 0x93, 0xFF, + 0x95, 0x96, 0x91, 0xFF, 0x95, 0x96, 0x91, 0xFF, 0x93, 0x93, 0x8F, 0xFF, + 0x8F, 0x90, 0x8B, 0xFF, 0x8D, 0x8E, 0x89, 0xFF, 0x89, 0x8A, 0x85, 0xFF, + 0x87, 0x88, 0x83, 0xFF, 0x84, 0x84, 0x80, 0xFF, 0x81, 0x82, 0x7D, 0xFF, + 0x78, 0x79, 0x74, 0xFF, 0x74, 0x75, 0x70, 0xFF, 0x72, 0x73, 0x6E, 0xFF, + 0x70, 0x71, 0x6C, 0xFF, 0x70, 0x71, 0x6A, 0xFF, 0x69, 0x6A, 0x63, 0xFF, + 0x63, 0x64, 0x5D, 0xFF, 0x5E, 0x5F, 0x58, 0xFF, 0x5C, 0x5D, 0x58, 0xFF, + 0x57, 0x58, 0x53, 0xFF, 0x4C, 0x4C, 0x48, 0xFF, 0x40, 0x41, 0x3C, 0xFF, + 0x2A, 0x2B, 0x26, 0xFF, 0x1E, 0x1F, 0x1A, 0xFF, 0x16, 0x17, 0x12, 0xFF, + 0x15, 0x16, 0x11, 0xFF, 0x15, 0x15, 0x13, 0xFF, 0x15, 0x15, 0x13, 0xFF, + 0x14, 0x14, 0x12, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x14, 0x14, 0x12, 0xFF, 0x15, 0x15, 0x13, 0xFF, + 0x14, 0x15, 0x10, 0xFF, 0x11, 0x12, 0x0D, 0xFF, 0x1A, 0x1A, 0x16, 0xFF, + 0x29, 0x29, 0x27, 0xFF, 0x2A, 0x2A, 0x28, 0xFF, 0x2D, 0x2E, 0x29, 0xFF, + 0x2A, 0x2B, 0x26, 0xFF, 0x23, 0x24, 0x1F, 0xFF, 0x31, 0x32, 0x2D, 0xFF, + 0x34, 0x35, 0x32, 0xFF, 0x14, 0x14, 0x12, 0xFF, 0x2B, 0x2B, 0x29, 0xFF, + 0x21, 0x21, 0x1F, 0xFF, 0x15, 0x15, 0x13, 0xFF, 0x22, 0x22, 0x20, 0xFF, + 0x1B, 0x1B, 0x19, 0xFF, 0x0F, 0x12, 0x0E, 0xFF, 0x0A, 0x0D, 0x0A, 0xFF, + 0x0E, 0x10, 0x0F, 0xFF, 0x10, 0x12, 0x11, 0xFF, 0x11, 0x13, 0x13, 0xFF, + 0x12, 0x15, 0x14, 0xFF, 0x0A, 0x0B, 0x08, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, + 0x1B, 0x1B, 0x19, 0xFF, 0x30, 0x30, 0x2E, 0xFF, 0x36, 0x36, 0x34, 0xFF, + 0x36, 0x36, 0x34, 0xFF, 0x37, 0x37, 0x35, 0xFF, 0x5D, 0x5E, 0x5B, 0xFF, + 0xB2, 0xB3, 0xB0, 0xFF, 0xB3, 0xB4, 0xB1, 0xFF, 0xAB, 0xAC, 0xA9, 0xFF, + 0xB4, 0xB5, 0xB2, 0xFF, 0xC3, 0xC6, 0xC3, 0xFF, 0xB9, 0xBC, 0xB8, 0xFF, + 0xBD, 0xC0, 0xBD, 0xFF, 0xB3, 0xB6, 0xB2, 0xFF, 0xBF, 0xC1, 0xBE, 0xFF, + 0xBD, 0xC2, 0xBE, 0xFF, 0xBD, 0xC2, 0xBE, 0xFF, 0xBD, 0xC2, 0xBE, 0xFF, + 0xBB, 0xC0, 0xBC, 0xFF, 0xC5, 0xCA, 0xC6, 0xFF, 0xCA, 0xCF, 0xCB, 0xFF, + 0xC5, 0xCA, 0xC6, 0xFF, 0xC2, 0xC7, 0xC3, 0xFF, 0xC6, 0xCB, 0xC7, 0xFF, + 0xCA, 0xCF, 0xCB, 0xFF, 0xC6, 0xCB, 0xC7, 0xFF, 0xC2, 0xC7, 0xC3, 0xFF, + 0xC2, 0xC7, 0xC3, 0xFF, 0xC2, 0xC7, 0xC3, 0xFF, 0xC2, 0xC7, 0xC3, 0xFF, + 0x9D, 0x9E, 0x99, 0xFF, 0x9A, 0x9A, 0x96, 0xFF, 0x97, 0x98, 0x93, 0xFF, + 0x95, 0x96, 0x91, 0xFF, 0x94, 0x95, 0x90, 0xFF, 0x93, 0x93, 0x8F, 0xFF, + 0x8F, 0x90, 0x8B, 0xFF, 0x8D, 0x8E, 0x89, 0xFF, 0x89, 0x8A, 0x85, 0xFF, + 0x87, 0x88, 0x83, 0xFF, 0x84, 0x84, 0x80, 0xFF, 0x81, 0x82, 0x7D, 0xFF, + 0x7A, 0x7B, 0x76, 0xFF, 0x74, 0x75, 0x70, 0xFF, 0x72, 0x73, 0x6E, 0xFF, + 0x70, 0x71, 0x6C, 0xFF, 0x6A, 0x6B, 0x64, 0xFF, 0x69, 0x6A, 0x63, 0xFF, + 0x62, 0x63, 0x5C, 0xFF, 0x5D, 0x5E, 0x57, 0xFF, 0x5B, 0x5C, 0x57, 0xFF, + 0x50, 0x51, 0x4C, 0xFF, 0x4C, 0x4C, 0x48, 0xFF, 0x41, 0x42, 0x3D, 0xFF, + 0x2A, 0x2B, 0x26, 0xFF, 0x1E, 0x1F, 0x1A, 0xFF, 0x16, 0x17, 0x12, 0xFF, + 0x14, 0x15, 0x10, 0xFF, 0x15, 0x15, 0x13, 0xFF, 0x15, 0x15, 0x13, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x16, 0x17, 0x14, 0xFF, + 0x1B, 0x1B, 0x1B, 0xFF, 0x21, 0x21, 0x21, 0xFF, 0x25, 0x26, 0x23, 0xFF, + 0x2A, 0x2A, 0x28, 0xFF, 0x2A, 0x2A, 0x28, 0xFF, 0x2A, 0x2A, 0x28, 0xFF, + 0x2A, 0x2A, 0x28, 0xFF, 0x26, 0x26, 0x26, 0xFF, 0x23, 0x23, 0x23, 0xFF, + 0x1E, 0x20, 0x1F, 0xFF, 0x1A, 0x1D, 0x1C, 0xFF, 0x13, 0x16, 0x15, 0xFF, + 0x10, 0x12, 0x11, 0xFF, 0x0E, 0x10, 0x0F, 0xFF, 0x0B, 0x0E, 0x0D, 0xFF, + 0x0F, 0x11, 0x10, 0xFF, 0x11, 0x13, 0x13, 0xFF, 0x12, 0x15, 0x14, 0xFF, + 0x13, 0x16, 0x15, 0xFF, 0x18, 0x18, 0x18, 0xFF, 0x0C, 0x0C, 0x0C, 0xFF, + 0x1C, 0x1C, 0x1C, 0xFF, 0x1D, 0x1D, 0x1D, 0xFF, 0x34, 0x34, 0x34, 0xFF, + 0x3A, 0x3A, 0x3A, 0xFF, 0x57, 0x57, 0x57, 0xFF, 0xA5, 0xA5, 0xA5, 0xFF, + 0xC5, 0xC5, 0xC5, 0xFF, 0xBB, 0xBB, 0xBB, 0xFF, 0xB3, 0xB3, 0xB3, 0xFF, + 0xBA, 0xBA, 0xBA, 0xFF, 0xB7, 0xB7, 0xB7, 0xFF, 0xB8, 0xB8, 0xB8, 0xFF, + 0xBD, 0xBD, 0xBD, 0xFF, 0xC4, 0xC4, 0xC4, 0xFF, 0xC2, 0xC4, 0xC4, 0xFF, + 0xC2, 0xC4, 0xC4, 0xFF, 0xC2, 0xC4, 0xC4, 0xFF, 0xC2, 0xC4, 0xC4, 0xFF, + 0xCA, 0xCF, 0xCD, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, + 0xBF, 0xC4, 0xC2, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, + 0xC7, 0xCC, 0xCB, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, + 0xBF, 0xC4, 0xC2, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, + 0x9D, 0x9E, 0x99, 0xFF, 0x9A, 0x9A, 0x96, 0xFF, 0x97, 0x98, 0x93, 0xFF, + 0x95, 0x96, 0x91, 0xFF, 0x94, 0x95, 0x90, 0xFF, 0x93, 0x93, 0x8F, 0xFF, + 0x8F, 0x90, 0x8B, 0xFF, 0x8D, 0x8E, 0x89, 0xFF, 0x88, 0x89, 0x84, 0xFF, + 0x86, 0x87, 0x82, 0xFF, 0x82, 0x83, 0x7E, 0xFF, 0x80, 0x81, 0x7C, 0xFF, + 0x7A, 0x7B, 0x76, 0xFF, 0x74, 0x75, 0x70, 0xFF, 0x72, 0x73, 0x6E, 0xFF, + 0x71, 0x72, 0x6D, 0xFF, 0x6A, 0x6B, 0x64, 0xFF, 0x68, 0x69, 0x62, 0xFF, + 0x62, 0x63, 0x5C, 0xFF, 0x5D, 0x5E, 0x57, 0xFF, 0x5B, 0x5C, 0x57, 0xFF, + 0x50, 0x51, 0x4C, 0xFF, 0x4B, 0x4B, 0x46, 0xFF, 0x41, 0x42, 0x3D, 0xFF, + 0x2B, 0x2C, 0x27, 0xFF, 0x1E, 0x1F, 0x1A, 0xFF, 0x16, 0x17, 0x12, 0xFF, + 0x14, 0x15, 0x10, 0xFF, 0x14, 0x14, 0x12, 0xFF, 0x14, 0x14, 0x12, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x15, 0x15, 0x15, 0xFF, + 0x18, 0x18, 0x18, 0xFF, 0x1C, 0x1C, 0x1C, 0xFF, 0x1F, 0x1F, 0x1F, 0xFF, + 0x22, 0x22, 0x20, 0xFF, 0x22, 0x22, 0x20, 0xFF, 0x22, 0x22, 0x20, 0xFF, + 0x22, 0x22, 0x20, 0xFF, 0x23, 0x23, 0x23, 0xFF, 0x22, 0x22, 0x22, 0xFF, + 0x1F, 0x21, 0x21, 0xFF, 0x1E, 0x20, 0x1F, 0xFF, 0x13, 0x16, 0x15, 0xFF, + 0x10, 0x12, 0x11, 0xFF, 0x0E, 0x10, 0x0F, 0xFF, 0x0B, 0x0E, 0x0D, 0xFF, + 0x0F, 0x11, 0x10, 0xFF, 0x11, 0x13, 0x13, 0xFF, 0x12, 0x15, 0x14, 0xFF, + 0x13, 0x16, 0x15, 0xFF, 0x17, 0x17, 0x17, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x18, 0x18, 0x18, 0xFF, 0x1F, 0x1F, 0x1F, 0xFF, 0x3F, 0x3F, 0x3F, 0xFF, + 0x3F, 0x3F, 0x3F, 0xFF, 0x70, 0x70, 0x70, 0xFF, 0xB0, 0xB0, 0xB0, 0xFF, + 0xC6, 0xC6, 0xC6, 0xFF, 0xBF, 0xBF, 0xBF, 0xFF, 0xBE, 0xBE, 0xBE, 0xFF, + 0xBF, 0xBF, 0xBF, 0xFF, 0xC0, 0xC0, 0xC0, 0xFF, 0xC0, 0xC0, 0xC0, 0xFF, + 0xC6, 0xC6, 0xC6, 0xFF, 0xCB, 0xCB, 0xCB, 0xFF, 0xC9, 0xCB, 0xCB, 0xFF, + 0xC9, 0xCB, 0xCB, 0xFF, 0xC9, 0xCB, 0xCB, 0xFF, 0xC9, 0xCB, 0xCB, 0xFF, + 0xC6, 0xCB, 0xC9, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, + 0xC2, 0xC6, 0xC5, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, + 0xCA, 0xCF, 0xCD, 0xFF, 0xCC, 0xD1, 0xCF, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, + 0xBF, 0xC4, 0xC2, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, + 0x9C, 0x9D, 0x98, 0xFF, 0x99, 0x99, 0x94, 0xFF, 0x96, 0x97, 0x92, 0xFF, + 0x94, 0x95, 0x90, 0xFF, 0x94, 0x95, 0x90, 0xFF, 0x92, 0x92, 0x8E, 0xFF, + 0x8E, 0x8F, 0x8A, 0xFF, 0x8C, 0x8C, 0x88, 0xFF, 0x88, 0x89, 0x84, 0xFF, + 0x86, 0x87, 0x82, 0xFF, 0x82, 0x83, 0x7E, 0xFF, 0x80, 0x81, 0x7C, 0xFF, + 0x7B, 0x7C, 0x77, 0xFF, 0x74, 0x75, 0x70, 0xFF, 0x72, 0x73, 0x6E, 0xFF, + 0x71, 0x72, 0x6D, 0xFF, 0x6B, 0x6C, 0x65, 0xFF, 0x68, 0x69, 0x62, 0xFF, + 0x61, 0x62, 0x5B, 0xFF, 0x5C, 0x5D, 0x56, 0xFF, 0x5A, 0x5A, 0x56, 0xFF, + 0x50, 0x51, 0x4C, 0xFF, 0x4B, 0x4B, 0x46, 0xFF, 0x41, 0x42, 0x3D, 0xFF, + 0x2B, 0x2C, 0x27, 0xFF, 0x1F, 0x20, 0x1B, 0xFF, 0x16, 0x17, 0x12, 0xFF, + 0x14, 0x15, 0x10, 0xFF, 0x14, 0x14, 0x12, 0xFF, 0x14, 0x14, 0x12, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x11, 0x12, 0x0F, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x14, 0x14, 0x14, 0xFF, + 0x16, 0x16, 0x16, 0xFF, 0x17, 0x17, 0x17, 0xFF, 0x18, 0x18, 0x18, 0xFF, + 0x18, 0x19, 0x16, 0xFF, 0x1A, 0x1A, 0x18, 0xFF, 0x1A, 0x1A, 0x18, 0xFF, + 0x1B, 0x1B, 0x19, 0xFF, 0x1F, 0x1F, 0x1F, 0xFF, 0x21, 0x21, 0x21, 0xFF, + 0x20, 0x23, 0x22, 0xFF, 0x21, 0x24, 0x23, 0xFF, 0x13, 0x16, 0x15, 0xFF, + 0x10, 0x12, 0x11, 0xFF, 0x0E, 0x10, 0x0F, 0xFF, 0x0B, 0x0E, 0x0D, 0xFF, + 0x10, 0x12, 0x11, 0xFF, 0x12, 0x15, 0x14, 0xFF, 0x13, 0x16, 0x15, 0xFF, + 0x13, 0x16, 0x15, 0xFF, 0x15, 0x15, 0x15, 0xFF, 0x14, 0x14, 0x14, 0xFF, + 0x13, 0x13, 0x13, 0xFF, 0x22, 0x22, 0x22, 0xFF, 0x44, 0x44, 0x44, 0xFF, + 0x3B, 0x3B, 0x3B, 0xFF, 0x8D, 0x8D, 0x8D, 0xFF, 0xC1, 0xC1, 0xC1, 0xFF, + 0xC8, 0xC8, 0xC8, 0xFF, 0xC2, 0xC2, 0xC2, 0xFF, 0xC7, 0xC7, 0xC7, 0xFF, + 0xC4, 0xC4, 0xC4, 0xFF, 0xC4, 0xC4, 0xC4, 0xFF, 0xC6, 0xC6, 0xC6, 0xFF, + 0xC6, 0xC6, 0xC6, 0xFF, 0xC6, 0xC6, 0xC6, 0xFF, 0xC8, 0xCA, 0xC9, 0xFF, + 0xC9, 0xCB, 0xCB, 0xFF, 0xC9, 0xCB, 0xCB, 0xFF, 0xC9, 0xCB, 0xCB, 0xFF, + 0xC2, 0xC6, 0xC5, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, + 0xC5, 0xCA, 0xC8, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, + 0xCD, 0xD2, 0xD0, 0xFF, 0xD0, 0xD4, 0xD3, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, + 0xBF, 0xC4, 0xC2, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, + 0x9C, 0x9D, 0x98, 0xFF, 0x99, 0x99, 0x94, 0xFF, 0x96, 0x97, 0x92, 0xFF, + 0x94, 0x95, 0x90, 0xFF, 0x94, 0x95, 0x90, 0xFF, 0x92, 0x92, 0x8E, 0xFF, + 0x8E, 0x8F, 0x8A, 0xFF, 0x8C, 0x8C, 0x88, 0xFF, 0x87, 0x88, 0x83, 0xFF, + 0x85, 0x86, 0x81, 0xFF, 0x81, 0x82, 0x7D, 0xFF, 0x7F, 0x80, 0x7B, 0xFF, + 0x7B, 0x7C, 0x77, 0xFF, 0x74, 0x75, 0x70, 0xFF, 0x71, 0x72, 0x6D, 0xFF, + 0x71, 0x72, 0x6D, 0xFF, 0x6B, 0x6C, 0x65, 0xFF, 0x66, 0x68, 0x60, 0xFF, + 0x61, 0x62, 0x5B, 0xFF, 0x5C, 0x5D, 0x56, 0xFF, 0x5A, 0x5A, 0x56, 0xFF, + 0x4F, 0x50, 0x4B, 0xFF, 0x49, 0x4A, 0x45, 0xFF, 0x40, 0x41, 0x3C, 0xFF, + 0x2C, 0x2D, 0x28, 0xFF, 0x1F, 0x20, 0x1B, 0xFF, 0x16, 0x17, 0x12, 0xFF, + 0x14, 0x15, 0x10, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x11, 0x12, 0x0F, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x11, 0x12, 0x0F, 0xFF, 0x13, 0x13, 0x13, 0xFF, + 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x14, 0x14, 0x12, 0xFF, 0x15, 0x15, 0x13, 0xFF, 0x15, 0x15, 0x13, 0xFF, + 0x15, 0x15, 0x15, 0xFF, 0x1C, 0x1C, 0x1C, 0xFF, 0x1F, 0x1F, 0x1F, 0xFF, + 0x23, 0x25, 0x24, 0xFF, 0x25, 0x27, 0x26, 0xFF, 0x13, 0x16, 0x15, 0xFF, + 0x10, 0x12, 0x11, 0xFF, 0x0E, 0x10, 0x0F, 0xFF, 0x0B, 0x0E, 0x0D, 0xFF, + 0x10, 0x12, 0x11, 0xFF, 0x12, 0x15, 0x14, 0xFF, 0x13, 0x16, 0x15, 0xFF, + 0x13, 0x16, 0x15, 0xFF, 0x14, 0x14, 0x14, 0xFF, 0x17, 0x17, 0x17, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x23, 0x23, 0x23, 0xFF, 0x44, 0x44, 0x44, 0xFF, + 0x4D, 0x4D, 0x4D, 0xFF, 0xA4, 0xA4, 0xA4, 0xFF, 0xC8, 0xC8, 0xC8, 0xFF, + 0xCC, 0xCC, 0xCC, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, 0xCC, 0xCC, 0xCC, 0xFF, + 0xC4, 0xC4, 0xC4, 0xFF, 0xC4, 0xC4, 0xC4, 0xFF, 0xC2, 0xC2, 0xC2, 0xFF, + 0xBD, 0xBD, 0xBD, 0xFF, 0xB9, 0xB9, 0xB9, 0xFF, 0xC2, 0xC4, 0xC4, 0xFF, + 0xC2, 0xC4, 0xC4, 0xFF, 0xC2, 0xC4, 0xC4, 0xFF, 0xC2, 0xC4, 0xC4, 0xFF, + 0xBE, 0xC3, 0xC1, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, + 0xCA, 0xCF, 0xCD, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, 0xCC, 0xD1, 0xCF, 0xFF, + 0xD0, 0xD4, 0xD3, 0xFF, 0xD2, 0xD7, 0xD5, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, + 0xBF, 0xC4, 0xC2, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, + 0x9C, 0x9D, 0x98, 0xFF, 0x99, 0x99, 0x94, 0xFF, 0x96, 0x97, 0x92, 0xFF, + 0x94, 0x95, 0x90, 0xFF, 0x94, 0x95, 0x90, 0xFF, 0x92, 0x92, 0x8E, 0xFF, + 0x8E, 0x8F, 0x8A, 0xFF, 0x8C, 0x8C, 0x88, 0xFF, 0x8C, 0x8C, 0x88, 0xFF, + 0x88, 0x89, 0x84, 0xFF, 0x82, 0x83, 0x7E, 0xFF, 0x7E, 0x7F, 0x7A, 0xFF, + 0x7B, 0x7C, 0x77, 0xFF, 0x74, 0x75, 0x70, 0xFF, 0x71, 0x72, 0x6D, 0xFF, + 0x6D, 0x6E, 0x69, 0xFF, 0x6B, 0x6C, 0x65, 0xFF, 0x65, 0x66, 0x5F, 0xFF, + 0x5D, 0x5E, 0x57, 0xFF, 0x58, 0x5A, 0x52, 0xFF, 0x54, 0x55, 0x50, 0xFF, + 0x4F, 0x50, 0x4B, 0xFF, 0x48, 0x49, 0x44, 0xFF, 0x40, 0x41, 0x3C, 0xFF, + 0x32, 0x33, 0x2E, 0xFF, 0x24, 0x25, 0x20, 0xFF, 0x18, 0x19, 0x14, 0xFF, + 0x14, 0x15, 0x10, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x0F, 0x10, 0x0D, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, + 0x0E, 0x0E, 0x0C, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, + 0x0E, 0x0E, 0x0C, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x13, 0x13, 0x13, 0xFF, 0x13, 0x13, 0x13, 0xFF, 0x13, 0x13, 0x13, 0xFF, + 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x11, 0x11, 0x11, 0xFF, 0x16, 0x16, 0x18, 0xFF, 0x1A, 0x19, 0x1C, 0xFF, + 0x1D, 0x1D, 0x1F, 0xFF, 0x1F, 0x1F, 0x21, 0xFF, 0x22, 0x21, 0x24, 0xFF, + 0x1E, 0x1E, 0x20, 0xFF, 0x13, 0x15, 0x17, 0xFF, 0x09, 0x0B, 0x0C, 0xFF, + 0x0B, 0x0D, 0x0F, 0xFF, 0x0F, 0x11, 0x12, 0xFF, 0x12, 0x14, 0x16, 0xFF, + 0x15, 0x17, 0x18, 0xFF, 0x22, 0x22, 0x22, 0xFF, 0x1F, 0x1F, 0x1F, 0xFF, + 0x1D, 0x1D, 0x1D, 0xFF, 0x2B, 0x2B, 0x2B, 0xFF, 0x4E, 0x4E, 0x4E, 0xFF, + 0x50, 0x50, 0x50, 0xFF, 0xA3, 0xA3, 0xA3, 0xFF, 0xB9, 0xB9, 0xB9, 0xFF, + 0xBF, 0xBF, 0xBF, 0xFF, 0xC6, 0xC6, 0xC6, 0xFF, 0xCC, 0xCC, 0xCC, 0xFF, + 0xCD, 0xCD, 0xCD, 0xFF, 0xCE, 0xCE, 0xCE, 0xFF, 0xC9, 0xC9, 0xC9, 0xFF, + 0xC2, 0xC2, 0xC2, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xC2, 0xC4, 0xC4, 0xFF, + 0xC2, 0xC4, 0xC4, 0xFF, 0xC2, 0xC4, 0xC4, 0xFF, 0xC3, 0xC6, 0xC5, 0xFF, + 0xC4, 0xC7, 0xC6, 0xFF, 0xC4, 0xC7, 0xC6, 0xFF, 0xC4, 0xC7, 0xC6, 0xFF, + 0xC3, 0xC6, 0xC5, 0xFF, 0xD5, 0xD7, 0xD6, 0xFF, 0xD1, 0xD4, 0xD3, 0xFF, + 0xCD, 0xCF, 0xCE, 0xFF, 0xCA, 0xCD, 0xCC, 0xFF, 0xBC, 0xBF, 0xBE, 0xFF, + 0xBC, 0xBF, 0xBE, 0xFF, 0xBC, 0xBF, 0xBE, 0xFF, 0xBC, 0xBF, 0xBE, 0xFF, + 0x9C, 0x9D, 0x98, 0xFF, 0x99, 0x99, 0x94, 0xFF, 0x96, 0x97, 0x92, 0xFF, + 0x94, 0x95, 0x90, 0xFF, 0x94, 0x95, 0x90, 0xFF, 0x92, 0x92, 0x8E, 0xFF, + 0x8E, 0x8F, 0x8A, 0xFF, 0x8C, 0x8C, 0x88, 0xFF, 0x8C, 0x8C, 0x88, 0xFF, + 0x88, 0x89, 0x84, 0xFF, 0x82, 0x83, 0x7E, 0xFF, 0x7E, 0x7F, 0x7A, 0xFF, + 0x7B, 0x7C, 0x77, 0xFF, 0x74, 0x75, 0x70, 0xFF, 0x70, 0x71, 0x6C, 0xFF, + 0x6D, 0x6E, 0x69, 0xFF, 0x6B, 0x6C, 0x65, 0xFF, 0x65, 0x66, 0x5F, 0xFF, + 0x5D, 0x5E, 0x57, 0xFF, 0x58, 0x5A, 0x52, 0xFF, 0x54, 0x55, 0x50, 0xFF, + 0x4E, 0x4F, 0x4A, 0xFF, 0x48, 0x49, 0x44, 0xFF, 0x3F, 0x40, 0x3B, 0xFF, + 0x34, 0x35, 0x30, 0xFF, 0x25, 0x26, 0x21, 0xFF, 0x1A, 0x1A, 0x16, 0xFF, + 0x16, 0x17, 0x12, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x0F, 0x10, 0x0D, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, + 0x0E, 0x0E, 0x0C, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, + 0x0F, 0x10, 0x0D, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x11, 0x12, 0x0F, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x11, 0x11, 0x11, 0xFF, 0x13, 0x13, 0x13, 0xFF, 0x13, 0x13, 0x13, 0xFF, + 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x11, 0x11, 0x11, 0xFF, 0x14, 0x13, 0x16, 0xFF, 0x16, 0x16, 0x18, 0xFF, + 0x1A, 0x19, 0x1C, 0xFF, 0x1D, 0x1D, 0x1F, 0xFF, 0x2D, 0x2D, 0x2F, 0xFF, + 0x31, 0x31, 0x33, 0xFF, 0x21, 0x23, 0x25, 0xFF, 0x11, 0x13, 0x15, 0xFF, + 0x09, 0x0B, 0x0C, 0xFF, 0x10, 0x12, 0x13, 0xFF, 0x16, 0x18, 0x19, 0xFF, + 0x19, 0x1B, 0x1D, 0xFF, 0x1A, 0x1A, 0x1A, 0xFF, 0x1B, 0x1B, 0x1B, 0xFF, + 0x2B, 0x2B, 0x2B, 0xFF, 0x3B, 0x3B, 0x3B, 0xFF, 0x47, 0x47, 0x47, 0xFF, + 0x48, 0x48, 0x48, 0xFF, 0x8C, 0x8C, 0x8C, 0xFF, 0xA2, 0xA2, 0xA2, 0xFF, + 0xB8, 0xB8, 0xB8, 0xFF, 0xBF, 0xBF, 0xBF, 0xFF, 0xC5, 0xC5, 0xC5, 0xFF, + 0xC6, 0xC6, 0xC6, 0xFF, 0xD2, 0xD2, 0xD2, 0xFF, 0xCC, 0xCC, 0xCC, 0xFF, + 0xC5, 0xC5, 0xC5, 0xFF, 0xC0, 0xC0, 0xC0, 0xFF, 0xC6, 0xC8, 0xC7, 0xFF, + 0xC6, 0xC8, 0xC7, 0xFF, 0xC6, 0xC8, 0xC7, 0xFF, 0xC6, 0xC8, 0xC7, 0xFF, + 0xC8, 0xCA, 0xC9, 0xFF, 0xC4, 0xC7, 0xC6, 0xFF, 0xC0, 0xC2, 0xC1, 0xFF, + 0xBC, 0xBF, 0xBE, 0xFF, 0xC8, 0xCA, 0xC9, 0xFF, 0xC7, 0xC9, 0xC8, 0xFF, + 0xC6, 0xC8, 0xC7, 0xFF, 0xC3, 0xC6, 0xC5, 0xFF, 0xC2, 0xC4, 0xC4, 0xFF, + 0xC1, 0xC3, 0xC2, 0xFF, 0xC1, 0xC3, 0xC2, 0xFF, 0xC1, 0xC3, 0xC2, 0xFF, + 0x9C, 0x9D, 0x98, 0xFF, 0x99, 0x99, 0x94, 0xFF, 0x96, 0x97, 0x92, 0xFF, + 0x94, 0x95, 0x90, 0xFF, 0x94, 0x95, 0x90, 0xFF, 0x92, 0x92, 0x8E, 0xFF, + 0x8E, 0x8F, 0x8A, 0xFF, 0x8C, 0x8C, 0x88, 0xFF, 0x8C, 0x8C, 0x88, 0xFF, + 0x89, 0x8A, 0x85, 0xFF, 0x84, 0x84, 0x80, 0xFF, 0x7E, 0x7F, 0x7A, 0xFF, + 0x7D, 0x7D, 0x79, 0xFF, 0x74, 0x75, 0x70, 0xFF, 0x70, 0x71, 0x6C, 0xFF, + 0x6D, 0x6E, 0x69, 0xFF, 0x6C, 0x6D, 0x66, 0xFF, 0x65, 0x66, 0x5F, 0xFF, + 0x5D, 0x5E, 0x57, 0xFF, 0x58, 0x5A, 0x52, 0xFF, 0x54, 0x55, 0x50, 0xFF, + 0x4E, 0x4F, 0x4A, 0xFF, 0x48, 0x49, 0x44, 0xFF, 0x3F, 0x40, 0x3B, 0xFF, + 0x37, 0x37, 0x33, 0xFF, 0x29, 0x2A, 0x25, 0xFF, 0x1D, 0x1E, 0x19, 0xFF, + 0x18, 0x19, 0x14, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x14, 0x14, 0x12, 0xFF, 0x11, 0x12, 0x0F, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x0E, 0x0E, 0x0C, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, + 0x0E, 0x0E, 0x0C, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, + 0x0E, 0x0E, 0x0C, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, + 0x0E, 0x0E, 0x0C, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, 0x13, 0x13, 0x13, 0xFF, + 0x13, 0x13, 0x13, 0xFF, 0x13, 0x13, 0x13, 0xFF, 0x13, 0x13, 0x13, 0xFF, + 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11, 0xFF, 0x14, 0x14, 0x14, 0xFF, + 0x17, 0x17, 0x17, 0xFF, 0x1A, 0x1A, 0x1A, 0xFF, 0x32, 0x32, 0x32, 0xFF, + 0x36, 0x36, 0x36, 0xFF, 0x2C, 0x2E, 0x2D, 0xFF, 0x17, 0x19, 0x18, 0xFF, + 0x0B, 0x0E, 0x0D, 0xFF, 0x13, 0x16, 0x15, 0xFF, 0x1E, 0x20, 0x1F, 0xFF, + 0x24, 0x26, 0x25, 0xFF, 0x22, 0x22, 0x22, 0xFF, 0x1D, 0x1D, 0x1D, 0xFF, + 0x3D, 0x3D, 0x3D, 0xFF, 0x49, 0x49, 0x49, 0xFF, 0x45, 0x45, 0x45, 0xFF, + 0x4E, 0x4E, 0x4E, 0xFF, 0x87, 0x87, 0x87, 0xFF, 0xA4, 0xA4, 0xA4, 0xFF, + 0xB8, 0xB8, 0xB8, 0xFF, 0xBF, 0xBF, 0xBF, 0xFF, 0xC5, 0xC5, 0xC5, 0xFF, + 0xC6, 0xC6, 0xC6, 0xFF, 0xD0, 0xD0, 0xD0, 0xFF, 0xCF, 0xCF, 0xCF, 0xFF, + 0xC7, 0xC7, 0xC7, 0xFF, 0xC2, 0xC2, 0xC2, 0xFF, 0xC2, 0xC4, 0xC4, 0xFF, + 0xC2, 0xC4, 0xC4, 0xFF, 0xC2, 0xC4, 0xC4, 0xFF, 0xC2, 0xC4, 0xC4, 0xFF, + 0xC1, 0xC3, 0xC2, 0xFF, 0xC0, 0xC2, 0xC1, 0xFF, 0xBF, 0xC1, 0xC0, 0xFF, + 0xBD, 0xC0, 0xBF, 0xFF, 0xC0, 0xC2, 0xC1, 0xFF, 0xC2, 0xC4, 0xC4, 0xFF, + 0xC4, 0xC7, 0xC6, 0xFF, 0xC6, 0xC8, 0xC7, 0xFF, 0xC8, 0xCA, 0xC9, 0xFF, + 0xC8, 0xCA, 0xC9, 0xFF, 0xC8, 0xCA, 0xC9, 0xFF, 0xC8, 0xCA, 0xC9, 0xFF, + 0x9C, 0x9D, 0x98, 0xFF, 0x99, 0x99, 0x94, 0xFF, 0x96, 0x97, 0x92, 0xFF, + 0x94, 0x95, 0x90, 0xFF, 0x94, 0x95, 0x90, 0xFF, 0x92, 0x92, 0x8E, 0xFF, + 0x8E, 0x8F, 0x8A, 0xFF, 0x8C, 0x8C, 0x88, 0xFF, 0x8C, 0x8C, 0x88, 0xFF, + 0x89, 0x8A, 0x85, 0xFF, 0x84, 0x84, 0x80, 0xFF, 0x7E, 0x7F, 0x7A, 0xFF, + 0x7D, 0x7D, 0x79, 0xFF, 0x74, 0x75, 0x70, 0xFF, 0x70, 0x71, 0x6C, 0xFF, + 0x6D, 0x6E, 0x69, 0xFF, 0x6C, 0x6D, 0x66, 0xFF, 0x65, 0x66, 0x5F, 0xFF, + 0x5D, 0x5E, 0x57, 0xFF, 0x58, 0x5A, 0x52, 0xFF, 0x54, 0x55, 0x50, 0xFF, + 0x4E, 0x4F, 0x4A, 0xFF, 0x48, 0x49, 0x44, 0xFF, 0x3F, 0x40, 0x3B, 0xFF, + 0x38, 0x39, 0x34, 0xFF, 0x2A, 0x2B, 0x26, 0xFF, 0x1E, 0x1F, 0x1A, 0xFF, + 0x1B, 0x1C, 0x17, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x14, 0x14, 0x12, 0xFF, 0x11, 0x12, 0x0F, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x0E, 0x0E, 0x0C, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, 0x0E, 0x0E, 0x0C, 0xFF, + 0x0E, 0x0E, 0x0C, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, + 0x0D, 0x0D, 0x0B, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, + 0x0D, 0x0D, 0x0B, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, 0x13, 0x13, 0x13, 0xFF, + 0x13, 0x13, 0x13, 0xFF, 0x13, 0x13, 0x13, 0xFF, 0x13, 0x13, 0x13, 0xFF, + 0x11, 0x11, 0x11, 0xFF, 0x13, 0x13, 0x13, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x15, 0x15, 0x15, 0xFF, 0x17, 0x17, 0x17, 0xFF, 0x2F, 0x2F, 0x2F, 0xFF, + 0x30, 0x30, 0x30, 0xFF, 0x26, 0x28, 0x28, 0xFF, 0x18, 0x1A, 0x1A, 0xFF, + 0x0F, 0x11, 0x10, 0xFF, 0x1B, 0x1B, 0x1B, 0xFF, 0x28, 0x28, 0x28, 0xFF, + 0x30, 0x30, 0x30, 0xFF, 0x33, 0x33, 0x33, 0xFF, 0x26, 0x26, 0x26, 0xFF, + 0x48, 0x48, 0x48, 0xFF, 0x4C, 0x4C, 0x4C, 0xFF, 0x49, 0x49, 0x49, 0xFF, + 0x5D, 0x5D, 0x5D, 0xFF, 0x96, 0x96, 0x96, 0xFF, 0xBF, 0xBF, 0xBF, 0xFF, + 0xBF, 0xBF, 0xBF, 0xFF, 0xC6, 0xC6, 0xC6, 0xFF, 0xCC, 0xCC, 0xCC, 0xFF, + 0xCD, 0xCD, 0xCD, 0xFF, 0xD0, 0xD0, 0xD0, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, + 0xCC, 0xCC, 0xCC, 0xFF, 0xC5, 0xC5, 0xC5, 0xFF, 0xBA, 0xBC, 0xBB, 0xFF, + 0xBA, 0xBC, 0xBB, 0xFF, 0xBA, 0xBC, 0xBB, 0xFF, 0xBA, 0xBC, 0xBB, 0xFF, + 0xB3, 0xB5, 0xB4, 0xFF, 0xB9, 0xBB, 0xBA, 0xFF, 0xC1, 0xC3, 0xC2, 0xFF, + 0xC6, 0xC8, 0xC7, 0xFF, 0xC2, 0xC4, 0xC4, 0xFF, 0xC4, 0xC7, 0xC6, 0xFF, + 0xC9, 0xCB, 0xCB, 0xFF, 0xCD, 0xCF, 0xCE, 0xFF, 0xCD, 0xCF, 0xCE, 0xFF, + 0xCD, 0xCF, 0xCE, 0xFF, 0xCD, 0xCF, 0xCE, 0xFF, 0xCD, 0xCF, 0xCE, 0xFF, + 0xA2, 0xA3, 0x9E, 0xFF, 0x9D, 0x9E, 0x99, 0xFF, 0x99, 0x99, 0x94, 0xFF, + 0x95, 0x96, 0x91, 0xFF, 0x97, 0x98, 0x93, 0xFF, 0x95, 0x96, 0x91, 0xFF, + 0x93, 0x93, 0x8F, 0xFF, 0x92, 0x92, 0x8E, 0xFF, 0x8D, 0x8E, 0x89, 0xFF, + 0x89, 0x8A, 0x85, 0xFF, 0x84, 0x84, 0x80, 0xFF, 0x81, 0x82, 0x7D, 0xFF, + 0x7E, 0x7F, 0x7A, 0xFF, 0x78, 0x79, 0x74, 0xFF, 0x73, 0x74, 0x6F, 0xFF, + 0x71, 0x72, 0x6D, 0xFF, 0x6B, 0x6C, 0x65, 0xFF, 0x65, 0x66, 0x5F, 0xFF, + 0x5E, 0x5F, 0x58, 0xFF, 0x58, 0x5A, 0x52, 0xFF, 0x54, 0x55, 0x50, 0xFF, + 0x4E, 0x4F, 0x4A, 0xFF, 0x47, 0x48, 0x43, 0xFF, 0x40, 0x41, 0x3C, 0xFF, + 0x37, 0x37, 0x33, 0xFF, 0x28, 0x28, 0x24, 0xFF, 0x1E, 0x1F, 0x1A, 0xFF, + 0x1D, 0x1E, 0x19, 0xFF, 0x1A, 0x1A, 0x16, 0xFF, 0x17, 0x18, 0x13, 0xFF, + 0x14, 0x15, 0x10, 0xFF, 0x14, 0x15, 0x10, 0xFF, 0x10, 0x11, 0x0C, 0xFF, + 0x11, 0x12, 0x0D, 0xFF, 0x11, 0x12, 0x0D, 0xFF, 0x11, 0x12, 0x0D, 0xFF, + 0x0C, 0x0C, 0x08, 0xFF, 0x0D, 0x0E, 0x09, 0xFF, 0x0D, 0x0E, 0x09, 0xFF, + 0x0D, 0x0E, 0x09, 0xFF, 0x0A, 0x0B, 0x06, 0xFF, 0x0A, 0x0B, 0x06, 0xFF, + 0x0A, 0x0B, 0x06, 0xFF, 0x0A, 0x0B, 0x08, 0xFF, 0x08, 0x09, 0x06, 0xFF, + 0x0E, 0x0E, 0x0C, 0xFF, 0x17, 0x18, 0x15, 0xFF, 0x1D, 0x1D, 0x1B, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x14, 0x14, 0x12, 0xFF, 0x1A, 0x1A, 0x18, 0xFF, + 0x1C, 0x1C, 0x1A, 0xFF, 0x14, 0x12, 0x13, 0xFF, 0x1B, 0x19, 0x1A, 0xFF, + 0x1A, 0x1A, 0x1A, 0xFF, 0x13, 0x13, 0x13, 0xFF, 0x22, 0x22, 0x22, 0xFF, + 0x2F, 0x2F, 0x2F, 0xFF, 0x2A, 0x2A, 0x2A, 0xFF, 0x17, 0x17, 0x17, 0xFF, + 0x17, 0x17, 0x17, 0xFF, 0x19, 0x16, 0x17, 0xFF, 0x22, 0x20, 0x21, 0xFF, + 0x2D, 0x2D, 0x2D, 0xFF, 0x34, 0x34, 0x34, 0xFF, 0x3A, 0x3A, 0x3A, 0xFF, + 0x53, 0x53, 0x53, 0xFF, 0x4B, 0x4B, 0x4B, 0xFF, 0x3F, 0x3F, 0x3F, 0xFF, + 0x69, 0x69, 0x69, 0xFF, 0xA0, 0xA0, 0xA0, 0xFF, 0xB7, 0xB7, 0xB7, 0xFF, + 0xBD, 0xBD, 0xBD, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xC4, 0xC4, 0xC4, 0xFF, + 0xCE, 0xCE, 0xCE, 0xFF, 0xCB, 0xCB, 0xCB, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, + 0xCC, 0xCC, 0xCC, 0xFF, 0xC9, 0xC9, 0xC9, 0xFF, 0xBF, 0xC1, 0xC0, 0xFF, + 0xBC, 0xBF, 0xBE, 0xFF, 0xBA, 0xBC, 0xBB, 0xFF, 0xBC, 0xBF, 0xBE, 0xFF, + 0xBD, 0xC0, 0xBF, 0xFF, 0xC1, 0xC3, 0xC2, 0xFF, 0xC4, 0xC7, 0xC6, 0xFF, + 0xC6, 0xC8, 0xC7, 0xFF, 0xC6, 0xC8, 0xC7, 0xFF, 0xC4, 0xC7, 0xC6, 0xFF, + 0xC7, 0xC9, 0xC8, 0xFF, 0xCA, 0xCD, 0xCC, 0xFF, 0xCB, 0xCE, 0xCD, 0xFF, + 0xCD, 0xCF, 0xCE, 0xFF, 0xCD, 0xCF, 0xCE, 0xFF, 0xCD, 0xCF, 0xCE, 0xFF, + 0xA0, 0xA0, 0x9B, 0xFF, 0x9D, 0x9E, 0x99, 0xFF, 0x9C, 0x9D, 0x98, 0xFF, + 0x9B, 0x9C, 0x97, 0xFF, 0x97, 0x98, 0x93, 0xFF, 0x95, 0x96, 0x91, 0xFF, + 0x93, 0x93, 0x8F, 0xFF, 0x92, 0x92, 0x8E, 0xFF, 0x8D, 0x8E, 0x89, 0xFF, + 0x89, 0x8A, 0x85, 0xFF, 0x84, 0x84, 0x80, 0xFF, 0x81, 0x82, 0x7D, 0xFF, + 0x7E, 0x7F, 0x7A, 0xFF, 0x78, 0x79, 0x74, 0xFF, 0x73, 0x74, 0x6F, 0xFF, + 0x71, 0x72, 0x6D, 0xFF, 0x6B, 0x6C, 0x65, 0xFF, 0x65, 0x66, 0x5F, 0xFF, + 0x5E, 0x5F, 0x58, 0xFF, 0x58, 0x5A, 0x52, 0xFF, 0x54, 0x55, 0x50, 0xFF, + 0x4E, 0x4F, 0x4A, 0xFF, 0x47, 0x48, 0x43, 0xFF, 0x40, 0x41, 0x3C, 0xFF, + 0x36, 0x36, 0x32, 0xFF, 0x28, 0x28, 0x24, 0xFF, 0x1E, 0x1F, 0x1A, 0xFF, + 0x1D, 0x1E, 0x19, 0xFF, 0x1A, 0x1A, 0x16, 0xFF, 0x17, 0x18, 0x13, 0xFF, + 0x14, 0x15, 0x10, 0xFF, 0x14, 0x15, 0x10, 0xFF, 0x10, 0x11, 0x0C, 0xFF, + 0x11, 0x12, 0x0D, 0xFF, 0x11, 0x12, 0x0D, 0xFF, 0x11, 0x12, 0x0D, 0xFF, + 0x0D, 0x0E, 0x09, 0xFF, 0x0D, 0x0E, 0x09, 0xFF, 0x0D, 0x0E, 0x09, 0xFF, + 0x0D, 0x0E, 0x09, 0xFF, 0x0D, 0x0E, 0x09, 0xFF, 0x0D, 0x0E, 0x09, 0xFF, + 0x0D, 0x0E, 0x09, 0xFF, 0x0D, 0x0E, 0x09, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x14, 0x14, 0x12, 0xFF, 0x14, 0x14, 0x12, 0xFF, + 0x15, 0x15, 0x13, 0xFF, 0x16, 0x17, 0x14, 0xFF, 0x17, 0x18, 0x15, 0xFF, + 0x1A, 0x1A, 0x18, 0xFF, 0x1E, 0x1B, 0x1C, 0xFF, 0x25, 0x22, 0x23, 0xFF, + 0x23, 0x23, 0x23, 0xFF, 0x1C, 0x1C, 0x1C, 0xFF, 0x28, 0x28, 0x28, 0xFF, + 0x31, 0x31, 0x31, 0xFF, 0x2F, 0x2F, 0x2F, 0xFF, 0x24, 0x24, 0x24, 0xFF, + 0x21, 0x1F, 0x1F, 0xFF, 0x1E, 0x1B, 0x1C, 0xFF, 0x21, 0x1F, 0x1F, 0xFF, + 0x2A, 0x28, 0x29, 0xFF, 0x3E, 0x3E, 0x3E, 0xFF, 0x37, 0x37, 0x37, 0xFF, + 0x42, 0x42, 0x42, 0xFF, 0x4B, 0x4B, 0x4B, 0xFF, 0x62, 0x62, 0x62, 0xFF, + 0x89, 0x89, 0x89, 0xFF, 0xA5, 0xA5, 0xA5, 0xFF, 0xAF, 0xAF, 0xAF, 0xFF, + 0xA9, 0xA9, 0xA9, 0xFF, 0xAC, 0xAC, 0xAC, 0xFF, 0xB9, 0xB9, 0xB9, 0xFF, + 0xC6, 0xC6, 0xC6, 0xFF, 0xD4, 0xD4, 0xD4, 0xFF, 0xD0, 0xD0, 0xD0, 0xFF, + 0xC8, 0xC8, 0xC8, 0xFF, 0xC0, 0xC0, 0xC0, 0xFF, 0xBD, 0xC0, 0xBF, 0xFF, + 0xC0, 0xC2, 0xC1, 0xFF, 0xC2, 0xC4, 0xC4, 0xFF, 0xC4, 0xC7, 0xC6, 0xFF, + 0xCB, 0xCE, 0xCD, 0xFF, 0xCD, 0xCF, 0xCE, 0xFF, 0xCF, 0xD1, 0xD0, 0xFF, + 0xCF, 0xD1, 0xD0, 0xFF, 0xCD, 0xCF, 0xCE, 0xFF, 0xC9, 0xCB, 0xCB, 0xFF, + 0xC8, 0xCA, 0xC9, 0xFF, 0xCA, 0xCD, 0xCC, 0xFF, 0xC4, 0xC7, 0xC6, 0xFF, + 0xC6, 0xC8, 0xC7, 0xFF, 0xC6, 0xC8, 0xC7, 0xFF, 0xC7, 0xC9, 0xC8, 0xFF, + 0xA5, 0xA6, 0xA1, 0xFF, 0xA1, 0xA1, 0x9D, 0xFF, 0x9D, 0x9E, 0x99, 0xFF, + 0x9A, 0x9A, 0x96, 0xFF, 0x97, 0x98, 0x93, 0xFF, 0x95, 0x96, 0x91, 0xFF, + 0x93, 0x93, 0x8F, 0xFF, 0x92, 0x92, 0x8E, 0xFF, 0x8D, 0x8E, 0x89, 0xFF, + 0x8B, 0x8B, 0x87, 0xFF, 0x85, 0x86, 0x81, 0xFF, 0x81, 0x82, 0x7D, 0xFF, + 0x7E, 0x7F, 0x7A, 0xFF, 0x78, 0x79, 0x74, 0xFF, 0x73, 0x74, 0x6F, 0xFF, + 0x71, 0x72, 0x6D, 0xFF, 0x6B, 0x6C, 0x65, 0xFF, 0x65, 0x66, 0x5F, 0xFF, + 0x5E, 0x5F, 0x58, 0xFF, 0x58, 0x5A, 0x52, 0xFF, 0x54, 0x55, 0x50, 0xFF, + 0x4E, 0x4F, 0x4A, 0xFF, 0x47, 0x48, 0x43, 0xFF, 0x40, 0x41, 0x3C, 0xFF, + 0x36, 0x36, 0x32, 0xFF, 0x28, 0x28, 0x24, 0xFF, 0x1E, 0x1F, 0x1A, 0xFF, + 0x1D, 0x1E, 0x19, 0xFF, 0x1A, 0x1A, 0x16, 0xFF, 0x17, 0x18, 0x13, 0xFF, + 0x15, 0x16, 0x11, 0xFF, 0x14, 0x15, 0x10, 0xFF, 0x11, 0x12, 0x0D, 0xFF, + 0x11, 0x12, 0x0D, 0xFF, 0x11, 0x12, 0x0D, 0xFF, 0x10, 0x11, 0x0C, 0xFF, + 0x10, 0x11, 0x0C, 0xFF, 0x0F, 0x10, 0x0B, 0xFF, 0x0F, 0x10, 0x0B, 0xFF, + 0x0F, 0x10, 0x0B, 0xFF, 0x0F, 0x10, 0x0B, 0xFF, 0x0F, 0x10, 0x0B, 0xFF, + 0x0F, 0x10, 0x0B, 0xFF, 0x0F, 0x10, 0x0B, 0xFF, 0x14, 0x14, 0x12, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x11, 0x12, 0x0F, 0xFF, 0x11, 0x12, 0x0F, 0xFF, + 0x18, 0x19, 0x16, 0xFF, 0x17, 0x18, 0x15, 0xFF, 0x16, 0x17, 0x14, 0xFF, + 0x15, 0x15, 0x13, 0xFF, 0x21, 0x1F, 0x1D, 0xFF, 0x28, 0x26, 0x24, 0xFF, + 0x26, 0x27, 0x24, 0xFF, 0x1F, 0x20, 0x1D, 0xFF, 0x28, 0x28, 0x26, 0xFF, + 0x2B, 0x2B, 0x29, 0xFF, 0x2D, 0x2E, 0x2B, 0xFF, 0x2B, 0x2B, 0x29, 0xFF, + 0x2E, 0x2C, 0x2A, 0xFF, 0x25, 0x22, 0x21, 0xFF, 0x21, 0x1F, 0x1D, 0xFF, + 0x25, 0x22, 0x21, 0xFF, 0x36, 0x36, 0x36, 0xFF, 0x39, 0x39, 0x39, 0xFF, + 0x3E, 0x3E, 0x3E, 0xFF, 0x50, 0x50, 0x50, 0xFF, 0x80, 0x80, 0x80, 0xFF, + 0xA9, 0xA9, 0xA9, 0xFF, 0xB2, 0xB2, 0xB2, 0xFF, 0xB2, 0xB2, 0xB2, 0xFF, + 0xA9, 0xA9, 0xA9, 0xFF, 0xAA, 0xAA, 0xAA, 0xFF, 0xB2, 0xB2, 0xB2, 0xFF, + 0xBB, 0xBB, 0xBB, 0xFF, 0xD4, 0xD4, 0xD4, 0xFF, 0xD0, 0xD0, 0xD0, 0xFF, + 0xC8, 0xC8, 0xC8, 0xFF, 0xC0, 0xC0, 0xC0, 0xFF, 0xC6, 0xC8, 0xC7, 0xFF, + 0xC8, 0xCA, 0xC9, 0xFF, 0xCA, 0xCD, 0xCC, 0xFF, 0xCA, 0xCD, 0xCC, 0xFF, + 0xCF, 0xD1, 0xD0, 0xFF, 0xD0, 0xD2, 0xD2, 0xFF, 0xD0, 0xD2, 0xD2, 0xFF, + 0xD0, 0xD2, 0xD2, 0xFF, 0xCF, 0xD1, 0xD0, 0xFF, 0xC9, 0xCB, 0xCB, 0xFF, + 0xC6, 0xC8, 0xC7, 0xFF, 0xC4, 0xC7, 0xC6, 0xFF, 0xC2, 0xC4, 0xC4, 0xFF, + 0xC3, 0xC6, 0xC5, 0xFF, 0xC4, 0xC7, 0xC6, 0xFF, 0xC6, 0xC8, 0xC7, 0xFF, + 0xB0, 0xB1, 0xAC, 0xFF, 0xA7, 0xA7, 0xA2, 0xFF, 0x9C, 0x9D, 0x98, 0xFF, + 0x94, 0x95, 0x90, 0xFF, 0x97, 0x98, 0x93, 0xFF, 0x95, 0x96, 0x91, 0xFF, + 0x93, 0x93, 0x8F, 0xFF, 0x92, 0x92, 0x8E, 0xFF, 0x8D, 0x8E, 0x89, 0xFF, + 0x8B, 0x8B, 0x87, 0xFF, 0x85, 0x86, 0x81, 0xFF, 0x81, 0x82, 0x7D, 0xFF, + 0x7E, 0x7F, 0x7A, 0xFF, 0x78, 0x79, 0x74, 0xFF, 0x73, 0x74, 0x6F, 0xFF, + 0x71, 0x72, 0x6D, 0xFF, 0x6B, 0x6C, 0x67, 0xFF, 0x65, 0x66, 0x5F, 0xFF, + 0x5E, 0x5F, 0x58, 0xFF, 0x58, 0x5A, 0x52, 0xFF, 0x54, 0x55, 0x50, 0xFF, + 0x4E, 0x4F, 0x4A, 0xFF, 0x47, 0x48, 0x43, 0xFF, 0x40, 0x41, 0x3C, 0xFF, + 0x36, 0x36, 0x32, 0xFF, 0x28, 0x28, 0x24, 0xFF, 0x1E, 0x1F, 0x1A, 0xFF, + 0x1C, 0x1D, 0x18, 0xFF, 0x1A, 0x1A, 0x16, 0xFF, 0x17, 0x18, 0x13, 0xFF, + 0x15, 0x16, 0x11, 0xFF, 0x14, 0x15, 0x10, 0xFF, 0x11, 0x12, 0x0D, 0xFF, + 0x11, 0x12, 0x0D, 0xFF, 0x11, 0x12, 0x0D, 0xFF, 0x11, 0x12, 0x0D, 0xFF, + 0x11, 0x12, 0x0D, 0xFF, 0x11, 0x12, 0x0D, 0xFF, 0x11, 0x12, 0x0D, 0xFF, + 0x11, 0x12, 0x0D, 0xFF, 0x11, 0x12, 0x0D, 0xFF, 0x11, 0x12, 0x0D, 0xFF, + 0x11, 0x12, 0x0D, 0xFF, 0x11, 0x12, 0x0D, 0xFF, 0x10, 0x11, 0x0E, 0xFF, + 0x11, 0x12, 0x0F, 0xFF, 0x14, 0x14, 0x12, 0xFF, 0x15, 0x15, 0x13, 0xFF, + 0x1C, 0x1C, 0x1A, 0xFF, 0x18, 0x19, 0x16, 0xFF, 0x15, 0x15, 0x13, 0xFF, + 0x13, 0x11, 0x0F, 0xFF, 0x1E, 0x1C, 0x1A, 0xFF, 0x23, 0x21, 0x20, 0xFF, + 0x23, 0x21, 0x20, 0xFF, 0x1E, 0x1C, 0x1A, 0xFF, 0x22, 0x20, 0x1F, 0xFF, + 0x22, 0x20, 0x1F, 0xFF, 0x27, 0x25, 0x23, 0xFF, 0x2D, 0x2B, 0x29, 0xFF, + 0x37, 0x35, 0x34, 0xFF, 0x2A, 0x28, 0x27, 0xFF, 0x21, 0x1F, 0x1D, 0xFF, + 0x21, 0x1F, 0x1D, 0xFF, 0x3C, 0x39, 0x3A, 0xFF, 0x5B, 0x5B, 0x5B, 0xFF, + 0x63, 0x63, 0x63, 0xFF, 0x74, 0x74, 0x74, 0xFF, 0x95, 0x95, 0x95, 0xFF, + 0xB2, 0xB2, 0xB2, 0xFF, 0xBA, 0xBA, 0xBA, 0xFF, 0xC0, 0xC0, 0xC0, 0xFF, + 0xBF, 0xBF, 0xBF, 0xFF, 0xB8, 0xB8, 0xB8, 0xFF, 0xB4, 0xB4, 0xB4, 0xFF, + 0xB7, 0xB7, 0xB7, 0xFF, 0xCB, 0xCB, 0xCB, 0xFF, 0xCB, 0xCB, 0xCB, 0xFF, + 0xCC, 0xCC, 0xCC, 0xFF, 0xCB, 0xCB, 0xCB, 0xFF, 0xCB, 0xCE, 0xCD, 0xFF, + 0xCD, 0xCF, 0xCE, 0xFF, 0xCD, 0xCF, 0xCE, 0xFF, 0xCB, 0xCE, 0xCD, 0xFF, + 0xCA, 0xCD, 0xCC, 0xFF, 0xC9, 0xCB, 0xCB, 0xFF, 0xC9, 0xCB, 0xCB, 0xFF, + 0xC9, 0xCB, 0xCB, 0xFF, 0xC8, 0xCA, 0xC9, 0xFF, 0xC7, 0xC9, 0xC8, 0xFF, + 0xC1, 0xC3, 0xC2, 0xFF, 0xBD, 0xC0, 0xBF, 0xFF, 0xC1, 0xC3, 0xC2, 0xFF, + 0xC4, 0xC7, 0xC6, 0xFF, 0xC8, 0xCA, 0xC9, 0xFF, 0xC9, 0xCB, 0xCB, 0xFF, + 0xC0, 0xC1, 0xBE, 0xFF, 0xB3, 0xB4, 0xB1, 0xFF, 0xA5, 0xA6, 0xA3, 0xFF, + 0x9C, 0x9C, 0x9A, 0xFF, 0x9B, 0x9B, 0x99, 0xFF, 0x99, 0x99, 0x97, 0xFF, + 0x94, 0x94, 0x92, 0xFF, 0x92, 0x92, 0x90, 0xFF, 0x8E, 0x90, 0x8D, 0xFF, + 0x8A, 0x8D, 0x8A, 0xFF, 0x87, 0x89, 0x86, 0xFF, 0x82, 0x85, 0x82, 0xFF, + 0x81, 0x84, 0x80, 0xFF, 0x7B, 0x7E, 0x7B, 0xFF, 0x78, 0x7A, 0x77, 0xFF, + 0x74, 0x77, 0x74, 0xFF, 0x70, 0x71, 0x6C, 0xFF, 0x6A, 0x6B, 0x66, 0xFF, + 0x63, 0x64, 0x5F, 0xFF, 0x5D, 0x5E, 0x59, 0xFF, 0x57, 0x58, 0x53, 0xFF, + 0x4F, 0x50, 0x4B, 0xFF, 0x46, 0x47, 0x42, 0xFF, 0x3D, 0x3D, 0x39, 0xFF, + 0x32, 0x33, 0x2E, 0xFF, 0x26, 0x27, 0x22, 0xFF, 0x1E, 0x1F, 0x1A, 0xFF, + 0x1C, 0x1D, 0x18, 0xFF, 0x1B, 0x1C, 0x17, 0xFF, 0x1B, 0x1C, 0x17, 0xFF, + 0x1A, 0x1A, 0x16, 0xFF, 0x1A, 0x1A, 0x16, 0xFF, 0x1B, 0x1A, 0x16, 0xFF, + 0x1B, 0x1A, 0x16, 0xFF, 0x1A, 0x18, 0x14, 0xFF, 0x1A, 0x18, 0x14, 0xFF, + 0x1F, 0x1D, 0x19, 0xFF, 0x1C, 0x1B, 0x17, 0xFF, 0x1A, 0x18, 0x14, 0xFF, + 0x19, 0x17, 0x13, 0xFF, 0x19, 0x17, 0x13, 0xFF, 0x19, 0x17, 0x13, 0xFF, + 0x17, 0x15, 0x11, 0xFF, 0x14, 0x13, 0x0F, 0xFF, 0x0E, 0x0C, 0x0B, 0xFF, + 0x10, 0x0E, 0x0C, 0xFF, 0x14, 0x12, 0x11, 0xFF, 0x1C, 0x1A, 0x19, 0xFF, + 0x23, 0x21, 0x20, 0xFF, 0x20, 0x1E, 0x1C, 0xFF, 0x1C, 0x1A, 0x19, 0xFF, + 0x19, 0x17, 0x15, 0xFF, 0x24, 0x1F, 0x1F, 0xFF, 0x27, 0x23, 0x22, 0xFF, + 0x24, 0x1F, 0x1F, 0xFF, 0x1F, 0x1B, 0x1A, 0xFF, 0x20, 0x1C, 0x1B, 0xFF, + 0x21, 0x1D, 0x1C, 0xFF, 0x24, 0x1F, 0x1F, 0xFF, 0x2B, 0x26, 0x26, 0xFF, + 0x3A, 0x35, 0x35, 0xFF, 0x36, 0x32, 0x31, 0xFF, 0x38, 0x33, 0x32, 0xFF, + 0x3D, 0x39, 0x38, 0xFF, 0x6A, 0x68, 0x69, 0xFF, 0x83, 0x80, 0x81, 0xFF, + 0x9B, 0x99, 0x9A, 0xFF, 0x9C, 0x9A, 0x9B, 0xFF, 0xA8, 0xA8, 0xA8, 0xFF, + 0xA5, 0xA5, 0xA5, 0xFF, 0xAC, 0xAC, 0xAC, 0xFF, 0xBF, 0xBF, 0xBF, 0xFF, + 0xC4, 0xC4, 0xC4, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, 0xB7, 0xB7, 0xB7, 0xFF, + 0xC0, 0xC0, 0xC0, 0xFF, 0xC1, 0xC1, 0xC1, 0xFF, 0xC7, 0xC7, 0xC7, 0xFF, + 0xCE, 0xCE, 0xCE, 0xFF, 0xD2, 0xD2, 0xD2, 0xFF, 0xD7, 0xD9, 0xD9, 0xFF, + 0xCF, 0xD1, 0xD0, 0xFF, 0xC3, 0xC6, 0xC5, 0xFF, 0xBB, 0xBD, 0xBD, 0xFF, + 0xBF, 0xC1, 0xC0, 0xFF, 0xC4, 0xC7, 0xC6, 0xFF, 0xC4, 0xC7, 0xC6, 0xFF, + 0xBF, 0xC1, 0xC0, 0xFF, 0xD3, 0xD6, 0xD5, 0xFF, 0xCD, 0xCF, 0xCE, 0xFF, + 0xC5, 0xCA, 0xC8, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, + 0xC6, 0xCB, 0xC9, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, 0xC4, 0xC9, 0xC7, 0xFF, + 0xCE, 0xCE, 0xCC, 0xFF, 0xC2, 0xC3, 0xC0, 0xFF, 0xB2, 0xB3, 0xB0, 0xFF, + 0xA3, 0xA3, 0xA1, 0xFF, 0x9D, 0x9E, 0x9B, 0xFF, 0x9B, 0x9B, 0x99, 0xFF, + 0x97, 0x98, 0x95, 0xFF, 0x93, 0x93, 0x91, 0xFF, 0x8F, 0x92, 0x8E, 0xFF, + 0x8C, 0x8F, 0x8C, 0xFF, 0x88, 0x8B, 0x87, 0xFF, 0x84, 0x87, 0x84, 0xFF, + 0x81, 0x84, 0x80, 0xFF, 0x7B, 0x7E, 0x7B, 0xFF, 0x78, 0x7A, 0x77, 0xFF, + 0x74, 0x77, 0x74, 0xFF, 0x70, 0x71, 0x6C, 0xFF, 0x6A, 0x6B, 0x66, 0xFF, + 0x63, 0x64, 0x5F, 0xFF, 0x5D, 0x5E, 0x59, 0xFF, 0x57, 0x58, 0x53, 0xFF, + 0x4F, 0x50, 0x4B, 0xFF, 0x46, 0x47, 0x42, 0xFF, 0x3D, 0x3D, 0x39, 0xFF, + 0x32, 0x33, 0x2E, 0xFF, 0x26, 0x27, 0x22, 0xFF, 0x1E, 0x1F, 0x1A, 0xFF, + 0x1B, 0x1C, 0x17, 0xFF, 0x1B, 0x1C, 0x17, 0xFF, 0x1B, 0x1C, 0x17, 0xFF, + 0x1B, 0x1C, 0x17, 0xFF, 0x1B, 0x1C, 0x17, 0xFF, 0x1E, 0x1C, 0x18, 0xFF, + 0x1E, 0x1C, 0x18, 0xFF, 0x1E, 0x1C, 0x18, 0xFF, 0x1F, 0x1D, 0x19, 0xFF, + 0x1F, 0x1D, 0x19, 0xFF, 0x1F, 0x1D, 0x19, 0xFF, 0x1C, 0x1B, 0x17, 0xFF, + 0x1B, 0x1A, 0x16, 0xFF, 0x1A, 0x18, 0x14, 0xFF, 0x19, 0x17, 0x13, 0xFF, + 0x17, 0x15, 0x11, 0xFF, 0x14, 0x13, 0x0F, 0xFF, 0x13, 0x11, 0x0F, 0xFF, + 0x17, 0x15, 0x13, 0xFF, 0x1C, 0x1A, 0x19, 0xFF, 0x20, 0x1E, 0x1C, 0xFF, + 0x22, 0x20, 0x1F, 0xFF, 0x21, 0x1F, 0x1D, 0xFF, 0x20, 0x1E, 0x1C, 0xFF, + 0x1F, 0x1D, 0x1B, 0xFF, 0x26, 0x22, 0x21, 0xFF, 0x2A, 0x25, 0x24, 0xFF, + 0x26, 0x22, 0x21, 0xFF, 0x21, 0x1D, 0x1C, 0xFF, 0x24, 0x1F, 0x1F, 0xFF, + 0x27, 0x23, 0x22, 0xFF, 0x2D, 0x29, 0x28, 0xFF, 0x35, 0x31, 0x30, 0xFF, + 0x44, 0x40, 0x3F, 0xFF, 0x3F, 0x3A, 0x39, 0xFF, 0x44, 0x40, 0x3F, 0xFF, + 0x51, 0x4D, 0x4C, 0xFF, 0x86, 0x84, 0x85, 0xFF, 0x95, 0x93, 0x94, 0xFF, + 0xAF, 0xAD, 0xAD, 0xFF, 0xAD, 0xAA, 0xAB, 0xFF, 0xAB, 0xAB, 0xAB, 0xFF, + 0xA8, 0xA8, 0xA8, 0xFF, 0xAD, 0xAD, 0xAD, 0xFF, 0xB8, 0xB8, 0xB8, 0xFF, + 0xC1, 0xC1, 0xC1, 0xFF, 0xBB, 0xBB, 0xBB, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, + 0xC5, 0xC5, 0xC5, 0xFF, 0xC7, 0xC7, 0xC7, 0xFF, 0xC9, 0xC9, 0xC9, 0xFF, + 0xD0, 0xD0, 0xD0, 0xFF, 0xD3, 0xD3, 0xD3, 0xFF, 0xD3, 0xD6, 0xD5, 0xFF, + 0xCE, 0xD0, 0xCF, 0xFF, 0xC4, 0xC7, 0xC6, 0xFF, 0xBF, 0xC1, 0xC0, 0xFF, + 0xC1, 0xC3, 0xC2, 0xFF, 0xC7, 0xC9, 0xC8, 0xFF, 0xC7, 0xC9, 0xC8, 0xFF, + 0xC1, 0xC3, 0xC2, 0xFF, 0xCF, 0xD1, 0xD0, 0xFF, 0xCB, 0xCE, 0xCD, 0xFF, + 0xC7, 0xCC, 0xCB, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, 0xD2, 0xD7, 0xD5, 0xFF, + 0xCC, 0xD1, 0xCF, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, + 0xDB, 0xDB, 0xD9, 0xFF, 0xD5, 0xD5, 0xD3, 0xFF, 0xC7, 0xC7, 0xC5, 0xFF, + 0xB6, 0xB6, 0xB4, 0xFF, 0xA4, 0xA5, 0xA2, 0xFF, 0x9D, 0x9E, 0x9B, 0xFF, + 0x9B, 0x9B, 0x99, 0xFF, 0x96, 0x97, 0x94, 0xFF, 0x90, 0x93, 0x90, 0xFF, + 0x8E, 0x90, 0x8D, 0xFF, 0x8A, 0x8D, 0x8A, 0xFF, 0x87, 0x89, 0x86, 0xFF, + 0x81, 0x84, 0x80, 0xFF, 0x7B, 0x7E, 0x7B, 0xFF, 0x78, 0x7A, 0x77, 0xFF, + 0x74, 0x77, 0x74, 0xFF, 0x70, 0x71, 0x6C, 0xFF, 0x6A, 0x6B, 0x66, 0xFF, + 0x63, 0x64, 0x5F, 0xFF, 0x5D, 0x5E, 0x59, 0xFF, 0x57, 0x58, 0x53, 0xFF, + 0x4F, 0x50, 0x4B, 0xFF, 0x46, 0x47, 0x42, 0xFF, 0x3D, 0x3D, 0x39, 0xFF, + 0x32, 0x33, 0x2E, 0xFF, 0x26, 0x27, 0x22, 0xFF, 0x1E, 0x1F, 0x1A, 0xFF, + 0x1B, 0x1C, 0x17, 0xFF, 0x1B, 0x1C, 0x17, 0xFF, 0x1B, 0x1C, 0x17, 0xFF, + 0x1B, 0x1C, 0x17, 0xFF, 0x1C, 0x1D, 0x18, 0xFF, 0x23, 0x22, 0x1E, 0xFF, + 0x23, 0x22, 0x1E, 0xFF, 0x23, 0x22, 0x1E, 0xFF, 0x23, 0x22, 0x1E, 0xFF, + 0x22, 0x21, 0x1D, 0xFF, 0x21, 0x1F, 0x1B, 0xFF, 0x1F, 0x1D, 0x19, 0xFF, + 0x1C, 0x1B, 0x17, 0xFF, 0x1F, 0x1D, 0x19, 0xFF, 0x19, 0x17, 0x13, 0xFF, + 0x17, 0x15, 0x11, 0xFF, 0x14, 0x13, 0x0F, 0xFF, 0x1C, 0x1A, 0x19, 0xFF, + 0x21, 0x1F, 0x1D, 0xFF, 0x21, 0x1F, 0x1D, 0xFF, 0x22, 0x20, 0x1F, 0xFF, + 0x22, 0x20, 0x1F, 0xFF, 0x23, 0x21, 0x20, 0xFF, 0x25, 0x22, 0x21, 0xFF, + 0x26, 0x24, 0x22, 0xFF, 0x2A, 0x25, 0x24, 0xFF, 0x2D, 0x29, 0x28, 0xFF, + 0x2A, 0x25, 0x24, 0xFF, 0x25, 0x21, 0x20, 0xFF, 0x2B, 0x26, 0x26, 0xFF, + 0x31, 0x2C, 0x2B, 0xFF, 0x39, 0x34, 0x34, 0xFF, 0x44, 0x40, 0x3F, 0xFF, + 0x4D, 0x48, 0x47, 0xFF, 0x3D, 0x39, 0x38, 0xFF, 0x3F, 0x3A, 0x39, 0xFF, + 0x50, 0x4C, 0x4B, 0xFF, 0x88, 0x85, 0x86, 0xFF, 0x97, 0x94, 0x95, 0xFF, + 0xAE, 0xAC, 0xAC, 0xFF, 0xA8, 0xA6, 0xA7, 0xFF, 0xA2, 0xA2, 0xA2, 0xFF, + 0xA5, 0xA5, 0xA5, 0xFF, 0xAB, 0xAB, 0xAB, 0xFF, 0xB2, 0xB2, 0xB2, 0xFF, + 0xBF, 0xBF, 0xBF, 0xFF, 0xBB, 0xBB, 0xBB, 0xFF, 0xC2, 0xC2, 0xC2, 0xFF, + 0xCB, 0xCB, 0xCB, 0xFF, 0xC9, 0xC9, 0xC9, 0xFF, 0xC9, 0xC9, 0xC9, 0xFF, + 0xD0, 0xD0, 0xD0, 0xFF, 0xD3, 0xD3, 0xD3, 0xFF, 0xCF, 0xD1, 0xD0, 0xFF, + 0xCB, 0xCE, 0xCD, 0xFF, 0xC7, 0xC9, 0xC8, 0xFF, 0xC3, 0xC6, 0xC5, 0xFF, + 0xC4, 0xC7, 0xC6, 0xFF, 0xCA, 0xCD, 0xCC, 0xFF, 0xCA, 0xCD, 0xCC, 0xFF, + 0xC4, 0xC7, 0xC6, 0xFF, 0xCE, 0xD0, 0xCF, 0xFF, 0xC7, 0xC9, 0xC8, 0xFF, + 0xC6, 0xCB, 0xC9, 0xFF, 0xCB, 0xD0, 0xCE, 0xFF, 0xCD, 0xD2, 0xD0, 0xFF, + 0xCA, 0xCF, 0xCD, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, + 0xDD, 0xDE, 0xDB, 0xFF, 0xE1, 0xE1, 0xDF, 0xFF, 0xD9, 0xD9, 0xD7, 0xFF, + 0xC8, 0xC9, 0xC6, 0xFF, 0xB1, 0xB1, 0xAF, 0xFF, 0xA0, 0xA0, 0x9D, 0xFF, + 0x9C, 0x9C, 0x9A, 0xFF, 0x9A, 0x9A, 0x98, 0xFF, 0x92, 0x95, 0x92, 0xFF, + 0x8F, 0x92, 0x8E, 0xFF, 0x8C, 0x8F, 0x8C, 0xFF, 0x88, 0x8B, 0x87, 0xFF, + 0x81, 0x84, 0x80, 0xFF, 0x7B, 0x7E, 0x7B, 0xFF, 0x78, 0x7A, 0x77, 0xFF, + 0x74, 0x77, 0x74, 0xFF, 0x70, 0x71, 0x6C, 0xFF, 0x6A, 0x6B, 0x66, 0xFF, + 0x63, 0x64, 0x5F, 0xFF, 0x5D, 0x5E, 0x59, 0xFF, 0x57, 0x58, 0x53, 0xFF, + 0x4F, 0x50, 0x4B, 0xFF, 0x46, 0x47, 0x42, 0xFF, 0x3D, 0x3D, 0x39, 0xFF, + 0x30, 0x31, 0x2C, 0xFF, 0x25, 0x26, 0x21, 0xFF, 0x1E, 0x1F, 0x1A, 0xFF, + 0x1C, 0x1D, 0x18, 0xFF, 0x1B, 0x1C, 0x17, 0xFF, 0x1B, 0x1C, 0x17, 0xFF, + 0x1B, 0x1C, 0x17, 0xFF, 0x1C, 0x1D, 0x18, 0xFF, 0x27, 0x25, 0x21, 0xFF, + 0x27, 0x25, 0x21, 0xFF, 0x27, 0x25, 0x21, 0xFF, 0x27, 0x25, 0x21, 0xFF, + 0x25, 0x23, 0x1F, 0xFF, 0x22, 0x21, 0x1D, 0xFF, 0x20, 0x1E, 0x1A, 0xFF, + 0x1F, 0x1D, 0x19, 0xFF, 0x21, 0x1F, 0x1B, 0xFF, 0x1A, 0x18, 0x14, 0xFF, + 0x17, 0x15, 0x11, 0xFF, 0x14, 0x13, 0x0F, 0xFF, 0x28, 0x26, 0x24, 0xFF, + 0x28, 0x26, 0x24, 0xFF, 0x26, 0x24, 0x22, 0xFF, 0x25, 0x22, 0x21, 0xFF, + 0x21, 0x1F, 0x1D, 0xFF, 0x25, 0x22, 0x21, 0xFF, 0x29, 0x27, 0x26, 0xFF, + 0x2C, 0x29, 0x28, 0xFF, 0x2C, 0x28, 0x27, 0xFF, 0x2F, 0x2B, 0x2A, 0xFF, + 0x2C, 0x28, 0x27, 0xFF, 0x27, 0x23, 0x22, 0xFF, 0x2E, 0x2A, 0x29, 0xFF, + 0x36, 0x32, 0x31, 0xFF, 0x42, 0x3E, 0x3D, 0xFF, 0x4F, 0x4A, 0x4A, 0xFF, + 0x4E, 0x49, 0x48, 0xFF, 0x33, 0x2E, 0x2E, 0xFF, 0x2B, 0x26, 0x26, 0xFF, + 0x3A, 0x35, 0x35, 0xFF, 0x9A, 0x98, 0x99, 0xFF, 0xA8, 0xA6, 0xA7, 0xFF, + 0xBB, 0xB8, 0xB9, 0xFF, 0xB8, 0xB6, 0xB7, 0xFF, 0x97, 0x97, 0x97, 0xFF, + 0x9E, 0x9E, 0x9E, 0xFF, 0xA9, 0xA9, 0xA9, 0xFF, 0xB1, 0xB1, 0xB1, 0xFF, + 0xBE, 0xBE, 0xBE, 0xFF, 0xC1, 0xC1, 0xC1, 0xFF, 0xC7, 0xC7, 0xC7, 0xFF, + 0xC9, 0xC9, 0xC9, 0xFF, 0xC8, 0xC8, 0xC8, 0xFF, 0xC8, 0xC8, 0xC8, 0xFF, + 0xD0, 0xD0, 0xD0, 0xFF, 0xD3, 0xD3, 0xD3, 0xFF, 0xCD, 0xCF, 0xCE, 0xFF, + 0xCA, 0xCD, 0xCC, 0xFF, 0xC8, 0xCA, 0xC9, 0xFF, 0xC7, 0xC9, 0xC8, 0xFF, + 0xC6, 0xC8, 0xC7, 0xFF, 0xCD, 0xCF, 0xCE, 0xFF, 0xCD, 0xCF, 0xCE, 0xFF, + 0xC7, 0xC9, 0xC8, 0xFF, 0xD1, 0xD4, 0xD3, 0xFF, 0xC6, 0xC8, 0xC7, 0xFF, + 0xC2, 0xC6, 0xC5, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, 0xC4, 0xC9, 0xC7, 0xFF, + 0xC0, 0xC5, 0xC4, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, + 0xD7, 0xD7, 0xD7, 0xFF, 0xDB, 0xDB, 0xDB, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, + 0xDC, 0xDC, 0xDC, 0xFF, 0xCC, 0xCC, 0xCC, 0xFF, 0xB1, 0xB1, 0xB1, 0xFF, + 0x9F, 0xA2, 0xA1, 0xFF, 0x99, 0x9C, 0x9B, 0xFF, 0x96, 0x98, 0x97, 0xFF, + 0x91, 0x94, 0x93, 0xFF, 0x8C, 0x91, 0x8F, 0xFF, 0x89, 0x8D, 0x8C, 0xFF, + 0x80, 0x82, 0x7F, 0xFF, 0x7B, 0x7E, 0x7B, 0xFF, 0x78, 0x7A, 0x77, 0xFF, + 0x73, 0x76, 0x72, 0xFF, 0x6F, 0x73, 0x6D, 0xFF, 0x71, 0x74, 0x6E, 0xFF, + 0x67, 0x6A, 0x65, 0xFF, 0x59, 0x5C, 0x57, 0xFF, 0x55, 0x56, 0x51, 0xFF, + 0x4B, 0x4B, 0x46, 0xFF, 0x3F, 0x40, 0x3B, 0xFF, 0x33, 0x34, 0x2F, 0xFF, + 0x2B, 0x2C, 0x27, 0xFF, 0x23, 0x24, 0x1F, 0xFF, 0x1E, 0x1F, 0x1A, 0xFF, + 0x1E, 0x1F, 0x1A, 0xFF, 0x1C, 0x1B, 0x15, 0xFF, 0x1C, 0x1B, 0x15, 0xFF, + 0x1C, 0x1B, 0x15, 0xFF, 0x1E, 0x1C, 0x16, 0xFF, 0x27, 0x26, 0x1F, 0xFF, + 0x2C, 0x2A, 0x24, 0xFF, 0x2C, 0x2A, 0x24, 0xFF, 0x2C, 0x2A, 0x24, 0xFF, + 0x27, 0x24, 0x1E, 0xFF, 0x25, 0x21, 0x1C, 0xFF, 0x23, 0x1F, 0x19, 0xFF, + 0x21, 0x1E, 0x18, 0xFF, 0x23, 0x22, 0x1C, 0xFF, 0x13, 0x12, 0x0B, 0xFF, + 0x14, 0x13, 0x0D, 0xFF, 0x26, 0x24, 0x20, 0xFF, 0x33, 0x31, 0x2D, 0xFF, + 0x2E, 0x2C, 0x28, 0xFF, 0x2A, 0x29, 0x25, 0xFF, 0x27, 0x25, 0x21, 0xFF, + 0x29, 0x28, 0x24, 0xFF, 0x35, 0x33, 0x2F, 0xFF, 0x38, 0x37, 0x33, 0xFF, + 0x31, 0x30, 0x2C, 0xFF, 0x2C, 0x28, 0x25, 0xFF, 0x2F, 0x2B, 0x28, 0xFF, + 0x2A, 0x26, 0x22, 0xFF, 0x21, 0x1D, 0x1A, 0xFF, 0x35, 0x31, 0x2E, 0xFF, + 0x41, 0x3D, 0x3A, 0xFF, 0x47, 0x43, 0x3F, 0xFF, 0x46, 0x42, 0x3E, 0xFF, + 0x33, 0x2E, 0x2E, 0xFF, 0x1F, 0x1B, 0x1A, 0xFF, 0x2C, 0x28, 0x27, 0xFF, + 0x52, 0x4E, 0x4D, 0xFF, 0x93, 0x91, 0x90, 0xFF, 0xA0, 0x9E, 0x9C, 0xFF, + 0xA7, 0xA5, 0xA3, 0xFF, 0xA5, 0xA3, 0xA1, 0xFF, 0xA5, 0xA5, 0xA5, 0xFF, + 0xA5, 0xA5, 0xA5, 0xFF, 0xA5, 0xA5, 0xA5, 0xFF, 0xA5, 0xA5, 0xA5, 0xFF, + 0xB6, 0xB6, 0xB6, 0xFF, 0xBB, 0xBB, 0xBB, 0xFF, 0xC4, 0xC4, 0xC4, 0xFF, + 0xC9, 0xC9, 0xC9, 0xFF, 0xC6, 0xC6, 0xC6, 0xFF, 0xC7, 0xC7, 0xC7, 0xFF, + 0xC4, 0xC4, 0xC4, 0xFF, 0xC4, 0xC4, 0xC4, 0xFF, 0xBC, 0xBF, 0xBE, 0xFF, + 0xC9, 0xCB, 0xCB, 0xFF, 0xD1, 0xD4, 0xD3, 0xFF, 0xD0, 0xD2, 0xD2, 0xFF, + 0xC4, 0xC7, 0xC6, 0xFF, 0xC2, 0xC4, 0xC4, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, + 0xBB, 0xBF, 0xBE, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, + 0xB8, 0xBD, 0xBB, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, + 0xAB, 0xB0, 0xAF, 0xFF, 0xB2, 0xB7, 0xB6, 0xFF, 0xB2, 0xB7, 0xB6, 0xFF, + 0xE1, 0xE1, 0xE1, 0xFF, 0xDE, 0xDE, 0xDE, 0xFF, 0xDA, 0xDA, 0xDA, 0xFF, + 0xD3, 0xD3, 0xD3, 0xFF, 0xCB, 0xCB, 0xCB, 0xFF, 0xBA, 0xBA, 0xBA, 0xFF, + 0xAB, 0xAD, 0xAC, 0xFF, 0xA0, 0xA3, 0xA2, 0xFF, 0x8E, 0x90, 0x8F, 0xFF, + 0x8A, 0x8D, 0x8C, 0xFF, 0x84, 0x89, 0x87, 0xFF, 0x82, 0x86, 0x85, 0xFF, + 0x81, 0x84, 0x80, 0xFF, 0x7D, 0x80, 0x7D, 0xFF, 0x7A, 0x7D, 0x79, 0xFF, + 0x74, 0x77, 0x74, 0xFF, 0x6A, 0x6D, 0x67, 0xFF, 0x6C, 0x6F, 0x69, 0xFF, + 0x66, 0x69, 0x64, 0xFF, 0x5A, 0x5E, 0x58, 0xFF, 0x4F, 0x50, 0x4B, 0xFF, + 0x41, 0x42, 0x3D, 0xFF, 0x31, 0x32, 0x2D, 0xFF, 0x23, 0x24, 0x1F, 0xFF, + 0x2C, 0x2D, 0x28, 0xFF, 0x23, 0x24, 0x1F, 0xFF, 0x1D, 0x1E, 0x19, 0xFF, + 0x1C, 0x1D, 0x18, 0xFF, 0x1C, 0x1B, 0x15, 0xFF, 0x1C, 0x1B, 0x15, 0xFF, + 0x1C, 0x1B, 0x15, 0xFF, 0x1E, 0x1C, 0x16, 0xFF, 0x23, 0x22, 0x1C, 0xFF, + 0x28, 0x27, 0x20, 0xFF, 0x2A, 0x29, 0x23, 0xFF, 0x2A, 0x29, 0x23, 0xFF, + 0x2A, 0x26, 0x20, 0xFF, 0x26, 0x22, 0x1D, 0xFF, 0x24, 0x20, 0x1B, 0xFF, + 0x21, 0x1E, 0x18, 0xFF, 0x19, 0x18, 0x11, 0xFF, 0x17, 0x15, 0x0F, 0xFF, + 0x1F, 0x1D, 0x17, 0xFF, 0x2F, 0x2E, 0x27, 0xFF, 0x2F, 0x2D, 0x29, 0xFF, + 0x2E, 0x2C, 0x28, 0xFF, 0x2C, 0x2A, 0x26, 0xFF, 0x27, 0x25, 0x21, 0xFF, + 0x2A, 0x29, 0x25, 0xFF, 0x33, 0x31, 0x2D, 0xFF, 0x34, 0x32, 0x2E, 0xFF, + 0x31, 0x30, 0x2C, 0xFF, 0x2A, 0x26, 0x22, 0xFF, 0x2B, 0x27, 0x24, 0xFF, + 0x2C, 0x28, 0x25, 0xFF, 0x31, 0x2D, 0x29, 0xFF, 0x44, 0x40, 0x3D, 0xFF, + 0x4B, 0x47, 0x44, 0xFF, 0x4A, 0x46, 0x43, 0xFF, 0x40, 0x3C, 0x39, 0xFF, + 0x2B, 0x26, 0x26, 0xFF, 0x21, 0x1D, 0x1C, 0xFF, 0x36, 0x32, 0x31, 0xFF, + 0x5D, 0x58, 0x58, 0xFF, 0x89, 0x87, 0x85, 0xFF, 0x97, 0x95, 0x93, 0xFF, + 0xA1, 0x9F, 0x9D, 0xFF, 0xA1, 0x9F, 0x9D, 0xFF, 0xA3, 0xA3, 0xA3, 0xFF, + 0xA8, 0xA8, 0xA8, 0xFF, 0xB1, 0xB1, 0xB1, 0xFF, 0xB7, 0xB7, 0xB7, 0xFF, + 0xB0, 0xB0, 0xB0, 0xFF, 0xB6, 0xB6, 0xB6, 0xFF, 0xBE, 0xBE, 0xBE, 0xFF, + 0xC4, 0xC4, 0xC4, 0xFF, 0xC4, 0xC4, 0xC4, 0xFF, 0xC6, 0xC6, 0xC6, 0xFF, + 0xC4, 0xC4, 0xC4, 0xFF, 0xC4, 0xC4, 0xC4, 0xFF, 0xBD, 0xC0, 0xBF, 0xFF, + 0xC8, 0xCA, 0xC9, 0xFF, 0xCE, 0xD0, 0xCF, 0xFF, 0xCA, 0xCD, 0xCC, 0xFF, + 0xC2, 0xC4, 0xC4, 0xFF, 0xC0, 0xC2, 0xC1, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, + 0xB8, 0xBD, 0xBB, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, + 0xBE, 0xC3, 0xC1, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, + 0xAF, 0xB4, 0xB2, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, + 0xD4, 0xD4, 0xD4, 0xFF, 0xDA, 0xDA, 0xDA, 0xFF, 0xDE, 0xDE, 0xDE, 0xFF, + 0xE0, 0xE0, 0xE0, 0xFF, 0xE1, 0xE1, 0xE1, 0xFF, 0xCD, 0xCD, 0xCD, 0xFF, + 0xAF, 0xB2, 0xB1, 0xFF, 0x92, 0x95, 0x94, 0xFF, 0x97, 0x99, 0x99, 0xFF, + 0x92, 0x95, 0x94, 0xFF, 0x8C, 0x91, 0x8F, 0xFF, 0x89, 0x8D, 0x8C, 0xFF, + 0x7C, 0x7F, 0x7C, 0xFF, 0x79, 0x7B, 0x78, 0xFF, 0x74, 0x77, 0x74, 0xFF, + 0x6B, 0x6D, 0x6A, 0xFF, 0x56, 0x59, 0x53, 0xFF, 0x5C, 0x5F, 0x59, 0xFF, + 0x5A, 0x5E, 0x58, 0xFF, 0x51, 0x54, 0x4F, 0xFF, 0x4B, 0x4B, 0x46, 0xFF, + 0x48, 0x49, 0x44, 0xFF, 0x47, 0x48, 0x43, 0xFF, 0x42, 0x43, 0x3E, 0xFF, + 0x32, 0x33, 0x2E, 0xFF, 0x25, 0x26, 0x21, 0xFF, 0x1B, 0x1C, 0x17, 0xFF, + 0x16, 0x17, 0x12, 0xFF, 0x1C, 0x1B, 0x15, 0xFF, 0x1C, 0x1B, 0x15, 0xFF, + 0x1C, 0x1B, 0x15, 0xFF, 0x1F, 0x1D, 0x17, 0xFF, 0x20, 0x1F, 0x18, 0xFF, + 0x23, 0x22, 0x1C, 0xFF, 0x28, 0x27, 0x20, 0xFF, 0x28, 0x27, 0x20, 0xFF, + 0x2C, 0x28, 0x23, 0xFF, 0x27, 0x24, 0x1E, 0xFF, 0x25, 0x21, 0x1C, 0xFF, + 0x23, 0x1F, 0x19, 0xFF, 0x1E, 0x1C, 0x16, 0xFF, 0x21, 0x20, 0x19, 0xFF, + 0x28, 0x27, 0x20, 0xFF, 0x2C, 0x2A, 0x24, 0xFF, 0x28, 0x26, 0x22, 0xFF, + 0x2F, 0x2D, 0x29, 0xFF, 0x2E, 0x2C, 0x28, 0xFF, 0x29, 0x28, 0x24, 0xFF, + 0x2D, 0x2B, 0x27, 0xFF, 0x2D, 0x2B, 0x27, 0xFF, 0x2E, 0x2C, 0x28, 0xFF, + 0x33, 0x31, 0x2D, 0xFF, 0x27, 0x23, 0x20, 0xFF, 0x28, 0x24, 0x21, 0xFF, + 0x34, 0x30, 0x2D, 0xFF, 0x43, 0x3F, 0x3C, 0xFF, 0x48, 0x44, 0x41, 0xFF, + 0x4A, 0x46, 0x43, 0xFF, 0x44, 0x40, 0x3D, 0xFF, 0x36, 0x32, 0x2F, 0xFF, + 0x1E, 0x1A, 0x19, 0xFF, 0x24, 0x1F, 0x1F, 0xFF, 0x43, 0x3F, 0x3E, 0xFF, + 0x6C, 0x68, 0x67, 0xFF, 0x83, 0x81, 0x7F, 0xFF, 0x94, 0x92, 0x91, 0xFF, + 0xA3, 0xA1, 0xA0, 0xFF, 0xA6, 0xA4, 0xA2, 0xFF, 0xA3, 0xA3, 0xA3, 0xFF, + 0xA8, 0xA8, 0xA8, 0xFF, 0xB1, 0xB1, 0xB1, 0xFF, 0xB7, 0xB7, 0xB7, 0xFF, + 0xA8, 0xA8, 0xA8, 0xFF, 0xAD, 0xAD, 0xAD, 0xFF, 0xB6, 0xB6, 0xB6, 0xFF, + 0xBB, 0xBB, 0xBB, 0xFF, 0xC4, 0xC4, 0xC4, 0xFF, 0xC5, 0xC5, 0xC5, 0xFF, + 0xC4, 0xC4, 0xC4, 0xFF, 0xC4, 0xC4, 0xC4, 0xFF, 0xBF, 0xC1, 0xC0, 0xFF, + 0xC7, 0xC9, 0xC8, 0xFF, 0xC8, 0xCA, 0xC9, 0xFF, 0xC3, 0xC6, 0xC5, 0xFF, + 0xBF, 0xC1, 0xC0, 0xFF, 0xBC, 0xBF, 0xBE, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, + 0xB5, 0xBA, 0xB8, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, + 0xBD, 0xC2, 0xC0, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, + 0xB5, 0xBA, 0xB8, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, + 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xFF, 0xDB, 0xDB, 0xDB, 0xFF, + 0xD6, 0xD6, 0xD6, 0xFF, 0xD9, 0xD9, 0xD9, 0xFF, 0xD7, 0xD7, 0xD7, 0xFF, + 0xBF, 0xC1, 0xC0, 0xFF, 0x9D, 0x9F, 0x9E, 0xFF, 0x8F, 0x91, 0x90, 0xFF, + 0x8A, 0x8D, 0x8C, 0xFF, 0x85, 0x8A, 0x88, 0xFF, 0x80, 0x85, 0x84, 0xFF, + 0x6F, 0x72, 0x71, 0xFF, 0x6C, 0x6F, 0x6B, 0xFF, 0x66, 0x69, 0x66, 0xFF, + 0x59, 0x5C, 0x59, 0xFF, 0x5E, 0x61, 0x5D, 0xFF, 0x66, 0x69, 0x64, 0xFF, + 0x67, 0x6A, 0x65, 0xFF, 0x61, 0x65, 0x5F, 0xFF, 0x54, 0x55, 0x50, 0xFF, + 0x4E, 0x4F, 0x4A, 0xFF, 0x48, 0x49, 0x44, 0xFF, 0x40, 0x41, 0x3C, 0xFF, + 0x36, 0x36, 0x32, 0xFF, 0x28, 0x28, 0x24, 0xFF, 0x1A, 0x1A, 0x16, 0xFF, + 0x13, 0x13, 0x0F, 0xFF, 0x1B, 0x1A, 0x14, 0xFF, 0x1B, 0x1A, 0x14, 0xFF, + 0x1B, 0x1A, 0x14, 0xFF, 0x1C, 0x1B, 0x15, 0xFF, 0x1E, 0x1C, 0x16, 0xFF, + 0x1F, 0x1D, 0x17, 0xFF, 0x23, 0x22, 0x1C, 0xFF, 0x27, 0x24, 0x1E, 0xFF, + 0x2C, 0x28, 0x23, 0xFF, 0x2A, 0x26, 0x20, 0xFF, 0x26, 0x22, 0x1D, 0xFF, + 0x24, 0x20, 0x1B, 0xFF, 0x2D, 0x29, 0x24, 0xFF, 0x2F, 0x2E, 0x27, 0xFF, + 0x29, 0x28, 0x22, 0xFF, 0x1E, 0x1C, 0x18, 0xFF, 0x23, 0x22, 0x1E, 0xFF, + 0x2F, 0x2D, 0x29, 0xFF, 0x31, 0x30, 0x2C, 0xFF, 0x2F, 0x2D, 0x29, 0xFF, + 0x2F, 0x2D, 0x29, 0xFF, 0x28, 0x26, 0x22, 0xFF, 0x29, 0x28, 0x24, 0xFF, + 0x32, 0x2E, 0x2B, 0xFF, 0x2B, 0x27, 0x24, 0xFF, 0x2E, 0x2A, 0x27, 0xFF, + 0x3D, 0x39, 0x36, 0xFF, 0x52, 0x4E, 0x4B, 0xFF, 0x3D, 0x39, 0x36, 0xFF, + 0x41, 0x3D, 0x3A, 0xFF, 0x3D, 0x39, 0x36, 0xFF, 0x35, 0x31, 0x2E, 0xFF, + 0x1A, 0x16, 0x15, 0xFF, 0x2B, 0x26, 0x26, 0xFF, 0x52, 0x4E, 0x4D, 0xFF, + 0x7B, 0x77, 0x76, 0xFF, 0x86, 0x84, 0x83, 0xFF, 0x9A, 0x98, 0x97, 0xFF, + 0xAD, 0xAB, 0xA9, 0xFF, 0xB1, 0xAF, 0xAE, 0xFF, 0xA5, 0xA5, 0xA5, 0xFF, + 0xA5, 0xA5, 0xA5, 0xFF, 0xA5, 0xA5, 0xA5, 0xFF, 0xA5, 0xA5, 0xA5, 0xFF, + 0xA2, 0xA2, 0xA2, 0xFF, 0xA8, 0xA8, 0xA8, 0xFF, 0xB1, 0xB1, 0xB1, 0xFF, + 0xB6, 0xB6, 0xB6, 0xFF, 0xC4, 0xC4, 0xC4, 0xFF, 0xC4, 0xC4, 0xC4, 0xFF, + 0xC4, 0xC4, 0xC4, 0xFF, 0xC4, 0xC4, 0xC4, 0xFF, 0xC0, 0xC2, 0xC1, 0xFF, + 0xC6, 0xC8, 0xC7, 0xFF, 0xC4, 0xC7, 0xC6, 0xFF, 0xBD, 0xC0, 0xBF, 0xFF, + 0xBC, 0xBF, 0xBE, 0xFF, 0xBA, 0xBC, 0xBB, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, + 0xB2, 0xB7, 0xB6, 0xFF, 0xAA, 0xAF, 0xAD, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, + 0xB5, 0xBA, 0xB8, 0xFF, 0xC0, 0xC5, 0xC4, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, + 0xB8, 0xBD, 0xBB, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, 0xCE, 0xD3, 0xD2, 0xFF, + 0xE1, 0xE0, 0xE3, 0xFF, 0xE3, 0xE3, 0xE5, 0xFF, 0xE5, 0xE5, 0xE7, 0xFF, + 0xE3, 0xE3, 0xE5, 0xFF, 0xDE, 0xDE, 0xE0, 0xFF, 0xD5, 0xD5, 0xD7, 0xFF, + 0xB8, 0xBA, 0xBB, 0xFF, 0x9A, 0x9C, 0x9E, 0xFF, 0x7E, 0x82, 0x83, 0xFF, + 0x78, 0x7D, 0x7D, 0xFF, 0x76, 0x7A, 0x7B, 0xFF, 0x6F, 0x73, 0x74, 0xFF, + 0x5D, 0x62, 0x61, 0xFF, 0x64, 0x69, 0x68, 0xFF, 0x64, 0x69, 0x68, 0xFF, + 0x5D, 0x62, 0x61, 0xFF, 0x6D, 0x70, 0x6D, 0xFF, 0x67, 0x6A, 0x67, 0xFF, + 0x6D, 0x70, 0x6D, 0xFF, 0x78, 0x7A, 0x77, 0xFF, 0x68, 0x68, 0x66, 0xFF, + 0x4B, 0x4B, 0x48, 0xFF, 0x3E, 0x3E, 0x3C, 0xFF, 0x3E, 0x3E, 0x3C, 0xFF, + 0x2D, 0x2E, 0x29, 0xFF, 0x28, 0x28, 0x24, 0xFF, 0x1C, 0x1D, 0x18, 0xFF, + 0x0F, 0x10, 0x0B, 0xFF, 0x19, 0x18, 0x11, 0xFF, 0x19, 0x18, 0x11, 0xFF, + 0x19, 0x18, 0x11, 0xFF, 0x19, 0x18, 0x11, 0xFF, 0x19, 0x16, 0x10, 0xFF, + 0x19, 0x16, 0x10, 0xFF, 0x1C, 0x18, 0x12, 0xFF, 0x1D, 0x19, 0x14, 0xFF, + 0x2B, 0x25, 0x22, 0xFF, 0x2E, 0x27, 0x25, 0xFF, 0x29, 0x22, 0x20, 0xFF, + 0x23, 0x1D, 0x1A, 0xFF, 0x3B, 0x37, 0x34, 0xFF, 0x35, 0x31, 0x2E, 0xFF, + 0x27, 0x23, 0x20, 0xFF, 0x1C, 0x18, 0x14, 0xFF, 0x23, 0x1E, 0x1D, 0xFF, + 0x3B, 0x37, 0x36, 0xFF, 0x40, 0x3B, 0x3B, 0xFF, 0x33, 0x2E, 0x2E, 0xFF, + 0x32, 0x2D, 0x2D, 0xFF, 0x2D, 0x29, 0x28, 0xFF, 0x32, 0x2D, 0x2D, 0xFF, + 0x3D, 0x39, 0x38, 0xFF, 0x40, 0x39, 0x39, 0xFF, 0x40, 0x39, 0x39, 0xFF, + 0x3F, 0x38, 0x38, 0xFF, 0x3F, 0x38, 0x38, 0xFF, 0x31, 0x2A, 0x2A, 0xFF, + 0x3F, 0x38, 0x38, 0xFF, 0x3C, 0x38, 0x37, 0xFF, 0x2D, 0x29, 0x28, 0xFF, + 0x22, 0x1B, 0x1B, 0xFF, 0x3C, 0x35, 0x35, 0xFF, 0x72, 0x6D, 0x6D, 0xFF, + 0x96, 0x91, 0x91, 0xFF, 0x9E, 0x99, 0x9B, 0xFF, 0xA4, 0x9F, 0xA1, 0xFF, + 0xA8, 0xA6, 0xA7, 0xFF, 0xA9, 0xA7, 0xA8, 0xFF, 0xA2, 0xA0, 0xA1, 0xFF, + 0x9B, 0x99, 0x9A, 0xFF, 0x9E, 0x9E, 0x9E, 0xFF, 0xAA, 0xAA, 0xAA, 0xFF, + 0xB4, 0xB4, 0xB4, 0xFF, 0xA5, 0xA5, 0xA5, 0xFF, 0x9D, 0x9D, 0x9D, 0xFF, + 0x9D, 0x9D, 0x9D, 0xFF, 0xAF, 0xAF, 0xAF, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, + 0xC7, 0xC7, 0xC7, 0xFF, 0xC6, 0xC6, 0xC6, 0xFF, 0xCA, 0xCD, 0xCC, 0xFF, + 0xC1, 0xC3, 0xC2, 0xFF, 0xBD, 0xC0, 0xBF, 0xFF, 0xC0, 0xC2, 0xC1, 0xFF, + 0xC8, 0xCA, 0xC9, 0xFF, 0xC8, 0xCA, 0xC9, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, + 0xAB, 0xB0, 0xAF, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, + 0xB1, 0xB8, 0xB6, 0xFF, 0xBA, 0xC1, 0xBF, 0xFF, 0xC7, 0xCE, 0xCC, 0xFF, + 0xBB, 0xC3, 0xC0, 0xFF, 0xC3, 0xCB, 0xC8, 0xFF, 0xC3, 0xCB, 0xC8, 0xFF, + 0xDC, 0xDC, 0xDE, 0xFF, 0xDD, 0xDD, 0xDF, 0xFF, 0xDD, 0xDD, 0xDF, 0xFF, + 0xDB, 0xDA, 0xDD, 0xFF, 0xC9, 0xC9, 0xCB, 0xFF, 0xBD, 0xBC, 0xBF, 0xFF, + 0xA1, 0xA3, 0xA5, 0xFF, 0x8B, 0x8D, 0x8F, 0xFF, 0x84, 0x88, 0x89, 0xFF, + 0x7B, 0x7F, 0x80, 0xFF, 0x74, 0x7B, 0x7B, 0xFF, 0x6B, 0x72, 0x72, 0xFF, + 0x67, 0x6C, 0x6A, 0xFF, 0x6F, 0x74, 0x72, 0xFF, 0x6F, 0x74, 0x72, 0xFF, + 0x67, 0x6C, 0x6A, 0xFF, 0x5E, 0x61, 0x5D, 0xFF, 0x5A, 0x5D, 0x5A, 0xFF, + 0x66, 0x69, 0x66, 0xFF, 0x76, 0x79, 0x76, 0xFF, 0x73, 0x74, 0x71, 0xFF, + 0x5A, 0x5A, 0x58, 0xFF, 0x41, 0x42, 0x3F, 0xFF, 0x36, 0x36, 0x34, 0xFF, + 0x33, 0x34, 0x2F, 0xFF, 0x2D, 0x2E, 0x29, 0xFF, 0x22, 0x23, 0x1E, 0xFF, + 0x15, 0x16, 0x11, 0xFF, 0x1A, 0x19, 0x12, 0xFF, 0x1A, 0x19, 0x12, 0xFF, + 0x1A, 0x19, 0x12, 0xFF, 0x1A, 0x19, 0x12, 0xFF, 0x16, 0x12, 0x0D, 0xFF, + 0x17, 0x13, 0x0E, 0xFF, 0x18, 0x14, 0x0F, 0xFF, 0x19, 0x16, 0x10, 0xFF, + 0x1E, 0x18, 0x16, 0xFF, 0x24, 0x1E, 0x1B, 0xFF, 0x28, 0x21, 0x1F, 0xFF, + 0x27, 0x20, 0x1E, 0xFF, 0x33, 0x2F, 0x2C, 0xFF, 0x2F, 0x2B, 0x28, 0xFF, + 0x27, 0x23, 0x20, 0xFF, 0x1F, 0x1B, 0x18, 0xFF, 0x2F, 0x2B, 0x2A, 0xFF, + 0x41, 0x3C, 0x3C, 0xFF, 0x42, 0x3E, 0x3D, 0xFF, 0x38, 0x33, 0x32, 0xFF, + 0x3D, 0x39, 0x38, 0xFF, 0x41, 0x3C, 0x3C, 0xFF, 0x49, 0x45, 0x44, 0xFF, + 0x52, 0x4E, 0x4D, 0xFF, 0x4D, 0x46, 0x46, 0xFF, 0x45, 0x3E, 0x3E, 0xFF, + 0x39, 0x32, 0x32, 0xFF, 0x30, 0x29, 0x29, 0xFF, 0x35, 0x2E, 0x2E, 0xFF, + 0x3A, 0x34, 0x34, 0xFF, 0x34, 0x30, 0x2F, 0xFF, 0x26, 0x22, 0x21, 0xFF, + 0x28, 0x21, 0x21, 0xFF, 0x4C, 0x45, 0x45, 0xFF, 0x7F, 0x7A, 0x79, 0xFF, + 0x98, 0x94, 0x93, 0xFF, 0xA5, 0xA0, 0xA2, 0xFF, 0x9E, 0x99, 0x9B, 0xFF, + 0x97, 0x94, 0x95, 0xFF, 0x95, 0x93, 0x94, 0xFF, 0x98, 0x95, 0x96, 0xFF, + 0x9C, 0x9A, 0x9B, 0xFF, 0xA8, 0xA8, 0xA8, 0xFF, 0xB4, 0xB4, 0xB4, 0xFF, + 0xBF, 0xBF, 0xBF, 0xFF, 0xAD, 0xAD, 0xAD, 0xFF, 0x9E, 0x9E, 0x9E, 0xFF, + 0x9C, 0x9C, 0x9C, 0xFF, 0xA3, 0xA3, 0xA3, 0xFF, 0xB4, 0xB4, 0xB4, 0xFF, + 0xC4, 0xC4, 0xC4, 0xFF, 0xC6, 0xC6, 0xC6, 0xFF, 0xC3, 0xC6, 0xC5, 0xFF, + 0xBC, 0xBF, 0xBE, 0xFF, 0xBA, 0xBC, 0xBB, 0xFF, 0xC0, 0xC2, 0xC1, 0xFF, + 0xC9, 0xCB, 0xCB, 0xFF, 0xC7, 0xC9, 0xC8, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, + 0xB4, 0xB8, 0xB7, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, 0xC0, 0xC5, 0xC4, 0xFF, + 0xB4, 0xBC, 0xB9, 0xFF, 0xC0, 0xC7, 0xC5, 0xFF, 0xC7, 0xCE, 0xCC, 0xFF, + 0xBB, 0xC3, 0xC0, 0xFF, 0xC3, 0xCB, 0xC8, 0xFF, 0xC3, 0xCB, 0xC8, 0xFF, + 0xDF, 0xE1, 0xE3, 0xFF, 0xD2, 0xD4, 0xD6, 0xFF, 0xBD, 0xBF, 0xC1, 0xFF, + 0xAB, 0xAD, 0xAE, 0xFF, 0x9A, 0x9C, 0x9E, 0xFF, 0x9D, 0x9F, 0xA0, 0xFF, + 0xA6, 0xA8, 0xAA, 0xFF, 0xAF, 0xB3, 0xB4, 0xFF, 0x9F, 0xA3, 0xA2, 0xFF, + 0x94, 0x99, 0x97, 0xFF, 0x88, 0x8F, 0x8D, 0xFF, 0x7B, 0x83, 0x80, 0xFF, + 0x6B, 0x70, 0x6F, 0xFF, 0x74, 0x79, 0x75, 0xFF, 0x74, 0x79, 0x75, 0xFF, + 0x6B, 0x71, 0x6D, 0xFF, 0x5C, 0x61, 0x5D, 0xFF, 0x5F, 0x64, 0x60, 0xFF, + 0x63, 0x68, 0x64, 0xFF, 0x6A, 0x6C, 0x69, 0xFF, 0x65, 0x68, 0x64, 0xFF, + 0x63, 0x65, 0x62, 0xFF, 0x4F, 0x52, 0x4E, 0xFF, 0x37, 0x3A, 0x37, 0xFF, + 0x3B, 0x3C, 0x37, 0xFF, 0x36, 0x36, 0x32, 0xFF, 0x2A, 0x2B, 0x26, 0xFF, + 0x1D, 0x1E, 0x19, 0xFF, 0x1F, 0x1D, 0x17, 0xFF, 0x1F, 0x1D, 0x17, 0xFF, + 0x1F, 0x1D, 0x17, 0xFF, 0x1F, 0x1D, 0x17, 0xFF, 0x19, 0x16, 0x10, 0xFF, + 0x18, 0x14, 0x0F, 0xFF, 0x16, 0x12, 0x0D, 0xFF, 0x17, 0x13, 0x0E, 0xFF, + 0x19, 0x12, 0x10, 0xFF, 0x20, 0x19, 0x17, 0xFF, 0x26, 0x22, 0x1F, 0xFF, + 0x2C, 0x28, 0x25, 0xFF, 0x38, 0x34, 0x30, 0xFF, 0x34, 0x30, 0x2D, 0xFF, + 0x2A, 0x29, 0x25, 0xFF, 0x22, 0x21, 0x1D, 0xFF, 0x2F, 0x2D, 0x2B, 0xFF, + 0x3E, 0x3C, 0x3B, 0xFF, 0x42, 0x40, 0x3E, 0xFF, 0x3E, 0x3C, 0x3B, 0xFF, + 0x3D, 0x3B, 0x39, 0xFF, 0x44, 0x42, 0x40, 0xFF, 0x49, 0x47, 0x45, 0xFF, + 0x4B, 0x47, 0x46, 0xFF, 0x3D, 0x39, 0x38, 0xFF, 0x38, 0x33, 0x32, 0xFF, + 0x30, 0x29, 0x29, 0xFF, 0x2A, 0x23, 0x23, 0xFF, 0x37, 0x30, 0x30, 0xFF, + 0x39, 0x32, 0x32, 0xFF, 0x35, 0x31, 0x30, 0xFF, 0x32, 0x2D, 0x2D, 0xFF, + 0x40, 0x39, 0x39, 0xFF, 0x69, 0x62, 0x62, 0xFF, 0x8F, 0x8A, 0x8A, 0xFF, + 0x9B, 0x96, 0x95, 0xFF, 0xA1, 0x9F, 0xA0, 0xFF, 0x8E, 0x8C, 0x8D, 0xFF, + 0x84, 0x82, 0x82, 0xFF, 0x87, 0x87, 0x87, 0xFF, 0x99, 0x97, 0x97, 0xFF, + 0xA6, 0xA3, 0xA4, 0xFF, 0xB0, 0xB0, 0xB0, 0xFF, 0xB4, 0xB4, 0xB4, 0xFF, + 0xB6, 0xB6, 0xB6, 0xFF, 0xA7, 0xA6, 0xA7, 0xFF, 0x9D, 0x9D, 0x9D, 0xFF, + 0x9D, 0x9D, 0x9D, 0xFF, 0xA1, 0xA1, 0xA1, 0xFF, 0xAF, 0xAF, 0xAF, 0xFF, + 0xB9, 0xB9, 0xB9, 0xFF, 0xB8, 0xB8, 0xB8, 0xFF, 0xC3, 0xC6, 0xC5, 0xFF, + 0xBD, 0xC0, 0xBF, 0xFF, 0xC0, 0xC2, 0xC1, 0xFF, 0xC7, 0xC9, 0xC8, 0xFF, + 0xCD, 0xCF, 0xCE, 0xFF, 0xC6, 0xC8, 0xC7, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, + 0xBE, 0xC3, 0xC1, 0xFF, 0xC0, 0xC5, 0xC4, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, + 0xB9, 0xC0, 0xBE, 0xFF, 0xC7, 0xCE, 0xCC, 0xFF, 0xC7, 0xCE, 0xCC, 0xFF, + 0xBB, 0xC3, 0xC0, 0xFF, 0xC3, 0xCB, 0xC8, 0xFF, 0xC3, 0xCB, 0xC8, 0xFF, + 0xA4, 0xA6, 0xA7, 0xFF, 0xAC, 0xAE, 0xB0, 0xFF, 0xB6, 0xB8, 0xBA, 0xFF, + 0xBB, 0xBD, 0xBF, 0xFF, 0xB8, 0xBA, 0xBB, 0xFF, 0xAB, 0xAD, 0xAE, 0xFF, + 0xA4, 0xA9, 0xAA, 0xFF, 0xAA, 0xAF, 0xB0, 0xFF, 0xA4, 0xA9, 0xA8, 0xFF, + 0x97, 0x9B, 0x9A, 0xFF, 0x88, 0x8F, 0x8D, 0xFF, 0x7A, 0x81, 0x7F, 0xFF, + 0x67, 0x6C, 0x68, 0xFF, 0x6F, 0x74, 0x70, 0xFF, 0x6F, 0x74, 0x70, 0xFF, + 0x67, 0x6C, 0x68, 0xFF, 0x4F, 0x55, 0x51, 0xFF, 0x56, 0x5C, 0x58, 0xFF, + 0x4F, 0x55, 0x51, 0xFF, 0x40, 0x46, 0x42, 0xFF, 0x5D, 0x60, 0x5C, 0xFF, + 0x7B, 0x7E, 0x7B, 0xFF, 0x7E, 0x81, 0x7E, 0xFF, 0x6B, 0x6D, 0x6A, 0xFF, + 0x41, 0x42, 0x3D, 0xFF, 0x3B, 0x3C, 0x37, 0xFF, 0x30, 0x31, 0x2C, 0xFF, + 0x23, 0x24, 0x1F, 0xFF, 0x21, 0x20, 0x19, 0xFF, 0x21, 0x20, 0x19, 0xFF, + 0x21, 0x20, 0x19, 0xFF, 0x22, 0x21, 0x1B, 0xFF, 0x1D, 0x19, 0x14, 0xFF, + 0x1C, 0x18, 0x12, 0xFF, 0x19, 0x16, 0x10, 0xFF, 0x18, 0x14, 0x0F, 0xFF, + 0x1B, 0x14, 0x12, 0xFF, 0x1E, 0x18, 0x16, 0xFF, 0x26, 0x22, 0x1F, 0xFF, + 0x2F, 0x2B, 0x28, 0xFF, 0x43, 0x3F, 0x3C, 0xFF, 0x3D, 0x39, 0x36, 0xFF, + 0x2E, 0x2C, 0x28, 0xFF, 0x22, 0x21, 0x1D, 0xFF, 0x22, 0x20, 0x1F, 0xFF, + 0x33, 0x30, 0x2F, 0xFF, 0x3D, 0x3B, 0x39, 0xFF, 0x42, 0x40, 0x3E, 0xFF, + 0x33, 0x30, 0x2F, 0xFF, 0x38, 0x36, 0x35, 0xFF, 0x34, 0x32, 0x30, 0xFF, + 0x28, 0x26, 0x24, 0xFF, 0x1C, 0x17, 0x16, 0xFF, 0x21, 0x1D, 0x1C, 0xFF, + 0x2A, 0x25, 0x24, 0xFF, 0x2E, 0x2A, 0x29, 0xFF, 0x35, 0x31, 0x30, 0xFF, + 0x39, 0x34, 0x34, 0xFF, 0x3F, 0x3D, 0x3C, 0xFF, 0x47, 0x45, 0x44, 0xFF, + 0x68, 0x64, 0x63, 0xFF, 0x89, 0x85, 0x84, 0xFF, 0x9A, 0x98, 0x97, 0xFF, + 0x98, 0x96, 0x94, 0xFF, 0x95, 0x93, 0x94, 0xFF, 0x81, 0x7E, 0x7F, 0xFF, + 0x79, 0x79, 0x79, 0xFF, 0x87, 0x87, 0x87, 0xFF, 0xA2, 0xA0, 0xA1, 0xFF, + 0xAF, 0xAD, 0xAD, 0xFF, 0xB2, 0xB2, 0xB2, 0xFF, 0xAB, 0xAB, 0xAB, 0xFF, + 0x9D, 0x9D, 0x9D, 0xFF, 0x97, 0x97, 0x97, 0xFF, 0x99, 0x99, 0x99, 0xFF, + 0xA1, 0xA1, 0xA1, 0xFF, 0xA8, 0xA8, 0xA8, 0xFF, 0xAF, 0xAF, 0xAF, 0xFF, + 0xAD, 0xAD, 0xAD, 0xFF, 0xA5, 0xA5, 0xA5, 0xFF, 0xC9, 0xCB, 0xCB, 0xFF, + 0xC6, 0xC8, 0xC7, 0xFF, 0xCA, 0xCD, 0xCC, 0xFF, 0xD3, 0xD6, 0xD5, 0xFF, + 0xCE, 0xD0, 0xCF, 0xFF, 0xC4, 0xC7, 0xC6, 0xFF, 0xC0, 0xC5, 0xC4, 0xFF, + 0xC6, 0xCB, 0xC9, 0xFF, 0xC0, 0xC5, 0xC4, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, + 0xBE, 0xC5, 0xC2, 0xFF, 0xCD, 0xD4, 0xD2, 0xFF, 0xC7, 0xCE, 0xCC, 0xFF, + 0xBB, 0xC3, 0xC0, 0xFF, 0xC3, 0xCB, 0xC8, 0xFF, 0xC3, 0xCB, 0xC8, 0xFF, + 0xBE, 0xC3, 0xC3, 0xFF, 0xB4, 0xB8, 0xB9, 0xFF, 0xB1, 0xB6, 0xB6, 0xFF, + 0xB7, 0xBC, 0xBC, 0xFF, 0xBB, 0xBF, 0xC0, 0xFF, 0xA8, 0xAC, 0xAD, 0xFF, + 0xA4, 0xA9, 0xA8, 0xFF, 0xB4, 0xB8, 0xB7, 0xFF, 0xA1, 0xA8, 0xA5, 0xFF, + 0xAC, 0xB3, 0xB1, 0xFF, 0xA6, 0xAE, 0xA9, 0xFF, 0x8F, 0x97, 0x92, 0xFF, + 0x69, 0x70, 0x6D, 0xFF, 0x5E, 0x65, 0x63, 0xFF, 0x5A, 0x61, 0x5E, 0xFF, + 0x5D, 0x64, 0x62, 0xFF, 0x67, 0x6C, 0x6A, 0xFF, 0x62, 0x67, 0x65, 0xFF, + 0x5B, 0x60, 0x5E, 0xFF, 0x56, 0x5B, 0x5A, 0xFF, 0x5D, 0x5F, 0x5E, 0xFF, + 0x64, 0x66, 0x65, 0xFF, 0x7A, 0x7D, 0x79, 0xFF, 0x87, 0x89, 0x86, 0xFF, + 0x61, 0x64, 0x61, 0xFF, 0x40, 0x42, 0x3F, 0xFF, 0x2D, 0x30, 0x2B, 0xFF, + 0x24, 0x25, 0x20, 0xFF, 0x15, 0x14, 0x10, 0xFF, 0x21, 0x1F, 0x1B, 0xFF, + 0x29, 0x28, 0x24, 0xFF, 0x26, 0x24, 0x20, 0xFF, 0x21, 0x1F, 0x1B, 0xFF, + 0x1F, 0x1D, 0x19, 0xFF, 0x1C, 0x1B, 0x17, 0xFF, 0x1C, 0x18, 0x14, 0xFF, + 0x27, 0x23, 0x20, 0xFF, 0x2A, 0x26, 0x22, 0xFF, 0x25, 0x21, 0x1E, 0xFF, + 0x21, 0x1D, 0x1A, 0xFF, 0x2D, 0x2B, 0x27, 0xFF, 0x23, 0x22, 0x1E, 0xFF, + 0x29, 0x28, 0x24, 0xFF, 0x2A, 0x29, 0x25, 0xFF, 0x21, 0x1F, 0x1D, 0xFF, + 0x25, 0x22, 0x21, 0xFF, 0x29, 0x27, 0x26, 0xFF, 0x2D, 0x2B, 0x29, 0xFF, + 0x1B, 0x19, 0x18, 0xFF, 0x1B, 0x19, 0x18, 0xFF, 0x17, 0x15, 0x13, 0xFF, + 0x0E, 0x0C, 0x0B, 0xFF, 0x17, 0x15, 0x13, 0xFF, 0x1E, 0x1C, 0x1A, 0xFF, + 0x26, 0x27, 0x24, 0xFF, 0x2D, 0x2E, 0x2B, 0xFF, 0x33, 0x34, 0x31, 0xFF, + 0x32, 0x32, 0x30, 0xFF, 0x4B, 0x4E, 0x4B, 0xFF, 0x68, 0x6B, 0x68, 0xFF, + 0x78, 0x78, 0x76, 0xFF, 0x8E, 0x8E, 0x8C, 0xFF, 0x9B, 0x9B, 0x99, 0xFF, + 0x97, 0x98, 0x95, 0xFF, 0x85, 0x85, 0x85, 0xFF, 0x80, 0x80, 0x80, 0xFF, + 0x85, 0x85, 0x85, 0xFF, 0x8E, 0x8E, 0x8E, 0xFF, 0x9B, 0x9B, 0x9B, 0xFF, + 0x9A, 0x9A, 0x9A, 0xFF, 0x99, 0x99, 0x99, 0xFF, 0x97, 0x97, 0x97, 0xFF, + 0x8E, 0x8E, 0x8E, 0xFF, 0x8C, 0x8C, 0x8C, 0xFF, 0xA2, 0xA2, 0xA2, 0xFF, + 0xA1, 0xA1, 0xA1, 0xFF, 0xA2, 0xA2, 0xA2, 0xFF, 0xA8, 0xA8, 0xA8, 0xFF, + 0xAD, 0xAD, 0xAD, 0xFF, 0xAF, 0xAF, 0xAF, 0xFF, 0xBC, 0xBF, 0xBE, 0xFF, + 0xCD, 0xCF, 0xCE, 0xFF, 0xD0, 0xD2, 0xD2, 0xFF, 0xCE, 0xD0, 0xCF, 0xFF, + 0xC0, 0xC2, 0xC1, 0xFF, 0xBB, 0xBD, 0xBD, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, + 0xC6, 0xCB, 0xC9, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, + 0xC1, 0xC8, 0xC6, 0xFF, 0xC1, 0xC8, 0xC6, 0xFF, 0xC3, 0xCB, 0xC8, 0xFF, + 0xBE, 0xC5, 0xC2, 0xFF, 0xBF, 0xC6, 0xC4, 0xFF, 0xC7, 0xCE, 0xCC, 0xFF, + 0xB4, 0xB8, 0xB9, 0xFF, 0xB5, 0xB9, 0xBA, 0xFF, 0xBC, 0xC0, 0xC1, 0xFF, + 0xC2, 0xC6, 0xC7, 0xFF, 0xB9, 0xBE, 0xBF, 0xFF, 0xA9, 0xAE, 0xAE, 0xFF, + 0xA3, 0xA8, 0xA7, 0xFF, 0xAB, 0xB0, 0xAF, 0xFF, 0xB0, 0xB7, 0xB4, 0xFF, + 0xA4, 0xAB, 0xA9, 0xFF, 0x98, 0xA0, 0x9B, 0xFF, 0x94, 0x9B, 0x97, 0xFF, + 0x81, 0x88, 0x86, 0xFF, 0x79, 0x80, 0x7E, 0xFF, 0x78, 0x7F, 0x7D, 0xFF, + 0x80, 0x87, 0x85, 0xFF, 0x74, 0x78, 0x77, 0xFF, 0x6D, 0x71, 0x70, 0xFF, + 0x67, 0x6C, 0x6A, 0xFF, 0x62, 0x67, 0x65, 0xFF, 0x5C, 0x5E, 0x5D, 0xFF, + 0x5D, 0x5F, 0x5E, 0xFF, 0x6C, 0x6F, 0x6B, 0xFF, 0x7A, 0x7D, 0x79, 0xFF, + 0x7D, 0x80, 0x7D, 0xFF, 0x67, 0x6A, 0x67, 0xFF, 0x43, 0x46, 0x41, 0xFF, + 0x2D, 0x2E, 0x29, 0xFF, 0x17, 0x15, 0x11, 0xFF, 0x22, 0x21, 0x1D, 0xFF, + 0x29, 0x28, 0x24, 0xFF, 0x27, 0x25, 0x21, 0xFF, 0x28, 0x26, 0x22, 0xFF, + 0x27, 0x25, 0x21, 0xFF, 0x26, 0x24, 0x20, 0xFF, 0x26, 0x24, 0x20, 0xFF, + 0x33, 0x2F, 0x2C, 0xFF, 0x2C, 0x28, 0x25, 0xFF, 0x26, 0x22, 0x1F, 0xFF, + 0x21, 0x1D, 0x1A, 0xFF, 0x1C, 0x1B, 0x17, 0xFF, 0x14, 0x13, 0x0F, 0xFF, + 0x1A, 0x18, 0x14, 0xFF, 0x1A, 0x18, 0x14, 0xFF, 0x14, 0x12, 0x11, 0xFF, + 0x18, 0x16, 0x14, 0xFF, 0x1C, 0x1A, 0x19, 0xFF, 0x20, 0x1E, 0x1C, 0xFF, + 0x11, 0x0F, 0x0D, 0xFF, 0x14, 0x12, 0x11, 0xFF, 0x13, 0x11, 0x0F, 0xFF, + 0x0E, 0x0C, 0x0B, 0xFF, 0x14, 0x12, 0x11, 0xFF, 0x1A, 0x1A, 0x18, 0xFF, + 0x23, 0x25, 0x22, 0xFF, 0x29, 0x2C, 0x29, 0xFF, 0x2E, 0x31, 0x2E, 0xFF, + 0x44, 0x47, 0x44, 0xFF, 0x69, 0x6E, 0x6A, 0xFF, 0x7F, 0x84, 0x80, 0xFF, + 0x81, 0x84, 0x80, 0xFF, 0x85, 0x88, 0x85, 0xFF, 0x8C, 0x8F, 0x8C, 0xFF, + 0x92, 0x95, 0x92, 0xFF, 0x7A, 0x7A, 0x7A, 0xFF, 0x76, 0x76, 0x76, 0xFF, + 0x7A, 0x7A, 0x7A, 0xFF, 0x85, 0x85, 0x85, 0xFF, 0x8F, 0x8F, 0x8F, 0xFF, + 0x90, 0x90, 0x90, 0xFF, 0x93, 0x93, 0x93, 0xFF, 0x94, 0x94, 0x94, 0xFF, + 0x8F, 0x8F, 0x8F, 0xFF, 0x96, 0x96, 0x96, 0xFF, 0xAA, 0xAA, 0xAA, 0xFF, + 0xB1, 0xB1, 0xB1, 0xFF, 0xA4, 0xA4, 0xA4, 0xFF, 0xA0, 0xA0, 0xA0, 0xFF, + 0xA3, 0xA3, 0xA3, 0xFF, 0xA7, 0xA6, 0xA7, 0xFF, 0xBA, 0xBC, 0xBB, 0xFF, + 0xCA, 0xCD, 0xCC, 0xFF, 0xCE, 0xD0, 0xCF, 0xFF, 0xCB, 0xCE, 0xCD, 0xFF, + 0xD1, 0xD4, 0xD3, 0xFF, 0xC8, 0xCA, 0xC9, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, + 0xC7, 0xCC, 0xCB, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, + 0xC5, 0xCC, 0xC9, 0xFF, 0xC5, 0xCC, 0xC9, 0xFF, 0xBF, 0xC6, 0xC4, 0xFF, + 0xBB, 0xC3, 0xC0, 0xFF, 0xC1, 0xC8, 0xC6, 0xFF, 0xCC, 0xD3, 0xD0, 0xFF, + 0xB2, 0xB9, 0xB9, 0xFF, 0xBB, 0xC2, 0xC2, 0xFF, 0xC2, 0xC9, 0xC9, 0xFF, + 0xC0, 0xC7, 0xC7, 0xFF, 0xB4, 0xBB, 0xBB, 0xFF, 0xAA, 0xB1, 0xB1, 0xFF, + 0x9F, 0xA7, 0xA4, 0xFF, 0x9C, 0xA3, 0xA1, 0xFF, 0x98, 0xA0, 0x9B, 0xFF, + 0x8E, 0x96, 0x91, 0xFF, 0x91, 0x99, 0x94, 0xFF, 0xA1, 0xA8, 0xA3, 0xFF, + 0x9E, 0xA6, 0xA1, 0xFF, 0x8C, 0x93, 0x8E, 0xFF, 0x7B, 0x83, 0x7E, 0xFF, + 0x78, 0x7F, 0x7B, 0xFF, 0x80, 0x87, 0x85, 0xFF, 0x79, 0x80, 0x7E, 0xFF, + 0x72, 0x79, 0x77, 0xFF, 0x6D, 0x71, 0x70, 0xFF, 0x68, 0x6D, 0x6B, 0xFF, + 0x62, 0x67, 0x65, 0xFF, 0x5B, 0x60, 0x5C, 0xFF, 0x62, 0x67, 0x63, 0xFF, + 0x83, 0x86, 0x83, 0xFF, 0x8B, 0x8E, 0x8B, 0xFF, 0x6C, 0x6F, 0x69, 0xFF, + 0x3D, 0x3D, 0x39, 0xFF, 0x1A, 0x18, 0x14, 0xFF, 0x23, 0x22, 0x1E, 0xFF, + 0x29, 0x28, 0x24, 0xFF, 0x27, 0x25, 0x21, 0xFF, 0x2A, 0x29, 0x25, 0xFF, + 0x2C, 0x2A, 0x26, 0xFF, 0x2D, 0x2B, 0x27, 0xFF, 0x2E, 0x2C, 0x28, 0xFF, + 0x39, 0x35, 0x32, 0xFF, 0x2A, 0x26, 0x22, 0xFF, 0x1B, 0x1A, 0x16, 0xFF, + 0x1A, 0x18, 0x14, 0xFF, 0x14, 0x13, 0x0F, 0xFF, 0x0C, 0x0A, 0x06, 0xFF, + 0x10, 0x11, 0x0C, 0xFF, 0x10, 0x11, 0x0C, 0xFF, 0x0A, 0x0B, 0x08, 0xFF, + 0x0E, 0x0E, 0x0C, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x16, 0x17, 0x14, 0xFF, + 0x0C, 0x0C, 0x0A, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x0D, 0x0D, 0x0B, 0xFF, 0x0F, 0x10, 0x0D, 0xFF, 0x16, 0x17, 0x14, 0xFF, + 0x1F, 0x22, 0x1F, 0xFF, 0x27, 0x2A, 0x27, 0xFF, 0x36, 0x39, 0x36, 0xFF, + 0x4C, 0x4F, 0x4C, 0xFF, 0x6B, 0x71, 0x6D, 0xFF, 0x85, 0x8A, 0x86, 0xFF, + 0x7C, 0x7F, 0x7C, 0xFF, 0x7C, 0x7F, 0x7C, 0xFF, 0x7B, 0x7E, 0x7B, 0xFF, + 0x7B, 0x7E, 0x7B, 0xFF, 0x75, 0x78, 0x77, 0xFF, 0x6F, 0x72, 0x71, 0xFF, + 0x74, 0x76, 0x76, 0xFF, 0x7E, 0x81, 0x80, 0xFF, 0x89, 0x89, 0x89, 0xFF, + 0x8E, 0x8E, 0x8E, 0xFF, 0x95, 0x95, 0x95, 0xFF, 0x9A, 0x9A, 0x9A, 0xFF, + 0xA9, 0xA9, 0xA9, 0xFF, 0xB4, 0xB4, 0xB4, 0xFF, 0xB9, 0xB9, 0xB9, 0xFF, + 0xC4, 0xC4, 0xC4, 0xFF, 0xC4, 0xC4, 0xC4, 0xFF, 0xB3, 0xB3, 0xB3, 0xFF, + 0xAA, 0xAA, 0xAA, 0xFF, 0xAA, 0xAA, 0xAA, 0xFF, 0xB6, 0xB9, 0xB8, 0xFF, + 0xC7, 0xC9, 0xC8, 0xFF, 0xCA, 0xCD, 0xCC, 0xFF, 0xC8, 0xCA, 0xC9, 0xFF, + 0xD5, 0xD7, 0xD6, 0xFF, 0xCB, 0xCE, 0xCD, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, + 0xCB, 0xD0, 0xCE, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, + 0xC8, 0xCF, 0xCD, 0xFF, 0xC8, 0xCF, 0xCD, 0xFF, 0xC3, 0xCB, 0xC8, 0xFF, + 0xBE, 0xC5, 0xC2, 0xFF, 0xC0, 0xC7, 0xC5, 0xFF, 0xC7, 0xCE, 0xCC, 0xFF, + 0xBD, 0xC3, 0xC3, 0xFF, 0xC6, 0xCD, 0xCD, 0xFF, 0xC3, 0xCA, 0xCA, 0xFF, + 0xB7, 0xBE, 0xBD, 0xFF, 0xB3, 0xBA, 0xBA, 0xFF, 0xAB, 0xB2, 0xB2, 0xFF, + 0x9E, 0xA5, 0xA3, 0xFF, 0x93, 0x9A, 0x97, 0xFF, 0xA8, 0xAF, 0xAA, 0xFF, + 0xA4, 0xAC, 0xA7, 0xFF, 0xA3, 0xAB, 0xA4, 0xFF, 0xA4, 0xAC, 0xA5, 0xFF, + 0xA6, 0xAE, 0xA9, 0xFF, 0x97, 0x9F, 0x9A, 0xFF, 0x8C, 0x93, 0x8E, 0xFF, + 0x8C, 0x93, 0x8E, 0xFF, 0x86, 0x8D, 0x8B, 0xFF, 0x82, 0x8A, 0x87, 0xFF, + 0x80, 0x87, 0x85, 0xFF, 0x79, 0x80, 0x7E, 0xFF, 0x7C, 0x81, 0x7F, 0xFF, + 0x68, 0x6D, 0x6B, 0xFF, 0x5A, 0x5F, 0x5D, 0xFF, 0x5B, 0x60, 0x5C, 0xFF, + 0x79, 0x7B, 0x78, 0xFF, 0x91, 0x94, 0x91, 0xFF, 0x88, 0x8B, 0x85, 0xFF, + 0x58, 0x5B, 0x56, 0xFF, 0x21, 0x21, 0x1D, 0xFF, 0x25, 0x23, 0x1F, 0xFF, + 0x2A, 0x29, 0x25, 0xFF, 0x27, 0x25, 0x21, 0xFF, 0x27, 0x25, 0x21, 0xFF, + 0x29, 0x28, 0x24, 0xFF, 0x2D, 0x2B, 0x27, 0xFF, 0x2F, 0x2D, 0x29, 0xFF, + 0x36, 0x32, 0x2F, 0xFF, 0x23, 0x1F, 0x1B, 0xFF, 0x12, 0x10, 0x0C, 0xFF, + 0x0D, 0x0C, 0x08, 0xFF, 0x14, 0x13, 0x0F, 0xFF, 0x0B, 0x09, 0x05, 0xFF, + 0x0F, 0x10, 0x0B, 0xFF, 0x10, 0x11, 0x0E, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, + 0x10, 0x11, 0x0E, 0xFF, 0x15, 0x15, 0x13, 0xFF, 0x18, 0x19, 0x16, 0xFF, + 0x0D, 0x0D, 0x0B, 0xFF, 0x13, 0x13, 0x11, 0xFF, 0x13, 0x13, 0x11, 0xFF, + 0x0D, 0x0D, 0x0B, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, 0x14, 0x14, 0x12, 0xFF, + 0x1D, 0x1F, 0x1C, 0xFF, 0x24, 0x26, 0x23, 0xFF, 0x2F, 0x32, 0x2F, 0xFF, + 0x34, 0x37, 0x34, 0xFF, 0x43, 0x48, 0x44, 0xFF, 0x58, 0x5D, 0x59, 0xFF, + 0x6C, 0x6F, 0x6B, 0xFF, 0x74, 0x77, 0x74, 0xFF, 0x6F, 0x72, 0x6F, 0xFF, + 0x5E, 0x61, 0x5D, 0xFF, 0x7A, 0x7C, 0x7B, 0xFF, 0x75, 0x78, 0x77, 0xFF, + 0x79, 0x7B, 0x7A, 0xFF, 0x83, 0x86, 0x85, 0xFF, 0x8E, 0x8E, 0x8E, 0xFF, + 0x95, 0x95, 0x95, 0xFF, 0x9E, 0x9E, 0x9E, 0xFF, 0xA4, 0xA4, 0xA4, 0xFF, + 0xB0, 0xB0, 0xB0, 0xFF, 0xB8, 0xB8, 0xB8, 0xFF, 0xAA, 0xAA, 0xAA, 0xFF, + 0xB2, 0xB2, 0xB2, 0xFF, 0xCC, 0xCC, 0xCC, 0xFF, 0xBD, 0xBD, 0xBD, 0xFF, + 0xA7, 0xA6, 0xA7, 0xFF, 0x9E, 0x9E, 0x9E, 0xFF, 0xB4, 0xB6, 0xB6, 0xFF, + 0xC3, 0xC6, 0xC5, 0xFF, 0xC8, 0xCA, 0xC9, 0xFF, 0xC6, 0xC8, 0xC7, 0xFF, + 0xC8, 0xCA, 0xC9, 0xFF, 0xC4, 0xC7, 0xC6, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, + 0xCE, 0xD3, 0xD2, 0xFF, 0xCC, 0xD1, 0xCF, 0xFF, 0xCB, 0xD0, 0xCE, 0xFF, + 0xC9, 0xD1, 0xCE, 0xFF, 0xCA, 0xD2, 0xCF, 0xFF, 0xCF, 0xD6, 0xD4, 0xFF, + 0xC2, 0xCA, 0xC7, 0xFF, 0xBA, 0xC1, 0xBF, 0xFF, 0xBB, 0xC3, 0xC0, 0xFF, + 0xAF, 0xB5, 0xB5, 0xFF, 0xB1, 0xB8, 0xB8, 0xFF, 0xB1, 0xB8, 0xB8, 0xFF, + 0xAF, 0xB5, 0xB5, 0xFF, 0xB0, 0xB7, 0xB6, 0xFF, 0xB7, 0xBE, 0xBD, 0xFF, + 0xB3, 0xBA, 0xB8, 0xFF, 0xA6, 0xAE, 0xAB, 0xFF, 0xAD, 0xB5, 0xB0, 0xFF, + 0xB1, 0xB8, 0xB4, 0xFF, 0xA9, 0xB0, 0xAB, 0xFF, 0x9A, 0xA1, 0x9C, 0xFF, + 0x8E, 0x96, 0x91, 0xFF, 0x9A, 0xA1, 0x9C, 0xFF, 0x9B, 0xA2, 0x9D, 0xFF, + 0x93, 0x9A, 0x95, 0xFF, 0x8C, 0x93, 0x90, 0xFF, 0x87, 0x8E, 0x8C, 0xFF, + 0x7F, 0x86, 0x84, 0xFF, 0x79, 0x80, 0x7E, 0xFF, 0x79, 0x7E, 0x7F, 0xFF, + 0x72, 0x77, 0x78, 0xFF, 0x61, 0x66, 0x64, 0xFF, 0x52, 0x57, 0x55, 0xFF, + 0x6F, 0x72, 0x6F, 0xFF, 0x93, 0x96, 0x93, 0xFF, 0x9A, 0x9D, 0x9A, 0xFF, + 0x75, 0x78, 0x75, 0xFF, 0x24, 0x24, 0x22, 0xFF, 0x1A, 0x1A, 0x18, 0xFF, + 0x1D, 0x1D, 0x1B, 0xFF, 0x1E, 0x1F, 0x1C, 0xFF, 0x28, 0x26, 0x24, 0xFF, + 0x23, 0x21, 0x20, 0xFF, 0x22, 0x20, 0x1F, 0xFF, 0x26, 0x24, 0x22, 0xFF, + 0x30, 0x2E, 0x2D, 0xFF, 0x19, 0x17, 0x15, 0xFF, 0x0A, 0x08, 0x06, 0xFF, + 0x0E, 0x0C, 0x0B, 0xFF, 0x0E, 0x0C, 0x0B, 0xFF, 0x0C, 0x0A, 0x08, 0xFF, + 0x0C, 0x0C, 0x0A, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, 0x09, 0x09, 0x09, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x11, 0x11, 0x11, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0A, 0x0A, 0x0A, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x14, 0x14, 0x14, 0xFF, 0x10, 0x10, 0x10, 0xFF, 0x14, 0x14, 0x14, 0xFF, + 0x17, 0x19, 0x18, 0xFF, 0x1A, 0x1D, 0x1C, 0xFF, 0x24, 0x26, 0x25, 0xFF, + 0x1F, 0x21, 0x21, 0xFF, 0x12, 0x17, 0x15, 0xFF, 0x1D, 0x22, 0x21, 0xFF, + 0x3C, 0x3F, 0x3E, 0xFF, 0x51, 0x53, 0x53, 0xFF, 0x5D, 0x5F, 0x5E, 0xFF, + 0x64, 0x66, 0x65, 0xFF, 0x78, 0x7A, 0x79, 0xFF, 0x7E, 0x81, 0x80, 0xFF, + 0x84, 0x87, 0x86, 0xFF, 0x85, 0x88, 0x87, 0xFF, 0x87, 0x89, 0x88, 0xFF, + 0x96, 0x98, 0x97, 0xFF, 0x9E, 0xA0, 0xA0, 0xFF, 0x9F, 0xA2, 0xA1, 0xFF, + 0xAD, 0xAF, 0xAF, 0xFF, 0xAD, 0xAF, 0xAF, 0xFF, 0xAD, 0xAF, 0xAF, 0xFF, + 0xAD, 0xAF, 0xAF, 0xFF, 0xD2, 0xD5, 0xD4, 0xFF, 0xCA, 0xCD, 0xCC, 0xFF, + 0xA8, 0xAB, 0xAA, 0xFF, 0xA7, 0xAA, 0xA9, 0xFF, 0xB5, 0xB8, 0xB7, 0xFF, + 0xC2, 0xC4, 0xC4, 0xFF, 0xC2, 0xC4, 0xC4, 0xFF, 0xC2, 0xC4, 0xC4, 0xFF, + 0xC6, 0xC8, 0xC7, 0xFF, 0xC4, 0xC7, 0xC6, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, + 0xD5, 0xDA, 0xD9, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, + 0xC9, 0xD1, 0xCE, 0xFF, 0xCC, 0xD3, 0xD0, 0xFF, 0xD0, 0xD8, 0xD5, 0xFF, + 0xCF, 0xD6, 0xD4, 0xFF, 0xC8, 0xCF, 0xCD, 0xFF, 0xC1, 0xC8, 0xC6, 0xFF, + 0xA8, 0xAE, 0xAE, 0xFF, 0xAA, 0xB1, 0xB1, 0xFF, 0xB2, 0xB9, 0xB9, 0xFF, + 0xBB, 0xC2, 0xC2, 0xFF, 0xB6, 0xBC, 0xBC, 0xFF, 0xB7, 0xBE, 0xBD, 0xFF, + 0xB3, 0xBA, 0xB8, 0xFF, 0xAC, 0xB3, 0xB1, 0xFF, 0x93, 0x9A, 0x95, 0xFF, + 0x9D, 0xA5, 0xA0, 0xFF, 0xA5, 0xAD, 0xA8, 0xFF, 0xA6, 0xAE, 0xA9, 0xFF, + 0x95, 0x9D, 0x98, 0xFF, 0x9B, 0xA2, 0x9D, 0xFF, 0x9C, 0xA4, 0x9F, 0xFF, + 0x98, 0xA0, 0x9B, 0xFF, 0xA1, 0xA8, 0xA5, 0xFF, 0x94, 0x9B, 0x99, 0xFF, + 0x82, 0x8A, 0x87, 0xFF, 0x74, 0x7C, 0x79, 0xFF, 0x78, 0x7D, 0x7D, 0xFF, + 0x76, 0x7A, 0x7B, 0xFF, 0x6F, 0x74, 0x72, 0xFF, 0x5D, 0x62, 0x61, 0xFF, + 0x7A, 0x7D, 0x79, 0xFF, 0x8F, 0x92, 0x8E, 0xFF, 0x98, 0x9B, 0x98, 0xFF, + 0x83, 0x86, 0x83, 0xFF, 0x29, 0x29, 0x27, 0xFF, 0x1B, 0x1B, 0x19, 0xFF, + 0x1C, 0x1C, 0x1A, 0xFF, 0x1B, 0x1B, 0x19, 0xFF, 0x20, 0x1E, 0x1C, 0xFF, + 0x1C, 0x1A, 0x19, 0xFF, 0x1F, 0x1D, 0x1B, 0xFF, 0x26, 0x24, 0x22, 0xFF, + 0x2A, 0x28, 0x27, 0xFF, 0x15, 0x13, 0x12, 0xFF, 0x09, 0x07, 0x05, 0xFF, + 0x10, 0x0E, 0x0C, 0xFF, 0x0E, 0x0C, 0x0B, 0xFF, 0x0C, 0x0A, 0x08, 0xFF, + 0x0C, 0x0C, 0x0A, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, 0x09, 0x09, 0x09, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x11, 0x11, 0x11, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0A, 0x0A, 0x0A, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x14, 0x14, 0x14, 0xFF, 0x14, 0x14, 0x14, 0xFF, 0x15, 0x15, 0x15, 0xFF, + 0x16, 0x18, 0x17, 0xFF, 0x17, 0x19, 0x18, 0xFF, 0x13, 0x16, 0x15, 0xFF, + 0x13, 0x16, 0x15, 0xFF, 0x06, 0x0B, 0x09, 0xFF, 0x0D, 0x12, 0x10, 0xFF, + 0x1E, 0x20, 0x1F, 0xFF, 0x36, 0x39, 0x38, 0xFF, 0x51, 0x53, 0x53, 0xFF, + 0x6A, 0x6C, 0x6B, 0xFF, 0x76, 0x79, 0x78, 0xFF, 0x82, 0x84, 0x84, 0xFF, + 0x8C, 0x8F, 0x8E, 0xFF, 0x90, 0x92, 0x92, 0xFF, 0x92, 0x95, 0x94, 0xFF, + 0x9C, 0x9E, 0x9D, 0xFF, 0x9C, 0x9E, 0x9D, 0xFF, 0x98, 0x9B, 0x9A, 0xFF, + 0xAA, 0xAC, 0xAB, 0xFF, 0xAF, 0xB2, 0xB1, 0xFF, 0xB8, 0xBA, 0xB9, 0xFF, + 0xBD, 0xC0, 0xBF, 0xFF, 0xCF, 0xD1, 0xD0, 0xFF, 0xCB, 0xCE, 0xCD, 0xFF, + 0xCF, 0xD1, 0xD0, 0xFF, 0xD9, 0xDC, 0xDB, 0xFF, 0xBD, 0xC0, 0xBF, 0xFF, + 0xC2, 0xC4, 0xC4, 0xFF, 0xC0, 0xC2, 0xC1, 0xFF, 0xBF, 0xC1, 0xC0, 0xFF, + 0xD2, 0xD5, 0xD4, 0xFF, 0xD3, 0xD6, 0xD5, 0xFF, 0xCB, 0xD0, 0xCE, 0xFF, + 0xBF, 0xC4, 0xC2, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, + 0xC9, 0xD1, 0xCE, 0xFF, 0xCC, 0xD3, 0xD0, 0xFF, 0xCD, 0xD4, 0xD2, 0xFF, + 0xCD, 0xD4, 0xD2, 0xFF, 0xCC, 0xD3, 0xD0, 0xFF, 0xC5, 0xCC, 0xC9, 0xFF, + 0xAB, 0xB2, 0xB2, 0xFF, 0xA5, 0xAC, 0xAC, 0xFF, 0xAD, 0xB4, 0xB4, 0xFF, + 0xBF, 0xC6, 0xC6, 0xFF, 0xBE, 0xC5, 0xC4, 0xFF, 0xB7, 0xBE, 0xBD, 0xFF, + 0xB3, 0xBA, 0xB8, 0xFF, 0xB4, 0xBC, 0xB9, 0xFF, 0x9D, 0xA5, 0xA0, 0xFF, + 0x9E, 0xA6, 0xA1, 0xFF, 0xA6, 0xAE, 0xA9, 0xFF, 0xB1, 0xB8, 0xB4, 0xFF, + 0xB4, 0xBC, 0xB7, 0xFF, 0xA9, 0xB0, 0xAB, 0xFF, 0xA1, 0xA8, 0xA3, 0xFF, + 0x9E, 0xA6, 0xA1, 0xFF, 0xAC, 0xB3, 0xB1, 0xFF, 0x9C, 0xA3, 0xA1, 0xFF, + 0x87, 0x8E, 0x8C, 0xFF, 0x75, 0x7D, 0x7A, 0xFF, 0x76, 0x7A, 0x7B, 0xFF, + 0x75, 0x79, 0x7A, 0xFF, 0x72, 0x77, 0x76, 0xFF, 0x6B, 0x70, 0x6F, 0xFF, + 0x76, 0x79, 0x76, 0xFF, 0x7D, 0x80, 0x7D, 0xFF, 0x90, 0x93, 0x90, 0xFF, + 0x96, 0x99, 0x95, 0xFF, 0x2D, 0x2E, 0x2B, 0xFF, 0x1E, 0x1F, 0x1C, 0xFF, + 0x1A, 0x1A, 0x18, 0xFF, 0x15, 0x15, 0x13, 0xFF, 0x19, 0x17, 0x15, 0xFF, + 0x1A, 0x18, 0x16, 0xFF, 0x21, 0x1F, 0x1D, 0xFF, 0x2C, 0x29, 0x28, 0xFF, + 0x30, 0x2E, 0x2D, 0xFF, 0x19, 0x17, 0x15, 0xFF, 0x0A, 0x08, 0x06, 0xFF, + 0x0E, 0x0C, 0x0B, 0xFF, 0x0E, 0x0C, 0x0B, 0xFF, 0x0C, 0x0A, 0x08, 0xFF, + 0x0C, 0x0C, 0x0A, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, 0x09, 0x09, 0x09, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x11, 0x11, 0x11, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0A, 0x0A, 0x0A, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x14, 0x14, 0x14, 0xFF, 0x18, 0x18, 0x18, 0xFF, 0x17, 0x17, 0x17, 0xFF, + 0x13, 0x16, 0x15, 0xFF, 0x12, 0x15, 0x14, 0xFF, 0x09, 0x0B, 0x0A, 0xFF, + 0x0F, 0x11, 0x10, 0xFF, 0x01, 0x06, 0x05, 0xFF, 0x03, 0x07, 0x06, 0xFF, + 0x10, 0x12, 0x11, 0xFF, 0x1F, 0x21, 0x21, 0xFF, 0x43, 0x46, 0x45, 0xFF, + 0x66, 0x68, 0x68, 0xFF, 0x68, 0x6B, 0x6A, 0xFF, 0x7C, 0x7F, 0x7E, 0xFF, + 0x8B, 0x8E, 0x8D, 0xFF, 0x95, 0x97, 0x96, 0xFF, 0x9F, 0xA2, 0xA1, 0xFF, + 0xA8, 0xAB, 0xAA, 0xFF, 0xA8, 0xAB, 0xAA, 0xFF, 0xA4, 0xA6, 0xA5, 0xFF, + 0x93, 0x96, 0x95, 0xFF, 0x99, 0x9C, 0x9B, 0xFF, 0xA1, 0xA4, 0xA3, 0xFF, + 0xA7, 0xAA, 0xA9, 0xFF, 0xB6, 0xB9, 0xB8, 0xFF, 0xB3, 0xB5, 0xB4, 0xFF, + 0xC6, 0xC8, 0xC7, 0xFF, 0xD5, 0xD7, 0xD6, 0xFF, 0xC8, 0xCA, 0xC9, 0xFF, + 0xC3, 0xC6, 0xC5, 0xFF, 0xBF, 0xC1, 0xC0, 0xFF, 0xBB, 0xBD, 0xBD, 0xFF, + 0xCB, 0xCE, 0xCD, 0xFF, 0xCD, 0xCF, 0xCE, 0xFF, 0xC4, 0xC9, 0xC7, 0xFF, + 0xB9, 0xBE, 0xBD, 0xFF, 0xC7, 0xCC, 0xCB, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, + 0xC9, 0xD1, 0xCE, 0xFF, 0xCA, 0xD2, 0xCF, 0xFF, 0xCA, 0xD2, 0xCF, 0xFF, + 0xCA, 0xD2, 0xCF, 0xFF, 0xCA, 0xD2, 0xCF, 0xFF, 0xC9, 0xD1, 0xCE, 0xFF, + 0xB8, 0xBF, 0xBF, 0xFF, 0xA6, 0xAD, 0xAD, 0xFF, 0xA6, 0xAD, 0xAD, 0xFF, + 0xB8, 0xBF, 0xBF, 0xFF, 0xC3, 0xCA, 0xCA, 0xFF, 0xB7, 0xBE, 0xBD, 0xFF, + 0xB3, 0xBA, 0xB8, 0xFF, 0xBA, 0xC1, 0xBF, 0xFF, 0xAA, 0xB1, 0xAD, 0xFF, + 0x9A, 0xA1, 0x9C, 0xFF, 0x91, 0x99, 0x94, 0xFF, 0x96, 0x9E, 0x99, 0xFF, + 0x98, 0xA0, 0x9B, 0xFF, 0x93, 0x9A, 0x95, 0xFF, 0x9A, 0xA1, 0x9C, 0xFF, + 0xA8, 0xAF, 0xAA, 0xFF, 0xAD, 0xB5, 0xB2, 0xFF, 0x9F, 0xA7, 0xA4, 0xFF, + 0x8F, 0x96, 0x94, 0xFF, 0x82, 0x8A, 0x87, 0xFF, 0x79, 0x7E, 0x7F, 0xFF, + 0x72, 0x77, 0x78, 0xFF, 0x71, 0x76, 0x74, 0xFF, 0x6F, 0x74, 0x72, 0xFF, + 0x6E, 0x71, 0x6E, 0xFF, 0x66, 0x69, 0x66, 0xFF, 0x7C, 0x7F, 0x7C, 0xFF, + 0x97, 0x9A, 0x97, 0xFF, 0x32, 0x32, 0x30, 0xFF, 0x1F, 0x20, 0x1D, 0xFF, + 0x1A, 0x1A, 0x18, 0xFF, 0x11, 0x12, 0x0F, 0xFF, 0x19, 0x17, 0x15, 0xFF, + 0x1C, 0x1A, 0x19, 0xFF, 0x29, 0x27, 0x26, 0xFF, 0x35, 0x33, 0x31, 0xFF, + 0x3F, 0x3D, 0x3C, 0xFF, 0x22, 0x20, 0x1F, 0xFF, 0x0C, 0x0A, 0x08, 0xFF, + 0x0C, 0x0A, 0x08, 0xFF, 0x0E, 0x0C, 0x0B, 0xFF, 0x0C, 0x0A, 0x08, 0xFF, + 0x0C, 0x0C, 0x0A, 0xFF, 0x0D, 0x0D, 0x0B, 0xFF, 0x09, 0x09, 0x09, 0xFF, + 0x0F, 0x0F, 0x0F, 0xFF, 0x11, 0x11, 0x11, 0xFF, 0x0F, 0x0F, 0x0F, 0xFF, + 0x0A, 0x0A, 0x0A, 0xFF, 0x0E, 0x0E, 0x0E, 0xFF, 0x11, 0x11, 0x11, 0xFF, + 0x14, 0x14, 0x14, 0xFF, 0x1C, 0x1C, 0x1C, 0xFF, 0x18, 0x18, 0x18, 0xFF, + 0x12, 0x15, 0x14, 0xFF, 0x0F, 0x11, 0x10, 0xFF, 0x08, 0x0A, 0x09, 0xFF, + 0x13, 0x16, 0x15, 0xFF, 0x06, 0x0B, 0x09, 0xFF, 0x01, 0x06, 0x05, 0xFF, + 0x0F, 0x11, 0x10, 0xFF, 0x1E, 0x20, 0x1F, 0xFF, 0x33, 0x35, 0x34, 0xFF, + 0x4E, 0x50, 0x4F, 0xFF, 0x5C, 0x5E, 0x5D, 0xFF, 0x72, 0x74, 0x73, 0xFF, + 0x84, 0x87, 0x86, 0xFF, 0x92, 0x95, 0x94, 0xFF, 0xA6, 0xA8, 0xA8, 0xFF, + 0xB5, 0xB8, 0xB7, 0xFF, 0xBF, 0xC1, 0xC0, 0xFF, 0xB9, 0xBB, 0xBA, 0xFF, + 0x95, 0x97, 0x96, 0xFF, 0x95, 0x97, 0x96, 0xFF, 0x95, 0x97, 0x96, 0xFF, + 0x95, 0x97, 0x96, 0xFF, 0xA1, 0xA4, 0xA3, 0xFF, 0xAB, 0xAD, 0xAC, 0xFF, + 0xBC, 0xBF, 0xBE, 0xFF, 0xBA, 0xBC, 0xBB, 0xFF, 0xCA, 0xCD, 0xCC, 0xFF, + 0xC6, 0xC8, 0xC7, 0xFF, 0xBD, 0xC0, 0xBF, 0xFF, 0xBA, 0xBC, 0xBB, 0xFF, + 0xB5, 0xB8, 0xB7, 0xFF, 0xB4, 0xB6, 0xB6, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, + 0xC5, 0xCA, 0xC8, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, 0xCB, 0xD0, 0xCE, 0xFF, + 0xCA, 0xD2, 0xCF, 0xFF, 0xCC, 0xD3, 0xD0, 0xFF, 0xC8, 0xCF, 0xCD, 0xFF, + 0xC8, 0xCF, 0xCD, 0xFF, 0xC8, 0xCF, 0xCD, 0xFF, 0xC8, 0xCF, 0xCD, 0xFF, + 0xB7, 0xBE, 0xBB, 0xFF, 0xAF, 0xB6, 0xB3, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, + 0xC2, 0xCA, 0xC7, 0xFF, 0xBB, 0xC3, 0xC0, 0xFF, 0xB3, 0xBA, 0xB8, 0xFF, + 0xB2, 0xB9, 0xB7, 0xFF, 0xB9, 0xC0, 0xBE, 0xFF, 0xAB, 0xB2, 0xB0, 0xFF, + 0xA5, 0xAC, 0xAA, 0xFF, 0xA1, 0xA8, 0xA3, 0xFF, 0xA4, 0xAC, 0xA7, 0xFF, + 0xA5, 0xAC, 0xAA, 0xFF, 0xA8, 0xAF, 0xAC, 0xFF, 0xAC, 0xB3, 0xB1, 0xFF, + 0xAD, 0xB5, 0xB2, 0xFF, 0x9B, 0xA0, 0x9E, 0xFF, 0xA2, 0xA7, 0xA5, 0xFF, + 0x9F, 0xA3, 0xA2, 0xFF, 0x93, 0x98, 0x96, 0xFF, 0x7B, 0x7F, 0x7E, 0xFF, + 0x70, 0x75, 0x73, 0xFF, 0x6A, 0x6F, 0x6D, 0xFF, 0x6A, 0x6F, 0x6D, 0xFF, + 0x70, 0x75, 0x73, 0xFF, 0x74, 0x78, 0x77, 0xFF, 0x75, 0x7A, 0x76, 0xFF, + 0x7A, 0x7D, 0x79, 0xFF, 0x37, 0x3A, 0x37, 0xFF, 0x1D, 0x1F, 0x1C, 0xFF, + 0x1A, 0x1D, 0x1A, 0xFF, 0x1D, 0x1D, 0x1B, 0xFF, 0x14, 0x14, 0x12, 0xFF, + 0x07, 0x07, 0x05, 0xFF, 0x2A, 0x2A, 0x28, 0xFF, 0x45, 0x45, 0x43, 0xFF, + 0x7C, 0x79, 0x7A, 0xFF, 0x4C, 0x4A, 0x4B, 0xFF, 0x47, 0x47, 0x47, 0xFF, + 0x29, 0x29, 0x29, 0xFF, 0x22, 0x22, 0x22, 0xFF, 0x1C, 0x1C, 0x1C, 0xFF, + 0x14, 0x14, 0x14, 0xFF, 0x09, 0x09, 0x09, 0xFF, 0x01, 0x01, 0x01, 0xFF, + 0x10, 0x10, 0x10, 0xFF, 0x15, 0x15, 0x15, 0xFF, 0x0C, 0x0C, 0x0C, 0xFF, + 0x0C, 0x0C, 0x0C, 0xFF, 0x0D, 0x0D, 0x0D, 0xFF, 0x1A, 0x1A, 0x1A, 0xFF, + 0x2B, 0x2B, 0x2B, 0xFF, 0x2B, 0x2B, 0x2B, 0xFF, 0x1C, 0x1C, 0x1C, 0xFF, + 0x12, 0x15, 0x14, 0xFF, 0x15, 0x17, 0x16, 0xFF, 0x1E, 0x20, 0x1F, 0xFF, + 0x01, 0x03, 0x02, 0xFF, 0x06, 0x0B, 0x09, 0xFF, 0x0C, 0x11, 0x0F, 0xFF, + 0x00, 0x00, 0x00, 0xFF, 0x27, 0x2C, 0x2A, 0xFF, 0x46, 0x4B, 0x49, 0xFF, + 0x58, 0x5C, 0x5B, 0xFF, 0x49, 0x4D, 0x4C, 0xFF, 0x5A, 0x5F, 0x5D, 0xFF, + 0x72, 0x77, 0x76, 0xFF, 0x84, 0x89, 0x87, 0xFF, 0x9A, 0x9D, 0x9C, 0xFF, + 0xB1, 0xB3, 0xB2, 0xFF, 0xBB, 0xBD, 0xBD, 0xFF, 0xB8, 0xBA, 0xB9, 0xFF, + 0xAF, 0xB2, 0xB1, 0xFF, 0xA6, 0xA8, 0xA8, 0xFF, 0x95, 0x97, 0x96, 0xFF, + 0x8B, 0x8E, 0x8D, 0xFF, 0x98, 0x9B, 0x9A, 0xFF, 0xA5, 0xA7, 0xA7, 0xFF, + 0xAE, 0xB1, 0xB0, 0xFF, 0xB3, 0xB5, 0xB4, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, + 0xC5, 0xCA, 0xC8, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, + 0xB0, 0xB5, 0xB3, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, + 0xC3, 0xC8, 0xC6, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, + 0xBB, 0xBF, 0xBE, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, 0xCC, 0xD1, 0xCF, 0xFF, + 0xCB, 0xD0, 0xCE, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, + 0xC3, 0xCB, 0xC8, 0xFF, 0xB0, 0xB7, 0xB4, 0xFF, 0xA5, 0xAC, 0xAA, 0xFF, + 0x9F, 0xA7, 0xA4, 0xFF, 0x9E, 0xA5, 0xA3, 0xFF, 0xB7, 0xBE, 0xBB, 0xFF, + 0xB8, 0xBF, 0xBD, 0xFF, 0xA3, 0xAA, 0xA8, 0xFF, 0xA1, 0xA8, 0xA5, 0xFF, + 0xA6, 0xAE, 0xAB, 0xFF, 0xAC, 0xB4, 0xAF, 0xFF, 0xB0, 0xB7, 0xB2, 0xFF, + 0xAF, 0xB6, 0xB3, 0xFF, 0xAD, 0xB5, 0xB2, 0xFF, 0xAF, 0xB6, 0xB3, 0xFF, + 0xAF, 0xB6, 0xB3, 0xFF, 0x9F, 0xA3, 0xA2, 0xFF, 0x9F, 0xA3, 0xA2, 0xFF, + 0x9C, 0xA1, 0xA0, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, 0x89, 0x8D, 0x8C, 0xFF, + 0x7F, 0x84, 0x82, 0xFF, 0x74, 0x78, 0x77, 0xFF, 0x68, 0x6D, 0x6B, 0xFF, + 0x63, 0x68, 0x66, 0xFF, 0x68, 0x6D, 0x6B, 0xFF, 0x6D, 0x72, 0x6E, 0xFF, + 0x70, 0x75, 0x71, 0xFF, 0x35, 0x38, 0x35, 0xFF, 0x1A, 0x1D, 0x1A, 0xFF, + 0x1A, 0x1D, 0x1A, 0xFF, 0x1A, 0x1D, 0x1A, 0xFF, 0x23, 0x23, 0x21, 0xFF, + 0x13, 0x13, 0x11, 0xFF, 0x28, 0x28, 0x26, 0xFF, 0x4B, 0x4B, 0x48, 0xFF, + 0x8A, 0x87, 0x88, 0xFF, 0x6E, 0x6B, 0x6C, 0xFF, 0x8B, 0x8B, 0x8B, 0xFF, + 0x9A, 0x9A, 0x9A, 0xFF, 0x9A, 0x9A, 0x9A, 0xFF, 0x96, 0x96, 0x96, 0xFF, + 0x78, 0x78, 0x78, 0xFF, 0x4E, 0x4E, 0x4E, 0xFF, 0x30, 0x30, 0x30, 0xFF, + 0x24, 0x24, 0x24, 0xFF, 0x25, 0x25, 0x25, 0xFF, 0x31, 0x31, 0x31, 0xFF, + 0x4F, 0x4F, 0x4F, 0xFF, 0x65, 0x65, 0x65, 0xFF, 0x77, 0x77, 0x77, 0xFF, + 0x79, 0x79, 0x79, 0xFF, 0x74, 0x74, 0x74, 0xFF, 0x6C, 0x6C, 0x6C, 0xFF, + 0x53, 0x56, 0x55, 0xFF, 0x3A, 0x3C, 0x3B, 0xFF, 0x15, 0x17, 0x16, 0xFF, + 0x1F, 0x21, 0x21, 0xFF, 0x24, 0x29, 0x28, 0xFF, 0x03, 0x07, 0x06, 0xFF, + 0x2F, 0x34, 0x32, 0xFF, 0x4C, 0x51, 0x4F, 0xFF, 0x4A, 0x4E, 0x4D, 0xFF, + 0x69, 0x6E, 0x6C, 0xFF, 0x5A, 0x5F, 0x5D, 0xFF, 0x58, 0x5C, 0x5B, 0xFF, + 0x66, 0x6A, 0x69, 0xFF, 0x78, 0x7D, 0x7B, 0xFF, 0x8F, 0x91, 0x90, 0xFF, + 0x93, 0x96, 0x95, 0xFF, 0x9F, 0xA2, 0xA1, 0xFF, 0xB4, 0xB6, 0xB6, 0xFF, + 0xBC, 0xBF, 0xBE, 0xFF, 0xB8, 0xBA, 0xB9, 0xFF, 0xB1, 0xB3, 0xB2, 0xFF, + 0xA1, 0xA4, 0xA3, 0xFF, 0x9F, 0xA2, 0xA1, 0xFF, 0xA4, 0xA6, 0xA5, 0xFF, + 0xA3, 0xA5, 0xA4, 0xFF, 0xA3, 0xA5, 0xA4, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, + 0xC5, 0xCA, 0xC8, 0xFF, 0xCD, 0xD2, 0xD0, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, + 0xB5, 0xBA, 0xB8, 0xFF, 0xAB, 0xB0, 0xAF, 0xFF, 0xB2, 0xB7, 0xB6, 0xFF, + 0xC5, 0xCA, 0xC8, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, + 0xBB, 0xBF, 0xBE, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, 0xCC, 0xD1, 0xCF, 0xFF, + 0xCB, 0xD0, 0xCE, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, 0xC7, 0xCC, 0xCB, 0xFF, + 0xAD, 0xB5, 0xB2, 0xFF, 0x9E, 0xA5, 0xA3, 0xFF, 0x9A, 0xA1, 0x9E, 0xFF, + 0x94, 0x9B, 0x99, 0xFF, 0x95, 0x9C, 0x9A, 0xFF, 0xB0, 0xB7, 0xB4, 0xFF, + 0xB7, 0xBE, 0xBB, 0xFF, 0xA4, 0xAB, 0xA9, 0xFF, 0xAC, 0xB3, 0xB1, 0xFF, + 0xB2, 0xB9, 0xB7, 0xFF, 0xB8, 0xBF, 0xBB, 0xFF, 0xB8, 0xBF, 0xBB, 0xFF, + 0xAF, 0xB6, 0xB3, 0xFF, 0xAF, 0xB6, 0xB3, 0xFF, 0xAF, 0xB6, 0xB3, 0xFF, + 0xAF, 0xB6, 0xB3, 0xFF, 0xA2, 0xA7, 0xA5, 0xFF, 0x9B, 0xA0, 0x9E, 0xFF, + 0x99, 0x9E, 0x9C, 0xFF, 0x9A, 0x9F, 0x9D, 0xFF, 0x9A, 0x9F, 0x9D, 0xFF, + 0x9A, 0x9F, 0x9D, 0xFF, 0x8A, 0x8F, 0x8D, 0xFF, 0x71, 0x76, 0x74, 0xFF, + 0x63, 0x68, 0x66, 0xFF, 0x64, 0x69, 0x68, 0xFF, 0x66, 0x6B, 0x67, 0xFF, + 0x6B, 0x71, 0x6D, 0xFF, 0x33, 0x36, 0x32, 0xFF, 0x19, 0x1C, 0x19, 0xFF, + 0x19, 0x1C, 0x19, 0xFF, 0x1C, 0x1E, 0x1B, 0xFF, 0x1A, 0x1A, 0x18, 0xFF, + 0x14, 0x14, 0x12, 0xFF, 0x30, 0x30, 0x2E, 0xFF, 0x71, 0x71, 0x6F, 0xFF, + 0x97, 0x94, 0x95, 0xFF, 0x7F, 0x7D, 0x7E, 0xFF, 0x8D, 0x8D, 0x8D, 0xFF, + 0xAB, 0xAB, 0xAB, 0xFF, 0xB0, 0xB0, 0xB0, 0xFF, 0xA5, 0xA5, 0xA5, 0xFF, + 0x9E, 0x9E, 0x9E, 0xFF, 0x9D, 0x9D, 0x9D, 0xFF, 0x8E, 0x8E, 0x8E, 0xFF, + 0x8D, 0x8D, 0x8D, 0xFF, 0x88, 0x88, 0x88, 0xFF, 0x82, 0x82, 0x82, 0xFF, + 0x7D, 0x7D, 0x7D, 0xFF, 0x87, 0x87, 0x87, 0xFF, 0x86, 0x86, 0x86, 0xFF, + 0x7D, 0x7D, 0x7D, 0xFF, 0x73, 0x73, 0x73, 0xFF, 0x78, 0x78, 0x78, 0xFF, + 0x71, 0x73, 0x72, 0xFF, 0x64, 0x66, 0x65, 0xFF, 0x88, 0x8A, 0x89, 0xFF, + 0x66, 0x68, 0x68, 0xFF, 0x6B, 0x70, 0x6F, 0xFF, 0x76, 0x7B, 0x79, 0xFF, + 0x5F, 0x63, 0x62, 0xFF, 0x80, 0x85, 0x84, 0xFF, 0x7E, 0x83, 0x81, 0xFF, + 0x76, 0x7B, 0x79, 0xFF, 0x75, 0x7A, 0x78, 0xFF, 0x78, 0x7D, 0x7B, 0xFF, + 0x82, 0x86, 0x85, 0xFF, 0x8B, 0x90, 0x8E, 0xFF, 0x90, 0x92, 0x92, 0xFF, + 0x89, 0x8B, 0x8B, 0xFF, 0x93, 0x96, 0x95, 0xFF, 0xA8, 0xAB, 0xAA, 0xFF, + 0xBC, 0xBF, 0xBE, 0xFF, 0xBA, 0xBC, 0xBB, 0xFF, 0xB6, 0xB9, 0xB8, 0xFF, + 0xB2, 0xB4, 0xB3, 0xFF, 0xB1, 0xB3, 0xB2, 0xFF, 0xB3, 0xB5, 0xB4, 0xFF, + 0xB1, 0xB3, 0xB2, 0xFF, 0xAA, 0xAC, 0xAB, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, + 0xC4, 0xC9, 0xC7, 0xFF, 0xD0, 0xD4, 0xD3, 0xFF, 0xD3, 0xD8, 0xD6, 0xFF, + 0xC4, 0xC9, 0xC7, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, 0xB4, 0xB8, 0xB7, 0xFF, + 0xC0, 0xC5, 0xC4, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, + 0xBB, 0xBF, 0xBE, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, + 0xC4, 0xC9, 0xC7, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, + 0x88, 0x8F, 0x8D, 0xFF, 0x89, 0x90, 0x8E, 0xFF, 0x9A, 0xA1, 0x9E, 0xFF, + 0xA9, 0xB0, 0xAD, 0xFF, 0xA5, 0xAC, 0xAA, 0xFF, 0xA4, 0xAB, 0xA9, 0xFF, + 0xAD, 0xB5, 0xB2, 0xFF, 0xBB, 0xC3, 0xC0, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, + 0xB8, 0xBF, 0xBD, 0xFF, 0xB8, 0xBF, 0xBB, 0xFF, 0xB8, 0xBF, 0xBB, 0xFF, + 0xAF, 0xB6, 0xB3, 0xFF, 0xAF, 0xB6, 0xB3, 0xFF, 0xAF, 0xB6, 0xB3, 0xFF, + 0xAF, 0xB6, 0xB3, 0xFF, 0xA3, 0xA8, 0xA7, 0xFF, 0x99, 0x9E, 0x9C, 0xFF, + 0x97, 0x9B, 0x9A, 0xFF, 0x9C, 0xA1, 0xA0, 0xFF, 0xAD, 0xB1, 0xB0, 0xFF, + 0xB1, 0xB6, 0xB4, 0xFF, 0xA4, 0xA9, 0xA8, 0xFF, 0x84, 0x89, 0x87, 0xFF, + 0x76, 0x7B, 0x79, 0xFF, 0x71, 0x76, 0x74, 0xFF, 0x6E, 0x73, 0x6F, 0xFF, + 0x6F, 0x74, 0x70, 0xFF, 0x33, 0x36, 0x32, 0xFF, 0x1A, 0x1D, 0x1A, 0xFF, + 0x19, 0x1C, 0x19, 0xFF, 0x21, 0x24, 0x21, 0xFF, 0x29, 0x29, 0x27, 0xFF, + 0x1F, 0x20, 0x1D, 0xFF, 0x2B, 0x2B, 0x29, 0xFF, 0x77, 0x77, 0x75, 0xFF, + 0x8A, 0x87, 0x88, 0xFF, 0x8C, 0x8A, 0x8B, 0xFF, 0x95, 0x95, 0x95, 0xFF, + 0xAA, 0xAA, 0xAA, 0xFF, 0x99, 0x99, 0x99, 0xFF, 0xAB, 0xAB, 0xAB, 0xFF, + 0xB7, 0xB7, 0xB7, 0xFF, 0xB1, 0xB1, 0xB1, 0xFF, 0x8C, 0x8C, 0x8C, 0xFF, + 0x70, 0x70, 0x70, 0xFF, 0x68, 0x68, 0x68, 0xFF, 0x77, 0x77, 0x77, 0xFF, + 0x7D, 0x7D, 0x7D, 0xFF, 0x78, 0x78, 0x78, 0xFF, 0x7D, 0x7D, 0x7D, 0xFF, + 0x88, 0x88, 0x88, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x7D, 0x7D, 0x7D, 0xFF, + 0x7A, 0x7C, 0x7B, 0xFF, 0x82, 0x84, 0x84, 0xFF, 0xB1, 0xB3, 0xB2, 0xFF, + 0x6D, 0x6F, 0x6F, 0xFF, 0x72, 0x77, 0x76, 0xFF, 0x9F, 0xA3, 0xA2, 0xFF, + 0x75, 0x7A, 0x78, 0xFF, 0x6F, 0x74, 0x72, 0xFF, 0x90, 0x94, 0x93, 0xFF, + 0x7C, 0x81, 0x7F, 0xFF, 0x74, 0x78, 0x77, 0xFF, 0x91, 0x96, 0x94, 0xFF, + 0xA1, 0xA6, 0xA4, 0xFF, 0x9B, 0xA0, 0x9E, 0xFF, 0x9D, 0x9F, 0x9E, 0xFF, + 0x97, 0x99, 0x99, 0xFF, 0x97, 0x99, 0x99, 0xFF, 0x9C, 0x9E, 0x9D, 0xFF, + 0xAD, 0xAF, 0xAF, 0xFF, 0xB3, 0xB5, 0xB4, 0xFF, 0xB9, 0xBB, 0xBA, 0xFF, + 0xBC, 0xBF, 0xBE, 0xFF, 0xBD, 0xC0, 0xBF, 0xFF, 0xC4, 0xC7, 0xC6, 0xFF, + 0xC7, 0xC9, 0xC8, 0xFF, 0xBD, 0xC0, 0xBF, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, + 0xC3, 0xC8, 0xC6, 0xFF, 0xCB, 0xD0, 0xCE, 0xFF, 0xD2, 0xD7, 0xD5, 0xFF, + 0xD4, 0xD9, 0xD7, 0xFF, 0xD1, 0xD6, 0xD4, 0xFF, 0xC4, 0xC9, 0xC7, 0xFF, + 0xB7, 0xBC, 0xBA, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, + 0xBB, 0xBF, 0xBE, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, + 0xB6, 0xBB, 0xB9, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, + 0x9E, 0xA5, 0xA3, 0xFF, 0x96, 0x9D, 0x9B, 0xFF, 0xAB, 0xB2, 0xB0, 0xFF, + 0xB0, 0xB7, 0xB4, 0xFF, 0xA2, 0xA9, 0xA7, 0xFF, 0xA4, 0xAB, 0xA9, 0xFF, + 0xB2, 0xB9, 0xB7, 0xFF, 0xC3, 0xCB, 0xC8, 0xFF, 0xB9, 0xC0, 0xBE, 0xFF, + 0xB0, 0xB7, 0xB4, 0xFF, 0xA6, 0xAE, 0xAB, 0xFF, 0xA8, 0xAF, 0xAC, 0xFF, + 0xB3, 0xBA, 0xB8, 0xFF, 0xB1, 0xB8, 0xB6, 0xFF, 0xAC, 0xB3, 0xB1, 0xFF, + 0xAA, 0xB1, 0xAF, 0xFF, 0xA4, 0xA9, 0xA8, 0xFF, 0x98, 0x9C, 0x9B, 0xFF, + 0x9B, 0xA0, 0x9E, 0xFF, 0xAD, 0xB1, 0xB0, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, + 0xBE, 0xC3, 0xC1, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, 0xA4, 0xA9, 0xA8, 0xFF, + 0x79, 0x7E, 0x7D, 0xFF, 0x72, 0x77, 0x76, 0xFF, 0x77, 0x7C, 0x7A, 0xFF, + 0x71, 0x76, 0x74, 0xFF, 0x27, 0x2A, 0x29, 0xFF, 0x16, 0x18, 0x17, 0xFF, + 0x0E, 0x10, 0x0F, 0xFF, 0x17, 0x19, 0x18, 0xFF, 0x1D, 0x1F, 0x1E, 0xFF, + 0x1F, 0x21, 0x21, 0xFF, 0x1D, 0x1F, 0x1E, 0xFF, 0x76, 0x76, 0x76, 0xFF, + 0x87, 0x87, 0x87, 0xFF, 0x9C, 0x9C, 0x9C, 0xFF, 0xA7, 0xA6, 0xA7, 0xFF, + 0x9E, 0x9E, 0x9E, 0xFF, 0x97, 0x97, 0x97, 0xFF, 0x9A, 0x9A, 0x9A, 0xFF, + 0x96, 0x96, 0x96, 0xFF, 0x81, 0x81, 0x81, 0xFF, 0x72, 0x72, 0x72, 0xFF, + 0x76, 0x76, 0x76, 0xFF, 0x7B, 0x7B, 0x7B, 0xFF, 0x86, 0x86, 0x86, 0xFF, + 0x77, 0x77, 0x77, 0xFF, 0x74, 0x74, 0x74, 0xFF, 0x7F, 0x7F, 0x7F, 0xFF, + 0x9A, 0x9A, 0x9A, 0xFF, 0x94, 0x94, 0x94, 0xFF, 0x92, 0x92, 0x92, 0xFF, + 0x8F, 0x91, 0x90, 0xFF, 0x98, 0x9B, 0x9A, 0xFF, 0xA4, 0xA6, 0xA5, 0xFF, + 0xA5, 0xA7, 0xA7, 0xFF, 0x61, 0x66, 0x64, 0xFF, 0x94, 0x99, 0x97, 0xFF, + 0xAA, 0xAF, 0xAD, 0xFF, 0x8A, 0x8F, 0x8D, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, + 0xA4, 0xA9, 0xA8, 0xFF, 0x83, 0x88, 0x86, 0xFF, 0x8C, 0x91, 0x8F, 0xFF, + 0x9C, 0xA1, 0xA0, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, 0xB0, 0xB5, 0xB3, 0xFF, + 0xAD, 0xB1, 0xB0, 0xFF, 0xA4, 0xA9, 0xA8, 0xFF, 0x9B, 0xA0, 0x9E, 0xFF, + 0xAA, 0xAF, 0xAD, 0xFF, 0xB2, 0xB7, 0xB6, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, + 0xBC, 0xC1, 0xBF, 0xFF, 0xC0, 0xC5, 0xC4, 0xFF, 0xC4, 0xC9, 0xC7, 0xFF, + 0xC7, 0xCC, 0xCB, 0xFF, 0xCB, 0xD0, 0xCE, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, + 0xC4, 0xC9, 0xC7, 0xFF, 0xC7, 0xCC, 0xCB, 0xFF, 0xCB, 0xD0, 0xCE, 0xFF, + 0xDE, 0xE2, 0xE1, 0xFF, 0xDC, 0xE1, 0xE0, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, + 0xAF, 0xB4, 0xB2, 0xFF, 0xA4, 0xA9, 0xA8, 0xFF, 0xB2, 0xB7, 0xB6, 0xFF, + 0xBD, 0xC2, 0xC0, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, + 0xB0, 0xB5, 0xB3, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, 0xC7, 0xCC, 0xCB, 0xFF, + 0x9D, 0xA4, 0xA2, 0xFF, 0x9E, 0xA5, 0xA3, 0xFF, 0xB7, 0xBE, 0xBB, 0xFF, + 0xBD, 0xC4, 0xC1, 0xFF, 0xB7, 0xBE, 0xBB, 0xFF, 0xBA, 0xC1, 0xBF, 0xFF, + 0xB4, 0xBC, 0xB9, 0xFF, 0xA9, 0xB0, 0xAD, 0xFF, 0xA2, 0xA9, 0xA7, 0xFF, + 0xA3, 0xAA, 0xA8, 0xFF, 0xA4, 0xAB, 0xA9, 0xFF, 0xA6, 0xAE, 0xAB, 0xFF, + 0xB8, 0xBF, 0xBD, 0xFF, 0xB6, 0xBD, 0xBA, 0xFF, 0xB1, 0xB8, 0xB6, 0xFF, + 0xAF, 0xB6, 0xB3, 0xFF, 0xA7, 0xAC, 0xAA, 0xFF, 0x9F, 0xA3, 0xA2, 0xFF, + 0xA2, 0xA7, 0xA5, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, 0xB0, 0xB5, 0xB3, 0xFF, + 0xB9, 0xBE, 0xBD, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, 0xAB, 0xB0, 0xAF, 0xFF, + 0x7E, 0x83, 0x81, 0xFF, 0x6D, 0x71, 0x70, 0xFF, 0x69, 0x6E, 0x6C, 0xFF, + 0x62, 0x67, 0x65, 0xFF, 0x2B, 0x2D, 0x2C, 0xFF, 0x19, 0x1C, 0x1B, 0xFF, + 0x0F, 0x11, 0x10, 0xFF, 0x1F, 0x21, 0x21, 0xFF, 0x18, 0x1A, 0x1A, 0xFF, + 0x17, 0x19, 0x18, 0xFF, 0x1F, 0x21, 0x21, 0xFF, 0x73, 0x75, 0x74, 0xFF, + 0x8C, 0x8C, 0x8C, 0xFF, 0xAC, 0xAC, 0xAC, 0xFF, 0xA8, 0xA8, 0xA8, 0xFF, + 0x90, 0x90, 0x90, 0xFF, 0xBB, 0xBB, 0xBB, 0xFF, 0x99, 0x99, 0x99, 0xFF, + 0x7D, 0x7D, 0x7D, 0xFF, 0x6B, 0x6B, 0x6B, 0xFF, 0x7F, 0x7F, 0x7F, 0xFF, + 0x7E, 0x7E, 0x7E, 0xFF, 0x7D, 0x7D, 0x7D, 0xFF, 0x79, 0x79, 0x79, 0xFF, + 0x8C, 0x8C, 0x8C, 0xFF, 0x9A, 0x9A, 0x9A, 0xFF, 0x99, 0x99, 0x99, 0xFF, + 0x85, 0x85, 0x85, 0xFF, 0x87, 0x87, 0x87, 0xFF, 0xA4, 0xA4, 0xA4, 0xFF, + 0xAB, 0xAD, 0xAC, 0xFF, 0x97, 0x99, 0x99, 0xFF, 0x8A, 0x8D, 0x8C, 0xFF, + 0xC3, 0xC6, 0xC5, 0xFF, 0x80, 0x85, 0x84, 0xFF, 0x71, 0x76, 0x74, 0xFF, + 0xA6, 0xAA, 0xA9, 0xFF, 0x8E, 0x93, 0x92, 0xFF, 0x94, 0x99, 0x97, 0xFF, + 0xA4, 0xA9, 0xA8, 0xFF, 0xA4, 0xA9, 0xA8, 0xFF, 0x89, 0x8D, 0x8C, 0xFF, + 0x87, 0x8C, 0x8B, 0xFF, 0xA2, 0xA7, 0xA5, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, + 0xB0, 0xB5, 0xB3, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, + 0xAF, 0xB4, 0xB2, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, + 0xC0, 0xC5, 0xC4, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, + 0xBE, 0xC3, 0xC1, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, + 0xC9, 0xCD, 0xCC, 0xFF, 0xCD, 0xD2, 0xD0, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, + 0xCB, 0xD0, 0xCE, 0xFF, 0xCD, 0xD2, 0xD0, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, + 0xB2, 0xB7, 0xB6, 0xFF, 0xA2, 0xA7, 0xA5, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, + 0xC5, 0xCA, 0xC8, 0xFF, 0xD0, 0xD4, 0xD3, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, + 0xB9, 0xBE, 0xBD, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, + 0x9E, 0xA5, 0xA3, 0xFF, 0xA3, 0xAA, 0xA8, 0xFF, 0xB7, 0xBE, 0xBB, 0xFF, + 0xB9, 0xC0, 0xBE, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, 0xB9, 0xC0, 0xBE, 0xFF, + 0xAF, 0xB6, 0xB3, 0xFF, 0x9F, 0xA7, 0xA4, 0xFF, 0xA8, 0xAF, 0xAC, 0xFF, + 0xAA, 0xB1, 0xAF, 0xFF, 0xAD, 0xB5, 0xB2, 0xFF, 0xB0, 0xB7, 0xB4, 0xFF, + 0xB2, 0xB9, 0xB7, 0xFF, 0xB1, 0xB8, 0xB6, 0xFF, 0xAD, 0xB5, 0xB2, 0xFF, + 0xAA, 0xB1, 0xAF, 0xFF, 0xAA, 0xAF, 0xAD, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, + 0xAD, 0xB1, 0xB0, 0xFF, 0xB2, 0xB7, 0xB6, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, + 0xB4, 0xB8, 0xB7, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, + 0x85, 0x8A, 0x88, 0xFF, 0x64, 0x69, 0x68, 0xFF, 0x55, 0x5A, 0x58, 0xFF, + 0x4E, 0x53, 0x52, 0xFF, 0x21, 0x24, 0x23, 0xFF, 0x1F, 0x21, 0x21, 0xFF, + 0x11, 0x13, 0x13, 0xFF, 0x1E, 0x20, 0x1F, 0xFF, 0x2B, 0x30, 0x2F, 0xFF, + 0x1B, 0x20, 0x1E, 0xFF, 0x29, 0x2E, 0x2C, 0xFF, 0x6F, 0x72, 0x71, 0xFF, + 0x9F, 0xA2, 0xA1, 0xFF, 0xB9, 0xBB, 0xBA, 0xFF, 0xBD, 0xC0, 0xBF, 0xFF, + 0xA7, 0xAA, 0xA9, 0xFF, 0x64, 0x64, 0x64, 0xFF, 0x6C, 0x6C, 0x6C, 0xFF, + 0x6F, 0x6F, 0x6F, 0xFF, 0x70, 0x70, 0x70, 0xFF, 0x72, 0x72, 0x72, 0xFF, + 0x7D, 0x7D, 0x7D, 0xFF, 0x8C, 0x8C, 0x8C, 0xFF, 0x95, 0x95, 0x95, 0xFF, + 0x8E, 0x90, 0x8F, 0xFF, 0xA7, 0xAA, 0xA9, 0xFF, 0xAC, 0xAE, 0xAD, 0xFF, + 0x96, 0x98, 0x97, 0xFF, 0x90, 0x92, 0x92, 0xFF, 0xB2, 0xB4, 0xB3, 0xFF, + 0xB4, 0xB6, 0xB6, 0xFF, 0x93, 0x98, 0x96, 0xFF, 0x79, 0x7B, 0x7A, 0xFF, + 0xA7, 0xAA, 0xA9, 0xFF, 0xA1, 0xA6, 0xA4, 0xFF, 0x83, 0x88, 0x86, 0xFF, + 0x89, 0x8D, 0x8C, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, + 0xAE, 0xB3, 0xB1, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, 0x9E, 0xA2, 0xA1, 0xFF, + 0x8E, 0x93, 0x92, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, 0xAA, 0xAF, 0xAD, 0xFF, + 0xB4, 0xB8, 0xB7, 0xFF, 0xB0, 0xB5, 0xB3, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, + 0xAB, 0xB0, 0xAF, 0xFF, 0xB4, 0xB8, 0xB7, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, + 0xBD, 0xC2, 0xC0, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, 0xB4, 0xB8, 0xB7, 0xFF, + 0xB8, 0xBD, 0xBB, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, + 0xC7, 0xCC, 0xCB, 0xFF, 0xCE, 0xD3, 0xD2, 0xFF, 0xCC, 0xD1, 0xCF, 0xFF, + 0xC7, 0xCC, 0xCB, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, + 0xBC, 0xC1, 0xBF, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, + 0xC9, 0xCD, 0xCC, 0xFF, 0xD7, 0xDB, 0xDA, 0xFF, 0xCE, 0xD3, 0xD2, 0xFF, + 0xBD, 0xC2, 0xC0, 0xFF, 0xB2, 0xB7, 0xB6, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, + 0xA5, 0xAC, 0xAA, 0xFF, 0x9E, 0xA5, 0xA3, 0xFF, 0xA6, 0xAE, 0xAB, 0xFF, + 0xAC, 0xB3, 0xB1, 0xFF, 0xA5, 0xAC, 0xAA, 0xFF, 0x9F, 0xA7, 0xA4, 0xFF, + 0xA3, 0xAA, 0xA8, 0xFF, 0xAC, 0xB3, 0xB1, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, + 0xB8, 0xBF, 0xBD, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, + 0xAA, 0xB1, 0xAF, 0xFF, 0xA6, 0xAE, 0xAB, 0xFF, 0xA3, 0xAA, 0xA8, 0xFF, + 0xA1, 0xA8, 0xA5, 0xFF, 0xAD, 0xB1, 0xB0, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, + 0xB5, 0xBA, 0xB8, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, + 0xB4, 0xB8, 0xB7, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0xAD, 0xB1, 0xB0, 0xFF, + 0x8A, 0x8F, 0x8D, 0xFF, 0x5F, 0x63, 0x62, 0xFF, 0x47, 0x4C, 0x4B, 0xFF, + 0x3F, 0x44, 0x42, 0xFF, 0x13, 0x16, 0x15, 0xFF, 0x20, 0x23, 0x22, 0xFF, + 0x11, 0x13, 0x13, 0xFF, 0x18, 0x1A, 0x1A, 0xFF, 0x26, 0x2A, 0x29, 0xFF, + 0x1F, 0x23, 0x22, 0xFF, 0x4C, 0x51, 0x4F, 0xFF, 0x9A, 0x9F, 0x9D, 0xFF, + 0x9F, 0xA2, 0xA1, 0xFF, 0x9C, 0x9E, 0x9D, 0xFF, 0x85, 0x88, 0x87, 0xFF, + 0x67, 0x6A, 0x69, 0xFF, 0x61, 0x61, 0x61, 0xFF, 0x62, 0x62, 0x62, 0xFF, + 0x69, 0x69, 0x69, 0xFF, 0x73, 0x73, 0x73, 0xFF, 0x72, 0x72, 0x72, 0xFF, + 0x7F, 0x7F, 0x7F, 0xFF, 0x92, 0x92, 0x92, 0xFF, 0x9E, 0x9E, 0x9E, 0xFF, + 0x9A, 0x9D, 0x9C, 0xFF, 0xA7, 0xAA, 0xA9, 0xFF, 0xAA, 0xAC, 0xAB, 0xFF, + 0xA0, 0xA3, 0xA2, 0xFF, 0x99, 0x9C, 0x9B, 0xFF, 0xAE, 0xB1, 0xB0, 0xFF, + 0xAD, 0xB1, 0xB0, 0xFF, 0x98, 0x9C, 0x9B, 0xFF, 0x85, 0x88, 0x87, 0xFF, + 0x90, 0x92, 0x92, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, 0x85, 0x8A, 0x88, 0xFF, + 0x7B, 0x7F, 0x7E, 0xFF, 0x9F, 0xA3, 0xA2, 0xFF, 0x98, 0x9C, 0x9B, 0xFF, + 0x97, 0x9B, 0x9A, 0xFF, 0x9C, 0xA1, 0xA0, 0xFF, 0xA2, 0xA7, 0xA5, 0xFF, + 0x92, 0x97, 0x95, 0xFF, 0x75, 0x7A, 0x78, 0xFF, 0x83, 0x88, 0x86, 0xFF, + 0xAF, 0xB4, 0xB2, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, 0x9E, 0xA2, 0xA1, 0xFF, + 0xA1, 0xA6, 0xA4, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, + 0xB2, 0xB7, 0xB6, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, + 0xB6, 0xBB, 0xB9, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, + 0xC2, 0xC6, 0xC5, 0xFF, 0xCB, 0xD0, 0xCE, 0xFF, 0xD3, 0xD8, 0xD6, 0xFF, + 0xD4, 0xD9, 0xD7, 0xFF, 0xD1, 0xD6, 0xD4, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, + 0xC5, 0xCA, 0xC8, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, + 0xC6, 0xCB, 0xC9, 0xFF, 0xD0, 0xD4, 0xD3, 0xFF, 0xC7, 0xCC, 0xCB, 0xFF, + 0xBB, 0xBF, 0xBE, 0xFF, 0xAB, 0xB0, 0xAF, 0xFF, 0xA4, 0xA9, 0xA8, 0xFF, + 0xB3, 0xBA, 0xB8, 0xFF, 0x9F, 0xA7, 0xA4, 0xFF, 0x9D, 0xA4, 0xA2, 0xFF, + 0xA4, 0xAB, 0xA9, 0xFF, 0xAA, 0xB1, 0xAF, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, + 0xC1, 0xC8, 0xC6, 0xFF, 0xC0, 0xC7, 0xC5, 0xFF, 0xC2, 0xCA, 0xC7, 0xFF, + 0x9C, 0xA3, 0xA1, 0xFF, 0xA8, 0xAF, 0xAC, 0xFF, 0xBB, 0xC3, 0xC0, 0xFF, + 0x9F, 0xA7, 0xA4, 0xFF, 0x94, 0x9B, 0x99, 0xFF, 0xAA, 0xB1, 0xAF, 0xFF, + 0xB7, 0xBE, 0xBB, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, + 0xB0, 0xB5, 0xB3, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, + 0xB5, 0xBA, 0xB8, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, + 0xA3, 0xA8, 0xA7, 0xFF, 0x61, 0x66, 0x64, 0xFF, 0x34, 0x38, 0x37, 0xFF, + 0x24, 0x29, 0x28, 0xFF, 0x18, 0x1C, 0x1B, 0xFF, 0x0B, 0x10, 0x0E, 0xFF, + 0x0E, 0x13, 0x11, 0xFF, 0x28, 0x2D, 0x2B, 0xFF, 0x26, 0x2A, 0x29, 0xFF, + 0x23, 0x28, 0x26, 0xFF, 0x6E, 0x73, 0x71, 0xFF, 0x8E, 0x93, 0x92, 0xFF, + 0x74, 0x76, 0x76, 0xFF, 0x59, 0x5C, 0x5B, 0xFF, 0x49, 0x4B, 0x4B, 0xFF, + 0x56, 0x58, 0x57, 0xFF, 0x64, 0x66, 0x65, 0xFF, 0x59, 0x5C, 0x5B, 0xFF, + 0x6F, 0x72, 0x71, 0xFF, 0x6C, 0x6E, 0x6D, 0xFF, 0x6C, 0x6E, 0x6D, 0xFF, + 0x83, 0x86, 0x85, 0xFF, 0xAB, 0xAD, 0xAC, 0xFF, 0x9E, 0xA0, 0xA0, 0xFF, + 0xB1, 0xB3, 0xB2, 0xFF, 0xB1, 0xB3, 0xB2, 0xFF, 0xB1, 0xB3, 0xB2, 0xFF, + 0xB1, 0xB3, 0xB2, 0xFF, 0x99, 0x9E, 0x9C, 0xFF, 0x9B, 0xA0, 0x9E, 0xFF, + 0x9F, 0xA3, 0xA2, 0xFF, 0xA1, 0xA6, 0xA4, 0xFF, 0x8C, 0x91, 0x8F, 0xFF, + 0xA1, 0xA6, 0xA4, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, 0xAB, 0xB0, 0xAF, 0xFF, + 0x9E, 0xA2, 0xA1, 0xFF, 0x94, 0x99, 0x97, 0xFF, 0x9E, 0xA2, 0xA1, 0xFF, + 0x9F, 0xA3, 0xA2, 0xFF, 0xA2, 0xA7, 0xA5, 0xFF, 0xAA, 0xAF, 0xAD, 0xFF, + 0xB5, 0xBA, 0xB8, 0xFF, 0xAD, 0xB1, 0xB0, 0xFF, 0x85, 0x8A, 0x88, 0xFF, + 0x99, 0x9E, 0x9C, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, + 0xAB, 0xB0, 0xAF, 0xFF, 0xAA, 0xAF, 0xAD, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, + 0xA9, 0xAE, 0xAC, 0xFF, 0xAC, 0xB3, 0xB1, 0xFF, 0xB0, 0xB7, 0xB4, 0xFF, + 0xB4, 0xBC, 0xB9, 0xFF, 0xB7, 0xBE, 0xBB, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, + 0xB6, 0xBD, 0xBA, 0xFF, 0xBB, 0xC3, 0xC0, 0xFF, 0xC9, 0xD1, 0xCE, 0xFF, + 0xD0, 0xD8, 0xD5, 0xFF, 0xCA, 0xD2, 0xCF, 0xFF, 0xCE, 0xD5, 0xD3, 0xFF, + 0xDA, 0xE1, 0xDE, 0xFF, 0xCD, 0xD4, 0xD2, 0xFF, 0xC1, 0xC8, 0xC6, 0xFF, + 0xC1, 0xC8, 0xC6, 0xFF, 0xC6, 0xCD, 0xCB, 0xFF, 0xCC, 0xD1, 0xCF, 0xFF, + 0xBE, 0xC3, 0xC1, 0xFF, 0xAD, 0xB1, 0xB0, 0xFF, 0xA2, 0xA7, 0xA5, 0xFF, + 0xB3, 0xBA, 0xB8, 0xFF, 0xAA, 0xB1, 0xAF, 0xFF, 0xAF, 0xB6, 0xB3, 0xFF, + 0xBB, 0xC3, 0xC0, 0xFF, 0xBF, 0xC6, 0xC4, 0xFF, 0xC5, 0xCC, 0xC9, 0xFF, + 0xC3, 0xCB, 0xC8, 0xFF, 0xBA, 0xC1, 0xBF, 0xFF, 0xA6, 0xAE, 0xAB, 0xFF, + 0x9E, 0xA5, 0xA3, 0xFF, 0xAD, 0xB5, 0xB2, 0xFF, 0xBD, 0xC4, 0xC1, 0xFF, + 0xA6, 0xAE, 0xAB, 0xFF, 0xB0, 0xB7, 0xB4, 0xFF, 0xC2, 0xCA, 0xC7, 0xFF, + 0xC2, 0xCA, 0xC7, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, + 0xB8, 0xBD, 0xBB, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, + 0xBD, 0xC2, 0xC0, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0xAB, 0xB0, 0xAF, 0xFF, + 0x8E, 0x93, 0x92, 0xFF, 0x53, 0x58, 0x56, 0xFF, 0x2A, 0x2F, 0x2D, 0xFF, + 0x19, 0x1E, 0x1C, 0xFF, 0x14, 0x19, 0x17, 0xFF, 0x0F, 0x14, 0x13, 0xFF, + 0x14, 0x19, 0x17, 0xFF, 0x20, 0x25, 0x23, 0xFF, 0x21, 0x26, 0x24, 0xFF, + 0x28, 0x2D, 0x2B, 0xFF, 0x55, 0x5A, 0x58, 0xFF, 0x56, 0x5B, 0x5A, 0xFF, + 0x4E, 0x50, 0x4F, 0xFF, 0x56, 0x58, 0x57, 0xFF, 0x53, 0x56, 0x55, 0xFF, + 0x50, 0x52, 0x52, 0xFF, 0x68, 0x6B, 0x6A, 0xFF, 0x65, 0x67, 0x66, 0xFF, + 0x72, 0x74, 0x73, 0xFF, 0x74, 0x76, 0x76, 0xFF, 0x6E, 0x71, 0x70, 0xFF, + 0x8C, 0x8F, 0x8E, 0xFF, 0xAB, 0xAD, 0xAC, 0xFF, 0xA5, 0xA7, 0xA7, 0xFF, + 0xB1, 0xB3, 0xB2, 0xFF, 0xB1, 0xB3, 0xB2, 0xFF, 0xB1, 0xB3, 0xB2, 0xFF, + 0xB1, 0xB3, 0xB2, 0xFF, 0x9B, 0xA0, 0x9E, 0xFF, 0xA1, 0xA6, 0xA4, 0xFF, + 0xA8, 0xAD, 0xAB, 0xFF, 0xAD, 0xB1, 0xB0, 0xFF, 0x95, 0x9A, 0x99, 0xFF, + 0xA6, 0xAA, 0xA9, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, + 0xA4, 0xA9, 0xA8, 0xFF, 0x8E, 0x93, 0x92, 0xFF, 0x8D, 0x92, 0x90, 0xFF, + 0x9F, 0xA3, 0xA2, 0xFF, 0xA8, 0xAD, 0xAB, 0xFF, 0xAA, 0xAF, 0xAD, 0xFF, + 0xB2, 0xB7, 0xB6, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, 0x9C, 0xA1, 0xA0, 0xFF, + 0x8A, 0x8F, 0x8D, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, + 0xB9, 0xBE, 0xBD, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, + 0xAA, 0xAF, 0xAD, 0xFF, 0xB4, 0xBC, 0xB9, 0xFF, 0xB7, 0xBE, 0xBB, 0xFF, + 0xBB, 0xC3, 0xC0, 0xFF, 0xBE, 0xC5, 0xC2, 0xFF, 0xB9, 0xC0, 0xBE, 0xFF, + 0xB6, 0xBD, 0xBA, 0xFF, 0xB9, 0xC0, 0xBE, 0xFF, 0xC1, 0xC8, 0xC6, 0xFF, + 0xCA, 0xD2, 0xCF, 0xFF, 0xCF, 0xD6, 0xD4, 0xFF, 0xD3, 0xDA, 0xD7, 0xFF, + 0xD6, 0xDD, 0xDB, 0xFF, 0xC5, 0xCC, 0xC9, 0xFF, 0xC3, 0xCB, 0xC8, 0xFF, + 0xBF, 0xC6, 0xC4, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, + 0xBB, 0xBF, 0xBE, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, 0xA3, 0xA8, 0xA7, 0xFF, + 0xB8, 0xBF, 0xBD, 0xFF, 0xB4, 0xBC, 0xB9, 0xFF, 0xB9, 0xC0, 0xBE, 0xFF, + 0xC6, 0xCD, 0xCB, 0xFF, 0xC5, 0xCC, 0xC9, 0xFF, 0xC7, 0xCE, 0xCC, 0xFF, + 0xC1, 0xC8, 0xC6, 0xFF, 0xB4, 0xBC, 0xB9, 0xFF, 0x97, 0x9E, 0x9C, 0xFF, + 0xB2, 0xB9, 0xB7, 0xFF, 0xBA, 0xC1, 0xBF, 0xFF, 0xBD, 0xC4, 0xC1, 0xFF, + 0xB4, 0xBC, 0xB9, 0xFF, 0xC5, 0xCC, 0xC9, 0xFF, 0xD1, 0xD9, 0xD6, 0xFF, + 0xCE, 0xD5, 0xD3, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, + 0xBC, 0xC1, 0xBF, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, + 0xCA, 0xCF, 0xCD, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, 0x8E, 0x93, 0x92, 0xFF, + 0x5C, 0x61, 0x5F, 0xFF, 0x32, 0x37, 0x36, 0xFF, 0x18, 0x1C, 0x1B, 0xFF, + 0x0B, 0x10, 0x0E, 0xFF, 0x12, 0x17, 0x15, 0xFF, 0x15, 0x1A, 0x18, 0xFF, + 0x1A, 0x1F, 0x1D, 0xFF, 0x19, 0x1E, 0x1C, 0xFF, 0x25, 0x2C, 0x2A, 0xFF, + 0x26, 0x2E, 0x2B, 0xFF, 0x40, 0x47, 0x45, 0xFF, 0x3F, 0x44, 0x42, 0xFF, + 0x40, 0x45, 0x44, 0xFF, 0x52, 0x57, 0x55, 0xFF, 0x5A, 0x5F, 0x5D, 0xFF, + 0x53, 0x58, 0x56, 0xFF, 0x71, 0x73, 0x72, 0xFF, 0x74, 0x76, 0x76, 0xFF, + 0x75, 0x78, 0x77, 0xFF, 0x81, 0x83, 0x82, 0xFF, 0x74, 0x76, 0x76, 0xFF, + 0x9C, 0x9E, 0x9D, 0xFF, 0xAD, 0xAF, 0xAF, 0xFF, 0xAF, 0xB2, 0xB1, 0xFF, + 0xAF, 0xB4, 0xB2, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, + 0xAF, 0xB4, 0xB2, 0xFF, 0xA0, 0xA5, 0xA3, 0xFF, 0xA6, 0xAE, 0xAB, 0xFF, + 0xB3, 0xBA, 0xB8, 0xFF, 0xBB, 0xC3, 0xC0, 0xFF, 0xA7, 0xAC, 0xAA, 0xFF, + 0xA6, 0xAA, 0xA9, 0xFF, 0xAA, 0xAF, 0xAD, 0xFF, 0xB2, 0xB7, 0xB6, 0xFF, + 0xAA, 0xAF, 0xAD, 0xFF, 0x9F, 0xA3, 0xA2, 0xFF, 0x8A, 0x8F, 0x8D, 0xFF, + 0x87, 0x8C, 0x8B, 0xFF, 0xAA, 0xAF, 0xAD, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, + 0xAE, 0xB3, 0xB1, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, 0xC0, 0xC5, 0xC4, 0xFF, + 0x93, 0x98, 0x96, 0xFF, 0x80, 0x85, 0x84, 0xFF, 0xAB, 0xB0, 0xAF, 0xFF, + 0xB4, 0xB8, 0xB7, 0xFF, 0xB2, 0xB7, 0xB6, 0xFF, 0xB0, 0xB5, 0xB3, 0xFF, + 0xAF, 0xB4, 0xB2, 0xFF, 0xB6, 0xBD, 0xBA, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, + 0xBD, 0xC4, 0xC1, 0xFF, 0xBF, 0xC6, 0xC4, 0xFF, 0xBD, 0xC4, 0xC1, 0xFF, + 0xBB, 0xC3, 0xC0, 0xFF, 0xBA, 0xC1, 0xBF, 0xFF, 0xBB, 0xC3, 0xC0, 0xFF, + 0xC6, 0xCD, 0xCB, 0xFF, 0xCF, 0xD6, 0xD4, 0xFF, 0xD4, 0xDB, 0xD9, 0xFF, + 0xCE, 0xD5, 0xD3, 0xFF, 0xC0, 0xC7, 0xC5, 0xFF, 0xC3, 0xCB, 0xC8, 0xFF, + 0xBE, 0xC5, 0xC2, 0xFF, 0xB0, 0xB7, 0xB4, 0xFF, 0xAD, 0xB1, 0xB0, 0xFF, + 0xB7, 0xBC, 0xBA, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, 0xB0, 0xB5, 0xB3, 0xFF, + 0xC0, 0xC7, 0xC5, 0xFF, 0xB3, 0xBA, 0xB8, 0xFF, 0xB1, 0xB8, 0xB6, 0xFF, + 0xC0, 0xC7, 0xC5, 0xFF, 0xB7, 0xBE, 0xBB, 0xFF, 0xBE, 0xC5, 0xC2, 0xFF, + 0xBE, 0xC5, 0xC2, 0xFF, 0xB2, 0xB9, 0xB7, 0xFF, 0x9D, 0xA4, 0xA2, 0xFF, + 0xCA, 0xD2, 0xCF, 0xFF, 0xC7, 0xCE, 0xCC, 0xFF, 0xBA, 0xC1, 0xBF, 0xFF, + 0xBB, 0xC3, 0xC0, 0xFF, 0xC7, 0xCE, 0xCC, 0xFF, 0xC9, 0xD1, 0xCE, 0xFF, + 0xCC, 0xD3, 0xD0, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, 0xC0, 0xC5, 0xC4, 0xFF, + 0xB8, 0xBD, 0xBB, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, 0xCB, 0xD0, 0xCE, 0xFF, + 0xC6, 0xCB, 0xC9, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, 0x7B, 0x7F, 0x7E, 0xFF, + 0x30, 0x35, 0x33, 0xFF, 0x18, 0x1C, 0x1B, 0xFF, 0x0F, 0x14, 0x13, 0xFF, + 0x0A, 0x0E, 0x0D, 0xFF, 0x0E, 0x13, 0x11, 0xFF, 0x1D, 0x22, 0x21, 0xFF, + 0x1D, 0x22, 0x21, 0xFF, 0x1A, 0x1F, 0x1D, 0xFF, 0x2B, 0x32, 0x30, 0xFF, + 0x23, 0x2A, 0x28, 0xFF, 0x3A, 0x41, 0x3F, 0xFF, 0x57, 0x5E, 0x5C, 0xFF, + 0x5A, 0x5F, 0x5D, 0xFF, 0x5C, 0x61, 0x5F, 0xFF, 0x6D, 0x71, 0x70, 0xFF, + 0x82, 0x86, 0x85, 0xFF, 0x75, 0x78, 0x77, 0xFF, 0x80, 0x82, 0x81, 0xFF, + 0x78, 0x7A, 0x79, 0xFF, 0x89, 0x8B, 0x8B, 0xFF, 0x78, 0x7A, 0x79, 0xFF, + 0xA5, 0xA7, 0xA7, 0xFF, 0xAF, 0xB2, 0xB1, 0xFF, 0xB5, 0xB8, 0xB7, 0xFF, + 0xAF, 0xB4, 0xB2, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, + 0xB0, 0xB5, 0xB3, 0xFF, 0xA1, 0xA8, 0xA5, 0xFF, 0xAB, 0xB2, 0xB0, 0xFF, + 0xBB, 0xC3, 0xC0, 0xFF, 0xC7, 0xCE, 0xCC, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, + 0xA2, 0xA7, 0xA5, 0xFF, 0x95, 0x9A, 0x99, 0xFF, 0x98, 0x9C, 0x9B, 0xFF, + 0xA8, 0xAD, 0xAB, 0xFF, 0xAB, 0xB0, 0xAF, 0xFF, 0x98, 0x9C, 0x9B, 0xFF, + 0x7B, 0x7F, 0x7E, 0xFF, 0x9F, 0xA3, 0xA2, 0xFF, 0xAD, 0xB1, 0xB0, 0xFF, + 0xAF, 0xB4, 0xB2, 0xFF, 0xAB, 0xB0, 0xAF, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, + 0xB2, 0xB7, 0xB6, 0xFF, 0xA0, 0xA5, 0xA3, 0xFF, 0x94, 0x99, 0x97, 0xFF, + 0x9F, 0xA3, 0xA2, 0xFF, 0xA6, 0xAA, 0xA9, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, + 0xB5, 0xBA, 0xB8, 0xFF, 0xB1, 0xB8, 0xB6, 0xFF, 0xB3, 0xBA, 0xB8, 0xFF, + 0xB8, 0xBF, 0xBD, 0xFF, 0xBA, 0xC1, 0xBF, 0xFF, 0xBE, 0xC5, 0xC2, 0xFF, + 0xC2, 0xCA, 0xC7, 0xFF, 0xBF, 0xC6, 0xC4, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, + 0xC1, 0xC8, 0xC6, 0xFF, 0xCE, 0xD5, 0xD3, 0xFF, 0xCE, 0xD5, 0xD3, 0xFF, + 0xC5, 0xCC, 0xC9, 0xFF, 0xB9, 0xC0, 0xBE, 0xFF, 0xC0, 0xC7, 0xC5, 0xFF, + 0xBD, 0xC4, 0xC1, 0xFF, 0xB0, 0xB7, 0xB4, 0xFF, 0xAB, 0xB0, 0xAF, 0xFF, + 0xB1, 0xB6, 0xB4, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, + 0xC0, 0xC7, 0xC5, 0xFF, 0xB6, 0xBD, 0xBA, 0xFF, 0xB9, 0xC0, 0xBE, 0xFF, + 0xB8, 0xBF, 0xBD, 0xFF, 0xB6, 0xBD, 0xBA, 0xFF, 0xBF, 0xC6, 0xC4, 0xFF, + 0xBE, 0xC5, 0xC2, 0xFF, 0xAF, 0xB6, 0xB3, 0xFF, 0xB0, 0xB7, 0xB4, 0xFF, + 0xC0, 0xC7, 0xC5, 0xFF, 0xC6, 0xCD, 0xCB, 0xFF, 0xBE, 0xC5, 0xC2, 0xFF, + 0xC9, 0xD1, 0xCE, 0xFF, 0xBE, 0xC5, 0xC2, 0xFF, 0xBB, 0xC3, 0xC0, 0xFF, + 0xC3, 0xCB, 0xC8, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, + 0xB4, 0xB8, 0xB7, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, + 0xB4, 0xB8, 0xB7, 0xFF, 0x95, 0x9A, 0x99, 0xFF, 0x5C, 0x61, 0x5F, 0xFF, + 0x16, 0x1B, 0x1A, 0xFF, 0x0B, 0x10, 0x0E, 0xFF, 0x12, 0x17, 0x15, 0xFF, + 0x08, 0x0D, 0x0C, 0xFF, 0x07, 0x0C, 0x0A, 0xFF, 0x0D, 0x12, 0x10, 0xFF, + 0x08, 0x0D, 0x0C, 0xFF, 0x08, 0x0D, 0x0C, 0xFF, 0x0E, 0x15, 0x13, 0xFF, + 0x25, 0x2C, 0x2A, 0xFF, 0x40, 0x47, 0x45, 0xFF, 0x5F, 0x67, 0x64, 0xFF, + 0x6A, 0x6F, 0x6D, 0xFF, 0x6D, 0x71, 0x70, 0xFF, 0x7B, 0x7F, 0x7E, 0xFF, + 0x8E, 0x93, 0x92, 0xFF, 0x81, 0x83, 0x82, 0xFF, 0x82, 0x84, 0x84, 0xFF, + 0x92, 0x95, 0x94, 0xFF, 0x83, 0x86, 0x85, 0xFF, 0x9C, 0x9E, 0x9D, 0xFF, + 0x93, 0x96, 0x95, 0xFF, 0xB1, 0xB3, 0xB2, 0xFF, 0xBD, 0xC0, 0xBF, 0xFF, + 0xAE, 0xB3, 0xB1, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, 0xC0, 0xC5, 0xC4, 0xFF, + 0xB6, 0xBB, 0xB9, 0xFF, 0xB1, 0xB8, 0xB6, 0xFF, 0xB1, 0xB8, 0xB6, 0xFF, + 0xB1, 0xB8, 0xB6, 0xFF, 0xB1, 0xB8, 0xB6, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, + 0xA0, 0xA5, 0xA3, 0xFF, 0x8B, 0x90, 0x8E, 0xFF, 0x89, 0x8D, 0x8C, 0xFF, + 0xA4, 0xA9, 0xA8, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, + 0x90, 0x94, 0x93, 0xFF, 0x9C, 0xA1, 0xA0, 0xFF, 0xA2, 0xA7, 0xA5, 0xFF, + 0xAE, 0xB3, 0xB1, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, 0xB4, 0xB8, 0xB7, 0xFF, + 0xC9, 0xCD, 0xCC, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, 0x8B, 0x90, 0x8E, 0xFF, + 0x9C, 0xA1, 0xA0, 0xFF, 0x9F, 0xA3, 0xA2, 0xFF, 0xAD, 0xB1, 0xB0, 0xFF, + 0xBD, 0xC2, 0xC0, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, 0xA4, 0xAB, 0xA9, 0xFF, + 0xA9, 0xB0, 0xAD, 0xFF, 0xC2, 0xCA, 0xC7, 0xFF, 0xC7, 0xCE, 0xCC, 0xFF, + 0xCF, 0xD6, 0xD4, 0xFF, 0xCC, 0xD3, 0xD0, 0xFF, 0xBE, 0xC5, 0xC2, 0xFF, + 0xBA, 0xC1, 0xBF, 0xFF, 0xC5, 0xCC, 0xC9, 0xFF, 0xCA, 0xD2, 0xCF, 0xFF, + 0xC2, 0xCA, 0xC7, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, 0xBD, 0xC4, 0xC1, 0xFF, + 0xBB, 0xC3, 0xC0, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, + 0xAE, 0xB3, 0xB1, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, + 0xB4, 0xBC, 0xB9, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, 0xC1, 0xC8, 0xC6, 0xFF, + 0xC5, 0xCC, 0xC9, 0xFF, 0xBA, 0xC1, 0xBF, 0xFF, 0xC0, 0xC7, 0xC5, 0xFF, + 0xBE, 0xC5, 0xC2, 0xFF, 0xAA, 0xB1, 0xAF, 0xFF, 0xB3, 0xBA, 0xB8, 0xFF, + 0xC3, 0xCB, 0xC8, 0xFF, 0xC9, 0xD1, 0xCE, 0xFF, 0xC2, 0xCA, 0xC7, 0xFF, + 0xCA, 0xD2, 0xCF, 0xFF, 0xC2, 0xCA, 0xC7, 0xFF, 0xBD, 0xC4, 0xC1, 0xFF, + 0xBD, 0xC4, 0xC1, 0xFF, 0xC4, 0xC9, 0xC7, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, + 0xC0, 0xC5, 0xC4, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, + 0xAF, 0xB4, 0xB2, 0xFF, 0x8E, 0x93, 0x92, 0xFF, 0x59, 0x5E, 0x5C, 0xFF, + 0x1A, 0x1F, 0x1D, 0xFF, 0x0F, 0x14, 0x13, 0xFF, 0x13, 0x18, 0x16, 0xFF, + 0x0C, 0x11, 0x0F, 0xFF, 0x01, 0x06, 0x05, 0xFF, 0x08, 0x0D, 0x0C, 0xFF, + 0x07, 0x0C, 0x0A, 0xFF, 0x08, 0x0D, 0x0C, 0xFF, 0x0F, 0x16, 0x14, 0xFF, + 0x46, 0x4D, 0x4B, 0xFF, 0x61, 0x68, 0x65, 0xFF, 0x6B, 0x72, 0x70, 0xFF, + 0x6F, 0x74, 0x72, 0xFF, 0x82, 0x86, 0x85, 0xFF, 0x91, 0x96, 0x94, 0xFF, + 0x92, 0x97, 0x95, 0xFF, 0x9C, 0x9E, 0x9D, 0xFF, 0x98, 0x9B, 0x9A, 0xFF, + 0x9A, 0x9D, 0x9C, 0xFF, 0x8A, 0x8D, 0x8C, 0xFF, 0x9E, 0xA0, 0xA0, 0xFF, + 0x9A, 0x9D, 0x9C, 0xFF, 0xAD, 0xAF, 0xAF, 0xFF, 0xBA, 0xBC, 0xBB, 0xFF, + 0xBB, 0xBF, 0xBE, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, + 0xBE, 0xC3, 0xC1, 0xFF, 0xB7, 0xBE, 0xBB, 0xFF, 0xB4, 0xBC, 0xB9, 0xFF, + 0xB4, 0xBC, 0xB9, 0xFF, 0xB4, 0xBC, 0xB9, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, + 0xBC, 0xC1, 0xBF, 0xFF, 0xAB, 0xB0, 0xAF, 0xFF, 0x99, 0x9E, 0x9C, 0xFF, + 0xA1, 0xA6, 0xA4, 0xFF, 0xB0, 0xB5, 0xB3, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, + 0xB5, 0xBA, 0xB8, 0xFF, 0xA0, 0xA5, 0xA3, 0xFF, 0xA0, 0xA5, 0xA3, 0xFF, + 0xB6, 0xBB, 0xB9, 0xFF, 0xC4, 0xC9, 0xC7, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, + 0xC7, 0xCC, 0xCB, 0xFF, 0xCD, 0xD2, 0xD0, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, + 0xA2, 0xA7, 0xA5, 0xFF, 0xA2, 0xA7, 0xA5, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, + 0xBC, 0xC1, 0xBF, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, 0xA4, 0xAB, 0xA9, 0xFF, + 0xA9, 0xB0, 0xAD, 0xFF, 0xC2, 0xCA, 0xC7, 0xFF, 0xCA, 0xD2, 0xCF, 0xFF, + 0xD1, 0xD9, 0xD6, 0xFF, 0xD1, 0xD9, 0xD6, 0xFF, 0xCA, 0xD2, 0xCF, 0xFF, + 0xBE, 0xC5, 0xC2, 0xFF, 0xBB, 0xC3, 0xC0, 0xFF, 0xC1, 0xC8, 0xC6, 0xFF, + 0xC6, 0xCD, 0xCB, 0xFF, 0xC6, 0xCD, 0xCB, 0xFF, 0xC2, 0xCA, 0xC7, 0xFF, + 0xC5, 0xCC, 0xC9, 0xFF, 0xC8, 0xCF, 0xCD, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, + 0xBD, 0xC2, 0xC0, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, 0xCD, 0xD2, 0xD0, 0xFF, + 0xB6, 0xBD, 0xBA, 0xFF, 0xC0, 0xC7, 0xC5, 0xFF, 0xC6, 0xCD, 0xCB, 0xFF, + 0xC9, 0xD1, 0xCE, 0xFF, 0xBF, 0xC6, 0xC4, 0xFF, 0xC2, 0xCA, 0xC7, 0xFF, + 0xBB, 0xC3, 0xC0, 0xFF, 0xA4, 0xAB, 0xA9, 0xFF, 0xB7, 0xBE, 0xBB, 0xFF, + 0xC7, 0xCE, 0xCC, 0xFF, 0xCD, 0xD4, 0xD2, 0xFF, 0xC6, 0xCD, 0xCB, 0xFF, + 0xCC, 0xD3, 0xD0, 0xFF, 0xC9, 0xD1, 0xCE, 0xFF, 0xBF, 0xC6, 0xC4, 0xFF, + 0xB3, 0xBA, 0xB8, 0xFF, 0xC7, 0xCC, 0xCB, 0xFF, 0xCC, 0xD1, 0xCF, 0xFF, + 0xCA, 0xCF, 0xCD, 0xFF, 0xC7, 0xCC, 0xCB, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, + 0xAA, 0xAF, 0xAD, 0xFF, 0x92, 0x97, 0x95, 0xFF, 0x68, 0x6D, 0x6B, 0xFF, + 0x22, 0x27, 0x25, 0xFF, 0x16, 0x1B, 0x1A, 0xFF, 0x16, 0x1B, 0x1A, 0xFF, + 0x13, 0x18, 0x16, 0xFF, 0x04, 0x09, 0x07, 0xFF, 0x0E, 0x13, 0x11, 0xFF, + 0x0F, 0x14, 0x13, 0xFF, 0x14, 0x19, 0x17, 0xFF, 0x2D, 0x35, 0x32, 0xFF, + 0x6B, 0x72, 0x70, 0xFF, 0x7A, 0x81, 0x7F, 0xFF, 0x7F, 0x86, 0x84, 0xFF, + 0x80, 0x85, 0x84, 0xFF, 0x93, 0x98, 0x96, 0xFF, 0xA2, 0xA7, 0xA5, 0xFF, + 0xA3, 0xA8, 0xA7, 0xFF, 0xA4, 0xA6, 0xA5, 0xFF, 0x9E, 0xA0, 0xA0, 0xFF, + 0x92, 0x95, 0x94, 0xFF, 0x97, 0x99, 0x99, 0xFF, 0xA3, 0xA5, 0xA4, 0xFF, + 0xA3, 0xA5, 0xA4, 0xFF, 0xA4, 0xA6, 0xA5, 0xFF, 0xB6, 0xB9, 0xB8, 0xFF, + 0xBF, 0xC4, 0xC2, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, + 0xBE, 0xC3, 0xC1, 0xFF, 0xBB, 0xC3, 0xC0, 0xFF, 0xB9, 0xC0, 0xBE, 0xFF, + 0xB9, 0xC0, 0xBE, 0xFF, 0xB9, 0xC0, 0xBE, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, + 0xC2, 0xC6, 0xC5, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, 0xA4, 0xA9, 0xA8, 0xFF, + 0xA0, 0xA5, 0xA3, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, + 0xC5, 0xCA, 0xC8, 0xFF, 0xB2, 0xB7, 0xB6, 0xFF, 0xA6, 0xAA, 0xA9, 0xFF, + 0xA4, 0xA9, 0xA8, 0xFF, 0xB4, 0xB8, 0xB7, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, + 0xC9, 0xCD, 0xCC, 0xFF, 0xCC, 0xD1, 0xCF, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, + 0xAD, 0xB1, 0xB0, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, + 0xBB, 0xBF, 0xBE, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, 0xA4, 0xAB, 0xA9, 0xFF, + 0xA9, 0xB0, 0xAD, 0xFF, 0xC2, 0xCA, 0xC7, 0xFF, 0xC9, 0xD1, 0xCE, 0xFF, + 0xCF, 0xD6, 0xD4, 0xFF, 0xD5, 0xDC, 0xDA, 0xFF, 0xD6, 0xDD, 0xDB, 0xFF, + 0xC8, 0xCF, 0xCD, 0xFF, 0xBB, 0xC3, 0xC0, 0xFF, 0xB9, 0xC0, 0xBE, 0xFF, + 0xC3, 0xCB, 0xC8, 0xFF, 0xCC, 0xD3, 0xD0, 0xFF, 0xC8, 0xCF, 0xCD, 0xFF, + 0xCA, 0xD2, 0xCF, 0xFF, 0xD0, 0xD8, 0xD5, 0xFF, 0xD5, 0xDA, 0xD9, 0xFF, + 0xD0, 0xD4, 0xD3, 0xFF, 0xCE, 0xD3, 0xD2, 0xFF, 0xD2, 0xD7, 0xD5, 0xFF, + 0xC6, 0xCD, 0xCB, 0xFF, 0xC8, 0xCF, 0xCD, 0xFF, 0xC5, 0xCC, 0xC9, 0xFF, + 0xC1, 0xC8, 0xC6, 0xFF, 0xC3, 0xCB, 0xC8, 0xFF, 0xC3, 0xCB, 0xC8, 0xFF, + 0xB9, 0xC0, 0xBE, 0xFF, 0xA1, 0xA8, 0xA5, 0xFF, 0xBA, 0xC1, 0xBF, 0xFF, + 0xCA, 0xD2, 0xCF, 0xFF, 0xD0, 0xD8, 0xD5, 0xFF, 0xC9, 0xD1, 0xCE, 0xFF, + 0xCD, 0xD4, 0xD2, 0xFF, 0xCD, 0xD4, 0xD2, 0xFF, 0xC0, 0xC7, 0xC5, 0xFF, + 0xAC, 0xB3, 0xB1, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, 0xCC, 0xD1, 0xCF, 0xFF, + 0xCB, 0xD0, 0xCE, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, + 0xAB, 0xB0, 0xAF, 0xFF, 0x9E, 0xA2, 0xA1, 0xFF, 0x83, 0x88, 0x86, 0xFF, + 0x29, 0x2E, 0x2C, 0xFF, 0x1C, 0x21, 0x1F, 0xFF, 0x1D, 0x22, 0x21, 0xFF, + 0x14, 0x19, 0x17, 0xFF, 0x08, 0x0D, 0x0C, 0xFF, 0x14, 0x19, 0x17, 0xFF, + 0x19, 0x1E, 0x1C, 0xFF, 0x1F, 0x23, 0x22, 0xFF, 0x61, 0x68, 0x65, 0xFF, + 0x7E, 0x85, 0x82, 0xFF, 0x78, 0x7F, 0x7D, 0xFF, 0x93, 0x9A, 0x97, 0xFF, + 0x98, 0x9C, 0x9B, 0xFF, 0x9A, 0x9F, 0x9D, 0xFF, 0xA8, 0xAD, 0xAB, 0xFF, + 0xBC, 0xC1, 0xBF, 0xFF, 0xA1, 0xA4, 0xA3, 0xFF, 0x9E, 0xA0, 0xA0, 0xFF, + 0x8E, 0x90, 0x8F, 0xFF, 0xA5, 0xA7, 0xA7, 0xFF, 0xA5, 0xA7, 0xA7, 0xFF, + 0xAA, 0xAC, 0xAB, 0xFF, 0x9E, 0xA0, 0xA0, 0xFF, 0xB4, 0xB6, 0xB6, 0xFF, + 0xB5, 0xBA, 0xB8, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, + 0xB8, 0xBD, 0xBB, 0xFF, 0xBD, 0xC4, 0xC1, 0xFF, 0xBE, 0xC5, 0xC2, 0xFF, + 0xBD, 0xC4, 0xC1, 0xFF, 0xBB, 0xC3, 0xC0, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, + 0xBE, 0xC3, 0xC1, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, 0xA0, 0xA5, 0xA3, 0xFF, + 0x9B, 0xA0, 0x9E, 0xFF, 0xA7, 0xAC, 0xAA, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, + 0xBC, 0xC1, 0xBF, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, 0xAA, 0xAF, 0xAD, 0xFF, + 0x93, 0x98, 0x96, 0xFF, 0x93, 0x98, 0x96, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, + 0xCA, 0xCF, 0xCD, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, + 0xB4, 0xB8, 0xB7, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, 0xB0, 0xB5, 0xB3, 0xFF, + 0xBB, 0xBF, 0xBE, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, 0xA5, 0xAC, 0xAA, 0xFF, + 0xA9, 0xB0, 0xAD, 0xFF, 0xC0, 0xC7, 0xC5, 0xFF, 0xC2, 0xCA, 0xC7, 0xFF, + 0xC8, 0xCF, 0xCD, 0xFF, 0xD3, 0xDA, 0xD7, 0xFF, 0xDA, 0xE1, 0xDE, 0xFF, + 0xD0, 0xD8, 0xD5, 0xFF, 0xC3, 0xCB, 0xC8, 0xFF, 0xBD, 0xC4, 0xC1, 0xFF, + 0xC0, 0xC7, 0xC5, 0xFF, 0xC3, 0xCB, 0xC8, 0xFF, 0xC9, 0xD1, 0xCE, 0xFF, + 0xCE, 0xD5, 0xD3, 0xFF, 0xCC, 0xD3, 0xD0, 0xFF, 0xD3, 0xD8, 0xD6, 0xFF, + 0xDC, 0xE1, 0xE0, 0xFF, 0xD9, 0xDE, 0xDC, 0xFF, 0xCB, 0xD0, 0xCE, 0xFF, + 0xC7, 0xCE, 0xCC, 0xFF, 0xC3, 0xCB, 0xC8, 0xFF, 0xBB, 0xC3, 0xC0, 0xFF, + 0xB7, 0xBE, 0xBB, 0xFF, 0xBA, 0xC1, 0xBF, 0xFF, 0xBD, 0xC4, 0xC1, 0xFF, + 0xC0, 0xC7, 0xC5, 0xFF, 0xC2, 0xCA, 0xC7, 0xFF, 0xC5, 0xCC, 0xC9, 0xFF, + 0xD8, 0xE0, 0xDD, 0xFF, 0xCC, 0xD3, 0xD0, 0xFF, 0xB0, 0xB7, 0xB4, 0xFF, + 0xC0, 0xC7, 0xC5, 0xFF, 0xC6, 0xCD, 0xCB, 0xFF, 0xC2, 0xCA, 0xC7, 0xFF, + 0xB8, 0xBF, 0xBD, 0xFF, 0xD3, 0xD8, 0xD6, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, + 0xC7, 0xCC, 0xCB, 0xFF, 0xCB, 0xD0, 0xCE, 0xFF, 0xAD, 0xB1, 0xB0, 0xFF, + 0x92, 0x97, 0x95, 0xFF, 0x85, 0x8A, 0x88, 0xFF, 0x90, 0x94, 0x93, 0xFF, + 0x79, 0x7E, 0x7D, 0xFF, 0x36, 0x3B, 0x39, 0xFF, 0x19, 0x1E, 0x1C, 0xFF, + 0x1B, 0x20, 0x1E, 0xFF, 0x14, 0x19, 0x17, 0xFF, 0x2D, 0x31, 0x30, 0xFF, + 0x3B, 0x3F, 0x3E, 0xFF, 0x69, 0x6E, 0x6C, 0xFF, 0x7D, 0x82, 0x80, 0xFF, + 0x87, 0x8C, 0x8B, 0xFF, 0x93, 0x98, 0x96, 0xFF, 0x9C, 0xA1, 0xA0, 0xFF, + 0x9C, 0xA1, 0xA0, 0xFF, 0x9E, 0xA2, 0xA1, 0xFF, 0xA0, 0xA5, 0xA3, 0xFF, + 0xA1, 0xA6, 0xA4, 0xFF, 0x99, 0x9E, 0x9C, 0xFF, 0x8E, 0x93, 0x92, 0xFF, + 0x92, 0x97, 0x95, 0xFF, 0x9E, 0xA2, 0xA1, 0xFF, 0xB2, 0xB7, 0xB6, 0xFF, + 0xB5, 0xBA, 0xB8, 0xFF, 0xAB, 0xB0, 0xAF, 0xFF, 0x9B, 0xA0, 0x9E, 0xFF, + 0xB0, 0xB5, 0xB3, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, + 0xB7, 0xBC, 0xBA, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, + 0xC4, 0xC9, 0xC7, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, 0xC7, 0xCC, 0xCB, 0xFF, + 0xC0, 0xC5, 0xC4, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, 0xB0, 0xB5, 0xB3, 0xFF, + 0xA3, 0xA8, 0xA7, 0xFF, 0x93, 0x98, 0x96, 0xFF, 0xA0, 0xA5, 0xA3, 0xFF, + 0xBF, 0xC4, 0xC2, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, 0xD5, 0xDA, 0xD9, 0xFF, + 0xA8, 0xAD, 0xAB, 0xFF, 0x91, 0x96, 0x94, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, + 0xBE, 0xC3, 0xC1, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, + 0xC9, 0xCD, 0xCC, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, 0xB4, 0xB8, 0xB7, 0xFF, + 0xBC, 0xC1, 0xBF, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, + 0xB8, 0xBD, 0xBB, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, + 0xCE, 0xD3, 0xD2, 0xFF, 0xD2, 0xD7, 0xD5, 0xFF, 0xCC, 0xD1, 0xCF, 0xFF, + 0xDE, 0xE2, 0xE1, 0xFF, 0xD7, 0xDB, 0xDA, 0xFF, 0xC7, 0xCC, 0xCB, 0xFF, + 0xBF, 0xC4, 0xC2, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, 0xC7, 0xCC, 0xCB, 0xFF, + 0xCB, 0xD0, 0xCE, 0xFF, 0xD0, 0xD4, 0xD3, 0xFF, 0xC7, 0xCC, 0xCB, 0xFF, + 0xD9, 0xDE, 0xDC, 0xFF, 0xD8, 0xDD, 0xDB, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, + 0xB2, 0xB9, 0xB7, 0xFF, 0xB4, 0xBC, 0xB9, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, + 0xBE, 0xC5, 0xC2, 0xFF, 0xBF, 0xC6, 0xC4, 0xFF, 0xC5, 0xCC, 0xC9, 0xFF, + 0xCC, 0xD3, 0xD0, 0xFF, 0xD1, 0xD9, 0xD6, 0xFF, 0xC2, 0xCA, 0xC7, 0xFF, + 0xC0, 0xC7, 0xC5, 0xFF, 0xB9, 0xC0, 0xBE, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, + 0xC0, 0xC7, 0xC5, 0xFF, 0xBE, 0xC5, 0xC2, 0xFF, 0xC5, 0xCC, 0xC9, 0xFF, + 0xD1, 0xD9, 0xD6, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, 0xD0, 0xD4, 0xD3, 0xFF, + 0xD2, 0xD7, 0xD5, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, 0x9A, 0x9F, 0x9D, 0xFF, + 0x89, 0x8D, 0x8C, 0xFF, 0x90, 0x94, 0x93, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, + 0x82, 0x86, 0x85, 0xFF, 0x52, 0x57, 0x55, 0xFF, 0x58, 0x5C, 0x5B, 0xFF, + 0x67, 0x6C, 0x6A, 0xFF, 0x64, 0x69, 0x68, 0xFF, 0x64, 0x69, 0x68, 0xFF, + 0x68, 0x6D, 0x6B, 0xFF, 0x7C, 0x81, 0x7F, 0xFF, 0x7B, 0x7F, 0x7E, 0xFF, + 0x84, 0x89, 0x87, 0xFF, 0x8E, 0x93, 0x92, 0xFF, 0x95, 0x9A, 0x99, 0xFF, + 0x9A, 0x9F, 0x9D, 0xFF, 0x99, 0x9E, 0x9C, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, + 0x98, 0x9C, 0x9B, 0xFF, 0x99, 0x9E, 0x9C, 0xFF, 0x99, 0x9E, 0x9C, 0xFF, + 0xA0, 0xA5, 0xA3, 0xFF, 0xA7, 0xAC, 0xAA, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, + 0xB0, 0xB5, 0xB3, 0xFF, 0xA7, 0xAC, 0xAA, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, + 0xAF, 0xB4, 0xB2, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, + 0xB7, 0xBC, 0xBA, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, + 0xBF, 0xC4, 0xC2, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, + 0xBE, 0xC3, 0xC1, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, 0xB4, 0xB8, 0xB7, 0xFF, + 0xAB, 0xB0, 0xAF, 0xFF, 0x98, 0x9C, 0x9B, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, + 0xAB, 0xB0, 0xAF, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, 0xD0, 0xD4, 0xD3, 0xFF, + 0xB2, 0xB7, 0xB6, 0xFF, 0x9E, 0xA2, 0xA1, 0xFF, 0xA0, 0xA5, 0xA3, 0xFF, + 0xAF, 0xB4, 0xB2, 0xFF, 0xC7, 0xCC, 0xCB, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, + 0xB7, 0xBC, 0xBA, 0xFF, 0xA8, 0xAD, 0xAB, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, + 0xBD, 0xC2, 0xC0, 0xFF, 0xB4, 0xB8, 0xB7, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, + 0xB9, 0xBE, 0xBD, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, + 0xCC, 0xD1, 0xCF, 0xFF, 0xD1, 0xD6, 0xD4, 0xFF, 0xCE, 0xD3, 0xD2, 0xFF, + 0xD9, 0xDE, 0xDC, 0xFF, 0xDB, 0xE0, 0xDE, 0xFF, 0xD2, 0xD7, 0xD5, 0xFF, + 0xC5, 0xCA, 0xC8, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, 0xC4, 0xC9, 0xC7, 0xFF, + 0xC3, 0xC8, 0xC6, 0xFF, 0xC4, 0xC9, 0xC7, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, + 0xCB, 0xD0, 0xCE, 0xFF, 0xD4, 0xD9, 0xD7, 0xFF, 0xD0, 0xD4, 0xD3, 0xFF, + 0xAD, 0xB5, 0xB2, 0xFF, 0xB1, 0xB8, 0xB6, 0xFF, 0xBA, 0xC1, 0xBF, 0xFF, + 0xC0, 0xC7, 0xC5, 0xFF, 0xC9, 0xD1, 0xCE, 0xFF, 0xC3, 0xCB, 0xC8, 0xFF, + 0xBD, 0xC4, 0xC1, 0xFF, 0xB7, 0xBE, 0xBB, 0xFF, 0xB1, 0xB8, 0xB6, 0xFF, + 0xAD, 0xB5, 0xB2, 0xFF, 0xBA, 0xC1, 0xBF, 0xFF, 0xCE, 0xD5, 0xD3, 0xFF, + 0xC3, 0xCB, 0xC8, 0xFF, 0xBD, 0xC4, 0xC1, 0xFF, 0xBE, 0xC5, 0xC2, 0xFF, + 0xC6, 0xCD, 0xCB, 0xFF, 0xD4, 0xD9, 0xD7, 0xFF, 0xC0, 0xC5, 0xC4, 0xFF, + 0xAF, 0xB4, 0xB2, 0xFF, 0x9C, 0xA1, 0xA0, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, + 0xBF, 0xC4, 0xC2, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0x9F, 0xA3, 0xA2, 0xFF, + 0x86, 0x8B, 0x89, 0xFF, 0x98, 0x9C, 0x9B, 0xFF, 0xA3, 0xA8, 0xA7, 0xFF, + 0xAA, 0xAF, 0xAD, 0xFF, 0x8D, 0x92, 0x90, 0xFF, 0x78, 0x7D, 0x7B, 0xFF, + 0x7C, 0x81, 0x7F, 0xFF, 0x84, 0x89, 0x87, 0xFF, 0x7D, 0x82, 0x80, 0xFF, + 0x84, 0x89, 0x87, 0xFF, 0x8C, 0x91, 0x8F, 0xFF, 0x92, 0x97, 0x95, 0xFF, + 0x97, 0x9B, 0x9A, 0xFF, 0x93, 0x98, 0x96, 0xFF, 0x8C, 0x91, 0x8F, 0xFF, + 0x86, 0x8B, 0x89, 0xFF, 0x8B, 0x90, 0x8E, 0xFF, 0x8E, 0x93, 0x92, 0xFF, + 0x9A, 0x9F, 0x9D, 0xFF, 0x9B, 0xA0, 0x9E, 0xFF, 0x9E, 0xA2, 0xA1, 0xFF, + 0xA0, 0xA5, 0xA3, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, 0x86, 0x8B, 0x89, 0xFF, + 0x9C, 0xA1, 0xA0, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, + 0xB0, 0xB5, 0xB3, 0xFF, 0xC7, 0xCC, 0xCB, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, + 0xB8, 0xBD, 0xBB, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, + 0xBB, 0xBF, 0xBE, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, + 0xB0, 0xB5, 0xB3, 0xFF, 0xA3, 0xA8, 0xA7, 0xFF, 0x98, 0x9C, 0x9B, 0xFF, + 0x97, 0x9B, 0x9A, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, + 0xBD, 0xC2, 0xC0, 0xFF, 0xB2, 0xB7, 0xB6, 0xFF, 0x93, 0x98, 0x96, 0xFF, + 0xA0, 0xA5, 0xA3, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, + 0xB8, 0xBD, 0xBB, 0xFF, 0xB0, 0xB5, 0xB3, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, + 0xBE, 0xC3, 0xC1, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, 0xA7, 0xAC, 0xAA, 0xFF, + 0xBC, 0xC1, 0xBF, 0xFF, 0xC4, 0xC9, 0xC7, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, + 0xC7, 0xCC, 0xCB, 0xFF, 0xCC, 0xD1, 0xCF, 0xFF, 0xD3, 0xD8, 0xD6, 0xFF, + 0xD8, 0xDD, 0xDB, 0xFF, 0xD7, 0xDB, 0xDA, 0xFF, 0xD7, 0xDB, 0xDA, 0xFF, + 0xD0, 0xD4, 0xD3, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, 0xC4, 0xC9, 0xC7, 0xFF, + 0xC0, 0xC5, 0xC4, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, + 0xBF, 0xC4, 0xC2, 0xFF, 0xCD, 0xD2, 0xD0, 0xFF, 0xD5, 0xDA, 0xD9, 0xFF, + 0xB9, 0xC0, 0xBE, 0xFF, 0xBA, 0xC1, 0xBF, 0xFF, 0xC0, 0xC7, 0xC5, 0xFF, + 0xB7, 0xBE, 0xBB, 0xFF, 0xAF, 0xB6, 0xB3, 0xFF, 0xAC, 0xB3, 0xB1, 0xFF, + 0xAA, 0xB1, 0xAF, 0xFF, 0xA8, 0xAF, 0xAC, 0xFF, 0xBB, 0xC3, 0xC0, 0xFF, + 0xBA, 0xC1, 0xBF, 0xFF, 0xBF, 0xC6, 0xC4, 0xFF, 0xB7, 0xBE, 0xBB, 0xFF, + 0xA4, 0xAB, 0xA9, 0xFF, 0xB4, 0xBC, 0xB9, 0xFF, 0xC0, 0xC7, 0xC5, 0xFF, + 0xC0, 0xC7, 0xC5, 0xFF, 0xA2, 0xA7, 0xA5, 0xFF, 0xA3, 0xA8, 0xA7, 0xFF, + 0xAD, 0xB1, 0xB0, 0xFF, 0xB2, 0xB7, 0xB6, 0xFF, 0xB4, 0xB8, 0xB7, 0xFF, + 0xC0, 0xC5, 0xC4, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0xA2, 0xA7, 0xA5, 0xFF, + 0xB4, 0xB8, 0xB7, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, + 0xBF, 0xC4, 0xC2, 0xFF, 0x8A, 0x8F, 0x8D, 0xFF, 0x71, 0x76, 0x74, 0xFF, + 0x87, 0x8C, 0x8B, 0xFF, 0x93, 0x98, 0x96, 0xFF, 0x86, 0x8B, 0x89, 0xFF, + 0x8A, 0x8F, 0x8D, 0xFF, 0x8E, 0x93, 0x92, 0xFF, 0x92, 0x97, 0x95, 0xFF, + 0x9A, 0x9F, 0x9D, 0xFF, 0x92, 0x97, 0x95, 0xFF, 0x86, 0x8B, 0x89, 0xFF, + 0x7E, 0x83, 0x81, 0xFF, 0x95, 0x9A, 0x99, 0xFF, 0x9C, 0xA1, 0xA0, 0xFF, + 0xA3, 0xA8, 0xA7, 0xFF, 0xA3, 0xA8, 0xA7, 0xFF, 0xAB, 0xB0, 0xAF, 0xFF, + 0xAE, 0xB3, 0xB1, 0xFF, 0xA4, 0xA9, 0xA8, 0xFF, 0x94, 0x99, 0x97, 0xFF, + 0x86, 0x8B, 0x89, 0xFF, 0x99, 0x9E, 0x9C, 0xFF, 0xA1, 0xA6, 0xA4, 0xFF, + 0xA9, 0xAE, 0xAC, 0xFF, 0xCD, 0xD2, 0xD0, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, + 0xB5, 0xBA, 0xB8, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, + 0xBB, 0xBF, 0xBE, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, + 0xB1, 0xB6, 0xB4, 0xFF, 0xAD, 0xB1, 0xB0, 0xFF, 0xA0, 0xA5, 0xA3, 0xFF, + 0x91, 0x96, 0x94, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, + 0xC5, 0xCA, 0xC8, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, 0x9B, 0xA0, 0x9E, 0xFF, + 0x94, 0x99, 0x97, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, + 0xCA, 0xCF, 0xCD, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, 0xC7, 0xCC, 0xCB, 0xFF, + 0xBC, 0xC1, 0xBF, 0xFF, 0xAA, 0xAF, 0xAD, 0xFF, 0xA6, 0xAA, 0xA9, 0xFF, + 0xBD, 0xC2, 0xC0, 0xFF, 0xC7, 0xCC, 0xCB, 0xFF, 0xCC, 0xD1, 0xCF, 0xFF, + 0xC5, 0xCA, 0xC8, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, 0xD5, 0xDA, 0xD9, 0xFF, + 0xDB, 0xE0, 0xDE, 0xFF, 0xD5, 0xDA, 0xD9, 0xFF, 0xD2, 0xD7, 0xD5, 0xFF, + 0xD3, 0xD8, 0xD6, 0xFF, 0xCE, 0xD3, 0xD2, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, + 0xC6, 0xCB, 0xC9, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, + 0xBF, 0xC4, 0xC2, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, 0xD2, 0xD7, 0xD5, 0xFF, + 0xBD, 0xC4, 0xC1, 0xFF, 0xB4, 0xBC, 0xB9, 0xFF, 0xA8, 0xAF, 0xAC, 0xFF, + 0x9F, 0xA7, 0xA4, 0xFF, 0x9F, 0xA7, 0xA4, 0xFF, 0xA3, 0xAA, 0xA8, 0xFF, + 0xAA, 0xB1, 0xAF, 0xFF, 0xAD, 0xB5, 0xB2, 0xFF, 0xC0, 0xC5, 0xC4, 0xFF, + 0xB8, 0xBD, 0xBB, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, 0xB4, 0xB8, 0xB7, 0xFF, + 0xA7, 0xAC, 0xAA, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, + 0xA4, 0xA9, 0xA8, 0xFF, 0x80, 0x85, 0x84, 0xFF, 0x9B, 0xA0, 0x9E, 0xFF, + 0xB2, 0xB7, 0xB6, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, 0xC0, 0xC5, 0xC4, 0xFF, + 0xB0, 0xB5, 0xB3, 0xFF, 0xAB, 0xB0, 0xAF, 0xFF, 0xB4, 0xB8, 0xB7, 0xFF, + 0xD0, 0xD4, 0xD3, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, 0xA4, 0xA9, 0xA8, 0xFF, + 0xAB, 0xB0, 0xAF, 0xFF, 0x94, 0x99, 0x97, 0xFF, 0x82, 0x86, 0x85, 0xFF, + 0xA0, 0xA5, 0xA3, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, 0xA2, 0xA7, 0xA5, 0xFF, + 0x98, 0x9C, 0x9B, 0xFF, 0x94, 0x99, 0x97, 0xFF, 0x9B, 0xA0, 0x9E, 0xFF, + 0x9B, 0xA0, 0x9E, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, 0x90, 0x94, 0x93, 0xFF, + 0x8B, 0x90, 0x8E, 0xFF, 0x95, 0x9A, 0x99, 0xFF, 0xA0, 0xA5, 0xA3, 0xFF, + 0xA6, 0xAA, 0xA9, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, + 0xB5, 0xBA, 0xB8, 0xFF, 0xB4, 0xB8, 0xB7, 0xFF, 0xB2, 0xB7, 0xB6, 0xFF, + 0x7D, 0x82, 0x80, 0xFF, 0x8E, 0x93, 0x92, 0xFF, 0x9A, 0x9F, 0x9D, 0xFF, + 0xAF, 0xB4, 0xB2, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, + 0xB1, 0xB6, 0xB4, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, + 0xBD, 0xC2, 0xC0, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, 0xB0, 0xB5, 0xB3, 0xFF, + 0xB2, 0xB7, 0xB6, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, 0xA3, 0xA8, 0xA7, 0xFF, + 0x97, 0x9B, 0x9A, 0xFF, 0x9C, 0xA1, 0xA0, 0xFF, 0xAB, 0xB0, 0xAF, 0xFF, + 0xAA, 0xAF, 0xAD, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0xB2, 0xB7, 0xB6, 0xFF, + 0x8C, 0x91, 0x8F, 0xFF, 0x90, 0x94, 0x93, 0xFF, 0xB4, 0xB8, 0xB7, 0xFF, + 0xCB, 0xD0, 0xCE, 0xFF, 0xD2, 0xD7, 0xD5, 0xFF, 0xC7, 0xCC, 0xCB, 0xFF, + 0xB1, 0xB6, 0xB4, 0xFF, 0x9A, 0x9F, 0x9D, 0xFF, 0x9C, 0xA1, 0xA0, 0xFF, + 0xB2, 0xB7, 0xB6, 0xFF, 0xCE, 0xD3, 0xD2, 0xFF, 0xD5, 0xDA, 0xD9, 0xFF, + 0xCE, 0xD3, 0xD2, 0xFF, 0xC7, 0xCC, 0xCB, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, + 0xCE, 0xD3, 0xD2, 0xFF, 0xCB, 0xD0, 0xCE, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, + 0xC6, 0xCB, 0xC9, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, + 0xBB, 0xBF, 0xBE, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, 0xC4, 0xC9, 0xC7, 0xFF, + 0xC5, 0xCA, 0xC8, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, 0xCB, 0xD0, 0xCE, 0xFF, + 0xAB, 0xB2, 0xB0, 0xFF, 0xA9, 0xB0, 0xAD, 0xFF, 0xA4, 0xAB, 0xA9, 0xFF, + 0xA2, 0xA9, 0xA7, 0xFF, 0xA1, 0xA8, 0xA5, 0xFF, 0xA4, 0xAB, 0xA9, 0xFF, + 0xA9, 0xB0, 0xAD, 0xFF, 0xAD, 0xB5, 0xB2, 0xFF, 0xAA, 0xAF, 0xAD, 0xFF, + 0xB4, 0xB8, 0xB7, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, + 0xAD, 0xB1, 0xB0, 0xFF, 0x92, 0x97, 0x95, 0xFF, 0x8B, 0x90, 0x8E, 0xFF, + 0x9C, 0xA1, 0xA0, 0xFF, 0xA3, 0xA8, 0xA7, 0xFF, 0xA3, 0xA8, 0xA7, 0xFF, + 0xB1, 0xB6, 0xB4, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, 0xD0, 0xD4, 0xD3, 0xFF, + 0xC6, 0xCB, 0xC9, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, + 0xC5, 0xCA, 0xC8, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, + 0xAF, 0xB4, 0xB2, 0xFF, 0x9F, 0xA3, 0xA2, 0xFF, 0x93, 0x98, 0x96, 0xFF, + 0xA7, 0xAC, 0xAA, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, 0xB4, 0xB8, 0xB7, 0xFF, + 0xA6, 0xAA, 0xA9, 0xFF, 0x9F, 0xA3, 0xA2, 0xFF, 0xA2, 0xA7, 0xA5, 0xFF, + 0xA6, 0xAA, 0xA9, 0xFF, 0xA1, 0xA6, 0xA4, 0xFF, 0x9A, 0x9F, 0x9D, 0xFF, + 0x95, 0x9A, 0x99, 0xFF, 0x85, 0x8A, 0x88, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, + 0xA6, 0xAA, 0xA9, 0xFF, 0xB0, 0xB5, 0xB3, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, + 0xB8, 0xBD, 0xBB, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, + 0x91, 0x96, 0x94, 0xFF, 0x95, 0x9A, 0x99, 0xFF, 0xA1, 0xA6, 0xA4, 0xFF, + 0xB2, 0xB7, 0xB6, 0xFF, 0xB4, 0xB8, 0xB7, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, + 0xB7, 0xBC, 0xBA, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, + 0xBE, 0xC3, 0xC1, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, + 0xB5, 0xBA, 0xB8, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, 0xA0, 0xA5, 0xA3, 0xFF, + 0x99, 0x9E, 0x9C, 0xFF, 0x9A, 0x9F, 0x9D, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, + 0xA8, 0xAD, 0xAB, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, 0xCB, 0xD0, 0xCE, 0xFF, + 0x99, 0x9E, 0x9C, 0xFF, 0x8A, 0x8F, 0x8D, 0xFF, 0x9F, 0xA3, 0xA2, 0xFF, + 0xB0, 0xB5, 0xB3, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, + 0xA6, 0xAA, 0xA9, 0xFF, 0x91, 0x96, 0x94, 0xFF, 0x8E, 0x93, 0x92, 0xFF, + 0xA4, 0xA9, 0xA8, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, 0xD4, 0xD9, 0xD7, 0xFF, + 0xD1, 0xD6, 0xD4, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, + 0xB2, 0xB7, 0xB6, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, + 0xAF, 0xB4, 0xB2, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, + 0xB1, 0xB6, 0xB4, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, + 0xC3, 0xC8, 0xC6, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, + 0xAB, 0xB2, 0xB0, 0xFF, 0xA9, 0xB0, 0xAD, 0xFF, 0xA4, 0xAB, 0xA9, 0xFF, + 0xA2, 0xA9, 0xA7, 0xFF, 0xAC, 0xB3, 0xB1, 0xFF, 0xA9, 0xB0, 0xAD, 0xFF, + 0xA4, 0xAB, 0xA9, 0xFF, 0xA1, 0xA8, 0xA5, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, + 0xB9, 0xBE, 0xBD, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, 0xAA, 0xAF, 0xAD, 0xFF, + 0x95, 0x9A, 0x99, 0xFF, 0x82, 0x86, 0x85, 0xFF, 0x8D, 0x92, 0x90, 0xFF, + 0xB5, 0xBA, 0xB8, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, + 0xAE, 0xB3, 0xB1, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, 0xA3, 0xA8, 0xA7, 0xFF, + 0xB4, 0xB8, 0xB7, 0xFF, 0xC4, 0xC9, 0xC7, 0xFF, 0xCB, 0xD0, 0xCE, 0xFF, + 0xB6, 0xBB, 0xB9, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, 0xB0, 0xB5, 0xB3, 0xFF, + 0xB5, 0xBA, 0xB8, 0xFF, 0x95, 0x9A, 0x99, 0xFF, 0x92, 0x97, 0x95, 0xFF, + 0x9A, 0x9F, 0x9D, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, + 0xAD, 0xB1, 0xB0, 0xFF, 0xA1, 0xA6, 0xA4, 0xFF, 0xA1, 0xA6, 0xA4, 0xFF, + 0xA9, 0xAE, 0xAC, 0xFF, 0xA4, 0xA9, 0xA8, 0xFF, 0x9E, 0xA2, 0xA1, 0xFF, + 0x99, 0x9E, 0x9C, 0xFF, 0x95, 0x9A, 0x99, 0xFF, 0xA7, 0xAC, 0xAA, 0xFF, + 0xB7, 0xBC, 0xBA, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, 0xAB, 0xB0, 0xAF, 0xFF, + 0xB1, 0xB6, 0xB4, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, + 0xAB, 0xB0, 0xAF, 0xFF, 0x9F, 0xA3, 0xA2, 0xFF, 0xA8, 0xAD, 0xAB, 0xFF, + 0xAF, 0xB4, 0xB2, 0xFF, 0x9F, 0xA3, 0xA2, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, + 0xBE, 0xC3, 0xC1, 0xFF, 0x9F, 0xA3, 0xA2, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, + 0xBC, 0xC1, 0xBF, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, + 0xB9, 0xBE, 0xBD, 0xFF, 0xAA, 0xAF, 0xAD, 0xFF, 0x9B, 0xA0, 0x9E, 0xFF, + 0x9E, 0xA2, 0xA1, 0xFF, 0x95, 0x9A, 0x99, 0xFF, 0xA3, 0xA8, 0xA7, 0xFF, + 0xA1, 0xA6, 0xA4, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, 0xCD, 0xD2, 0xD0, 0xFF, + 0xAB, 0xB0, 0xAF, 0xFF, 0x93, 0x98, 0x96, 0xFF, 0x8C, 0x91, 0x8F, 0xFF, + 0x94, 0x9B, 0x99, 0xFF, 0xA5, 0xAC, 0xAA, 0xFF, 0xAA, 0xB1, 0xAF, 0xFF, + 0x9E, 0xA5, 0xA3, 0xFF, 0x8E, 0x95, 0x93, 0xFF, 0x82, 0x8A, 0x87, 0xFF, + 0x98, 0xA0, 0x9D, 0xFF, 0xC3, 0xCB, 0xC8, 0xFF, 0xD0, 0xD8, 0xD5, 0xFF, + 0xD1, 0xD9, 0xD6, 0xFF, 0xC2, 0xCA, 0xC7, 0xFF, 0xAC, 0xB3, 0xB1, 0xFF, + 0x9A, 0xA1, 0x9E, 0xFF, 0x9B, 0xA2, 0xA0, 0xFF, 0x9C, 0xA3, 0xA1, 0xFF, + 0x9F, 0xA7, 0xA4, 0xFF, 0xA6, 0xAE, 0xAB, 0xFF, 0xB3, 0xBA, 0xB8, 0xFF, + 0xAF, 0xB6, 0xB3, 0xFF, 0xAB, 0xB2, 0xB0, 0xFF, 0xB7, 0xBE, 0xBB, 0xFF, + 0xB4, 0xBC, 0xB9, 0xFF, 0xB1, 0xB8, 0xB6, 0xFF, 0xB1, 0xB8, 0xB6, 0xFF, + 0xBD, 0xC4, 0xC1, 0xFF, 0xB4, 0xBC, 0xB9, 0xFF, 0xA8, 0xAF, 0xAC, 0xFF, + 0x9F, 0xA7, 0xA4, 0xFF, 0x9A, 0xA1, 0x9E, 0xFF, 0xA2, 0xA9, 0xA7, 0xFF, + 0xAC, 0xB3, 0xB1, 0xFF, 0xB3, 0xBA, 0xB8, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, + 0xAF, 0xB4, 0xB2, 0xFF, 0x98, 0x9C, 0x9B, 0xFF, 0x93, 0x98, 0x96, 0xFF, + 0xA8, 0xAD, 0xAB, 0xFF, 0xA8, 0xAD, 0xAB, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, + 0xAD, 0xB1, 0xB0, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, + 0xAB, 0xB0, 0xAF, 0xFF, 0x99, 0x9E, 0x9C, 0xFF, 0xA1, 0xA6, 0xA4, 0xFF, + 0xB7, 0xBC, 0xBA, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, + 0xAB, 0xB0, 0xAF, 0xFF, 0x9E, 0xA2, 0xA1, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, + 0xB8, 0xBD, 0xBB, 0xFF, 0x9F, 0xA3, 0xA2, 0xFF, 0xA2, 0xA7, 0xA5, 0xFF, + 0xA2, 0xA7, 0xA5, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, + 0xA9, 0xAE, 0xAC, 0xFF, 0x9A, 0x9F, 0x9D, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, + 0xA2, 0xA7, 0xA5, 0xFF, 0x9E, 0xA2, 0xA1, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, + 0x92, 0x97, 0x95, 0xFF, 0x9C, 0xA1, 0xA0, 0xFF, 0xA7, 0xAC, 0xAA, 0xFF, + 0xAD, 0xB1, 0xB0, 0xFF, 0xB0, 0xB5, 0xB3, 0xFF, 0x9B, 0xA0, 0x9E, 0xFF, + 0xA3, 0xA8, 0xA7, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, + 0xBC, 0xC1, 0xBF, 0xFF, 0xAD, 0xB1, 0xB0, 0xFF, 0xAA, 0xAF, 0xAD, 0xFF, + 0xA6, 0xAA, 0xA9, 0xFF, 0x95, 0x9A, 0x99, 0xFF, 0xB0, 0xB5, 0xB3, 0xFF, + 0xB8, 0xBD, 0xBB, 0xFF, 0x9A, 0x9F, 0x9D, 0xFF, 0xA2, 0xA7, 0xA5, 0xFF, + 0xBB, 0xBF, 0xBE, 0xFF, 0xC0, 0xC5, 0xC4, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, + 0xBC, 0xC1, 0xBF, 0xFF, 0xA8, 0xAD, 0xAB, 0xFF, 0x99, 0x9E, 0x9C, 0xFF, + 0xA0, 0xA5, 0xA3, 0xFF, 0x91, 0x96, 0x94, 0xFF, 0x9E, 0xA2, 0xA1, 0xFF, + 0x9C, 0xA1, 0xA0, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, + 0xBC, 0xC1, 0xBF, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, 0x83, 0x88, 0x86, 0xFF, + 0x88, 0x8F, 0x8D, 0xFF, 0x9E, 0xA5, 0xA3, 0xFF, 0xAA, 0xB1, 0xAF, 0xFF, + 0xA2, 0xA9, 0xA7, 0xFF, 0x94, 0x9B, 0x99, 0xFF, 0x83, 0x8B, 0x88, 0xFF, + 0x98, 0xA0, 0x9D, 0xFF, 0xC9, 0xD1, 0xCE, 0xFF, 0xCE, 0xD5, 0xD3, 0xFF, + 0xD3, 0xDA, 0xD7, 0xFF, 0xC1, 0xC8, 0xC6, 0xFF, 0xA4, 0xAB, 0xA9, 0xFF, + 0x94, 0x9B, 0x99, 0xFF, 0x97, 0x9E, 0x9C, 0xFF, 0x9C, 0xA3, 0xA1, 0xFF, + 0x9E, 0xA5, 0xA3, 0xFF, 0x98, 0xA0, 0x9D, 0xFF, 0xB7, 0xBE, 0xBB, 0xFF, + 0xB6, 0xBD, 0xBA, 0xFF, 0xB1, 0xB8, 0xB6, 0xFF, 0xB0, 0xB7, 0xB4, 0xFF, + 0xA8, 0xAF, 0xAC, 0xFF, 0x9D, 0xA4, 0xA2, 0xFF, 0x98, 0xA0, 0x9D, 0xFF, + 0x9B, 0xA2, 0xA0, 0xFF, 0xA1, 0xA8, 0xA5, 0xFF, 0xA9, 0xB0, 0xAD, 0xFF, + 0xAF, 0xB6, 0xB3, 0xFF, 0xB0, 0xB5, 0xB3, 0xFF, 0xB0, 0xB5, 0xB3, 0xFF, + 0xAF, 0xB4, 0xB2, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, 0xA1, 0xA6, 0xA4, 0xFF, + 0x9A, 0x9F, 0x9D, 0xFF, 0x9A, 0x9F, 0x9D, 0xFF, 0xA1, 0xA6, 0xA4, 0xFF, + 0xB5, 0xB8, 0xB7, 0xFF, 0xB4, 0xB6, 0xB6, 0xFF, 0xB1, 0xB3, 0xB2, 0xFF, + 0xAE, 0xB1, 0xB0, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, 0xAD, 0xB1, 0xB0, 0xFF, + 0xA7, 0xAC, 0xAA, 0xFF, 0xA0, 0xA5, 0xA3, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, + 0xCB, 0xD0, 0xCE, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0xA6, 0xAA, 0xA9, 0xFF, + 0x98, 0x9C, 0x9B, 0xFF, 0xAA, 0xAF, 0xAD, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, + 0xA6, 0xAA, 0xA9, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, 0x9B, 0xA0, 0x9E, 0xFF, + 0x92, 0x97, 0x95, 0xFF, 0xAD, 0xB1, 0xB0, 0xFF, 0x9B, 0xA0, 0x9E, 0xFF, + 0x8A, 0x8F, 0x8D, 0xFF, 0x95, 0x9A, 0x99, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, + 0xA0, 0xA5, 0xA3, 0xFF, 0xA2, 0xA7, 0xA5, 0xFF, 0xA7, 0xAC, 0xAA, 0xFF, + 0x90, 0x94, 0x93, 0xFF, 0xAB, 0xB0, 0xAF, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, + 0xB4, 0xB8, 0xB7, 0xFF, 0xA6, 0xAA, 0xA9, 0xFF, 0x99, 0x9E, 0x9C, 0xFF, + 0x9E, 0xA2, 0xA1, 0xFF, 0xB2, 0xB7, 0xB6, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, + 0xBD, 0xC2, 0xC0, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, 0xA6, 0xAA, 0xA9, 0xFF, + 0x89, 0x8D, 0x8C, 0xFF, 0x8A, 0x8F, 0x8D, 0xFF, 0xB0, 0xB5, 0xB3, 0xFF, + 0xC6, 0xCB, 0xC9, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, 0x9C, 0xA1, 0xA0, 0xFF, + 0xA7, 0xAC, 0xAA, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, + 0xB0, 0xB5, 0xB3, 0xFF, 0x9C, 0xA1, 0xA0, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, + 0xA8, 0xAD, 0xAB, 0xFF, 0xB4, 0xB8, 0xB7, 0xFF, 0x91, 0x96, 0x94, 0xFF, + 0xA7, 0xAC, 0xAA, 0xFF, 0xA4, 0xA9, 0xA8, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, + 0xB5, 0xBA, 0xB8, 0xFF, 0xA6, 0xAE, 0xAB, 0xFF, 0x93, 0x9A, 0x97, 0xFF, + 0x97, 0x9E, 0x9C, 0xFF, 0x97, 0x9E, 0x9C, 0xFF, 0xA6, 0xB0, 0xAC, 0xFF, + 0xD8, 0xE2, 0xDE, 0xFF, 0xB5, 0xBF, 0xBB, 0xFF, 0x80, 0x89, 0x86, 0xFF, + 0xAF, 0xB9, 0xB6, 0xFF, 0xB5, 0xBF, 0xBB, 0xFF, 0xC8, 0xD1, 0xCE, 0xFF, + 0xCB, 0xD5, 0xD2, 0xFF, 0xD3, 0xDD, 0xDA, 0xFF, 0xD5, 0xDE, 0xDB, 0xFF, + 0xB3, 0xBC, 0xB9, 0xFF, 0x99, 0xA3, 0xA0, 0xFF, 0x90, 0x99, 0x96, 0xFF, + 0x8F, 0x98, 0x95, 0xFF, 0x9F, 0xA9, 0xA5, 0xFF, 0xB0, 0xBA, 0xB7, 0xFF, + 0xC0, 0xC9, 0xC6, 0xFF, 0xB3, 0xBC, 0xB9, 0xFF, 0xA1, 0xAB, 0xA8, 0xFF, + 0x9D, 0xA6, 0xA3, 0xFF, 0x98, 0xA2, 0x9E, 0xFF, 0x94, 0x9E, 0x9B, 0xFF, + 0x8E, 0x95, 0x93, 0xFF, 0x9A, 0xA1, 0x9E, 0xFF, 0xAA, 0xB1, 0xAF, 0xFF, + 0xB6, 0xBD, 0xBA, 0xFF, 0xAA, 0xAF, 0xAD, 0xFF, 0xA6, 0xAA, 0xA9, 0xFF, + 0xA0, 0xA5, 0xA3, 0xFF, 0x9B, 0xA0, 0x9E, 0xFF, 0xA2, 0xA7, 0xA5, 0xFF, + 0xAA, 0xAF, 0xAD, 0xFF, 0xAA, 0xAF, 0xAD, 0xFF, 0xA2, 0xA7, 0xA5, 0xFF, + 0xB5, 0xB8, 0xB7, 0xFF, 0xBF, 0xC1, 0xC0, 0xFF, 0xBA, 0xBC, 0xBB, 0xFF, + 0xAC, 0xAE, 0xAD, 0xFF, 0x98, 0x9C, 0x9B, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, + 0xA2, 0xA7, 0xA5, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, + 0xC9, 0xCD, 0xCC, 0xFF, 0xA8, 0xAD, 0xAB, 0xFF, 0x8E, 0x93, 0x92, 0xFF, + 0xAB, 0xB0, 0xAF, 0xFF, 0xAB, 0xB0, 0xAF, 0xFF, 0xAA, 0xAF, 0xAD, 0xFF, + 0x97, 0x9B, 0x9A, 0xFF, 0x8D, 0x92, 0x90, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, + 0x9C, 0xA1, 0xA0, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, 0xA1, 0xA6, 0xA4, 0xFF, + 0xB2, 0xB7, 0xB6, 0xFF, 0xA7, 0xAC, 0xAA, 0xFF, 0xA7, 0xAC, 0xAA, 0xFF, + 0x9F, 0xA3, 0xA2, 0xFF, 0x7E, 0x83, 0x81, 0xFF, 0x72, 0x77, 0x76, 0xFF, + 0xA8, 0xAD, 0xAB, 0xFF, 0xB2, 0xB7, 0xB6, 0xFF, 0xA3, 0xA8, 0xA7, 0xFF, + 0xA0, 0xA5, 0xA3, 0xFF, 0xAA, 0xAF, 0xAD, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, + 0xC3, 0xC8, 0xC6, 0xFF, 0xB4, 0xB8, 0xB7, 0xFF, 0x9F, 0xA3, 0xA2, 0xFF, + 0xA1, 0xA6, 0xA4, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, 0xA1, 0xA6, 0xA4, 0xFF, + 0x71, 0x76, 0x74, 0xFF, 0x83, 0x88, 0x86, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, + 0xC9, 0xCD, 0xCC, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, 0xAB, 0xB0, 0xAF, 0xFF, + 0xA8, 0xAD, 0xAB, 0xFF, 0xB2, 0xB7, 0xB6, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, + 0xB0, 0xB5, 0xB3, 0xFF, 0x9C, 0xA1, 0xA0, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, + 0xA8, 0xAD, 0xAB, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, 0xA2, 0xA7, 0xA5, 0xFF, + 0xA4, 0xA9, 0xA8, 0xFF, 0x9C, 0xA1, 0xA0, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, + 0xAE, 0xB3, 0xB1, 0xFF, 0xA2, 0xA9, 0xA7, 0xFF, 0x96, 0x9D, 0x9B, 0xFF, + 0x86, 0x8D, 0x8B, 0xFF, 0x81, 0x88, 0x86, 0xFF, 0x94, 0x9E, 0x9B, 0xFF, + 0xD5, 0xDE, 0xDB, 0xFF, 0xC4, 0xCE, 0xCB, 0xFF, 0x9E, 0xA7, 0xA4, 0xFF, + 0xB5, 0xBF, 0xBB, 0xFF, 0x97, 0xA0, 0x9D, 0xFF, 0x92, 0x9C, 0x99, 0xFF, + 0xAC, 0xB5, 0xB2, 0xFF, 0xC4, 0xCE, 0xCB, 0xFF, 0xD2, 0xDC, 0xD9, 0xFF, + 0xC0, 0xC9, 0xC6, 0xFF, 0xB2, 0xBB, 0xB8, 0xFF, 0x9E, 0xA7, 0xA4, 0xFF, + 0x8D, 0x97, 0x94, 0xFF, 0x8B, 0x95, 0x92, 0xFF, 0xAC, 0xB5, 0xB2, 0xFF, + 0xBA, 0xC3, 0xC0, 0xFF, 0xAB, 0xB4, 0xB1, 0xFF, 0x9B, 0xA5, 0xA2, 0xFF, + 0x9A, 0xA4, 0xA1, 0xFF, 0x98, 0xA2, 0x9E, 0xFF, 0x96, 0x9F, 0x9C, 0xFF, + 0x8A, 0x92, 0x8F, 0xFF, 0x95, 0x9C, 0x9A, 0xFF, 0xA6, 0xAE, 0xAB, 0xFF, + 0xB2, 0xB9, 0xB7, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, 0xA8, 0xAD, 0xAB, 0xFF, + 0xA7, 0xAC, 0xAA, 0xFF, 0xA6, 0xAA, 0xA9, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, + 0xB6, 0xBB, 0xB9, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, + 0xB5, 0xB8, 0xB7, 0xFF, 0xB5, 0xB8, 0xB7, 0xFF, 0xB2, 0xB4, 0xB3, 0xFF, + 0xAC, 0xAE, 0xAD, 0xFF, 0xAB, 0xB0, 0xAF, 0xFF, 0xA7, 0xAC, 0xAA, 0xFF, + 0xB1, 0xB6, 0xB4, 0xFF, 0xC4, 0xC9, 0xC7, 0xFF, 0xCE, 0xD3, 0xD2, 0xFF, + 0xC6, 0xCB, 0xC9, 0xFF, 0xA0, 0xA5, 0xA3, 0xFF, 0x93, 0x98, 0x96, 0xFF, + 0x98, 0x9C, 0x9B, 0xFF, 0x91, 0x96, 0x94, 0xFF, 0x89, 0x8D, 0x8C, 0xFF, + 0x95, 0x9A, 0x99, 0xFF, 0x92, 0x97, 0x95, 0xFF, 0x98, 0x9C, 0x9B, 0xFF, + 0xA6, 0xAA, 0xA9, 0xFF, 0xA1, 0xA6, 0xA4, 0xFF, 0x98, 0x9C, 0x9B, 0xFF, + 0xA9, 0xAE, 0xAC, 0xFF, 0x9E, 0xA2, 0xA1, 0xFF, 0x9C, 0xA1, 0xA0, 0xFF, + 0xAD, 0xB1, 0xB0, 0xFF, 0x91, 0x96, 0x94, 0xFF, 0x90, 0x94, 0x93, 0xFF, + 0xD0, 0xD4, 0xD3, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, 0x9B, 0xA0, 0x9E, 0xFF, + 0x8B, 0x90, 0x8E, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, 0xA1, 0xA6, 0xA4, 0xFF, + 0xA0, 0xA5, 0xA3, 0xFF, 0x93, 0x98, 0x96, 0xFF, 0x80, 0x85, 0x84, 0xFF, + 0x77, 0x7C, 0x7A, 0xFF, 0xA3, 0xA8, 0xA7, 0xFF, 0xA7, 0xAC, 0xAA, 0xFF, + 0x80, 0x85, 0x84, 0xFF, 0x89, 0x8D, 0x8C, 0xFF, 0xB0, 0xB5, 0xB3, 0xFF, + 0xC6, 0xCB, 0xC9, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, + 0xA8, 0xAD, 0xAB, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, + 0xB0, 0xB5, 0xB3, 0xFF, 0x9C, 0xA1, 0xA0, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, + 0xA8, 0xAD, 0xAB, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, + 0xAD, 0xB1, 0xB0, 0xFF, 0x98, 0x9C, 0x9B, 0xFF, 0xAB, 0xB0, 0xAF, 0xFF, + 0xA3, 0xA8, 0xA7, 0xFF, 0x9C, 0xA3, 0xA1, 0xFF, 0x9C, 0xA3, 0xA1, 0xFF, + 0x87, 0x90, 0x8D, 0xFF, 0x85, 0x8F, 0x8C, 0xFF, 0x97, 0xA0, 0x9D, 0xFF, + 0xC8, 0xD4, 0xD0, 0xFF, 0xC4, 0xD0, 0xCC, 0xFF, 0xB8, 0xC4, 0xC0, 0xFF, + 0xBE, 0xCA, 0xC6, 0xFF, 0x96, 0xA2, 0x9E, 0xFF, 0x79, 0x85, 0x81, 0xFF, + 0x9C, 0xA8, 0xA4, 0xFF, 0xBE, 0xCA, 0xC6, 0xFF, 0xCE, 0xDA, 0xD6, 0xFF, + 0xD2, 0xDE, 0xDA, 0xFF, 0xD6, 0xE2, 0xDE, 0xFF, 0xB9, 0xC5, 0xC1, 0xFF, + 0x96, 0xA2, 0x9E, 0xFF, 0x76, 0x82, 0x7E, 0xFF, 0x9A, 0xA6, 0xA2, 0xFF, + 0xAB, 0xB7, 0xB3, 0xFF, 0xA9, 0xB5, 0xB1, 0xFF, 0x9D, 0xA9, 0xA5, 0xFF, + 0x9F, 0xAB, 0xA7, 0xFF, 0xA1, 0xAD, 0xA9, 0xFF, 0xA2, 0xAE, 0xAA, 0xFF, + 0x91, 0x99, 0x96, 0xFF, 0x97, 0x9E, 0x9C, 0xFF, 0x9F, 0xA7, 0xA4, 0xFF, + 0xA5, 0xAC, 0xAA, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, + 0xBE, 0xC3, 0xC1, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, + 0xB7, 0xBC, 0xBA, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, + 0xB5, 0xB8, 0xB7, 0xFF, 0xA1, 0xA4, 0xA3, 0xFF, 0x9D, 0x9F, 0x9E, 0xFF, + 0xAC, 0xAE, 0xAD, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, 0xB2, 0xB7, 0xB6, 0xFF, + 0xAF, 0xB4, 0xB2, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, + 0xAD, 0xB1, 0xB0, 0xFF, 0x92, 0x97, 0x95, 0xFF, 0x93, 0x98, 0x96, 0xFF, + 0x7E, 0x83, 0x81, 0xFF, 0x80, 0x85, 0x84, 0xFF, 0x86, 0x8B, 0x89, 0xFF, + 0xB7, 0xBC, 0xBA, 0xFF, 0xA1, 0xA6, 0xA4, 0xFF, 0x9E, 0xA2, 0xA1, 0xFF, + 0xA7, 0xAC, 0xAA, 0xFF, 0x8B, 0x90, 0x8E, 0xFF, 0x84, 0x89, 0x87, 0xFF, + 0x72, 0x77, 0x76, 0xFF, 0x7E, 0x83, 0x81, 0xFF, 0x7F, 0x84, 0x82, 0xFF, + 0x7F, 0x84, 0x82, 0xFF, 0x8E, 0x93, 0x92, 0xFF, 0xAD, 0xB1, 0xB0, 0xFF, + 0xAA, 0xAF, 0xAD, 0xFF, 0x9A, 0x9F, 0x9D, 0xFF, 0x90, 0x94, 0x93, 0xFF, + 0x93, 0x98, 0x96, 0xFF, 0xA0, 0xA5, 0xA3, 0xFF, 0xB0, 0xB5, 0xB3, 0xFF, + 0xA0, 0xA5, 0xA3, 0xFF, 0x95, 0x9A, 0x99, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, + 0x98, 0x9C, 0x9B, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, 0xC0, 0xC5, 0xC4, 0xFF, + 0xA4, 0xA9, 0xA8, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, + 0xC0, 0xC5, 0xC4, 0xFF, 0xAA, 0xAF, 0xAD, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, + 0xAE, 0xB3, 0xB1, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, + 0xB0, 0xB5, 0xB3, 0xFF, 0x9C, 0xA1, 0xA0, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, + 0xA8, 0xAD, 0xAB, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, + 0xB4, 0xB8, 0xB7, 0xFF, 0x9C, 0xA1, 0xA0, 0xFF, 0xA8, 0xAD, 0xAB, 0xFF, + 0x9C, 0xA1, 0xA0, 0xFF, 0x97, 0x9E, 0x9C, 0xFF, 0x9F, 0xA7, 0xA4, 0xFF, + 0x99, 0xA3, 0xA0, 0xFF, 0xA5, 0xAE, 0xAB, 0xFF, 0xA9, 0xB5, 0xB1, 0xFF, + 0xC0, 0xCC, 0xC8, 0xFF, 0xBC, 0xC8, 0xC4, 0xFF, 0xB9, 0xC5, 0xC1, 0xFF, + 0xCC, 0xD8, 0xD4, 0xFF, 0xB1, 0xBD, 0xB9, 0xFF, 0x96, 0xA2, 0x9E, 0xFF, + 0xA7, 0xB3, 0xAF, 0xFF, 0xC3, 0xCF, 0xCB, 0xFF, 0xCF, 0xDB, 0xD7, 0xFF, + 0xD3, 0xDF, 0xDB, 0xFF, 0xCF, 0xDB, 0xD7, 0xFF, 0xBD, 0xC9, 0xC5, 0xFF, + 0x9A, 0xA6, 0xA2, 0xFF, 0x73, 0x7F, 0x7B, 0xFF, 0x88, 0x94, 0x90, 0xFF, + 0x9A, 0xA6, 0xA2, 0xFF, 0xA6, 0xB2, 0xAD, 0xFF, 0xA7, 0xB3, 0xAF, 0xFF, + 0xAA, 0xB6, 0xB2, 0xFF, 0xB0, 0xBC, 0xB8, 0xFF, 0xB3, 0xC0, 0xBB, 0xFF, + 0xA8, 0xAF, 0xAA, 0xFF, 0x9B, 0xA2, 0x9D, 0xFF, 0x95, 0x9D, 0x98, 0xFF, + 0x9B, 0xA2, 0x9D, 0xFF, 0xA9, 0xAE, 0xAA, 0xFF, 0xB9, 0xBF, 0xBB, 0xFF, + 0xC4, 0xC9, 0xC5, 0xFF, 0xC0, 0xC6, 0xC2, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, + 0xA9, 0xAE, 0xAC, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, + 0xA8, 0xAD, 0xAB, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, 0x99, 0x9E, 0x9C, 0xFF, + 0xAB, 0xB0, 0xAF, 0xFF, 0xB6, 0xB9, 0xB6, 0xFF, 0xB8, 0xBA, 0xB7, 0xFF, + 0xC6, 0xC8, 0xC5, 0xFF, 0xAF, 0xB2, 0xAF, 0xFF, 0x9F, 0xA4, 0xA0, 0xFF, + 0x9F, 0xA4, 0xA0, 0xFF, 0x82, 0x87, 0x83, 0xFF, 0x75, 0x7A, 0x76, 0xFF, + 0x8E, 0x94, 0x90, 0xFF, 0x9B, 0xA0, 0x9C, 0xFF, 0xA3, 0xA8, 0xA7, 0xFF, + 0xBB, 0xBF, 0xBE, 0xFF, 0xA2, 0xA7, 0xA5, 0xFF, 0x91, 0x96, 0x94, 0xFF, + 0x99, 0x9E, 0x9C, 0xFF, 0x82, 0x86, 0x85, 0xFF, 0x7E, 0x83, 0x81, 0xFF, + 0x76, 0x7B, 0x79, 0xFF, 0x83, 0x88, 0x86, 0xFF, 0x7E, 0x83, 0x81, 0xFF, + 0x86, 0x8B, 0x89, 0xFF, 0x92, 0x97, 0x95, 0xFF, 0xAD, 0xB1, 0xB0, 0xFF, + 0xA9, 0xAE, 0xAC, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0xA0, 0xA5, 0xA3, 0xFF, + 0x95, 0x9A, 0x99, 0xFF, 0xA2, 0xA7, 0xA5, 0xFF, 0xB4, 0xB8, 0xB7, 0xFF, + 0xB7, 0xBC, 0xBA, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, + 0xA7, 0xAC, 0xAA, 0xFF, 0xA7, 0xAC, 0xAA, 0xFF, 0x9F, 0xA3, 0xA2, 0xFF, + 0x90, 0x94, 0x93, 0xFF, 0x90, 0x94, 0x93, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, + 0xB4, 0xB8, 0xB7, 0xFF, 0xC4, 0xC9, 0xC7, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, + 0xC0, 0xC5, 0xC4, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, + 0xAB, 0xB0, 0xAF, 0xFF, 0x9A, 0x9F, 0x9D, 0xFF, 0x9A, 0x9F, 0x9D, 0xFF, + 0xAA, 0xAF, 0xAD, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, + 0xAB, 0xB0, 0xAF, 0xFF, 0x8E, 0x93, 0x92, 0xFF, 0xA5, 0xAC, 0xAA, 0xFF, + 0x89, 0x90, 0x8E, 0xFF, 0x80, 0x87, 0x85, 0xFF, 0x9A, 0xA1, 0x9E, 0xFF, + 0x8D, 0x97, 0x94, 0xFF, 0x99, 0xA3, 0xA0, 0xFF, 0x98, 0xA4, 0xA0, 0xFF, + 0x8A, 0x96, 0x92, 0xFF, 0x8E, 0x9A, 0x96, 0xFF, 0xBA, 0xC7, 0xC2, 0xFF, + 0xD4, 0xE0, 0xDC, 0xFF, 0xCD, 0xD9, 0xD5, 0xFF, 0xC6, 0xD2, 0xCE, 0xFF, + 0xC1, 0xCE, 0xC9, 0xFF, 0xC6, 0xD2, 0xCE, 0xFF, 0xCF, 0xDB, 0xD7, 0xFF, + 0xC5, 0xD1, 0xCD, 0xFF, 0xB0, 0xBC, 0xB8, 0xFF, 0xA4, 0xB0, 0xAC, 0xFF, + 0x9F, 0xAB, 0xA7, 0xFF, 0x8C, 0x96, 0x93, 0xFF, 0x7B, 0x84, 0x81, 0xFF, + 0x90, 0x99, 0x96, 0xFF, 0xA8, 0xB2, 0xAF, 0xFF, 0xA8, 0xB2, 0xAF, 0xFF, + 0x9B, 0xA5, 0xA2, 0xFF, 0xAC, 0xB5, 0xB2, 0xFF, 0xD0, 0xD9, 0xD6, 0xFF, + 0xA6, 0xAE, 0xA9, 0xFF, 0xA2, 0xA9, 0xA4, 0xFF, 0x9F, 0xA7, 0xA2, 0xFF, + 0xA2, 0xA9, 0xA4, 0xFF, 0xB1, 0xB6, 0xB2, 0xFF, 0xB4, 0xB9, 0xB5, 0xFF, + 0xB2, 0xB8, 0xB4, 0xFF, 0xAD, 0xB2, 0xAE, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, + 0xB1, 0xB6, 0xB4, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, + 0xA1, 0xA6, 0xA4, 0xFF, 0xB0, 0xB5, 0xB3, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, + 0xBB, 0xBF, 0xBE, 0xFF, 0xC8, 0xCB, 0xC7, 0xFF, 0xC0, 0xC2, 0xBF, 0xFF, + 0xC0, 0xC2, 0xBF, 0xFF, 0xA0, 0xA3, 0xA0, 0xFF, 0x87, 0x8D, 0x89, 0xFF, + 0x91, 0x96, 0x92, 0xFF, 0x80, 0x86, 0x82, 0xFF, 0x80, 0x86, 0x82, 0xFF, + 0x90, 0x95, 0x91, 0xFF, 0xA6, 0xAB, 0xA7, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, + 0xBE, 0xC3, 0xC1, 0xFF, 0x99, 0x9E, 0x9C, 0xFF, 0x89, 0x8D, 0x8C, 0xFF, + 0x83, 0x88, 0x86, 0xFF, 0x7B, 0x7F, 0x7E, 0xFF, 0x94, 0x99, 0x97, 0xFF, + 0x9A, 0x9F, 0x9D, 0xFF, 0x89, 0x8D, 0x8C, 0xFF, 0x8B, 0x90, 0x8E, 0xFF, + 0xA3, 0xA8, 0xA7, 0xFF, 0x98, 0x9C, 0x9B, 0xFF, 0x92, 0x97, 0x95, 0xFF, + 0xB7, 0xBC, 0xBA, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, + 0xAB, 0xB0, 0xAF, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, 0xCB, 0xD0, 0xCE, 0xFF, + 0xB4, 0xB8, 0xB7, 0xFF, 0x95, 0x9A, 0x99, 0xFF, 0x86, 0x8B, 0x89, 0xFF, + 0x94, 0x99, 0x97, 0xFF, 0x8E, 0x93, 0x92, 0xFF, 0x90, 0x94, 0x93, 0xFF, + 0x99, 0x9E, 0x9C, 0xFF, 0xA0, 0xA5, 0xA3, 0xFF, 0xAD, 0xB1, 0xB0, 0xFF, + 0xB9, 0xBE, 0xBD, 0xFF, 0xCC, 0xD1, 0xCF, 0xFF, 0xC7, 0xCC, 0xCB, 0xFF, + 0xBE, 0xC3, 0xC1, 0xFF, 0xB2, 0xB7, 0xB6, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, + 0x9A, 0x9F, 0x9D, 0xFF, 0x94, 0x99, 0x97, 0xFF, 0x9C, 0xA1, 0xA0, 0xFF, + 0xAE, 0xB3, 0xB1, 0xFF, 0xA7, 0xAC, 0xAA, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, + 0xAE, 0xB3, 0xB1, 0xFF, 0x93, 0x98, 0x96, 0xFF, 0xAA, 0xB1, 0xAF, 0xFF, + 0x8C, 0x93, 0x90, 0xFF, 0x86, 0x8D, 0x8B, 0xFF, 0x93, 0x9A, 0x97, 0xFF, + 0x8A, 0x94, 0x90, 0xFF, 0x98, 0xA2, 0x9E, 0xFF, 0x91, 0x9D, 0x99, 0xFF, + 0x79, 0x85, 0x81, 0xFF, 0x91, 0x9D, 0x99, 0xFF, 0xB5, 0xC1, 0xBD, 0xFF, + 0xCC, 0xD8, 0xD4, 0xFF, 0xC8, 0xD4, 0xD0, 0xFF, 0xD1, 0xDD, 0xD9, 0xFF, + 0xC8, 0xD4, 0xD0, 0xFF, 0xCA, 0xD6, 0xD2, 0xFF, 0xCE, 0xDA, 0xD6, 0xFF, + 0xC3, 0xCF, 0xCB, 0xFF, 0xB1, 0xBD, 0xB9, 0xFF, 0xA3, 0xAF, 0xAB, 0xFF, + 0xA0, 0xAC, 0xA8, 0xFF, 0x96, 0x9F, 0x9C, 0xFF, 0x82, 0x8B, 0x88, 0xFF, + 0x84, 0x8E, 0x8B, 0xFF, 0x99, 0xA3, 0xA0, 0xFF, 0xA8, 0xB2, 0xAF, 0xFF, + 0xA0, 0xAA, 0xA7, 0xFF, 0xB0, 0xBA, 0xB7, 0xFF, 0xD0, 0xD9, 0xD6, 0xFF, + 0xA6, 0xAE, 0xA9, 0xFF, 0xAB, 0xB3, 0xAE, 0xFF, 0xAD, 0xB5, 0xB0, 0xFF, + 0xAB, 0xB3, 0xAE, 0xFF, 0xAF, 0xB4, 0xB0, 0xFF, 0xA6, 0xAB, 0xA7, 0xFF, + 0xA0, 0xA5, 0xA1, 0xFF, 0xA0, 0xA5, 0xA1, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, + 0xB1, 0xB6, 0xB4, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, + 0xA7, 0xAC, 0xAA, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, + 0xC3, 0xC8, 0xC6, 0xFF, 0xBF, 0xC1, 0xBE, 0xFF, 0xA8, 0xAB, 0xA8, 0xFF, + 0x9F, 0xA2, 0x9F, 0xFF, 0x87, 0x89, 0x86, 0xFF, 0x75, 0x7A, 0x76, 0xFF, + 0x80, 0x86, 0x82, 0xFF, 0x77, 0x7C, 0x78, 0xFF, 0x89, 0x8E, 0x8A, 0xFF, + 0x8B, 0x90, 0x8C, 0xFF, 0xA0, 0xA5, 0xA1, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, + 0x9F, 0xA3, 0xA2, 0xFF, 0x89, 0x8D, 0x8C, 0xFF, 0x89, 0x8D, 0x8C, 0xFF, + 0x7E, 0x83, 0x81, 0xFF, 0x83, 0x88, 0x86, 0xFF, 0xB0, 0xB5, 0xB3, 0xFF, + 0xB4, 0xB8, 0xB7, 0xFF, 0xA0, 0xA5, 0xA3, 0xFF, 0xA1, 0xA6, 0xA4, 0xFF, + 0xA8, 0xAD, 0xAB, 0xFF, 0x98, 0x9C, 0x9B, 0xFF, 0x8B, 0x90, 0x8E, 0xFF, + 0xAB, 0xB0, 0xAF, 0xFF, 0xC0, 0xC5, 0xC4, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, + 0xBC, 0xC1, 0xBF, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, + 0xBC, 0xC1, 0xBF, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, + 0xB7, 0xBC, 0xBA, 0xFF, 0xB4, 0xB8, 0xB7, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, + 0xC6, 0xCB, 0xC9, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, 0xB4, 0xB8, 0xB7, 0xFF, + 0xAF, 0xB4, 0xB2, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, + 0xB6, 0xBB, 0xB9, 0xFF, 0xAA, 0xAF, 0xAD, 0xFF, 0xA1, 0xA6, 0xA4, 0xFF, + 0x9A, 0x9F, 0x9D, 0xFF, 0x9C, 0xA1, 0xA0, 0xFF, 0xA4, 0xA9, 0xA8, 0xFF, + 0xAE, 0xB3, 0xB1, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, + 0xBD, 0xC2, 0xC0, 0xFF, 0xA6, 0xAA, 0xA9, 0xFF, 0xBD, 0xC4, 0xC1, 0xFF, + 0x9B, 0xA2, 0xA0, 0xFF, 0x9C, 0xA3, 0xA1, 0xFF, 0x95, 0x9C, 0x9A, 0xFF, + 0xA8, 0xB2, 0xAF, 0xFF, 0xC2, 0xCC, 0xC8, 0xFF, 0xBF, 0xCB, 0xC7, 0xFF, + 0xA2, 0xAE, 0xAA, 0xFF, 0xA9, 0xB5, 0xB1, 0xFF, 0xC0, 0xCC, 0xC8, 0xFF, + 0xD3, 0xDF, 0xDB, 0xFF, 0xD5, 0xE1, 0xDD, 0xFF, 0xD2, 0xDE, 0xDA, 0xFF, + 0xC4, 0xD0, 0xCC, 0xFF, 0xBD, 0xC9, 0xC5, 0xFF, 0xBF, 0xCB, 0xC7, 0xFF, + 0xB9, 0xC5, 0xC1, 0xFF, 0xB8, 0xC4, 0xC0, 0xFF, 0xB2, 0xBE, 0xBA, 0xFF, + 0xAC, 0xB9, 0xB4, 0xFF, 0xAC, 0xB5, 0xB2, 0xFF, 0x94, 0x9E, 0x9B, 0xFF, + 0x85, 0x8F, 0x8C, 0xFF, 0x91, 0x9B, 0x97, 0xFF, 0x9B, 0xA5, 0xA2, 0xFF, + 0x9B, 0xA5, 0xA2, 0xFF, 0xAD, 0xB7, 0xB3, 0xFF, 0xC3, 0xCD, 0xC9, 0xFF, + 0xA6, 0xAE, 0xA9, 0xFF, 0xB2, 0xBA, 0xB5, 0xFF, 0xB8, 0xBF, 0xBB, 0xFF, + 0xB2, 0xBA, 0xB5, 0xFF, 0xA2, 0xA7, 0xA3, 0xFF, 0x98, 0x9D, 0x99, 0xFF, + 0x97, 0x9C, 0x98, 0xFF, 0xA0, 0xA5, 0xA1, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, + 0xA9, 0xAE, 0xAC, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, + 0xB5, 0xBA, 0xB8, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, + 0xC5, 0xCA, 0xC6, 0xFF, 0xB9, 0xBC, 0xB8, 0xFF, 0x99, 0x9C, 0x99, 0xFF, + 0x97, 0x9A, 0x97, 0xFF, 0x95, 0x97, 0x94, 0xFF, 0x8C, 0x91, 0x8D, 0xFF, + 0x98, 0x9D, 0x99, 0xFF, 0x97, 0x9C, 0x98, 0xFF, 0xAD, 0xB2, 0xAE, 0xFF, + 0xAF, 0xB4, 0xB0, 0xFF, 0xAE, 0xB3, 0xAF, 0xFF, 0xAD, 0xB1, 0xB0, 0xFF, + 0x8E, 0x93, 0x92, 0xFF, 0x85, 0x8A, 0x88, 0xFF, 0x90, 0x94, 0x93, 0xFF, + 0x80, 0x85, 0x84, 0xFF, 0x8B, 0x90, 0x8E, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, + 0xB2, 0xB7, 0xB6, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, + 0xB0, 0xB5, 0xB3, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, + 0xB7, 0xBC, 0xBA, 0xFF, 0xC0, 0xC5, 0xC4, 0xFF, 0xC4, 0xC9, 0xC7, 0xFF, + 0xC4, 0xC9, 0xC7, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, + 0xC9, 0xCD, 0xCC, 0xFF, 0xC6, 0xCB, 0xC9, 0xFF, 0xC0, 0xC5, 0xC4, 0xFF, + 0xBB, 0xBF, 0xBE, 0xFF, 0xC4, 0xC9, 0xC7, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, + 0xBE, 0xC3, 0xC1, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, + 0xA8, 0xAD, 0xAB, 0xFF, 0xB2, 0xB7, 0xB6, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, + 0xAD, 0xB1, 0xB0, 0xFF, 0xA8, 0xAD, 0xAB, 0xFF, 0xA7, 0xAC, 0xAA, 0xFF, + 0xAA, 0xAF, 0xAD, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, + 0xAB, 0xB0, 0xAF, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, 0xD4, 0xD9, 0xD7, 0xFF, + 0xCE, 0xD3, 0xD2, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0xCF, 0xD6, 0xD4, 0xFF, + 0xAC, 0xB3, 0xB1, 0xFF, 0xB2, 0xB9, 0xB7, 0xFF, 0x9E, 0xA5, 0xA3, 0xFF, + 0xA0, 0xAA, 0xA7, 0xFF, 0xC8, 0xD1, 0xCE, 0xFF, 0xCF, 0xDB, 0xD7, 0xFF, + 0xB6, 0xC2, 0xBE, 0xFF, 0xAB, 0xB7, 0xB3, 0xFF, 0xBC, 0xC8, 0xC4, 0xFF, + 0xCB, 0xD7, 0xD3, 0xFF, 0xD1, 0xDD, 0xD9, 0xFF, 0xC5, 0xD1, 0xCD, 0xFF, + 0xB7, 0xC3, 0xBF, 0xFF, 0xAE, 0xBA, 0xB6, 0xFF, 0xAF, 0xBB, 0xB7, 0xFF, + 0xB6, 0xC2, 0xBE, 0xFF, 0xC0, 0xCC, 0xC8, 0xFF, 0xC1, 0xCE, 0xC9, 0xFF, + 0xB9, 0xC5, 0xC1, 0xFF, 0xC0, 0xC9, 0xC6, 0xFF, 0xB0, 0xBA, 0xB7, 0xFF, + 0x98, 0xA2, 0x9E, 0xFF, 0x8C, 0x96, 0x93, 0xFF, 0x8B, 0x95, 0x92, 0xFF, + 0x91, 0x9B, 0x97, 0xFF, 0xA2, 0xAC, 0xA9, 0xFF, 0xB3, 0xBC, 0xB9, 0xFF, + 0xA2, 0xAA, 0xA2, 0xFF, 0xA3, 0xAB, 0xA4, 0xFF, 0xA3, 0xAB, 0xA4, 0xFF, + 0xA3, 0xAB, 0xA4, 0xFF, 0x96, 0x9E, 0x99, 0xFF, 0x9A, 0xA1, 0x9C, 0xFF, + 0x9E, 0xA6, 0xA1, 0xFF, 0xA2, 0xA9, 0xA4, 0xFF, 0xA9, 0xAE, 0xAA, 0xFF, + 0xAE, 0xB3, 0xAF, 0xFF, 0xAF, 0xB4, 0xB0, 0xFF, 0xAE, 0xB3, 0xAF, 0xFF, + 0xB6, 0xBB, 0xB7, 0xFF, 0xBC, 0xC1, 0xBD, 0xFF, 0xB2, 0xB8, 0xB4, 0xFF, + 0x97, 0x9C, 0x98, 0xFF, 0x8B, 0x90, 0x8C, 0xFF, 0x90, 0x95, 0x91, 0xFF, + 0x84, 0x89, 0x83, 0xFF, 0xAD, 0xB2, 0xAC, 0xFF, 0xA7, 0xAC, 0xA6, 0xFF, + 0xA7, 0xAC, 0xA6, 0xFF, 0xA7, 0xAC, 0xA6, 0xFF, 0xA1, 0xA7, 0xA0, 0xFF, + 0x99, 0x9E, 0x9A, 0xFF, 0x92, 0x97, 0x93, 0xFF, 0x8A, 0x8F, 0x8B, 0xFF, + 0x90, 0x95, 0x91, 0xFF, 0x9F, 0xA4, 0xA0, 0xFF, 0x97, 0x9C, 0x98, 0xFF, + 0x9A, 0x9F, 0x9B, 0xFF, 0xA6, 0xAB, 0xA7, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, + 0xC6, 0xCB, 0xC9, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, 0xC7, 0xCC, 0xCB, 0xFF, + 0xC4, 0xC9, 0xC7, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, 0xD1, 0xD6, 0xD4, 0xFF, + 0xBF, 0xC4, 0xC2, 0xFF, 0xD0, 0xD4, 0xD3, 0xFF, 0xC4, 0xC9, 0xC7, 0xFF, + 0xC2, 0xC6, 0xC5, 0xFF, 0xC9, 0xCD, 0xCC, 0xFF, 0xBF, 0xC6, 0xC4, 0xFF, + 0xC0, 0xC7, 0xC5, 0xFF, 0xC6, 0xCD, 0xCB, 0xFF, 0xC6, 0xCD, 0xCB, 0xFF, + 0xC3, 0xCB, 0xC8, 0xFF, 0xB9, 0xC0, 0xBE, 0xFF, 0xB2, 0xB9, 0xB7, 0xFF, + 0xAB, 0xB2, 0xB0, 0xFF, 0xB6, 0xBD, 0xBA, 0xFF, 0x9C, 0xA3, 0xA1, 0xFF, + 0x9D, 0xA4, 0xA2, 0xFF, 0xBD, 0xC4, 0xC1, 0xFF, 0xBA, 0xC1, 0xBF, 0xFF, + 0xAF, 0xB6, 0xB3, 0xFF, 0xAB, 0xB2, 0xB0, 0xFF, 0xB0, 0xB7, 0xB4, 0xFF, + 0xBA, 0xC1, 0xBF, 0xFF, 0xB4, 0xBC, 0xB9, 0xFF, 0xAC, 0xB3, 0xB1, 0xFF, + 0xA6, 0xAE, 0xAB, 0xFF, 0xC1, 0xC8, 0xC6, 0xFF, 0xC6, 0xCD, 0xCB, 0xFF, + 0xCF, 0xD6, 0xD4, 0xFF, 0xCF, 0xD6, 0xD4, 0xFF, 0xC6, 0xCD, 0xCB, 0xFF, + 0xC3, 0xCB, 0xC8, 0xFF, 0xB0, 0xBA, 0xB7, 0xFF, 0xA1, 0xAB, 0xA8, 0xFF, + 0xB3, 0xBC, 0xB9, 0xFF, 0xB1, 0xBD, 0xB9, 0xFF, 0xC5, 0xD1, 0xCD, 0xFF, + 0xC4, 0xD0, 0xCC, 0xFF, 0xBE, 0xCA, 0xC6, 0xFF, 0xC6, 0xD2, 0xCE, 0xFF, + 0xD3, 0xDF, 0xDB, 0xFF, 0xD4, 0xE0, 0xDC, 0xFF, 0xC8, 0xD4, 0xD0, 0xFF, + 0xAF, 0xBB, 0xB7, 0xFF, 0xA4, 0xB0, 0xAC, 0xFF, 0xB1, 0xBD, 0xB9, 0xFF, + 0xBC, 0xC6, 0xC2, 0xFF, 0xAD, 0xB7, 0xB3, 0xFF, 0xB4, 0xBE, 0xBA, 0xFF, + 0xCA, 0xD4, 0xD0, 0xFF, 0xCA, 0xD4, 0xD0, 0xFF, 0xB4, 0xBE, 0xBA, 0xFF, + 0xAC, 0xB5, 0xB2, 0xFF, 0xB2, 0xBB, 0xB8, 0xFF, 0x9C, 0xA3, 0xA1, 0xFF, + 0x98, 0xA0, 0x9D, 0xFF, 0xB4, 0xBC, 0xB9, 0xFF, 0xBE, 0xC5, 0xC2, 0xFF, + 0x9A, 0xA2, 0x9A, 0xFF, 0x9A, 0xA2, 0x9A, 0xFF, 0x9A, 0xA2, 0x9A, 0xFF, + 0x9C, 0xA4, 0x9D, 0xFF, 0x9F, 0xA7, 0xA2, 0xFF, 0x9E, 0xA6, 0xA1, 0xFF, + 0x9A, 0xA1, 0x9C, 0xFF, 0x9A, 0xA1, 0x9C, 0xFF, 0xA0, 0xA5, 0xA1, 0xFF, + 0xA4, 0xAA, 0xA6, 0xFF, 0xAD, 0xB2, 0xAC, 0xFF, 0xB6, 0xBC, 0xB5, 0xFF, + 0xAB, 0xB1, 0xAD, 0xFF, 0x9F, 0xA4, 0xA0, 0xFF, 0x8A, 0x8F, 0x89, 0xFF, + 0x71, 0x77, 0x70, 0xFF, 0x7E, 0x83, 0x7F, 0xFF, 0x8B, 0x90, 0x8C, 0xFF, + 0x98, 0x9D, 0x97, 0xFF, 0xB0, 0xB6, 0xAF, 0xFF, 0xA2, 0xA8, 0xA1, 0xFF, + 0x99, 0x9E, 0x98, 0xFF, 0x8D, 0x93, 0x8C, 0xFF, 0x82, 0x87, 0x81, 0xFF, + 0x86, 0x8B, 0x87, 0xFF, 0x8C, 0x91, 0x8D, 0xFF, 0x91, 0x96, 0x92, 0xFF, + 0x92, 0x97, 0x93, 0xFF, 0x92, 0x97, 0x93, 0xFF, 0x94, 0x99, 0x95, 0xFF, + 0x9F, 0xA4, 0xA0, 0xFF, 0xA8, 0xAD, 0xA9, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, + 0xC3, 0xC8, 0xC6, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, + 0xB2, 0xB7, 0xB6, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, 0xD2, 0xD7, 0xD5, 0xFF, + 0xC7, 0xCC, 0xCB, 0xFF, 0xC4, 0xC9, 0xC7, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, + 0xC4, 0xC9, 0xC7, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, 0xB1, 0xB8, 0xB6, 0xFF, + 0xB1, 0xB8, 0xB6, 0xFF, 0xAF, 0xB6, 0xB3, 0xFF, 0xAB, 0xB2, 0xB0, 0xFF, + 0xB7, 0xBE, 0xBB, 0xFF, 0xB7, 0xBE, 0xBB, 0xFF, 0xB3, 0xBA, 0xB8, 0xFF, + 0xB6, 0xBD, 0xBA, 0xFF, 0xB9, 0xC0, 0xBE, 0xFF, 0xA4, 0xAB, 0xA9, 0xFF, + 0x9B, 0xA2, 0xA0, 0xFF, 0xA9, 0xB0, 0xAD, 0xFF, 0xBD, 0xC4, 0xC1, 0xFF, + 0xB3, 0xBA, 0xB8, 0xFF, 0xAB, 0xB2, 0xB0, 0xFF, 0xA9, 0xB0, 0xAD, 0xFF, + 0xAC, 0xB3, 0xB1, 0xFF, 0xAD, 0xB5, 0xB2, 0xFF, 0xAF, 0xB6, 0xB3, 0xFF, + 0xB0, 0xB7, 0xB4, 0xFF, 0xC3, 0xCB, 0xC8, 0xFF, 0xC3, 0xCB, 0xC8, 0xFF, + 0xCE, 0xD5, 0xD3, 0xFF, 0xD3, 0xDA, 0xD7, 0xFF, 0xC1, 0xC8, 0xC6, 0xFF, + 0xBB, 0xC3, 0xC0, 0xFF, 0xB3, 0xBC, 0xB9, 0xFF, 0xB0, 0xBA, 0xB7, 0xFF, + 0xAF, 0xBB, 0xB7, 0xFF, 0xAF, 0xBB, 0xB7, 0xFF, 0xB7, 0xC3, 0xBF, 0xFF, + 0xB7, 0xC3, 0xBF, 0xFF, 0xBD, 0xC9, 0xC5, 0xFF, 0xCC, 0xD8, 0xD4, 0xFF, + 0xD2, 0xDE, 0xDA, 0xFF, 0xD9, 0xE5, 0xE1, 0xFF, 0xD5, 0xE1, 0xDD, 0xFF, + 0xC4, 0xD0, 0xCC, 0xFF, 0xAA, 0xB6, 0xB2, 0xFF, 0x9B, 0xA7, 0xA3, 0xFF, + 0xB7, 0xC1, 0xBE, 0xFF, 0xC2, 0xCC, 0xC8, 0xFF, 0xC8, 0xD1, 0xCE, 0xFF, + 0xCA, 0xD4, 0xD0, 0xFF, 0xCA, 0xD4, 0xD0, 0xFF, 0xB9, 0xC2, 0xBF, 0xFF, + 0xB9, 0xC2, 0xBF, 0xFF, 0xBD, 0xC7, 0xC4, 0xFF, 0xA4, 0xAB, 0xA9, 0xFF, + 0x97, 0x9E, 0x9C, 0xFF, 0xB0, 0xB7, 0xB4, 0xFF, 0xBE, 0xC5, 0xC2, 0xFF, + 0x9A, 0xA2, 0x9A, 0xFF, 0x9A, 0xA2, 0x9A, 0xFF, 0x9A, 0xA2, 0x9A, 0xFF, + 0x9C, 0xA4, 0x9D, 0xFF, 0x9F, 0xA7, 0xA2, 0xFF, 0x9E, 0xA6, 0xA1, 0xFF, + 0x9A, 0xA1, 0x9C, 0xFF, 0x96, 0x9E, 0x99, 0xFF, 0xB6, 0xBB, 0xB7, 0xFF, + 0xA9, 0xAE, 0xAA, 0xFF, 0xAB, 0xB1, 0xAB, 0xFF, 0xBB, 0xC0, 0xBA, 0xFF, + 0xA7, 0xAC, 0xA8, 0xFF, 0x97, 0x9C, 0x98, 0xFF, 0x8A, 0x8F, 0x89, 0xFF, + 0x8C, 0x92, 0x8B, 0xFF, 0xA9, 0xAE, 0xAA, 0xFF, 0xA2, 0xA7, 0xA3, 0xFF, + 0xB0, 0xB6, 0xAF, 0xFF, 0xB2, 0xB8, 0xB2, 0xFF, 0xA3, 0xA9, 0xA2, 0xFF, + 0x9C, 0xA2, 0x9B, 0xFF, 0x94, 0x9A, 0x93, 0xFF, 0x93, 0x99, 0x92, 0xFF, + 0xA0, 0xA5, 0xA1, 0xFF, 0xA1, 0xA6, 0xA2, 0xFF, 0xA1, 0xA6, 0xA2, 0xFF, + 0x9E, 0xA3, 0x9F, 0xFF, 0x7D, 0x82, 0x7E, 0xFF, 0x86, 0x8B, 0x87, 0xFF, + 0x8C, 0x91, 0x8D, 0xFF, 0x8E, 0x94, 0x90, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, + 0xC4, 0xC9, 0xC7, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, + 0xA6, 0xAA, 0xA9, 0xFF, 0xB2, 0xB7, 0xB6, 0xFF, 0xCD, 0xD2, 0xD0, 0xFF, + 0xC6, 0xCB, 0xC9, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, 0xC4, 0xC9, 0xC7, 0xFF, + 0xC2, 0xC6, 0xC5, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, 0xA2, 0xA9, 0xA7, 0xFF, + 0xAA, 0xB1, 0xAF, 0xFF, 0xA8, 0xAF, 0xAC, 0xFF, 0x9D, 0xA4, 0xA2, 0xFF, + 0xA4, 0xAB, 0xA9, 0xFF, 0xB4, 0xBC, 0xB9, 0xFF, 0xB7, 0xBE, 0xBB, 0xFF, + 0xB6, 0xBD, 0xBA, 0xFF, 0xB9, 0xC0, 0xBE, 0xFF, 0xB2, 0xB9, 0xB7, 0xFF, + 0xA3, 0xAA, 0xA8, 0xFF, 0xA2, 0xA9, 0xA7, 0xFF, 0xB6, 0xBD, 0xBA, 0xFF, + 0xB6, 0xBD, 0xBA, 0xFF, 0xB0, 0xB7, 0xB4, 0xFF, 0xA9, 0xB0, 0xAD, 0xFF, + 0xA4, 0xAB, 0xA9, 0xFF, 0xA8, 0xAF, 0xAC, 0xFF, 0xAD, 0xB5, 0xB2, 0xFF, + 0xB1, 0xB8, 0xB6, 0xFF, 0xB6, 0xBD, 0xBA, 0xFF, 0xB9, 0xC0, 0xBE, 0xFF, + 0xCA, 0xD2, 0xCF, 0xFF, 0xD7, 0xDF, 0xDC, 0xFF, 0xC5, 0xCC, 0xC9, 0xFF, + 0xBA, 0xC1, 0xBF, 0xFF, 0xB6, 0xC0, 0xBD, 0xFF, 0xB2, 0xBB, 0xB8, 0xFF, + 0xA3, 0xAF, 0xAB, 0xFF, 0xA4, 0xB0, 0xAC, 0xFF, 0x9C, 0xA8, 0xA4, 0xFF, + 0x9C, 0xA8, 0xA4, 0xFF, 0xB5, 0xC1, 0xBD, 0xFF, 0xC6, 0xD2, 0xCE, 0xFF, + 0xBD, 0xC9, 0xC5, 0xFF, 0xBF, 0xCB, 0xC7, 0xFF, 0xD9, 0xE5, 0xE1, 0xFF, + 0xD5, 0xE1, 0xDD, 0xFF, 0xB7, 0xC3, 0xBF, 0xFF, 0x8D, 0x99, 0x95, 0xFF, + 0x94, 0x9E, 0x9B, 0xFF, 0xB0, 0xBA, 0xB7, 0xFF, 0xB6, 0xC0, 0xBD, 0xFF, + 0xAE, 0xB8, 0xB4, 0xFF, 0xBD, 0xC7, 0xC4, 0xFF, 0xC0, 0xC9, 0xC6, 0xFF, + 0xBD, 0xC7, 0xC4, 0xFF, 0xC1, 0xCA, 0xC7, 0xFF, 0xAF, 0xB6, 0xB3, 0xFF, + 0x95, 0x9C, 0x9A, 0xFF, 0xA8, 0xAF, 0xAC, 0xFF, 0xBB, 0xC3, 0xC0, 0xFF, + 0xA5, 0xAD, 0xA6, 0xFF, 0xA2, 0xAA, 0xA2, 0xFF, 0xA3, 0xAB, 0xA4, 0xFF, + 0xA3, 0xAB, 0xA4, 0xFF, 0x96, 0x9E, 0x99, 0xFF, 0x9A, 0xA1, 0x9C, 0xFF, + 0x9E, 0xA6, 0xA1, 0xFF, 0xA2, 0xA9, 0xA4, 0xFF, 0xB5, 0xBA, 0xB6, 0xFF, + 0x98, 0x9D, 0x99, 0xFF, 0x8D, 0x93, 0x8C, 0xFF, 0x9A, 0xA0, 0x99, 0xFF, + 0x92, 0x97, 0x93, 0xFF, 0x90, 0x95, 0x91, 0xFF, 0x9C, 0xA2, 0x9B, 0xFF, + 0xB1, 0xB7, 0xB0, 0xFF, 0xB2, 0xB8, 0xB4, 0xFF, 0x9A, 0x9F, 0x9B, 0xFF, + 0xA3, 0xA9, 0xA2, 0xFF, 0x9C, 0xA2, 0x9B, 0xFF, 0x8C, 0x92, 0x8B, 0xFF, + 0x94, 0x9A, 0x93, 0xFF, 0xA0, 0xA5, 0x9F, 0xFF, 0xA7, 0xAC, 0xA6, 0xFF, + 0x9E, 0xA3, 0x9F, 0xFF, 0x9A, 0x9F, 0x9B, 0xFF, 0x95, 0x9B, 0x97, 0xFF, + 0x92, 0x97, 0x93, 0xFF, 0x8D, 0x92, 0x8E, 0xFF, 0x99, 0x9E, 0x9A, 0xFF, + 0x99, 0x9E, 0x9A, 0xFF, 0x8D, 0x92, 0x8E, 0xFF, 0xB4, 0xB8, 0xB7, 0xFF, + 0xC5, 0xCA, 0xC8, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0xA3, 0xA8, 0xA7, 0xFF, + 0xA8, 0xAD, 0xAB, 0xFF, 0xB0, 0xB5, 0xB3, 0xFF, 0xC5, 0xCA, 0xC8, 0xFF, + 0xBC, 0xC1, 0xBF, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, + 0xBC, 0xC1, 0xBF, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, 0xA1, 0xA8, 0xA5, 0xFF, + 0xB1, 0xB8, 0xB6, 0xFF, 0xB0, 0xB7, 0xB4, 0xFF, 0x9E, 0xA5, 0xA3, 0xFF, + 0x9B, 0xA2, 0xA0, 0xFF, 0xA8, 0xAF, 0xAC, 0xFF, 0xB4, 0xBC, 0xB9, 0xFF, + 0xB3, 0xBA, 0xB8, 0xFF, 0xBB, 0xC3, 0xC0, 0xFF, 0xB9, 0xC0, 0xBE, 0xFF, + 0xB6, 0xBD, 0xBA, 0xFF, 0xB1, 0xB8, 0xB6, 0xFF, 0xA8, 0xAF, 0xAC, 0xFF, + 0xB3, 0xBA, 0xB8, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, 0xB2, 0xB9, 0xB7, 0xFF, + 0xA8, 0xAF, 0xAC, 0xFF, 0xA8, 0xAF, 0xAC, 0xFF, 0xA9, 0xB0, 0xAD, 0xFF, + 0xAA, 0xB1, 0xAF, 0xFF, 0xA2, 0xA9, 0xA7, 0xFF, 0xA9, 0xB0, 0xAD, 0xFF, + 0xBF, 0xC6, 0xC4, 0xFF, 0xD1, 0xD9, 0xD6, 0xFF, 0xCD, 0xD4, 0xD2, 0xFF, + 0xC1, 0xC8, 0xC6, 0xFF, 0xBA, 0xC3, 0xC0, 0xFF, 0xA7, 0xB1, 0xAD, 0xFF, + 0xAE, 0xBA, 0xB6, 0xFF, 0xAF, 0xBB, 0xB7, 0xFF, 0x9B, 0xA7, 0xA3, 0xFF, + 0x9C, 0xA8, 0xA4, 0xFF, 0xC1, 0xCE, 0xC9, 0xFF, 0xCC, 0xD8, 0xD4, 0xFF, + 0xB1, 0xBD, 0xB9, 0xFF, 0xB1, 0xBD, 0xB9, 0xFF, 0xC8, 0xD4, 0xD0, 0xFF, + 0xDD, 0xE9, 0xE5, 0xFF, 0xC8, 0xD4, 0xD0, 0xFF, 0x94, 0x9E, 0x9B, 0xFF, + 0x8A, 0x94, 0x90, 0xFF, 0x98, 0xA2, 0x9E, 0xFF, 0xA6, 0xB0, 0xAC, 0xFF, + 0xA9, 0xB3, 0xB0, 0xFF, 0xA7, 0xB1, 0xAD, 0xFF, 0xBC, 0xC6, 0xC2, 0xFF, + 0xC4, 0xCE, 0xCB, 0xFF, 0xC0, 0xC7, 0xC5, 0xFF, 0xB7, 0xBE, 0xBB, 0xFF, + 0x95, 0x9C, 0x9A, 0xFF, 0xA3, 0xAA, 0xA8, 0xFF, 0xBA, 0xC1, 0xBF, 0xFF, + 0xAA, 0xB2, 0xA9, 0xFF, 0xA5, 0xAE, 0xA4, 0xFF, 0x98, 0xA1, 0x97, 0xFF, + 0x91, 0x99, 0x92, 0xFF, 0x8E, 0x96, 0x8F, 0xFF, 0x9A, 0xA2, 0x9A, 0xFF, + 0xAA, 0xB2, 0xAB, 0xFF, 0xB6, 0xBE, 0xB6, 0xFF, 0xAF, 0xB6, 0xB1, 0xFF, + 0x90, 0x98, 0x93, 0xFF, 0x85, 0x8D, 0x85, 0xFF, 0x90, 0x98, 0x91, 0xFF, + 0x90, 0x98, 0x93, 0xFF, 0x8A, 0x92, 0x8D, 0xFF, 0x93, 0x9B, 0x93, 0xFF, + 0xA4, 0xAC, 0xA5, 0xFF, 0xA3, 0xA9, 0xA2, 0xFF, 0x8A, 0x8F, 0x89, 0xFF, + 0x94, 0x9A, 0x93, 0xFF, 0x91, 0x97, 0x8E, 0xFF, 0x97, 0x9C, 0x96, 0xFF, + 0xA6, 0xAB, 0xA5, 0xFF, 0x9F, 0xA4, 0x9E, 0xFF, 0xB2, 0xB8, 0xB2, 0xFF, + 0x90, 0x95, 0x8F, 0xFF, 0x8E, 0x94, 0x8E, 0xFF, 0x90, 0x95, 0x91, 0xFF, + 0x93, 0x98, 0x94, 0xFF, 0x9F, 0xA4, 0xA0, 0xFF, 0xA4, 0xAA, 0xA6, 0xFF, + 0xA7, 0xAC, 0xA8, 0xFF, 0xAE, 0xB3, 0xAF, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, + 0xB8, 0xBD, 0xBB, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0xAD, 0xB1, 0xB0, 0xFF, + 0xB2, 0xB7, 0xB6, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, + 0xC3, 0xC8, 0xC6, 0xFF, 0xCD, 0xD2, 0xD0, 0xFF, 0xCB, 0xD0, 0xCE, 0xFF, + 0xC2, 0xC6, 0xC5, 0xFF, 0x9C, 0xA1, 0xA0, 0xFF, 0x93, 0x9A, 0x97, 0xFF, + 0xA2, 0xA9, 0xA7, 0xFF, 0xB9, 0xC0, 0xBE, 0xFF, 0xBA, 0xC1, 0xBF, 0xFF, + 0x9D, 0xA4, 0xA2, 0xFF, 0xA5, 0xAC, 0xAA, 0xFF, 0xAC, 0xB3, 0xB1, 0xFF, + 0xB4, 0xBC, 0xB9, 0xFF, 0xB1, 0xB8, 0xB6, 0xFF, 0xB7, 0xBE, 0xBB, 0xFF, + 0xB3, 0xBA, 0xB8, 0xFF, 0xA8, 0xAF, 0xAC, 0xFF, 0xA9, 0xB0, 0xAD, 0xFF, + 0xBA, 0xC1, 0xBF, 0xFF, 0xBE, 0xC5, 0xC2, 0xFF, 0xB1, 0xB8, 0xB6, 0xFF, + 0x9E, 0xA5, 0xA3, 0xFF, 0xA3, 0xAA, 0xA8, 0xFF, 0xA6, 0xAE, 0xAB, 0xFF, + 0xA8, 0xAF, 0xAC, 0xFF, 0x9F, 0xA7, 0xA4, 0xFF, 0xB2, 0xB9, 0xB7, 0xFF, + 0xB2, 0xB9, 0xB7, 0xFF, 0xCE, 0xD5, 0xD3, 0xFF, 0xD1, 0xDB, 0xD7, 0xFF, + 0xCA, 0xD4, 0xD0, 0xFF, 0xBA, 0xC3, 0xC0, 0xFF, 0x97, 0xA0, 0x9D, 0xFF, + 0xB7, 0xC3, 0xBF, 0xFF, 0xBD, 0xC9, 0xC5, 0xFF, 0x9D, 0xA9, 0xA5, 0xFF, + 0xA3, 0xAF, 0xAB, 0xFF, 0xC4, 0xD0, 0xCC, 0xFF, 0xCD, 0xD9, 0xD5, 0xFF, + 0xAF, 0xBB, 0xB7, 0xFF, 0xAE, 0xBA, 0xB6, 0xFF, 0xC9, 0xD3, 0xCF, 0xFF, + 0xDE, 0xE7, 0xE4, 0xFF, 0xDA, 0xE4, 0xE1, 0xFF, 0xC2, 0xCC, 0xC8, 0xFF, + 0xAB, 0xB2, 0xB0, 0xFF, 0xAB, 0xB2, 0xB0, 0xFF, 0xA9, 0xB3, 0xB0, 0xFF, + 0xA9, 0xB3, 0xB0, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, 0xC5, 0xCC, 0xC9, 0xFF, + 0xCD, 0xD4, 0xD2, 0xFF, 0xCF, 0xD6, 0xD4, 0xFF, 0xCC, 0xD1, 0xCF, 0xFF, + 0x98, 0x9C, 0x9B, 0xFF, 0x97, 0x9B, 0x9A, 0xFF, 0xA4, 0xA9, 0xA8, 0xFF, + 0xA4, 0xAC, 0xA3, 0xFF, 0xA6, 0xAF, 0xA5, 0xFF, 0xA9, 0xB1, 0xA7, 0xFF, + 0xAA, 0xB2, 0xA9, 0xFF, 0xA6, 0xAE, 0xA7, 0xFF, 0xA2, 0xAA, 0xA2, 0xFF, + 0x9B, 0xA3, 0x9B, 0xFF, 0x96, 0x9E, 0x97, 0xFF, 0x98, 0xA0, 0x9B, 0xFF, + 0x87, 0x8F, 0x8A, 0xFF, 0x82, 0x8A, 0x83, 0xFF, 0x8C, 0x94, 0x8C, 0xFF, + 0x94, 0x9B, 0x97, 0xFF, 0x96, 0x9E, 0x99, 0xFF, 0xA1, 0xA9, 0xA1, 0xFF, + 0xAC, 0xB4, 0xAD, 0xFF, 0xB2, 0xB8, 0xB2, 0xFF, 0x9F, 0xA4, 0x9E, 0xFF, + 0x97, 0x9C, 0x94, 0xFF, 0x8C, 0x92, 0x89, 0xFF, 0xA1, 0xA7, 0xA0, 0xFF, + 0xA4, 0xAA, 0xA4, 0xFF, 0x9F, 0xA4, 0x9E, 0xFF, 0xAB, 0xB1, 0xAB, 0xFF, + 0x92, 0x97, 0x91, 0xFF, 0x92, 0x97, 0x91, 0xFF, 0x97, 0x9C, 0x98, 0xFF, + 0x9F, 0xA4, 0xA0, 0xFF, 0xA0, 0xA5, 0xA1, 0xFF, 0x97, 0x9C, 0x98, 0xFF, + 0xA2, 0xA7, 0xA3, 0xFF, 0xB0, 0xB5, 0xB1, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, + 0xAE, 0xB3, 0xB1, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, 0xAB, 0xB0, 0xAF, 0xFF, + 0xBD, 0xC2, 0xC0, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, 0xAA, 0xAF, 0xAD, 0xFF, + 0xA8, 0xAD, 0xAB, 0xFF, 0xC4, 0xC9, 0xC7, 0xFF, 0xD0, 0xD4, 0xD3, 0xFF, + 0xCC, 0xD1, 0xCF, 0xFF, 0xA1, 0xA6, 0xA4, 0xFF, 0x8D, 0x94, 0x92, 0xFF, + 0x9C, 0xA3, 0xA1, 0xFF, 0xB3, 0xBA, 0xB8, 0xFF, 0xBF, 0xC6, 0xC4, 0xFF, + 0xB3, 0xBA, 0xB8, 0xFF, 0xB4, 0xBC, 0xB9, 0xFF, 0xB6, 0xBD, 0xBA, 0xFF, + 0xB0, 0xB7, 0xB4, 0xFF, 0xB0, 0xB7, 0xB4, 0xFF, 0xB6, 0xBD, 0xBA, 0xFF, + 0xB2, 0xB9, 0xB7, 0xFF, 0xA6, 0xAE, 0xAB, 0xFF, 0xA3, 0xAA, 0xA8, 0xFF, + 0xB4, 0xBC, 0xB9, 0xFF, 0xBF, 0xC6, 0xC4, 0xFF, 0xBD, 0xC4, 0xC1, 0xFF, + 0xAC, 0xB3, 0xB1, 0xFF, 0xA6, 0xAE, 0xAB, 0xFF, 0xA3, 0xAA, 0xA8, 0xFF, + 0xA4, 0xAB, 0xA9, 0xFF, 0xB0, 0xB7, 0xB4, 0xFF, 0xB6, 0xBD, 0xBA, 0xFF, + 0xA9, 0xB0, 0xAD, 0xFF, 0xC0, 0xC7, 0xC5, 0xFF, 0xC4, 0xCE, 0xCB, 0xFF, + 0xC8, 0xD1, 0xCE, 0xFF, 0xCB, 0xD5, 0xD2, 0xFF, 0xA8, 0xB2, 0xAF, 0xFF, + 0xB2, 0xBE, 0xBA, 0xFF, 0xB6, 0xC2, 0xBE, 0xFF, 0xA0, 0xAC, 0xA8, 0xFF, + 0xA3, 0xAF, 0xAB, 0xFF, 0xBA, 0xC7, 0xC2, 0xFF, 0xC4, 0xD0, 0xCC, 0xFF, + 0xB1, 0xBD, 0xB9, 0xFF, 0xB0, 0xBC, 0xB8, 0xFF, 0xCF, 0xD8, 0xD5, 0xFF, + 0xD1, 0xDB, 0xD7, 0xFF, 0xCE, 0xD7, 0xD4, 0xFF, 0xC7, 0xD0, 0xCD, 0xFF, + 0xC3, 0xCB, 0xC8, 0xFF, 0xBD, 0xC4, 0xC1, 0xFF, 0xB0, 0xBA, 0xB7, 0xFF, + 0xA9, 0xB3, 0xB0, 0xFF, 0xBA, 0xC1, 0xBF, 0xFF, 0xC6, 0xCD, 0xCB, 0xFF, + 0xCE, 0xD5, 0xD3, 0xFF, 0xD1, 0xD9, 0xD6, 0xFF, 0xC4, 0xC9, 0xC7, 0xFF, + 0x99, 0x9E, 0x9C, 0xFF, 0x8C, 0x91, 0x8F, 0xFF, 0x85, 0x8A, 0x88, 0xFF, + 0x9E, 0xA7, 0x9D, 0xFF, 0xA4, 0xAC, 0xA3, 0xFF, 0xAB, 0xB3, 0xAA, 0xFF, + 0xB1, 0xB9, 0xB0, 0xFF, 0xA9, 0xB1, 0xA9, 0xFF, 0x9F, 0xA7, 0xA0, 0xFF, + 0x94, 0x9C, 0x94, 0xFF, 0x8A, 0x92, 0x8B, 0xFF, 0xA9, 0xB1, 0xA9, 0xFF, + 0xA8, 0xB0, 0xA8, 0xFF, 0xAD, 0xB5, 0xAE, 0xFF, 0xB6, 0xBE, 0xB6, 0xFF, + 0xBD, 0xC5, 0xBD, 0xFF, 0xC1, 0xC9, 0xC2, 0xFF, 0xC1, 0xC9, 0xC2, 0xFF, + 0xBB, 0xC3, 0xBC, 0xFF, 0x9E, 0xA3, 0x9D, 0xFF, 0x9B, 0xA1, 0x9A, 0xFF, + 0x87, 0x8D, 0x87, 0xFF, 0x7D, 0x82, 0x7C, 0xFF, 0x9C, 0xA2, 0x9B, 0xFF, + 0x8D, 0x93, 0x8C, 0xFF, 0x94, 0x9A, 0x93, 0xFF, 0x98, 0x9D, 0x97, 0xFF, + 0x98, 0x9D, 0x97, 0xFF, 0x9B, 0xA1, 0x9A, 0xFF, 0xA6, 0xAB, 0xA5, 0xFF, + 0xA9, 0xAF, 0xA8, 0xFF, 0xB2, 0xB8, 0xB4, 0xFF, 0xB2, 0xB8, 0xB4, 0xFF, + 0xB0, 0xB5, 0xB1, 0xFF, 0xB2, 0xB8, 0xB4, 0xFF, 0xAA, 0xB1, 0xAF, 0xFF, + 0xA6, 0xAE, 0xAB, 0xFF, 0xB7, 0xBE, 0xBB, 0xFF, 0xB0, 0xB7, 0xB4, 0xFF, + 0xBD, 0xC4, 0xC1, 0xFF, 0xBB, 0xC3, 0xC0, 0xFF, 0x9E, 0xA5, 0xA3, 0xFF, + 0x8D, 0x94, 0x92, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, 0xCB, 0xD0, 0xCE, 0xFF, + 0xD1, 0xD6, 0xD4, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, 0x9D, 0xA4, 0xA2, 0xFF, + 0xA8, 0xAF, 0xAC, 0xFF, 0xB3, 0xBA, 0xB8, 0xFF, 0xC1, 0xC8, 0xC6, 0xFF, + 0xBF, 0xC6, 0xC4, 0xFF, 0xBE, 0xC5, 0xC2, 0xFF, 0xC0, 0xC7, 0xC5, 0xFF, + 0xBF, 0xC6, 0xC4, 0xFF, 0xB7, 0xBE, 0xBB, 0xFF, 0xBD, 0xC4, 0xC1, 0xFF, + 0xB9, 0xC0, 0xBE, 0xFF, 0xAD, 0xB5, 0xB2, 0xFF, 0xA6, 0xAE, 0xAB, 0xFF, + 0xB1, 0xB8, 0xB6, 0xFF, 0xBB, 0xC3, 0xC0, 0xFF, 0xC0, 0xC7, 0xC5, 0xFF, + 0xB3, 0xBA, 0xB8, 0xFF, 0xA6, 0xAE, 0xAB, 0xFF, 0xA3, 0xAA, 0xA8, 0xFF, + 0xAB, 0xB2, 0xB0, 0xFF, 0xB2, 0xB9, 0xB7, 0xFF, 0xAB, 0xB2, 0xB0, 0xFF, + 0x97, 0x9E, 0x9C, 0xFF, 0xB1, 0xB8, 0xB6, 0xFF, 0xB4, 0xBE, 0xBA, 0xFF, + 0xB4, 0xBE, 0xBA, 0xFF, 0xD2, 0xDC, 0xD9, 0xFF, 0xC4, 0xCE, 0xCB, 0xFF, + 0xBF, 0xCB, 0xC7, 0xFF, 0xBE, 0xCA, 0xC6, 0xFF, 0xB5, 0xC1, 0xBD, 0xFF, + 0xB3, 0xC0, 0xBB, 0xFF, 0xBF, 0xCB, 0xC7, 0xFF, 0xC7, 0xD3, 0xCF, 0xFF, + 0xC5, 0xD1, 0xCD, 0xFF, 0xC4, 0xD0, 0xCC, 0xFF, 0xC9, 0xD3, 0xCF, 0xFF, + 0xCC, 0xD6, 0xD3, 0xFF, 0xC9, 0xD3, 0xCF, 0xFF, 0xC2, 0xCC, 0xC8, 0xFF, + 0xC0, 0xC7, 0xC5, 0xFF, 0xB9, 0xC0, 0xBE, 0xFF, 0xAD, 0xB7, 0xB3, 0xFF, + 0xA6, 0xB0, 0xAC, 0xFF, 0xAD, 0xB5, 0xB2, 0xFF, 0xB9, 0xC0, 0xBE, 0xFF, + 0xC0, 0xC9, 0xC6, 0xFF, 0xC5, 0xCC, 0xC9, 0xFF, 0xB4, 0xBC, 0xB9, 0xFF, + 0x9C, 0xA3, 0xA1, 0xFF, 0x8F, 0x96, 0x94, 0xFF, 0x75, 0x7D, 0x7A, 0xFF, + 0x9D, 0xA5, 0x9C, 0xFF, 0x9E, 0xA7, 0x9D, 0xFF, 0x9F, 0xA8, 0x9E, 0xFF, + 0xA1, 0xA9, 0x9F, 0xFF, 0x91, 0x99, 0x92, 0xFF, 0x94, 0x9C, 0x94, 0xFF, + 0x97, 0x9F, 0x98, 0xFF, 0x9A, 0xA2, 0x9A, 0xFF, 0x93, 0x9B, 0x93, 0xFF, + 0x9E, 0xA6, 0x9F, 0xFF, 0xAB, 0xB3, 0xAC, 0xFF, 0xB1, 0xB9, 0xB2, 0xFF, + 0xA4, 0xAC, 0xA5, 0xFF, 0xA3, 0xAB, 0xA4, 0xFF, 0x91, 0x99, 0x92, 0xFF, + 0x79, 0x81, 0x7A, 0xFF, 0x83, 0x88, 0x82, 0xFF, 0x95, 0x9B, 0x94, 0xFF, + 0x82, 0x87, 0x81, 0xFF, 0x7D, 0x82, 0x7C, 0xFF, 0xAB, 0xB1, 0xAB, 0xFF, + 0x97, 0x9C, 0x96, 0xFF, 0xA6, 0xAB, 0xA5, 0xFF, 0xA4, 0xAA, 0xA4, 0xFF, + 0x9F, 0xA4, 0x9E, 0xFF, 0xA7, 0xAC, 0xA6, 0xFF, 0xAD, 0xB2, 0xAC, 0xFF, + 0xAA, 0xB0, 0xA9, 0xFF, 0xB5, 0xBA, 0xB6, 0xFF, 0xBC, 0xC1, 0xBD, 0xFF, + 0xAE, 0xB3, 0xAF, 0xFF, 0x98, 0x9D, 0x99, 0xFF, 0x9C, 0xA3, 0xA1, 0xFF, + 0xAA, 0xB1, 0xAF, 0xFF, 0xC2, 0xCA, 0xC7, 0xFF, 0xB7, 0xBE, 0xBB, 0xFF, + 0xBD, 0xC4, 0xC1, 0xFF, 0xBA, 0xC1, 0xBF, 0xFF, 0x97, 0x9E, 0x9C, 0xFF, + 0x88, 0x8F, 0x8D, 0xFF, 0xC7, 0xCC, 0xCB, 0xFF, 0xC0, 0xC5, 0xC4, 0xFF, + 0xCC, 0xD1, 0xCF, 0xFF, 0xCA, 0xCF, 0xCD, 0xFF, 0xBF, 0xC6, 0xC4, 0xFF, + 0xBA, 0xC1, 0xBF, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, 0xB9, 0xC0, 0xBE, 0xFF, + 0xC2, 0xCA, 0xC7, 0xFF, 0xBD, 0xC4, 0xC1, 0xFF, 0xC0, 0xC7, 0xC5, 0xFF, + 0xC9, 0xD1, 0xCE, 0xFF, 0xC1, 0xC8, 0xC6, 0xFF, 0xC8, 0xCF, 0xCD, 0xFF, + 0xC5, 0xCC, 0xC9, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, 0xB1, 0xB8, 0xB6, 0xFF, + 0xB2, 0xB9, 0xB7, 0xFF, 0xB6, 0xBD, 0xBA, 0xFF, 0xBA, 0xC1, 0xBF, 0xFF, + 0xB0, 0xB7, 0xB4, 0xFF, 0xA3, 0xAA, 0xA8, 0xFF, 0xA6, 0xAE, 0xAB, 0xFF, + 0xB8, 0xBF, 0xBD, 0xFF, 0xA5, 0xAC, 0xAA, 0xFF, 0x9B, 0xA2, 0xA0, 0xFF, + 0x87, 0x8E, 0x8C, 0xFF, 0xA6, 0xAE, 0xAB, 0xFF, 0xA8, 0xB2, 0xAF, 0xFF, + 0x96, 0x9F, 0x9C, 0xFF, 0xCA, 0xD4, 0xD0, 0xFF, 0xDC, 0xE5, 0xE2, 0xFF, + 0xCE, 0xDA, 0xD6, 0xFF, 0xCB, 0xD7, 0xD3, 0xFF, 0xCB, 0xD7, 0xD3, 0xFF, + 0xC7, 0xD3, 0xCF, 0xFF, 0xB7, 0xC3, 0xBF, 0xFF, 0xBE, 0xCA, 0xC6, 0xFF, + 0xC7, 0xD3, 0xCF, 0xFF, 0xC4, 0xD0, 0xCC, 0xFF, 0xBD, 0xC7, 0xC4, 0xFF, + 0xD2, 0xDC, 0xD9, 0xFF, 0xCF, 0xD8, 0xD5, 0xFF, 0xB6, 0xC0, 0xBD, 0xFF, + 0xAD, 0xB5, 0xB2, 0xFF, 0xAD, 0xB5, 0xB2, 0xFF, 0xAC, 0xB5, 0xB2, 0xFF, + 0xA9, 0xB3, 0xB0, 0xFF, 0xA3, 0xAA, 0xA8, 0xFF, 0xAF, 0xB6, 0xB3, 0xFF, + 0xB5, 0xBF, 0xBB, 0xFF, 0xB9, 0xC2, 0xBF, 0xFF, 0xA8, 0xAF, 0xAC, 0xFF, + 0xA3, 0xAA, 0xA8, 0xFF, 0xA1, 0xA8, 0xA5, 0xFF, 0x80, 0x87, 0x85, 0xFF, + 0xA4, 0xAC, 0xA3, 0xFF, 0xA3, 0xAB, 0xA2, 0xFF, 0xA3, 0xAB, 0xA2, 0xFF, + 0x83, 0x8C, 0x82, 0xFF, 0x80, 0x88, 0x7F, 0xFF, 0x78, 0x80, 0x77, 0xFF, + 0xB0, 0xB8, 0xAE, 0xFF, 0x90, 0x99, 0x8F, 0xFF, 0x78, 0x80, 0x79, 0xFF, + 0xB6, 0xBE, 0xB6, 0xFF, 0xAF, 0xB7, 0xAF, 0xFF, 0xB6, 0xBE, 0xB6, 0xFF, + 0x80, 0x88, 0x81, 0xFF, 0x93, 0x9B, 0x93, 0xFF, 0x75, 0x7D, 0x76, 0xFF, + 0x88, 0x90, 0x89, 0xFF, 0x79, 0x7F, 0x79, 0xFF, 0x94, 0x9A, 0x93, 0xFF, + 0x8E, 0x94, 0x8E, 0xFF, 0x98, 0x9D, 0x97, 0xFF, 0xAE, 0xB3, 0xAD, 0xFF, + 0xA0, 0xA5, 0x9F, 0xFF, 0xAF, 0xB5, 0xAE, 0xFF, 0xA8, 0xAE, 0xA7, 0xFF, + 0xA3, 0xA9, 0xA4, 0xFF, 0xB0, 0xB5, 0xB1, 0xFF, 0xB7, 0xBC, 0xB8, 0xFF, + 0xB2, 0xB8, 0xB4, 0xFF, 0xB9, 0xC1, 0xBC, 0xFF, 0xAD, 0xB5, 0xB0, 0xFF, + 0xA8, 0xAF, 0xAA, 0xFF, 0xB2, 0xBA, 0xB5, 0xFF, 0xAD, 0xB5, 0xB2, 0xFF, + 0x9A, 0xA1, 0x9E, 0xFF, 0xB9, 0xC0, 0xBE, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, + 0xB8, 0xBF, 0xBD, 0xFF, 0xC2, 0xCA, 0xC7, 0xFF, 0xA8, 0xAF, 0xAC, 0xFF, + 0x8C, 0x93, 0x90, 0xFF, 0xC7, 0xCE, 0xCC, 0xFF, 0xC2, 0xCA, 0xC7, 0xFF, + 0xBD, 0xC4, 0xC1, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, 0xB2, 0xB7, 0xB6, 0xFF, + 0xBB, 0xBF, 0xBE, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, + 0xBF, 0xC4, 0xC2, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, + 0xBE, 0xC3, 0xC1, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, + 0xC2, 0xC6, 0xC5, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, 0xAA, 0xAF, 0xAD, 0xFF, + 0xAD, 0xB1, 0xB0, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, 0xB4, 0xB8, 0xB7, 0xFF, + 0xBD, 0xC4, 0xC1, 0xFF, 0xBE, 0xC5, 0xC2, 0xFF, 0xB7, 0xBE, 0xBB, 0xFF, + 0xAB, 0xB2, 0xB0, 0xFF, 0xA2, 0xA9, 0xA7, 0xFF, 0xA1, 0xA8, 0xA5, 0xFF, + 0x98, 0xA0, 0x9D, 0xFF, 0xA5, 0xAC, 0xAA, 0xFF, 0xB4, 0xBE, 0xBA, 0xFF, + 0xB5, 0xBF, 0xBB, 0xFF, 0xBE, 0xC8, 0xC5, 0xFF, 0xE1, 0xEB, 0xE8, 0xFF, + 0xD3, 0xDF, 0xDB, 0xFF, 0xD3, 0xDF, 0xDB, 0xFF, 0xCB, 0xD7, 0xD3, 0xFF, + 0xBE, 0xCA, 0xC6, 0xFF, 0xBE, 0xC8, 0xC5, 0xFF, 0xB6, 0xC0, 0xBD, 0xFF, + 0xBD, 0xC7, 0xC4, 0xFF, 0xCF, 0xD8, 0xD5, 0xFF, 0xC1, 0xCA, 0xC7, 0xFF, + 0xC1, 0xCA, 0xC7, 0xFF, 0xC3, 0xCD, 0xC9, 0xFF, 0xC3, 0xCD, 0xC9, 0xFF, + 0xB8, 0xBF, 0xBD, 0xFF, 0xAF, 0xB6, 0xB3, 0xFF, 0xAC, 0xB3, 0xB1, 0xFF, + 0xAF, 0xB6, 0xB3, 0xFF, 0xB2, 0xBB, 0xB8, 0xFF, 0xAB, 0xB4, 0xB1, 0xFF, + 0xBE, 0xC8, 0xC5, 0xFF, 0xB7, 0xC1, 0xBE, 0xFF, 0x9D, 0xA6, 0xA3, 0xFF, + 0xAE, 0xB8, 0xB4, 0xFF, 0x99, 0xA3, 0xA0, 0xFF, 0x98, 0xA2, 0x9E, 0xFF, + 0x86, 0x8E, 0x85, 0xFF, 0x9A, 0xA2, 0x98, 0xFF, 0x9D, 0xA5, 0x9C, 0xFF, + 0xB1, 0xB9, 0xB0, 0xFF, 0x89, 0x92, 0x88, 0xFF, 0x90, 0x99, 0x8F, 0xFF, + 0xB7, 0xBF, 0xB5, 0xFF, 0x8C, 0x94, 0x8A, 0xFF, 0x7C, 0x84, 0x7D, 0xFF, + 0xAA, 0xB2, 0xAB, 0xFF, 0x9E, 0xA6, 0x9F, 0xFF, 0x96, 0x9E, 0x97, 0xFF, + 0x7F, 0x87, 0x80, 0xFF, 0x8E, 0x96, 0x8F, 0xFF, 0x7E, 0x86, 0x7E, 0xFF, + 0x8D, 0x95, 0x8E, 0xFF, 0x98, 0x9D, 0x97, 0xFF, 0x9A, 0xA0, 0x99, 0xFF, + 0x9E, 0xA3, 0x9D, 0xFF, 0xB2, 0xB8, 0xB2, 0xFF, 0xB1, 0xB7, 0xB0, 0xFF, + 0xA0, 0xA5, 0x9F, 0xFF, 0xA6, 0xAB, 0xA5, 0xFF, 0xAF, 0xB5, 0xAE, 0xFF, + 0xA4, 0xAA, 0xA6, 0xFF, 0xB0, 0xB5, 0xB1, 0xFF, 0xB2, 0xB8, 0xB4, 0xFF, + 0xAB, 0xB1, 0xAD, 0xFF, 0xAD, 0xB5, 0xB0, 0xFF, 0xA8, 0xAF, 0xAA, 0xFF, + 0xB2, 0xBA, 0xB5, 0xFF, 0xB9, 0xC1, 0xBC, 0xFF, 0xB3, 0xBA, 0xB8, 0xFF, + 0xA4, 0xAB, 0xA9, 0xFF, 0xB3, 0xBA, 0xB8, 0xFF, 0xAD, 0xB5, 0xB2, 0xFF, + 0xB7, 0xBE, 0xBB, 0xFF, 0xC3, 0xCB, 0xC8, 0xFF, 0xB3, 0xBA, 0xB8, 0xFF, + 0xA4, 0xAB, 0xA9, 0xFF, 0xB4, 0xBC, 0xB9, 0xFF, 0xBA, 0xC1, 0xBF, 0xFF, + 0xC3, 0xCB, 0xC8, 0xFF, 0xCA, 0xD2, 0xCF, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, + 0xBB, 0xBF, 0xBE, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, + 0xB7, 0xBC, 0xBA, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, + 0xBC, 0xC1, 0xBF, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, + 0xC3, 0xC8, 0xC6, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, + 0xB8, 0xBD, 0xBB, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, 0xC0, 0xC5, 0xC4, 0xFF, + 0xC6, 0xCD, 0xCB, 0xFF, 0xC2, 0xCA, 0xC7, 0xFF, 0xB4, 0xBC, 0xB9, 0xFF, + 0xA4, 0xAB, 0xA9, 0xFF, 0xA4, 0xAB, 0xA9, 0xFF, 0xA3, 0xAA, 0xA8, 0xFF, + 0x9B, 0xA2, 0xA0, 0xFF, 0xA8, 0xAF, 0xAC, 0xFF, 0xB9, 0xC2, 0xBF, 0xFF, + 0xBE, 0xC8, 0xC5, 0xFF, 0xC0, 0xC9, 0xC6, 0xFF, 0xD2, 0xDC, 0xD9, 0xFF, + 0xCD, 0xD9, 0xD5, 0xFF, 0xD1, 0xDD, 0xD9, 0xFF, 0xCD, 0xD9, 0xD5, 0xFF, + 0xC4, 0xD0, 0xCC, 0xFF, 0xC7, 0xD0, 0xCD, 0xFF, 0xBA, 0xC3, 0xC0, 0xFF, + 0xB9, 0xC2, 0xBF, 0xFF, 0xC4, 0xCE, 0xCB, 0xFF, 0xC7, 0xD0, 0xCD, 0xFF, + 0xC4, 0xCE, 0xCB, 0xFF, 0xC0, 0xC9, 0xC6, 0xFF, 0xC1, 0xCA, 0xC7, 0xFF, + 0xC5, 0xCC, 0xC9, 0xFF, 0xC1, 0xC8, 0xC6, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, + 0xB6, 0xBD, 0xBA, 0xFF, 0xBC, 0xC6, 0xC2, 0xFF, 0xBC, 0xC6, 0xC2, 0xFF, + 0xC7, 0xD0, 0xCD, 0xFF, 0xC5, 0xCF, 0xCC, 0xFF, 0xAC, 0xB5, 0xB2, 0xFF, + 0xAC, 0xB5, 0xB2, 0xFF, 0xA9, 0xB3, 0xB0, 0xFF, 0xBB, 0xC5, 0xC1, 0xFF, + 0x82, 0x8B, 0x81, 0xFF, 0x8A, 0x93, 0x89, 0xFF, 0x98, 0xA1, 0x97, 0xFF, + 0xC7, 0xCF, 0xC6, 0xFF, 0x8A, 0x93, 0x89, 0xFF, 0xA5, 0xAE, 0xA4, 0xFF, + 0xB6, 0xBE, 0xB4, 0xFF, 0x78, 0x80, 0x77, 0xFF, 0x72, 0x7A, 0x71, 0xFF, + 0x93, 0x9B, 0x91, 0xFF, 0x8F, 0x97, 0x8E, 0xFF, 0x79, 0x81, 0x78, 0xFF, + 0x8A, 0x92, 0x8B, 0xFF, 0x94, 0x9C, 0x94, 0xFF, 0x95, 0x9D, 0x96, 0xFF, + 0x9E, 0xA6, 0x9F, 0xFF, 0xA9, 0xAF, 0xA8, 0xFF, 0xA2, 0xA8, 0xA1, 0xFF, + 0xB2, 0xB8, 0xB2, 0xFF, 0xBE, 0xC4, 0xBD, 0xFF, 0xAA, 0xB0, 0xA9, 0xFF, + 0xAA, 0xB0, 0xA9, 0xFF, 0xA4, 0xAA, 0xA4, 0xFF, 0xAD, 0xB2, 0xAC, 0xFF, + 0xB2, 0xB8, 0xB4, 0xFF, 0xB9, 0xBF, 0xBB, 0xFF, 0xB7, 0xBC, 0xB8, 0xFF, + 0xAB, 0xB1, 0xAD, 0xFF, 0xA8, 0xAF, 0xAA, 0xFF, 0xB2, 0xBA, 0xB5, 0xFF, + 0xB9, 0xC1, 0xBC, 0xFF, 0xBB, 0xC3, 0xBE, 0xFF, 0xAC, 0xB5, 0xB2, 0xFF, + 0xAC, 0xB5, 0xB2, 0xFF, 0xB0, 0xBA, 0xB7, 0xFF, 0xA9, 0xB3, 0xB0, 0xFF, + 0xB4, 0xBE, 0xBA, 0xFF, 0xC3, 0xCD, 0xC9, 0xFF, 0xB4, 0xBE, 0xBA, 0xFF, + 0xAF, 0xB9, 0xB6, 0xFF, 0xC0, 0xC7, 0xC5, 0xFF, 0xC0, 0xC7, 0xC5, 0xFF, + 0xBF, 0xC6, 0xC4, 0xFF, 0xBE, 0xC5, 0xC2, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, + 0xAB, 0xB0, 0xAF, 0xFF, 0xA4, 0xA9, 0xA8, 0xFF, 0xA7, 0xAC, 0xAA, 0xFF, + 0xAD, 0xB1, 0xB0, 0xFF, 0xB4, 0xB8, 0xB7, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, + 0xB9, 0xBE, 0xBD, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, + 0xBC, 0xC1, 0xBF, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, 0xC0, 0xC5, 0xC4, 0xFF, + 0xB8, 0xBD, 0xBB, 0xFF, 0xAD, 0xB1, 0xB0, 0xFF, 0xA4, 0xA9, 0xA8, 0xFF, + 0xB7, 0xBE, 0xBB, 0xFF, 0xB3, 0xBA, 0xB8, 0xFF, 0xA5, 0xAC, 0xAA, 0xFF, + 0x95, 0x9C, 0x9A, 0xFF, 0xA8, 0xAF, 0xAC, 0xFF, 0xA6, 0xAE, 0xAB, 0xFF, + 0x9E, 0xA5, 0xA3, 0xFF, 0xAB, 0xB2, 0xB0, 0xFF, 0xC0, 0xC9, 0xC6, 0xFF, + 0xCA, 0xD4, 0xD0, 0xFF, 0xC0, 0xC9, 0xC6, 0xFF, 0xBD, 0xC7, 0xC4, 0xFF, + 0xC4, 0xD0, 0xCC, 0xFF, 0xCD, 0xD9, 0xD5, 0xFF, 0xD1, 0xDD, 0xD9, 0xFF, + 0xCD, 0xD9, 0xD5, 0xFF, 0xCA, 0xD4, 0xD0, 0xFF, 0xB5, 0xBF, 0xBB, 0xFF, + 0xA8, 0xB2, 0xAF, 0xFF, 0xAC, 0xB5, 0xB2, 0xFF, 0x9B, 0xA5, 0xA2, 0xFF, + 0xA6, 0xB0, 0xAC, 0xFF, 0xB4, 0xBE, 0xBA, 0xFF, 0xBD, 0xC7, 0xC4, 0xFF, + 0xC8, 0xCF, 0xCD, 0xFF, 0xC8, 0xCF, 0xCD, 0xFF, 0xC1, 0xC8, 0xC6, 0xFF, + 0xBA, 0xC1, 0xBF, 0xFF, 0xBC, 0xC6, 0xC2, 0xFF, 0xC7, 0xD0, 0xCD, 0xFF, + 0xC4, 0xD0, 0xCC, 0xFF, 0xCC, 0xD8, 0xD4, 0xFF, 0xB7, 0xC3, 0xBF, 0xFF, + 0xAC, 0xB9, 0xB4, 0xFF, 0xB8, 0xC4, 0xC0, 0xFF, 0xC0, 0xCC, 0xC8, 0xFF, + 0x9D, 0xA5, 0x9C, 0xFF, 0x7E, 0x86, 0x7C, 0xFF, 0x97, 0xA0, 0x96, 0xFF, + 0xBA, 0xC3, 0xB9, 0xFF, 0x81, 0x8A, 0x80, 0xFF, 0xAC, 0xB5, 0xAB, 0xFF, + 0xAB, 0xB3, 0xAA, 0xFF, 0x61, 0x69, 0x5F, 0xFF, 0x5E, 0x67, 0x5D, 0xFF, + 0x7C, 0x85, 0x7B, 0xFF, 0x89, 0x92, 0x88, 0xFF, 0x71, 0x79, 0x70, 0xFF, + 0x9B, 0xA3, 0x9B, 0xFF, 0xA1, 0xA9, 0xA1, 0xFF, 0xB0, 0xB8, 0xB0, 0xFF, + 0xB4, 0xBC, 0xB5, 0xFF, 0xA3, 0xA9, 0xA2, 0xFF, 0xA8, 0xAE, 0xA7, 0xFF, + 0xC2, 0xC7, 0xC1, 0xFF, 0xB5, 0xBA, 0xB4, 0xFF, 0x9B, 0xA1, 0x9A, 0xFF, + 0xBC, 0xC1, 0xBB, 0xFF, 0xAB, 0xB1, 0xAB, 0xFF, 0xA2, 0xA8, 0xA1, 0xFF, + 0xA2, 0xA7, 0xA3, 0xFF, 0xA7, 0xAC, 0xA8, 0xFF, 0xA0, 0xA5, 0xA1, 0xFF, + 0x93, 0x98, 0x94, 0xFF, 0xB2, 0xBA, 0xB5, 0xFF, 0xB9, 0xC1, 0xBC, 0xFF, + 0xBB, 0xC3, 0xBE, 0xFF, 0xBA, 0xC2, 0xBD, 0xFF, 0x9D, 0xA6, 0xA3, 0xFF, + 0xAE, 0xB8, 0xB4, 0xFF, 0xB4, 0xBE, 0xBA, 0xFF, 0xB2, 0xBB, 0xB8, 0xFF, + 0xB5, 0xBF, 0xBB, 0xFF, 0xC0, 0xC9, 0xC6, 0xFF, 0xB4, 0xBE, 0xBA, 0xFF, + 0xB2, 0xBB, 0xB8, 0xFF, 0xC1, 0xC8, 0xC6, 0xFF, 0xC0, 0xC7, 0xC5, 0xFF, + 0xBF, 0xC6, 0xC4, 0xFF, 0xBD, 0xC4, 0xC1, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, + 0x9E, 0xA2, 0xA1, 0xFF, 0xA0, 0xA5, 0xA3, 0xFF, 0xAE, 0xB3, 0xB1, 0xFF, + 0xA4, 0xA9, 0xA8, 0xFF, 0xB2, 0xB7, 0xB6, 0xFF, 0xBB, 0xBF, 0xBE, 0xFF, + 0xB8, 0xBD, 0xBB, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, + 0xB1, 0xB6, 0xB4, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, 0xBF, 0xC4, 0xC2, 0xFF, + 0xB7, 0xBC, 0xBA, 0xFF, 0xAD, 0xB1, 0xB0, 0xFF, 0xA6, 0xAA, 0xA9, 0xFF, + 0xAF, 0xB6, 0xB3, 0xFF, 0xB1, 0xB8, 0xB6, 0xFF, 0xAA, 0xB1, 0xAF, 0xFF, + 0x9E, 0xA5, 0xA3, 0xFF, 0xAA, 0xB1, 0xAF, 0xFF, 0xAA, 0xB1, 0xAF, 0xFF, + 0xA1, 0xA8, 0xA5, 0xFF, 0xAD, 0xB5, 0xB2, 0xFF, 0xC4, 0xCE, 0xCB, 0xFF, + 0xD3, 0xDD, 0xDA, 0xFF, 0xC1, 0xCA, 0xC7, 0xFF, 0xAF, 0xB9, 0xB6, 0xFF, + 0xBD, 0xC9, 0xC5, 0xFF, 0xCA, 0xD6, 0xD2, 0xFF, 0xD3, 0xDF, 0xDB, 0xFF, + 0xD3, 0xDF, 0xDB, 0xFF, 0xC7, 0xD0, 0xCD, 0xFF, 0xAB, 0xB4, 0xB1, 0xFF, + 0x97, 0xA0, 0x9D, 0xFF, 0x94, 0x9E, 0x9B, 0xFF, 0x88, 0x91, 0x8E, 0xFF, + 0x8D, 0x97, 0x94, 0xFF, 0x97, 0xA0, 0x9D, 0xFF, 0x9E, 0xA5, 0xA3, 0xFF, + 0xB6, 0xBD, 0xBA, 0xFF, 0xBF, 0xC6, 0xC4, 0xFF, 0xBF, 0xC6, 0xC4, 0xFF, + 0xB8, 0xBF, 0xBD, 0xFF, 0xB7, 0xC1, 0xBE, 0xFF, 0xC5, 0xCF, 0xCC, 0xFF, + 0xB9, 0xC5, 0xC1, 0xFF, 0xC8, 0xD4, 0xD0, 0xFF, 0xB9, 0xC5, 0xC1, 0xFF, + 0xB3, 0xC0, 0xBB, 0xFF, 0xBF, 0xCB, 0xC7, 0xFF, 0xA8, 0xB4, 0xB0, 0xFF, + 0x9C, 0xA4, 0x9B, 0xFF, 0x7E, 0x86, 0x7C, 0xFF, 0xBB, 0xC4, 0xBA, 0xFF, + 0xAF, 0xB7, 0xAD, 0xFF, 0x86, 0x8E, 0x85, 0xFF, 0xA2, 0xAA, 0xA0, 0xFF, + 0x7C, 0x85, 0x7B, 0xFF, 0x51, 0x5A, 0x50, 0xFF, 0x53, 0x5B, 0x51, 0xFF, + 0x83, 0x8C, 0x82, 0xFF, 0x8F, 0x97, 0x8E, 0xFF, 0x9C, 0xA4, 0x9B, 0xFF, + 0xC1, 0xC9, 0xC2, 0xFF, 0xBE, 0xC6, 0xBE, 0xFF, 0xA9, 0xB1, 0xA9, 0xFF, + 0xB7, 0xBF, 0xB7, 0xFF, 0xA7, 0xAC, 0xA6, 0xFF, 0x9E, 0xA3, 0x9D, 0xFF, + 0xB7, 0xBD, 0xB6, 0xFF, 0xA8, 0xAE, 0xA7, 0xFF, 0x91, 0x96, 0x92, 0xFF, + 0xA7, 0xAC, 0xA8, 0xFF, 0x9F, 0xA4, 0xA0, 0xFF, 0x93, 0x98, 0x94, 0xFF, + 0x9A, 0x9F, 0x9B, 0xFF, 0x98, 0x9D, 0x99, 0xFF, 0x98, 0x9D, 0x99, 0xFF, + 0x9B, 0xA0, 0x9C, 0xFF, 0xB2, 0xBA, 0xB5, 0xFF, 0xCA, 0xD2, 0xCD, 0xFF, + 0xC3, 0xCB, 0xC6, 0xFF, 0x9F, 0xA7, 0xA2, 0xFF, 0x8C, 0x96, 0x93, 0xFF, + 0xAB, 0xB4, 0xB1, 0xFF, 0xB5, 0xBF, 0xBB, 0xFF, 0xAF, 0xB9, 0xB6, 0xFF, + 0xB5, 0xBF, 0xBB, 0xFF, 0xC0, 0xC9, 0xC6, 0xFF, 0xC1, 0xCA, 0xC7, 0xFF, + 0xC0, 0xC9, 0xC6, 0xFF, 0xBD, 0xC4, 0xC1, 0xFF, 0xBD, 0xC4, 0xC1, 0xFF, + 0xC8, 0xCF, 0xCD, 0xFF, 0xBE, 0xC5, 0xC2, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, + 0xA3, 0xA8, 0xA7, 0xFF, 0xA9, 0xAE, 0xAC, 0xFF, 0xA7, 0xAC, 0xAA, 0xFF, + 0x9E, 0xA2, 0xA1, 0xFF, 0xB0, 0xB5, 0xB3, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, + 0xBB, 0xBF, 0xBE, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, + 0xBB, 0xBF, 0xBE, 0xFF, 0xBD, 0xC2, 0xC0, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, + 0xBF, 0xC4, 0xC2, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, + 0xC9, 0xD1, 0xCE, 0xFF, 0xC5, 0xCC, 0xC9, 0xFF, 0xB4, 0xBC, 0xB9, 0xFF, + 0xA3, 0xAA, 0xA8, 0xFF, 0xA5, 0xAC, 0xAA, 0xFF, 0xAA, 0xB1, 0xAF, 0xFF, + 0xAD, 0xB5, 0xB2, 0xFF, 0xAD, 0xB5, 0xB2, 0xFF, 0xBE, 0xC8, 0xC5, 0xFF, + 0xC9, 0xD3, 0xCF, 0xFF, 0xC7, 0xD0, 0xCD, 0xFF, 0xB9, 0xC2, 0xBF, 0xFF, + 0xAE, 0xBA, 0xB6, 0xFF, 0xC7, 0xD3, 0xCF, 0xFF, 0xD9, 0xE5, 0xE1, 0xFF, + 0xD8, 0xE4, 0xE0, 0xFF, 0xD3, 0xDD, 0xDA, 0xFF, 0xBD, 0xC7, 0xC4, 0xFF, + 0xAC, 0xB5, 0xB2, 0xFF, 0xA5, 0xAE, 0xAB, 0xFF, 0xAD, 0xB5, 0xB2, 0xFF, + 0xA3, 0xAA, 0xA8, 0xFF, 0xA1, 0xA8, 0xA5, 0xFF, 0xA8, 0xAF, 0xAC, 0xFF, + 0xAD, 0xB1, 0xB0, 0xFF, 0xA2, 0xA7, 0xA5, 0xFF, 0xA9, 0xB0, 0xAD, 0xFF, + 0xBD, 0xC4, 0xC1, 0xFF, 0xBA, 0xC3, 0xC0, 0xFF, 0xCC, 0xD6, 0xD3, 0xFF, + 0xB5, 0xC1, 0xBD, 0xFF, 0xAE, 0xBA, 0xB6, 0xFF, 0xB1, 0xBD, 0xB9, 0xFF, + 0xB1, 0xBD, 0xB9, 0xFF, 0xBA, 0xC7, 0xC2, 0xFF, 0xA0, 0xAC, 0xA8, 0xFF, + 0x91, 0x9A, 0x90, 0xFF, 0x82, 0x8B, 0x81, 0xFF, 0xB9, 0xC1, 0xB8, 0xFF, + 0x95, 0x9D, 0x94, 0xFF, 0x89, 0x92, 0x88, 0xFF, 0x98, 0xA1, 0x97, 0xFF, + 0x82, 0x8B, 0x81, 0xFF, 0x73, 0x7C, 0x72, 0xFF, 0x8E, 0x96, 0x8D, 0xFF, + 0xA5, 0xAE, 0xA4, 0xFF, 0xAD, 0xB6, 0xAC, 0xFF, 0xAF, 0xB7, 0xAD, 0xFF, + 0xB9, 0xC1, 0xBA, 0xFF, 0xB7, 0xBF, 0xB7, 0xFF, 0xAD, 0xB5, 0xAE, 0xFF, + 0xB7, 0xBF, 0xB7, 0xFF, 0x95, 0x9B, 0x94, 0xFF, 0xA1, 0xA7, 0xA0, 0xFF, + 0xBB, 0xC0, 0xBA, 0xFF, 0xB2, 0xB8, 0xB2, 0xFF, 0x92, 0x97, 0x93, 0xFF, + 0x8D, 0x92, 0x8E, 0xFF, 0x90, 0x95, 0x91, 0xFF, 0x9C, 0xA2, 0x9D, 0xFF, + 0xA4, 0xAA, 0xA6, 0xFF, 0xA6, 0xAB, 0xA7, 0xFF, 0xA2, 0xA7, 0xA3, 0xFF, + 0x9B, 0xA0, 0x9C, 0xFF, 0xBD, 0xC4, 0xBF, 0xFF, 0xC6, 0xCD, 0xC9, 0xFF, + 0xB2, 0xBA, 0xB5, 0xFF, 0x8D, 0x94, 0x90, 0xFF, 0xA5, 0xAE, 0xAB, 0xFF, + 0xB0, 0xBA, 0xB7, 0xFF, 0xB4, 0xBE, 0xBA, 0xFF, 0xA9, 0xB3, 0xB0, 0xFF, + 0xA1, 0xAB, 0xA8, 0xFF, 0xB2, 0xBB, 0xB8, 0xFF, 0xC2, 0xCC, 0xC8, 0xFF, + 0xBD, 0xC7, 0xC4, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, 0xBE, 0xC5, 0xC2, 0xFF, + 0xC8, 0xCF, 0xCD, 0xFF, 0xB7, 0xBE, 0xBB, 0xFF, 0x9E, 0xA2, 0xA1, 0xFF, + 0x90, 0x94, 0x93, 0xFF, 0x98, 0x9C, 0x9B, 0xFF, 0x94, 0x99, 0x97, 0xFF, + 0x94, 0x99, 0x97, 0xFF, 0xA7, 0xAC, 0xAA, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, + 0xB2, 0xB7, 0xB6, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0xBC, 0xC1, 0xBF, 0xFF, + 0xBF, 0xC4, 0xC2, 0xFF, 0xC2, 0xC6, 0xC5, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, + 0xC6, 0xCB, 0xC9, 0xFF, 0xC4, 0xC9, 0xC7, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, + 0xC0, 0xC7, 0xC5, 0xFF, 0xC3, 0xCB, 0xC8, 0xFF, 0xC0, 0xC7, 0xC5, 0xFF, + 0xB8, 0xBF, 0xBD, 0xFF, 0xAA, 0xB1, 0xAF, 0xFF, 0xAA, 0xB1, 0xAF, 0xFF, + 0xAD, 0xB5, 0xB2, 0xFF, 0xB2, 0xB9, 0xB7, 0xFF, 0xBA, 0xC3, 0xC0, 0xFF, + 0xC3, 0xCD, 0xC9, 0xFF, 0xBE, 0xC8, 0xC5, 0xFF, 0xAE, 0xB8, 0xB4, 0xFF, + 0x9D, 0xA9, 0xA5, 0xFF, 0xB9, 0xC5, 0xC1, 0xFF, 0xCE, 0xDA, 0xD6, 0xFF, + 0xD1, 0xDD, 0xD9, 0xFF, 0xD6, 0xDF, 0xDC, 0xFF, 0xCC, 0xD6, 0xD3, 0xFF, + 0xC8, 0xD1, 0xCE, 0xFF, 0xC7, 0xD0, 0xCD, 0xFF, 0xC9, 0xD1, 0xCE, 0xFF, + 0xB9, 0xC0, 0xBE, 0xFF, 0xAD, 0xB5, 0xB2, 0xFF, 0xAF, 0xB6, 0xB3, 0xFF, + 0xB0, 0xB5, 0xB3, 0xFF, 0xA3, 0xA8, 0xA7, 0xFF, 0x96, 0x9D, 0x9B, 0xFF, + 0x9A, 0xA1, 0x9E, 0xFF, 0xB0, 0xBA, 0xB7, 0xFF, 0xCE, 0xD7, 0xD4, 0xFF, + 0xC1, 0xCE, 0xC9, 0xFF, 0xAF, 0xBB, 0xB7, 0xFF, 0xA6, 0xB2, 0xAD, 0xFF, + 0xA9, 0xB5, 0xB1, 0xFF, 0xB5, 0xC1, 0xBD, 0xFF, 0xAF, 0xBB, 0xB7, 0xFF, + 0x7F, 0x87, 0x7E, 0xFF, 0x97, 0xA0, 0x96, 0xFF, 0xA5, 0xAE, 0xA4, 0xFF, + 0x7E, 0x86, 0x7C, 0xFF, 0x8E, 0x96, 0x8D, 0xFF, 0x95, 0x9D, 0x94, 0xFF, + 0x90, 0x99, 0x8F, 0xFF, 0xAA, 0xB2, 0xA9, 0xFF, 0xAA, 0xB2, 0xA9, 0xFF, + 0xA2, 0xAA, 0xA0, 0xFF, 0xAA, 0xB2, 0xA9, 0xFF, 0xAD, 0xB6, 0xAC, 0xFF, + 0xAD, 0xB5, 0xAE, 0xFF, 0xAD, 0xB5, 0xAE, 0xFF, 0xB1, 0xB9, 0xB2, 0xFF, + 0xA8, 0xB0, 0xA8, 0xFF, 0x8E, 0x94, 0x8E, 0xFF, 0xAB, 0xB1, 0xAB, 0xFF, + 0xB9, 0xBF, 0xB9, 0xFF, 0xB0, 0xB6, 0xAF, 0xFF, 0x91, 0x96, 0x92, 0xFF, + 0x83, 0x88, 0x84, 0xFF, 0x94, 0x99, 0x95, 0xFF, 0xA6, 0xAB, 0xA7, 0xFF, + 0xA3, 0xA9, 0xA4, 0xFF, 0xAA, 0xB0, 0xAB, 0xFF, 0xA1, 0xA6, 0xA2, 0xFF, + 0x8E, 0x94, 0x90, 0xFF, 0x9F, 0xA7, 0xA2, 0xFF, 0xA6, 0xAE, 0xA9, 0xFF, + 0x9D, 0xA5, 0xA0, 0xFF, 0x89, 0x91, 0x8C, 0xFF, 0xB5, 0xBF, 0xBB, 0xFF, + 0xB9, 0xC2, 0xBF, 0xFF, 0xB4, 0xBE, 0xBA, 0xFF, 0xA8, 0xB2, 0xAF, 0xFF, + 0x93, 0x9D, 0x9A, 0xFF, 0xA4, 0xAD, 0xAA, 0xFF, 0xC0, 0xC9, 0xC6, 0xFF, + 0xAB, 0xB4, 0xB1, 0xFF, 0xBD, 0xC4, 0xC1, 0xFF, 0xC2, 0xCA, 0xC7, 0xFF, + 0xC3, 0xCB, 0xC8, 0xFF, 0xA2, 0xA9, 0xA7, 0xFF, 0x8E, 0x93, 0x92, 0xFF, + 0x87, 0x8C, 0x8B, 0xFF, 0x93, 0x98, 0x96, 0xFF, 0x90, 0x94, 0x93, 0xFF, + 0x91, 0x96, 0x94, 0xFF, 0xA3, 0xA8, 0xA7, 0xFF, 0xB1, 0xB6, 0xB4, 0xFF, + 0xAF, 0xB4, 0xB2, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, 0xB8, 0xBD, 0xBB, 0xFF, + 0xBC, 0xC1, 0xBF, 0xFF, 0xBE, 0xC3, 0xC1, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, + 0xC2, 0xC6, 0xC5, 0xFF, 0xB7, 0xBC, 0xBA, 0xFF, 0x9F, 0xA3, 0xA2, 0xFF, + 0xAF, 0xB6, 0xB3, 0xFF, 0xB8, 0xBF, 0xBD, 0xFF, 0xBB, 0xC3, 0xC0, 0xFF, + 0xB8, 0xBF, 0xBD, 0xFF, 0xB1, 0xB8, 0xB6, 0xFF, 0xAA, 0xB1, 0xAF, 0xFF, + 0xAD, 0xB5, 0xB2, 0xFF, 0xB9, 0xC0, 0xBE, 0xFF, 0xB4, 0xBE, 0xBA, 0xFF, + 0xBB, 0xC5, 0xC1, 0xFF, 0xB2, 0xBB, 0xB8, 0xFF, 0x9F, 0xA9, 0xA5, 0xFF, + 0x9A, 0xA6, 0xA2, 0xFF, 0xB2, 0xBE, 0xBA, 0xFF, 0xC5, 0xD1, 0xCD, 0xFF, + 0xC4, 0xD0, 0xCC, 0xFF, 0xD1, 0xDB, 0xD7, 0xFF, 0xD7, 0xE0, 0xDD, 0xFF, + 0xD2, 0xDC, 0xD9, 0xFF, 0xC7, 0xD0, 0xCD, 0xFF, 0xBB, 0xC3, 0xC0, 0xFF, + 0xB3, 0xBA, 0xB8, 0xFF, 0xB6, 0xBD, 0xBA, 0xFF, 0xBF, 0xC6, 0xC4, 0xFF, + 0xC3, 0xC8, 0xC6, 0xFF, 0xB9, 0xBE, 0xBD, 0xFF, 0xA5, 0xAC, 0xAA, 0xFF, + 0x94, 0x9B, 0x99, 0xFF, 0x9B, 0xA5, 0xA2, 0xFF, 0xB5, 0xBF, 0xBB, 0xFF, + 0xBD, 0xC9, 0xC5, 0xFF, 0xAE, 0xBA, 0xB6, 0xFF, 0xAB, 0xB7, 0xB3, 0xFF, + 0xAF, 0xBB, 0xB7, 0xFF, 0xAE, 0xBA, 0xB6, 0xFF, 0xBA, 0xC7, 0xC2, 0xFF, + 0x72, 0x7A, 0x71, 0xFF, 0xAC, 0xB5, 0xAB, 0xFF, 0x8A, 0x93, 0x89, 0xFF, + 0x7E, 0x86, 0x7C, 0xFF, 0xA2, 0xAA, 0xA0, 0xFF, 0xA1, 0xA9, 0x9F, 0xFF, + 0x9C, 0xA4, 0x9B, 0xFF, 0x9E, 0xA7, 0x9D, 0xFF, 0xA1, 0xA9, 0x9F, 0xFF, + 0x8D, 0x95, 0x8B, 0xFF, 0xA2, 0xAA, 0xA0, 0xFF, 0xA6, 0xAF, 0xA5, 0xFF, + 0xB1, 0xB9, 0xB2, 0xFF, 0xAB, 0xB3, 0xAC, 0xFF, 0xB1, 0xB9, 0xB2, 0xFF, + 0x93, 0x9B, 0x93, 0xFF, 0x94, 0x9A, 0x93, 0xFF, 0xB8, 0xBE, 0xB7, 0xFF, + 0xB4, 0xB9, 0xB3, 0xFF, 0xA3, 0xA9, 0xA2, 0xFF, 0x8E, 0x94, 0x90, 0xFF, + 0x92, 0x97, 0x93, 0xFF, 0xAB, 0xB1, 0xAD, 0xFF, 0xA4, 0xAA, 0xA6, 0xFF, + 0xB5, 0xBA, 0xB6, 0xFF, 0xC0, 0xC6, 0xC2, 0xFF, 0xB4, 0xB9, 0xB5, 0xFF, + 0x97, 0x9C, 0x98, 0xFF, 0x8D, 0x94, 0x90, 0xFF, 0x9F, 0xA7, 0xA2, 0xFF, + 0xB1, 0xB8, 0xB4, 0xFF, 0xB8, 0xBF, 0xBB, 0xFF, 0xB9, 0xC2, 0xBF, 0xFF, + 0xB7, 0xC1, 0xBE, 0xFF, 0xB3, 0xBC, 0xB9, 0xFF, 0xB2, 0xBB, 0xB8, 0xFF, + 0x93, 0x9D, 0x9A, 0xFF, 0x9F, 0xA9, 0xA5, 0xFF, 0xBA, 0xC3, 0xC0, 0xFF, + 0x93, 0x9D, 0x9A, 0xFF, 0xA4, 0xAB, 0xA9, 0xFF, 0xBA, 0xC1, 0xBF, 0xFF, + 0xCA, 0xD2, 0xCF, 0xFF, 0xB0, 0xB7, 0xB4, 0xFF, 0x9A, 0x9F, 0x9D, 0xFF, + 0x95, 0x9A, 0x99, 0xFF, 0x9E, 0xA2, 0xA1, 0xFF, 0x98, 0x9C, 0x9B, 0xFF, + 0x95, 0x9A, 0x99, 0xFF, 0xA8, 0xAD, 0xAB, 0xFF, 0xB6, 0xBB, 0xB9, 0xFF, + 0xB2, 0xB7, 0xB6, 0xFF, 0xAD, 0xB1, 0xB0, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, + 0xB2, 0xB7, 0xB6, 0xFF, 0xB5, 0xBA, 0xB8, 0xFF, 0xAB, 0xB0, 0xAF, 0xFF, + 0xC2, 0xC6, 0xC5, 0xFF, 0xC3, 0xC8, 0xC6, 0xFF, 0xAF, 0xB4, 0xB2, 0xFF, + 0xB7, 0xBE, 0xBB, 0xFF, 0xBF, 0xC6, 0xC4, 0xFF, 0xC1, 0xC8, 0xC6, 0xFF, + 0xBB, 0xC3, 0xC0, 0xFF, 0xB6, 0xBD, 0xBA, 0xFF, 0xAA, 0xB1, 0xAF, 0xFF, + 0xAD, 0xB5, 0xB2, 0xFF, 0xBF, 0xC6, 0xC4, 0xFF, 0xB0, 0xBA, 0xB7, 0xFF, + 0xB5, 0xBF, 0xBB, 0xFF, 0xA9, 0xB3, 0xB0, 0xFF, 0x94, 0x9E, 0x9B, 0xFF, + 0xA6, 0xB2, 0xAD, 0xFF, 0xB8, 0xC4, 0xC0, 0xFF, 0xC0, 0xCC, 0xC8, 0xFF, + 0xB9, 0xC5, 0xC1, 0xFF, 0xC9, 0xD3, 0xCF, 0xFF, 0xD7, 0xE0, 0xDD, 0xFF, + 0xD2, 0xDC, 0xD9, 0xFF, 0xBD, 0xC7, 0xC4, 0xFF, 0xBE, 0xC5, 0xC2, 0xFF, + 0xB0, 0xB7, 0xB4, 0xFF, 0xA9, 0xB0, 0xAD, 0xFF, 0xAC, 0xB3, 0xB1, 0xFF, + 0xD0, 0xD4, 0xD3, 0xFF, 0xD1, 0xD6, 0xD4, 0xFF, 0xBF, 0xC6, 0xC4, 0xFF, + 0xA2, 0xA9, 0xA7, 0xFF, 0x90, 0x99, 0x96, 0xFF, 0x83, 0x8D, 0x89, 0xFF, + 0xA4, 0xB0, 0xAC, 0xFF, 0xAC, 0xB9, 0xB4, 0xFF, 0xBC, 0xC8, 0xC4, 0xFF, + 0xB7, 0xC3, 0xBF, 0xFF, 0xA2, 0xAE, 0xAA, 0xFF, 0xB6, 0xC2, 0xBE, 0xFF +}; diff --git a/Source/hoc-clk/overlay/src/ui/gui/fatal_gui.cpp b/Source/hoc-clk/overlay/src/ui/gui/fatal_gui.cpp new file mode 100644 index 00000000..fa2c6c89 --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/gui/fatal_gui.cpp @@ -0,0 +1,84 @@ +/* + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* -------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * , , + * wrote this file. As long as you retain this notice you can do whatever you + * want with this stuff. If you meet any of us some day, and you think this + * stuff is worth it, you can buy us a beer in return. - The sys-clk authors + * -------------------------------------------------------------------------- + */ + + +#include "fatal_gui.h" + +FatalGui::FatalGui(const std::string message, const std::string info) +{ + this->message = message; + this->info = info; +} + +void FatalGui::openWithResultCode(std::string tag, Result rc) +{ + char rcStr[32]; + std::string info = tag; + info.append(rcStr, snprintf(rcStr, sizeof(rcStr), "\n\n[0x%x] %04d-%04d", rc, R_MODULE(rc), R_DESCRIPTION(rc))); + + tsl::changeTo( + "Could not connect to hoc-clk sysmodule.\n\n" + "\n" + "Please make sure everything is\n\n" + "correctly installed and enabled.", + info + ); +} + +tsl::elm::Element* FatalGui::baseUI() +{ + tsl::elm::CustomDrawer* drawer = new tsl::elm::CustomDrawer([this](tsl::gfx::Renderer* renderer, u16 x, u16 y, u16 w, u16 h) { + renderer->drawString("\uE150", false, 40, 210, 40, TEXT_COLOR); + renderer->drawString("Fatal error", false, 100, 210, 30, TEXT_COLOR); + + std::uint32_t txtY = 255; + if(!this->message.empty()) + { + txtY += renderer->drawString(this->message.c_str(), false, 40, txtY, 23, TEXT_COLOR).second; + txtY += 55; + } + + if(!this->info.empty()) + { + renderer->drawString(this->info.c_str(), false, 40, txtY, 18, DESC_COLOR); + } + }); + + return drawer; +} + +bool FatalGui::handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState joyStickPosLeft, HidAnalogStickState joyStickPosRight) +{ + if((keysDown & HidNpadButton_A) == HidNpadButton_A || (keysDown & HidNpadButton_B) == HidNpadButton_B) + { + while(tsl::Overlay::get()->getCurrentGui() != nullptr) { + tsl::goBack(); + } + return true; + } + + return false; +} diff --git a/Source/hoc-clk/overlay/src/ui/gui/fatal_gui.h b/Source/hoc-clk/overlay/src/ui/gui/fatal_gui.h new file mode 100644 index 00000000..61616e58 --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/gui/fatal_gui.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* -------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * , , + * wrote this file. As long as you retain this notice you can do whatever you + * want with this stuff. If you meet any of us some day, and you think this + * stuff is worth it, you can buy us a beer in return. - The sys-clk authors + * -------------------------------------------------------------------------- + */ + + +#pragma once + +#include + +#include "base_gui.h" + +class FatalGui : public BaseGui +{ + protected: + std::string message; + std::string info; + + public: + FatalGui(const std::string message, const std::string info); + ~FatalGui() {} + tsl::elm::Element* baseUI() override; + bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState joyStickPosLeft, HidAnalogStickState joyStickPosRight); + static void openWithResultCode(std::string tag, Result rc); +}; diff --git a/Source/hoc-clk/overlay/src/ui/gui/freq_choice_gui.cpp b/Source/hoc-clk/overlay/src/ui/gui/freq_choice_gui.cpp new file mode 100644 index 00000000..311ce921 --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/gui/freq_choice_gui.cpp @@ -0,0 +1,219 @@ +/* + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* -------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * , , + * wrote this file. As long as you retain this notice you can do whatever you + * want with this stuff. If you meet any of us some day, and you think this + * stuff is worth it, you can buy us a beer in return. - The sys-clk authors + * -------------------------------------------------------------------------- + */ + + +#include "freq_choice_gui.h" + +#include "../format.h" +#include "fatal_gui.h" + +FreqChoiceGui::FreqChoiceGui(std::uint32_t selectedHz, + std::uint32_t* hzList, + std::uint32_t hzCount, + SysClkModule module, + FreqChoiceListener listener, + bool checkMax, + std::map labels) +{ + this->selectedHz = selectedHz; + this->hzList = hzList; + this->hzCount = hzCount; + this->module = module; + this->listener = listener; + this->checkMax = checkMax; + this->labels = labels; + this->configList = new SysClkConfigValueList {}; +} + +FreqChoiceGui::~FreqChoiceGui() +{ + delete this->configList; +} + +tsl::elm::ListItem* FreqChoiceGui::createFreqListItem(std::uint32_t hz, bool selected, int safety) +{ + std::string text = formatListFreqHz(hz); + + std::string rightText = ""; + auto it = labels.find(hz); + if (it != labels.end()) + rightText = it->second; + + if (selected) + const_cast(rightText) = "\uE14B"; + + tsl::elm::ListItem* listItem = + new tsl::elm::ListItem(text, rightText, false); + + switch (safety) + { + case 0: + listItem->setTextColor(tsl::Color(255, 255, 255, 255)); + listItem->setValueColor(tsl::Color(255, 255, 255, 255)); + break; + case 1: + listItem->setTextColor(tsl::Color(255, 165, 0, 255)); + listItem->setValueColor(tsl::Color(255, 165, 0, 255)); + break; + case 2: + listItem->setTextColor(tsl::Color(255, 0, 0, 255)); + listItem->setValueColor(tsl::Color(255, 0, 0, 255)); + break; + } + + // Make annotation grey + if (!rightText.empty() && !selected) + listItem->setValueColor(tsl::Color(180, 180, 180, 255)); + else if(selected) + listItem->setValueColor(tsl::infoTextColor); + + listItem->setClickListener([this, hz](u64 keys) + { + if ((keys & HidNpadButton_A) == HidNpadButton_A && this->listener) { + if (this->listener(hz)) { + tsl::goBack(); + } + return true; + } + return false; + }); + + return listItem; +} + +void FreqChoiceGui::listUI() +{ + sysclkIpcGetConfigValues(this->configList); + + // Header based on CPU/GPU/MEM module + std::string moduleName = sysclkFormatModule(this->module, false); + this->listElement->addItem(new tsl::elm::CategoryHeader(moduleName)); + + // Default option + this->listElement->addItem( + this->createFreqListItem(0, this->selectedHz == 0, 0)); + + for (std::uint32_t i = 0; i < this->hzCount; i++) + { + std::uint32_t hz = this->hzList[i]; + uint32_t mhz = hz / 1000000; + + // if (checkMax && IsMariko()) { + // if (moduleName == "cpu" && + // this->configList->values[HocClkConfigValue_MarikoMaxCpuClock] < mhz) + // continue; + + // // if (moduleName == "gpu" && + // // this->configList->values[HocClkConfigValue_MarikoMaxGpuClock] < mhz) + // // continue; + + // // if (moduleName == "mem" && + // // this->configList->values[HocClkConfigValue_MarikoMaxMemClock] < mhz) + // // continue; + + if (checkMax && IsErista()) + if (moduleName == "cpu" && this->configList->values[HocClkConfigValue_EristaMaxCpuClock] < mhz) + continue; + + // // if (moduleName == "gpu" && + // // this->configList->values[HocClkConfigValue_EristaMaxGpuClock] < mhz) + // // continue; + + // // if (moduleName == "mem" && + // // this->configList->values[HocClkConfigValue_EristaMaxMemClock] < mhz) + // // continue; + // } + + if (moduleName == "mem" && mhz <= 600) + continue; + + uint32_t unsafe_cpu; + uint32_t unsafe_gpu; + uint32_t danger_cpu; + uint32_t danger_gpu; + + if (IsMariko()) + { + unsafe_cpu = this->configList->values[KipConfigValue_marikoCpuUVHigh] ? 2398 : 1964; + if(this->configList->values[KipConfigValue_marikoGpuUV] == 0) { + unsafe_gpu = 1076; + } else if (this->configList->values[KipConfigValue_marikoGpuUV] == 1) { + unsafe_gpu = 1153; + } else { + unsafe_gpu = 1229; + } + danger_cpu = this->configList->values[KipConfigValue_marikoCpuUVHigh] ? 2500 : 2398; + danger_gpu = 1306; + } + else + { + unsafe_cpu = this->configList->values[KipConfigValue_eristaCpuUV] ? 2092 : 1786; + if(this->configList->values[KipConfigValue_eristaGpuUV] == 0) { + unsafe_gpu = 922; + } else { + unsafe_gpu = 961; + } + danger_cpu = this->configList->values[KipConfigValue_eristaCpuUV] ? 2194 : 1964; + danger_gpu = 999; + } + + int safety = 0; + + if (moduleName == "cpu") { + + if (mhz >= danger_cpu) + safety = 2; + else if (mhz >= unsafe_cpu) + safety = 1; + else + safety = 0; + + } else if (moduleName == "gpu") { + + if (mhz >= danger_gpu) + safety = 2; + else if (mhz >= unsafe_gpu) + safety = 1; + else + safety = 0; + + } else if (moduleName == "mem") { + + safety = 0; + + } + + this->listElement->addItem( + this->createFreqListItem( + hz, + (mhz == this->selectedHz / 1000000), + safety + ) + ); + } + + this->listElement->jumpToItem("", ""); +} \ No newline at end of file diff --git a/Source/hoc-clk/overlay/src/ui/gui/freq_choice_gui.h b/Source/hoc-clk/overlay/src/ui/gui/freq_choice_gui.h new file mode 100644 index 00000000..1ccaf264 --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/gui/freq_choice_gui.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* -------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * , , + * wrote this file. As long as you retain this notice you can do whatever you + * want with this stuff. If you meet any of us some day, and you think this + * stuff is worth it, you can buy us a beer in return. - The sys-clk authors + * -------------------------------------------------------------------------- + */ + + +#pragma once + +#include +#include +#include +#include "base_menu_gui.h" + +using FreqChoiceListener = std::function; + +class FreqChoiceGui : public BaseMenuGui +{ +protected: + SysClkConfigValueList* configList; + std::uint32_t selectedHz; + std::uint32_t* hzList; + std::uint32_t hzCount; + SysClkModule module; + FreqChoiceListener listener; + bool checkMax; + + std::map labels; + + tsl::elm::ListItem* createFreqListItem(std::uint32_t hz, bool selected, int safety); + +public: + FreqChoiceGui(std::uint32_t selectedHz, + std::uint32_t* hzList, + std::uint32_t hzCount, + SysClkModule module, + FreqChoiceListener listener, + bool checkMax = true, + std::map labels = {}); + + ~FreqChoiceGui(); + + void listUI() override; +}; \ No newline at end of file diff --git a/Source/hoc-clk/overlay/src/ui/gui/global_override_gui.cpp b/Source/hoc-clk/overlay/src/ui/gui/global_override_gui.cpp new file mode 100644 index 00000000..737ada09 --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/gui/global_override_gui.cpp @@ -0,0 +1,418 @@ +/* + * + * Copyright (c) Souldbminer and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include "../format.h" +#include "fatal_gui.h" +#include "global_override_gui.h" +#include "value_choice_gui.h" +#include "labels.h" + +GlobalOverrideGui::GlobalOverrideGui() +{ + for (std::uint16_t m = 0; m < SysClkModule_EnumMax; m++) { + this->listItems[m] = nullptr; + this->listHz[m] = 0; + } +} + +void GlobalOverrideGui::openFreqChoiceGui(SysClkModule module) +{ + std::uint32_t hzList[SYSCLK_FREQ_LIST_MAX]; + std::uint32_t hzCount; + Result rc = + sysclkIpcGetFreqList(module, &hzList[0], SYSCLK_FREQ_LIST_MAX, &hzCount); + if (R_FAILED(rc)) { + FatalGui::openWithResultCode("sysclkIpcGetFreqList", rc); + return; + } + + std::map labels = {}; + + if (module == SysClkModule_CPU) { + bool isUsingUv = IsMariko() ? configList.values[KipConfigValue_marikoCpuUVHigh] : configList.values[KipConfigValue_eristaCpuUV]; + labels = IsMariko() ? (isUsingUv ? cpu_freq_label_m_uv : cpu_freq_label_m) : (isUsingUv ? cpu_freq_label_e_uv : cpu_freq_label_e); + } else if (module == SysClkModule_GPU) { + labels = IsMariko() ? *(marikoUV[configList.values[KipConfigValue_marikoGpuUV]]) : *(eristaUV[configList.values[KipConfigValue_eristaGpuUV]]); + } + tsl::changeTo( + this->context->overrideFreqs[module], hzList, hzCount, module, + [this, module](std::uint32_t hz) { + Result rc = sysclkIpcSetOverride(module, hz); + if (R_FAILED(rc)) { + FatalGui::openWithResultCode("sysclkIpcSetOverride", rc); + return false; + } + + this->lastContextUpdate = armGetSystemTick(); + this->context->overrideFreqs[module] = hz; + + return true; + }, + true, labels + ); +} + +void GlobalOverrideGui::openValueChoiceGui( + tsl::elm::ListItem* listItem, + std::uint32_t currentValue, + const ValueRange& range, + const std::string& categoryName, + ValueChoiceListener listener, + const ValueThresholds& thresholds, + bool enableThresholds, + const std::map& labels, + const std::vector& namedValues, + bool showDefaultValue +) +{ + tsl::changeTo( + currentValue, + range, + categoryName, + listener, + thresholds, + enableThresholds, + labels, + namedValues, + showDefaultValue, + true + ); +} + +void GlobalOverrideGui::addModuleListItemValue( + SysClkModule module, + const std::string& categoryName, + std::uint32_t min, + std::uint32_t max, + std::uint32_t step, + const std::string& suffix, + std::uint32_t divisor, + int decimalPlaces, + ValueThresholds thresholds, + const std::vector& namedValues, + bool showDefaultValue +) +{ + bool hasNamedValues = !namedValues.empty(); + + if (!hasNamedValues) { + this->customFormatModules[module] = std::make_tuple(suffix, divisor, decimalPlaces); + } + + tsl::elm::ListItem* listItem = + new tsl::elm::ListItem(sysclkFormatModule(module, true)); + + listItem->setValue(FREQ_DEFAULT_TEXT); + + listItem->setClickListener( + [this, + listItem, + module, + categoryName, + min, + max, + step, + suffix, + divisor, + decimalPlaces, + thresholds, + namedValues, + hasNamedValues, + showDefaultValue](u64 keys) + { + if ((keys & HidNpadButton_A) == HidNpadButton_A) + { + if (!this->context) { + return false; + } + + std::uint32_t currentValue = + this->context->overrideFreqs[module] * divisor; + + ValueRange range( + min, + max, + step, + suffix, + divisor, + decimalPlaces + ); + + this->openValueChoiceGui( + listItem, + currentValue, + range, + categoryName, + + [this, listItem, module, divisor, suffix, decimalPlaces, thresholds, namedValues, hasNamedValues, showDefaultValue](std::uint32_t value) -> bool + { + if (!this->context) { + return false; + } + + this->context->overrideFreqs[module] = value / divisor; + this->listHz[module] = value / divisor; + + if (value == 0) { + listItem->setValue(FREQ_DEFAULT_TEXT); + } else if (hasNamedValues) { + for (const auto& namedValue : namedValues) { + if (namedValue.value == value / divisor) { + listItem->setValue(namedValue.name); + break; + } + } + } else { + char buf[32]; + if (decimalPlaces > 0) { + double displayValue = (double)value / divisor; + snprintf(buf, sizeof(buf), "%.*f%s", + decimalPlaces, displayValue, suffix.c_str()); + } else { + snprintf(buf, sizeof(buf), "%u%s", + value / divisor, suffix.c_str()); + } + listItem->setValue(buf); + } + + Result rc = + sysclkIpcSetOverride(module, this->context->overrideFreqs[module]); + + if (R_FAILED(rc)) + { + FatalGui::openWithResultCode( + "sysclkIpcSetOverride", rc); + return false; + } + + this->lastContextUpdate = armGetSystemTick(); + return true; + }, + + thresholds, + false, + std::map(), + namedValues, + showDefaultValue + ); + + return true; + } + else if ((keys & HidNpadButton_Y) == HidNpadButton_Y) + { + if (!this->context) { + return false; + } + + this->context->overrideFreqs[module] = 0; + this->listHz[module] = 0; + listItem->setValue(FREQ_DEFAULT_TEXT); + + Result rc = sysclkIpcSetOverride(module, 0); + + if (R_FAILED(rc)) + { + FatalGui::openWithResultCode("sysclkIpcSetOverride", rc); + return false; + } + + this->lastContextUpdate = armGetSystemTick(); + return true; + } + + return false; + }); + + this->listElement->addItem(listItem); + this->listItems[module] = listItem; +} + +void GlobalOverrideGui::addModuleListItem(SysClkModule module) +{ + tsl::elm::ListItem *listItem = + new tsl::elm::ListItem(sysclkFormatModule(module, true)); + listItem->setValue(formatListFreqMHz(0)); + listItem->setClickListener([this, module](u64 keys) { + if ((keys & HidNpadButton_A) == HidNpadButton_A) { + this->openFreqChoiceGui(module); + return true; + } else if ((keys & HidNpadButton_Y) == HidNpadButton_Y) { + Result rc = sysclkIpcSetOverride(module, 0); + if (R_FAILED(rc)) { + FatalGui::openWithResultCode("sysclkIpcSetOverride", rc); + return false; + } + + this->lastContextUpdate = armGetSystemTick(); + this->context->overrideFreqs[module] = 0; + this->listHz[module] = 0; + + this->listItems[module]->setValue(formatListFreqHz(0)); + + return true; + } + return false; + }); + + this->listElement->addItem(listItem); + this->listItems[module] = listItem; +} + +void GlobalOverrideGui::addModuleToggleItem(SysClkModule module) +{ + const char *moduleName = sysclkFormatModule(module, true); + bool isOn = this->listHz[module]; + + tsl::elm::ToggleListItem *toggle = + new tsl::elm::ToggleListItem(moduleName, isOn); + + toggle->setStateChangedListener([this, module, toggle](bool state) { + Result rc = sysclkIpcSetOverride(module, state ? 1 : 0); + if (R_FAILED(rc)) { + FatalGui::openWithResultCode("sysclkIpcSetProfiles", rc); + } + this->lastContextUpdate = armGetSystemTick(); + this->context->overrideFreqs[module] = 0; + this->listHz[module] = 0; + }); + this->listElement->addItem(toggle); + this->listItems[module] = toggle; +} + +class GovernorOverrideSubMenuGui : public BaseMenuGui { + u32 packed; +public: + GovernorOverrideSubMenuGui(u32 initialPacked) : packed(initialPacked) {} + + void listUI() override { + Result rc = sysclkIpcGetConfigValues(&configList); // idk why this is needed, probably some refreshing issue + if (R_FAILED(rc)) [[unlikely]] { + FatalGui::openWithResultCode("sysclkIpcGetConfigValues", rc); + return; + } + this->listElement->addItem(new tsl::elm::CategoryHeader("Governor")); + + static constexpr struct { const char* label; int shift; } kAll[] = { + {"CPU", 0}, {"GPU", 8}, {"VRR", 16} + }; + int count = configList.values[HorizonOCConfigValue_OverwriteRefreshRate] ? 3 : 2; + + for (int i = 0; i < count; i++) { + u8 cur = (this->packed >> kAll[i].shift) & 0xFF; + auto* bar = new tsl::elm::NamedStepTrackBar( + "", {"Do Not Override", "Disabled", "Enabled"}, + true, kAll[i].label + ); + bar->setProgress(cur); + int shift = kAll[i].shift; + bar->setValueChangedListener([this, shift](u8 value) { + this->packed = (this->packed & ~(0xFFu << shift)) | ((u32)value << shift); + Result rc = sysclkIpcSetOverride(HorizonOCModule_Governor, this->packed); + if (R_FAILED(rc)) FatalGui::openWithResultCode("sysclkIpcSetOverride", rc); + this->lastContextUpdate = armGetSystemTick(); + }); + this->listElement->addItem(bar); + } + } +}; + +void GlobalOverrideGui::addGovernorSection() { + auto* item = new tsl::elm::ListItem("Governor"); + item->setValue("\u2192"); // right arrow + item->setClickListener([this](u64 keys) { + if (keys & HidNpadButton_A) { + u32 packed = this->context ? this->context->overrideFreqs[HorizonOCModule_Governor] : 0; + tsl::changeTo(packed); + return true; + } + return false; + }); + this->listElement->addItem(item); +} + +void GlobalOverrideGui::listUI() +{ + BaseMenuGui::refresh(); // get latest context + if(!this->context) + return; + + Result rc = sysclkIpcGetConfigValues(&configList); // idk why this is needed, probably some refreshing issue + if (R_FAILED(rc)) [[unlikely]] { + FatalGui::openWithResultCode("sysclkIpcGetConfigValues", rc); + return; + } + + this->listElement->addItem(new tsl::elm::CategoryHeader( + "Temporary Overrides " + ult::DIVIDER_SYMBOL + " \ue0e3 Reset")); + this->addModuleListItem(SysClkModule_CPU); + this->addModuleListItem(SysClkModule_GPU); + this->addModuleListItem(SysClkModule_MEM); + #if IS_MINIMAL == 0 + ValueThresholds lcdThresholds(60, 65); + if(configList.values[HorizonOCConfigValue_OverwriteRefreshRate]) + this->addModuleListItemValue(HorizonOCModule_Display, "Display", IsAula() ? 45 : 40, configList.values[HorizonOCConfigValue_MaxDisplayClockH], this->context->isUsingRetroSuper ? 5 : 1, " Hz", 1, 0, lcdThresholds); + #endif + + this->addGovernorSection(); +} + +void GlobalOverrideGui::refresh() +{ + BaseMenuGui::refresh(); + + if (!this->context) + return; + + for (std::uint16_t m = 0; m < SysClkModule_EnumMax; m++) { + if (m == HorizonOCModule_Governor) { + this->listHz[m] = this->context->overrideFreqs[m]; + continue; + } + + if (this->listItems[m] != nullptr && + this->listHz[m] != this->context->overrideFreqs[m]) { + + auto it = this->customFormatModules.find((SysClkModule)m); + if (it != this->customFormatModules.end()) { + std::string suffix = std::get<0>(it->second); + std::uint32_t divisor = std::get<1>(it->second); + int decimalPlaces = std::get<2>(it->second); + + if (this->context->overrideFreqs[m] == 0) { + this->listItems[m]->setValue(FREQ_DEFAULT_TEXT); + } else { + char buf[32]; + if (decimalPlaces > 0) { + double displayValue = (double)this->context->overrideFreqs[m] / divisor; + snprintf(buf, sizeof(buf), "%.*f%s", + decimalPlaces, displayValue, suffix.c_str()); + } else { + snprintf(buf, sizeof(buf), "%u%s", + this->context->overrideFreqs[m] / divisor, suffix.c_str()); + } + this->listItems[m]->setValue(buf); + } + } else { + this->listItems[m]->setValue( + formatListFreqHz(this->context->overrideFreqs[m])); + } + + this->listHz[m] = this->context->overrideFreqs[m]; + } + } +} \ No newline at end of file diff --git a/Source/hoc-clk/overlay/src/ui/gui/global_override_gui.h b/Source/hoc-clk/overlay/src/ui/gui/global_override_gui.h new file mode 100644 index 00000000..9e5d6db9 --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/gui/global_override_gui.h @@ -0,0 +1,74 @@ +/* + * + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* -------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * , , + * wrote this file. As long as you retain this notice you can do whatever you + * want with this stuff. If you meet any of us some day, and you think this + * stuff is worth it, you can buy us a beer in return. - The sys-clk authors + * -------------------------------------------------------------------------- + */ +#pragma once +#include "../../ipc.h" +#include "base_menu_gui.h" +#include "freq_choice_gui.h" +#include +#include "value_choice_gui.h" +class GlobalOverrideGui : public BaseMenuGui +{ + protected: + std::map> customFormatModules; + tsl::elm::ListItem* listItems[SysClkModule_EnumMax]; + std::uint32_t listHz[SysClkModule_EnumMax]; + void openFreqChoiceGui(SysClkModule module); + void addGovernorSection(); + void addModuleListItem(SysClkModule module); + void addModuleToggleItem(SysClkModule module); + void openValueChoiceGui( + tsl::elm::ListItem* listItem, + std::uint32_t currentValue, + const ValueRange& range, + const std::string& categoryName, + ValueChoiceListener listener, + const ValueThresholds& thresholds, + bool enableThresholds, + const std::map& labels, + const std::vector& namedValues, + bool showDefaultValue + ); + void addModuleListItemValue( + SysClkModule module, + const std::string& categoryName, + std::uint32_t min, + std::uint32_t max, + std::uint32_t step, + const std::string& suffix, + std::uint32_t divisor, + int decimalPlaces, + ValueThresholds thresholds = {}, + const std::vector& namedValues = {}, + bool showDefaultValue = true + ); + public: + GlobalOverrideGui(); + ~GlobalOverrideGui() {} + void listUI() override; + void refresh() override; + void setModuleCustomFormat(SysClkModule module, const std::string& suffix, std::uint32_t divisor, int decimalPlaces); +}; \ No newline at end of file diff --git a/Source/hoc-clk/overlay/src/ui/gui/labels.cpp b/Source/hoc-clk/overlay/src/ui/gui/labels.cpp new file mode 100644 index 00000000..12697cc1 --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/gui/labels.cpp @@ -0,0 +1,134 @@ +/* + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include +#include + +std::map cpu_freq_label_m = { + {612000000, "Sleep Mode"}, + {1020000000, "Stock"}, + {1224000000, "Dev OC"}, + {1785000000, "Boost Mode"}, + {1963000000, "Safe Max"}, + {2397000000, "Unsafe Max"}, + {2703000000, "Absolute Max"}, +}; + +std::map cpu_freq_label_m_uv = { + {612000000, "Sleep Mode"}, + {1020000000, "Stock"}, + {1224000000, "Dev OC"}, + {1785000000, "Boost Mode"}, + {2397000000, "Safe Max"}, + {2499000000, "Unsafe Max"}, + {2703000000, "Absolute Max"}, +}; + +std::map cpu_freq_label_e = { + {612000000, "Sleep Mode"}, + {1020000000, "Stock"}, + {1224000000, "Dev OC"}, + {1785000000, "Safe Max"}, + {2091000000, "Unsafe Max"}, + {2397000000, "Absolute Max"}, +}; + +std::map cpu_freq_label_e_uv = { + {612000000, "Sleep Mode"}, + {1020000000, "Stock"}, + {1224000000, "Dev OC"}, + {1785000000, "Boost Mode"}, + {2091000000, "Safe Max"}, + {2193000000, "Unsafe Max"}, + {2397000000, "Absolute Max"}, +}; + + +std::map gpu_freq_label_e = { + {76800000, "Boost Mode"}, + {307200000, "Handheld"}, + {345600000, "Handheld"}, + {384000000, "Handheld"}, + {422400000, "Handheld"}, + {460800000, "Handheld Safe Max"}, + {768000000, "Docked"}, + {921600000, "Safe Max"}, + {960000000, "Unsafe Max"}, + {1075200000, "Absolute Max"}, +}; + +std::map gpu_freq_label_e_uv = { + {76800000, "Boost Mode"}, + {307200000, "Handheld"}, + {345600000, "Handheld"}, + {384000000, "Handheld"}, + {422400000, "Handheld"}, + {460800000, "Handheld Safe Max"}, + {768000000, "Docked"}, + {960000000, "Safe Max"}, + {1075200000, "Absolute Max"}, +}; + +std::map gpu_freq_label_m = { + {76800000, "Boost Mode"}, + {307200000, "Handheld"}, + {384000000, "Handheld"}, + {460800000, "Handheld"}, + {614400000, "Handheld Safe Max"}, + {768000000, "Docked"}, + {1075200000, "Safe Max"}, + {1305600000, "Unsafe Max"}, + {1536000000, "Absolute Max"}, +}; + +std::map gpu_freq_label_m_slt = { + {76800000, "Boost Mode"}, + {307200000, "Handheld"}, + {384000000, "Handheld"}, + {460800000, "Handheld"}, + {614400000, "Handheld Safe Max"}, + {768000000, "Docked"}, + {1152200000, "Safe Max"}, + {1305600000, "Unsafe Max"}, + {1536000000, "Absolute Max"}, +}; + +std::map gpu_freq_label_m_hiopt = { + {76800000, "Boost Mode"}, + {307200000, "Handheld"}, + {384000000, "Handheld"}, + {460800000, "Handheld"}, + {614400000, "Handheld Safe Max"}, + {768000000, "Docked"}, + {1228800000, "Safe Max"}, + {1305600000, "Unsafe Max"}, + {1536000000, "Absolute Max"}, +}; + +std::map* marikoUV[3] { + &gpu_freq_label_m, + &gpu_freq_label_m_slt, + &gpu_freq_label_m_hiopt, +}; + + +std::map* eristaUV[3] { + &gpu_freq_label_e, + &gpu_freq_label_e_uv, + &gpu_freq_label_e_uv, +}; \ No newline at end of file diff --git a/Source/hoc-clk/overlay/src/ui/gui/labels.h b/Source/hoc-clk/overlay/src/ui/gui/labels.h new file mode 100644 index 00000000..bbebef02 --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/gui/labels.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#pragma once +#include +#include +#include + +extern std::map cpu_freq_label_m; +extern std::map cpu_freq_label_m_uv; +extern std::map cpu_freq_label_e; +extern std::map cpu_freq_label_e_uv; +extern std::map gpu_freq_label_m; +extern std::map gpu_freq_label_m_slt; +extern std::map gpu_freq_label_m_hiopt; +extern std::map gpu_freq_label_e; +extern std::map gpu_freq_label_e_uv; + +extern std::map* marikoUV[3]; +extern std::map* eristaUV[3]; \ No newline at end of file diff --git a/Source/hoc-clk/overlay/src/ui/gui/main_gui.cpp b/Source/hoc-clk/overlay/src/ui/gui/main_gui.cpp new file mode 100644 index 00000000..76cffc33 --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/gui/main_gui.cpp @@ -0,0 +1,123 @@ +/* + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* -------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * , , + * wrote this file. As long as you retain this notice you can do whatever you + * want with this stuff. If you meet any of us some day, and you think this + * stuff is worth it, you can buy us a beer in return. - The sys-clk authors + * -------------------------------------------------------------------------- + */ + + +#include "main_gui.h" + +#include "fatal_gui.h" +#include "app_profile_gui.h" +#include "global_override_gui.h" +#include "misc_gui.h" +#include "about_gui.h" + +void MainGui::listUI() +{ + // this->enabledToggle = new tsl::elm::ToggleListItem("Enable", false); + // enabledToggle->setStateChangedListener([this](bool state) { + // Result rc = sysclkIpcSetEnabled(state); + // if(R_FAILED(rc)) + // { + // FatalGui::openWithResultCode("sysclkIpcSetEnabled", rc); + // } + + // this->lastContextUpdate = armGetSystemTick(); + // this->context->enabled = state; + // }); + // this->listElement->addItem(this->enabledToggle); + + tsl::elm::ListItem* appProfileItem = new tsl::elm::ListItem("Edit App Profile"); + appProfileItem->setClickListener([this](u64 keys) { + if((keys & HidNpadButton_A) == HidNpadButton_A && this->context) + { + AppProfileGui::changeTo(this->context->applicationId); + return true; + } + + return false; + }); + this->listElement->addItem(appProfileItem); + + + tsl::elm::ListItem* globalProfileItem = new tsl::elm::ListItem("Edit Global Profile"); + globalProfileItem->setClickListener([this](u64 keys) { + if((keys & HidNpadButton_A) == HidNpadButton_A && this->context) + { + AppProfileGui::changeTo(SYSCLK_GLOBAL_PROFILE_TID); + return true; + } + + return false; + }); + this->listElement->addItem(globalProfileItem); + + tsl::elm::ListItem* globalOverrideItem = new tsl::elm::ListItem("Temporary Overrides"); + globalOverrideItem->setClickListener([this](u64 keys) { + if((keys & HidNpadButton_A) == HidNpadButton_A && this->context) + { + tsl::changeTo(); + return true; + } + + return false; + }); + this->listElement->addItem(globalOverrideItem); + + //this->listElement->addItem(new tsl::elm::CategoryHeader("Misc")); + + tsl::elm::ListItem* miscItem = new tsl::elm::ListItem("Settings"); + miscItem->setClickListener([this](u64 keys) { + if((keys & HidNpadButton_A) == HidNpadButton_A && this->context) + { + tsl::changeTo(); + return true; + } + + return false; + }); + this->listElement->addItem(miscItem); + + tsl::elm::ListItem* aboutItem = new tsl::elm::ListItem("About"); + aboutItem->setClickListener([this](u64 keys) { + if((keys & HidNpadButton_A) == HidNpadButton_A && this->context) + { + tsl::changeTo(); + return true; + } + + return false; + }); + this->listElement->addItem(aboutItem); + +} + +void MainGui::refresh() +{ + BaseMenuGui::refresh(); + //if(this->context) + //{ + // this->enabledToggle->setState(this->context->enabled); + //} +} diff --git a/Source/hoc-clk/overlay/src/ui/gui/main_gui.h b/Source/hoc-clk/overlay/src/ui/gui/main_gui.h new file mode 100644 index 00000000..6eae080c --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/gui/main_gui.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* -------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * , , + * wrote this file. As long as you retain this notice you can do whatever you + * want with this stuff. If you meet any of us some day, and you think this + * stuff is worth it, you can buy us a beer in return. - The sys-clk authors + * -------------------------------------------------------------------------- + */ + + +#pragma once + +#include "base_menu_gui.h" + +class MainGui : public BaseMenuGui +{ + public: + MainGui() {} + ~MainGui() {} + void listUI() override; + void refresh() override; +}; \ No newline at end of file diff --git a/Source/hoc-clk/overlay/src/ui/gui/misc_gui.cpp b/Source/hoc-clk/overlay/src/ui/gui/misc_gui.cpp new file mode 100644 index 00000000..e52c6eb1 --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/gui/misc_gui.cpp @@ -0,0 +1,1748 @@ +/* + * + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include "misc_gui.h" +#include "fatal_gui.h" +#include "../format.h" +#include +#include +#include +#include +#include "labels.h" +#if IS_MINIMAL == 1 +#pragma message("Compiling with minimal features") +#endif + +#define A_BTN "\ue0e0" +#define R_ARROW "\u2192" + +class GeneralSettingsSubMenuGui; +class GovernorSettingsSubMenuGui; +class DisplaySubMenuGui; +class SafetySubMenuGui; +class RamSubmenuGui; +class RamTimingsSubmenuGui; +class RamLatenciesSubmenuGui; +class CpuSubmenuGui; +class GpuSubmenuGui; +class GpuCustomTableSubmenuGui; +class RamTableEditor; + +MiscGui::MiscGui() +{ + this->configList = new SysClkConfigValueList {}; +} + +MiscGui::~MiscGui() +{ + delete this->configList; + this->configToggles.clear(); + this->configTrackbars.clear(); + this->configButtons.clear(); + this->configRanges.clear(); +} + +void MiscGui::addConfigToggle(SysClkConfigValue configVal, const char* altName) { + const char* configName = altName ? altName : sysclkFormatConfigValue(configVal, true); + tsl::elm::ToggleListItem* toggle = new tsl::elm::ToggleListItem(configName, this->configList->values[configVal]); + toggle->setStateChangedListener([this, configVal](bool state) { + this->configList->values[configVal] = uint64_t(state); + Result rc = sysclkIpcSetConfigValues(this->configList); + if (R_FAILED(rc)) + FatalGui::openWithResultCode("sysclkIpcSetConfigValues", rc); + this->lastContextUpdate = armGetSystemTick(); + }); + this->listElement->addItem(toggle); + this->configToggles[configVal] = toggle; +} + + +void MiscGui::addConfigButton(SysClkConfigValue configVal, + const char* altName, + const ValueRange& range, + const std::string& categoryName, + const ValueThresholds* thresholds, + const std::map& labels, + const std::vector& namedValues, + bool showDefaultValue) +{ + const char* configName = altName ? altName : sysclkFormatConfigValue(configVal, true); + + tsl::elm::ListItem* listItem = new tsl::elm::ListItem(configName); + + uint64_t currentValue = this->configList->values[configVal]; + char valueText[32]; + if (currentValue == 0 && showDefaultValue) { + snprintf(valueText, sizeof(valueText), "%s", VALUE_DEFAULT_TEXT); + } else { + bool foundNamedValue = false; + for (const auto& namedValue : namedValues) { + if (currentValue == namedValue.value) { + snprintf(valueText, sizeof(valueText), "%s", namedValue.name.c_str()); + foundNamedValue = true; + break; + } + } + + if (!foundNamedValue) { + uint64_t displayValue = currentValue / range.divisor; + if (!range.suffix.empty()) { + snprintf(valueText, sizeof(valueText), "%lu %s", displayValue, range.suffix.c_str()); + } else { + snprintf(valueText, sizeof(valueText), "%lu", displayValue); + } + } + } + listItem->setValue(valueText); + + ValueThresholds thresholdsCopy = (thresholds ? *thresholds : ValueThresholds{}); + + listItem->setClickListener( + [this, configVal, range, categoryName, thresholdsCopy, labels, namedValues, showDefaultValue](u64 keys) + { + if ((keys & HidNpadButton_A) == 0) + return false; + + std::uint32_t currentValue = this->configList->values[configVal]; + + if (thresholdsCopy.warning != 0 || thresholdsCopy.danger != 0) { + + tsl::changeTo( + currentValue, + range, + categoryName, + [this, configVal](std::uint32_t value) { + this->configList->values[configVal] = value; + Result rc = sysclkIpcSetConfigValues(this->configList); + if (R_FAILED(rc)) { + FatalGui::openWithResultCode("sysclkIpcSetConfigValues", rc); + return false; + } + this->lastContextUpdate = armGetSystemTick(); + return true; + }, + thresholdsCopy, + true, + labels, + namedValues, + showDefaultValue + ); + } else { + + tsl::changeTo( + currentValue, + range, + categoryName, + [this, configVal](std::uint32_t value) { + this->configList->values[configVal] = value; + Result rc = sysclkIpcSetConfigValues(this->configList); + if (R_FAILED(rc)) { + FatalGui::openWithResultCode("sysclkIpcSetConfigValues", rc); + return false; + } + this->lastContextUpdate = armGetSystemTick(); + return true; + }, + ValueThresholds(), + false, + labels, + namedValues, + showDefaultValue + ); + } + + return true; + }); + + this->listElement->addItem(listItem); + this->configButtons[configVal] = listItem; + this->configRanges[configVal] = range; + this->configNamedValues[configVal] = namedValues; +} + +void MiscGui::addConfigButtonS(SysClkConfigValue configVal, + const char* altName, + const ValueRange& range, + const std::string& categoryName, + const ValueThresholds* thresholds, + const std::map& labels, + const std::vector& namedValues, + bool showDefaultValue, + const char* subText) +{ + tsl::elm::ListItem* listItem = new tsl::elm::ListItem(""); + + uint64_t currentValue = this->configList->values[configVal]; + char valueText[32]; + if (currentValue == 0 && showDefaultValue) { + snprintf(valueText, sizeof(valueText), "%s", VALUE_DEFAULT_TEXT); + } else { + bool foundNamedValue = false; + for (const auto& namedValue : namedValues) { + if (currentValue == namedValue.value) { + snprintf(valueText, sizeof(valueText), "%s", namedValue.name.c_str()); + foundNamedValue = true; + break; + } + } + + if (!foundNamedValue) { + uint64_t displayValue = currentValue / range.divisor; + if (!range.suffix.empty()) { + snprintf(valueText, sizeof(valueText), "%lu %s", displayValue, range.suffix.c_str()); + } else { + snprintf(valueText, sizeof(valueText), "%lu", displayValue); + } + } + } + + listItem->setText(valueText); + listItem->setValue(subText ? subText : ""); + + ValueThresholds thresholdsCopy = (thresholds ? *thresholds : ValueThresholds{}); + + listItem->setClickListener( + [this, configVal, range, categoryName, thresholdsCopy, labels, namedValues, showDefaultValue](u64 keys) + { + if ((keys & HidNpadButton_A) == 0) + return false; + + std::uint32_t currentValue = this->configList->values[configVal]; + + if (thresholdsCopy.warning != 0 || thresholdsCopy.danger != 0) { + + tsl::changeTo( + currentValue, + range, + categoryName, + [this, configVal](std::uint32_t value) { + this->configList->values[configVal] = value; + Result rc = sysclkIpcSetConfigValues(this->configList); + if (R_FAILED(rc)) { + FatalGui::openWithResultCode("sysclkIpcSetConfigValues", rc); + return false; + } + this->lastContextUpdate = armGetSystemTick(); + return true; + }, + thresholdsCopy, + true, + labels, + namedValues, + showDefaultValue + ); + } else { + + tsl::changeTo( + currentValue, + range, + categoryName, + [this, configVal](std::uint32_t value) { + this->configList->values[configVal] = value; + Result rc = sysclkIpcSetConfigValues(this->configList); + if (R_FAILED(rc)) { + FatalGui::openWithResultCode("sysclkIpcSetConfigValues", rc); + return false; + } + this->lastContextUpdate = armGetSystemTick(); + return true; + }, + ValueThresholds(), + false, + labels, + namedValues, + showDefaultValue + ); + } + + return true; + }); + + this->listElement->addItem(listItem); + this->configButtons[configVal] = listItem; + this->configRanges[configVal] = range; + this->configNamedValues[configVal] = namedValues; + this->configButtonSKeys.insert(configVal); + if (subText) + this->configButtonSSubtext[configVal] = std::string(subText); +} + +void MiscGui::updateConfigToggles() { + for (const auto& [value, toggle] : this->configToggles) { + if (toggle != nullptr) + toggle->setState(this->configList->values[value]); + } +} + +void MiscGui::addFreqButton(SysClkConfigValue configVal, + const char* altName, + SysClkModule module, + const std::map& labels) +{ + const char* configName = altName ? altName : sysclkFormatConfigValue(configVal, true); + + tsl::elm::ListItem* listItem = new tsl::elm::ListItem(configName); + + uint64_t currentMHz = this->configList->values[configVal]; + char valueText[32]; + snprintf(valueText, sizeof(valueText), "%lu MHz", currentMHz); + listItem->setValue(valueText); + + listItem->setClickListener( + [this, configVal, module, labels](u64 keys) + { + if ((keys & HidNpadButton_A) == 0) + return false; + + std::uint32_t hzList[SYSCLK_FREQ_LIST_MAX]; + std::uint32_t hzCount; + + Result rc = sysclkIpcGetFreqList(module, hzList, SYSCLK_FREQ_LIST_MAX, &hzCount); + if (R_FAILED(rc)) { + FatalGui::openWithResultCode("sysclkIpcGetFreqList", rc); + return false; + } + + std::uint32_t currentHz = this->configList->values[configVal] * 1'000'000; + + tsl::changeTo( + currentHz, + hzList, + hzCount, + module, + [this, configVal](std::uint32_t hz) + { + uint64_t mhz = hz / 1'000'000; + this->configList->values[configVal] = mhz; + + Result rc = sysclkIpcSetConfigValues(this->configList); + if (R_FAILED(rc)) { + FatalGui::openWithResultCode("sysclkIpcSetConfigValues", rc); + return false; + } + + this->lastContextUpdate = armGetSystemTick(); + return true; + }, + false, + labels + ); + + return true; + }); + + this->listElement->addItem(listItem); + this->configButtons[configVal] = listItem; + + this->configRanges[configVal] = ValueRange(0, 0, 0, "MHz", 1); +} + +void MiscGui::listUI() +{ + Result rc = sysclkIpcGetConfigValues(configList); + if (R_FAILED(rc)) [[unlikely]] { + FatalGui::openWithResultCode("sysclkIpcGetConfigValues", rc); + return; + } + + ValueThresholds thresholdsDisabled(0, 0); + std::vector noNamedValues = {}; + + this->listElement->addItem(new tsl::elm::CategoryHeader("Settings")); + tsl::elm::ListItem* sysmoduleSettingsSubMenu = new tsl::elm::ListItem("General Settings"); + sysmoduleSettingsSubMenu->setClickListener([](u64 keys) { + if (keys & HidNpadButton_A) { + tsl::changeTo(); + return true; + } + return false; + }); + sysmoduleSettingsSubMenu->setValue(R_ARROW); + this->listElement->addItem(sysmoduleSettingsSubMenu); + + tsl::elm::ListItem* governorSettingsSubMenu = new tsl::elm::ListItem("Governor Settings"); + governorSettingsSubMenu->setClickListener([](u64 keys) { + if (keys & HidNpadButton_A) { + tsl::changeTo(); + return true; + } + return false; + }); + governorSettingsSubMenu->setValue(R_ARROW); + this->listElement->addItem(governorSettingsSubMenu); + + tsl::elm::ListItem* safetySubmenu = new tsl::elm::ListItem("Safety Settings"); + safetySubmenu->setClickListener([](u64 keys) { + if (keys & HidNpadButton_A) { + tsl::changeTo(); + return true; + } + return false; + }); + safetySubmenu->setValue(R_ARROW); + this->listElement->addItem(safetySubmenu); + + // this->listElement->addItem(new tsl::elm::CategoryHeader("KIP")); + + tsl::elm::ListItem* saveBtn = new tsl::elm::ListItem("Save KIP Settings"); + saveBtn->setClickListener([](u64 keys) { + if (keys & HidNpadButton_A) { + Result rc = hocClkIpcSetKipData(); + if (R_FAILED(rc)) { + FatalGui::openWithResultCode("hocClkIpcSetKipData", rc); + return false; + } + return true; + } + return false; + }); + saveBtn->setValue(A_BTN); + this->listElement->addItem(saveBtn); + + tsl::elm::ListItem* ramSubmenu = new tsl::elm::ListItem("RAM Settings"); + ramSubmenu->setClickListener([](u64 keys) { + if (keys & HidNpadButton_A) { + tsl::changeTo(); + return true; + } + return false; + }); + ramSubmenu->setValue(R_ARROW); + this->listElement->addItem(ramSubmenu); + + tsl::elm::ListItem* cpuSubmenu = new tsl::elm::ListItem("CPU Settings"); + cpuSubmenu->setClickListener([](u64 keys) { + if (keys & HidNpadButton_A) { + tsl::changeTo(); + return true; + } + return false; + }); + cpuSubmenu->setValue(R_ARROW); + this->listElement->addItem(cpuSubmenu); + + tsl::elm::ListItem* gpuSubmenu = new tsl::elm::ListItem("GPU Settings"); + gpuSubmenu->setClickListener([](u64 keys) { + if (keys & HidNpadButton_A) { + tsl::changeTo(); + return true; + } + return false; + }); + gpuSubmenu->setValue(R_ARROW); + this->listElement->addItem(gpuSubmenu); + + tsl::elm::ListItem* displaySubMenu = new tsl::elm::ListItem("Display Settings"); + displaySubMenu->setClickListener([](u64 keys) { + if (keys & HidNpadButton_A) { + tsl::changeTo(); + return true; + } + return false; + }); + displaySubMenu->setValue(R_ARROW); + this->listElement->addItem(displaySubMenu); + + #if IS_MINIMAL == 0 + // std::vector chargerCurrents = { + // NamedValue("Disabled", 0), + // NamedValue("1024mA", 1024), + // NamedValue("1280mA", 1280), + // NamedValue("1536mA", 1536), + // NamedValue("1792mA", 1792), + // NamedValue("2048mA", 2048), + // NamedValue("2304mA", 2304), + // NamedValue("2560mA", 2560), + // NamedValue("2816mA", 2816), + // NamedValue("3072mA", 3072), + // }; + if(this->configList->values[HorizonOCConfigValue_EnableExperimentalSettings]) { + this->listElement->addItem(new tsl::elm::CategoryHeader("Experimental")); + + addConfigToggle(HorizonOCConfigValue_LiveCpuUv, nullptr); + std::vector gpuSchedMethodValues = { + NamedValue("INI", GpuSchedulingOverrideMethod_Ini), + NamedValue("NV Service", GpuSchedulingOverrideMethod_NvService), + }; + addConfigButton( + HorizonOCConfigValue_GPUSchedulingMethod, + "GPU Scheduling Override Method", + ValueRange(0, 0, 1, "", 0), + "GPU Scheduling Override Method", + &thresholdsDisabled, + {}, + gpuSchedMethodValues, + false + ); + tsl::elm::CustomDrawer* chargeWarningText = new tsl::elm::CustomDrawer([](tsl::gfx::Renderer *renderer, s32 x, s32 y, s32 w, s32 h) { + renderer->drawString("\uE150 Overriding the charge current", false, x + 20, y + 30, 18, tsl::style::color::ColorText); + renderer->drawString("can be dangerous and may cause", false, x + 20, y + 50, 18, tsl::style::color::ColorText); + renderer->drawString("damage to your battery or charger!", false, x + 20, y + 70, 18, tsl::style::color::ColorText); + }); + chargeWarningText->setBoundaries(0, 0, tsl::cfg::FramebufferWidth, 90); + this->listElement->addItem(chargeWarningText); + + if(!IsHoag()) { + std::vector chargerCurrents = { + NamedValue("Disabled", 0), + NamedValue("1024mA", 1024), + NamedValue("1280mA", 1280), + NamedValue("1536mA", 1536), + NamedValue("1792mA", 1792), + NamedValue("2048mA", 2048), + NamedValue("2304mA", 2304), + NamedValue("2560mA", 2560), + NamedValue("2816mA", 2816), + NamedValue("3072mA", 3072), + }; + + ValueThresholds chargerThresholds(2048, 2049); + + addConfigButton( + HorizonOCConfigValue_BatteryChargeCurrent, + "Charge Current Override", + ValueRange(0, 0, 1, "", 0), + "Charge Current Override", + &chargerThresholds, + {}, + chargerCurrents, + false + ); + } + else { + std::vector chargerCurrents = { + NamedValue("Disabled", 0), + NamedValue("1024mA", 1024), + NamedValue("1280mA", 1280), + NamedValue("1536mA", 1536), + NamedValue("1792mA", 1792), + NamedValue("2048mA", 2048), + NamedValue("2304mA", 2304), + NamedValue("2560mA", 2560), + }; + + ValueThresholds chargerThresholds(1792, 1793); + + addConfigButton( + HorizonOCConfigValue_BatteryChargeCurrent, + "Charge Current Override", + ValueRange(0, 0, 1, "", 0), + "Charge Current Override", + &chargerThresholds, + {}, + chargerCurrents, + false + ); + + } + } + #endif +} + +class GeneralSettingsSubMenuGui : public MiscGui { +public: + GeneralSettingsSubMenuGui() { } + +protected: + void listUI() override { + this->listElement->addItem(new tsl::elm::CategoryHeader("General Settings")); + ValueThresholds thresholdsDisabled(0, 0); + std::vector ramVoltDispModes = { + NamedValue("VDD2 + VDDQ", RamDisplayMode_VDD2VDDQ), + NamedValue("VDD2 + Usage", RamDisplayMode_VDD2Usage), + NamedValue("VDDQ + Usage", RamDisplayMode_VDDQUsage), + }; + + addConfigButton(HorizonOCConfigValue_RAMVoltUsageDisplayMode, "RAM Voltage Display Mode", ValueRange(0, 12, 1, "", 0), "RAM Voltage Display Mode", &thresholdsDisabled, {}, ramVoltDispModes, false); + + addConfigButton( + SysClkConfigValue_PollingIntervalMs, + "Polling Interval", + ValueRange(50, 1000, 50, "ms", 1), + "Polling Interval", + &thresholdsDisabled, + {}, + {}, + false + ); + } +}; + +class GovernorSettingsSubMenuGui : public MiscGui { +public: + GovernorSettingsSubMenuGui() { } + +protected: + void listUI() override { + this->listElement->addItem(new tsl::elm::CategoryHeader("Governor Settings")); + ValueThresholds thresholdsDisabled(0, 0); + + std::vector GovernorMinHz = { + NamedValue("510 MHz", 510000000), + NamedValue("612 MHz", 612000000), + NamedValue("714 MHz", 714000000), + NamedValue("816 MHz", 816000000), + NamedValue("918 MHz", 918000000), + NamedValue("1020 MHz", 1020000000), + }; + + addConfigButton( + HorizonOCConfigValue_CpuGovernorMinimumFreq, + "CPU Governor Minimum Frequency", + ValueRange(0, 0, 1, "", 0), + "CPU Governor Minimum Frequency", + &thresholdsDisabled, + {}, + GovernorMinHz, + false + ); + + } +}; + + +class DisplaySubMenuGui : public MiscGui { +public: + DisplaySubMenuGui() { } + +protected: + void listUI() override { + BaseMenuGui::refresh(); // get latest context + if(!this->context) + return; + + this->listElement->addItem(new tsl::elm::CategoryHeader("Display Settings")); + addConfigToggle(HorizonOCConfigValue_OverwriteRefreshRate, nullptr); + if(!this->context->isUsingRetroSuper) { + tsl::elm::CustomDrawer* warningText = new tsl::elm::CustomDrawer([](tsl::gfx::Renderer *renderer, s32 x, s32 y, s32 w, s32 h) { + renderer->drawString("\uE150 Usage of unsafe display", false, x + 20, y + 30, 18, tsl::style::color::ColorText); + renderer->drawString("refresh rates may cause stress", false, x + 20, y + 50, 18, tsl::style::color::ColorText); + renderer->drawString("or damage to your display! ", false, x + 20, y + 70, 18, tsl::style::color::ColorText); + renderer->drawString("Proceed at your own risk!", false, x + 20, y + 90, 18, tsl::style::color::ColorText); + }); + + warningText->setBoundaries(0, 0, tsl::cfg::FramebufferWidth, 110); + this->listElement->addItem(warningText); + ValueThresholds displayThresholds(60, 65); + addConfigButton( + HorizonOCConfigValue_MaxDisplayClockH, + "Max Handheld Display", + ValueRange(60, IsAula() ? 65 : 75, 1, " Hz", 1), + "Display Clock", + &displayThresholds, + {}, + {}, + false + ); + } + } +}; + +class SafetySubMenuGui : public MiscGui { +public: + SafetySubMenuGui() { } + +protected: + void listUI() override { + this->listElement->addItem(new tsl::elm::CategoryHeader("Safety Settings")); + addConfigToggle(HocClkConfigValue_UncappedClocks, nullptr); + addConfigToggle(HocClkConfigValue_ThermalThrottle, nullptr); + addConfigToggle(HocClkConfigValue_HandheldTDP, nullptr); + + #if IS_MINIMAL == 0 + std::map labels_pwr_l = { + {6400, "Official Rating"} + }; + + if(IsHoag()) { + ValueThresholds tdpThresholdsLite(6400, 7500); + addConfigButton( + HocClkConfigValue_LiteTDPLimit, + "TDP Threshold", + ValueRange(4000, 8000, 100, "mW", 1), + "Power", + &tdpThresholdsLite, + labels_pwr_l + ); + } else { + ValueThresholds tdpThresholds(9600, 11000); + addConfigButton( + HocClkConfigValue_HandheldTDPLimit, + "TDP Threshold", + ValueRange(8000, 12000, 100, "mW", 1), + "Power", + &tdpThresholds + ); + } + + ValueThresholds throttleThresholds(70, 80); + addConfigButton( + HocClkConfigValue_ThermalThrottleThreshold, + "Thermal Throttle Limit", + ValueRange(50, 85, 1, "°C", 1), + "Temp", + &throttleThresholds + ); + #endif + } +}; + +class RamSubmenuGui : public MiscGui { +public: + RamSubmenuGui() { } + +protected: + void listUI() override { + ValueThresholds thresholdsDisabled(0, 0); + std::vector noNamedValues = {}; + + this->listElement->addItem(new tsl::elm::CategoryHeader("RAM Settings")); + + addConfigToggle(KipConfigValue_hpMode, "HP Mode"); + + std::map emc_voltage_label = { + {1100000, "Default (Mariko)"}, + {1125000, "Default (Erista)"}, + {1175000, "Rating"}, + {1212500, "Safe Max (Mariko)"}, + {1237500, "Safe Max (Erista)"}, + {1250000, "Unsafe Max"}, + }; + + ValueThresholds vdd2Thresholds(1212500, 1250000); + addConfigButton( + KipConfigValue_commonEmcMemVolt, + "RAM VDD2 Voltage", + ValueRange(912500, 1350000, 12500, "mV", 1000, 1), + "Voltage", + &vdd2Thresholds, + emc_voltage_label, + noNamedValues, + false + ); + + if(IsMariko()) { + addConfigButton( + KipConfigValue_marikoEmcVddqVolt, + "RAM VDDQ Voltage", + ValueRange(400000, 700000, 5000, "mV", 1000), + "RAM VDDQ Voltage", + &thresholdsDisabled, + {}, + {}, + false + ); + } + + addConfigButton( + KipConfigValue_emcDvbShift, + "SoC DVB Shift", + ValueRange(0, 10, 1, "", 1), + "SoC DVB Shift", + &thresholdsDisabled, + {}, + {}, + false + ); + + if (IsErista()) { + tsl::elm::ListItem* freqSubmenu = new tsl::elm::ListItem("RAM Frequency Editor"); + freqSubmenu->setClickListener([](u64 keys) { + if (keys & HidNpadButton_A) { + tsl::changeTo(); + return true; + } + return false; + }); + freqSubmenu->setValue(R_ARROW); + this->listElement->addItem(freqSubmenu); + } else { + std::vector marikoMaxEmcClock = { + NamedValue("Disabled", 1600000), + NamedValue("1633 MHz", 1633000), + NamedValue("1666 MHz", 1666000), + NamedValue("1700 MHz", 1700000), + NamedValue("1733 MHz", 1733000), + NamedValue("1766 MHz", 1766000), + NamedValue("1800 MHz", 1800000), + NamedValue("1833 MHz", 1833000), + NamedValue("1866 MHz", 1866000, "JEDEC."), + NamedValue("1900 MHz", 1900000), + NamedValue("1933 MHz", 1933000), + NamedValue("1966 MHz", 1966000), + NamedValue("1996 MHz", 1996800, "JEDEC."), + NamedValue("2000 MHz", 2000000), + NamedValue("2033 MHz", 2033000), + NamedValue("2066 MHz", 2066000), + NamedValue("2100 MHz", 2100000), + NamedValue("2133 MHz", 2133000, "JEDEC."), + NamedValue("2166 MHz", 2166000), + NamedValue("2200 MHz", 2200000), + NamedValue("2233 MHz", 2233000), + NamedValue("2266 MHz", 2266000), + NamedValue("2300 MHz", 2300000), + NamedValue("2333 MHz", 2333000), + NamedValue("2366 MHz", 2366000), + NamedValue("2400 MHz", 2400000, "JEDEC."), + NamedValue("2433 MHz", 2433000), + NamedValue("2466 MHz", 2466000), + NamedValue("2500 MHz", 2500000), + NamedValue("2533 MHz", 2533000), + NamedValue("2566 MHz", 2566000), + NamedValue("2600 MHz", 2600000), + NamedValue("2633 MHz", 2633000), + NamedValue("2666 MHz", 2666000, "JEDEC."), + NamedValue("2700 MHz", 2700000), + NamedValue("2733 MHz", 2733000), + NamedValue("2766 MHz", 2766000), + NamedValue("2800 MHz", 2800000), + NamedValue("2833 MHz", 2833000), + NamedValue("2866 MHz", 2866000), + NamedValue("2900 MHz", 2900000), + NamedValue("2933 MHz", 2933000, "JEDEC."), + NamedValue("2966 MHz", 2966000), + NamedValue("3000 MHz", 3000000), + NamedValue("3033 MHz", 3033000), + NamedValue("3066 MHz", 3066000), + NamedValue("3100 MHz", 3100000), + NamedValue("3133 MHz", 3133000), + NamedValue("3166 MHz", 3166000), + NamedValue("3200 MHz", 3200000, "JEDEC."), + NamedValue("3233 MHz", 3233000, "High speedo needed!"), + NamedValue("3266 MHz", 3266000, "High speedo needed!"), + NamedValue("3300 MHz", 3300000, "High speedo needed!"), + // NamedValue("3333MHz (Needs extreme Speedo/PLL)", 3333000), + // NamedValue("3366MHz (Needs extreme Speedo/PLL)", 3366000), + // NamedValue("3400MHz (Needs extreme Speedo/PLL)", 3400000), + // NamedValue("3433MHz (Needs ridiculous Speedo/PLL)", 3433000), + // NamedValue("3466MHz (Needs ridiculous Speedo/PLL)", 3466000), + // NamedValue("3500MHz (Needs ridiculous Speedo/PLL)", 3500000), + }; + + addConfigButton(KipConfigValue_marikoEmcMaxClock, "Ram Max Clock", ValueRange(0, 1, 1, "", 1), "Ram Max Clock", &thresholdsDisabled, {}, marikoMaxEmcClock, false); + } + + tsl::elm::ListItem* latenciesSubmenu = new tsl::elm::ListItem("RAM Latency Editor"); + latenciesSubmenu->setClickListener([](u64 keys) { + if (keys & HidNpadButton_A) { + tsl::changeTo(); + return true; + } + return false; + }); + latenciesSubmenu->setValue(R_ARROW); + this->listElement->addItem(latenciesSubmenu); + + tsl::elm::ListItem* timingsSubmenu = new tsl::elm::ListItem("RAM Timing Reductions"); + timingsSubmenu->setClickListener([](u64 keys) { + if (keys & HidNpadButton_A) { + tsl::changeTo(); + return true; + } + return false; + }); + timingsSubmenu->setValue(R_ARROW); + this->listElement->addItem(timingsSubmenu); + + } +}; + +class RamTimingsSubmenuGui : public MiscGui { +public: + RamTimingsSubmenuGui() { } + +protected: + void listUI() override { + ValueThresholds thresholdsDisabled(0, 0); + + this->listElement->addItem(new tsl::elm::CategoryHeader("Memory Timings")); + + addConfigButton(KipConfigValue_t1_tRCD, "t1 tRCD", ValueRange(0, 8, 1, "", 1), "tRCD", &thresholdsDisabled, {}, {}, false); + addConfigButton(KipConfigValue_t2_tRP, "t2 tRP", ValueRange(0, 8, 1, "", 1), "tRP", &thresholdsDisabled, {}, {}, false); + addConfigButton(KipConfigValue_t3_tRAS, "t3 tRAS", ValueRange(0, 10, 1, "", 1), "tRAS", &thresholdsDisabled, {}, {}, false); + addConfigButton(KipConfigValue_t4_tRRD, "t4 tRRD", ValueRange(0, 7, 1, "", 1), "tRRD", &thresholdsDisabled, {}, {}, false); + addConfigButton(KipConfigValue_t5_tRFC, "t5 tRFC", ValueRange(0, 11, 1, "", 1), "tRFC", &thresholdsDisabled, {}, {}, false); + addConfigButton(KipConfigValue_t6_tRTW, "t6 tRTW", ValueRange(0, 10, 1, "", 1), "tRTW", &thresholdsDisabled, {}, {}, false); + addConfigButton(KipConfigValue_t7_tWTR, "t7 tWTR", ValueRange(0, 10, 1, "", 1), "tWTR", &thresholdsDisabled, {}, {}, false); + addConfigButton(KipConfigValue_t8_tREFI, "t8 tREFI", ValueRange(0, 6, 1, "", 1), "tREFI", &thresholdsDisabled, {}, {}, false); + + std::vector t6_tRTW_fine_tune = { + NamedValue("-2", 0xFFFFFFFE), + NamedValue("-1", 0xFFFFFFFF), + NamedValue(" 0", 0), + NamedValue("+1", 1), + NamedValue("+2", 2), + }; + + std::vector t7_tWTR_fine_tune = { + NamedValue("-3", 0xFFFFFFFD), + NamedValue("-2", 0xFFFFFFFE), + NamedValue("-1", 0xFFFFFFFF), + NamedValue(" 0", 0), + NamedValue("+1", 1), + NamedValue("+2", 2), + NamedValue("+3", 3), + }; + + this->listElement->addItem(new tsl::elm::CategoryHeader("Advanced")); + addConfigButton(KipConfigValue_t6_tRTW_fine_tune, "t6 tRTW Fine Tune", ValueRange(0, 4, 1, "", 0), "tRTW Fine Tune", &thresholdsDisabled, {}, t6_tRTW_fine_tune, false); + addConfigButton(KipConfigValue_t7_tWTR_fine_tune, "t7 tWTR Fine Tune", ValueRange(0, 6, 1, "", 0), "tWTR Fine Tune", &thresholdsDisabled, {}, t7_tWTR_fine_tune, false); + } +}; + +class RamLatenciesSubmenuGui : public MiscGui { +public: + RamLatenciesSubmenuGui() { } + +protected: + void listUI() override { + ValueThresholds thresholdsDisabled(0, 0); + + this->listElement->addItem(new tsl::elm::CategoryHeader("Memory Latencies")); + + std::vector rlLabels = { + NamedValue("1333 RL", 28), + NamedValue("1600 RL", 32), + NamedValue("1866 RL", 36), + NamedValue("2133 RL", 40) + }; + + std::vector wlLabels = { + NamedValue("1333 WL", 12), + NamedValue("1600 WL", 14), + NamedValue("1866 WL", 16), + NamedValue("2133 WL", 18) + }; + + addConfigButton( + KipConfigValue_mem_burst_read_latency, + "Read Latency", + ValueRange(0, 6, 1, "", 0), + "Read Latency", + &thresholdsDisabled, + {}, + rlLabels, + false + ); + + addConfigButton( + KipConfigValue_mem_burst_write_latency, + "Write Latency", + ValueRange(0, 6, 1, "", 0), + "Write Latency", + &thresholdsDisabled, + {}, + wlLabels, + false + ); + } +}; + +class CpuSubmenuGui : public MiscGui { +public: + CpuSubmenuGui() { } + +protected: + void listUI() override { + Result rc = sysclkIpcGetConfigValues(this->configList); // populate config list early otherwise wont work + if (R_FAILED(rc)) [[unlikely]] { + FatalGui::openWithResultCode("sysclkIpcGetConfigValues", rc); + return; + } + + ValueThresholds thresholdsDisabled(0, 0); + ValueThresholds mCpuClockThresholds(1963000, 2397000); + ValueThresholds mCpuClockThresholdsUV(2397000, 2499000); + ValueThresholds eCpuClockThresholds(1785000, 2091000); + ValueThresholds eCpuClockThresholdsUV(2091000, 2193000); + + this->listElement->addItem(new tsl::elm::CategoryHeader("CPU Settings")); + if(IsMariko()) { + std::vector ClkOptions = { + NamedValue("1963 MHz", 1963000), + NamedValue("2091 MHz", 2091000), + NamedValue("2193 MHz", 2193000), + NamedValue("2295 MHz", 2295000), + NamedValue("2397 MHz", 2397000), + NamedValue("2499 MHz", 2499000), + NamedValue("2601 MHz", 2601000), + NamedValue("2703 MHz", 2703000), + }; + + addConfigButton( + KipConfigValue_marikoCpuBoostClock, + "CPU Boost Clock", + ValueRange(0, 0, 1, "", 1), + "CPU Boost Clock", + this->configList->values[KipConfigValue_marikoCpuUVHigh] ? &mCpuClockThresholdsUV : &mCpuClockThresholds, + {}, + ClkOptions, + false + ); + } else { + std::vector ClkOptionsE = { + NamedValue("1785 MHz", 1785000), + NamedValue("1887 MHz", 1887000), + NamedValue("1963 MHz", 1963000), + NamedValue("2091 MHz", 2091000), + NamedValue("2193 MHz", 2193000), + NamedValue("2295 MHz", 2295000), + NamedValue("2397 MHz", 2397000), + }; + addConfigButton( + KipConfigValue_eristaCpuBoostClock, + "CPU Boost Clock", + ValueRange(0, 0, 1, "", 1), + "CPU Boost Clock", + this->configList->values[KipConfigValue_eristaCpuUV] ? &eCpuClockThresholdsUV : &eCpuClockThresholds, + {}, + ClkOptionsE, + false + ); + } + if(IsErista()) { + addConfigButton( + KipConfigValue_eristaCpuUV, + "CPU UV", + ValueRange(0, 5, 1, "", 1), + "CPU UV", + &thresholdsDisabled, + {}, + {}, + false + ); + + addConfigToggle(KipConfigValue_eristaCpuUnlock, "CPU Unlock"); + addConfigButton( + KipConfigValue_eristaCpuVmin, + "CPU VMIN", + ValueRange(700, 900, 25, "mV", 1), + "CPU VMIN", + &thresholdsDisabled, + {}, + {}, + false + ); + + ValueThresholds eCpuVoltThresholds(1235, 1260); + addConfigButton( + KipConfigValue_eristaCpuMaxVolt, + "CPU Max Voltage", + ValueRange(1120, 1260, 5, "mV", 1), + "CPU Max Voltage", + &eCpuVoltThresholds, + {}, + {}, + false + ); + + std::vector maxClkOptions = { + NamedValue("1785 MHz", 1785), + NamedValue("1887 MHz", 1887), + NamedValue("1963 MHz", 1963), + NamedValue("2091 MHz", 2091), + NamedValue("2193 MHz", 2193), + NamedValue("2295 MHz", 2295), + NamedValue("2397 MHz", 2397), + }; + ValueThresholds eCpuMaxClockThresholds(1785, 2091); + addConfigButton( + HocClkConfigValue_EristaMaxCpuClock, + "CPU Max Clock", + ValueRange(0, 0, 1, "", 1), + "CPU Max Clock", + &eCpuMaxClockThresholds, + {}, + maxClkOptions, + false + ); + } else { + std::vector marikoTableConf = { + // NamedValue("Auto", 0), + NamedValue("Default", 1), + NamedValue("1581MHz Tbreak", 2), + NamedValue("1683MHz Tbreak", 3), + NamedValue("Extreme UV Table", 4) + }; + + addConfigButton( + KipConfigValue_tableConf, + "CPU UV Table", + ValueRange(0, 12, 1, "", 0), + "CPU UV Table", + &thresholdsDisabled, + {}, + marikoTableConf, + false + ); + addConfigButton( + KipConfigValue_marikoCpuUVLow, + "CPU Low UV", + ValueRange(0, 8, 1, "", 1), + "CPU Low UV", + &thresholdsDisabled, + {}, + {}, + false + ); + addConfigButton( + KipConfigValue_marikoCpuUVHigh, + "CPU High UV", + ValueRange(0, 12, 1, "", 1), + "CPU High UV", + &thresholdsDisabled, + {}, + {}, + false + ); + + std::vector maxClkOptions = { + NamedValue("1785 MHz", 1785000), + NamedValue("1887 MHz", 1887000), + NamedValue("1963 MHz", 1963000), + NamedValue("2091 MHz", 2091000), + NamedValue("2193 MHz", 2193000), + NamedValue("2295 MHz", 2295000), + NamedValue("2397 MHz", 2397000), + NamedValue("2499 MHz", 2499000), + NamedValue("2601 MHz", 2601000), + NamedValue("2703 MHz", 2703000), + }; + + addConfigButton( + KipConfigValue_marikoCpuMaxClock, + "CPU Max Clock", + ValueRange(0, 0, 1, "", 1), + "CPU Max Clock", + this->configList->values[KipConfigValue_marikoCpuUVHigh] ? &mCpuClockThresholdsUV : &mCpuClockThresholds, + {}, + maxClkOptions, + false + ); + + addConfigButton( + KipConfigValue_marikoCpuLowVmin, + "CPU Low VMIN", + ValueRange(550, 750, 5, "mV", 1), + "CPU VMIN", + &thresholdsDisabled, + {}, + {}, + false + ); + + addConfigButton( + KipConfigValue_marikoCpuHighVmin, + "CPU High VMIN", + ValueRange(650, 900, 5, "mV", 1), + "CPU VMIN", + &thresholdsDisabled, + {}, + {}, + false + ); + + ValueThresholds mCpuVoltThresholds(1160, 1180); + addConfigButton( + KipConfigValue_marikoCpuMaxVolt, + "CPU Max Voltage", + ValueRange(1000, 1200, 5, "mV", 1), + "CPU Max Voltage", + &mCpuVoltThresholds, + {}, + {}, + false + ); + + addConfigToggle(HocClkConfigValue_OverwriteBoostMode, nullptr); + + } + } +}; + +class RamTableEditor : public MiscGui { +public: + RamTableEditor() { } + +protected: + void listUI() override { + this->listElement->addItem(new tsl::elm::CategoryHeader("RAM Frequency Editor")); + + ValueThresholds thresholdsDisabled(0, 0); + // 1600000, 1331200, 1065600, 800000, 665600, 408000, 204000 + + tsl::elm::ListItem* ramItem665 = new tsl::elm::ListItem("665 MHz"); + this->listElement->addItem(ramItem665); + + tsl::elm::ListItem* ramItem800 = new tsl::elm::ListItem("800 MHz"); + this->listElement->addItem(ramItem800); + + tsl::elm::ListItem* ramItem1065 = new tsl::elm::ListItem("1065 MHz"); + this->listElement->addItem(ramItem1065); + + tsl::elm::ListItem* ramItem1331 = new tsl::elm::ListItem("1331 MHz"); + this->listElement->addItem(ramItem1331); + + tsl::elm::ListItem* ramItem1600 = new tsl::elm::ListItem("1600 MHz"); + this->listElement->addItem(ramItem1600); + + ValueThresholds eristaRamThresholds(2208000, 2304000); + + std::vector eristaMaxEmcClock = { + NamedValue("Disabled", 1600000), + NamedValue("1633 MHz", 1633000), + NamedValue("1666 MHz", 1666000), + NamedValue("1700 MHz", 1700000), + NamedValue("1733 MHz", 1733000), + NamedValue("1766 MHz", 1766000), + NamedValue("1800 MHz", 1800000), + NamedValue("1833 MHz", 1833000), + NamedValue("1862 MHz", 1862400, "JEDEC."), + NamedValue("1881 MHz", 1881600), + NamedValue("1900 MHz", 1900800), + NamedValue("1920 MHz", 1920000), + NamedValue("1939 MHz", 1939200), + NamedValue("1958 MHz", 1958400), + NamedValue("1977 MHz", 1977600), + NamedValue("1996 MHz", 1996800, "JEDEC."), + NamedValue("2016 MHz", 2016000), + NamedValue("2035 MHz", 2035200), + NamedValue("2054 MHz", 2054400), + NamedValue("2073 MHz", 2073600), + NamedValue("2092 MHz", 2092800), + NamedValue("2112 MHz", 2112000), + NamedValue("2131 MHz", 2131200, "JEDEC."), + NamedValue("2150 MHz", 2150400), + NamedValue("2169 MHz", 2169600), + NamedValue("2188 MHz", 2188800), + NamedValue("2208 MHz", 2208000), + NamedValue("2227 MHz", 2227200), + NamedValue("2246 MHz", 2246400), + NamedValue("2265 MHz", 2265600), + NamedValue("2284 MHz", 2284800), + NamedValue("2304 MHz", 2304000), + NamedValue("2323 MHz", 2323200), + NamedValue("2342 MHz", 2342400), + NamedValue("2361 MHz", 2361600), + NamedValue("2380 MHz", 2380800), + NamedValue("2400 MHz", 2400000, "JEDEC."), + }; + + addConfigButtonS(KipConfigValue_eristaEmcMaxClock, "", ValueRange(0, 1, 1, "", 1), "", &eristaRamThresholds, {}, eristaMaxEmcClock, false, A_BTN); + addConfigButtonS(KipConfigValue_eristaEmcMaxClock1, "", ValueRange(0, 1, 1, "", 1), "", &eristaRamThresholds, {}, eristaMaxEmcClock, false, A_BTN); + addConfigButtonS(KipConfigValue_eristaEmcMaxClock2, "", ValueRange(0, 1, 1, "", 1), "", &eristaRamThresholds, {}, eristaMaxEmcClock, false, A_BTN); + }; +}; + +class GpuSubmenuGui : public MiscGui { +public: + GpuSubmenuGui() { } + +protected: + void listUI() override { + ValueThresholds thresholdsDisabled(0, 0); + std::vector noNamedValues = {}; + + this->listElement->addItem(new tsl::elm::CategoryHeader("GPU Settings")); + + std::vector gpuUvConf = { + NamedValue("No Undervolt", 0), + NamedValue("SLT Table", 1), + NamedValue("HiOPT Table", 2), + }; + + std::vector mGpuVoltsVmin = { + NamedValue("Auto", 0), + NamedValue("480mV", 480), NamedValue("485mV", 485), NamedValue("490mV", 490), + NamedValue("495mV", 495), NamedValue("500mV", 500), NamedValue("505mV", 505), + NamedValue("510mV", 510), NamedValue("515mV", 515), NamedValue("520mV", 520), + NamedValue("525mV", 525), NamedValue("530mV", 530), NamedValue("535mV", 535), + NamedValue("540mV", 540), NamedValue("545mV", 545), NamedValue("550mV", 550), + NamedValue("555mV", 555), NamedValue("560mV", 560), NamedValue("565mV", 565), + NamedValue("570mV", 570), NamedValue("575mV", 575), NamedValue("580mV", 580), + NamedValue("585mV", 585), NamedValue("590mV", 590), NamedValue("595mV", 595), + NamedValue("600mV", 600), NamedValue("605mV", 605), NamedValue("610mV", 610), + NamedValue("615mV", 615), NamedValue("620mV", 620), NamedValue("625mV", 625), + NamedValue("630mV", 630), NamedValue("635mV", 635), NamedValue("640mV", 640), + NamedValue("645mV", 645), NamedValue("650mV", 650), NamedValue("655mV", 655), + NamedValue("660mV", 660), NamedValue("665mV", 665), NamedValue("670mV", 670), + NamedValue("675mV", 675), NamedValue("680mV", 680), NamedValue("685mV", 685), + NamedValue("690mV", 690), NamedValue("695mV", 695), NamedValue("700mV", 700), + NamedValue("705mV", 705), NamedValue("710mV", 710), NamedValue("715mV", 715), + NamedValue("720mV", 720), NamedValue("725mV", 725), NamedValue("730mV", 730), + NamedValue("735mV", 735), NamedValue("740mV", 740), NamedValue("745mV", 745), + NamedValue("750mV", 750), NamedValue("755mV", 755), NamedValue("760mV", 760), + NamedValue("765mV", 765), NamedValue("770mV", 770), NamedValue("775mV", 775), + NamedValue("780mV", 780), NamedValue("785mV", 785), NamedValue("790mV", 790), + NamedValue("795mV", 795), NamedValue("800mV", 800) + }; + + if(IsErista()) { + addConfigButton( + KipConfigValue_eristaGpuUV, + "GPU Undervolt Table", + ValueRange(0, 1, 1, "", 1), + "GPU Undervolt Table", + &thresholdsDisabled, + {}, + gpuUvConf, + false + ); + addConfigButton( + KipConfigValue_eristaGpuVmin, + "GPU Minimum Voltage", + ValueRange(700, 875, 5, "mV", 1), + "GPU Minimum Voltage", + &thresholdsDisabled, + {}, + {}, + false + ); + } else { + addConfigButton( + KipConfigValue_marikoGpuUV, + "GPU Undervolt Table", + ValueRange(0, 1, 1, "", 1), + "GPU Undervolt Table", + &thresholdsDisabled, + {}, + gpuUvConf, + false + ); + + // tsl::elm::ListItem* vminCalcBtn = new tsl::elm::ListItem("Calculate GPU Vmin"); + // vminCalcBtn->setClickListener([this](u64 keys) { + // if (keys & HidNpadButton_A) { + // Result rc = hocClkIpcCalculateGpuVmin(); + // if (R_FAILED(rc)) { + // FatalGui::openWithResultCode("hocClkIpcCalculateGpuVmin", rc); + // return false; + // } + // return true; + // } + // return false; + // }); + + addConfigButton(KipConfigValue_marikoGpuVmin, "GPU VMIN", ValueRange(0, 0, 0, "0", 1), "GPU VMIN", &thresholdsDisabled, {}, mGpuVoltsVmin, false); + ValueThresholds MgpuVmaxThresholds(805, 850); + addConfigButton( + KipConfigValue_marikoGpuVmax, + "GPU Maximum Voltage", + ValueRange(800, 960, 5, "mV", 1), + "GPU Maximum Voltage", + &MgpuVmaxThresholds, + {}, + {}, + false + ); + } + + addConfigButton( + KipConfigValue_commonGpuVoltOffset, + "GPU Voltage Offset", + ValueRange(0, 50, 5, "mV", 1), + "GPU Voltage Offset", + &thresholdsDisabled, + {}, + {}, + false + ); + + std::vector gpuSchedValues = { + NamedValue("Do not override", GpuSchedulingMode_DoNotOverride), + NamedValue("Enabled (Default)", GpuSchedulingMode_Enabled, "96.6% limit"), + NamedValue("Disabled", GpuSchedulingMode_Disabled, "99.7% limit"), + }; + + addConfigButton( + HorizonOCConfigValue_GPUScheduling, + "GPU Scheduling Override", + ValueRange(0, 0, 1, "", 0), + "GPU Scheduling Override", + &thresholdsDisabled, + {}, + gpuSchedValues, + false + ); + + if (IsMariko()) { + std::vector dvfsOffset = { + NamedValue("-80 mV", 0xFFFFFFB0), + NamedValue("-75 mV", 0xFFFFFFB5), + NamedValue("-70 mV", 0xFFFFFFBA), + NamedValue("-65 mV", 0xFFFFFFBF), + NamedValue("-60 mV", 0xFFFFFFC4), + NamedValue("-55 mV", 0xFFFFFFC9), + NamedValue("-50 mV", 0xFFFFFFCE), + NamedValue("-45 mV", 0xFFFFFFD3), + NamedValue("-40 mV", 0xFFFFFFD8), + NamedValue("-30 mV", 0xFFFFFFE2), + NamedValue("-25 mV", 0xFFFFFFE7), + NamedValue("-20 mV", 0xFFFFFFEC), + NamedValue("-15 mV", 0xFFFFFFF1), + NamedValue("-10 mV", 0xFFFFFFF6), + NamedValue(" -5 mV", 0xFFFFFFFB), + NamedValue("Disabled", 0), + NamedValue(" +5 mV", 5), + NamedValue("+10 mV", 10), + NamedValue("+15 mV", 15), + NamedValue("+20 mV", 20), + }; + + std::vector dvfsValues = { + NamedValue("Disabled", DVFSMode_Disabled), + NamedValue("PCV Hijack", DVFSMode_Hijack), + // NamedValue("Official Service", DVFSMode_OfficialService), + }; + + addConfigButton( + HorizonOCConfigValue_DVFSMode, + "GPU DVFS Mode", + ValueRange(0, 0, 1, "", 0), + "GPU DVFS Mode", + &thresholdsDisabled, + {}, + dvfsValues, + false + ); + + addConfigButton(HorizonOCConfigValue_DVFSOffset, "GPU DVFS Offset", ValueRange(0, 12, 1, "", 0), "GPU DVFS Offset", &thresholdsDisabled, {}, dvfsOffset, false); + } + + tsl::elm::ListItem* customTableSubmenu = new tsl::elm::ListItem("GPU Voltage Table"); + customTableSubmenu->setClickListener([](u64 keys) { + if (keys & HidNpadButton_A) { + tsl::changeTo(); + return true; + } + return false; + }); + customTableSubmenu->setValue(R_ARROW); + this->listElement->addItem(customTableSubmenu); + } +}; + +class GpuCustomTableSubmenuGui : public MiscGui { +public: + GpuCustomTableSubmenuGui() { } + +protected: + void listUI() override { + + Result rc = sysclkIpcGetConfigValues(this->configList); // populate config list early otherwise wont work + if (R_FAILED(rc)) [[unlikely]] { + FatalGui::openWithResultCode("sysclkIpcGetConfigValues", rc); + return; + } + + this->listElement->addItem(new tsl::elm::CategoryHeader("GPU Custom Table (mV)")); + + ValueThresholds MgpuVmaxThresholds(800, 850); + ValueThresholds EgpuVmaxThresholds(950, 975); + + std::vector mGpuVolts = { + NamedValue("Disabled", 2000), + NamedValue("Auto", 0), + NamedValue("480mV", 480), NamedValue("485mV", 485), NamedValue("490mV", 490), + NamedValue("495mV", 495), NamedValue("500mV", 500), NamedValue("505mV", 505), + NamedValue("510mV", 510), NamedValue("515mV", 515), NamedValue("520mV", 520), + NamedValue("525mV", 525), NamedValue("530mV", 530), NamedValue("535mV", 535), + NamedValue("540mV", 540), NamedValue("545mV", 545), NamedValue("550mV", 550), + NamedValue("555mV", 555), NamedValue("560mV", 560), NamedValue("565mV", 565), + NamedValue("570mV", 570), NamedValue("575mV", 575), NamedValue("580mV", 580), + NamedValue("585mV", 585), NamedValue("590mV", 590), NamedValue("595mV", 595), + NamedValue("600mV", 600), NamedValue("605mV", 605), NamedValue("610mV", 610), + NamedValue("615mV", 615), NamedValue("620mV", 620), NamedValue("625mV", 625), + NamedValue("630mV", 630), NamedValue("635mV", 635), NamedValue("640mV", 640), + NamedValue("645mV", 645), NamedValue("650mV", 650), NamedValue("655mV", 655), + NamedValue("660mV", 660), NamedValue("665mV", 665), NamedValue("670mV", 670), + NamedValue("675mV", 675), NamedValue("680mV", 680), NamedValue("685mV", 685), + NamedValue("690mV", 690), NamedValue("695mV", 695), NamedValue("700mV", 700), + NamedValue("705mV", 705), NamedValue("710mV", 710), NamedValue("715mV", 715), + NamedValue("720mV", 720), NamedValue("725mV", 725), NamedValue("730mV", 730), + NamedValue("735mV", 735), NamedValue("740mV", 740), NamedValue("745mV", 745), + NamedValue("750mV", 750), NamedValue("755mV", 755), NamedValue("760mV", 760), + NamedValue("765mV", 765), NamedValue("770mV", 770), NamedValue("775mV", 775), + NamedValue("780mV", 780), NamedValue("785mV", 785), NamedValue("790mV", 790), + NamedValue("795mV", 795), NamedValue("800mV", 800), NamedValue("805mV", 805), + NamedValue("810mV", 810), NamedValue("815mV", 815), NamedValue("820mV", 820), + NamedValue("825mV", 825), NamedValue("830mV", 830), NamedValue("835mV", 835), + NamedValue("840mV", 840), NamedValue("845mV", 845), NamedValue("850mV", 850), + NamedValue("855mV", 855), NamedValue("860mV", 860), NamedValue("865mV", 865), + NamedValue("870mV", 870), NamedValue("875mV", 875), NamedValue("880mV", 880), + NamedValue("885mV", 885), NamedValue("890mV", 890), NamedValue("895mV", 895), + NamedValue("900mV", 900), NamedValue("905mV", 905), NamedValue("910mV", 910), + NamedValue("915mV", 915), NamedValue("920mV", 920), NamedValue("925mV", 925), + NamedValue("930mV", 930), NamedValue("935mV", 935), NamedValue("940mV", 940), + NamedValue("945mV", 945), NamedValue("950mV", 950), NamedValue("955mV", 955), + NamedValue("960mV", 960), + }; + + std::vector eGpuVolts = { + NamedValue("Disabled", 2000), + NamedValue("Auto", 0), + NamedValue("700mV", 700), NamedValue("705mV", 705), NamedValue("710mV", 710), + NamedValue("715mV", 715), NamedValue("720mV", 720), NamedValue("725mV", 725), + NamedValue("730mV", 730), NamedValue("735mV", 735), NamedValue("740mV", 740), + NamedValue("745mV", 745), NamedValue("750mV", 750), NamedValue("755mV", 755), + NamedValue("760mV", 760), NamedValue("765mV", 765), NamedValue("770mV", 770), + NamedValue("775mV", 775), NamedValue("780mV", 780), NamedValue("785mV", 785), + NamedValue("790mV", 790), NamedValue("795mV", 795), NamedValue("800mV", 800), + NamedValue("805mV", 805), NamedValue("810mV", 810), NamedValue("815mV", 815), + NamedValue("820mV", 820), NamedValue("825mV", 825), NamedValue("830mV", 830), + NamedValue("835mV", 835), NamedValue("840mV", 840), NamedValue("845mV", 845), + NamedValue("850mV", 850), NamedValue("855mV", 855), NamedValue("860mV", 860), + NamedValue("865mV", 865), NamedValue("870mV", 870), NamedValue("875mV", 875), + NamedValue("880mV", 880), NamedValue("885mV", 885), NamedValue("890mV", 890), + NamedValue("895mV", 895), NamedValue("900mV", 900), NamedValue("905mV", 905), + NamedValue("910mV", 910), NamedValue("915mV", 915), NamedValue("920mV", 920), + NamedValue("925mV", 925), NamedValue("930mV", 930), NamedValue("935mV", 935), + NamedValue("940mV", 940), NamedValue("945mV", 945), NamedValue("950mV", 950), + NamedValue("955mV", 955), NamedValue("960mV", 960), NamedValue("965mV", 965), + NamedValue("970mV", 970), NamedValue("975mV", 975), NamedValue("980mV", 980), + NamedValue("985mV", 985), NamedValue("990mV", 990), NamedValue("995mV", 995), + }; + + std::vector mGpuVolts_noAuto = { + NamedValue("Disabled", 2000), + NamedValue("480mV", 480), NamedValue("485mV", 485), NamedValue("490mV", 490), + NamedValue("495mV", 495), NamedValue("500mV", 500), NamedValue("505mV", 505), + NamedValue("510mV", 510), NamedValue("515mV", 515), NamedValue("520mV", 520), + NamedValue("525mV", 525), NamedValue("530mV", 530), NamedValue("535mV", 535), + NamedValue("540mV", 540), NamedValue("545mV", 545), NamedValue("550mV", 550), + NamedValue("555mV", 555), NamedValue("560mV", 560), NamedValue("565mV", 565), + NamedValue("570mV", 570), NamedValue("575mV", 575), NamedValue("580mV", 580), + NamedValue("585mV", 585), NamedValue("590mV", 590), NamedValue("595mV", 595), + NamedValue("600mV", 600), NamedValue("605mV", 605), NamedValue("610mV", 610), + NamedValue("615mV", 615), NamedValue("620mV", 620), NamedValue("625mV", 625), + NamedValue("630mV", 630), NamedValue("635mV", 635), NamedValue("640mV", 640), + NamedValue("645mV", 645), NamedValue("650mV", 650), NamedValue("655mV", 655), + NamedValue("660mV", 660), NamedValue("665mV", 665), NamedValue("670mV", 670), + NamedValue("675mV", 675), NamedValue("680mV", 680), NamedValue("685mV", 685), + NamedValue("690mV", 690), NamedValue("695mV", 695), NamedValue("700mV", 700), + NamedValue("705mV", 705), NamedValue("710mV", 710), NamedValue("715mV", 715), + NamedValue("720mV", 720), NamedValue("725mV", 725), NamedValue("730mV", 730), + NamedValue("735mV", 735), NamedValue("740mV", 740), NamedValue("745mV", 745), + NamedValue("750mV", 750), NamedValue("755mV", 755), NamedValue("760mV", 760), + NamedValue("765mV", 765), NamedValue("770mV", 770), NamedValue("775mV", 775), + NamedValue("780mV", 780), NamedValue("785mV", 785), NamedValue("790mV", 790), + NamedValue("795mV", 795), NamedValue("800mV", 800), NamedValue("805mV", 805), + NamedValue("810mV", 810), NamedValue("815mV", 815), NamedValue("820mV", 820), + NamedValue("825mV", 825), NamedValue("830mV", 830), NamedValue("835mV", 835), + NamedValue("840mV", 840), NamedValue("845mV", 845), NamedValue("850mV", 850), + NamedValue("855mV", 855), NamedValue("860mV", 860), NamedValue("865mV", 865), + NamedValue("870mV", 870), NamedValue("875mV", 875), NamedValue("880mV", 880), + NamedValue("885mV", 885), NamedValue("890mV", 890), NamedValue("895mV", 895), + NamedValue("900mV", 900), NamedValue("905mV", 905), NamedValue("910mV", 910), + NamedValue("915mV", 915), NamedValue("920mV", 920), NamedValue("925mV", 925), + NamedValue("930mV", 930), NamedValue("935mV", 935), NamedValue("940mV", 940), + NamedValue("945mV", 945), NamedValue("950mV", 950), NamedValue("955mV", 955), + NamedValue("960mV", 960), + }; + + std::vector eGpuVolts_noAuto = { + NamedValue("Disabled", 2000), + NamedValue("700mV", 700), NamedValue("705mV", 705), NamedValue("710mV", 710), + NamedValue("715mV", 715), NamedValue("720mV", 720), NamedValue("725mV", 725), + NamedValue("730mV", 730), NamedValue("735mV", 735), NamedValue("740mV", 740), + NamedValue("745mV", 745), NamedValue("750mV", 750), NamedValue("755mV", 755), + NamedValue("760mV", 760), NamedValue("765mV", 765), NamedValue("770mV", 770), + NamedValue("775mV", 775), NamedValue("780mV", 780), NamedValue("785mV", 785), + NamedValue("790mV", 790), NamedValue("795mV", 795), NamedValue("800mV", 800), + NamedValue("805mV", 805), NamedValue("810mV", 810), NamedValue("815mV", 815), + NamedValue("820mV", 820), NamedValue("825mV", 825), NamedValue("830mV", 830), + NamedValue("835mV", 835), NamedValue("840mV", 840), NamedValue("845mV", 845), + NamedValue("850mV", 850), NamedValue("855mV", 855), NamedValue("860mV", 860), + NamedValue("865mV", 865), NamedValue("870mV", 870), NamedValue("875mV", 875), + NamedValue("880mV", 880), NamedValue("885mV", 885), NamedValue("890mV", 890), + NamedValue("895mV", 895), NamedValue("900mV", 900), NamedValue("905mV", 905), + NamedValue("910mV", 910), NamedValue("915mV", 915), NamedValue("920mV", 920), + NamedValue("925mV", 925), NamedValue("930mV", 930), NamedValue("935mV", 935), + NamedValue("940mV", 940), NamedValue("945mV", 945), NamedValue("950mV", 950), + NamedValue("955mV", 955), NamedValue("960mV", 960), NamedValue("965mV", 965), + NamedValue("970mV", 970), NamedValue("975mV", 975), NamedValue("980mV", 980), + NamedValue("985mV", 985), NamedValue("990mV", 990), NamedValue("995mV", 995), + }; + + if (IsMariko()) { + + tsl::elm::CustomDrawer* warningText = new tsl::elm::CustomDrawer([](tsl::gfx::Renderer *renderer, s32 x, s32 y, s32 w, s32 h) { + renderer->drawString("\uE150 Setting GPU Clocks past", false, x + 20, y + 30, 18, tsl::style::color::ColorText); + renderer->drawString("1075MHz without UV, 1152MHz on SLT", false, x + 20, y + 50, 18, tsl::style::color::ColorText); + renderer->drawString("or 1228MHz on HiOPT can cause ", false, x + 20, y + 70, 18, tsl::style::color::ColorText); + renderer->drawString("permanent damage to your Switch!", false, x + 20, y + 90, 18, tsl::style::color::ColorText); + renderer->drawString("Proceed at your own risk!", false, x + 20, y + 110, 18, tsl::style::color::ColorText); + }); + warningText->setBoundaries(0, 0, tsl::cfg::FramebufferWidth, 130); + this->listElement->addItem(warningText); + + addConfigButton(KipConfigValue_g_volt_76800, "76.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_153600, "153.6MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_230400, "230.4MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_307200, "307.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_384000, "384.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_460800, "460.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_537600, "537.6MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_614400, "614.4MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_691200, "691.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_768000, "768.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_844800, "844.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_921600, "921.6MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_998400, "998.4MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_1075200, "1075.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false); + if(this->configList->values[KipConfigValue_marikoGpuUV] >= GPUUVLevel_SLT) + addConfigButton(KipConfigValue_g_volt_1152000, "1152.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false); + if(this->configList->values[KipConfigValue_marikoGpuUV] >= GPUUVLevel_HiOPT) { + addConfigButton(KipConfigValue_g_volt_1228800, "1228.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_1267200, "1267.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_1305600, "1305.6MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_1344000, "1344.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false); + addConfigButton(KipConfigValue_g_volt_1382400, "1382.4MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false); + addConfigButton(KipConfigValue_g_volt_1420800, "1420.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false); + addConfigButton(KipConfigValue_g_volt_1459200, "1459.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false); + addConfigButton(KipConfigValue_g_volt_1497600, "1497.6MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false); + addConfigButton(KipConfigValue_g_volt_1536000, "1536.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false); + } + + } else { + + tsl::elm::CustomDrawer* warningText = new tsl::elm::CustomDrawer([](tsl::gfx::Renderer *renderer, s32 x, s32 y, s32 w, s32 h) { + renderer->drawString("\uE150 Setting GPU Clocks past", false, x + 20, y + 30, 18, tsl::style::color::ColorText); + renderer->drawString("921MHz without UV and 960MHz on", false, x + 20, y + 50, 18, tsl::style::color::ColorText); + renderer->drawString("SLT or HiOPT can cause ", false, x + 20, y + 70, 18, tsl::style::color::ColorText); + renderer->drawString("permanent damage to your Switch!", false, x + 20, y + 90, 18, tsl::style::color::ColorText); + renderer->drawString("Proceed at your own risk!", false, x + 20, y + 110, 18, tsl::style::color::ColorText); + }); + warningText->setBoundaries(0, 0, tsl::cfg::FramebufferWidth, 130); + this->listElement->addItem(warningText); + + addConfigButton(KipConfigValue_g_volt_e_76800, "76.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_e_115200, "115.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_e_153600, "153.6MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_e_192000, "192.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_e_230400, "230.4MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_e_268800, "268.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_e_307200, "307.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_e_345600, "345.6MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_e_384000, "384.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_e_422400, "422.4MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_e_460800, "460.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_e_499200, "499.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_e_537600, "537.6MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_e_576000, "576.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_e_614400, "614.4MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_e_652800, "652.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_e_691200, "691.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_e_729600, "729.6MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_e_768000, "768.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_e_806400, "806.4MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_e_844800, "844.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_e_883200, "883.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_e_921600, "921.6MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + if(this->configList->values[KipConfigValue_eristaGpuUV] >= GPUUVLevel_SLT) + addConfigButton(KipConfigValue_g_volt_e_960000, "960.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + if(this->configList->values[KipConfigValue_eristaGpuUV] >= GPUUVLevel_HiOPT) { + addConfigButton(KipConfigValue_g_volt_e_998400, "998.4MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false); + addConfigButton(KipConfigValue_g_volt_e_1036800, "1036.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts_noAuto, false); + addConfigButton(KipConfigValue_g_volt_e_1075200, "1075.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts_noAuto, false); + } + } + } +}; + + +static std::string getValueDisplayText(uint64_t currentValue, + const ValueRange& range, + const std::vector& namedValues) +{ + char valueText[32]; + + for (const auto& namedValue : namedValues) { + if (currentValue == namedValue.value) { + return namedValue.name; + } + } + + if (currentValue == 0) { + snprintf(valueText, sizeof(valueText), "%s", VALUE_DEFAULT_TEXT); + } else { + uint64_t displayValue = currentValue / range.divisor; + if (!range.suffix.empty()) { + snprintf(valueText, sizeof(valueText), "%lu %s", displayValue, range.suffix.c_str()); + } else { + snprintf(valueText, sizeof(valueText), "%lu", displayValue); + } + } + return std::string(valueText); +} + +void MiscGui::refresh() { + BaseMenuGui::refresh(); + + if (this->context && ++frameCounter >= 60) { + frameCounter = 0; + + Result rc = sysclkIpcGetConfigValues(this->configList); + if (R_FAILED(rc)) [[unlikely]] { + FatalGui::openWithResultCode("sysclkIpcGetConfigValues", rc); + return; + } + updateConfigToggles(); + + for (const auto& [configVal, button] : this->configButtons) { + uint64_t currentValue = this->configList->values[configVal]; + const ValueRange& range = this->configRanges[configVal]; + + auto namedValuesIt = this->configNamedValues.find(configVal); + const std::vector& namedValues = (namedValuesIt != this->configNamedValues.end()) + ? namedValuesIt->second + : std::vector(); + + char valueText[32]; + + bool foundNamedValue = false; + for (const auto& namedValue : namedValues) { + if (currentValue == namedValue.value) { + snprintf(valueText, sizeof(valueText), "%s", namedValue.name.c_str()); + foundNamedValue = true; + break; + } + } + + if (!foundNamedValue) { + uint64_t displayValue = currentValue / range.divisor; + if (!range.suffix.empty()) { + snprintf(valueText, sizeof(valueText), "%lu %s", displayValue, range.suffix.c_str()); + } else { + snprintf(valueText, sizeof(valueText), "%lu", displayValue); + } + } + + if (this->configButtonSKeys.count(configVal)) { + button->setText(valueText); + auto subtextIt = this->configButtonSSubtext.find(configVal); + if (subtextIt != this->configButtonSSubtext.end()) + button->setValue(subtextIt->second); + else + button->setValue(""); + } else { + button->setValue(valueText); + } + } + } +} diff --git a/Source/hoc-clk/overlay/src/ui/gui/misc_gui.h b/Source/hoc-clk/overlay/src/ui/gui/misc_gui.h new file mode 100644 index 00000000..3c2bd71d --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/gui/misc_gui.h @@ -0,0 +1,72 @@ +/* + * + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#pragma once +#include "../../ipc.h" +#include "base_menu_gui.h" +#include +#include +#include +#include +#include "freq_choice_gui.h" +#include "value_choice_gui.h" +class MiscGui : public BaseMenuGui +{ +public: + MiscGui(); + ~MiscGui(); + void listUI() override; + void refresh() override; + +protected: + SysClkConfigValueList* configList; + std::map configButtons; + std::map configRanges; + std::map> configNamedValues; + std::map configToggles; + std::map>> configTrackbars; + std::set configButtonSKeys; + std::map configButtonSSubtext; + + void addConfigToggle(SysClkConfigValue configVal, const char* altName); + void addConfigButton(SysClkConfigValue configVal, + const char* altName, + const ValueRange& range, + const std::string& categoryName, + const ValueThresholds* thresholds, + const std::map& labels = {}, + const std::vector& namedValues = {}, + bool showDefaultValue = true); + + void addConfigButtonS(SysClkConfigValue configVal, + const char* altName, + const ValueRange& range, + const std::string& categoryName, + const ValueThresholds* thresholds, + const std::map& labels = {}, + const std::vector& namedValues = {}, + bool showDefaultValue = true, + const char* subText = nullptr); + void addFreqButton(SysClkConfigValue configVal, + const char* altName, + SysClkModule module, + const std::map& labels = {}); + void updateConfigToggles(); + + tsl::elm::ToggleListItem* enabledToggle; + u8 frameCounter = 60; +}; \ No newline at end of file diff --git a/Source/hoc-clk/overlay/src/ui/gui/ult_ext.h b/Source/hoc-clk/overlay/src/ui/gui/ult_ext.h new file mode 100644 index 00000000..82267fd9 --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/gui/ult_ext.h @@ -0,0 +1,126 @@ +/* + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#pragma once +#include + +class ImageElement : public tsl::elm::ListItem { +private: + const uint8_t* imgData; + uint32_t imgWidth, imgHeight; + bool visible; + +public: + ImageElement(const uint8_t* data, uint32_t w, uint32_t h) + : tsl::elm::ListItem(""), imgData(data), imgWidth(w), imgHeight(h), visible(true) {} + + void setVisible(bool v) { + visible = v; + } + + virtual void draw(tsl::gfx::Renderer *renderer) override { + if (!visible) return; + + // Draw image centered horizontally + u16 centerX = this->getX() + (this->getWidth() - imgWidth) / 2; + renderer->drawBitmap( + centerX, + this->getY() + 10, + imgWidth, + imgHeight, + imgData + ); + } + + virtual void layout(u16 parentX, u16 parentY, u16 parentWidth, u16 parentHeight) override { + if (!visible) { + // Take up no space when hidden + this->setBoundaries(parentX, parentY, 0, 0); + } else { + // Normal layout when visible + tsl::elm::ListItem::layout(parentX, parentY, parentWidth, parentHeight); + } + } + + virtual void drawHighlight(tsl::gfx::Renderer *renderer) override { + // Do nothing - no highlight + } + + virtual bool onClick(u64 keys) override { + return false; // Non-clickable + } + + virtual Element* requestFocus(Element *oldFocus, tsl::FocusDirection direction) override { + return nullptr; // Make it non-focusable + } +}; + +class HideableCategoryHeader : public tsl::elm::CategoryHeader { +private: + bool visible; + +public: + HideableCategoryHeader(const std::string& title) + : tsl::elm::CategoryHeader(title), visible(true) {} + + void setVisible(bool v) { + visible = v; + } + + virtual void draw(tsl::gfx::Renderer *renderer) override { + if (!visible) return; + tsl::elm::CategoryHeader::draw(renderer); + } + + virtual void layout(u16 parentX, u16 parentY, u16 parentWidth, u16 parentHeight) override { + if (!visible) { + this->setBoundaries(parentX, parentY, 0, 0); + } else { + tsl::elm::CategoryHeader::layout(parentX, parentY, parentWidth, parentHeight); + } + } +}; + +class HideableCustomDrawer : public tsl::elm::Element { +private: + bool visible; + u32 height; + +public: + HideableCustomDrawer(u32 h) + : Element(), visible(true), height(h) {} + + void setVisible(bool v) { + visible = v; + } + + virtual void draw(tsl::gfx::Renderer *renderer) override { + // Empty drawer - just for spacing + } + + virtual void layout(u16 parentX, u16 parentY, u16 parentWidth, u16 parentHeight) override { + if (!visible) { + this->setBoundaries(parentX, parentY, 0, 0); + } else { + this->setBoundaries(parentX, parentY, parentWidth, height); + } + } + + virtual Element* requestFocus(Element *oldFocus, tsl::FocusDirection direction) override { + return nullptr; + } +}; \ No newline at end of file diff --git a/Source/hoc-clk/overlay/src/ui/gui/value_choice_gui.cpp b/Source/hoc-clk/overlay/src/ui/gui/value_choice_gui.cpp new file mode 100644 index 00000000..9b8d6265 --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/gui/value_choice_gui.cpp @@ -0,0 +1,200 @@ + +/* + * + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#include "value_choice_gui.h" +#include "../format.h" +#include "fatal_gui.h" +#include +#include + +ValueChoiceGui::ValueChoiceGui(std::uint32_t selectedValue, + const ValueRange& range, + const std::string& categoryName, + ValueChoiceListener listener, + const ValueThresholds& thresholds, + bool enableThresholds, + std::map labels, + std::vector namedValues, + bool showDefaultValue, + bool showDNO) + : selectedValue(selectedValue), + range(range), + categoryName(categoryName), + listener(listener), + thresholds(thresholds), + enableThresholds(enableThresholds), + labels(labels), + namedValues(namedValues), + showDefaultValue(showDefaultValue), + showDNO(showDNO) +{ +} + +ValueChoiceGui::~ValueChoiceGui() +{ +} + +std::string ValueChoiceGui::formatValue(std::uint32_t value) +{ + std::ostringstream oss; + if(showDefaultValue) { + if (value == 0) { + return this->showDNO ? FREQ_DEFAULT_TEXT : VALUE_DEFAULT_TEXT; + } + } + double displayValue = static_cast(value) / static_cast(range.divisor); + oss << std::fixed << std::setprecision(range.decimalPlaces) << displayValue; + if (!range.suffix.empty()) { + oss << " " << range.suffix; + } + return oss.str(); +} + +int ValueChoiceGui::getSafetyLevel(std::uint32_t value) +{ + if(thresholds.warning == 0 && thresholds.danger == 0) { + return 0; + } + + if (value > thresholds.danger) { + return 2; + } + if (value > thresholds.warning) { + return 1; + } + return 0; +} + +tsl::elm::ListItem* ValueChoiceGui::createValueListItem(std::uint32_t value, bool selected, int safety) +{ + std::string text = formatValue(value); + std::string rightText = ""; + + auto it = labels.find(value); + if (it != labels.end()) { + rightText = it->second; + } + + if (selected) { + const_cast(rightText) = "\uE14B"; + } + + tsl::elm::ListItem* listItem = new tsl::elm::ListItem(text, rightText, false); + switch (safety) + { + case 0: + listItem->setTextColor(tsl::Color(255, 255, 255, 255)); + listItem->setValueColor(tsl::Color(255, 255, 255, 255)); + break; + case 1: + listItem->setTextColor(tsl::Color(255, 165, 0, 255)); + listItem->setValueColor(tsl::Color(255, 165, 0, 255)); + break; + case 2: + listItem->setTextColor(tsl::Color(255, 0, 0, 255)); + listItem->setValueColor(tsl::Color(255, 0, 0, 255)); + break; + } + + // Make annotation grey + if (!rightText.empty() && !selected) + listItem->setValueColor(tsl::Color(180, 180, 180, 255)); + else if(selected) + listItem->setValueColor(tsl::infoTextColor); + + listItem->setClickListener([this, value](u64 keys) + { + if ((keys & HidNpadButton_A) == HidNpadButton_A && this->listener) { + if (this->listener(value)) { + tsl::goBack(); + } + return true; + } + return false; + }); + return listItem; +} + +tsl::elm::ListItem* ValueChoiceGui::createNamedValueListItem(const NamedValue& namedValue, bool selected, int safety) +{ + std::string text = namedValue.name; + if (selected) { + const_cast(namedValue.rightText) = "\uE14B"; + } + + tsl::elm::ListItem* listItem = new tsl::elm::ListItem(text, namedValue.rightText, false); + switch (safety) + { + case 0: + listItem->setTextColor(tsl::Color(255, 255, 255, 255)); + listItem->setValueColor(tsl::Color(255, 255, 255, 255)); + break; + case 1: + listItem->setTextColor(tsl::Color(255, 165, 0, 255)); + listItem->setValueColor(tsl::Color(255, 165, 0, 255)); + break; + case 2: + listItem->setTextColor(tsl::Color(255, 0, 0, 255)); + listItem->setValueColor(tsl::Color(255, 0, 0, 255)); + break; + } + + if (!namedValue.rightText.empty() && !selected) + listItem->setValueColor(tsl::Color(180, 180, 180, 255)); + else if(selected) + listItem->setValueColor(tsl::infoTextColor); + + listItem->setClickListener([this, value = namedValue.value](u64 keys) + { + if ((keys & HidNpadButton_A) == HidNpadButton_A && this->listener) { + if (this->listener(value)) { + tsl::goBack(); + } + return true; + } + return false; + }); + return listItem; +} + +void ValueChoiceGui::listUI() +{ + if (!categoryName.empty()) { + this->listElement->addItem(new tsl::elm::CategoryHeader(categoryName)); + } + + if (showDefaultValue) { + this->listElement->addItem(this->createValueListItem(0, this->selectedValue == 0, 0)); + } + for (const auto& namedValue : namedValues) { + int safety = enableThresholds ? getSafetyLevel(namedValue.value) : 0; + bool selected = (namedValue.value == this->selectedValue); + this->listElement->addItem(this->createNamedValueListItem(namedValue, selected, safety)); + } + + if (namedValues.empty()) { + for (std::uint32_t value = range.min; value <= range.max; value += range.step) + { + int safety = getSafetyLevel(value); + bool selected = (value == this->selectedValue); + this->listElement->addItem(this->createValueListItem(value, selected, safety)); + } + } + + this->listElement->jumpToItem("", "\uE14B"); +} \ No newline at end of file diff --git a/Source/hoc-clk/overlay/src/ui/gui/value_choice_gui.h b/Source/hoc-clk/overlay/src/ui/gui/value_choice_gui.h new file mode 100644 index 00000000..49c7883d --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/gui/value_choice_gui.h @@ -0,0 +1,114 @@ + +/* + * + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#pragma once +#include +#include +#include +#include +#include +#include "base_menu_gui.h" + +using ValueChoiceListener = std::function; +#define VALUE_DEFAULT_TEXT "Default" + +struct ValueRange { + std::uint32_t min; + std::uint32_t max; + std::uint32_t step; + std::string suffix; + std::uint32_t divisor; + int decimalPlaces; + ValueRange() + : min(0), max(0), step(1), suffix(""), divisor(1), decimalPlaces(0) {} + ValueRange(std::uint32_t min, std::uint32_t max, std::uint32_t step, + const std::string& suffix = "", std::uint32_t divisor = 1, int decimalPlaces = 0) + : min(min), max(max), step(step), suffix(suffix), + divisor(divisor), decimalPlaces(decimalPlaces) {} +}; + +struct ValueThresholds { + std::uint32_t warning; + std::uint32_t danger; + ValueThresholds(std::uint32_t warning = 0, std::uint32_t danger = 0) + : warning(warning), danger(danger) {} +}; + +struct NamedValue { + std::string name; + std::uint32_t value; + std::string rightText; + + NamedValue(const std::string& name, std::uint32_t value, const std::string& rightText = "") + : name(name), value(value), rightText(rightText) {} +}; + +class ValueChoiceGui : public BaseMenuGui +{ +protected: + std::uint32_t selectedValue; + ValueRange range; + std::string categoryName; + ValueChoiceListener listener; + ValueThresholds thresholds; + bool enableThresholds; + std::map labels; + + std::vector namedValues; + bool showDefaultValue = true; + bool showDNO = false; + tsl::elm::ListItem* createValueListItem(std::uint32_t value, bool selected, int safety); + tsl::elm::ListItem* createNamedValueListItem(const NamedValue& namedValue, bool selected, int safety); + std::string formatValue(std::uint32_t value); + int getSafetyLevel(std::uint32_t value); + +public: + ValueChoiceGui(std::uint32_t selectedValue, + const ValueRange& range, + const std::string& categoryName, + ValueChoiceListener listener, + const ValueThresholds& thresholds = ValueThresholds(), + bool enableThresholds = false, + std::map labels = {}, + std::vector namedValues = {}, + bool showDefaultValue = true, + bool showDNO = false); + ~ValueChoiceGui(); + + void addNamedValue(const std::string& name, std::uint32_t value, const std::string& rightText = "") + { + namedValues.emplace_back(name, value, rightText); + } + + void addNamedValues(const std::vector& values) + { + namedValues.insert(namedValues.end(), values.begin(), values.end()); + } + + void clearNamedValues() + { + namedValues.clear(); + } + + void setShowDefaultValue(bool show) + { + showDefaultValue = show; + } + + void listUI() override; +}; \ No newline at end of file diff --git a/Source/hoc-clk/overlay/src/ui/style.h b/Source/hoc-clk/overlay/src/ui/style.h new file mode 100644 index 00000000..45692881 --- /dev/null +++ b/Source/hoc-clk/overlay/src/ui/style.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* -------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * , , + * wrote this file. As long as you retain this notice you can do whatever you + * want with this stuff. If you meet any of us some day, and you think this + * stuff is worth it, you can buy us a beer in return. - The sys-clk authors + * -------------------------------------------------------------------------- + */ + + +#pragma once + +#include + +#define TEXT_COLOR tsl::gfx::Renderer::a(0xFFFF) +#define DESC_COLOR tsl::gfx::Renderer::a({ 0xC, 0xC, 0xC, 0xF }) +#define VALUE_COLOR tsl::gfx::Renderer::a({ 0x5, 0xC, 0xA, 0xF }) +#define SMALL_TEXT_SIZE 15 +#define LABEL_SPACING 7 +#define LABEL_FONT_SIZE 15 diff --git a/Source/hoc-clk/sysmodule/.gitignore b/Source/hoc-clk/sysmodule/.gitignore new file mode 100644 index 00000000..36a52c92 --- /dev/null +++ b/Source/hoc-clk/sysmodule/.gitignore @@ -0,0 +1,2 @@ +/out +/build diff --git a/Source/rewrite-hoc-clk/sysmodule/Makefile b/Source/hoc-clk/sysmodule/Makefile similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/Makefile rename to Source/hoc-clk/sysmodule/Makefile diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/minIni/.gitignore b/Source/hoc-clk/sysmodule/lib/minIni/.gitignore similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/minIni/.gitignore rename to Source/hoc-clk/sysmodule/lib/minIni/.gitignore diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/minIni/.gitrepo b/Source/hoc-clk/sysmodule/lib/minIni/.gitrepo similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/minIni/.gitrepo rename to Source/hoc-clk/sysmodule/lib/minIni/.gitrepo diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/minIni/LICENSE b/Source/hoc-clk/sysmodule/lib/minIni/LICENSE similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/minIni/LICENSE rename to Source/hoc-clk/sysmodule/lib/minIni/LICENSE diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/minIni/Makefile b/Source/hoc-clk/sysmodule/lib/minIni/Makefile similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/minIni/Makefile rename to Source/hoc-clk/sysmodule/lib/minIni/Makefile diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/minIni/NOTICE b/Source/hoc-clk/sysmodule/lib/minIni/NOTICE similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/minIni/NOTICE rename to Source/hoc-clk/sysmodule/lib/minIni/NOTICE diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/minIni/README.md b/Source/hoc-clk/sysmodule/lib/minIni/README.md similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/minIni/README.md rename to Source/hoc-clk/sysmodule/lib/minIni/README.md diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/minGlue-FatFs.h b/Source/hoc-clk/sysmodule/lib/minIni/dev/minGlue-FatFs.h similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/minGlue-FatFs.h rename to Source/hoc-clk/sysmodule/lib/minIni/dev/minGlue-FatFs.h diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/minGlue-ccs.h b/Source/hoc-clk/sysmodule/lib/minIni/dev/minGlue-ccs.h similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/minGlue-ccs.h rename to Source/hoc-clk/sysmodule/lib/minIni/dev/minGlue-ccs.h diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/minGlue-efsl.h b/Source/hoc-clk/sysmodule/lib/minIni/dev/minGlue-efsl.h similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/minGlue-efsl.h rename to Source/hoc-clk/sysmodule/lib/minIni/dev/minGlue-efsl.h diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/minGlue-ffs.h b/Source/hoc-clk/sysmodule/lib/minIni/dev/minGlue-ffs.h similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/minGlue-ffs.h rename to Source/hoc-clk/sysmodule/lib/minIni/dev/minGlue-ffs.h diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/minGlue-mdd.h b/Source/hoc-clk/sysmodule/lib/minIni/dev/minGlue-mdd.h similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/minGlue-mdd.h rename to Source/hoc-clk/sysmodule/lib/minIni/dev/minGlue-mdd.h diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/minGlue-stdio.h b/Source/hoc-clk/sysmodule/lib/minIni/dev/minGlue-stdio.h similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/minGlue-stdio.h rename to Source/hoc-clk/sysmodule/lib/minIni/dev/minGlue-stdio.h diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/minGlue.h b/Source/hoc-clk/sysmodule/lib/minIni/dev/minGlue.h similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/minGlue.h rename to Source/hoc-clk/sysmodule/lib/minIni/dev/minGlue.h diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/minIni.c b/Source/hoc-clk/sysmodule/lib/minIni/dev/minIni.c similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/minIni.c rename to Source/hoc-clk/sysmodule/lib/minIni/dev/minIni.c diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/minIni.h b/Source/hoc-clk/sysmodule/lib/minIni/dev/minIni.h similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/minIni.h rename to Source/hoc-clk/sysmodule/lib/minIni/dev/minIni.h diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/test.c b/Source/hoc-clk/sysmodule/lib/minIni/dev/test.c similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/test.c rename to Source/hoc-clk/sysmodule/lib/minIni/dev/test.c diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/test.ini b/Source/hoc-clk/sysmodule/lib/minIni/dev/test.ini similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/test.ini rename to Source/hoc-clk/sysmodule/lib/minIni/dev/test.ini diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/test2.cc b/Source/hoc-clk/sysmodule/lib/minIni/dev/test2.cc similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/test2.cc rename to Source/hoc-clk/sysmodule/lib/minIni/dev/test2.cc diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/testplain.ini b/Source/hoc-clk/sysmodule/lib/minIni/dev/testplain.ini similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/testplain.ini rename to Source/hoc-clk/sysmodule/lib/minIni/dev/testplain.ini diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/wxMinIni.h b/Source/hoc-clk/sysmodule/lib/minIni/dev/wxMinIni.h similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/minIni/dev/wxMinIni.h rename to Source/hoc-clk/sysmodule/lib/minIni/dev/wxMinIni.h diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/minIni/doc/minIni.pdf b/Source/hoc-clk/sysmodule/lib/minIni/doc/minIni.pdf similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/minIni/doc/minIni.pdf rename to Source/hoc-clk/sysmodule/lib/minIni/doc/minIni.pdf diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/minIni/include/minIni.h b/Source/hoc-clk/sysmodule/lib/minIni/include/minIni.h similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/minIni/include/minIni.h rename to Source/hoc-clk/sysmodule/lib/minIni/include/minIni.h diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/nxExt/.gitignore b/Source/hoc-clk/sysmodule/lib/nxExt/.gitignore similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/nxExt/.gitignore rename to Source/hoc-clk/sysmodule/lib/nxExt/.gitignore diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/nxExt/Makefile b/Source/hoc-clk/sysmodule/lib/nxExt/Makefile similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/nxExt/Makefile rename to Source/hoc-clk/sysmodule/lib/nxExt/Makefile diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/nxExt/include/nxExt.h b/Source/hoc-clk/sysmodule/lib/nxExt/include/nxExt.h similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/nxExt/include/nxExt.h rename to Source/hoc-clk/sysmodule/lib/nxExt/include/nxExt.h diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/nxExt/include/nxExt/apm_ext.h b/Source/hoc-clk/sysmodule/lib/nxExt/include/nxExt/apm_ext.h similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/nxExt/include/nxExt/apm_ext.h rename to Source/hoc-clk/sysmodule/lib/nxExt/include/nxExt/apm_ext.h diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/nxExt/include/nxExt/cpp/lockable_mutex.h b/Source/hoc-clk/sysmodule/lib/nxExt/include/nxExt/cpp/lockable_mutex.h similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/nxExt/include/nxExt/cpp/lockable_mutex.h rename to Source/hoc-clk/sysmodule/lib/nxExt/include/nxExt/cpp/lockable_mutex.h diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/nxExt/include/nxExt/i2c.h b/Source/hoc-clk/sysmodule/lib/nxExt/include/nxExt/i2c.h similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/nxExt/include/nxExt/i2c.h rename to Source/hoc-clk/sysmodule/lib/nxExt/include/nxExt/i2c.h diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/nxExt/include/nxExt/ipc_server.h b/Source/hoc-clk/sysmodule/lib/nxExt/include/nxExt/ipc_server.h similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/nxExt/include/nxExt/ipc_server.h rename to Source/hoc-clk/sysmodule/lib/nxExt/include/nxExt/ipc_server.h diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/nxExt/include/nxExt/max17050.h b/Source/hoc-clk/sysmodule/lib/nxExt/include/nxExt/max17050.h similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/nxExt/include/nxExt/max17050.h rename to Source/hoc-clk/sysmodule/lib/nxExt/include/nxExt/max17050.h diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/nxExt/include/nxExt/t210.h b/Source/hoc-clk/sysmodule/lib/nxExt/include/nxExt/t210.h similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/nxExt/include/nxExt/t210.h rename to Source/hoc-clk/sysmodule/lib/nxExt/include/nxExt/t210.h diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/nxExt/include/nxExt/tmp451.h b/Source/hoc-clk/sysmodule/lib/nxExt/include/nxExt/tmp451.h similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/nxExt/include/nxExt/tmp451.h rename to Source/hoc-clk/sysmodule/lib/nxExt/include/nxExt/tmp451.h diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/nxExt/src/apm_ext.c b/Source/hoc-clk/sysmodule/lib/nxExt/src/apm_ext.c similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/nxExt/src/apm_ext.c rename to Source/hoc-clk/sysmodule/lib/nxExt/src/apm_ext.c diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/nxExt/src/i2c.c b/Source/hoc-clk/sysmodule/lib/nxExt/src/i2c.c similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/nxExt/src/i2c.c rename to Source/hoc-clk/sysmodule/lib/nxExt/src/i2c.c diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/nxExt/src/ipc_server.c b/Source/hoc-clk/sysmodule/lib/nxExt/src/ipc_server.c similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/nxExt/src/ipc_server.c rename to Source/hoc-clk/sysmodule/lib/nxExt/src/ipc_server.c diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/nxExt/src/max17050.c b/Source/hoc-clk/sysmodule/lib/nxExt/src/max17050.c similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/nxExt/src/max17050.c rename to Source/hoc-clk/sysmodule/lib/nxExt/src/max17050.c diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/nxExt/src/t210.c b/Source/hoc-clk/sysmodule/lib/nxExt/src/t210.c similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/nxExt/src/t210.c rename to Source/hoc-clk/sysmodule/lib/nxExt/src/t210.c diff --git a/Source/rewrite-hoc-clk/sysmodule/lib/nxExt/src/tmp451.c b/Source/hoc-clk/sysmodule/lib/nxExt/src/tmp451.c similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/lib/nxExt/src/tmp451.c rename to Source/hoc-clk/sysmodule/lib/nxExt/src/tmp451.c diff --git a/Source/rewrite-hoc-clk/sysmodule/perms.json b/Source/hoc-clk/sysmodule/perms.json similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/perms.json rename to Source/hoc-clk/sysmodule/perms.json diff --git a/Source/rewrite-hoc-clk/sysmodule/src/board/board.cpp b/Source/hoc-clk/sysmodule/src/board/board.cpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/board/board.cpp rename to Source/hoc-clk/sysmodule/src/board/board.cpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/board/board.hpp b/Source/hoc-clk/sysmodule/src/board/board.hpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/board/board.hpp rename to Source/hoc-clk/sysmodule/src/board/board.hpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/board/board_freq.cpp b/Source/hoc-clk/sysmodule/src/board/board_freq.cpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/board/board_freq.cpp rename to Source/hoc-clk/sysmodule/src/board/board_freq.cpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/board/board_freq.hpp b/Source/hoc-clk/sysmodule/src/board/board_freq.hpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/board/board_freq.hpp rename to Source/hoc-clk/sysmodule/src/board/board_freq.hpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/board/board_fuse.cpp b/Source/hoc-clk/sysmodule/src/board/board_fuse.cpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/board/board_fuse.cpp rename to Source/hoc-clk/sysmodule/src/board/board_fuse.cpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/board/board_fuse.hpp b/Source/hoc-clk/sysmodule/src/board/board_fuse.hpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/board/board_fuse.hpp rename to Source/hoc-clk/sysmodule/src/board/board_fuse.hpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/board/board_load.cpp b/Source/hoc-clk/sysmodule/src/board/board_load.cpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/board/board_load.cpp rename to Source/hoc-clk/sysmodule/src/board/board_load.cpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/board/board_load.hpp b/Source/hoc-clk/sysmodule/src/board/board_load.hpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/board/board_load.hpp rename to Source/hoc-clk/sysmodule/src/board/board_load.hpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/board/board_misc.cpp b/Source/hoc-clk/sysmodule/src/board/board_misc.cpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/board/board_misc.cpp rename to Source/hoc-clk/sysmodule/src/board/board_misc.cpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/board/board_misc.hpp b/Source/hoc-clk/sysmodule/src/board/board_misc.hpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/board/board_misc.hpp rename to Source/hoc-clk/sysmodule/src/board/board_misc.hpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/board/board_name.cpp b/Source/hoc-clk/sysmodule/src/board/board_name.cpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/board/board_name.cpp rename to Source/hoc-clk/sysmodule/src/board/board_name.cpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/board/board_name.hpp b/Source/hoc-clk/sysmodule/src/board/board_name.hpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/board/board_name.hpp rename to Source/hoc-clk/sysmodule/src/board/board_name.hpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/board/board_profile.cpp b/Source/hoc-clk/sysmodule/src/board/board_profile.cpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/board/board_profile.cpp rename to Source/hoc-clk/sysmodule/src/board/board_profile.cpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/board/board_profile.hpp b/Source/hoc-clk/sysmodule/src/board/board_profile.hpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/board/board_profile.hpp rename to Source/hoc-clk/sysmodule/src/board/board_profile.hpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/board/board_sensor.cpp b/Source/hoc-clk/sysmodule/src/board/board_sensor.cpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/board/board_sensor.cpp rename to Source/hoc-clk/sysmodule/src/board/board_sensor.cpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/board/board_sensor.hpp b/Source/hoc-clk/sysmodule/src/board/board_sensor.hpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/board/board_sensor.hpp rename to Source/hoc-clk/sysmodule/src/board/board_sensor.hpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/board/board_volt.cpp b/Source/hoc-clk/sysmodule/src/board/board_volt.cpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/board/board_volt.cpp rename to Source/hoc-clk/sysmodule/src/board/board_volt.cpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/board/board_volt.hpp b/Source/hoc-clk/sysmodule/src/board/board_volt.hpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/board/board_volt.hpp rename to Source/hoc-clk/sysmodule/src/board/board_volt.hpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/board/display_refresh_rate.cpp b/Source/hoc-clk/sysmodule/src/board/display_refresh_rate.cpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/board/display_refresh_rate.cpp rename to Source/hoc-clk/sysmodule/src/board/display_refresh_rate.cpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/board/display_refresh_rate.hpp b/Source/hoc-clk/sysmodule/src/board/display_refresh_rate.hpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/board/display_refresh_rate.hpp rename to Source/hoc-clk/sysmodule/src/board/display_refresh_rate.hpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/clock_manager.cpp b/Source/hoc-clk/sysmodule/src/clock_manager.cpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/clock_manager.cpp rename to Source/hoc-clk/sysmodule/src/clock_manager.cpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/clock_manager.hpp b/Source/hoc-clk/sysmodule/src/clock_manager.hpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/clock_manager.hpp rename to Source/hoc-clk/sysmodule/src/clock_manager.hpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/config.cpp b/Source/hoc-clk/sysmodule/src/config.cpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/config.cpp rename to Source/hoc-clk/sysmodule/src/config.cpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/config.hpp b/Source/hoc-clk/sysmodule/src/config.hpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/config.hpp rename to Source/hoc-clk/sysmodule/src/config.hpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/errors.cpp b/Source/hoc-clk/sysmodule/src/errors.cpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/errors.cpp rename to Source/hoc-clk/sysmodule/src/errors.cpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/errors.hpp b/Source/hoc-clk/sysmodule/src/errors.hpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/errors.hpp rename to Source/hoc-clk/sysmodule/src/errors.hpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/file_utils.cpp b/Source/hoc-clk/sysmodule/src/file_utils.cpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/file_utils.cpp rename to Source/hoc-clk/sysmodule/src/file_utils.cpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/file_utils.hpp b/Source/hoc-clk/sysmodule/src/file_utils.hpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/file_utils.hpp rename to Source/hoc-clk/sysmodule/src/file_utils.hpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/governor.cpp b/Source/hoc-clk/sysmodule/src/governor.cpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/governor.cpp rename to Source/hoc-clk/sysmodule/src/governor.cpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/governor.hpp b/Source/hoc-clk/sysmodule/src/governor.hpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/governor.hpp rename to Source/hoc-clk/sysmodule/src/governor.hpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/integrations.cpp b/Source/hoc-clk/sysmodule/src/integrations.cpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/integrations.cpp rename to Source/hoc-clk/sysmodule/src/integrations.cpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/integrations.hpp b/Source/hoc-clk/sysmodule/src/integrations.hpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/integrations.hpp rename to Source/hoc-clk/sysmodule/src/integrations.hpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/ipc_service.cpp b/Source/hoc-clk/sysmodule/src/ipc_service.cpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/ipc_service.cpp rename to Source/hoc-clk/sysmodule/src/ipc_service.cpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/ipc_service.hpp b/Source/hoc-clk/sysmodule/src/ipc_service.hpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/ipc_service.hpp rename to Source/hoc-clk/sysmodule/src/ipc_service.hpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/kip.cpp b/Source/hoc-clk/sysmodule/src/kip.cpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/kip.cpp rename to Source/hoc-clk/sysmodule/src/kip.cpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/kip.hpp b/Source/hoc-clk/sysmodule/src/kip.hpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/kip.hpp rename to Source/hoc-clk/sysmodule/src/kip.hpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/main.cpp b/Source/hoc-clk/sysmodule/src/main.cpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/main.cpp rename to Source/hoc-clk/sysmodule/src/main.cpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/process_management.cpp b/Source/hoc-clk/sysmodule/src/process_management.cpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/process_management.cpp rename to Source/hoc-clk/sysmodule/src/process_management.cpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/process_management.hpp b/Source/hoc-clk/sysmodule/src/process_management.hpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/process_management.hpp rename to Source/hoc-clk/sysmodule/src/process_management.hpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/soctherm.cpp b/Source/hoc-clk/sysmodule/src/soctherm.cpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/soctherm.cpp rename to Source/hoc-clk/sysmodule/src/soctherm.cpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/soctherm.hpp b/Source/hoc-clk/sysmodule/src/soctherm.hpp similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/src/soctherm.hpp rename to Source/hoc-clk/sysmodule/src/soctherm.hpp diff --git a/Source/rewrite-hoc-clk/sysmodule/toolbox.json b/Source/hoc-clk/sysmodule/toolbox.json similarity index 100% rename from Source/rewrite-hoc-clk/sysmodule/toolbox.json rename to Source/hoc-clk/sysmodule/toolbox.json diff --git a/Source/sys-clk/overlay/Makefile b/Source/sys-clk/overlay/Makefile index 1f8312f8..09339ff1 100644 --- a/Source/sys-clk/overlay/Makefile +++ b/Source/sys-clk/overlay/Makefile @@ -39,7 +39,7 @@ include ${TOPDIR}/lib/libultrahand/ultrahand.mk # version control constants #--------------------------------------------------------------------------------- #TARGET_VERSION := $(shell git describe --dirty --always --tags) -APP_VERSION := 1.1.0 +APP_VERSION := 1.2.0 TARGET_VERSION := $(APP_VERSION) #--------------------------------------------------------------------------------- diff --git a/build.sh b/build.sh index 57681e59..0a36c578 100644 --- a/build.sh +++ b/build.sh @@ -13,7 +13,7 @@ hactool -t kip1 out/nintendo_nx_arm64_armv8a/release/loader.kip --uncompress=hoc cd ../../../ # exit cp build/stratosphere/loader/hoc.kip dist/atmosphere/kips/hoc.kip -cd Source/sys-clk/ +cd Source/hoc-clk/ ./build.sh cp -r dist/ ../../ diff --git a/dist/atmosphere/contents/00FF0000636C6BFF/exefs.nsp b/dist/atmosphere/contents/00FF0000636C6BFF/exefs.nsp index 9d882880..bb078c98 100644 Binary files a/dist/atmosphere/contents/00FF0000636C6BFF/exefs.nsp and b/dist/atmosphere/contents/00FF0000636C6BFF/exefs.nsp differ diff --git a/dist/atmosphere/kips/hoc.kip b/dist/atmosphere/kips/hoc.kip index da653127..3e7db047 100644 Binary files a/dist/atmosphere/kips/hoc.kip and b/dist/atmosphere/kips/hoc.kip differ diff --git a/dist/config/horizon-oc/lang/ko.json b/dist/config/horizon-oc/lang/ko.json index aa0ce600..09e73e66 100644 --- a/dist/config/horizon-oc/lang/ko.json +++ b/dist/config/horizon-oc/lang/ko.json @@ -10,7 +10,7 @@ "Developers": "개발자", "Contributors": "기여자", "Testers": "테스터", - "Special Thanks": "특별한 감사", + "Special Thanks": "특별한 분", "Unknown": "알 수 없음", "Installed": "설치됨", "Not Installed": "설치되지 않음", @@ -18,7 +18,7 @@ "THE BEER-WARE LICENSE": "맥주 제품 라이센스", "Default": "기본값", "Do Not Override": "재정의하지 마십시오", - "Disabled": "장애인", + "Disabled": "비활성화", "Enabled": "활성화됨", " \\ue0e3 Reset": "\\ue0e3 재설정", "Display": "디스플레이", @@ -35,11 +35,11 @@ "Sleep Mode": "절전 모드", "Stock": "주식", "Dev OC": "개발 OC", - "Boost Mode": "부스트 모드", - "Safe Max": "세이프 맥스", - "Unsafe Max": "안전하지 않은 최대값", - "Absolute Max": "절대 최대", - "Handheld Safe Max": "휴대용 금고", + "Overwrite Boost Mode": "부스트 모드 덮어쓰기", + "Safe Max": "안전함 최대값", + "Unsafe Max": "불안정 최대값", + "Absolute Max": "절대 최대값", + "Handheld Safe Max": "휴대모드 안전함 최대값", "Enable": "활성화", "Edit App Profile": "앱 프로필 편집", "Edit Global Profile": "글로벌 프로필 편집", @@ -48,7 +48,7 @@ "About": "소개", "Compiling with minimal features": "최소한의 기능으로 컴파일하기", "General Settings": "일반 설정", - "Governor Settings": "주지사 설정", + "Governor Settings": "거버너 설정", "Safety Settings": "안전 설정", "Save KIP Settings": "KIP 설정 저장", "RAM Settings": "RAM 설정", @@ -63,36 +63,36 @@ "RAM Voltage Display Mode": "RAM 전압 표시 모드", "Polling Interval": "폴링 간격", "CPU Governor Minimum Frequency": "CPU 거버너 최소 주파수", - "refresh rates may cause stress": "새로 고침 빈도는 스트레스를 유발할 수 있습니다", - "or damage to your display! ": "또는 디스플레이가 손상되었습니다!", - "Proceed at your own risk!": "자신의 책임하에 진행하십시오!", + "refresh rates may cause stress": "디스플레이 주사율 빈도 변경은", + "or damage to your display! ": "기기에 손상이 발생될 수 있습니다!", + "Proceed at your own risk!": "책임하에 주의해서 사용하십시오!", "Max Handheld Display": "최대 휴대용 디스플레이", - "Display Clock": "디스플레이 시계", + "Display Clock": "디스플레이 클럭", "Official Rating": "공식 등급", "TDP Threshold": "TDP 임계값", "Power": "힘", "Thermal Throttle Limit": "열 스로틀 한계", "HP Mode": "HP 모드", - "Default (Mariko)": "디폴트(마리코)", + "Default (Mariko)": "기본값(마리코)", "Default (Erista)": "기본값(에리스타)", - "Rating": "등급", - "Safe Max (Mariko)": "세이프 맥스(마리코)", - "Safe Max (Erista)": "세이프맥스(에리스타)", + "Rating": "표준값", + "Safe Max (Mariko)": "안전함 최대치(마리코)", + "Safe Max (Erista)": "안전함 최대치(에리스타)", "RAM VDD2 Voltage": "RAM VDD2 전압", "Voltage": "전압", "RAM VDDQ Voltage": "RAM VDDQ 전압", "RAM Frequency Editor": "RAM 주파수 편집기", "JEDEC.": "JEDEC.", - "High speedo needed!": "고속주행이 필요해!", + "High speedo needed!": "높은 스피도값이 필요합니다!", "3333MHz (Needs extreme Speedo/PLL)": "3333MHz(극단적인 Speedo/PLL 필요)", "3366MHz (Needs extreme Speedo/PLL)": "3366MHz(극단적인 Speedo/PLL 필요)", "3400MHz (Needs extreme Speedo/PLL)": "3400MHz(극단적인 Speedo/PLL 필요)", "3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (말도 안 되는 Speedo/PLL 필요)", "3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz(터무니없는 Speedo/PLL 필요)", "3500MHz (Needs ridiculous Speedo/PLL)": "3500MHz(터무니없는 Speedo/PLL 필요)", - "Ram Max Clock": "램 맥스 시계", + "Ram Max Clock": "RAM 최대 클럭", "RAM Latency Editor": "RAM 지연 시간 편집기", - "RAM Timing Reductions": "RAM 타이밍 감소", + "RAM Timing Reductions": "RAM 타이밍 편집기", "Memory Timings": "메모리 타이밍", "Advanced": "고급", "t6 tRTW Fine Tune": "t6 tRTW 미세 조정", @@ -103,21 +103,21 @@ "Read Latency": "읽기 지연 시간", "Write Latency": "쓰기 지연 시간", "CPU Boost Clock": "CPU 부스트 클럭", - "CPU UV": "CPU UV", + "CPU UV": "CPU 언더볼트", "CPU Unlock": "CPU 잠금 해제", "CPU VMIN": "CPU VMIN", "CPU Max Voltage": "CPU 최대 전압", - "CPU Max Clock": "CPU 최대 클록", - "Extreme UV Table": "극자외선 테이블", - "CPU UV Table": "CPU UV 테이블", - "CPU Low UV": "CPU 낮은 UV", - "CPU High UV": "CPU 높은 UV", - "CPU Low VMIN": "CPU 부족 VMIN", - "CPU High VMIN": "CPU 높음 VMIN", + "CPU Max Clock": "CPU 최대 클럭", + "Extreme UV Table": "익스트림 테이블", + "CPU UV Table": "CPU 언더볼트 테이블", + "CPU Low UV": "CPU 저주파 언더볼트", + "CPU High UV": "CPU 고주파 언더볼트", + "CPU Low VMIN": "CPU 저주파 최소 전압", + "CPU High VMIN": "CPU 고주파 최소 전압", "No Undervolt": "언더볼트 없음", "SLT Table": "SLT 테이블", "HiOPT Table": "HiOPT 테이블", - "GPU Undervolt Table": "GPU 언더볼트 표", + "GPU Undervolt Table": "GPU 언더볼트 테이블", "GPU Minimum Voltage": "GPU 최소 전압", "Calculate GPU Vmin": "GPU Vmin 계산", "GPU VMIN": "GPU VMIN", @@ -131,11 +131,11 @@ "Official Service": "공식 서비스", "GPU DVFS Mode": "GPU DVFS 모드", "GPU DVFS Offset": "GPU DVFS 오프셋", - "GPU Voltage Table": "GPU 전압 표", + "GPU Voltage Table": "GPU 전압 테이블", "GPU Custom Table (mV)": "GPU 사용자 정의 테이블(mV)", "1075MHz without UV, 1152MHz on SLT": "UV 없이 1075MHz, SLT에서 1152MHz", "or 1228MHz on HiOPT can cause ": "또는 HiOPT에서 1228MHz를 사용하면", - "permanent damage to your Switch!": "스위치가 영구적으로 손상되었습니다!", + "permanent damage to your Switch!": "스위치가 영구적으로 손상될 수 있습니다!", "921MHz without UV and 960MHz on": "UV가 없는 경우 921MHz, 켜진 경우에는 960MHz", "SLT or HiOPT can cause ": "SLT 또는 HiOPT는 다음을 유발할 수 있습니다." } diff --git a/dist/config/horizon-oc/lang/lang/de.json b/dist/config/horizon-oc/lang/lang/de.json new file mode 100644 index 00000000..d2eedf0b --- /dev/null +++ b/dist/config/horizon-oc/lang/lang/de.json @@ -0,0 +1,141 @@ +{ + "Information": "Informationen", + "IDDQ:": "IDDQ:", + "Module: ": "Modul:", + "sys-dock status:": "Sys-Dock-Status:", + "SaltyNX status:": "SaltyNX-Status:", + "RR Display status:": "RR Anzeigestatus:", + "Wafer Position:": "Waferposition:", + "Credits": "Credits", + "Developers": "Entwickler", + "Contributors": "Mitwirkende", + "Testers": "Tester", + "Special Thanks": "Besonderer Dank", + "Unknown": "Unbekannt", + "Installed": "Installiert", + "Not Installed": "Nicht installiert", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "DIE BIERWAREN-LIZENZ", + "Default": "Standard", + "Do Not Override": "Nicht überschreiben", + "Disabled": "Deaktiviert", + "Enabled": "Aktiviert", + " \\ue0e3 Reset": "\\ue0e3 Zurücksetzen", + "Display": "Anzeige", + "Application changed\\n\\n": "Anwendung geändert\\n\\n", + "The running application changed\\n\\n": "Die laufende Anwendung hat sich geändert\\n\\n", + "while editing was going on.": "während die Bearbeitung im Gange war.", + "Board": "Vorstand", + "%u.%u%u mV": "%u.%u%u mV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "Es konnte keine Verbindung zum hoc-clk-Systemmodul hergestellt werden.\\n\\n", + "Please make sure everything is\\n\\n": "Bitte stellen Sie sicher, dass alles in Ordnung ist\\n\\n", + "correctly installed and enabled.": "korrekt installiert und aktiviert.", + "Fatal error": "Fataler Fehler", + "Temporary Overrides ": "Temporäre Überschreibungen", + "Sleep Mode": "Schlafmodus", + "Stock": "Lager", + "Dev OC": "Entwickler OC", + "Boost Mode": "Boost-Modus", + "Safe Max": "Sicher max", + "Unsafe Max": "Unsicher max", + "Absolute Max": "Absolutes Maximum", + "Handheld Safe Max": "Handsafe max", + "Enable": "Aktivieren", + "Edit App Profile": "App-Profil bearbeiten", + "Edit Global Profile": "Globales Profil bearbeiten", + "Temporary Overrides": "Temporäre Überschreibungen", + "Settings": "Einstellungen", + "About": "Über", + "Compiling with minimal features": "Kompilieren mit minimalen Funktionen", + "General Settings": "Allgemeine Einstellungen", + "Governor Settings": "Gouverneurseinstellungen", + "Safety Settings": "Sicherheitseinstellungen", + "Save KIP Settings": "Speichern Sie die KIP-Einstellungen", + "RAM Settings": "RAM-Einstellungen", + "CPU Settings": "CPU-Einstellungen", + "GPU Settings": "GPU-Einstellungen", + "Display Settings": "Anzeigeeinstellungen", + "Experimental": "Experimentell", + "GPU Scheduling Override Method": "GPU-Planungsüberschreibungsmethode", + "can be dangerous and may cause": "kann gefährlich sein und verursachen", + "damage to your battery or charger!": "Schäden an Ihrem Akku oder Ladegerät!", + "Charge Current Override": "Ladestrom-Überbrückung", + "RAM Voltage Display Mode": "RAM-Spannungsanzeigemodus", + "Polling Interval": "Abfrageintervall", + "CPU Governor Minimum Frequency": "Mindestfrequenz des CPU-Reglers", + "refresh rates may cause stress": "Bildwiederholraten können Stress verursachen", + "or damage to your display! ": "oder Schäden an Ihrem Display!", + "Proceed at your own risk!": "Das Vorgehen erfolgt auf eigene Gefahr!", + "Max Handheld Display": "Max Handheld-Display", + "Display Clock": "Uhr anzeigen", + "Official Rating": "Offizielle Bewertung", + "TDP Threshold": "TDP-Schwellenwert", + "Power": "Macht", + "Thermal Throttle Limit": "Thermische Drosselgrenze", + "HP Mode": "HP-Modus", + "Default (Mariko)": "Standard (Mariko)", + "Default (Erista)": "Standard (Erista)", + "Rating": "Bewertung", + "Safe Max (Mariko)": "Safe Max (Mariko)", + "Safe Max (Erista)": "Safe Max (Erista)", + "RAM VDD2 Voltage": "RAM VDD2 Spannung", + "Voltage": "Spannung", + "RAM VDDQ Voltage": "RAM-VDDQ-Spannung", + "RAM Frequency Editor": "RAM-Frequenzeditor", + "JEDEC.": "JEDEC.", + "High speedo needed!": "Hoher Tacho erforderlich!", + "3333MHz (Needs extreme Speedo/PLL)": "3333 MHz (Benötigt extremen Tacho/PLL)", + "3366MHz (Needs extreme Speedo/PLL)": "3366 MHz (Benötigt extremen Tacho/PLL)", + "3400MHz (Needs extreme Speedo/PLL)": "3400 MHz (Benötigt extremen Tacho/PLL)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433 MHz (Benötigt lächerlichen Tacho/PLL)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466 MHz (Benötigt lächerlichen Tacho/PLL)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500 MHz (Benötigt lächerlichen Tacho/PLL)", + "Ram Max Clock": "Ram Max Uhr", + "RAM Latency Editor": "RAM-Latenz-Editor", + "RAM Timing Reductions": "Reduzierung des RAM-Timings", + "Memory Timings": "Speicherzeiten", + "Advanced": "Fortgeschritten", + "t6 tRTW Fine Tune": "t6 tRTW Feinabstimmung", + "tRTW Fine Tune": "tRTW-Feinabstimmung", + "t7 tWTR Fine Tune": "t7 tWTR Feinabstimmung", + "tWTR Fine Tune": "tWTR-Feinabstimmung", + "Memory Latencies": "Speicherlatenzen", + "Read Latency": "Leselatenz", + "Write Latency": "Schreiblatenz", + "CPU Boost Clock": "CPU-Boost-Takt", + "CPU UV": "CPU-UV", + "CPU Unlock": "CPU-Entsperrung", + "CPU VMIN": "CPU-VMIN", + "CPU Max Voltage": "Maximale CPU-Spannung", + "CPU Max Clock": "Maximaler CPU-Takt", + "Extreme UV Table": "Extremer UV-Tisch", + "CPU UV Table": "CPU-UV-Tisch", + "CPU Low UV": "CPU-niedrige UV-Strahlung", + "CPU High UV": "CPU Hohe UV-Strahlung", + "CPU Low VMIN": "CPU niedrig VMIN", + "CPU High VMIN": "CPU hoch VMIN", + "No Undervolt": "Kein Undervolt", + "SLT Table": "SLT-Tisch", + "HiOPT Table": "HiOPT-Tabelle", + "GPU Undervolt Table": "GPU-Unterspannungstabelle", + "GPU Minimum Voltage": "GPU-Mindestspannung", + "Calculate GPU Vmin": "Berechnen Sie die GPU-Vmin", + "GPU VMIN": "GPU-VMIN", + "GPU Maximum Voltage": "Maximale GPU-Spannung", + "GPU Voltage Offset": "GPU-Spannungsoffset", + "Do not override": "Nicht überschreiben", + "Enabled (Default)": "Aktiviert (Standard)", + "96.6% limit": "96,6 %-Grenze", + "99.7% limit": "99,7 %-Grenze", + "GPU Scheduling Override": "GPU-Planungsüberschreibung", + "Official Service": "Offizieller Dienst", + "GPU DVFS Mode": "GPU-DVFS-Modus", + "GPU DVFS Offset": "GPU-DVFS-Offset", + "GPU Voltage Table": "GPU-Spannungstabelle", + "GPU Custom Table (mV)": "Benutzerdefinierte GPU-Tabelle (mV)", + "1075MHz without UV, 1152MHz on SLT": "1075 MHz ohne UV, 1152 MHz auf SLT", + "or 1228MHz on HiOPT can cause ": "oder 1228 MHz auf HiOPT kann dazu führen", + "permanent damage to your Switch!": "Dauerhafter Schaden an Ihrem Switch!", + "921MHz without UV and 960MHz on": "921 MHz ohne UV und 960 MHz eingeschaltet", + "SLT or HiOPT can cause ": "SLT oder HiOPT können dazu führen" +} diff --git a/dist/config/horizon-oc/lang/lang/en.json b/dist/config/horizon-oc/lang/lang/en.json index ede58e2e..727fab93 100644 --- a/dist/config/horizon-oc/lang/lang/en.json +++ b/dist/config/horizon-oc/lang/lang/en.json @@ -1,79 +1,37 @@ { - "Horizon OC Zeus": "Horizon OC Zeus", - "Edit App Profile": "Edit App Profile", - "Advanced": "Advanced", - "Edit Global Profile": "Edit Global Profile", - "Temporary Overrides": "Temporary Overrides", - "Temporary Overrides Reset": "Temporary Overrides Reset", - "Settings": "Settings", "Information": "Information", - "Enable": "Enable", - "Uncapped Clocks": "Uncapped Clocks", - "Override Boost Mode": "Override Boost Mode", - "CPU Max Display Clock": "CPU Max Display Clock", - "Thermal Throttle": "Thermal Throttle", - "Thermal Throttle Threshold": "Thermal Throttle Threshold", - "Handheld TDP": "Handheld TDP", - "Handheld TDP Limit": "Handheld TDP Limit", - "Lite TDP Limit": "Lite TDP Limit", - "Enforce Board Limit": "Enforce Board Limit", - "Battery Charge Current": "Battery Charge Current", - "Display Refresh Rate Changing": "Display Refresh Rate Changing", - "Fix CPU Volt Bug": "Fix CPU Volt Bug", - "[cfg] no enum format string": "[cfg] no enum format string", - "KIP": "KIP", - "Save KIP Settings": "Save KIP Settings", - "RAM Settings": "RAM Settings", - "CPU Settings": "CPU Settings", - "GPU Settings": "GPU Settings", - "Experimental": "Experimental", - "Charge Current Override": "Charge Current Override", + "IDDQ:": "IDDQ:", + "Module: ": "Module: ", + "sys-dock status:": "sys-dock status:", + "SaltyNX status:": "SaltyNX status:", + "RR Display status:": "RR Display status:", + "Wafer Position:": "Wafer Position:", + "Credits": "Credits", + "Developers": "Developers", + "Contributors": "Contributors", + "Testers": "Testers", + "Special Thanks": "Special Thanks", + "Unknown": "Unknown", + "Installed": "Installed", + "Not Installed": "Not Installed", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "THE BEER-WARE LICENSE", + "Default": "Default", + "Do Not Override": "Do Not Override", "Disabled": "Disabled", - "HP Mode": "HP Mode", - "EMC Max Clock": "EMC Max Clock", - "EMC VDD2 Voltage": "EMC VDD2 Voltage", - "EMC VDDQ Voltage": "EMC VDDQ Voltage", - "DVB Shift": "DVB Shift", - "Memory Timings": "Memory Timings", - "Memory Latencies": "Memory Latencies", - "t1 tRCD": "t1 tRCD", - "t2 tRP": "t2 tRP", - "t3 tRAS": "t3 tRAS", - "t4 tRRD": "t4 tRRD", - "t5 tRFC": "t5 tRFC", - "t6 tRTW": "t6 tRTW", - "t7 tWTR": "t7 tWTR", - "t8 tREFI": "t8 tREFI", - "Update RAM Timings": "Update RAM Timings", - "\uE150 This feature is EXPERIMENTAL": "\uE150 This feature is EXPERIMENTAL", - "and should only be used for testing!": "and should only be used for testing!", - "Read Latency": "Read Latency", - "Write Latency": "Write Latency", - "CPU UV": "CPU UV", - "CPU Unlock": "CPU Unlock", - "CPU VMIN": "CPU VMIN", - "CPU Max Voltage": "CPU Max Voltage", - "CPU UV Table": "CPU UV Table", - "CPU Low UV": "CPU Low UV", - "CPU High UV": "CPU High UV", - "CPU Max Clock": "CPU Max Clock", - "CPU Low VMIN": "CPU Low VMIN", - "CPU High VMIN": "CPU High VMIN", - "GPU Undervolt Table": "GPU Undervolt Table", - "Calculate GPU Vmin": "Calculate GPU Vmin", - "GPU VMIN": "GPU VMIN", - "GPU VMAX": "GPU VMAX", - "GPU Volt Offset": "GPU Volt Offset", - "GPU Custom Table": "GPU Custom Table", - "GPU Custom Table (mV)": "GPU Custom Table (mV)", - "\uE150 Setting GPU Clocks past": "\uE150 Setting GPU Clocks past", - "1075MHz without UV, 1152MHz on SLT or ": "1075MHz without UV, 1152MHz on SLT or ", - "1228MHz on HiOPT can cause ": "1228MHz on HiOPT can cause ", - "permanent damage to your Switch!": "permanent damage to your Switch!", - "Proceed at your own risk!": "Proceed at your own risk!", - "921MHz without UV and 960MHz on": "921MHz without UV and 960MHz on", - "SLT or HiOPT can cause ": "SLT or HiOPT can cause ", - "Auto": "Auto", + "Enabled": "Enabled", + " \\ue0e3 Reset": " \\ue0e3 Reset", + "Display": "Display", + "Application changed\\n\\n": "Application changed\\n\\n", + "The running application changed\\n\\n": "The running application changed\\n\\n", + "while editing was going on.": "while editing was going on.", + "Board": "Board", + "%u.%u%u mV": "%u.%u%u mV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "Could not connect to hoc-clk sysmodule.\\n\\n", + "Please make sure everything is\\n\\n": "Please make sure everything is\\n\\n", + "correctly installed and enabled.": "correctly installed and enabled.", + "Fatal error": "Fatal error", + "Temporary Overrides ": "Temporary Overrides ", "Sleep Mode": "Sleep Mode", "Stock": "Stock", "Dev OC": "Dev OC", @@ -81,52 +39,103 @@ "Safe Max": "Safe Max", "Unsafe Max": "Unsafe Max", "Absolute Max": "Absolute Max", - "Boost Mode & Safe Max": "Boost Mode & Safe Max", + "Handheld Safe Max": "Handheld Safe Max", + "Enable": "Enable", + "Edit App Profile": "Edit App Profile", + "Edit Global Profile": "Edit Global Profile", + "Temporary Overrides": "Temporary Overrides", + "Settings": "Settings", + "About": "About", + "Compiling with minimal features": "Compiling with minimal features", + "General Settings": "General Settings", + "Governor Settings": "Governor Settings", + "Safety Settings": "Safety Settings", + "Save KIP Settings": "Save KIP Settings", + "RAM Settings": "RAM Settings", + "CPU Settings": "CPU Settings", + "GPU Settings": "GPU Settings", + "Display Settings": "Display Settings", + "Experimental": "Experimental", + "GPU Scheduling Override Method": "GPU Scheduling Override Method", + "can be dangerous and may cause": "can be dangerous and may cause", + "damage to your battery or charger!": "damage to your battery or charger!", + "Charge Current Override": "Charge Current Override", + "RAM Voltage Display Mode": "RAM Voltage Display Mode", + "Polling Interval": "Polling Interval", + "CPU Governor Minimum Frequency": "CPU Governor Minimum Frequency", + "refresh rates may cause stress": "refresh rates may cause stress", + "or damage to your display! ": "or damage to your display! ", + "Proceed at your own risk!": "Proceed at your own risk!", + "Max Handheld Display": "Max Handheld Display", + "Display Clock": "Display Clock", "Official Rating": "Official Rating", + "TDP Threshold": "TDP Threshold", + "Power": "Power", + "Thermal Throttle Limit": "Thermal Throttle Limit", + "HP Mode": "HP Mode", "Default (Mariko)": "Default (Mariko)", "Default (Erista)": "Default (Erista)", "Rating": "Rating", "Safe Max (Mariko)": "Safe Max (Mariko)", "Safe Max (Erista)": "Safe Max (Erista)", - "Default": "Default", - "1581MHz Tbreak": "1581MHz Tbreak", - "1683MHz Tbreak": "1683MHz Tbreak", + "RAM VDD2 Voltage": "RAM VDD2 Voltage", + "Voltage": "Voltage", + "RAM VDDQ Voltage": "RAM VDDQ Voltage", + "RAM Frequency Editor": "RAM Frequency Editor", + "JEDEC.": "JEDEC.", + "High speedo needed!": "High speedo needed!", + "3333MHz (Needs extreme Speedo/PLL)": "3333MHz (Needs extreme Speedo/PLL)", + "3366MHz (Needs extreme Speedo/PLL)": "3366MHz (Needs extreme Speedo/PLL)", + "3400MHz (Needs extreme Speedo/PLL)": "3400MHz (Needs extreme Speedo/PLL)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (Needs ridiculous Speedo/PLL)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz (Needs ridiculous Speedo/PLL)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500MHz (Needs ridiculous Speedo/PLL)", + "Ram Max Clock": "Ram Max Clock", + "RAM Latency Editor": "RAM Latency Editor", + "RAM Timing Reductions": "RAM Timing Reductions", + "Memory Timings": "Memory Timings", + "Advanced": "Advanced", + "t6 tRTW Fine Tune": "t6 tRTW Fine Tune", + "tRTW Fine Tune": "tRTW Fine Tune", + "t7 tWTR Fine Tune": "t7 tWTR Fine Tune", + "tWTR Fine Tune": "tWTR Fine Tune", + "Memory Latencies": "Memory Latencies", + "Read Latency": "Read Latency", + "Write Latency": "Write Latency", + "CPU Boost Clock": "CPU Boost Clock", + "CPU UV": "CPU UV", + "CPU Unlock": "CPU Unlock", + "CPU VMIN": "CPU VMIN", + "CPU Max Voltage": "CPU Max Voltage", + "CPU Max Clock": "CPU Max Clock", "Extreme UV Table": "Extreme UV Table", - "No UV": "No UV", + "CPU UV Table": "CPU UV Table", + "CPU Low UV": "CPU Low UV", + "CPU High UV": "CPU High UV", + "CPU Low VMIN": "CPU Low VMIN", + "CPU High VMIN": "CPU High VMIN", + "No Undervolt": "No Undervolt", "SLT Table": "SLT Table", "HiOPT Table": "HiOPT Table", - "Power": "Power", - "Temp": "Temp", - "Voltage": "Voltage", - "TDP Threshold": "TDP Threshold", - "Lite TDP Threshold": "Lite TDP Threshold", - "Thermal Throttle Limit": "Thermal Throttle Limit", - "1600BL": "1600BL", - "1866BL": "1866BL", - "2133BL": "2133BL", - "BAT": "BAT", - "FAN": "FAN", - "DISP": "DISP", - "Board": "Board", - "Skin": "Skin", - "Now": "Now", - "Avg": "Avg", - "App ID": "App ID", - "Profile": "Profile", - "CPU": "CPU", - "GPU": "GPU", - "Memory": "Memory", - "Display": "Display", - "Governor": "Governor", - "SOC": "SOC", - "PCB": "PCB", - "PMIC": "PMIC", - "Docked": "Docked", - "Handheld": "Handheld", - "Charging": "Charging", - "USB Charger": "USB Charger", - "PD Charger": "PD Charger", - "VDD2": "VDD2", - "VDDQ": "VDDQ", - "GPU DVFS": "GPU DVFS" -} \ No newline at end of file + "GPU Undervolt Table": "GPU Undervolt Table", + "GPU Minimum Voltage": "GPU Minimum Voltage", + "Calculate GPU Vmin": "Calculate GPU Vmin", + "GPU VMIN": "GPU VMIN", + "GPU Maximum Voltage": "GPU Maximum Voltage", + "GPU Voltage Offset": "GPU Voltage Offset", + "Do not override": "Do not override", + "Enabled (Default)": "Enabled (Default)", + "96.6% limit": "96.6% limit", + "99.7% limit": "99.7% limit", + "GPU Scheduling Override": "GPU Scheduling Override", + "Official Service": "Official Service", + "GPU DVFS Mode": "GPU DVFS Mode", + "GPU DVFS Offset": "GPU DVFS Offset", + "GPU Voltage Table": "GPU Voltage Table", + "GPU Custom Table (mV)": "GPU Custom Table (mV)", + "1075MHz without UV, 1152MHz on SLT": "1075MHz without UV, 1152MHz on SLT", + "or 1228MHz on HiOPT can cause ": "or 1228MHz on HiOPT can cause ", + "permanent damage to your Switch!": "permanent damage to your Switch!", + "921MHz without UV and 960MHz on": "921MHz without UV and 960MHz on", + "SLT or HiOPT can cause ": "SLT or HiOPT can cause " +} diff --git a/dist/config/horizon-oc/lang/lang/es.json b/dist/config/horizon-oc/lang/lang/es.json index b617839f..546b4429 100644 --- a/dist/config/horizon-oc/lang/lang/es.json +++ b/dist/config/horizon-oc/lang/lang/es.json @@ -1,35 +1,141 @@ { - "Edit App Profile": "Editar perfil de la app", - "Advanced": "Avanzado", + "Information": "Información", + "IDDQ:": "IDDQ:", + "Module: ": "Módulo:", + "sys-dock status:": "estado del sys-dock:", + "SaltyNX status:": "Estado de SaltyNX:", + "RR Display status:": "Estado de visualización RR:", + "Wafer Position:": "Posición de la oblea:", + "Credits": "Créditos", + "Developers": "Desarrolladores", + "Contributors": "Colaboradores", + "Testers": "Probadores", + "Special Thanks": "agradecimiento especial", + "Unknown": "Desconocido", + "Installed": "Instalado", + "Not Installed": "No instalado", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "LA LICENCIA DE CERVEZA", + "Default": "Predeterminado", + "Do Not Override": "No anular", + "Disabled": "Discapacitado", + "Enabled": "Habilitado", + " \\ue0e3 Reset": "\\ue0e3 Restablecer", + "Display": "Pantalla", + "Application changed\\n\\n": "Aplicación modificada\\n\\n", + "The running application changed\\n\\n": "La aplicación en ejecución cambió\\n\\n", + "while editing was going on.": "mientras se realizaba la edición.", + "Board": "tablero", + "%u.%u%u mV": "%u.%u%u mV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "No se pudo conectar al módulo del sistema hoc-clk.\\n\\n", + "Please make sure everything is\\n\\n": "Por favor asegúrese de que todo esté\\n\\n", + "correctly installed and enabled.": "correctamente instalado y habilitado.", + "Fatal error": "error fatal", + "Temporary Overrides ": "Anulaciones temporales", + "Sleep Mode": "Modo de suspensión", + "Stock": "Valores", + "Dev OC": "Desarrollador OC", + "Boost Mode": "Modo de impulso", + "Safe Max": "Máximo seguro", + "Unsafe Max": "Máximo inseguro", + "Absolute Max": "Máximo absoluto", + "Handheld Safe Max": "Caja fuerte de mano máx.", + "Enable": "Habilitar", + "Edit App Profile": "Editar perfil de aplicación", "Edit Global Profile": "Editar perfil global", "Temporary Overrides": "Anulaciones temporales", - "Temporary Overrides   Reset": "Anulaciones temporales   Reiniciar", "Settings": "Configuración", - "Enable": "Habilitar", - "Uncapped Clocks": "Relojes sin límite", - "Override Boost Mode": "Sobrescribir modo Boost", - "Auto CPU Boost": "Impulso automático de CPU", - "Sync ReverseNX": "Sincronizar con ReverseNX", - "GPU DVFS": "GPU DVFS", - "Off": "Apagado", - "Official Service Method": "Método de servicio oficial", - "Hijack Method": "Método de secuestro", - "App ID": "ID App", - "EOS mode": "Modo EOS", - "Skin": "Tema", - "Now": "Ahora", - "Avg": "Med", - "Docked": "Conectado al dock", - "Handheld": "Portátil", - "Charging": "Cargando", - "PD Charger": "Cargador oficial", - "USB Charger": "Cargador USB", - "Docked   Reset": "Conectado al dock   Reiniciar", - "Handheld   Reset": "Portátil   Reiniciar", - "Charging   Reset": "Cargando   Reiniciar", - "PD Charger   Reset": "Cargador oficial   Reiniciar", - "USB Charger   Reset": "Cargador USB   Reiniciar", - "Memory": "Memoria", - "Default": "No sobrescribir", - "Profile": "Perfil" + "About": "Acerca de", + "Compiling with minimal features": "Compilando con características mínimas", + "General Settings": "Configuraciones generales", + "Governor Settings": "Configuración del gobernador", + "Safety Settings": "Configuraciones de seguridad", + "Save KIP Settings": "Guardar configuración de KIP", + "RAM Settings": "Configuración de RAM", + "CPU Settings": "Configuración de la CPU", + "GPU Settings": "Configuración de GPU", + "Display Settings": "Configuración de pantalla", + "Experimental": "Experimental", + "GPU Scheduling Override Method": "Método de anulación de programación de GPU", + "can be dangerous and may cause": "puede ser peligroso y puede causar", + "damage to your battery or charger!": "¡Daños a su batería o cargador!", + "Charge Current Override": "Anulación de corriente de carga", + "RAM Voltage Display Mode": "Modo de visualización de voltaje de RAM", + "Polling Interval": "Intervalo de sondeo", + "CPU Governor Minimum Frequency": "Frecuencia mínima del gobernador de CPU", + "refresh rates may cause stress": "Las frecuencias de actualización pueden causar estrés.", + "or damage to your display! ": "o daños a su pantalla!", + "Proceed at your own risk!": "¡Continúe bajo su propio riesgo!", + "Max Handheld Display": "Pantalla portátil máxima", + "Display Clock": "Reloj de pantalla", + "Official Rating": "Calificación oficial", + "TDP Threshold": "Umbral de TDP", + "Power": "poder", + "Thermal Throttle Limit": "Límite del acelerador térmico", + "HP Mode": "Modo HP", + "Default (Mariko)": "Predeterminado (Mariko)", + "Default (Erista)": "Predeterminado (Erista)", + "Rating": "Calificación", + "Safe Max (Mariko)": "Max seguro (Mariko)", + "Safe Max (Erista)": "Safe Max (Erista)", + "RAM VDD2 Voltage": "Voltaje RAM VDD2", + "Voltage": "voltaje", + "RAM VDDQ Voltage": "Voltaje RAM VDDQ", + "RAM Frequency Editor": "Editor de frecuencia RAM", + "JEDEC.": "JEDEC.", + "High speedo needed!": "¡Se necesita alta velocidad!", + "3333MHz (Needs extreme Speedo/PLL)": "3333MHz (Necesita Speedo/PLL extremo)", + "3366MHz (Needs extreme Speedo/PLL)": "3366MHz (Necesita Speedo/PLL extremo)", + "3400MHz (Needs extreme Speedo/PLL)": "3400MHz (Necesita Speedo/PLL extremo)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (Necesita Speedo/PLL ridículo)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz (Necesita Speedo/PLL ridículo)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500MHz (Necesita Speedo/PLL ridículo)", + "Ram Max Clock": "Ram Max Reloj", + "RAM Latency Editor": "Editor de latencia de RAM", + "RAM Timing Reductions": "Reducciones de tiempo de RAM", + "Memory Timings": "Tiempos de memoria", + "Advanced": "Avanzado", + "t6 tRTW Fine Tune": "t6 tRTW Ajuste fino", + "tRTW Fine Tune": "Ajuste fino tRTW", + "t7 tWTR Fine Tune": "t7 tWTR Ajuste fino", + "tWTR Fine Tune": "Ajuste fino de tWTR", + "Memory Latencies": "Latencias de la memoria", + "Read Latency": "Leer latencia", + "Write Latency": "Latencia de escritura", + "CPU Boost Clock": "Reloj de aumento de CPU", + "CPU UV": "procesador ultravioleta", + "CPU Unlock": "Desbloqueo de CPU", + "CPU VMIN": "CPU VMIN", + "CPU Max Voltage": "Voltaje máximo de la CPU", + "CPU Max Clock": "Reloj máximo de CPU", + "Extreme UV Table": "Mesa UV extrema", + "CPU UV Table": "Tabla UV de CPU", + "CPU Low UV": "CPU baja radiación ultravioleta", + "CPU High UV": "CPU alta UV", + "CPU Low VMIN": "VMIN bajo de CPU", + "CPU High VMIN": "VMIN alto de CPU", + "No Undervolt": "Sin subvoltaje", + "SLT Table": "Mesa TR", + "HiOPT Table": "Tabla HiOPT", + "GPU Undervolt Table": "Tabla de subvoltaje de GPU", + "GPU Minimum Voltage": "Voltaje mínimo de GPU", + "Calculate GPU Vmin": "Calcular GPU Vmin", + "GPU VMIN": "GPU VMIN", + "GPU Maximum Voltage": "Voltaje máximo de GPU", + "GPU Voltage Offset": "Compensación de voltaje de GPU", + "Do not override": "no anular", + "Enabled (Default)": "Habilitado (predeterminado)", + "96.6% limit": "límite del 96,6%", + "99.7% limit": "límite del 99,7%", + "GPU Scheduling Override": "Anulación de programación de GPU", + "Official Service": "Servicio Oficial", + "GPU DVFS Mode": "Modo GPU DVFS", + "GPU DVFS Offset": "Compensación DVFS de GPU", + "GPU Voltage Table": "Tabla de voltaje de GPU", + "GPU Custom Table (mV)": "Tabla personalizada de GPU (mV)", + "1075MHz without UV, 1152MHz on SLT": "1075MHz sin UV, 1152MHz en SLT", + "or 1228MHz on HiOPT can cause ": "o 1228MHz en HiOPT pueden causar", + "permanent damage to your Switch!": "¡Daño permanente a tu Switch!", + "921MHz without UV and 960MHz on": "921MHz sin UV y 960MHz encendido", + "SLT or HiOPT can cause ": "SLT o HiOPT pueden causar" } diff --git a/dist/config/horizon-oc/lang/lang/fr.json b/dist/config/horizon-oc/lang/lang/fr.json new file mode 100644 index 00000000..2494473a --- /dev/null +++ b/dist/config/horizon-oc/lang/lang/fr.json @@ -0,0 +1,141 @@ +{ + "Information": "Informations", + "IDDQ:": "IDDQ :", + "Module: ": "Module :", + "sys-dock status:": "état du dock système :", + "SaltyNX status:": "Statut SaltyNX :", + "RR Display status:": "Etat d'affichage RR :", + "Wafer Position:": "Position de la plaquette :", + "Credits": "Crédits", + "Developers": "Développeurs", + "Contributors": "Contributeurs", + "Testers": "Testeurs", + "Special Thanks": "Remerciements spéciaux", + "Unknown": "Inconnu", + "Installed": "Installé", + "Not Installed": "Non installé", + "X: %u Y: %u": "X : %u Y : %u", + "THE BEER-WARE LICENSE": "LA LICENCE DE LA BIÈRE", + "Default": "Par défaut", + "Do Not Override": "Ne pas remplacer", + "Disabled": "Désactivé", + "Enabled": "Activé", + " \\ue0e3 Reset": "\\ue0e3 Réinitialiser", + "Display": "Affichage", + "Application changed\\n\\n": "Application modifiée\\n\\n", + "The running application changed\\n\\n": "L'application en cours d'exécution a changé\\n\\n", + "while editing was going on.": "pendant le montage.", + "Board": "Conseil", + "%u.%u%u mV": "%u.%u%u mV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "Impossible de se connecter au module système hoc-clk.\\n\\n", + "Please make sure everything is\\n\\n": "Veuillez vous assurer que tout est\\n\\n", + "correctly installed and enabled.": "correctement installé et activé.", + "Fatal error": "Erreur fatale", + "Temporary Overrides ": "Remplacements temporaires", + "Sleep Mode": "Mode veille", + "Stock": "Actions", + "Dev OC": "Développeur OC", + "Boost Mode": "Mode Boost", + "Safe Max": "Coffre-fort maximum", + "Unsafe Max": "Dangereux Max", + "Absolute Max": "Max absolu", + "Handheld Safe Max": "Coffre-fort portatif Max", + "Enable": "Activer", + "Edit App Profile": "Modifier le profil de l'application", + "Edit Global Profile": "Modifier le profil global", + "Temporary Overrides": "Remplacements temporaires", + "Settings": "Paramètres", + "About": "À propos", + "Compiling with minimal features": "Compilation avec des fonctionnalités minimales", + "General Settings": "Paramètres généraux", + "Governor Settings": "Paramètres du gouverneur", + "Safety Settings": "Paramètres de sécurité", + "Save KIP Settings": "Enregistrer les paramètres KIP", + "RAM Settings": "Paramètres de la RAM", + "CPU Settings": "Paramètres du processeur", + "GPU Settings": "Paramètres du processeur graphique", + "Display Settings": "Paramètres d'affichage", + "Experimental": "Expérimental", + "GPU Scheduling Override Method": "Méthode de remplacement de la planification GPU", + "can be dangerous and may cause": "peut être dangereux et provoquer", + "damage to your battery or charger!": "dommages à votre batterie ou à votre chargeur !", + "Charge Current Override": "Remplacement du courant de charge", + "RAM Voltage Display Mode": "Mode d'affichage de la tension de la RAM", + "Polling Interval": "Intervalle d'interrogation", + "CPU Governor Minimum Frequency": "Fréquence minimale du gouverneur du processeur", + "refresh rates may cause stress": "les taux de rafraîchissement peuvent causer du stress", + "or damage to your display! ": "ou endommager votre écran !", + "Proceed at your own risk!": "Procédez à vos propres risques !", + "Max Handheld Display": "Affichage portable maximum", + "Display Clock": "Affichage de l'horloge", + "Official Rating": "Classement officiel", + "TDP Threshold": "Seuil TDP", + "Power": "Puissance", + "Thermal Throttle Limit": "Limite d'accélérateur thermique", + "HP Mode": "Mode HP", + "Default (Mariko)": "Par défaut (Mariko)", + "Default (Erista)": "Par défaut (Erista)", + "Rating": "Note", + "Safe Max (Mariko)": "Coffre-fort Max (Mariko)", + "Safe Max (Erista)": "Coffre-fort Max (Erista)", + "RAM VDD2 Voltage": "Tension de la RAM VDD2", + "Voltage": "Tension", + "RAM VDDQ Voltage": "Tension VDDQ de la RAM", + "RAM Frequency Editor": "Éditeur de fréquence RAM", + "JEDEC.": "JEDEC.", + "High speedo needed!": "Besoin d'un speedo haut !", + "3333MHz (Needs extreme Speedo/PLL)": "3333 MHz (nécessite un Speedo/PLL extrême)", + "3366MHz (Needs extreme Speedo/PLL)": "3366 MHz (nécessite un Speedo/PLL extrême)", + "3400MHz (Needs extreme Speedo/PLL)": "3400 MHz (nécessite un Speedo/PLL extrême)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433 MHz (nécessite un Speedo/PLL ridicule)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466 MHz (nécessite un Speedo/PLL ridicule)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500 MHz (nécessite un Speedo/PLL ridicule)", + "Ram Max Clock": "Ram Max Horloge", + "RAM Latency Editor": "Éditeur de latence RAM", + "RAM Timing Reductions": "Réductions de synchronisation de la RAM", + "Memory Timings": "Horaires de mémoire", + "Advanced": "Avancé", + "t6 tRTW Fine Tune": "t6 tRTW réglage fin", + "tRTW Fine Tune": "tRTW Réglage fin", + "t7 tWTR Fine Tune": "t7 tWTR réglage fin", + "tWTR Fine Tune": "Réglage fin du tWTR", + "Memory Latencies": "Latences de mémoire", + "Read Latency": "Latence de lecture", + "Write Latency": "Latence d'écriture", + "CPU Boost Clock": "Horloge d'augmentation du processeur", + "CPU UV": "UV du processeur", + "CPU Unlock": "Déverrouillage du processeur", + "CPU VMIN": "CPU VMIN", + "CPU Max Voltage": "Tension maximale du processeur", + "CPU Max Clock": "Horloge maximale du processeur", + "Extreme UV Table": "Table UV Extrême", + "CPU UV Table": "Tableau UV du processeur", + "CPU Low UV": "CPU faible UV", + "CPU High UV": "CPU UV élevé", + "CPU Low VMIN": "CPU faible VMIN", + "CPU High VMIN": "Processeur VMIN élevé", + "No Undervolt": "Pas de sous-tension", + "SLT Table": "Tableau SLT", + "HiOPT Table": "Tableau HiOPT", + "GPU Undervolt Table": "Tableau de sous-tension GPU", + "GPU Minimum Voltage": "Tension minimale du GPU", + "Calculate GPU Vmin": "Calculer la Vmin du GPU", + "GPU VMIN": "GPU VMIN", + "GPU Maximum Voltage": "Tension maximale du GPU", + "GPU Voltage Offset": "Décalage de tension du GPU", + "Do not override": "Ne remplacez pas", + "Enabled (Default)": "Activé (par défaut)", + "96.6% limit": "Limite de 96,6 %", + "99.7% limit": "Limite de 99,7 %", + "GPU Scheduling Override": "Remplacement de la planification GPU", + "Official Service": "Service officiel", + "GPU DVFS Mode": "Mode GPU DVFS", + "GPU DVFS Offset": "Décalage GPU DVFS", + "GPU Voltage Table": "Tableau de tension du GPU", + "GPU Custom Table (mV)": "Tableau personnalisé GPU (mV)", + "1075MHz without UV, 1152MHz on SLT": "1075 MHz sans UV, 1152 MHz sur SLT", + "or 1228MHz on HiOPT can cause ": "ou 1228 MHz sur HiOPT peut provoquer", + "permanent damage to your Switch!": "dommages permanents à votre Switch !", + "921MHz without UV and 960MHz on": "921 MHz sans UV et 960 MHz activé", + "SLT or HiOPT can cause ": "SLT ou HiOPT peuvent provoquer" +} diff --git a/dist/config/horizon-oc/lang/lang/it.json b/dist/config/horizon-oc/lang/lang/it.json index 22a4cf70..d7056f36 100644 --- a/dist/config/horizon-oc/lang/lang/it.json +++ b/dist/config/horizon-oc/lang/lang/it.json @@ -1,132 +1,141 @@ { - "Information about Translation": "This is a translation made by Samybigio2011. If you find any errors, please report them on GitHub, or feel free to contribute!", - "Horizon OC Zeus": "Horizon OC Zeus", - "Edit App Profile": "Profilo App", - "Advanced": "Avanzate", - "Edit Global Profile": "Profilo Globale", - "Temporary Overrides": "Override Temporaneo", - "Temporary Overrides Reset": "Temporary Overrides Reset", - "Settings": "Impostazioni", "Information": "Informazioni", - "Enable": "Abilita", - "Uncapped Clocks": "Sblocca Clock", - "Override Boost Mode": "Sovrascrivi Boost Mode", - "CPU Max Display Clock": "Massimo Clock CPU mostrato", - "Thermal Throttle": "Rallentamento Termico", - "Thermal Throttle Threshold": "Soglia Rallentamento Termico", - "Handheld TDP": "TPD Handheld", - "Handheld TDP Limit": "Limite TDP Handheld", - "Lite TDP Limit": "Limite TDP Lite", - "Enforce Board Limit": "Forza Limite di Potenza", - "Battery Charge Current": "Corrente di Ricarica", - "Display Refresh Rate Changing": "Cambio di Frequenza Display", - "Fix CPU Volt Bug": "Risolvi Bug CPU", - "[cfg] no enum format string": "[cfg] no enum format string", - "KIP": "KIP", - "Save KIP Settings": "Salva Impotazioni KIP", - "RAM Settings": "Impostazioni RAM", - "CPU Settings": "Impostazioni CPU", - "GPU Settings": "Impostazioni GPU", - "Experimental": "Esperimentale", - "Charge Current Override": "Sovrascrivi Corrente di Ricarica", + "IDDQ:": "IDDQ:", + "Module: ": "Modulo:", + "sys-dock status:": "stato del dock di sistema:", + "SaltyNX status:": "Stato di SaltyNX:", + "RR Display status:": "Stato di visualizzazione RR:", + "Wafer Position:": "Posizione del wafer:", + "Credits": "Crediti", + "Developers": "Sviluppatori", + "Contributors": "Collaboratori", + "Testers": "Tester", + "Special Thanks": "Un ringraziamento speciale", + "Unknown": "Sconosciuto", + "Installed": "Installato", + "Not Installed": "Non installato", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "LA LICENZA PER GLI ARTICOLI DI BIRRA", + "Default": "Predefinito", + "Do Not Override": "Non sovrascrivere", "Disabled": "Disabilitato", - "HP Mode": "Modalità HP", - "EMC Max Clock": "Clock EMC Massimo", - "EMC VDD2 Voltage": "Voltaggio VDD2 EMC", - "EMC VDDQ Voltage": "Voltaggio VDDQ EMC", - "DVB Shift": "Shift DVB", - "Memory Timings": "Timing Memoria", - "Memory Latencies": "Latency Memoria", - "t1 tRCD": "t1 tRCD", - "t2 tRP": "t2 tRP", - "t3 tRAS": "t3 tRAS", - "t4 tRRD": "t4 tRRD", - "t5 tRFC": "t5 tRFC", - "t6 tRTW": "t6 tRTW", - "t7 tWTR": "t7 tWTR", - "t8 tREFI": "t8 tREFI", - "Update RAM Timings": "Aggiorna Timing RAM", - "\uE150 This feature is EXPERIMENTAL": "\uE150 Questa funzione è ESPERIMENRALE!", - "and should only be used for testing!": "e dovrebbe essere usata solo per testare!", - "Read Latency": "Latency Lettura", - "Write Latency": "Latency Scrittura", - "CPU UV": "UV CPU", - "CPU Unlock": "Sblocco CPU", - "CPU VMIN": "VMIN CPU", - "CPU Max Voltage": "Voltaggio Massimo CPU", - "CPU UV Table": "Tavola UV CPU", - "CPU Low UV": "UV Basso CPU", - "CPU High UV": "UV Alto CPU", - "CPU Max Clock": "Clock Massimo CPU", - "CPU Low VMIN": "VMIN Basso CPU", - "CPU High VMIN": "VMIN Alto CPU", - "GPU Undervolt Table": "Tavola Undervolt GPU", - "Calculate GPU Vmin": "Calcola VMIN GPU", - "GPU VMIN": "VMIN GPU", - "GPU VMAX": "VMAX GPU", - "GPU Volt Offset": "Offset Voltaggio GPU", - "GPU Custom Table": "Tavola GPU Custom", - "GPU Custom Table (mV)": "Tavola GPU Custom (mV)", - "\uE150 Setting GPU Clocks past": "\uE150 Impostare Clock GPU oltre", - "1075MHz without UV, 1152MHz on SLT or ": "1075MHz senza UV, 1152MHz su SLT o ", - "1228MHz on HiOPT can cause ": "1228MHz su HiOPT può causare ", - "permanent damage to your Switch!": "danni permanenti alla tua console!", - "Proceed at your own risk!": "Procedi al tuo rischio!", - "921MHz without UV and 960MHz on": "921MHz senza UV e 960MHz su", - "SLT or HiOPT can cause ": "SLT o HiOPT può causare ", - "Auto": "Auto", - "Sleep Mode": "Modalità Sleep", - "Stock": "Stock", - "Dev OC": "OC Sviluppo", - "Boost Mode": "Modalità Boost", - "Safe Max": "Massimo Sicuro", - "Unsafe Max": "Massimo Insicuro", - "Absolute Max": "Massimo Assoluto", - "Boost Mode & Safe Max": "Modalità Boost e Massimo Sicuro", - "Official Rating": "Rating Ufficiale", - "Default (Mariko)": "Default (Mariko)", - "Default (Erista)": "Default (Erista)", - "Rating": "Rating", - "Safe Max (Mariko)": "Max Sicuro (Mariko)", - "Safe Max (Erista)": "Max Sicuro (Erista)", - "Default": "Default", - "1581MHz Tbreak": "Tbreak 1581MHz", - "1683MHz Tbreak": "Tbreak 1683MHz", - "Extreme UV Table": "Tavola UV Estremo", - "No UV": "No UV", - "SLT Table": "Tavola SLT", - "HiOPT Table": "Tavola HiOPT", - "Power": "Potenza", - "Temp": "Temperatura", - "Voltage": "Voltaggio", + "Enabled": "Abilitato", + " \\ue0e3 Reset": "\\ue0e3 Ripristina", + "Display": "Visualizzazione", + "Application changed\\n\\n": "Applicazione modificata\\n\\n", + "The running application changed\\n\\n": "L'applicazione in esecuzione è cambiata\\n\\n", + "while editing was going on.": "mentre era in corso la modifica.", + "Board": "Consiglio", + "%u.%u%u mV": "%u.%u%u mV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "Impossibile connettersi al modulo di sistema hoc-clk.\\n\\n", + "Please make sure everything is\\n\\n": "Assicurati che tutto sia\\n\\n", + "correctly installed and enabled.": "correttamente installato e abilitato.", + "Fatal error": "Errore fatale", + "Temporary Overrides ": "Sostituzioni temporanee", + "Sleep Mode": "Modalità di sospensione", + "Stock": "Magazzino", + "Dev OC": "OC di sviluppo", + "Boost Mode": "Modalità potenziamento", + "Safe Max": "Sicuro massimo", + "Unsafe Max": "Non sicuro Max", + "Absolute Max": "Massimo assoluto", + "Handheld Safe Max": "Cassaforte portatile max", + "Enable": "Abilita", + "Edit App Profile": "Modifica profilo dell'app", + "Edit Global Profile": "Modifica profilo globale", + "Temporary Overrides": "Sostituzioni temporanee", + "Settings": "Impostazioni", + "About": "Circa", + "Compiling with minimal features": "Compilazione con funzionalità minime", + "General Settings": "Impostazioni generali", + "Governor Settings": "Impostazioni del governatore", + "Safety Settings": "Impostazioni di sicurezza", + "Save KIP Settings": "Salva le impostazioni KIP", + "RAM Settings": "Impostazioni della RAM", + "CPU Settings": "Impostazioni della CPU", + "GPU Settings": "Impostazioni della GPU", + "Display Settings": "Impostazioni di visualizzazione", + "Experimental": "Sperimentale", + "GPU Scheduling Override Method": "Metodo di override della pianificazione GPU", + "can be dangerous and may cause": "può essere pericoloso e può causare", + "damage to your battery or charger!": "danni alla batteria o al caricabatterie!", + "Charge Current Override": "Override della corrente di carica", + "RAM Voltage Display Mode": "Modalità di visualizzazione della tensione RAM", + "Polling Interval": "Intervallo di polling", + "CPU Governor Minimum Frequency": "Frequenza minima del governatore della CPU", + "refresh rates may cause stress": "le frequenze di aggiornamento possono causare stress", + "or damage to your display! ": "o danni al display!", + "Proceed at your own risk!": "Procedi a tuo rischio e pericolo!", + "Max Handheld Display": "Display portatile massimo", + "Display Clock": "Visualizza orologio", + "Official Rating": "Valutazione ufficiale", "TDP Threshold": "Soglia TDP", - "Lite TDP Threshold": "Soglia TDP Lite", - "Thermal Throttle Limit": "Limite Rallentamento Termico", - "1600BL": "BL1600", - "1866BL": "BL1866", - "2133BL": "BL2133", - "BAT": "BAT", - "FAN": "FAN", - "DISP": "DISP", - "Board": "Scheda", - "Skin": "Skin", - "Now": "Ora", - "Avg": "Med", - "App ID": "ID App", - "Profile": "Profilo", - "CPU": "CPU", - "GPU": "GPU", - "Memory": "Memoria", - "Display": "Display", - "Governor": "Governor", - "SOC": "SOC", - "PCB": "PCB", - "PMIC": "PMIC", - "Docked": "Dock", - "Handheld": "Handheld", - "Charging": "In Carica", - "USB Charger": "Caricatore USB", - "PD Charger": "Caricatore PD", - "VDD2": "VDD2", - "VDDQ": "VDDQ" -} \ No newline at end of file + "Power": "Potenza", + "Thermal Throttle Limit": "Limite della valvola termica", + "HP Mode": "Modalità HP", + "Default (Mariko)": "Predefinito (Mariko)", + "Default (Erista)": "Predefinito (Erista)", + "Rating": "Valutazione", + "Safe Max (Mariko)": "Safe Max (Mariko)", + "Safe Max (Erista)": "Safe Max (Erista)", + "RAM VDD2 Voltage": "Tensione RAM VDD2", + "Voltage": "Voltaggio", + "RAM VDDQ Voltage": "Voltaggio VDDQ della RAM", + "RAM Frequency Editor": "Editor della frequenza RAM", + "JEDEC.": "JEDEC.", + "High speedo needed!": "È necessaria l'alta velocità!", + "3333MHz (Needs extreme Speedo/PLL)": "3333 MHz (richiede Speedo/PLL estremo)", + "3366MHz (Needs extreme Speedo/PLL)": "3366 MHz (richiede Speedo/PLL estremo)", + "3400MHz (Needs extreme Speedo/PLL)": "3400 MHz (richiede Speedo/PLL estremo)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433 MHz (è necessario un ridicolo Speedo/PLL)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466 MHz (è necessario un ridicolo Speedo/PLL)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500 MHz (è necessario un ridicolo Speedo/PLL)", + "Ram Max Clock": "Orologio Ram Max", + "RAM Latency Editor": "Editor della latenza RAM", + "RAM Timing Reductions": "Riduzioni della temporizzazione della RAM", + "Memory Timings": "Tempi di memoria", + "Advanced": "Avanzato", + "t6 tRTW Fine Tune": "t6 tRTW Sintonia fine", + "tRTW Fine Tune": "tRTW Sintonia fine", + "t7 tWTR Fine Tune": "t7 tWTR Sintonia fine", + "tWTR Fine Tune": "tWTR Sintonia fine", + "Memory Latencies": "Latenza della memoria", + "Read Latency": "Leggi latenza", + "Write Latency": "Scrivi latenza", + "CPU Boost Clock": "Orologio di potenziamento della CPU", + "CPU UV": "UV della CPU", + "CPU Unlock": "Sblocco della CPU", + "CPU VMIN": "CPUVMIN", + "CPU Max Voltage": "Voltaggio massimo della CPU", + "CPU Max Clock": "Orologio massimo della CPU", + "Extreme UV Table": "Tavolo UV estremo", + "CPU UV Table": "Tabella UV della CPU", + "CPU Low UV": "CPU con raggi UV bassi", + "CPU High UV": "UV elevato della CPU", + "CPU Low VMIN": "VMIN CPU basso", + "CPU High VMIN": "CPU alta VMIN", + "No Undervolt": "Nessuna sottotensione", + "SLT Table": "Tabella SLT", + "HiOPT Table": "Tabella HiOPT", + "GPU Undervolt Table": "Tabella di sottotensione GPU", + "GPU Minimum Voltage": "Voltaggio minimo della GPU", + "Calculate GPU Vmin": "Calcola GPU Vmin", + "GPU VMIN": "GPUVMIN", + "GPU Maximum Voltage": "Voltaggio massimo della GPU", + "GPU Voltage Offset": "Offset di tensione della GPU", + "Do not override": "Non sovrascrivere", + "Enabled (Default)": "Abilitato (impostazione predefinita)", + "96.6% limit": "Limite del 96,6%.", + "99.7% limit": "Limite del 99,7%.", + "GPU Scheduling Override": "Override della pianificazione GPU", + "Official Service": "Servizio ufficiale", + "GPU DVFS Mode": "Modalità DVFS GPU", + "GPU DVFS Offset": "Offset DVFS della GPU", + "GPU Voltage Table": "Tabella delle tensioni della GPU", + "GPU Custom Table (mV)": "Tabella personalizzata GPU (mV)", + "1075MHz without UV, 1152MHz on SLT": "1075 MHz senza UV, 1152 MHz su SLT", + "or 1228MHz on HiOPT can cause ": "o 1228 MHz su HiOPT possono causare", + "permanent damage to your Switch!": "danni permanenti al tuo Switch!", + "921MHz without UV and 960MHz on": "921 MHz senza UV e 960 MHz attivi", + "SLT or HiOPT can cause ": "SLT o HiOPT possono causare" +} diff --git a/dist/config/horizon-oc/lang/lang/ja.json b/dist/config/horizon-oc/lang/lang/ja.json new file mode 100644 index 00000000..fe415367 --- /dev/null +++ b/dist/config/horizon-oc/lang/lang/ja.json @@ -0,0 +1,141 @@ +{ + "Information": "情報", + "IDDQ:": "IDQ:", + "Module: ": "モジュール:", + "sys-dock status:": "システムドックのステータス:", + "SaltyNX status:": "SaltyNX ステータス:", + "RR Display status:": "RR 表示ステータス:", + "Wafer Position:": "ウェーハの位置:", + "Credits": "クレジット", + "Developers": "開発者", + "Contributors": "貢献者", + "Testers": "テスター", + "Special Thanks": "特別な感謝の気持ち", + "Unknown": "不明", + "Installed": "インストール済み", + "Not Installed": "インストールされていません", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "ビール製品ライセンス", + "Default": "デフォルト", + "Do Not Override": "上書きしないでください", + "Disabled": "障害者", + "Enabled": "有効", + " \\ue0e3 Reset": "\\ue0e3 リセット", + "Display": "ディスプレイ", + "Application changed\\n\\n": "アプリケーションが変更されました\\n\\n", + "The running application changed\\n\\n": "実行中のアプリケーションが変更されました\\n\\n", + "while editing was going on.": "編集を進めている最中でした。", + "Board": "理事会", + "%u.%u%u mV": "%u.%u%u mV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "hoc-clk sysmodule に接続できませんでした。\\n\\n", + "Please make sure everything is\\n\\n": "すべてが正しいことを確認してください\\n\\n", + "correctly installed and enabled.": "正しくインストールされ、有効になっています。", + "Fatal error": "致命的なエラー", + "Temporary Overrides ": "一時的なオーバーライド", + "Sleep Mode": "スリープモード", + "Stock": "在庫", + "Dev OC": "開発OC", + "Boost Mode": "ブーストモード", + "Safe Max": "セーフマックス", + "Unsafe Max": "危険なマックス", + "Absolute Max": "絶対最大値", + "Handheld Safe Max": "手持ち金庫マックス", + "Enable": "有効にする", + "Edit App Profile": "アプリプロファイルの編集", + "Edit Global Profile": "グローバルプロファイルの編集", + "Temporary Overrides": "一時的なオーバーライド", + "Settings": "設定", + "About": "について", + "Compiling with minimal features": "最小限の機能でコンパイルする", + "General Settings": "一般設定", + "Governor Settings": "ガバナーの設定", + "Safety Settings": "安全設定", + "Save KIP Settings": "KIP 設定の保存", + "RAM Settings": "RAM設定", + "CPU Settings": "CPUの設定", + "GPU Settings": "GPU設定", + "Display Settings": "表示設定", + "Experimental": "実験的", + "GPU Scheduling Override Method": "GPU スケジューリング オーバーライド メソッド", + "can be dangerous and may cause": "危険であり、原因となる可能性があります", + "damage to your battery or charger!": "バッテリーまたは充電器が損傷します。", + "Charge Current Override": "充電電流オーバーライド", + "RAM Voltage Display Mode": "RAM電圧表示モード", + "Polling Interval": "ポーリング間隔", + "CPU Governor Minimum Frequency": "CPU ガバナの最小周波数", + "refresh rates may cause stress": "リフレッシュレートがストレスを引き起こす可能性がある", + "or damage to your display! ": "ディスプレイに損傷を与えてしまいます。", + "Proceed at your own risk!": "自己責任で進めてください!", + "Max Handheld Display": "最大ハンドヘルドディスプレイ", + "Display Clock": "時計の表示", + "Official Rating": "公式評価", + "TDP Threshold": "TDP しきい値", + "Power": "パワー", + "Thermal Throttle Limit": "サーマルスロットル制限", + "HP Mode": "HPモード", + "Default (Mariko)": "デフォルト(マリコ)", + "Default (Erista)": "デフォルト(エリスタ)", + "Rating": "評価", + "Safe Max (Mariko)": "セーフマックス(マリコ)", + "Safe Max (Erista)": "セーフマックス(エリスタ)", + "RAM VDD2 Voltage": "RAM VDD2 電圧", + "Voltage": "電圧", + "RAM VDDQ Voltage": "RAM VDDQ 電圧", + "RAM Frequency Editor": "RAM周波数エディター", + "JEDEC.": "JEDEC。", + "High speedo needed!": "ハイスピードが必要です!", + "3333MHz (Needs extreme Speedo/PLL)": "3333MHz (エクストリーム Speedo/PLL が必要)", + "3366MHz (Needs extreme Speedo/PLL)": "3366MHz (エクストリーム Speedo/PLL が必要)", + "3400MHz (Needs extreme Speedo/PLL)": "3400MHz (エクストリーム Speedo/PLL が必要)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (とんでもない Speedo/PLL が必要)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz (とんでもない Speedo/PLL が必要)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500MHz (とんでもない Speedo/PLL が必要)", + "Ram Max Clock": "ラムマックスクロック", + "RAM Latency Editor": "RAM レイテンシ エディター", + "RAM Timing Reductions": "RAM タイミングの削減", + "Memory Timings": "メモリタイミング", + "Advanced": "上級者向け", + "t6 tRTW Fine Tune": "t6 tRTW 微調整", + "tRTW Fine Tune": "tRTW 微調整", + "t7 tWTR Fine Tune": "t7 tWTR ファインチューン", + "tWTR Fine Tune": "tWTR ファインチューン", + "Memory Latencies": "メモリレイテンシ", + "Read Latency": "読み取りレイテンシー", + "Write Latency": "書き込みレイテンシ", + "CPU Boost Clock": "CPUブーストクロック", + "CPU UV": "CPU UV", + "CPU Unlock": "CPUロック解除", + "CPU VMIN": "CPU VMIN", + "CPU Max Voltage": "CPU最大電圧", + "CPU Max Clock": "CPU最大クロック", + "Extreme UV Table": "エクストリーム UV テーブル", + "CPU UV Table": "CPU UV テーブル", + "CPU Low UV": "CPU 低 UV", + "CPU High UV": "CPU 高紫外線", + "CPU Low VMIN": "CPU 低 VMIN", + "CPU High VMIN": "CPU の高い VMIN", + "No Undervolt": "不足電圧なし", + "SLT Table": "SLTテーブル", + "HiOPT Table": "HiOPT テーブル", + "GPU Undervolt Table": "GPUアンダーボルトテーブル", + "GPU Minimum Voltage": "GPUの最小電圧", + "Calculate GPU Vmin": "GPU Vmin を計算する", + "GPU VMIN": "GPU VMIN", + "GPU Maximum Voltage": "GPU最大電圧", + "GPU Voltage Offset": "GPU電圧オフセット", + "Do not override": "上書きしないでください", + "Enabled (Default)": "有効 (デフォルト)", + "96.6% limit": "96.6%制限", + "99.7% limit": "99.7%制限", + "GPU Scheduling Override": "GPU スケジュールのオーバーライド", + "Official Service": "正式サービス", + "GPU DVFS Mode": "GPU DVFS モード", + "GPU DVFS Offset": "GPU DVFS オフセット", + "GPU Voltage Table": "GPU電圧テーブル", + "GPU Custom Table (mV)": "GPUカスタムテーブル(mV)", + "1075MHz without UV, 1152MHz on SLT": "UVなしで1075MHz、SLTで1152MHz", + "or 1228MHz on HiOPT can cause ": "HiOPT で 1228MHz を使用すると、次のような問題が発生する可能性があります。", + "permanent damage to your Switch!": "Switch に永久的なダメージを与えます!", + "921MHz without UV and 960MHz on": "921MHz(UVなし)、960MHz(UVあり)", + "SLT or HiOPT can cause ": "SLT または HiOPT が原因となる可能性があります" +} diff --git a/dist/config/horizon-oc/lang/lang/jp.json b/dist/config/horizon-oc/lang/lang/jp.json new file mode 100644 index 00000000..af92cbf7 --- /dev/null +++ b/dist/config/horizon-oc/lang/lang/jp.json @@ -0,0 +1,146 @@ +{ + "Information": "Information", + "IDDQ:": "IDDQ:", + "Module: ": "Module:", + "sys-dock status:": "sys-dock status:", + "SaltyNX status:": "SaltyNX status:", + "RR Display status:": "RR Display status:", + "Wafer Position:": "Wafer Position:", + "Credits": "Credits", + "Developers": "Developers", + "Contributors": "Contributors", + "Testers": "Testers", + "Special Thanks": "Special Thanks", + "Unknown": "Unknown", + "Installed": "Installed", + "Not Installed": "Not Installed", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "THE BEER-WARE LICENSE", + "Default": "Default", + "Do Not Override": "Do Not Override", + "Disabled": "Disabled", + "Enabled": "Enabled", + " \\ue0e3 Reset": "\\ue0e3 Reset", + "Display": "Display", + "Application changed\\n\\n": "Application changed\\n\\n", + "The running application changed\\n\\n": "The running application changed\\n\\n", + "while editing was going on.": "while editing was going on.", + "App ID": "App ID", + "Profile": "Profile", + "Board": "Board", + "USB Charger": "USB Charger", + "%u.%u%u mV": "%u.%u%u mV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "Could not connect to hoc-clk sysmodule.\\n\\n", + "Please make sure everything is\\n\\n": "Please make sure everything is\\n\\n", + "correctly installed and enabled.": "correctly installed and enabled.", + "Fatal error": "Fatal error", + "Temporary Overrides ": "Temporary Overrides", + "Sleep Mode": "Sleep Mode", + "Stock": "Stock", + "Dev OC": "Dev OC", + "Boost Mode": "Boost Mode", + "Safe Max": "Safe Max", + "Unsafe Max": "Unsafe Max", + "Absolute Max": "Absolute Max", + "Handheld": "Handheld", + "Handheld Safe Max": "Handheld Safe Max", + "Docked": "Docked", + "Enable": "Enable", + "Edit App Profile": "Edit App Profile", + "Edit Global Profile": "Edit Global Profile", + "Temporary Overrides": "Temporary Overrides", + "Settings": "Settings", + "About": "About", + "Compiling with minimal features": "Compiling with minimal features", + "General Settings": "General Settings", + "Governor Settings": "Governor Settings", + "Safety Settings": "Safety Settings", + "Save KIP Settings": "Save KIP Settings", + "RAM Settings": "RAM Settings", + "CPU Settings": "CPU Settings", + "GPU Settings": "GPU Settings", + "Display Settings": "Display Settings", + "Experimental": "Experimental", + "GPU Scheduling Override Method": "GPU Scheduling Override Method", + "can be dangerous and may cause": "can be dangerous and may cause", + "damage to your battery or charger!": "damage to your battery or charger!", + "Charge Current Override": "Charge Current Override", + "RAM Voltage Display Mode": "RAM Voltage Display Mode", + "Polling Interval": "Polling Interval", + "CPU Governor Minimum Frequency": "CPU Governor Minimum Frequency", + "refresh rates may cause stress": "refresh rates may cause stress", + "or damage to your display! ": "or damage to your display!", + "Proceed at your own risk!": "Proceed at your own risk!", + "Max Handheld Display": "Max Handheld Display", + "Display Clock": "Display Clock", + "Official Rating": "Official Rating", + "TDP Threshold": "TDP Threshold", + "Power": "Power", + "Thermal Throttle Limit": "Thermal Throttle Limit", + "HP Mode": "HP Mode", + "Default (Mariko)": "Default (Mariko)", + "Default (Erista)": "Default (Erista)", + "Rating": "Rating", + "Safe Max (Mariko)": "Safe Max (Mariko)", + "Safe Max (Erista)": "Safe Max (Erista)", + "RAM VDD2 Voltage": "RAM VDD2 Voltage", + "Voltage": "Voltage", + "RAM VDDQ Voltage": "RAM VDDQ Voltage", + "RAM Frequency Editor": "RAM Frequency Editor", + "JEDEC.": "JEDEC.", + "3333MHz (Needs extreme Speedo/PLL)": "3333MHz (Needs extreme Speedo/PLL)", + "3366MHz (Needs extreme Speedo/PLL)": "3366MHz (Needs extreme Speedo/PLL)", + "3400MHz (Needs extreme Speedo/PLL)": "3400MHz (Needs extreme Speedo/PLL)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (Needs ridiculous Speedo/PLL)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz (Needs ridiculous Speedo/PLL)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500MHz (Needs ridiculous Speedo/PLL)", + "Ram Max Clock": "Ram Max Clock", + "RAM Latency Editor": "RAM Latency Editor", + "RAM Timing Reductions": "RAM Timing Reductions", + "Memory Timings": "Memory Timings", + "tREFI": "tREFI", + "Advanced": "Advanced", + "t6 tRTW Fine Tune": "t6 tRTW Fine Tune", + "tRTW Fine Tune": "tRTW Fine Tune", + "t7 tWTR Fine Tune": "t7 tWTR Fine Tune", + "tWTR Fine Tune": "tWTR Fine Tune", + "Memory Latencies": "Memory Latencies", + "Read Latency": "Read Latency", + "Write Latency": "Write Latency", + "CPU Boost Clock": "CPU Boost Clock", + "CPU UV": "CPU UV", + "CPU Unlock": "CPU Unlock", + "CPU VMIN": "CPU VMIN", + "CPU Max Voltage": "CPU Max Voltage", + "CPU Max Clock": "CPU Max Clock", + "Extreme UV Table": "Extreme UV Table", + "CPU UV Table": "CPU UV Table", + "CPU Low UV": "CPU Low UV", + "CPU High UV": "CPU High UV", + "CPU Low VMIN": "CPU Low VMIN", + "CPU High VMIN": "CPU High VMIN", + "No Undervolt": "No Undervolt", + "SLT Table": "SLT Table", + "HiOPT Table": "HiOPT Table", + "GPU Undervolt Table": "GPU Undervolt Table", + "GPU Minimum Voltage": "GPU Minimum Voltage", + "Calculate GPU Vmin": "Calculate GPU Vmin", + "GPU VMIN": "GPU VMIN", + "GPU Maximum Voltage": "GPU Maximum Voltage", + "GPU Voltage Offset": "GPU Voltage Offset", + "Do not override": "Do not override", + "Enabled (Default)": "Enabled (Default)", + "96.6% limit": "96.6% limit", + "99.7% limit": "99.7% limit", + "GPU Scheduling Override": "GPU Scheduling Override", + "Official Service": "Official Service", + "GPU DVFS Mode": "GPU DVFS Mode", + "GPU DVFS Offset": "GPU DVFS Offset", + "GPU Voltage Table": "GPU Voltage Table", + "GPU Custom Table (mV)": "GPU Custom Table (mV)", + "1075MHz without UV, 1152MHz on SLT": "1075MHz without UV, 1152MHz on SLT", + "or 1228MHz on HiOPT can cause ": "or 1228MHz on HiOPT can cause", + "permanent damage to your Switch!": "permanent damage to your Switch!", + "921MHz without UV and 960MHz on": "921MHz without UV and 960MHz on", + "SLT or HiOPT can cause ": "SLT or HiOPT can cause" +} diff --git a/dist/config/horizon-oc/lang/lang/ko.json b/dist/config/horizon-oc/lang/lang/ko.json new file mode 100644 index 00000000..09e73e66 --- /dev/null +++ b/dist/config/horizon-oc/lang/lang/ko.json @@ -0,0 +1,141 @@ +{ + "Information": "정보", + "IDDQ:": "IDDQ:", + "Module: ": "모듈:", + "sys-dock status:": "sys-dock 상태:", + "SaltyNX status:": "SaltyNX 상태:", + "RR Display status:": "RR 표시 상태:", + "Wafer Position:": "웨이퍼 위치:", + "Credits": "크레딧", + "Developers": "개발자", + "Contributors": "기여자", + "Testers": "테스터", + "Special Thanks": "특별한 분", + "Unknown": "알 수 없음", + "Installed": "설치됨", + "Not Installed": "설치되지 않음", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "맥주 제품 라이센스", + "Default": "기본값", + "Do Not Override": "재정의하지 마십시오", + "Disabled": "비활성화", + "Enabled": "활성화됨", + " \\ue0e3 Reset": "\\ue0e3 재설정", + "Display": "디스플레이", + "Application changed\\n\\n": "애플리케이션이 변경되었습니다.\\n\\n", + "The running application changed\\n\\n": "실행 중인 애플리케이션이 변경되었습니다.\\n\\n", + "while editing was going on.": "편집이 진행되는 동안.", + "Board": "보드", + "%u.%u%u mV": "%u.%u%umV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "hoc-clk 시스템 모듈에 연결할 수 없습니다.\\n\\n", + "Please make sure everything is\\n\\n": "모든 것이 올바른지 확인하십시오.\\n\\n", + "correctly installed and enabled.": "올바르게 설치되고 활성화되었습니다.", + "Fatal error": "치명적인 오류", + "Temporary Overrides ": "임시 재정의", + "Sleep Mode": "절전 모드", + "Stock": "주식", + "Dev OC": "개발 OC", + "Overwrite Boost Mode": "부스트 모드 덮어쓰기", + "Safe Max": "안전함 최대값", + "Unsafe Max": "불안정 최대값", + "Absolute Max": "절대 최대값", + "Handheld Safe Max": "휴대모드 안전함 최대값", + "Enable": "활성화", + "Edit App Profile": "앱 프로필 편집", + "Edit Global Profile": "글로벌 프로필 편집", + "Temporary Overrides": "임시 재정의", + "Settings": "설정", + "About": "소개", + "Compiling with minimal features": "최소한의 기능으로 컴파일하기", + "General Settings": "일반 설정", + "Governor Settings": "거버너 설정", + "Safety Settings": "안전 설정", + "Save KIP Settings": "KIP 설정 저장", + "RAM Settings": "RAM 설정", + "CPU Settings": "CPU 설정", + "GPU Settings": "GPU 설정", + "Display Settings": "디스플레이 설정", + "Experimental": "실험적", + "GPU Scheduling Override Method": "GPU 스케줄링 재정의 방법", + "can be dangerous and may cause": "위험할 수 있고 원인이 될 수 있습니다.", + "damage to your battery or charger!": "배터리나 충전기가 손상되었습니다!", + "Charge Current Override": "충전 전류 오버라이드", + "RAM Voltage Display Mode": "RAM 전압 표시 모드", + "Polling Interval": "폴링 간격", + "CPU Governor Minimum Frequency": "CPU 거버너 최소 주파수", + "refresh rates may cause stress": "디스플레이 주사율 빈도 변경은", + "or damage to your display! ": "기기에 손상이 발생될 수 있습니다!", + "Proceed at your own risk!": "책임하에 주의해서 사용하십시오!", + "Max Handheld Display": "최대 휴대용 디스플레이", + "Display Clock": "디스플레이 클럭", + "Official Rating": "공식 등급", + "TDP Threshold": "TDP 임계값", + "Power": "힘", + "Thermal Throttle Limit": "열 스로틀 한계", + "HP Mode": "HP 모드", + "Default (Mariko)": "기본값(마리코)", + "Default (Erista)": "기본값(에리스타)", + "Rating": "표준값", + "Safe Max (Mariko)": "안전함 최대치(마리코)", + "Safe Max (Erista)": "안전함 최대치(에리스타)", + "RAM VDD2 Voltage": "RAM VDD2 전압", + "Voltage": "전압", + "RAM VDDQ Voltage": "RAM VDDQ 전압", + "RAM Frequency Editor": "RAM 주파수 편집기", + "JEDEC.": "JEDEC.", + "High speedo needed!": "높은 스피도값이 필요합니다!", + "3333MHz (Needs extreme Speedo/PLL)": "3333MHz(극단적인 Speedo/PLL 필요)", + "3366MHz (Needs extreme Speedo/PLL)": "3366MHz(극단적인 Speedo/PLL 필요)", + "3400MHz (Needs extreme Speedo/PLL)": "3400MHz(극단적인 Speedo/PLL 필요)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (말도 안 되는 Speedo/PLL 필요)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz(터무니없는 Speedo/PLL 필요)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500MHz(터무니없는 Speedo/PLL 필요)", + "Ram Max Clock": "RAM 최대 클럭", + "RAM Latency Editor": "RAM 지연 시간 편집기", + "RAM Timing Reductions": "RAM 타이밍 편집기", + "Memory Timings": "메모리 타이밍", + "Advanced": "고급", + "t6 tRTW Fine Tune": "t6 tRTW 미세 조정", + "tRTW Fine Tune": "tRTW 미세 조정", + "t7 tWTR Fine Tune": "t7 tWTR 미세 조정", + "tWTR Fine Tune": "tWTR 미세 조정", + "Memory Latencies": "메모리 지연 시간", + "Read Latency": "읽기 지연 시간", + "Write Latency": "쓰기 지연 시간", + "CPU Boost Clock": "CPU 부스트 클럭", + "CPU UV": "CPU 언더볼트", + "CPU Unlock": "CPU 잠금 해제", + "CPU VMIN": "CPU VMIN", + "CPU Max Voltage": "CPU 최대 전압", + "CPU Max Clock": "CPU 최대 클럭", + "Extreme UV Table": "익스트림 테이블", + "CPU UV Table": "CPU 언더볼트 테이블", + "CPU Low UV": "CPU 저주파 언더볼트", + "CPU High UV": "CPU 고주파 언더볼트", + "CPU Low VMIN": "CPU 저주파 최소 전압", + "CPU High VMIN": "CPU 고주파 최소 전압", + "No Undervolt": "언더볼트 없음", + "SLT Table": "SLT 테이블", + "HiOPT Table": "HiOPT 테이블", + "GPU Undervolt Table": "GPU 언더볼트 테이블", + "GPU Minimum Voltage": "GPU 최소 전압", + "Calculate GPU Vmin": "GPU Vmin 계산", + "GPU VMIN": "GPU VMIN", + "GPU Maximum Voltage": "GPU 최대 전압", + "GPU Voltage Offset": "GPU 전압 오프셋", + "Do not override": "재정의하지 않음", + "Enabled (Default)": "활성화됨(기본값)", + "96.6% limit": "96.6% 한도", + "99.7% limit": "99.7% 한도", + "GPU Scheduling Override": "GPU 스케줄링 재정의", + "Official Service": "공식 서비스", + "GPU DVFS Mode": "GPU DVFS 모드", + "GPU DVFS Offset": "GPU DVFS 오프셋", + "GPU Voltage Table": "GPU 전압 테이블", + "GPU Custom Table (mV)": "GPU 사용자 정의 테이블(mV)", + "1075MHz without UV, 1152MHz on SLT": "UV 없이 1075MHz, SLT에서 1152MHz", + "or 1228MHz on HiOPT can cause ": "또는 HiOPT에서 1228MHz를 사용하면", + "permanent damage to your Switch!": "스위치가 영구적으로 손상될 수 있습니다!", + "921MHz without UV and 960MHz on": "UV가 없는 경우 921MHz, 켜진 경우에는 960MHz", + "SLT or HiOPT can cause ": "SLT 또는 HiOPT는 다음을 유발할 수 있습니다." +} diff --git a/dist/config/horizon-oc/lang/lang/nl.json b/dist/config/horizon-oc/lang/lang/nl.json new file mode 100644 index 00000000..1005d3c2 --- /dev/null +++ b/dist/config/horizon-oc/lang/lang/nl.json @@ -0,0 +1,141 @@ +{ + "Information": "Informatie", + "IDDQ:": "IDDQ:", + "Module: ": "module:", + "sys-dock status:": "sys-dock-status:", + "SaltyNX status:": "SaltyNX-status:", + "RR Display status:": "RR Weergavestatus:", + "Wafer Position:": "Waferpositie:", + "Credits": "Kredieten", + "Developers": "Ontwikkelaars", + "Contributors": "Bijdragers", + "Testers": "Testers", + "Special Thanks": "Speciale dank", + "Unknown": "Onbekend", + "Installed": "Geïnstalleerd", + "Not Installed": "Niet geïnstalleerd", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "DE LICENTIE VOOR BIERWAREN", + "Default": "Standaard", + "Do Not Override": "Niet overschrijven", + "Disabled": "Uitgeschakeld", + "Enabled": "Ingeschakeld", + " \\ue0e3 Reset": "\\ue0e3 Opnieuw instellen", + "Display": "Weergave", + "Application changed\\n\\n": "Applicatie gewijzigd\\n\\n", + "The running application changed\\n\\n": "De actieve applicatie is gewijzigd\\n\\n", + "while editing was going on.": "terwijl er werd bewerkt.", + "Board": "Bord", + "%u.%u%u mV": "%u.%u%u mV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "Kan geen verbinding maken met hoc-clk sysmodule.\\n\\n", + "Please make sure everything is\\n\\n": "Zorg ervoor dat alles in orde is\\n\\n", + "correctly installed and enabled.": "correct geïnstalleerd en ingeschakeld.", + "Fatal error": "Fatale fout", + "Temporary Overrides ": "Tijdelijke overschrijvingen", + "Sleep Mode": "Slaapmodus", + "Stock": "Voorraad", + "Dev OC": "Ontwikkelaar OC", + "Boost Mode": "Boost-modus", + "Safe Max": "Veilig Max", + "Unsafe Max": "OnveiligMax", + "Absolute Max": "Absoluut Max", + "Handheld Safe Max": "Handkluis Max", + "Enable": "Inschakelen", + "Edit App Profile": "App-profiel bewerken", + "Edit Global Profile": "Globaal profiel bewerken", + "Temporary Overrides": "Tijdelijke overschrijvingen", + "Settings": "Instellingen", + "About": "Over", + "Compiling with minimal features": "Compileren met minimale functies", + "General Settings": "Algemene instellingen", + "Governor Settings": "Gouverneur instellingen", + "Safety Settings": "Veiligheidsinstellingen", + "Save KIP Settings": "Sla KIP-instellingen op", + "RAM Settings": "RAM-instellingen", + "CPU Settings": "CPU-instellingen", + "GPU Settings": "GPU-instellingen", + "Display Settings": "Weergave-instellingen", + "Experimental": "Experimenteel", + "GPU Scheduling Override Method": "Methode voor het overschrijven van GPU-planning", + "can be dangerous and may cause": "kan gevaarlijk zijn en kan veroorzaken", + "damage to your battery or charger!": "schade aan uw accu of lader!", + "Charge Current Override": "Laadstroom overschrijven", + "RAM Voltage Display Mode": "Weergavemodus RAM-spanning", + "Polling Interval": "Polling-interval", + "CPU Governor Minimum Frequency": "Minimale frequentie CPU-regelaar", + "refresh rates may cause stress": "vernieuwingsfrequenties kunnen stress veroorzaken", + "or damage to your display! ": "of schade aan uw display!", + "Proceed at your own risk!": "Ga verder op eigen risico!", + "Max Handheld Display": "Maximaal handheld-display", + "Display Clock": "Klok weergeven", + "Official Rating": "Officiële beoordeling", + "TDP Threshold": "TDP-drempel", + "Power": "Macht", + "Thermal Throttle Limit": "Thermische gaslimiet", + "HP Mode": "HP-modus", + "Default (Mariko)": "Standaard (Mariko)", + "Default (Erista)": "Standaard (Erista)", + "Rating": "Beoordeling", + "Safe Max (Mariko)": "Veilig Max (Mariko)", + "Safe Max (Erista)": "Veilige Max (Erista)", + "RAM VDD2 Voltage": "RAM VDD2-spanning", + "Voltage": "Spanning", + "RAM VDDQ Voltage": "RAM VDDQ-spanning", + "RAM Frequency Editor": "RAM-frequentie-editor", + "JEDEC.": "JEDEC.", + "High speedo needed!": "Hoge snelheid nodig!", + "3333MHz (Needs extreme Speedo/PLL)": "3333 MHz (vereist extreme snelheidsmeter/PLL)", + "3366MHz (Needs extreme Speedo/PLL)": "3366 MHz (vereist extreme snelheidsmeter/PLL)", + "3400MHz (Needs extreme Speedo/PLL)": "3400 MHz (vereist extreme snelheidsmeter/PLL)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (heeft een belachelijke snelheidsmeter/PLL nodig)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz (heeft een belachelijke snelheidsmeter/PLL nodig)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500 MHz (heeft een belachelijke snelheidsmeter/PLL nodig)", + "Ram Max Clock": "Ram Max-klok", + "RAM Latency Editor": "RAM-latentie-editor", + "RAM Timing Reductions": "RAM-timingreducties", + "Memory Timings": "Geheugentijden", + "Advanced": "Geavanceerd", + "t6 tRTW Fine Tune": "t6 tRTW Fijnafstemming", + "tRTW Fine Tune": "tRTW Fijnafstemming", + "t7 tWTR Fine Tune": "t7 tWTR Fijnafstemming", + "tWTR Fine Tune": "tWTR Fijnafstemming", + "Memory Latencies": "Geheugenlatenties", + "Read Latency": "Lees Latentie", + "Write Latency": "Schrijf latentie", + "CPU Boost Clock": "CPU-boostklok", + "CPU UV": "CPU-UV", + "CPU Unlock": "CPU-ontgrendeling", + "CPU VMIN": "CPU-VMIN", + "CPU Max Voltage": "Maximale CPU-spanning", + "CPU Max Clock": "CPU maximale klok", + "Extreme UV Table": "Extreme UV-tafel", + "CPU UV Table": "CPU UV-tabel", + "CPU Low UV": "CPU Lage UV", + "CPU High UV": "CPU Hoge UV", + "CPU Low VMIN": "CPU Lage VMIN", + "CPU High VMIN": "CPU Hoge VMIN", + "No Undervolt": "Geen ondervolt", + "SLT Table": "SLT-tabel", + "HiOPT Table": "HiOPT-tabel", + "GPU Undervolt Table": "GPU-undervolttabel", + "GPU Minimum Voltage": "GPU-minimale spanning", + "Calculate GPU Vmin": "Bereken GPU Vmin", + "GPU VMIN": "GPU-VMIN", + "GPU Maximum Voltage": "GPU maximale spanning", + "GPU Voltage Offset": "GPU-spanningsoffset", + "Do not override": "Niet overschrijven", + "Enabled (Default)": "Ingeschakeld (standaard)", + "96.6% limit": "96,6% limiet", + "99.7% limit": "99,7% limiet", + "GPU Scheduling Override": "GPU-planning negeren", + "Official Service": "Officiële dienst", + "GPU DVFS Mode": "GPU DVFS-modus", + "GPU DVFS Offset": "GPU DVFS-offset", + "GPU Voltage Table": "GPU-spanningstabel", + "GPU Custom Table (mV)": "Aangepaste GPU-tabel (mV)", + "1075MHz without UV, 1152MHz on SLT": "1075MHz zonder UV, 1152MHz op SLT", + "or 1228MHz on HiOPT can cause ": "of 1228MHz op HiOPT kan dit veroorzaken", + "permanent damage to your Switch!": "blijvende schade aan uw Switch!", + "921MHz without UV and 960MHz on": "921MHz zonder UV en 960MHz aan", + "SLT or HiOPT can cause ": "SLT of HiOPT kunnen dit veroorzaken" +} diff --git a/dist/config/horizon-oc/lang/lang/pl.json b/dist/config/horizon-oc/lang/lang/pl.json new file mode 100644 index 00000000..1233aa93 --- /dev/null +++ b/dist/config/horizon-oc/lang/lang/pl.json @@ -0,0 +1,141 @@ +{ + "Information": "Informacje", + "IDDQ:": "IDDQ:", + "Module: ": "Moduł:", + "sys-dock status:": "stan sys-dock:", + "SaltyNX status:": "Stan SaltyNX:", + "RR Display status:": "Stan wyświetlacza:", + "Wafer Position:": "Pozycja wafla:", + "Credits": "Kredyty", + "Developers": "Deweloperzy", + "Contributors": "Współautorzy", + "Testers": "Testery", + "Special Thanks": "Specjalne podziękowania", + "Unknown": "Nieznany", + "Installed": "Zainstalowany", + "Not Installed": "Nie zainstalowano", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "LICENCJA NA WYROBY PIWNE", + "Default": "Domyślne", + "Do Not Override": "Nie zastępuj", + "Disabled": "Niepełnosprawny", + "Enabled": "Włączone", + " \\ue0e3 Reset": "\\ue0e3 Zresetuj", + "Display": "Wyświetlacz", + "Application changed\\n\\n": "Aplikacja została zmieniona\\n\\n", + "The running application changed\\n\\n": "Działająca aplikacja została zmieniona\\n\\n", + "while editing was going on.": "podczas gdy edycja była w toku.", + "Board": "Deska", + "%u.%u%u mV": "%u.%u%u mV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "Nie można połączyć się z modułem sysmodule hoc-clk.\\n\\n", + "Please make sure everything is\\n\\n": "Upewnij się, że wszystko jest\\n\\n", + "correctly installed and enabled.": "poprawnie zainstalowany i włączony.", + "Fatal error": "Fatalny błąd", + "Temporary Overrides ": "Tymczasowe nadpisania", + "Sleep Mode": "Tryb uśpienia", + "Stock": "Zapas", + "Dev OC": "Dev OC", + "Boost Mode": "Tryb wzmocnienia", + "Safe Max": "Bezpieczny maks", + "Unsafe Max": "Niebezpieczny maks", + "Absolute Max": "Absolutny maks", + "Handheld Safe Max": "Sejf ręczny Max", + "Enable": "Włącz", + "Edit App Profile": "Edytuj profil aplikacji", + "Edit Global Profile": "Edytuj profil globalny", + "Temporary Overrides": "Tymczasowe nadpisania", + "Settings": "Ustawienia", + "About": "O", + "Compiling with minimal features": "Kompilacja z minimalnymi funkcjami", + "General Settings": "Ustawienia ogólne", + "Governor Settings": "Ustawienia gubernatora", + "Safety Settings": "Ustawienia bezpieczeństwa", + "Save KIP Settings": "Zapisz ustawienia KIP", + "RAM Settings": "Ustawienia pamięci RAM", + "CPU Settings": "Ustawienia procesora", + "GPU Settings": "Ustawienia GPU", + "Display Settings": "Ustawienia wyświetlania", + "Experimental": "Eksperymentalny", + "GPU Scheduling Override Method": "Metoda obejścia harmonogramu GPU", + "can be dangerous and may cause": "może być niebezpieczne i powodować", + "damage to your battery or charger!": "uszkodzenie akumulatora lub ładowarki!", + "Charge Current Override": "Obejście prądu ładowania", + "RAM Voltage Display Mode": "Tryb wyświetlania napięcia RAM", + "Polling Interval": "Interwał odpytywania", + "CPU Governor Minimum Frequency": "Minimalna częstotliwość regulatora procesora", + "refresh rates may cause stress": "częstotliwości odświeżania mogą powodować stres", + "or damage to your display! ": "lub uszkodzenie wyświetlacza!", + "Proceed at your own risk!": "Postępuj na własne ryzyko!", + "Max Handheld Display": "Maksymalny wyświetlacz ręczny", + "Display Clock": "Wyświetl zegar", + "Official Rating": "Oficjalna ocena", + "TDP Threshold": "Próg TDP", + "Power": "Moc", + "Thermal Throttle Limit": "Limit przepustnicy termicznej", + "HP Mode": "Tryb HP", + "Default (Mariko)": "Domyślny (Mariko)", + "Default (Erista)": "Domyślny (Erista)", + "Rating": "Ocena", + "Safe Max (Mariko)": "Bezpieczny Max (Mariko)", + "Safe Max (Erista)": "Bezpieczny Max (Erista)", + "RAM VDD2 Voltage": "Napięcie pamięci RAM VDD2", + "Voltage": "Napięcie", + "RAM VDDQ Voltage": "Napięcie RAM VDDQ", + "RAM Frequency Editor": "Edytor częstotliwości RAM", + "JEDEC.": "JEDEC.", + "High speedo needed!": "Potrzebna duża prędkość!", + "3333MHz (Needs extreme Speedo/PLL)": "3333 MHz (wymaga ekstremalnego Speedo/PLL)", + "3366MHz (Needs extreme Speedo/PLL)": "3366 MHz (wymaga ekstremalnego Speedo/PLL)", + "3400MHz (Needs extreme Speedo/PLL)": "3400 MHz (wymaga ekstremalnego Speedo/PLL)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433 MHz (potrzebuje śmiesznego Speedo/PLL)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466 MHz (potrzebuje śmiesznego Speedo/PLL)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500 MHz (potrzebuje śmiesznego Speedo/PLL)", + "Ram Max Clock": "Zegar Ram Max", + "RAM Latency Editor": "Edytor opóźnień pamięci RAM", + "RAM Timing Reductions": "Zmniejszenie taktowania pamięci RAM", + "Memory Timings": "Taktowanie pamięci", + "Advanced": "Zaawansowane", + "t6 tRTW Fine Tune": "t6 tRTW Dostrój", + "tRTW Fine Tune": "tRTW Dostosuj", + "t7 tWTR Fine Tune": "t7 tWTR Dostosuj", + "tWTR Fine Tune": "tWTR Dostosuj", + "Memory Latencies": "Opóźnienia pamięci", + "Read Latency": "Przeczytaj Opóźnienie", + "Write Latency": "Opóźnienie zapisu", + "CPU Boost Clock": "Zegar wzmocnienia procesora", + "CPU UV": "Procesor UV", + "CPU Unlock": "Odblokowanie procesora", + "CPU VMIN": "Procesor VMIN", + "CPU Max Voltage": "Maksymalne napięcie procesora", + "CPU Max Clock": "Maks. zegar procesora", + "Extreme UV Table": "Ekstremalny stół UV", + "CPU UV Table": "Tabela UV procesora", + "CPU Low UV": "Niskie promieniowanie UV procesora", + "CPU High UV": "Wysokie promieniowanie UV procesora", + "CPU Low VMIN": "Niski poziom VMIN procesora", + "CPU High VMIN": "Wysoki poziom VMIN procesora", + "No Undervolt": "Brak Undervolta", + "SLT Table": "Stół SLT", + "HiOPT Table": "Stół HiOPT", + "GPU Undervolt Table": "Tabela niedoboru napięcia GPU", + "GPU Minimum Voltage": "Minimalne napięcie procesora graficznego", + "Calculate GPU Vmin": "Oblicz Vmin GPU", + "GPU VMIN": "VMIN GPU", + "GPU Maximum Voltage": "Maksymalne napięcie procesora graficznego", + "GPU Voltage Offset": "Przesunięcie napięcia GPU", + "Do not override": "Nie zastępuj", + "Enabled (Default)": "Włączone (domyślnie)", + "96.6% limit": "Limit 96,6%.", + "99.7% limit": "Limit 99,7%.", + "GPU Scheduling Override": "Zastąpienie harmonogramu GPU", + "Official Service": "Oficjalny serwis", + "GPU DVFS Mode": "Tryb DVFS procesora graficznego", + "GPU DVFS Offset": "Przesunięcie DVFS GPU", + "GPU Voltage Table": "Tabela napięć GPU", + "GPU Custom Table (mV)": "Tabela niestandardowa GPU (mV)", + "1075MHz without UV, 1152MHz on SLT": "1075 MHz bez UV, 1152 MHz na SLT", + "or 1228MHz on HiOPT can cause ": "lub 1228 MHz na HiOPT może powodować", + "permanent damage to your Switch!": "trwałe uszkodzenie Switcha!", + "921MHz without UV and 960MHz on": "921 MHz bez UV i 960 MHz włączone", + "SLT or HiOPT can cause ": "Przyczyną mogą być SLT lub HiOPT" +} diff --git a/dist/config/horizon-oc/lang/lang/pt.json b/dist/config/horizon-oc/lang/lang/pt.json new file mode 100644 index 00000000..fbddab17 --- /dev/null +++ b/dist/config/horizon-oc/lang/lang/pt.json @@ -0,0 +1,141 @@ +{ + "Information": "Informação", + "IDDQ:": "IDDQ:", + "Module: ": "Módulo:", + "sys-dock status:": "status do dock do sistema:", + "SaltyNX status:": "Status do SaltyNX:", + "RR Display status:": "Status de exibição do RR:", + "Wafer Position:": "Posição da bolacha:", + "Credits": "Créditos", + "Developers": "Desenvolvedores", + "Contributors": "Colaboradores", + "Testers": "Testadores", + "Special Thanks": "Agradecimentos especiais", + "Unknown": "Desconhecido", + "Installed": "Instalado", + "Not Installed": "Não instalado", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "A LICENÇA DE CERVEJA", + "Default": "Padrão", + "Do Not Override": "Não substituir", + "Disabled": "Desativado", + "Enabled": "Habilitado", + " \\ue0e3 Reset": "\\ue0e3 Redefinir", + "Display": "Exibição", + "Application changed\\n\\n": "Aplicativo alterado\\n\\n", + "The running application changed\\n\\n": "O aplicativo em execução foi alterado\\n\\n", + "while editing was going on.": "enquanto a edição estava acontecendo.", + "Board": "Conselho", + "%u.%u%u mV": "%u.%u%u mV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "Não foi possível conectar-se ao sysmodule hoc-clk.\\n\\n", + "Please make sure everything is\\n\\n": "Verifique se tudo está\\n\\n", + "correctly installed and enabled.": "corretamente instalado e ativado.", + "Fatal error": "Erro fatal", + "Temporary Overrides ": "Substituições temporárias", + "Sleep Mode": "Modo de suspensão", + "Stock": "Estoque", + "Dev OC": "Desenvolvedor OC", + "Boost Mode": "Modo de reforço", + "Safe Max": "Máx. Seguro", + "Unsafe Max": "Máximo inseguro", + "Absolute Max": "Máximo absoluto", + "Handheld Safe Max": "Portátil Seguro Máx.", + "Enable": "Habilitar", + "Edit App Profile": "Editar perfil do aplicativo", + "Edit Global Profile": "Editar perfil global", + "Temporary Overrides": "Substituições temporárias", + "Settings": "Configurações", + "About": "Sobre", + "Compiling with minimal features": "Compilando com recursos mínimos", + "General Settings": "Configurações Gerais", + "Governor Settings": "Configurações do Governador", + "Safety Settings": "Configurações de segurança", + "Save KIP Settings": "Salvar configurações KIP", + "RAM Settings": "Configurações de RAM", + "CPU Settings": "Configurações de CPU", + "GPU Settings": "Configurações de GPU", + "Display Settings": "Configurações de exibição", + "Experimental": "Experimental", + "GPU Scheduling Override Method": "Método de substituição de agendamento de GPU", + "can be dangerous and may cause": "pode ser perigoso e causar", + "damage to your battery or charger!": "danos à sua bateria ou carregador!", + "Charge Current Override": "Substituição de corrente de carga", + "RAM Voltage Display Mode": "Modo de exibição de tensão RAM", + "Polling Interval": "Intervalo de votação", + "CPU Governor Minimum Frequency": "Frequência Mínima do Governador da CPU", + "refresh rates may cause stress": "taxas de atualização podem causar estresse", + "or damage to your display! ": "ou danos ao seu monitor!", + "Proceed at your own risk!": "Prossiga por sua conta e risco!", + "Max Handheld Display": "Visor portátil máximo", + "Display Clock": "Exibir relógio", + "Official Rating": "Classificação Oficial", + "TDP Threshold": "Limite de TDP", + "Power": "Poder", + "Thermal Throttle Limit": "Limite de aceleração térmica", + "HP Mode": "Modo HP", + "Default (Mariko)": "Padrão (Mariko)", + "Default (Erista)": "Padrão (Erista)", + "Rating": "Avaliação", + "Safe Max (Mariko)": "Máximo Seguro (Mariko)", + "Safe Max (Erista)": "Seguro Max (Erista)", + "RAM VDD2 Voltage": "Tensão RAM VDD2", + "Voltage": "Tensão", + "RAM VDDQ Voltage": "Tensão RAM VDDQ", + "RAM Frequency Editor": "Editor de frequência RAM", + "JEDEC.": "JEDEC.", + "High speedo needed!": "Alta velocidade necessária!", + "3333MHz (Needs extreme Speedo/PLL)": "3333MHz (precisa de Speedo/PLL extremo)", + "3366MHz (Needs extreme Speedo/PLL)": "3366 MHz (precisa de Speedo/PLL extremo)", + "3400MHz (Needs extreme Speedo/PLL)": "3400 MHz (precisa de Speedo/PLL extremo)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (precisa de Speedo/PLL ridículo)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466 MHz (precisa de Speedo/PLL ridículo)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500 MHz (precisa de Speedo/PLL ridículo)", + "Ram Max Clock": "Relógio máximo de Ram", + "RAM Latency Editor": "Editor de latência de RAM", + "RAM Timing Reductions": "Reduções de tempo de RAM", + "Memory Timings": "Tempos de memória", + "Advanced": "Avançado", + "t6 tRTW Fine Tune": "t6 tRTW Ajuste fino", + "tRTW Fine Tune": "Ajuste fino tRTW", + "t7 tWTR Fine Tune": "t7 tWTR Ajuste fino", + "tWTR Fine Tune": "Ajuste fino tWTR", + "Memory Latencies": "Latências de memória", + "Read Latency": "Latência de leitura", + "Write Latency": "Latência de gravação", + "CPU Boost Clock": "Relógio de aumento da CPU", + "CPU UV": "UV da CPU", + "CPU Unlock": "Desbloqueio da CPU", + "CPU VMIN": "CPU VMIN", + "CPU Max Voltage": "Tensão máxima da CPU", + "CPU Max Clock": "Relógio máximo da CPU", + "Extreme UV Table": "Mesa UV Extrema", + "CPU UV Table": "Tabela UV da CPU", + "CPU Low UV": "UV baixo da CPU", + "CPU High UV": "CPU alta UV", + "CPU Low VMIN": "CPU baixa VMIN", + "CPU High VMIN": "VMIN alto da CPU", + "No Undervolt": "Sem subtensão", + "SLT Table": "Tabela SLT", + "HiOPT Table": "Tabela HiOPT", + "GPU Undervolt Table": "Tabela de subtensão da GPU", + "GPU Minimum Voltage": "Tensão mínima da GPU", + "Calculate GPU Vmin": "Calcular Vmin da GPU", + "GPU VMIN": "GPU VMIN", + "GPU Maximum Voltage": "Tensão máxima da GPU", + "GPU Voltage Offset": "Compensação de tensão da GPU", + "Do not override": "Não substitua", + "Enabled (Default)": "Habilitado (padrão)", + "96.6% limit": "Limite de 96,6%", + "99.7% limit": "Limite de 99,7%", + "GPU Scheduling Override": "Substituição de agendamento de GPU", + "Official Service": "Serviço Oficial", + "GPU DVFS Mode": "Modo GPU DVFS", + "GPU DVFS Offset": "Deslocamento DVFS da GPU", + "GPU Voltage Table": "Tabela de tensão da GPU", + "GPU Custom Table (mV)": "Tabela personalizada de GPU (mV)", + "1075MHz without UV, 1152MHz on SLT": "1075 MHz sem UV, 1152 MHz em SLT", + "or 1228MHz on HiOPT can cause ": "ou 1228 MHz em HiOPT pode causar", + "permanent damage to your Switch!": "danos permanentes ao seu Switch!", + "921MHz without UV and 960MHz on": "921 MHz sem UV e 960 MHz ativado", + "SLT or HiOPT can cause ": "SLT ou HiOPT podem causar" +} diff --git a/dist/config/horizon-oc/lang/lang/ru.json b/dist/config/horizon-oc/lang/lang/ru.json new file mode 100644 index 00000000..4cfdb1bd --- /dev/null +++ b/dist/config/horizon-oc/lang/lang/ru.json @@ -0,0 +1,141 @@ +{ + "Information": "Информация", + "IDDQ:": "ИДДК:", + "Module: ": "Модуль:", + "sys-dock status:": "Статус системной док-станции:", + "SaltyNX status:": "Статус SaltyNX:", + "RR Display status:": "Статус отображения RR:", + "Wafer Position:": "Позиция вафли:", + "Credits": "Кредиты", + "Developers": "Разработчики", + "Contributors": "Авторы", + "Testers": "Тестеры", + "Special Thanks": "Особая благодарность", + "Unknown": "Неизвестно", + "Installed": "Установлено", + "Not Installed": "Не установлено", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "ЛИЦЕНЗИЯ НА ПРОДАЖУ ПИВА", + "Default": "По умолчанию", + "Do Not Override": "Не переопределять", + "Disabled": "Отключено", + "Enabled": "Включено", + " \\ue0e3 Reset": "\\ue0e3 Сброс", + "Display": "Дисплей", + "Application changed\\n\\n": "Приложение изменено\\n\\n", + "The running application changed\\n\\n": "Запущенное приложение изменилось\\n\\n", + "while editing was going on.": "пока шло редактирование.", + "Board": "Совет", + "%u.%u%u mV": "%u.%u%u мВ", + "Could not connect to hoc-clk sysmodule.\\n\\n": "Не удалось подключиться к системному модулю hoc-clk.\\n\\n", + "Please make sure everything is\\n\\n": "Пожалуйста, убедитесь, что все в порядке\\n\\n", + "correctly installed and enabled.": "правильно установлен и включен.", + "Fatal error": "Неустранимая ошибка", + "Temporary Overrides ": "Временные переопределения", + "Sleep Mode": "Спящий режим", + "Stock": "Акции", + "Dev OC": "Разработчик OC", + "Boost Mode": "Режим повышения", + "Safe Max": "Сейф Макс", + "Unsafe Max": "Небезопасный Макс", + "Absolute Max": "Абсолютный Макс", + "Handheld Safe Max": "Ручной сейф Макс", + "Enable": "Включить", + "Edit App Profile": "Редактировать профиль приложения", + "Edit Global Profile": "Редактировать глобальный профиль", + "Temporary Overrides": "Временные переопределения", + "Settings": "Настройки", + "About": "О", + "Compiling with minimal features": "Компиляция с минимальными возможностями", + "General Settings": "Общие настройки", + "Governor Settings": "Настройки губернатора", + "Safety Settings": "Настройки безопасности", + "Save KIP Settings": "Сохранить настройки КИП", + "RAM Settings": "Настройки ОЗУ", + "CPU Settings": "Настройки процессора", + "GPU Settings": "Настройки графического процессора", + "Display Settings": "Настройки дисплея", + "Experimental": "Экспериментальный", + "GPU Scheduling Override Method": "Метод переопределения планирования графического процессора", + "can be dangerous and may cause": "может быть опасным и может вызвать", + "damage to your battery or charger!": "повреждение аккумулятора или зарядного устройства!", + "Charge Current Override": "Блокировка зарядного тока", + "RAM Voltage Display Mode": "Режим отображения напряжения ОЗУ", + "Polling Interval": "Интервал опроса", + "CPU Governor Minimum Frequency": "Минимальная частота регулятора ЦП", + "refresh rates may cause stress": "частота обновления может вызвать стресс", + "or damage to your display! ": "или повреждение дисплея!", + "Proceed at your own risk!": "Действуйте на свой страх и риск!", + "Max Handheld Display": "Макс. портативный дисплей", + "Display Clock": "Дисплей Часы", + "Official Rating": "Официальный рейтинг", + "TDP Threshold": "Порог TDP", + "Power": "Мощность", + "Thermal Throttle Limit": "Температурный предел дроссельной заслонки", + "HP Mode": "Режим HP", + "Default (Mariko)": "По умолчанию (Марико)", + "Default (Erista)": "По умолчанию (Эриста)", + "Rating": "Рейтинг", + "Safe Max (Mariko)": "Сейф Макс (Марико)", + "Safe Max (Erista)": "Сейф Макс (Эриста)", + "RAM VDD2 Voltage": "Напряжение ОЗУ VDD2", + "Voltage": "Напряжение", + "RAM VDDQ Voltage": "Напряжение ОЗУ VDDQ", + "RAM Frequency Editor": "Редактор частоты оперативной памяти", + "JEDEC.": "ДЖЕДЕК.", + "High speedo needed!": "Нужен высокий спидометр!", + "3333MHz (Needs extreme Speedo/PLL)": "3333 МГц (требуется экстремальный спидометр/PLL)", + "3366MHz (Needs extreme Speedo/PLL)": "3366 МГц (требуется экстремальный спидометр/PLL)", + "3400MHz (Needs extreme Speedo/PLL)": "3400 МГц (требуется экстремальный спидометр/PLL)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433 МГц (нужен нелепый спидометр/PLL)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466 МГц (нужен нелепый спидометр/PLL)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500 МГц (нужен нелепый спидометр/PLL)", + "Ram Max Clock": "Рам Макс Часы", + "RAM Latency Editor": "Редактор задержки оперативной памяти", + "RAM Timing Reductions": "Сокращение таймингов ОЗУ", + "Memory Timings": "Тайминги памяти", + "Advanced": "Расширенный", + "t6 tRTW Fine Tune": "t6 tRTW Точная настройка", + "tRTW Fine Tune": "tRTW Точная настройка", + "t7 tWTR Fine Tune": "t7 tWTR Тонкая настройка", + "tWTR Fine Tune": "tWTR Тонкая настройка", + "Memory Latencies": "Задержки памяти", + "Read Latency": "Задержка чтения", + "Write Latency": "Задержка записи", + "CPU Boost Clock": "Тактовая частота процессора", + "CPU UV": "УФ процессора", + "CPU Unlock": "Разблокировка процессора", + "CPU VMIN": "ЦП VMIN", + "CPU Max Voltage": "Максимальное напряжение процессора", + "CPU Max Clock": "Максимальная частота процессора", + "Extreme UV Table": "Стол для экстремального УФ-излучения", + "CPU UV Table": "UV-таблица процессора", + "CPU Low UV": "ЦП с низким УФ-излучением", + "CPU High UV": "Процессор с высоким УФ", + "CPU Low VMIN": "Низкий VMIN процессора", + "CPU High VMIN": "Высокий VMIN процессора", + "No Undervolt": "Нет Андервольта", + "SLT Table": "Таблица ТА", + "HiOPT Table": "Таблица HiOPT", + "GPU Undervolt Table": "Таблица пониженного напряжения графического процессора", + "GPU Minimum Voltage": "Минимальное напряжение графического процессора", + "Calculate GPU Vmin": "Рассчитать Vmin графического процессора", + "GPU VMIN": "Вмин графического процессора", + "GPU Maximum Voltage": "Максимальное напряжение графического процессора", + "GPU Voltage Offset": "Смещение напряжения графического процессора", + "Do not override": "Не переопределять", + "Enabled (Default)": "Включено (по умолчанию)", + "96.6% limit": "Предел 96,6%", + "99.7% limit": "лимит 99,7%", + "GPU Scheduling Override": "Переопределение планирования графического процессора", + "Official Service": "Официальная служба", + "GPU DVFS Mode": "Режим графического процессора DVFS", + "GPU DVFS Offset": "Смещение DVFS графического процессора", + "GPU Voltage Table": "Таблица напряжений графического процессора", + "GPU Custom Table (mV)": "Пользовательская таблица графического процессора (мВ)", + "1075MHz without UV, 1152MHz on SLT": "1075 МГц без УФ, 1152 МГц на SLT", + "or 1228MHz on HiOPT can cause ": "или 1228 МГц на HiOPT может привести к", + "permanent damage to your Switch!": "необратимое повреждение вашего коммутатора!", + "921MHz without UV and 960MHz on": "921 МГц без УФ и 960 МГц с включенным", + "SLT or HiOPT can cause ": "SLT или HiOPT могут вызвать" +} diff --git a/dist/config/horizon-oc/lang/lang/uk.json b/dist/config/horizon-oc/lang/lang/uk.json new file mode 100644 index 00000000..c0239f8a --- /dev/null +++ b/dist/config/horizon-oc/lang/lang/uk.json @@ -0,0 +1,141 @@ +{ + "Information": "Інформація", + "IDDQ:": "IDDQ:", + "Module: ": "Модуль:", + "sys-dock status:": "стан sys-dock:", + "SaltyNX status:": "Статус SaltyNX:", + "RR Display status:": "Статус дисплея RR:", + "Wafer Position:": "Позиція пластини:", + "Credits": "Кредити", + "Developers": "Розробники", + "Contributors": "Дописувачі", + "Testers": "Тестери", + "Special Thanks": "Особлива подяка", + "Unknown": "Невідомий", + "Installed": "встановлено", + "Not Installed": "Не встановлено", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "ЛІЦЕНЗІЯ НА ПИВНИЙ ПОСУД", + "Default": "За замовчуванням", + "Do Not Override": "Не перевизначати", + "Disabled": "Вимкнено", + "Enabled": "Увімкнено", + " \\ue0e3 Reset": "\\ue0e3 Скидання", + "Display": "Дисплей", + "Application changed\\n\\n": "Додаток змінено\\n\\n", + "The running application changed\\n\\n": "Запущена програма змінена\\n\\n", + "while editing was going on.": "поки йшло редагування.", + "Board": "дошка", + "%u.%u%u mV": "%u.%u%u мВ", + "Could not connect to hoc-clk sysmodule.\\n\\n": "Не вдалося підключитися до системного модуля hoc-clk.\\n\\n", + "Please make sure everything is\\n\\n": "Переконайтеся, що все\\n\\n", + "correctly installed and enabled.": "правильно встановлено та включено.", + "Fatal error": "Фатальна помилка", + "Temporary Overrides ": "Тимчасові перевизначення", + "Sleep Mode": "Режим сну", + "Stock": "Запас", + "Dev OC": "Розробник OC", + "Boost Mode": "Режим посилення", + "Safe Max": "Безпечний макс", + "Unsafe Max": "Небезпечний макс", + "Absolute Max": "Абсолютний макс", + "Handheld Safe Max": "Портативний сейф Макс", + "Enable": "Увімкнути", + "Edit App Profile": "Редагувати профіль програми", + "Edit Global Profile": "Редагувати глобальний профіль", + "Temporary Overrides": "Тимчасові перевизначення", + "Settings": "Налаштування", + "About": "про", + "Compiling with minimal features": "Компіляція з мінімальними можливостями", + "General Settings": "Загальні налаштування", + "Governor Settings": "Налаштування губернатора", + "Safety Settings": "Налаштування безпеки", + "Save KIP Settings": "Зберегти налаштування KIP", + "RAM Settings": "Налаштування оперативної пам'яті", + "CPU Settings": "Налаштування ЦП", + "GPU Settings": "Налаштування GPU", + "Display Settings": "Налаштування дисплея", + "Experimental": "Експериментальний", + "GPU Scheduling Override Method": "Метод перевизначення планування GPU", + "can be dangerous and may cause": "може бути небезпечним і може спричинити", + "damage to your battery or charger!": "пошкодження акумулятора або зарядного пристрою!", + "Charge Current Override": "Перевизначення струму заряду", + "RAM Voltage Display Mode": "Режим відображення напруги RAM", + "Polling Interval": "Інтервал опитування", + "CPU Governor Minimum Frequency": "Мінімальна частота регулятора ЦП", + "refresh rates may cause stress": "частоти оновлення можуть викликати стрес", + "or damage to your display! ": "або пошкодження дисплея!", + "Proceed at your own risk!": "Продовжуйте на свій страх і ризик!", + "Max Handheld Display": "Максимальний портативний дисплей", + "Display Clock": "Відображення годинника", + "Official Rating": "Офіційний рейтинг", + "TDP Threshold": "Поріг TDP", + "Power": "потужність", + "Thermal Throttle Limit": "Термічний дросельний ліміт", + "HP Mode": "Режим HP", + "Default (Mariko)": "За замовчуванням (Маріко)", + "Default (Erista)": "За замовчуванням (Erista)", + "Rating": "Рейтинг", + "Safe Max (Mariko)": "Сейф Макс (Маріко)", + "Safe Max (Erista)": "Сейф Макс (Еріста)", + "RAM VDD2 Voltage": "Напруга RAM VDD2", + "Voltage": "Напруга", + "RAM VDDQ Voltage": "Напруга RAM VDDQ", + "RAM Frequency Editor": "Редактор частоти оперативної пам'яті", + "JEDEC.": "JEDEC.", + "High speedo needed!": "Потрібна висока швидкість!", + "3333MHz (Needs extreme Speedo/PLL)": "3333 МГц (потрібна екстремальна швидкість/PLL)", + "3366MHz (Needs extreme Speedo/PLL)": "3366 МГц (потрібна екстремальна швидкість/PLL)", + "3400MHz (Needs extreme Speedo/PLL)": "3400 МГц (потрібна екстремальна швидкість/PLL)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433 МГц (потрібен смішний Speedo/PLL)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466 МГц (потрібен смішний Speedo/PLL)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500 МГц (потрібен смішний Speedo/PLL)", + "Ram Max Clock": "Годинник Ram Max", + "RAM Latency Editor": "Редактор затримки оперативної пам'яті", + "RAM Timing Reductions": "Скорочення оперативної пам'яті", + "Memory Timings": "Таймінг пам'яті", + "Advanced": "Просунутий", + "t6 tRTW Fine Tune": "t6 tRTW Точне налаштування", + "tRTW Fine Tune": "Точне налаштування tRTW", + "t7 tWTR Fine Tune": "t7 tWTR Точне налаштування", + "tWTR Fine Tune": "Точна настройка tWTR", + "Memory Latencies": "Затримки пам'яті", + "Read Latency": "Прочитати затримку", + "Write Latency": "Затримка запису", + "CPU Boost Clock": "CPU Boost Clock", + "CPU UV": "CPU UV", + "CPU Unlock": "Розблокування ЦП", + "CPU VMIN": "CPU VMIN", + "CPU Max Voltage": "Максимальна напруга ЦП", + "CPU Max Clock": "Максимальна частота ЦП", + "Extreme UV Table": "Екстремальний ультрафіолетовий стіл", + "CPU UV Table": "CPU UV Таблиця", + "CPU Low UV": "CPU Low UV", + "CPU High UV": "CPU High UV", + "CPU Low VMIN": "CPU Low VMIN", + "CPU High VMIN": "CPU High VMIN", + "No Undervolt": "Без андервольта", + "SLT Table": "Таблиця SLT", + "HiOPT Table": "Таблиця HiOPT", + "GPU Undervolt Table": "Таблиця зниження напруги GPU", + "GPU Minimum Voltage": "Мінімальна напруга GPU", + "Calculate GPU Vmin": "Розрахувати GPU Vmin", + "GPU VMIN": "GPU VMIN", + "GPU Maximum Voltage": "Максимальна напруга GPU", + "GPU Voltage Offset": "Зсув напруги GPU", + "Do not override": "Не перевизначати", + "Enabled (Default)": "Увімкнено (за замовчуванням)", + "96.6% limit": "96,6% обмеження", + "99.7% limit": "Обмеження 99,7%.", + "GPU Scheduling Override": "Перевизначення планування GPU", + "Official Service": "Офіційний сервіс", + "GPU DVFS Mode": "Режим GPU DVFS", + "GPU DVFS Offset": "GPU DVFS Offset", + "GPU Voltage Table": "Таблиця напруги GPU", + "GPU Custom Table (mV)": "Спеціальна таблиця GPU (мВ)", + "1075MHz without UV, 1152MHz on SLT": "1075 МГц без УФ, 1152 МГц на SLT", + "or 1228MHz on HiOPT can cause ": "або 1228 МГц на HiOPT може спричинити", + "permanent damage to your Switch!": "незворотне пошкодження вашого комутатора!", + "921MHz without UV and 960MHz on": "921 МГц без УФ і 960 МГц увімкнено", + "SLT or HiOPT can cause ": "SLT або HiOPT можуть спричинити" +} diff --git a/dist/config/horizon-oc/lang/lang/zh-cn.json b/dist/config/horizon-oc/lang/lang/zh-cn.json index b71b25b6..53989929 100644 --- a/dist/config/horizon-oc/lang/lang/zh-cn.json +++ b/dist/config/horizon-oc/lang/lang/zh-cn.json @@ -1,133 +1,157 @@ { - "Information about Translation": "This is a machine translation. If you find any errors, please report them on GitHub, or feel free to contribute!", - "Horizon OC Zeus": "Horizon OC Zeus", - "Edit App Profile": "编辑应用配置", - "Advanced": "高级", - "Edit Global Profile": "编辑全局配置", - "Temporary Overrides": "临时覆盖", - "Temporary Overrides Reset": "临时覆盖 重置", - "Settings": "设置", "Information": "信息", + "IDDQ:": "IDDQ:", + "Module: ": "模块: ", + "sys-dock status:": "sys-dock 状态:", + "SaltyNX status:": "SaltyNX 状态:", + "RR Display status:": "RR 显示状态:", + "Wafer Position:": "晶圆位置:", + "Credits": "致谢", + "Developers": "开发者", + "Contributors": "贡献者", + "Testers": "测试者", + "Special Thanks": "特别感谢", + "Unknown": "未知", + "Installed": "已安装", + "Not Installed": "未安装", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "啤酒软件许可协议", + "Default": "默认", + "Do Not Override": "不修改", + "Disabled": "已禁用", + "Enabled": "已启用", + " \\ue0e3 Reset": " \\ue0e3 重置", + "Display": "显示", + "Application changed\\n\\n": "应用已变更\\n\\n", + "The running application changed\\n\\n": "正在运行的应用已变更\\n\\n", + "while editing was going on.": "编辑过程中发生变更。", + "Board": "主板", + "%u.%u%u mV": "%u.%u%u mV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "无法连接到 hoc-clk 系统模块。\\n\\n", + "Please make sure everything is\\n\\n": "请确保所有内容均已\\n\\n", + "correctly installed and enabled.": "正确安装并启用。", + "Fatal error": "致命错误", + "Temporary Overrides ": "临时配置 ", + "Sleep Mode": "睡眠模式", + "Stock": "原厂默认", + "Dev OC": "开发者超频", + "Boost Mode": "加速模式", + "Safe Max": "安全最大值", + "Unsafe Max": "危险最大值", + "Absolute Max": "绝对最大值", + "Handheld Safe Max": "掌机模式安全最大值", "Enable": "启用", - "Uncapped Clocks": "解除频率上限", - "Override Boost Mode": "覆盖加速模式", - "CPU Max Display Clock": "CPU 最大显示频率", - "Thermal Throttle": "温度节流", - "Thermal Throttle Threshold": "温度节流阈值", - "Handheld TDP": "掌机模式 TDP", - "Handheld TDP Limit": "掌机模式 TDP 限制", - "Lite TDP Limit": "Lite TDP 限制", - "Enforce Board Limit": "强制主板限制", - "Battery Charge Current": "电池充电电流", - "Display Refresh Rate Changing": "显示刷新率变更", - "Fix CPU Volt Bug": "修复 CPU 电压错误", - "[cfg] no enum format string": "[cfg] 无枚举格式字符串", - "KIP": "KIP", + "Edit App Profile": "编辑应用配置", + "Edit Global Profile": "编辑全局配置", + "Temporary Overrides": "临时配置", + "Settings": "设置", + "About": "关于", + "Compiling with minimal features": "以最小功能编译", + "General Settings": "通用设置", + "Governor Settings": "调频器设置", + "Safety Settings": "安全设置", "Save KIP Settings": "保存 KIP 设置", "RAM Settings": "内存设置", "CPU Settings": "CPU 设置", "GPU Settings": "GPU 设置", + "Display Settings": "显示设置", "Experimental": "实验性功能", - "Charge Current Override": "充电电流覆盖", - "Disabled": "禁用", - "HP Mode": "高性能模式", - "EMC Max Clock": "EMC 最大频率", - "EMC VDD2 Voltage": "EMC VDD2 电压", - "EMC VDDQ Voltage": "EMC VDDQ 电压", - "DVB Shift": "DVB 偏移", - "Memory Timings": "内存时序", - "Memory Latencies": "内存延迟", - "t1 tRCD": "t1 tRCD", - "t2 tRP": "t2 tRP", - "t3 tRAS": "t3 tRAS", - "t4 tRRD": "t4 tRRD", - "t5 tRFC": "t5 tRFC", - "t6 tRTW": "t6 tRTW", - "t7 tWTR": "t7 tWTR", - "t8 tREFI": "t8 tREFI", - "Update RAM Timings": "更新内存时序", - "\uE150 This feature is EXPERIMENTAL": "\uE150 此功能为实验性功能", - "and should only be used for testing!": "仅应用于测试!", - "Read Latency": "读取延迟", - "Write Latency": "写入延迟", - "CPU UV": "CPU 降压", - "CPU Unlock": "CPU 解锁", - "CPU VMIN": "CPU 最低电压", - "CPU Max Voltage": "CPU 最大电压", - "CPU UV Table": "CPU 降压表", - "CPU Low UV": "CPU 低频降压", - "CPU High UV": "CPU 高频降压", - "CPU Max Clock": "CPU 最大频率", - "CPU Low VMIN": "CPU 低频最低电压", - "CPU High VMIN": "CPU 高频最低电压", - "GPU Undervolt Table": "GPU 降压表", - "Calculate GPU Vmin": "计算 GPU 最低电压", - "GPU VMIN": "GPU 最低电压", - "GPU VMAX": "GPU 最大电压", - "GPU Volt Offset": "GPU 电压偏移", - "GPU Custom Table": "GPU 自定义表", - "GPU Custom Table (mV)": "GPU 自定义表 (mV)", - "\uE150 Setting GPU Clocks past": "\uE150 将 GPU 频率设置超过", - "1075MHz without UV, 1152MHz on SLT or ": "无降压时的 1075MHz、SLT 时的 1152MHz 或", - "1228MHz on HiOPT can cause ": "HiOPT 时的 1228MHz 可能会造成", - "permanent damage to your Switch!": "对您的 Switch 造成永久性损坏!", - "Proceed at your own risk!": "风险自负!", - "921MHz without UV and 960MHz on": "无降压时的 921MHz 和", - "SLT or HiOPT can cause ": "SLT 或 HiOPT 时的 960MHz 可能会造成", - "Auto": "自动", - "Sleep Mode": "休眠模式", - "Stock": "默认", - "Dev OC": "开发超频", - "Boost Mode": "加速模式", - "Safe Max": "安全最大值", - "Unsafe Max": "不安全最大值", - "Absolute Max": "绝对最大值", - "Boost Mode & Safe Max": "加速模式 & 安全最大值", + "GPU Scheduling Override Method": "GPU 调度覆盖方式", + "can be dangerous and may cause": "存在风险,可能导致", + "damage to your battery or charger!": "电池或充电器损坏!", + "Charge Current Override": "充电电流修改", + "RAM Voltage Display Mode": "内存电压显示模式", + "Polling Interval": "刷新间隔", + "CPU Governor Minimum Frequency": "CPU 调频器最低频率", + "\uE150 Usage of unsafe display": "\uE150 不安全的显示屏", + "refresh rates may cause stress": "刷新率可能会对", + "or damage to your display! ": "显示屏造成压力或损坏! ", + "Proceed at your own risk!": "操作风险自负!", + "Max Handheld Display": "掌机模式最大显示率", + "Display Clock": "显示时钟", "Official Rating": "官方额定值", + "TDP Threshold": "TDP 阈值", + "Power": "电源", + "Thermal Throttle Limit": "温控设置", + "HP Mode": "高性能模式", "Default (Mariko)": "默认 (Mariko)", "Default (Erista)": "默认 (Erista)", "Rating": "额定值", "Safe Max (Mariko)": "安全最大值 (Mariko)", "Safe Max (Erista)": "安全最大值 (Erista)", - "Default": "默认", - "1581MHz Tbreak": "1581MHz Tbreak", - "1683MHz Tbreak": "1683MHz Tbreak", - "Extreme UV Table": "极限降压表", - "No UV": "不降压", - "SLT Table": "SLT 表", - "HiOPT Table": "HiOPT 表", - "Power": "功耗", - "Temp": "温度", + "RAM VDD2 Voltage": "内存 VDD2 电压", "Voltage": "电压", - "TDP Threshold": "TDP 阈值", - "Lite TDP Threshold": "Lite TDP 阈值", - "Thermal Throttle Limit": "温度节流限制", - "1600BL": "1600BL", - "1866BL": "1866BL", - "2133BL": "2133BL", - "BAT": "电池", - "FAN": "风扇", - "DISP": "显示", - "Board": "主板", - "Skin": "外壳", - "Now": "当前", - "Avg": "平均", - "App ID": "应用 ID", - "Profile": "配置", - "CPU": "CPU", - "GPU": "GPU", + "RAM VDDQ Voltage": "内存 VDDQ 电压", + "RAM Frequency Editor": "内存频率编辑器", + "JEDEC.": "JEDEC 标准。", + "High speedo needed!": "需要高 Speedo 配置!", + "3333MHz (Needs extreme Speedo/PLL)": "3333MHz (需要极限 Speedo/PLL)", + "3366MHz (Needs extreme Speedo/PLL)": "3366MHz (需要极限 Speedo/PLL)", + "3400MHz (Needs extreme Speedo/PLL)": "3400MHz (需要极限 Speedo/PLL)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (需要极端 Speedo/PLL)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz (需要极端 Speedo/PLL)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500MHz (需要极端 Speedo/PLL)", + "Ram Max Clock": "内存最大频率", + "RAM Latency Editor": "内存延迟编辑器", + "RAM Timing Reductions": "内存时序优化", + "Memory Timings": "内存时序", "Memory": "内存", - "Display": "显示", - "Governor": "调速器", - "SOC": "SOC", - "PCB": "PCB", - "PMIC": "PMIC", + "mem": "内存", + "Governor": "调频器", + "Advanced": "高级", "Docked": "底座模式", "Handheld": "掌机模式", "Charging": "充电中", "USB Charger": "USB 充电器", - "PD Charger": "PD 充电器", - "VDD2": "VDD2", - "VDDQ": "VDDQ", - "GPU DVFS": "GPU DVFS" -} \ No newline at end of file + "PD Charger": "PD 充电器", + "Handheld TDP": "掌机模式功耗限制", + "Thermal Throttle": "温度控制", + "Uncapped Clocks": "解除频率上限", + "Soc DVB Shift": "SoC DVB偏移", + "Overwrite Boost Mode": "接管官方CPU调度", + "Display Refresh Rate Changing": "显示刷新率变更", + "t6 tRTW Fine Tune": "t6 tRTW 微调", + "tRTW Fine Tune": "tRTW 微调", + "t7 tWTR Fine Tune": "t7 tWTR 微调", + "tWTR Fine Tune": "tWTR 微调", + "Memory Latencies": "内存延迟", + "Read Latency": "读取延迟", + "Write Latency": "写入延迟", + "CPU Boost Clock": "CPU 超频频率", + "CPU UV": "CPU 降压", + "CPU Unlock": "CPU 解锁", + "CPU VMIN": "CPU 最低电压", + "CPU Max Voltage": "CPU 最大电压", + "CPU Max Clock": "CPU 最大频率", + "Extreme UV Table": "极限降压表", + "CPU UV Table": "CPU 降压表", + "CPU Low UV": "CPU 低压降压", + "CPU High UV": "CPU 高压降压", + "CPU Low VMIN": "CPU 低压最低电压", + "CPU High VMIN": "CPU 高压最低电压", + "No Undervolt": "不降压", + "SLT Table": "SLT 表", + "HiOPT Table": "HiOPT 表", + "GPU Undervolt Table": "GPU 降压表", + "GPU Minimum Voltage": "GPU 最低电压", + "Calculate GPU Vmin": "计算 GPU 最低电压", + "GPU VMIN": "GPU 最低电压", + "GPU Maximum Voltage": "GPU 最大电压", + "GPU Voltage Offset": "GPU 电压偏移", + "Do not override": "不修改", + "Enabled (Default)": "已启用 (默认)", + "96.6% limit": "96.6% 限制", + "99.7% limit": "99.7% 限制", + "GPU Scheduling Override": "GPU 调度修改", + "Official Service": "官方服务", + "GPU DVFS Mode": "GPU DVFS 模式", + "GPU DVFS Offset": "GPU DVFS 偏移", + "GPU Voltage Table": "GPU 电压表", + "GPU Custom Table (mV)": "GPU 自定义表 (mV)", + "\uE150 Setting GPU Clocks past": "\uE150 将 GPU 频率设置超过", + "1075MHz without UV, 1152MHz on SLT": "1075MHz 无降压,SLT 表下 1152MHz", + "or 1228MHz on HiOPT can cause ": "或 HiOPT 表下 1228MHz 可能导致 ", + "permanent damage to your Switch!": "Switch 永久损坏!", + "921MHz without UV and 960MHz on": "921MHz 无降压,SLT/HiOPT 表下 960MHz", + "SLT or HiOPT can cause ": "可能导致 " +} diff --git a/dist/config/horizon-oc/lang/lang/zh-tw.json b/dist/config/horizon-oc/lang/lang/zh-tw.json index bc7fb3fb..5a8a5dfa 100644 --- a/dist/config/horizon-oc/lang/lang/zh-tw.json +++ b/dist/config/horizon-oc/lang/lang/zh-tw.json @@ -1,132 +1,141 @@ { - "Horizon OC Zeus": "Horizon OC Zeus", - "Edit App Profile": "編輯應用配置", - "Advanced": "高級", - "Edit Global Profile": "編輯全局配置", - "Temporary Overrides": "臨時覆蓋", - "Temporary Overrides Reset": "臨時覆蓋 重設", - "Settings": "設置", "Information": "資訊", - "Enable": "啟用", - "Uncapped Clocks": "解除頻率上限", - "Override Boost Mode": "覆蓋加速模式", - "CPU Max Display Clock": "CPU 最大顯示頻率", - "Thermal Throttle": "溫度節流", - "Thermal Throttle Threshold": "溫度節流閾值", - "Handheld TDP": "掌機模式 TDP", - "Handheld TDP Limit": "掌機模式 TDP 限制", - "Lite TDP Limit": "Lite TDP 限制", - "Enforce Board Limit": "強制主板限制", - "Battery Charge Current": "電池充電電流", - "Display Refresh Rate Changing": "顯示刷新率變更", - "Fix CPU Volt Bug": "修復 CPU 電壓錯誤", - "[cfg] no enum format string": "[cfg] 無枚舉格式字串", - "KIP": "KIP", - "Save KIP Settings": "保存 KIP 設置", - "RAM Settings": "記憶體設定", - "CPU Settings": "CPU 設置", - "GPU Settings": "GPU 設置", - "Experimental": "實驗性功能", - "Charge Current Override": "充電電流覆蓋", - "Disabled": "禁用", - "HP Mode": "高性能模式", - "EMC Max Clock": "EMC 最大頻率", - "EMC VDD2 Voltage": "EMC VDD2 電壓", - "EMC VDDQ Voltage": "EMC VDDQ 電壓", - "DVB Shift": "DVB 偏移", - "Memory Timings": "記憶體時序", - "Memory Latencies": "記憶體延遲", - "t1 tRCD": "t1 tRCD", - "t2 tRP": "t2 tRP", - "t3 tRAS": "t3 tRAS", - "t4 tRRD": "t4 tRRD", - "t5 tRFC": "t5 tRFC", - "t6 tRTW": "t6 tRTW", - "t7 tWTR": "t7 tWTR", - "t8 tREFI": "t8 tREFI", - "Update RAM Timings": "更新記憶體時序", - "\uE150 This feature is EXPERIMENTAL": "\uE150 此功能為實驗性功能", - "and should only be used for testing!": "僅應用於測試!", - "Read Latency": "讀取延遲", - "Write Latency": "寫入延遲", - "CPU UV": "CPU 降壓", - "CPU Unlock": "CPU 解鎖", - "CPU VMIN": "CPU 最低電壓", - "CPU Max Voltage": "CPU 最大電壓", - "CPU UV Table": "CPU 降壓表", - "CPU Low UV": "CPU 低頻降壓", - "CPU High UV": "CPU 高頻降壓", - "CPU Max Clock": "CPU 最大頻率", - "CPU Low VMIN": "CPU 低頻最低電壓", - "CPU High VMIN": "CPU 高頻最低電壓", - "GPU Undervolt Table": "GPU 降壓表", - "Calculate GPU Vmin": "計算 GPU 最低電壓", - "GPU VMIN": "GPU 最低電壓", - "GPU VMAX": "GPU 最大電壓", - "GPU Volt Offset": "GPU 電壓偏移", - "GPU Custom Table": "GPU 自訂表", - "GPU Custom Table (mV)": "GPU 自訂表 (mV)", - "\uE150 Setting GPU Clocks past": "\uE150 將 GPU 頻率設置超過", - "1075MHz without UV, 1152MHz on SLT or ": "無降壓時的 1075MHz、SLT 時的 1152MHz 或", - "1228MHz on HiOPT can cause ": "HiOPT 時的 1228MHz 可能會造成", - "permanent damage to your Switch!": "對您的 Switch 造成永久性損壞!", - "Proceed at your own risk!": "風險自負!", - "921MHz without UV and 960MHz on": "無降壓時的 921MHz 和", - "SLT or HiOPT can cause ": "SLT 或 HiOPT 時的 960MHz 可能會造成", - "Auto": "自動", - "Sleep Mode": "休眠模式", - "Stock": "默認", - "Dev OC": "開發超頻", - "Boost Mode": "加速模式", + "IDDQ:": "國際電話號碼:", + "Module: ": "模組:", + "sys-dock status:": "系統塢站狀態:", + "SaltyNX status:": "SaltyNX 狀態:", + "RR Display status:": "RR 顯示狀態:", + "Wafer Position:": "晶圓位置:", + "Credits": "製作人員", + "Developers": "開發商", + "Contributors": "貢獻者", + "Testers": "測試人員", + "Special Thanks": "特別感謝", + "Unknown": "未知", + "Installed": "已安裝", + "Not Installed": "未安裝", + "X: %u Y: %u": "X: %u Y: %u", + "THE BEER-WARE LICENSE": "啤酒製品許可證", + "Default": "預設", + "Do Not Override": "不要覆蓋", + "Disabled": "殘障人士", + "Enabled": "啟用", + " \\ue0e3 Reset": "\\ue0e3 重設", + "Display": "顯示", + "Application changed\\n\\n": "應用程式已更改\\n\\n", + "The running application changed\\n\\n": "正在運行的應用程式已更改\\n\\n", + "while editing was going on.": "當編輯正在進行時。", + "Board": "董事會", + "%u.%u%u mV": "%u.%u%u mV", + "Could not connect to hoc-clk sysmodule.\\n\\n": "無法連接到 hoc-clk 系統模組。 \\n\\n", + "Please make sure everything is\\n\\n": "請確保一切正常\\n\\n", + "correctly installed and enabled.": "正確安裝並啟用。", + "Fatal error": "致命錯誤", + "Temporary Overrides ": "臨時覆蓋", + "Sleep Mode": "睡眠模式", + "Stock": "庫存", + "Dev OC": "開發OC", + "Boost Mode": "升壓模式", "Safe Max": "安全最大值", "Unsafe Max": "不安全最大值", "Absolute Max": "絕對最大值", - "Boost Mode & Safe Max": "加速模式 & 安全最大值", - "Official Rating": "官方額定值", - "Default (Mariko)": "默認 (Mariko)", - "Default (Erista)": "默認 (Erista)", - "Rating": "額定值", - "Safe Max (Mariko)": "安全最大值 (Mariko)", - "Safe Max (Erista)": "安全最大值 (Erista)", - "Default": "默認", - "1581MHz Tbreak": "1581MHz Tbreak", - "1683MHz Tbreak": "1683MHz Tbreak", - "Extreme UV Table": "極限降壓表", - "No UV": "不降壓", - "SLT Table": "SLT 表", - "HiOPT Table": "HiOPT 表", - "Power": "功耗", - "Temp": "溫度", + "Handheld Safe Max": "手持式安全最大", + "Enable": "啟用", + "Edit App Profile": "編輯應用程式設定檔", + "Edit Global Profile": "編輯全域設定檔", + "Temporary Overrides": "臨時覆蓋", + "Settings": "設定", + "About": "關於", + "Compiling with minimal features": "使用最少的功能進行編譯", + "General Settings": "常規設定", + "Governor Settings": "調速器設定", + "Safety Settings": "安全設定", + "Save KIP Settings": "儲存 KIP 設定", + "RAM Settings": "記憶體設定", + "CPU Settings": "中央處理器設定", + "GPU Settings": "GPU設定", + "Display Settings": "顯示設定", + "Experimental": "實驗性的", + "GPU Scheduling Override Method": "GPU調度覆蓋方法", + "can be dangerous and may cause": "可能很危險並可能導致", + "damage to your battery or charger!": "損壞電池或充電器!", + "Charge Current Override": "充電電流覆蓋", + "RAM Voltage Display Mode": "RAM電壓顯示模式", + "Polling Interval": "輪詢間隔", + "CPU Governor Minimum Frequency": "CPU調速器最低頻率", + "refresh rates may cause stress": "刷新率可能會造成壓力", + "or damage to your display! ": "或損壞您的顯示器!", + "Proceed at your own risk!": "請自行承擔風險!", + "Max Handheld Display": "最大手持顯示器", + "Display Clock": "顯示時鐘", + "Official Rating": "官方評級", + "TDP Threshold": "TDP閾值", + "Power": "電源", + "Thermal Throttle Limit": "熱油門限制", + "HP Mode": "惠普模式", + "Default (Mariko)": "預設(真理子)", + "Default (Erista)": "預設(埃里斯塔)", + "Rating": "評級", + "Safe Max (Mariko)": "安全最大(真理子)", + "Safe Max (Erista)": "安全最大(埃里斯塔)", + "RAM VDD2 Voltage": "RAM VDD2 電壓", "Voltage": "電壓", - "TDP Threshold": "TDP 閾值", - "Lite TDP Threshold": "Lite TDP 閾值", - "Thermal Throttle Limit": "溫度節流限制", - "1600BL": "1600BL", - "1866BL": "1866BL", - "2133BL": "2133BL", - "BAT": "電池", - "FAN": "風扇", - "DISP": "顯示", - "Board": "主板", - "Skin": "外殼", - "Now": "當前", - "Avg": "平均", - "App ID": "應用 ID", - "Profile": "配置", - "CPU": "CPU", - "GPU": "GPU", - "Memory": "記憶體", - "Display": "顯示", - "Governor": "調速器", - "SOC": "SOC", - "PCB": "PCB", - "PMIC": "PMIC", - "Docked": "底座模式", - "Handheld": "掌機模式", - "Charging": "充電中", - "USB Charger": "USB 充電器", - "PD Charger": "PD 充電器", - "VDD2": "VDD2", - "VDDQ": "VDDQ", - "GPU DVFS": "GPU DVFS" -} \ No newline at end of file + "RAM VDDQ Voltage": "RAM VDDQ 電壓", + "RAM Frequency Editor": "RAM頻率編輯器", + "JEDEC.": "JEDEC。", + "High speedo needed!": "需要高速!", + "3333MHz (Needs extreme Speedo/PLL)": "3333MHz(需要極高的 Speedo/PLL)", + "3366MHz (Needs extreme Speedo/PLL)": "3366MHz(需要極高的 Speedo/PLL)", + "3400MHz (Needs extreme Speedo/PLL)": "3400MHz(需要極高的 Speedo/PLL)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz(需要荒謬的 Speedo/PLL)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz(需要荒謬的 Speedo/PLL)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500MHz(需要荒謬的 Speedo/PLL)", + "Ram Max Clock": "記憶體最大時鐘", + "RAM Latency Editor": "RAM 延遲編輯器", + "RAM Timing Reductions": "RAM 時序減少", + "Memory Timings": "記憶體時序", + "Advanced": "進階", + "t6 tRTW Fine Tune": "t6 tRTW 微調", + "tRTW Fine Tune": "tRTW 微調", + "t7 tWTR Fine Tune": "t7 tWTR 微調", + "tWTR Fine Tune": "tWTR 微調", + "Memory Latencies": "記憶體延遲", + "Read Latency": "讀取延遲", + "Write Latency": "寫入延遲", + "CPU Boost Clock": "CPU 升壓時鐘", + "CPU UV": "中央處理器紫外線", + "CPU Unlock": "CPU解鎖", + "CPU VMIN": "CPU最低電壓", + "CPU Max Voltage": "CPU最大電壓", + "CPU Max Clock": "CPU 最大時脈", + "Extreme UV Table": "極端紫外線表", + "CPU UV Table": "CPU UV表", + "CPU Low UV": "CPU低紫外線", + "CPU High UV": "CPU高紫外線", + "CPU Low VMIN": "CPU 低 VMIN", + "CPU High VMIN": "CPU 高 VMIN", + "No Undervolt": "無欠壓", + "SLT Table": "SLT表", + "HiOPT Table": "HiOPT表", + "GPU Undervolt Table": "GPU 欠壓表", + "GPU Minimum Voltage": "GPU最低電壓", + "Calculate GPU Vmin": "計算 GPU Vmin", + "GPU VMIN": "GPU VMIN", + "GPU Maximum Voltage": "GPU最大電壓", + "GPU Voltage Offset": "GPU電壓偏移", + "Do not override": "不要覆蓋", + "Enabled (Default)": "啟用(預設)", + "96.6% limit": "96.6%限制", + "99.7% limit": "99.7%限制", + "GPU Scheduling Override": "GPU 調度覆蓋", + "Official Service": "官方服務", + "GPU DVFS Mode": "GPU DVFS 模式", + "GPU DVFS Offset": "GPU DVFS 偏移", + "GPU Voltage Table": "GPU電壓表", + "GPU Custom Table (mV)": "GPU 自訂表 (mV)", + "1075MHz without UV, 1152MHz on SLT": "無 UV 時為 1075MHz,SLT 時為 1152MHz", + "or 1228MHz on HiOPT can cause ": "或 HiOPT 上的 1228MHz 可能會導致", + "permanent damage to your Switch!": "對您的 Switch 造成永久性損壞!", + "921MHz without UV and 960MHz on": "無 UV 時為 921MHz,開啟時為 960MHz", + "SLT or HiOPT can cause ": "SLT 或 HiOPT 可能會導致" +} diff --git a/dist/config/horizon-oc/lang/zh-cn.json b/dist/config/horizon-oc/lang/zh-cn.json index 56ba1015..53989929 100644 --- a/dist/config/horizon-oc/lang/zh-cn.json +++ b/dist/config/horizon-oc/lang/zh-cn.json @@ -1,100 +1,115 @@ { "Information": "信息", - "IDDQ:": "国际电话号码:", - "Module: ": "模块:", - "sys-dock status:": "系统坞站状态:", - "SaltyNX status:": "SaltyNX 状态:", - "RR Display status:": "RR 显示状态:", - "Wafer Position:": "晶圆位置:", - "Credits": "制作人员", - "Developers": "开发商", + "IDDQ:": "IDDQ:", + "Module: ": "模块: ", + "sys-dock status:": "sys-dock 状态:", + "SaltyNX status:": "SaltyNX 状态:", + "RR Display status:": "RR 显示状态:", + "Wafer Position:": "晶圆位置:", + "Credits": "致谢", + "Developers": "开发者", "Contributors": "贡献者", - "Testers": "测试人员", + "Testers": "测试者", "Special Thanks": "特别感谢", "Unknown": "未知", "Installed": "已安装", "Not Installed": "未安装", "X: %u Y: %u": "X: %u Y: %u", - "THE BEER-WARE LICENSE": "啤酒制品许可证", + "THE BEER-WARE LICENSE": "啤酒软件许可协议", "Default": "默认", - "Do Not Override": "不要覆盖", - "Disabled": "残疾人", - "Enabled": "启用", - " \\ue0e3 Reset": "\\ue0e3 重置", + "Do Not Override": "不修改", + "Disabled": "已禁用", + "Enabled": "已启用", + " \\ue0e3 Reset": " \\ue0e3 重置", "Display": "显示", - "Application changed\\n\\n": "应用程序已更改\\n\\n", - "The running application changed\\n\\n": "正在运行的应用程序已更改\\n\\n", - "while editing was going on.": "当编辑正在进行时。", - "Board": "董事会", + "Application changed\\n\\n": "应用已变更\\n\\n", + "The running application changed\\n\\n": "正在运行的应用已变更\\n\\n", + "while editing was going on.": "编辑过程中发生变更。", + "Board": "主板", "%u.%u%u mV": "%u.%u%u mV", "Could not connect to hoc-clk sysmodule.\\n\\n": "无法连接到 hoc-clk 系统模块。\\n\\n", - "Please make sure everything is\\n\\n": "请确保一切正常\\n\\n", + "Please make sure everything is\\n\\n": "请确保所有内容均已\\n\\n", "correctly installed and enabled.": "正确安装并启用。", "Fatal error": "致命错误", - "Temporary Overrides ": "临时覆盖", + "Temporary Overrides ": "临时配置 ", "Sleep Mode": "睡眠模式", - "Stock": "库存", - "Dev OC": "开发OC", - "Boost Mode": "升压模式", + "Stock": "原厂默认", + "Dev OC": "开发者超频", + "Boost Mode": "加速模式", "Safe Max": "安全最大值", - "Unsafe Max": "不安全最大值", + "Unsafe Max": "危险最大值", "Absolute Max": "绝对最大值", - "Handheld Safe Max": "手持式安全最大", + "Handheld Safe Max": "掌机模式安全最大值", "Enable": "启用", - "Edit App Profile": "编辑应用程序配置文件", - "Edit Global Profile": "编辑全局配置文件", - "Temporary Overrides": "临时覆盖", + "Edit App Profile": "编辑应用配置", + "Edit Global Profile": "编辑全局配置", + "Temporary Overrides": "临时配置", "Settings": "设置", "About": "关于", - "Compiling with minimal features": "使用最少的功能进行编译", - "General Settings": "常规设置", - "Governor Settings": "调速器设置", + "Compiling with minimal features": "以最小功能编译", + "General Settings": "通用设置", + "Governor Settings": "调频器设置", "Safety Settings": "安全设置", "Save KIP Settings": "保存 KIP 设置", "RAM Settings": "内存设置", - "CPU Settings": "中央处理器设置", - "GPU Settings": "GPU设置", + "CPU Settings": "CPU 设置", + "GPU Settings": "GPU 设置", "Display Settings": "显示设置", - "Experimental": "实验性的", - "GPU Scheduling Override Method": "GPU调度覆盖方法", - "can be dangerous and may cause": "可能很危险并可能导致", - "damage to your battery or charger!": "损坏电池或充电器!", - "Charge Current Override": "充电电流覆盖", - "RAM Voltage Display Mode": "RAM电压显示模式", - "Polling Interval": "轮询间隔", - "CPU Governor Minimum Frequency": "CPU调速器最低频率", - "refresh rates may cause stress": "刷新率可能会造成压力", - "or damage to your display! ": "或损坏您的显示器!", - "Proceed at your own risk!": "请自行承担风险!", - "Max Handheld Display": "最大手持显示器", + "Experimental": "实验性功能", + "GPU Scheduling Override Method": "GPU 调度覆盖方式", + "can be dangerous and may cause": "存在风险,可能导致", + "damage to your battery or charger!": "电池或充电器损坏!", + "Charge Current Override": "充电电流修改", + "RAM Voltage Display Mode": "内存电压显示模式", + "Polling Interval": "刷新间隔", + "CPU Governor Minimum Frequency": "CPU 调频器最低频率", + "\uE150 Usage of unsafe display": "\uE150 不安全的显示屏", + "refresh rates may cause stress": "刷新率可能会对", + "or damage to your display! ": "显示屏造成压力或损坏! ", + "Proceed at your own risk!": "操作风险自负!", + "Max Handheld Display": "掌机模式最大显示率", "Display Clock": "显示时钟", - "Official Rating": "官方评级", - "TDP Threshold": "TDP阈值", + "Official Rating": "官方额定值", + "TDP Threshold": "TDP 阈值", "Power": "电源", - "Thermal Throttle Limit": "热油门限制", - "HP Mode": "惠普模式", - "Default (Mariko)": "默认(真理子)", - "Default (Erista)": "默认(埃里斯塔)", - "Rating": "评级", - "Safe Max (Mariko)": "安全最大(真理子)", - "Safe Max (Erista)": "安全最大(埃里斯塔)", - "RAM VDD2 Voltage": "RAM VDD2 电压", + "Thermal Throttle Limit": "温控设置", + "HP Mode": "高性能模式", + "Default (Mariko)": "默认 (Mariko)", + "Default (Erista)": "默认 (Erista)", + "Rating": "额定值", + "Safe Max (Mariko)": "安全最大值 (Mariko)", + "Safe Max (Erista)": "安全最大值 (Erista)", + "RAM VDD2 Voltage": "内存 VDD2 电压", "Voltage": "电压", - "RAM VDDQ Voltage": "RAM VDDQ 电压", - "RAM Frequency Editor": "RAM频率编辑器", - "JEDEC.": "JEDEC。", - "High speedo needed!": "需要高速!", - "3333MHz (Needs extreme Speedo/PLL)": "3333MHz(需要极高的 Speedo/PLL)", - "3366MHz (Needs extreme Speedo/PLL)": "3366MHz(需要极高的 Speedo/PLL)", - "3400MHz (Needs extreme Speedo/PLL)": "3400MHz(需要极高的 Speedo/PLL)", - "3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz(需要荒谬的 Speedo/PLL)", - "3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz(需要荒谬的 Speedo/PLL)", - "3500MHz (Needs ridiculous Speedo/PLL)": "3500MHz(需要荒谬的 Speedo/PLL)", - "Ram Max Clock": "内存最大时钟", - "RAM Latency Editor": "RAM 延迟编辑器", - "RAM Timing Reductions": "RAM 时序减少", + "RAM VDDQ Voltage": "内存 VDDQ 电压", + "RAM Frequency Editor": "内存频率编辑器", + "JEDEC.": "JEDEC 标准。", + "High speedo needed!": "需要高 Speedo 配置!", + "3333MHz (Needs extreme Speedo/PLL)": "3333MHz (需要极限 Speedo/PLL)", + "3366MHz (Needs extreme Speedo/PLL)": "3366MHz (需要极限 Speedo/PLL)", + "3400MHz (Needs extreme Speedo/PLL)": "3400MHz (需要极限 Speedo/PLL)", + "3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (需要极端 Speedo/PLL)", + "3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz (需要极端 Speedo/PLL)", + "3500MHz (Needs ridiculous Speedo/PLL)": "3500MHz (需要极端 Speedo/PLL)", + "Ram Max Clock": "内存最大频率", + "RAM Latency Editor": "内存延迟编辑器", + "RAM Timing Reductions": "内存时序优化", "Memory Timings": "内存时序", + "Memory": "内存", + "mem": "内存", + "Governor": "调频器", "Advanced": "高级", + "Docked": "底座模式", + "Handheld": "掌机模式", + "Charging": "充电中", + "USB Charger": "USB 充电器", + "PD Charger": "PD 充电器", + "Handheld TDP": "掌机模式功耗限制", + "Thermal Throttle": "温度控制", + "Uncapped Clocks": "解除频率上限", + "Soc DVB Shift": "SoC DVB偏移", + "Overwrite Boost Mode": "接管官方CPU调度", + "Display Refresh Rate Changing": "显示刷新率变更", "t6 tRTW Fine Tune": "t6 tRTW 微调", "tRTW Fine Tune": "tRTW 微调", "t7 tWTR Fine Tune": "t7 tWTR 微调", @@ -102,40 +117,41 @@ "Memory Latencies": "内存延迟", "Read Latency": "读取延迟", "Write Latency": "写入延迟", - "CPU Boost Clock": "CPU 升压时钟", - "CPU UV": "中央处理器紫外线", - "CPU Unlock": "CPU解锁", - "CPU VMIN": "CPU最低电压", - "CPU Max Voltage": "CPU最大电压", - "CPU Max Clock": "CPU 最大时钟", - "Extreme UV Table": "极端紫外线表", - "CPU UV Table": "CPU UV表", - "CPU Low UV": "CPU低紫外线", - "CPU High UV": "CPU高紫外线", - "CPU Low VMIN": "CPU 低 VMIN", - "CPU High VMIN": "CPU 高 VMIN", - "No Undervolt": "无欠压", - "SLT Table": "SLT表", - "HiOPT Table": "HiOPT表", - "GPU Undervolt Table": "GPU 欠压表", - "GPU Minimum Voltage": "GPU最低电压", - "Calculate GPU Vmin": "计算 GPU Vmin", - "GPU VMIN": "GPU VMIN", - "GPU Maximum Voltage": "GPU最大电压", - "GPU Voltage Offset": "GPU电压偏移", - "Do not override": "不要覆盖", - "Enabled (Default)": "启用(默认)", - "96.6% limit": "96.6%限制", - "99.7% limit": "99.7%限制", - "GPU Scheduling Override": "GPU 调度覆盖", + "CPU Boost Clock": "CPU 超频频率", + "CPU UV": "CPU 降压", + "CPU Unlock": "CPU 解锁", + "CPU VMIN": "CPU 最低电压", + "CPU Max Voltage": "CPU 最大电压", + "CPU Max Clock": "CPU 最大频率", + "Extreme UV Table": "极限降压表", + "CPU UV Table": "CPU 降压表", + "CPU Low UV": "CPU 低压降压", + "CPU High UV": "CPU 高压降压", + "CPU Low VMIN": "CPU 低压最低电压", + "CPU High VMIN": "CPU 高压最低电压", + "No Undervolt": "不降压", + "SLT Table": "SLT 表", + "HiOPT Table": "HiOPT 表", + "GPU Undervolt Table": "GPU 降压表", + "GPU Minimum Voltage": "GPU 最低电压", + "Calculate GPU Vmin": "计算 GPU 最低电压", + "GPU VMIN": "GPU 最低电压", + "GPU Maximum Voltage": "GPU 最大电压", + "GPU Voltage Offset": "GPU 电压偏移", + "Do not override": "不修改", + "Enabled (Default)": "已启用 (默认)", + "96.6% limit": "96.6% 限制", + "99.7% limit": "99.7% 限制", + "GPU Scheduling Override": "GPU 调度修改", "Official Service": "官方服务", "GPU DVFS Mode": "GPU DVFS 模式", "GPU DVFS Offset": "GPU DVFS 偏移", - "GPU Voltage Table": "GPU电压表", + "GPU Voltage Table": "GPU 电压表", "GPU Custom Table (mV)": "GPU 自定义表 (mV)", - "1075MHz without UV, 1152MHz on SLT": "无 UV 时为 1075MHz,SLT 时为 1152MHz", - "or 1228MHz on HiOPT can cause ": "或 HiOPT 上的 1228MHz 可能会导致", - "permanent damage to your Switch!": "对您的 Switch 造成永久性损坏!", - "921MHz without UV and 960MHz on": "无 UV 时为 921MHz,开启时为 960MHz", - "SLT or HiOPT can cause ": "SLT 或 HiOPT 可能会导致" + "\uE150 Setting GPU Clocks past": "\uE150 将 GPU 频率设置超过", + "1075MHz without UV, 1152MHz on SLT": "1075MHz 无降压,SLT 表下 1152MHz", + "or 1228MHz on HiOPT can cause ": "或 HiOPT 表下 1228MHz 可能导致 ", + "permanent damage to your Switch!": "Switch 永久损坏!", + "921MHz without UV and 960MHz on": "921MHz 无降压,SLT/HiOPT 表下 960MHz", + "SLT or HiOPT can cause ": "可能导致 " } diff --git a/dist/switch/.overlays/Horizon-OC-Monitor.ovl b/dist/switch/.overlays/Horizon-OC-Monitor.ovl index f7fddee4..a358c89e 100644 Binary files a/dist/switch/.overlays/Horizon-OC-Monitor.ovl and b/dist/switch/.overlays/Horizon-OC-Monitor.ovl differ diff --git a/dist/switch/.overlays/horizon-oc-overlay.ovl b/dist/switch/.overlays/horizon-oc-overlay.ovl index 8496cd3d..267196f0 100644 Binary files a/dist/switch/.overlays/horizon-oc-overlay.ovl and b/dist/switch/.overlays/horizon-oc-overlay.ovl differ