From 03f3e07243f24aaa309a935958301dd30c895abe Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Fri, 2 Feb 2024 20:45:50 +0000 Subject: [PATCH 01/35] Added quantum GC9107 LCD driver --- drivers/painter/gc9107/qp_gc9107.c | 126 ++++++++++++++++ drivers/painter/gc9107/qp_gc9107.h | 39 +++++ drivers/painter/gc9107/qp_gc9107_opcodes.h | 168 +++++++++++++++++++++ quantum/painter/qp.h | 6 + quantum/painter/qp_internal.c | 1 + quantum/painter/rules.mk | 12 ++ 6 files changed, 352 insertions(+) create mode 100644 drivers/painter/gc9107/qp_gc9107.c create mode 100644 drivers/painter/gc9107/qp_gc9107.h create mode 100644 drivers/painter/gc9107/qp_gc9107_opcodes.h diff --git a/drivers/painter/gc9107/qp_gc9107.c b/drivers/painter/gc9107/qp_gc9107.c new file mode 100644 index 000000000000..2d15d0c9b76a --- /dev/null +++ b/drivers/painter/gc9107/qp_gc9107.c @@ -0,0 +1,126 @@ +// Copyright 2024 Fernando Birra + +#include "qp_internal.h" +#include "qp_comms.h" +#include "qp_gc9107.h" +#include "qp_gc9107_opcodes.h" +#include "qp_tft_panel.h" + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Driver storage +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +tft_panel_dc_reset_painter_device_t gc9107_drivers[GC9107_NUM_DEVICES] = {0}; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Initialization +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +__attribute__((weak)) bool qp_gc9107_init(painter_device_t device, painter_rotation_t rotation) { + // A lot of these "unknown" opcodes are sourced from other OSS projects and are seemingly required for this display to function. + // clang-format off + + const uint8_t gc9107_init_sequence[] = { + // Command, Delay, N, Data[N] + // The following commands are not really needed since the functionality isn't being used + GC9107_SET_INTER_REG_ENABLE1, 5, 0, + GC9107_SET_INTER_REG_ENABLE2, 5, 0, + GC9107_SET_FUNCTION_CTL1, 0, 1, ALLOW_AVDD_VCL_CLK, + GC9107_SET_FUNCTION_CTL2, 0, 1, ALLOW_SET_VGH | ALLOW_SET_VGL | ALLOW_SET_VGH_VGL_CLK, + GC9107_SET_FUNCTION_CTL3, 0, 1, ALLOW_SET_GAMMA1 | ALLOW_SET_GAMMA2, + GC9107_SET_FUNCTION_CTL6, 0, 1, ALLOW_SET_FRAMERATE | ALLOW_SET_COMPLEMENT_RGB | ALLOW_SET_BLANK_PORCH, + // The following commands are required (tested on 0.85" 128x128 IPS display) + + GC9107_CMD_TEARING_OFF, 0, 0, + GC9107_SET_VGH, 0, 1, 0x24, + GC9107_SET_VGL, 0, 1, 0x48, + GC9107_SET_VGH_VGL_CLK, 0, 1, VGH_CLK_DIV_4 | VGL_CLK_DIV_4, + GC9107_SET_GAMMA1, 0, 14, 0x1F, 0x28, 0x04, 0x3E, 0x2A, 0x2E, 0x20, 0x00, 0x0C, 0x06, 0x00, 0x1C, 0x1F, 0x0F, + GC9107_SET_GAMMA2, 0, 14, 0x00, 0x2D, 0x2F, 0x3F, 0x6F, 0x1C, 0x0B, 0x00, 0x00, 0x00, 0x07, 0x0D, 0x11, 0x0F, + + GC9107_SET_PIXEL_FORMAT, 0, 1, PIXEL_FORMAT_16_BPP, + GC9107_CMD_INVERT_ON, 0, 0, + GC9107_CMD_SLEEP_OFF, 120, 0, + GC9107_CMD_DISPLAY_ON, 20, 0 + }; + + // clang-format on + qp_comms_bulk_command_sequence(device, gc9107_init_sequence, sizeof(gc9107_init_sequence)); + + // Configure the rotation (i.e. the ordering and direction of memory writes in GRAM) + const uint8_t madctl[] = { + [QP_ROTATION_0] = GC9107_MADCTL_BGR, + [QP_ROTATION_90] = GC9107_MADCTL_BGR | GC9107_MADCTL_MX | GC9107_MADCTL_MV, + [QP_ROTATION_180] = GC9107_MADCTL_BGR | GC9107_MADCTL_MX | GC9107_MADCTL_MY, + [QP_ROTATION_270] = GC9107_MADCTL_BGR | GC9107_MADCTL_MV | GC9107_MADCTL_MY, + }; + qp_comms_command_databyte(device, GC9107_SET_MEM_ACS_CTL, madctl[rotation]); + + return true; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Driver vtable +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +const tft_panel_dc_reset_painter_driver_vtable_t gc9107_driver_vtable = { + .base = + { + .init = qp_gc9107_init, + .power = qp_tft_panel_power, + .clear = qp_tft_panel_clear, + .flush = qp_tft_panel_flush, + .pixdata = qp_tft_panel_pixdata, + .viewport = qp_tft_panel_viewport, + .palette_convert = qp_tft_panel_palette_convert_rgb565_swapped, + .append_pixels = qp_tft_panel_append_pixels_rgb565, + .append_pixdata = qp_tft_panel_append_pixdata, + }, + .num_window_bytes = 2, + .swap_window_coords = false, + .opcodes = + { + .display_on = GC9107_CMD_DISPLAY_ON, + .display_off = GC9107_CMD_DISPLAY_OFF, + .set_column_address = GC9107_SET_COL_ADDR, + .set_row_address = GC9107_SET_ROW_ADDR, + .enable_writes = GC9107_SET_MEM, + }, +}; + +#ifdef QUANTUM_PAINTER_GC9107_SPI_ENABLE +// Factory function for creating a handle to the ILI9341 device +painter_device_t qp_gc9107_make_spi_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode) { + for (uint32_t i = 0; i < GC9107_NUM_DEVICES; ++i) { + tft_panel_dc_reset_painter_device_t *driver = &gc9107_drivers[i]; + if (!driver->base.driver_vtable) { + driver->base.driver_vtable = (const painter_driver_vtable_t *)&gc9107_driver_vtable; + driver->base.comms_vtable = (const painter_comms_vtable_t *)&spi_comms_with_dc_vtable; + driver->base.native_bits_per_pixel = 16; // RGB565 + driver->base.panel_width = panel_width; + driver->base.panel_height = panel_height; + driver->base.rotation = QP_ROTATION_0; + driver->base.offset_x = 2; + driver->base.offset_y = 1; + + // SPI and other pin configuration + driver->base.comms_config = &driver->spi_dc_reset_config; + driver->spi_dc_reset_config.spi_config.chip_select_pin = chip_select_pin; + driver->spi_dc_reset_config.spi_config.divisor = spi_divisor; + driver->spi_dc_reset_config.spi_config.lsb_first = false; + driver->spi_dc_reset_config.spi_config.mode = spi_mode; + driver->spi_dc_reset_config.dc_pin = dc_pin; + driver->spi_dc_reset_config.reset_pin = reset_pin; + driver->spi_dc_reset_config.command_params_uses_command_pin = false; + + if (!qp_internal_register_device((painter_device_t)driver)) { + memset(driver, 0, sizeof(tft_panel_dc_reset_painter_device_t)); + return NULL; + } + + return (painter_device_t)driver; + } + } + return NULL; +} + +#endif // QUANTUM_PAINTER_GC9107_SPI_ENABLE diff --git a/drivers/painter/gc9107/qp_gc9107.h b/drivers/painter/gc9107/qp_gc9107.h new file mode 100644 index 000000000000..a7163e6a0da0 --- /dev/null +++ b/drivers/painter/gc9107/qp_gc9107.h @@ -0,0 +1,39 @@ +// Copyright 2024 Fernando Birra (@gr1mr3aver) + +#pragma once + +#include "gpio.h" +#include "qp_internal.h" + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Quantum Painter GC9107 configurables (add to your keyboard's config.h) + +#ifndef GC9107_NUM_DEVICES +/** + * @def This controls the maximum number of GC9107 devices that Quantum Painter can communicate with at any one time. + * Increasing this number allows for multiple displays to be used. + */ +# define GC9107_NUM_DEVICES 1 +#endif + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Quantum Painter GC9107 device factories + +#ifdef QUANTUM_PAINTER_GC9107_SPI_ENABLE +/** + * Factory method for an GC9107 SPI LCD device. + * + * @param panel_width[in] the width of the display panel + * @param panel_height[in] the height of the display panel + * @param chip_select_pin[in] the GPIO pin used for SPI chip select + * @param dc_pin[in] the GPIO pin used for D/C control + * @param reset_pin[in] the GPIO pin used for RST + * @param spi_divisor[in] the SPI divisor to use when communicating with the display + * @param spi_mode[in] the SPI mode to use when communicating with the display + * @return the device handle used with all drawing routines in Quantum Painter + */ +painter_device_t qp_gc9107_make_spi_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode); + +void qp_gc9107_set_backlight_level(uint8_t level); + +#endif // QUANTUM_PAINTER_GC9107_SPI_ENABLE diff --git a/drivers/painter/gc9107/qp_gc9107_opcodes.h b/drivers/painter/gc9107/qp_gc9107_opcodes.h new file mode 100644 index 000000000000..e1a2b01c614b --- /dev/null +++ b/drivers/painter/gc9107/qp_gc9107_opcodes.h @@ -0,0 +1,168 @@ +// Copyright 2024 Fernando Birra + +#pragma once + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Quantum Painter GC9107 command opcodes +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +#define GC9107_GET_ID_INFO 0x04 // Get ID information +#define GC9107_GET_STATUS 0x09 // Get status +#define GC9107_GET_POWER_MODE 0x0A // Get power mode +#define GC9107_GET_MADCTL 0x0B // Get MADCTL +#define GC9107_GET_PIXEL_FMT 0x0C // Get pixel format +#define GC9107_GET_IMAGE_FMT 0x0D // Get image format +#define GC9107_GET_SIGNAL_MODE 0x0E // Get signal mode +#define GC9107_GET_DIAG_RESULT 0x0F // Get self-diagnostic results +#define GC9107_CMD_SLEEP_ON 0x10 // Enter sleep mode +#define GC9107_CMD_SLEEP_OFF 0x11 // Exit sleep mode +#define GC9107_CMD_PARTIAL_ON 0x12 // Enter partial mode +#define GC9107_CMD_PARTIAL_OFF 0x13 // Exit partial mode +#define GC9107_CMD_INVERT_OFF 0x20 // Exit inverted mode +#define GC9107_CMD_INVERT_ON 0x21 // Enter inverted mode +#define GC9107_CMD_DISPLAY_OFF 0x28 // Disable display +#define GC9107_CMD_DISPLAY_ON 0x29 // Enable display +#define GC9107_SET_COL_ADDR 0x2A // Set column address +#define GC9107_SET_COL_ADDR 0x2A // Set column address (MSB(StartCol),LSB(StartCol),MSB(EndCol),LSB(EndCol) +#define GC9107_SET_ROW_ADDR 0x2B // Set row address (MSB(StartRow),LSB(StartRow),MSB(EndRow),LSB(EndRow) +#define GC9107_SET_MEM 0x2C // Set (write) memory +#define GC9107_SET_PARTIAL_AREA 0x30 // Set partial area (MSB(StartRow),LSB(StartRow),MSB(EndRow),LSB(EndRow) +#define GC9107_SET_VSCROLL 0x33 // Set vertical scroll MSB(TFA),LSB(TFA),MSB(VSA),LSB(VSA),MSB(BFA),LSB(BFA) +#define GC9107_CMD_TEARING_OFF 0x34 // Tearing line OFF +#define GC9107_CMD_TEARING_ON 0x35 // Tearing line ON +#define GC9107_SET_MEM_ACS_CTL 0x36 // Set mem access ctl +#define GC9107_SET_VSCROLL_ADDR 0x37 // Set vscroll start addr +#define GC9107_CMD_IDLE_OFF 0x38 // Exit idle mode +#define GC9107_CMD_IDLE_ON 0x39 // Enter idle mode +#define GC9107_SET_PIXEL_FORMAT 0x3A // Set pixel format +// Parameter values for +// GC9107_SET_PIXEL_FORMAT +# define PIXEL_FORMAT_12_BPP 0x01 // 12 bits per pixel +# define PIXEL_FORMAT_16_BPP 0x05 // 16 bits per pixel +# define PIXEL_FORMAT_18_BPP 0x06 // 18 bits per pixel +#define GC9107_SET_TEAR_SCANLINE 0x44 // Set tearing scanline (ScanLine[7:0]) +#define GC9107_GET_TEAR_SCANLINE 0x45 // Get tearing scanline (ScanLine[7:0]) +#define GC9107_SET_COMPLEMENT_RGB 0xAC // Set complement Principle RGB +// Parameter values for +// GC9107_SET_COMPLEMENT_RGB +# define COMPLEMENT_WITH_0 0x00 // R0 <- B0 <- 0, except if data is FFh +# define COMPLEMENT_WITH_1 0x40 // R0 <- B0 <- 1, except if data is 00h +# define COMPLEMENT_WITH_MSB 0x80 // R0 <- R5, B0 <- B5 +# define COMPLEMENT_WITH_LSB 0xC0 // R0 <- B0 <- G0 +#define GC9107_SET_BLANK_PORCH 0xAD // Set blank porch control, 0;front_porch[6:0],0;back_porch[6:0] +#define GC9107_SET_FUNCTION_CTL1 0xB1 // Set access to AVDD_VCL_CLK and VGH_VGL_CLK commands +// Parameter masks for +// GC9107_SET_FUNCTION_CTL1 +# define ALLOW_AVDD_VCL_CLK 0b00001000 // Allow AVDD_VCL_CLK command +#define GC9107_SET_FUNCTION_CTL2 0xB2 // Set access to VGH, VGH control commands +// Parameter masks for +// GC9107_SET_FUNCTION_CTL2 +# define ALLOW_SET_VGH 0b00000001 // Allow GC9107_SET_VGH +# define ALLOW_SET_VGL 0b00000010 // Allow GC9107_SET_VGL +# define ALLOW_SET_VGH_VGL_CLK 0b00000100 // Alloq GC9107_SET_VGH_VGL_CLK +#define GC9107_SET_FUNCTION_CTL3 0xB3 // Set access to Gamma control commands +// Parameter masks for +// GC9107_SET_FUNCTION_CTL3 +# define ALLOW_SET_GAMMA1 0b00000001 // Allow GC9107_SET_GAMMA1 +# define ALLOW_SET_GAMMA2 0b00000010 // Allow GC9107_SET_GAMMA2 +#define GC9107_SET_FUNCTION_CTL6 0xB6 // Set access to commands SET_FRAME_RATE, SET_COMPLEMENT_RGB and SET_BLANK_PORCH +// Parameter mask for +// GC9107_SET_FUNCTION_CTL6 +# define ALLOW_SET_FRAMERATE 0b000000001 // Allow GC9107_SET_FRAME_RATE +# define ALLOW_SET_COMPLEMENT_RGB 0b000010000 // Allow GC9107_SET_COMPLEMENT_RGB +# define ALLOW_SET_BLANK_PORCH 0b000100000 // Allow GFC9107_SET_BLANK_PORCH +#define GC9107_SET_DISPLAY_INVERSION 0xCB // Set Display Inversion control +#define GC9107_SET_CUSTOM_ID_INFO 0xD3 // Set customize display id information +#define GC9107_GET_ID1 0xDA // Get ID1 +#define GC9107_GET_ID2 0xDB // Get ID2 +#define GC9107_GET_ID3 0xDC // Get ID3 +#define GC9107_AVDD_VCL_CLK 0xE3 // AVDD_CLK +// Parameter values for AVDD_CLK_AD part (Most significant nibble) +# define AVDD_CLK_AD_2T 0x00 +# define AVDD_CLK_AD_3T 0x10 +# define AVDD_CLK_AD_4T 0x20 +# define AVDD_CLK_AD_5T 0x30 +# define AVDD_CLK_AD_6T 0x40 +# define AVDD_CLK_AD_7T 0x50 +# define AVDD_CLK_AD_8T 0x60 +# define AVDD_CLK_AD_9T 0x70 +// Parameter values for VCL_CLK_AD part (Least significant nibble) +# define VCL_CLK_AD_2T 0x00 +# define VCL_CLK_AD_3T 0x01 +# define VCL_CLK_AD_4T 0x02 +# define VCL_CLK_AD_5T 0x03 +# define VCL_CLK_AD_6T 0x04 +# define VCL_CLK_AD_7T 0x05 +# define VCL_CLK_AD_8T 0x06 +# define VCL_CLK_AD_9T 0x07 +#define GC9107_SET_VGH 0xE8 // Set VGH +// Parameter values for +// GC9107_SET_VGH +# define VGH_P100 0x20 // +10 V +# define VGH_P110 0x21 // +11 V +# define VGH_P120 0x22 // +12 V +# define VGH_P130 0x23 // +13 V +# define VGH_P140 0x24 // +14 V +# define VGH_P150 0x25 // +15 V +#define GC9107_SET_VGL 0xE9 // Set VGL +// Parameter values for +// GC9107_SET_VGL +# define VGL_N_075 0x40 // -7.5 V +# define VGL_N_085 0x41 // -8.5 V +# define VGL_N_095 0x42 // -9.5 V +# define VGL_N_100 0x43 // -10.0 V +# define VGL_N_105 0x44 // -10.5 V +# define VGL_N_110 0x45 // -11.0 V +# define VGL_N_120 0x46 // -12.0 V +# define VGL_N_130 0x47 // -13.0 V +#define GC9107_SET_VGH_VGL_CLK 0xEA // Set VGH and VGL clock divisors +// Parameter masks for +// GC9107_SET_VGH_VGL_CLK (VGH Divisor) +# define VGH_CLK_DIV_2 0x00 // Clock divisor = 2 -> 6.0 Mhz +# define VGH_CLK_DIV_3 0x10 // Clock divisor = 3 -> 4.0 Mhz +# define VGH_CLK_DIV_4 0x20 // Clock divisor = 4 -> 3.0 Mhz +# define VGH_CLK_DIV_5 0x30 // Clock divisor = 5 -> 2.4 Mhz +# define VGH_CLK_DIV_6 0x40 // Clock divisor = 6 -> 2.0 Mhz +# define VGH_CLK_DIV_7 0x50 // Clock divisor = 7 -> 1.7 Mhz +# define VGH_CLK_DIV_8 0x60 // Clock divisor = 8 -> 1.5 Mhz +# define VGH_CLK_DIV_9 0x70 // Clock divisor = 9 -> 1.3 Mhz +# define VGH_CLK_DIV_10 0x80 // Clock divisor = 10 -> 1.2 Mhz +# define VGH_CLK_DIV_12 0x90 // Clock divisor = 12 -> 1.0 Mhz +# define VGH_CLK_DIV_15 0xA0 // Clock divisor = 15 -> 0.8 Mhz +# define VGH_CLK_DIV_20 0xB0 // Clock divisor = 20 -> 0.6 Mhz +# define VGH_CLK_DIV_24 0xC0 // Clock divisor = 24 -> 0.5 Mhz +# define VGH_CLK_DIV_30 0xD0 // Clock divisor = 30 -> 0.4 Mhz +# define VGH_CLK_DIV_40 0xE0 // Clock divisor = 40 -> 0.3 Mhz +# define VGH_CLK_DIV_60 0xE0 // Clock divisor = 40 -> 0.2 Mhz +// Parameter masks for +// GC9107_SET_VGH_VGL_CLK (VGL Divisor) +# define VGL_CLK_DIV_2 0x00 // Clock divisor = 2 -> 6.0 Mhz +# define VGL_CLK_DIV_3 0x01 // Clock divisor = 3 -> 4.0 Mhz +# define VGL_CLK_DIV_4 0x02 // Clock divisor = 4 -> 3.0 Mhz +# define VGL_CLK_DIV_5 0x03 // Clock divisor = 5 -> 2.4 Mhz +# define VGL_CLK_DIV_6 0x04 // Clock divisor = 6 -> 2.0 Mhz +# define VGL_CLK_DIV_7 0x05 // Clock divisor = 7 -> 1.7 Mhz +# define VGL_CLK_DIV_8 0x06 // Clock divisor = 8 -> 1.5 Mhz +# define VGL_CLK_DIV_9 0x07 // Clock divisor = 9 -> 1.3 Mhz +# define VGL_CLK_DIV_10 0x08 // Clock divisor = 10 -> 1.2 Mhz +# define VGL_CLK_DIV_12 0x09 // Clock divisor = 12 -> 1.0 Mhz +# define VGL_CLK_DIV_15 0x0A // Clock divisor = 15 -> 0.8 Mhz +# define VGL_CLK_DIV_20 0x0B // Clock divisor = 20 -> 0.6 Mhz +# define VGL_CLK_DIV_24 0x0C // Clock divisor = 24 -> 0.5 Mhz +# define VGL_CLK_DIV_30 0x0D // Clock divisor = 30 -> 0.4 Mhz +# define VGL_CLK_DIV_40 0x0E // Clock divisor = 40 -> 0.3 Mhz +# define VGL_CLK_DIV_60 0x0E // Clock divisor = 40 -> 0.2 Mhz +#define GC9107_SET_GAMMA1 0xF0 // Set gamma 1 +#define GC9107_SET_GAMMA2 0xF1 // Set gamma 2 +#define GC9107_SET_INTER_REG_ENABLE1 0xFE // Enable Inter Register 1 +#define GC9107_SET_INTER_REG_ENABLE2 0xEF // Enable Inter Register 2 + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// MADCTL Flags +#define GC9107_MADCTL_MY 0b10000000 +#define GC9107_MADCTL_MX 0b01000000 +#define GC9107_MADCTL_MV 0b00100000 +#define GC9107_MADCTL_ML 0b00010000 +#define GC9107_MADCTL_RGB 0b00000000 +#define GC9107_MADCTL_BGR 0b00001000 +#define GC9107_MADCTL_MH 0b00000100 diff --git a/quantum/painter/qp.h b/quantum/painter/qp.h index 02acbf589a3a..820c418f43b7 100644 --- a/quantum/painter/qp.h +++ b/quantum/painter/qp.h @@ -539,6 +539,12 @@ int16_t qp_drawtext_recolor(painter_device_t device, uint16_t x, uint16_t y, pai # define GC9A01_NUM_DEVICES 0 #endif // QUANTUM_PAINTER_GC9A01_ENABLE +#ifdef QUANTUM_PAINTER_GC9107_ENABLE +# include "qp_gc9107.h" +#else // QUANTUM_PAINTER_GC9107_ENABLE +# define GC9107_NUM_DEVICES 0 +#endif // QUANTUM_PAINTER_GC9107_ENABLE + #ifdef QUANTUM_PAINTER_SSD1351_ENABLE # include "qp_ssd1351.h" #else // QUANTUM_PAINTER_SSD1351_ENABLE diff --git a/quantum/painter/qp_internal.c b/quantum/painter/qp_internal.c index 1f0f98179679..7d4a6430afe0 100644 --- a/quantum/painter/qp_internal.c +++ b/quantum/painter/qp_internal.c @@ -16,6 +16,7 @@ enum { + (ST7789_NUM_DEVICES) // ST7789 + (ST7735_NUM_DEVICES) // ST7735 + (GC9A01_NUM_DEVICES) // GC9A01 + + (GC9107_NUM_DEVICES) // GC9107 + (SSD1351_NUM_DEVICES) // SSD1351 + (SH1106_NUM_DEVICES) // SH1106 }; diff --git a/quantum/painter/rules.mk b/quantum/painter/rules.mk index d991a6d7423f..f17ce882f408 100644 --- a/quantum/painter/rules.mk +++ b/quantum/painter/rules.mk @@ -14,6 +14,7 @@ VALID_QUANTUM_PAINTER_DRIVERS := \ st7735_spi \ st7789_spi \ gc9a01_spi \ + gc9107_spi \ ssd1351_spi \ sh1106_i2c \ sh1106_spi @@ -136,6 +137,17 @@ define handle_quantum_painter_driver $(DRIVER_PATH)/painter/tft_panel/qp_tft_panel.c \ $(DRIVER_PATH)/painter/gc9a01/qp_gc9a01.c + else ifeq ($$(strip $$(CURRENT_PAINTER_DRIVER)),gc9107_spi) + QUANTUM_PAINTER_NEEDS_COMMS_SPI := yes + QUANTUM_PAINTER_NEEDS_COMMS_SPI_DC_RESET := yes + OPT_DEFS += -DQUANTUM_PAINTER_GC9107_ENABLE -DQUANTUM_PAINTER_GC9107_SPI_ENABLE + COMMON_VPATH += \ + $(DRIVER_PATH)/painter/tft_panel \ + $(DRIVER_PATH)/painter/gc9107 + SRC += \ + $(DRIVER_PATH)/painter/tft_panel/qp_tft_panel.c \ + $(DRIVER_PATH)/painter/gc9107/qp_gc9107.c + else ifeq ($$(strip $$(CURRENT_PAINTER_DRIVER)),ssd1351_spi) QUANTUM_PAINTER_NEEDS_COMMS_SPI := yes QUANTUM_PAINTER_NEEDS_COMMS_SPI_DC_RESET := yes From bc476b10fad4d8a3adc68d7a4c59d9978cccb782 Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Sun, 4 Feb 2024 00:09:36 +0000 Subject: [PATCH 02/35] Added copyright --- drivers/painter/gc9107/qp_gc9107.c | 17 +++++++++-------- drivers/painter/gc9107/qp_gc9107.h | 3 ++- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/drivers/painter/gc9107/qp_gc9107.c b/drivers/painter/gc9107/qp_gc9107.c index 2d15d0c9b76a..92e2a77afdd5 100644 --- a/drivers/painter/gc9107/qp_gc9107.c +++ b/drivers/painter/gc9107/qp_gc9107.c @@ -1,4 +1,5 @@ // Copyright 2024 Fernando Birra +// SPDX-License-Identifier: GPL-2.0-or-later #include "qp_internal.h" #include "qp_comms.h" @@ -28,14 +29,14 @@ __attribute__((weak)) bool qp_gc9107_init(painter_device_t device, painter_rotat GC9107_SET_FUNCTION_CTL2, 0, 1, ALLOW_SET_VGH | ALLOW_SET_VGL | ALLOW_SET_VGH_VGL_CLK, GC9107_SET_FUNCTION_CTL3, 0, 1, ALLOW_SET_GAMMA1 | ALLOW_SET_GAMMA2, GC9107_SET_FUNCTION_CTL6, 0, 1, ALLOW_SET_FRAMERATE | ALLOW_SET_COMPLEMENT_RGB | ALLOW_SET_BLANK_PORCH, - // The following commands are required (tested on 0.85" 128x128 IPS display) - - GC9107_CMD_TEARING_OFF, 0, 0, - GC9107_SET_VGH, 0, 1, 0x24, - GC9107_SET_VGL, 0, 1, 0x48, - GC9107_SET_VGH_VGL_CLK, 0, 1, VGH_CLK_DIV_4 | VGL_CLK_DIV_4, - GC9107_SET_GAMMA1, 0, 14, 0x1F, 0x28, 0x04, 0x3E, 0x2A, 0x2E, 0x20, 0x00, 0x0C, 0x06, 0x00, 0x1C, 0x1F, 0x0F, - GC9107_SET_GAMMA2, 0, 14, 0x00, 0x2D, 0x2F, 0x3F, 0x6F, 0x1C, 0x0B, 0x00, 0x00, 0x00, 0x07, 0x0D, 0x11, 0x0F, + + // The following commands were found on LovyanGFX (https://github.com/lovyan03/LovyanGFX) but they are not required + // GC9107_CMD_TEARING_OFF, 0, 0, + // GC9107_SET_VGH, 0, 1, 0x24, + // GC9107_SET_VGL, 0, 1, 0x48, + // GC9107_SET_VGH_VGL_CLK, 0, 1, VGH_CLK_DIV_4 | VGL_CLK_DIV_4, + // GC9107_SET_GAMMA1, 0, 14, 0x1F, 0x28, 0x04, 0x3E, 0x2A, 0x2E, 0x20, 0x00, 0x0C, 0x06, 0x00, 0x1C, 0x1F, 0x0F, + // GC9107_SET_GAMMA2, 0, 14, 0x00, 0x2D, 0x2F, 0x3F, 0x6F, 0x1C, 0x0B, 0x00, 0x00, 0x00, 0x07, 0x0D, 0x11, 0x0F, GC9107_SET_PIXEL_FORMAT, 0, 1, PIXEL_FORMAT_16_BPP, GC9107_CMD_INVERT_ON, 0, 0, diff --git a/drivers/painter/gc9107/qp_gc9107.h b/drivers/painter/gc9107/qp_gc9107.h index a7163e6a0da0..3b1e978157b9 100644 --- a/drivers/painter/gc9107/qp_gc9107.h +++ b/drivers/painter/gc9107/qp_gc9107.h @@ -1,4 +1,5 @@ // Copyright 2024 Fernando Birra (@gr1mr3aver) +// SPDX-License-Identifier: GPL-2.0-or-later #pragma once @@ -34,6 +35,6 @@ */ painter_device_t qp_gc9107_make_spi_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode); -void qp_gc9107_set_backlight_level(uint8_t level); +void qp_gc9107_set_backlight_level(uint16_t level); #endif // QUANTUM_PAINTER_GC9107_SPI_ENABLE From 34fbc57d81bca9ed2995df72a4daa5f857cbaf64 Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Sun, 4 Feb 2024 00:10:26 +0000 Subject: [PATCH 03/35] updated chibios-contrib --- lib/chibios-contrib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/chibios-contrib b/lib/chibios-contrib index 9d7a7f904ed1..da78eb3759b8 160000 --- a/lib/chibios-contrib +++ b/lib/chibios-contrib @@ -1 +1 @@ -Subproject commit 9d7a7f904ed135e3459cf6d602db56a26872df6b +Subproject commit da78eb3759b8d1779b237657c7667baa4aa95ca1 From c6db6cf9f89e772099e7d9a1036126dda40401bb Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Fri, 2 Feb 2024 21:01:45 +0000 Subject: [PATCH 04/35] Added one key pico based keyboard to test GC9107 driver --- keyboards/fpb/rp2040_tft/config.h | 52 + .../graphics/Apple-Orchard-128x160.qgf.c | 2576 +++++++++++++++++ .../graphics/Apple-Orchard-128x160.qgf.h | 11 + .../fpb/rp2040_tft/graphics/qmklogo.qgf.c | 682 +++++ .../fpb/rp2040_tft/graphics/qmklogo.qgf.h | 11 + keyboards/fpb/rp2040_tft/halconf.h | 15 + keyboards/fpb/rp2040_tft/info.json | 51 + .../fpb/rp2040_tft/keymaps/default/keymap.c | 15 + .../rp2040_tft/keymaps/default/onekey.json | 24 + .../fpb/rp2040_tft/keymaps/default/rules.mk | 1 + keyboards/fpb/rp2040_tft/mcuconf.h | 18 + keyboards/fpb/rp2040_tft/qmklogo.qgf.c | 682 +++++ keyboards/fpb/rp2040_tft/qmklogo.qgf.h | 11 + keyboards/fpb/rp2040_tft/readme.md | 13 + keyboards/fpb/rp2040_tft/rp2040_tft.c | 65 + keyboards/fpb/rp2040_tft/rp2040_tft.h | 12 + keyboards/fpb/rp2040_tft/rules.mk | 15 + 17 files changed, 4254 insertions(+) create mode 100644 keyboards/fpb/rp2040_tft/config.h create mode 100644 keyboards/fpb/rp2040_tft/graphics/Apple-Orchard-128x160.qgf.c create mode 100644 keyboards/fpb/rp2040_tft/graphics/Apple-Orchard-128x160.qgf.h create mode 100644 keyboards/fpb/rp2040_tft/graphics/qmklogo.qgf.c create mode 100644 keyboards/fpb/rp2040_tft/graphics/qmklogo.qgf.h create mode 100644 keyboards/fpb/rp2040_tft/halconf.h create mode 100644 keyboards/fpb/rp2040_tft/info.json create mode 100644 keyboards/fpb/rp2040_tft/keymaps/default/keymap.c create mode 100644 keyboards/fpb/rp2040_tft/keymaps/default/onekey.json create mode 100644 keyboards/fpb/rp2040_tft/keymaps/default/rules.mk create mode 100644 keyboards/fpb/rp2040_tft/mcuconf.h create mode 100644 keyboards/fpb/rp2040_tft/qmklogo.qgf.c create mode 100644 keyboards/fpb/rp2040_tft/qmklogo.qgf.h create mode 100644 keyboards/fpb/rp2040_tft/readme.md create mode 100644 keyboards/fpb/rp2040_tft/rp2040_tft.c create mode 100644 keyboards/fpb/rp2040_tft/rp2040_tft.h create mode 100644 keyboards/fpb/rp2040_tft/rules.mk diff --git a/keyboards/fpb/rp2040_tft/config.h b/keyboards/fpb/rp2040_tft/config.h new file mode 100644 index 000000000000..b3e2ced62e2c --- /dev/null +++ b/keyboards/fpb/rp2040_tft/config.h @@ -0,0 +1,52 @@ +// Copyright 2022 Stefan Kerkmann +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + + +#define DEBUG_MATRIX_SCAN_RATE + +#define QMK_WAITING_TEST_BUSY_PIN GP8 +#define QMK_WAITING_TEST_YIELD_PIN GP9 + +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP25 +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U + +#define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_B +#define BACKLIGHT_PWM_DRIVER PWMD6 + +#define ADC_PIN GP26 + + +//#define WS2812_DI_PIN GP23 +//#ifdef WS2812_DI_PIN +# define RGBLED_NUM 1 +# define RGBLIGHT_HUE_STEP 8 +# define RGBLIGHT_SAT_STEP 8 +# define RGBLIGHT_VAL_STEP 8 +# define RGBLIGHT_LIMIT_VAL 255 +# define RGBLIGHT_SLEEP +/*== all animations enable ==*/ +# define RGBLIGHT_ANIMATIONS +//#endif + +#define RGBLIGHT_EFFECT_BREATHING +#define RGBLIGHT_EFFECT_RAINBOW_MOOD +#define RGBLIGHT_EFFECT_RAINBOW_SWIRL +#define RGBLIGHT_EFFECT_SNAKE +#define RGBLIGHT_EFFECT_KNIGHT +#define RGBLIGHT_EFFECT_CHRISTMAS +#define RGBLIGHT_EFFECT_STATIC_GRADIENT +#define RGBLIGHT_EFFECT_RGB_TEST +#define RGBLIGHT_EFFECT_ALTERNATING +#define RGBLIGHT_EFFECT_TWINKLE +#define RGBLIGHT_EFFECT_CYCLE_ALL + +#define SPI_DRIVER SPID1 +#define SPI_SCK_PIN GP10 +#define SPI_MOSI_PIN GP11 +//#define SPI_MISO_PIN GP12 + +#define QUANTUM_PAINTER_DISPLAY_TIMEOUT 0 +#define QUANTUM_PAINTER_SUPPORTS_NATIVE_COLORS TRUE diff --git a/keyboards/fpb/rp2040_tft/graphics/Apple-Orchard-128x160.qgf.c b/keyboards/fpb/rp2040_tft/graphics/Apple-Orchard-128x160.qgf.c new file mode 100644 index 000000000000..e655bf76d4c7 --- /dev/null +++ b/keyboards/fpb/rp2040_tft/graphics/Apple-Orchard-128x160.qgf.c @@ -0,0 +1,2576 @@ +// Copyright 2024 QMK -- generated source code only, image retains original copyright +// SPDX-License-Identifier: GPL-2.0-or-later + +// This file was auto-generated by `qmk painter-convert-graphics -i Apple-Orchard-128x160.jpg -f rgb565` + +#include + +const uint32_t gfx_Apple_Orchard_128x160_length = 41008; + +// clang-format off +const uint8_t gfx_Apple_Orchard_128x160[41008] = { + 0x00, 0xFF, 0x12, 0x00, 0x00, 0x51, 0x47, 0x46, 0x01, 0x30, 0xA0, 0x00, 0x00, 0xCF, 0x5F, 0xFF, + 0xFF, 0x80, 0x00, 0xA0, 0x00, 0x01, 0x00, 0x01, 0xFE, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x02, 0xFD, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0xFF, 0xE8, 0x03, 0x05, 0xFA, 0x00, 0xA0, 0x00, + 0x3A, 0x00, 0x3A, 0x20, 0x3A, 0x40, 0x4A, 0xA0, 0x5B, 0x03, 0x73, 0x88, 0x7B, 0xAA, 0x63, 0x06, + 0x31, 0xE0, 0x31, 0xC0, 0x31, 0x80, 0x31, 0x80, 0x31, 0xC0, 0x31, 0xC0, 0x39, 0xE0, 0x42, 0x20, + 0x5A, 0xE1, 0x42, 0x41, 0x3A, 0x20, 0x42, 0x60, 0x5A, 0xE0, 0x6B, 0x84, 0x52, 0xC1, 0x4A, 0x81, + 0x5A, 0xE0, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x00, 0x52, 0xE0, 0x52, 0xC0, + 0x52, 0xC0, 0x4A, 0xA0, 0x52, 0xA1, 0x4A, 0xA0, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0x60, 0x4A, 0xA0, + 0x4A, 0xA0, 0x4A, 0xC0, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x53, 0x00, 0x5B, 0x00, 0x5B, 0x20, + 0x5B, 0x20, 0x42, 0x60, 0x21, 0x60, 0x19, 0x20, 0x19, 0x20, 0x21, 0x40, 0x21, 0x20, 0x21, 0x40, + 0x21, 0x60, 0x21, 0x60, 0x29, 0x60, 0x29, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xE0, + 0x31, 0xE0, 0x4A, 0x81, 0x4A, 0x40, 0x42, 0x20, 0x42, 0x40, 0x3A, 0x40, 0x42, 0x60, 0x42, 0x60, + 0x52, 0xE1, 0x63, 0x60, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x20, 0x5A, 0xE0, + 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x00, 0x32, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, + 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x32, 0x40, 0x32, 0x40, + 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x60, + 0x42, 0x80, 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, + 0x63, 0x20, 0x52, 0xE0, 0x52, 0xE0, 0x4A, 0xE0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xE0, 0x4A, 0xE0, + 0x5B, 0x01, 0x5B, 0x00, 0x5B, 0x00, 0x6B, 0x61, 0x63, 0x40, 0x63, 0x80, 0x4A, 0xC0, 0x42, 0xC0, + 0x52, 0xE0, 0x52, 0xC1, 0x42, 0x80, 0x4A, 0x80, 0x5A, 0xE2, 0x83, 0xEA, 0x9C, 0x8E, 0x83, 0xEA, + 0x42, 0x42, 0x29, 0x80, 0x31, 0x80, 0x31, 0xA0, 0x31, 0xC0, 0x31, 0xC0, 0x31, 0xC0, 0x39, 0xE0, + 0x4A, 0x40, 0x39, 0xE0, 0x31, 0xE0, 0x3A, 0x00, 0x42, 0x40, 0x4A, 0xC0, 0x42, 0x20, 0x42, 0x40, + 0x52, 0xC0, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x00, 0x5B, 0x20, 0x5B, 0x00, 0x52, 0xE0, 0x52, 0xC0, + 0x52, 0xC0, 0x4A, 0xC0, 0x4A, 0xA0, 0x4A, 0x80, 0x42, 0x60, 0x52, 0xA0, 0x4A, 0x40, 0x42, 0x80, + 0x4A, 0xA0, 0x4A, 0xC0, 0x52, 0xC0, 0x52, 0xE0, 0x53, 0x00, 0x53, 0x00, 0x5B, 0x00, 0x5B, 0x20, + 0x5B, 0x00, 0x3A, 0x20, 0x21, 0x40, 0x21, 0x20, 0x19, 0x20, 0x19, 0x20, 0x21, 0x20, 0x21, 0x40, + 0x21, 0x40, 0x21, 0x60, 0x21, 0x60, 0x29, 0x80, 0x29, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, + 0x31, 0xC0, 0x31, 0xE0, 0x4A, 0x60, 0x4A, 0x60, 0x4A, 0x60, 0x42, 0x40, 0x3A, 0x40, 0x42, 0x40, + 0x3A, 0x40, 0x4A, 0xC0, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x01, 0x52, 0xC0, 0x42, 0x60, + 0x32, 0x00, 0x32, 0x00, 0x31, 0xE0, 0x32, 0x00, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, + 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x40, + 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x42, 0x60, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, + 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xC0, + 0x52, 0xC0, 0x5B, 0x40, 0x53, 0x00, 0x53, 0x01, 0x52, 0xE0, 0x4A, 0xE0, 0x4A, 0xC0, 0x4A, 0xC0, + 0x53, 0x00, 0x5B, 0x40, 0x53, 0x00, 0x63, 0x41, 0x63, 0x40, 0x73, 0xE1, 0x4A, 0xC0, 0x42, 0xA0, + 0x63, 0x40, 0x63, 0x62, 0x63, 0x62, 0x5B, 0x20, 0x63, 0x22, 0x8C, 0x2A, 0xAD, 0x10, 0x9C, 0xAF, + 0x4A, 0x83, 0x31, 0xA0, 0x31, 0xA1, 0x31, 0xC0, 0x31, 0xC0, 0x31, 0xC0, 0x31, 0xA0, 0x3A, 0x00, + 0x39, 0xC0, 0x29, 0x80, 0x29, 0xC0, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x20, 0x29, 0x80, 0x42, 0x01, + 0x4A, 0x60, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x00, 0x5A, 0xE0, 0x5A, 0xE0, 0x52, 0xE0, + 0x52, 0xC0, 0x4A, 0xC0, 0x4A, 0xA0, 0x4A, 0x80, 0x42, 0x40, 0x5A, 0x80, 0x52, 0x41, 0x4A, 0xA0, + 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xC0, 0x53, 0x00, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x20, + 0x52, 0xE0, 0x31, 0xC0, 0x21, 0x40, 0x21, 0x40, 0x19, 0x20, 0x21, 0x20, 0x21, 0x40, 0x21, 0x40, + 0x21, 0x40, 0x21, 0x40, 0x21, 0x60, 0x21, 0x60, 0x29, 0x80, 0x29, 0x80, 0x29, 0xA0, 0x29, 0xA0, + 0x29, 0xA0, 0x29, 0xC0, 0x31, 0xE0, 0x52, 0xA0, 0x52, 0x60, 0x4A, 0x40, 0x42, 0x40, 0x3A, 0x40, + 0x32, 0x00, 0x42, 0x61, 0x5B, 0x21, 0x52, 0xA0, 0x4A, 0x80, 0x4A, 0x40, 0x3A, 0x20, 0x31, 0xE0, + 0x31, 0xC0, 0x31, 0xC0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, + 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, + 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0xA0, 0x42, 0xA0, + 0x42, 0xA0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, + 0x4A, 0xC0, 0x52, 0xE0, 0x63, 0x40, 0x5B, 0x00, 0x53, 0x00, 0x53, 0x00, 0x53, 0x00, 0x53, 0x00, + 0x53, 0x00, 0x53, 0x20, 0x5B, 0x20, 0x63, 0x40, 0x63, 0x40, 0x63, 0x80, 0x42, 0x80, 0x42, 0xA0, + 0x52, 0xE0, 0x63, 0x41, 0x63, 0x41, 0x53, 0x00, 0x52, 0xC0, 0x73, 0xA5, 0x9C, 0xAC, 0x9C, 0xCF, + 0x5B, 0x04, 0x31, 0xA0, 0x31, 0xA0, 0x31, 0xC0, 0x31, 0xC0, 0x31, 0xC0, 0x39, 0xE0, 0x31, 0xC0, + 0x39, 0xE0, 0x29, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x40, 0x29, 0xA0, 0x18, 0xC0, 0x31, 0x61, + 0x42, 0x20, 0x5A, 0xE0, 0x5A, 0xE0, 0x5A, 0xE0, 0x5B, 0x00, 0x52, 0xE0, 0x5A, 0xE0, 0x52, 0xE0, + 0x52, 0xC0, 0x4A, 0xC0, 0x4A, 0xA0, 0x4A, 0x60, 0x42, 0x00, 0x52, 0x20, 0x62, 0x62, 0x52, 0xC0, + 0x52, 0xC0, 0x52, 0xC0, 0x52, 0xC0, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x00, + 0x4A, 0xA0, 0x29, 0xA0, 0x29, 0x60, 0x21, 0x40, 0x21, 0x40, 0x21, 0x20, 0x21, 0x20, 0x21, 0x40, + 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x60, 0x21, 0x60, 0x29, 0x80, 0x29, 0x80, 0x29, 0x80, + 0x29, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x31, 0xE0, 0x4A, 0x60, 0x4A, 0x60, 0x4A, 0x80, 0x42, 0x60, + 0x32, 0x00, 0x3A, 0x00, 0x4A, 0x80, 0x3A, 0x00, 0x31, 0xA0, 0x31, 0xC0, 0x31, 0xC0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x20, + 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, + 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x42, 0x80, 0x42, 0x80, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, + 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, + 0x4A, 0xE0, 0x4A, 0xC0, 0x52, 0xC0, 0x5B, 0x40, 0x53, 0x00, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, + 0x4A, 0xE0, 0x5B, 0x20, 0x53, 0x00, 0x5B, 0x20, 0x5B, 0x00, 0x6B, 0xA1, 0x4A, 0xC0, 0x42, 0x80, + 0x42, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x42, 0x60, 0x42, 0x60, 0x52, 0xC0, 0x6B, 0x85, 0x7B, 0xE9, + 0x52, 0xC3, 0x31, 0xC0, 0x29, 0x80, 0x31, 0xC0, 0x31, 0xE0, 0x31, 0xC0, 0x3A, 0x00, 0x3A, 0x00, + 0x31, 0xC0, 0x29, 0xA0, 0x31, 0xA0, 0x31, 0xA0, 0x21, 0x60, 0x21, 0x60, 0x19, 0x00, 0x21, 0x20, + 0x3A, 0x20, 0x52, 0xE0, 0x5A, 0xE0, 0x5A, 0xE0, 0x5B, 0x00, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, + 0x52, 0xC0, 0x52, 0xE0, 0x4A, 0xA0, 0x4A, 0x60, 0x39, 0xC0, 0x49, 0xC0, 0x6A, 0xA4, 0x5A, 0x80, + 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x00, 0x5A, 0xE0, + 0x3A, 0x40, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x40, 0x21, 0x40, 0x21, 0x20, 0x19, 0x20, 0x21, 0x20, + 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x60, 0x21, 0x60, 0x29, 0x80, + 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x31, 0xE0, 0x52, 0x80, 0x4A, 0x60, 0x4A, 0x80, + 0x42, 0x40, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x61, 0x29, 0xA1, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, + 0x29, 0xA0, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xE0, 0x32, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x20, 0x3A, 0x20, 0x3A, 0x20, + 0x3A, 0x40, 0x3A, 0x60, 0x42, 0x80, 0x42, 0x80, 0x42, 0xA0, 0x42, 0xA0, 0x4A, 0xC0, 0x4A, 0xC0, + 0x4A, 0xC0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xC0, + 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x52, 0xE0, 0x63, 0x40, 0x52, 0xE0, 0x52, 0xC0, 0x4A, 0xC0, + 0x4A, 0xC0, 0x53, 0x00, 0x5B, 0x41, 0x53, 0x00, 0x53, 0x00, 0x5B, 0x20, 0x5B, 0x40, 0x42, 0x80, + 0x42, 0x60, 0x42, 0x40, 0x42, 0x20, 0x42, 0x40, 0x42, 0x60, 0x42, 0x60, 0x4A, 0xA0, 0x5B, 0x01, + 0x4A, 0x81, 0x29, 0xA0, 0x29, 0xA0, 0x31, 0xC0, 0x31, 0xC0, 0x5A, 0xE4, 0x6B, 0x66, 0x42, 0x00, + 0x31, 0xC0, 0x31, 0xC0, 0x39, 0xE0, 0x52, 0x61, 0x42, 0x21, 0x21, 0x60, 0x21, 0x80, 0x29, 0xA0, + 0x3A, 0x00, 0x4A, 0xA0, 0x52, 0xC0, 0x52, 0xC0, 0x5A, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, + 0x5A, 0xE0, 0x52, 0xE0, 0x52, 0xC0, 0x4A, 0x80, 0x31, 0xA0, 0x41, 0xA0, 0x6A, 0x84, 0x5A, 0x41, + 0x5A, 0xE0, 0x5A, 0xE0, 0x5A, 0xE0, 0x5A, 0xE0, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x00, 0x52, 0xC0, + 0x31, 0xE0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x60, 0x21, 0x40, 0x21, 0x40, 0x19, 0x00, 0x21, 0x20, + 0x21, 0x20, 0x21, 0x20, 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x60, + 0x21, 0x41, 0x21, 0x40, 0x21, 0x80, 0x19, 0x40, 0x21, 0x80, 0x31, 0xE0, 0x4A, 0x60, 0x4A, 0x60, + 0x4A, 0x60, 0x42, 0x40, 0x3A, 0x20, 0x3A, 0x80, 0x29, 0xC0, 0x19, 0x60, 0x21, 0x60, 0x21, 0x60, + 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x31, 0xC0, 0x31, 0xE0, + 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x3A, 0x20, 0x3A, 0x20, + 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x80, 0x42, 0x80, 0x42, 0xA0, 0x42, 0xA0, 0x4A, 0xC0, 0x4A, 0xC0, + 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xC0, 0x4A, 0xC0, + 0x4A, 0xA0, 0x42, 0xA0, 0x42, 0xC0, 0x4A, 0xA0, 0x52, 0xC0, 0x63, 0x41, 0x5B, 0x00, 0x53, 0x01, + 0x53, 0x00, 0x4A, 0xE0, 0x4A, 0xC0, 0x52, 0xE0, 0x52, 0xE0, 0x5B, 0x20, 0x5B, 0x40, 0x3A, 0x60, + 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x40, 0x42, 0x60, 0x3A, 0x40, 0x42, 0x60, 0x52, 0xC0, + 0x4A, 0xA0, 0x31, 0xE0, 0x29, 0xA0, 0x31, 0xE0, 0x39, 0xC0, 0x52, 0x82, 0x52, 0x82, 0x42, 0x00, + 0x31, 0xC0, 0x39, 0xE0, 0x5A, 0xC2, 0x83, 0xE7, 0x73, 0x86, 0x29, 0xC0, 0x21, 0xA0, 0x29, 0xA0, + 0x31, 0xC0, 0x3A, 0x40, 0x4A, 0xA0, 0x52, 0xA0, 0x52, 0xC0, 0x5A, 0xE0, 0x52, 0xC0, 0x52, 0xE0, + 0x52, 0xE0, 0x52, 0xC0, 0x52, 0xA0, 0x4A, 0xA0, 0x29, 0x80, 0x39, 0x40, 0x62, 0x22, 0x72, 0x64, + 0x52, 0xC0, 0x5A, 0xE0, 0x52, 0xE0, 0x5A, 0xE0, 0x5A, 0xE0, 0x5B, 0x20, 0x63, 0x20, 0x52, 0xA0, + 0x31, 0xE0, 0x29, 0xC0, 0x29, 0x80, 0x29, 0x80, 0x21, 0x60, 0x21, 0x40, 0x19, 0x20, 0x19, 0x20, + 0x19, 0x20, 0x19, 0x20, 0x21, 0x20, 0x21, 0x20, 0x21, 0x20, 0x19, 0x20, 0x21, 0x40, 0x21, 0x40, + 0x19, 0x40, 0x21, 0x40, 0x19, 0x20, 0x21, 0x40, 0x19, 0x20, 0x21, 0x40, 0x31, 0xE0, 0x4A, 0x40, + 0x4A, 0x40, 0x42, 0x60, 0x42, 0x40, 0x3A, 0x40, 0x3A, 0x20, 0x19, 0x20, 0x19, 0x20, 0x21, 0x41, + 0x19, 0x20, 0x19, 0x40, 0x19, 0x40, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x20, 0x32, 0x20, + 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x42, 0x80, 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xC0, 0x4A, 0xC0, + 0x4A, 0xC0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xC0, 0x4A, 0xC0, 0x42, 0xA0, + 0x4A, 0xA0, 0x4A, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x4A, 0xA0, 0x5B, 0x20, 0x52, 0xE0, + 0x52, 0xE0, 0x52, 0xE0, 0x53, 0x00, 0x4A, 0xC0, 0x53, 0x00, 0x5B, 0x21, 0x5B, 0x60, 0x42, 0x60, + 0x42, 0x60, 0x3A, 0x40, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x42, 0x60, 0x4A, 0x80, + 0x4A, 0x80, 0x3A, 0x20, 0x31, 0xC0, 0x29, 0xA0, 0x31, 0xA0, 0x52, 0x82, 0x4A, 0x40, 0x4A, 0x20, + 0x39, 0xE0, 0x39, 0xA0, 0x63, 0x02, 0x8B, 0xC8, 0x6B, 0x46, 0x29, 0xA0, 0x21, 0x60, 0x21, 0xA0, + 0x29, 0xA0, 0x32, 0x00, 0x4A, 0x80, 0x4A, 0x80, 0x52, 0xC0, 0x52, 0xE0, 0x52, 0xC0, 0x52, 0xE0, + 0x52, 0xE0, 0x52, 0xC0, 0x52, 0xA0, 0x52, 0xE0, 0x29, 0x80, 0x29, 0x00, 0x59, 0xA1, 0x82, 0xC7, + 0x52, 0xA0, 0x5A, 0xE0, 0x5A, 0xC0, 0x5A, 0xE0, 0x5B, 0x00, 0x63, 0x40, 0x63, 0x41, 0x52, 0xA0, + 0x32, 0x00, 0x29, 0xC0, 0x29, 0x80, 0x29, 0xA0, 0x21, 0x60, 0x21, 0x40, 0x21, 0x20, 0x19, 0x00, + 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, + 0x11, 0x20, 0x19, 0x20, 0x21, 0x20, 0x19, 0x00, 0x19, 0x20, 0x19, 0x00, 0x19, 0x20, 0x3A, 0x01, + 0x42, 0x60, 0x4A, 0x60, 0x42, 0x40, 0x42, 0x00, 0x52, 0xC2, 0x21, 0x61, 0x10, 0xE0, 0x11, 0x00, + 0x19, 0x00, 0x19, 0x00, 0x19, 0x20, 0x19, 0x40, 0x21, 0x40, 0x21, 0x60, 0x21, 0x80, 0x29, 0xA0, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, + 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x80, 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xA0, 0x4A, 0xC0, + 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x42, 0xA0, + 0x42, 0xA0, 0x42, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x4A, 0xA0, 0x63, 0x20, + 0x53, 0x00, 0x53, 0x00, 0x53, 0x00, 0x53, 0x00, 0x53, 0x20, 0x5B, 0x21, 0x53, 0x00, 0x3A, 0x60, + 0x42, 0x40, 0x42, 0x40, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x20, 0x42, 0x40, 0x42, 0x60, 0x42, 0x80, + 0x4A, 0x80, 0x3A, 0x40, 0x32, 0x00, 0x31, 0xE0, 0x39, 0xC0, 0x52, 0xA1, 0x4A, 0x40, 0x42, 0x00, + 0x39, 0x80, 0x29, 0xC0, 0x4A, 0x40, 0x83, 0x87, 0x73, 0x66, 0x32, 0x00, 0x21, 0x60, 0x21, 0x60, + 0x21, 0xA0, 0x31, 0xE0, 0x42, 0x40, 0x4A, 0x80, 0x52, 0xA0, 0x52, 0xE0, 0x52, 0xE0, 0x4A, 0xC0, + 0x52, 0xC0, 0x52, 0xA0, 0x4A, 0x80, 0x4A, 0xC0, 0x39, 0xE0, 0x18, 0x80, 0x49, 0x62, 0x72, 0x43, + 0x62, 0x61, 0x53, 0x00, 0x5A, 0xE0, 0x5A, 0xE0, 0x63, 0x20, 0x73, 0x81, 0x6B, 0x83, 0x42, 0x61, + 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x40, 0x21, 0x20, 0x19, 0x00, + 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, + 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x11, 0x00, 0x19, 0x00, 0x19, 0x00, + 0x42, 0x40, 0x4A, 0x80, 0x42, 0x40, 0x4A, 0x80, 0x52, 0xC1, 0x63, 0x48, 0x10, 0xE0, 0x08, 0xC0, + 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x11, 0x00, 0x21, 0x20, 0x19, 0x20, 0x21, 0x60, 0x21, 0x80, + 0x21, 0x60, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x32, 0x00, 0x32, 0x00, + 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x42, 0x60, 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xA0, 0x4A, 0xC0, + 0x42, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xE0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x42, 0xA0, + 0x42, 0xA0, 0x42, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x40, 0x42, 0x60, 0x42, 0x60, + 0x5B, 0x60, 0x5B, 0x20, 0x5B, 0x00, 0x5B, 0x00, 0x53, 0x21, 0x5B, 0x41, 0x5B, 0x40, 0x3A, 0x40, + 0x42, 0x20, 0x42, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x42, 0x40, 0x42, 0x40, 0x42, 0x60, + 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, 0x39, 0xE0, 0x4A, 0x60, 0x42, 0x20, 0x39, 0xE0, + 0x31, 0xC0, 0x29, 0xA0, 0x39, 0xE0, 0x6B, 0x03, 0x7B, 0xA6, 0x42, 0x21, 0x19, 0x60, 0x21, 0x40, + 0x21, 0x60, 0x29, 0xA0, 0x3A, 0x20, 0x42, 0x60, 0x52, 0xA0, 0x52, 0xC0, 0x52, 0xC0, 0x4A, 0xC0, + 0x52, 0xC0, 0x5A, 0xC0, 0x4A, 0x80, 0x4A, 0xA0, 0x42, 0x40, 0x10, 0x40, 0x30, 0xC0, 0x7A, 0x64, + 0x6A, 0x83, 0x5A, 0xE0, 0x5B, 0x00, 0x5A, 0xE0, 0x6B, 0x40, 0x84, 0x04, 0x63, 0x62, 0x42, 0x41, + 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x60, 0x21, 0x20, 0x19, 0x00, + 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x18, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x18, 0xE0, 0x18, 0xE0, + 0x18, 0xE0, 0x18, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, + 0x21, 0x00, 0x42, 0x80, 0x4A, 0x81, 0x42, 0x40, 0x42, 0x40, 0x8C, 0x6A, 0x42, 0x46, 0x10, 0xE0, + 0x08, 0xA0, 0x10, 0xC0, 0x11, 0x00, 0x11, 0x00, 0x10, 0xE0, 0x19, 0x20, 0x21, 0x40, 0x19, 0x60, + 0x21, 0x60, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, 0x32, 0x00, + 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x42, 0x60, 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xA0, + 0x42, 0xC0, 0x42, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xA0, 0x42, 0xA0, + 0x42, 0xA0, 0x42, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, + 0x42, 0x81, 0x5B, 0x20, 0x5B, 0x00, 0x5B, 0x01, 0x53, 0x20, 0x5B, 0x40, 0x5B, 0x40, 0x3A, 0x40, + 0x4A, 0x20, 0x42, 0x20, 0x42, 0x20, 0x42, 0x40, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, + 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x20, 0x39, 0xE0, 0x3A, 0x00, 0x39, 0xE0, 0x31, 0xC0, + 0x29, 0xC0, 0x29, 0x80, 0x29, 0x60, 0x4A, 0x40, 0x7B, 0x45, 0x5A, 0xA4, 0x21, 0x81, 0x19, 0x20, + 0x21, 0x40, 0x29, 0x80, 0x3A, 0x00, 0x42, 0x60, 0x4A, 0xA0, 0x52, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, + 0x4A, 0xC0, 0x5A, 0xA0, 0x4A, 0x60, 0x42, 0x80, 0x4A, 0x80, 0x10, 0x60, 0x18, 0x20, 0x6A, 0x04, + 0x72, 0x64, 0x5A, 0xE0, 0x5B, 0x00, 0x63, 0x00, 0x83, 0xC3, 0x84, 0x06, 0x5B, 0x01, 0x3A, 0x00, + 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x60, 0x21, 0x40, 0x19, 0x00, + 0x19, 0x00, 0x19, 0x00, 0x18, 0xE0, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xE0, + 0x10, 0xC0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, + 0x10, 0xA0, 0x21, 0x40, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x80, 0x73, 0xA6, 0x84, 0x2C, 0x10, 0xE1, + 0x08, 0xA0, 0x10, 0xC0, 0x10, 0xE0, 0x11, 0x00, 0x10, 0xE0, 0x19, 0x20, 0x19, 0x40, 0x19, 0x60, + 0x21, 0x60, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, 0x32, 0x00, + 0x32, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x80, 0x42, 0xA0, 0x42, 0xA0, + 0x42, 0xA0, 0x42, 0xC0, 0x42, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xA0, 0x42, 0xA0, 0x42, 0xA0, + 0x42, 0xA0, 0x42, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x20, + 0x3A, 0x01, 0x3A, 0x40, 0x5B, 0x20, 0x52, 0xE0, 0x53, 0x20, 0x5B, 0x20, 0x6B, 0xA1, 0x3A, 0x40, + 0x4A, 0x20, 0x42, 0x20, 0x42, 0x20, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x80, + 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x32, 0x00, 0x31, 0xC0, + 0x29, 0xA0, 0x31, 0x81, 0x29, 0x80, 0x31, 0xC0, 0x5A, 0x83, 0x73, 0x26, 0x39, 0xE2, 0x19, 0x20, + 0x19, 0x20, 0x21, 0x60, 0x3A, 0x00, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0xC0, + 0x52, 0xC0, 0x52, 0xC0, 0x4A, 0x80, 0x42, 0x80, 0x4A, 0xA0, 0x29, 0x20, 0x10, 0x20, 0x41, 0x21, + 0x82, 0x45, 0x62, 0xA1, 0x5B, 0x00, 0x73, 0x61, 0x8C, 0x25, 0x73, 0xA4, 0x4A, 0xC1, 0x3A, 0x00, + 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x60, 0x21, 0x40, 0x19, 0x00, + 0x18, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, + 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x08, 0xC0, 0x08, 0xC0, 0x08, 0xC0, 0x08, 0xA0, 0x08, 0xA0, + 0x08, 0xA0, 0x08, 0x80, 0x29, 0xA0, 0x52, 0xC0, 0x4A, 0x60, 0x4A, 0x60, 0x84, 0x4B, 0x3A, 0x24, + 0x08, 0xA0, 0x10, 0xE0, 0x08, 0xC0, 0x11, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x40, 0x21, 0x60, + 0x21, 0x60, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x80, 0x42, 0x80, + 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xC0, 0x42, 0xC0, 0x4A, 0xC0, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, + 0x42, 0xA0, 0x42, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, + 0x32, 0x00, 0x32, 0x20, 0x3A, 0x40, 0x53, 0x00, 0x5B, 0x20, 0x63, 0x20, 0x63, 0x40, 0x3A, 0x40, + 0x4A, 0x60, 0x4A, 0x40, 0x42, 0x40, 0x42, 0x40, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x60, 0x42, 0x60, + 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, + 0x31, 0xE0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x31, 0xE0, 0x62, 0xC4, 0x52, 0x43, 0x21, 0x40, + 0x11, 0x00, 0x19, 0x20, 0x31, 0xA0, 0x42, 0x20, 0x4A, 0x80, 0x4A, 0x80, 0x42, 0x80, 0x4A, 0xA0, + 0x52, 0xE0, 0x52, 0xC0, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0xA0, 0x39, 0xC1, 0x10, 0x20, 0x28, 0xA0, + 0x82, 0x65, 0x62, 0x00, 0x6B, 0x60, 0x84, 0x23, 0x84, 0x05, 0x63, 0x43, 0x3A, 0x60, 0x32, 0x00, + 0x32, 0x00, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x40, 0x19, 0x20, 0x19, 0x00, + 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xA0, + 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0x80, 0x08, 0x80, + 0x08, 0xA0, 0x08, 0xA1, 0x10, 0xA0, 0x42, 0x40, 0x4A, 0xA0, 0x4A, 0x60, 0x63, 0x43, 0x7B, 0xEA, + 0x19, 0x00, 0x08, 0xC0, 0x10, 0xE0, 0x11, 0x00, 0x11, 0x00, 0x19, 0x00, 0x19, 0x40, 0x19, 0x60, + 0x21, 0x60, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, + 0x32, 0x00, 0x32, 0x00, 0x32, 0x20, 0x32, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x60, + 0x42, 0x80, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, + 0x42, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x20, + 0x3A, 0x20, 0x32, 0x00, 0x32, 0x00, 0x42, 0x60, 0x5B, 0x40, 0x63, 0x20, 0x7B, 0xC3, 0x52, 0xE2, + 0x4A, 0x80, 0x4A, 0x60, 0x42, 0x40, 0x42, 0x40, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x60, 0x3A, 0x60, + 0x3A, 0x60, 0x42, 0x60, 0x42, 0x80, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, + 0x42, 0x40, 0x32, 0x20, 0x32, 0x00, 0x32, 0x00, 0x29, 0xC0, 0x42, 0x00, 0x5A, 0x83, 0x39, 0xE1, + 0x19, 0x20, 0x18, 0xE0, 0x21, 0x60, 0x3A, 0x00, 0x42, 0x60, 0x4A, 0x80, 0x42, 0x80, 0x42, 0xA0, + 0x4A, 0xC0, 0x52, 0xC0, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0xA0, 0x42, 0x40, 0x10, 0x40, 0x28, 0xA1, + 0x7A, 0x66, 0x59, 0xA1, 0x83, 0xE3, 0x8C, 0x44, 0x7B, 0xA4, 0x53, 0x01, 0x3A, 0x20, 0x32, 0x00, + 0x32, 0x00, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xA0, 0x21, 0x60, 0x21, 0x40, 0x19, 0x20, 0x19, 0x00, + 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xA0, 0x10, 0xA0, + 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, + 0x08, 0x80, 0x08, 0x80, 0x08, 0x40, 0x19, 0x00, 0x4A, 0x80, 0x4A, 0x80, 0x42, 0x60, 0x73, 0xA7, + 0x42, 0x44, 0x08, 0xA0, 0x10, 0xC0, 0x11, 0x00, 0x10, 0xE0, 0x19, 0x20, 0x19, 0x40, 0x21, 0x60, + 0x21, 0x60, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, + 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, 0x3A, 0x40, 0x3A, 0x40, + 0x3A, 0x60, 0x3A, 0x80, 0x42, 0x80, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0x80, + 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, + 0x3A, 0x20, 0x32, 0x00, 0x31, 0xE0, 0x31, 0xE0, 0x3A, 0x60, 0x5B, 0x00, 0x6B, 0x40, 0x73, 0xC5, + 0x4A, 0xA0, 0x4A, 0x80, 0x4A, 0x60, 0x4A, 0x40, 0x42, 0x60, 0x42, 0x60, 0x42, 0x80, 0x42, 0x80, + 0x3A, 0x80, 0x42, 0x80, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0xC0, 0x4A, 0xC1, 0x4A, 0xA0, 0x4A, 0xC0, + 0x4A, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x3A, 0x40, 0x32, 0x00, 0x31, 0xA0, 0x42, 0x21, 0x42, 0x22, + 0x19, 0x40, 0x10, 0xE0, 0x21, 0x20, 0x31, 0xE0, 0x42, 0x60, 0x4A, 0x80, 0x42, 0x80, 0x42, 0xA0, + 0x4A, 0xA0, 0x4A, 0xA0, 0x42, 0x40, 0x42, 0x61, 0x52, 0xA0, 0x4A, 0xA0, 0x18, 0xA0, 0x20, 0x81, + 0x72, 0x88, 0x8A, 0xE9, 0x9C, 0x47, 0x8C, 0x25, 0x6B, 0x43, 0x42, 0xA0, 0x3A, 0x20, 0x32, 0x20, + 0x32, 0x00, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x40, 0x21, 0x20, 0x19, 0x00, + 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xA0, 0x10, 0xA0, 0x10, 0xA0, 0x10, 0xA0, 0x08, 0x80, + 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x80, 0x08, 0x60, + 0x08, 0x60, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x29, 0x61, 0x4A, 0xA0, 0x4A, 0x80, 0x4A, 0x60, + 0x5B, 0x04, 0x19, 0x20, 0x08, 0xC0, 0x11, 0x00, 0x11, 0x00, 0x19, 0x20, 0x19, 0x20, 0x21, 0x60, + 0x21, 0x60, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x32, 0x20, 0x32, 0x20, 0x3A, 0x20, + 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x80, 0x3A, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, + 0x42, 0x60, 0x42, 0x60, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x20, + 0x32, 0x00, 0x3A, 0x01, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x20, 0x4A, 0xA0, 0x63, 0x00, 0x84, 0x07, + 0x4A, 0xA0, 0x4A, 0x80, 0x4A, 0x60, 0x4A, 0x40, 0x4A, 0x40, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, + 0x3A, 0x80, 0x42, 0x80, 0x42, 0x60, 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xC1, 0x42, 0x80, 0x4A, 0xA0, + 0x42, 0xA0, 0x4A, 0xA0, 0x4A, 0xA0, 0x42, 0x60, 0x42, 0x40, 0x31, 0xC1, 0x19, 0x20, 0x29, 0x40, + 0x19, 0x00, 0x10, 0xC0, 0x19, 0x00, 0x31, 0xC0, 0x42, 0x60, 0x4A, 0x80, 0x42, 0x80, 0x4A, 0xA0, + 0x42, 0xA0, 0x4A, 0x80, 0x42, 0x40, 0x3A, 0x20, 0x4A, 0x40, 0x52, 0xA0, 0x18, 0xA0, 0x08, 0x00, + 0x20, 0x81, 0x8B, 0x0B, 0x73, 0x04, 0x7B, 0xC4, 0x52, 0xE1, 0x3A, 0x40, 0x31, 0xE0, 0x32, 0x00, + 0x32, 0x00, 0x31, 0xE0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x40, 0x21, 0x20, 0x19, 0x00, + 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xA0, 0x10, 0xA0, 0x10, 0xA0, 0x10, 0xA0, 0x08, 0xA0, 0x08, 0x80, + 0x08, 0x80, 0x08, 0x80, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, + 0x08, 0x60, 0x00, 0x60, 0x00, 0x80, 0x08, 0x80, 0x10, 0xA0, 0x42, 0x20, 0x4A, 0x80, 0x4A, 0x60, + 0x4A, 0xA0, 0x29, 0xA0, 0x10, 0xC0, 0x10, 0xE0, 0x19, 0x00, 0x19, 0x20, 0x19, 0x40, 0x19, 0x40, + 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x20, 0x32, 0x20, + 0x32, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x40, + 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, + 0x32, 0x00, 0x32, 0x00, 0x3A, 0x00, 0x3A, 0x20, 0x2A, 0x20, 0x5A, 0xE4, 0xC5, 0xEE, 0x94, 0x27, + 0x42, 0x40, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0x60, 0x42, 0x20, 0x42, 0x00, 0x42, 0x40, 0x42, 0x60, + 0x42, 0x40, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, + 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xA0, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x20, 0x21, 0x40, 0x10, 0xA0, + 0x10, 0xC0, 0x08, 0xC0, 0x19, 0x00, 0x31, 0xA0, 0x4A, 0x40, 0x4A, 0xA0, 0x42, 0xA0, 0x4A, 0xA0, + 0x4A, 0xA0, 0x42, 0x80, 0x39, 0xE0, 0x3A, 0x00, 0x4A, 0x60, 0x52, 0xA0, 0x31, 0xA0, 0x08, 0x01, + 0x18, 0x00, 0x82, 0xCA, 0x7A, 0x87, 0x6B, 0x22, 0x4A, 0x80, 0x32, 0x01, 0x39, 0xC0, 0x32, 0x20, + 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x60, 0x21, 0x20, 0x19, 0x00, + 0x19, 0x00, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, + 0x08, 0x80, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x00, 0x60, 0x08, 0x61, 0x08, 0x60, 0x08, 0x80, + 0x00, 0x80, 0x00, 0x60, 0x08, 0x80, 0x08, 0x80, 0x10, 0x80, 0x19, 0x00, 0x42, 0x61, 0x42, 0x80, + 0x42, 0x60, 0x4A, 0xA0, 0x18, 0xE1, 0x18, 0xE0, 0x19, 0x00, 0x19, 0x20, 0x19, 0x40, 0x21, 0x60, + 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x32, 0x20, + 0x32, 0x20, 0x32, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, + 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, + 0x32, 0x00, 0x3A, 0x20, 0x3A, 0x20, 0x32, 0x00, 0x3A, 0x40, 0x32, 0x41, 0x95, 0x30, 0xCF, 0x19, + 0x3A, 0x00, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0x60, 0x42, 0x20, 0x42, 0x00, 0x42, 0x40, 0x42, 0x60, + 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x80, + 0x3A, 0x60, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x42, 0x80, 0x3A, 0x40, 0x31, 0xC0, 0x19, 0x00, + 0x10, 0xA0, 0x08, 0xA0, 0x10, 0xE0, 0x29, 0x60, 0x42, 0x20, 0x4A, 0xA0, 0x42, 0xA0, 0x4A, 0xA0, + 0x4A, 0xA0, 0x42, 0x80, 0x39, 0xE0, 0x42, 0x00, 0x4A, 0x60, 0x5A, 0xE0, 0x52, 0x80, 0x08, 0x00, + 0x10, 0x20, 0x49, 0x22, 0x72, 0x26, 0x5A, 0x81, 0x32, 0x00, 0x32, 0x00, 0x3A, 0x00, 0x2A, 0x00, + 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x60, 0x21, 0x40, 0x19, 0x20, + 0x18, 0xE0, 0x18, 0xC0, 0x10, 0xC0, 0x10, 0xA0, 0x10, 0xA0, 0x08, 0xA0, 0x08, 0xA0, 0x00, 0x80, + 0x00, 0x60, 0x08, 0x60, 0x10, 0xC1, 0x08, 0xA0, 0x08, 0x80, 0x10, 0xE0, 0x10, 0xC0, 0x08, 0x60, + 0x08, 0x60, 0x08, 0x60, 0x08, 0x80, 0x08, 0xA0, 0x08, 0x80, 0x10, 0xA0, 0x29, 0x80, 0x42, 0x60, + 0x4A, 0x80, 0x42, 0x80, 0x29, 0x81, 0x19, 0x00, 0x19, 0x20, 0x19, 0x20, 0x19, 0x40, 0x21, 0x60, + 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x32, 0x20, 0x32, 0x00, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x32, 0x20, 0x3A, 0x62, 0x42, 0xA4, + 0x31, 0xA0, 0x42, 0x60, 0x4A, 0xA0, 0x4A, 0x60, 0x42, 0x20, 0x42, 0x20, 0x42, 0x40, 0x42, 0x60, + 0x42, 0x60, 0x42, 0x60, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, + 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x40, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x40, 0x21, 0x60, + 0x10, 0xA0, 0x08, 0xA0, 0x10, 0xA0, 0x29, 0x20, 0x3A, 0x00, 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xA0, + 0x4A, 0xA0, 0x4A, 0x80, 0x3A, 0x00, 0x42, 0x20, 0x52, 0x80, 0x5A, 0xC0, 0x6B, 0x40, 0x4A, 0x20, + 0x10, 0x60, 0x30, 0xA0, 0x71, 0xE4, 0x72, 0x84, 0x32, 0x00, 0x31, 0xE0, 0x29, 0xE0, 0x32, 0x00, + 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x60, 0x21, 0x40, 0x19, 0x20, + 0x19, 0x00, 0x10, 0xE0, 0x10, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0x80, + 0x08, 0x60, 0x08, 0x60, 0x18, 0xE0, 0x4A, 0x81, 0x52, 0x83, 0x52, 0xA1, 0x4A, 0x60, 0x4A, 0x60, + 0x31, 0x80, 0x10, 0xA0, 0x08, 0x80, 0x08, 0xA1, 0x00, 0xA0, 0x08, 0xC0, 0x19, 0x01, 0x42, 0x41, + 0x4A, 0x80, 0x4A, 0x80, 0x42, 0x61, 0x19, 0x00, 0x19, 0x40, 0x19, 0x40, 0x21, 0x60, 0x21, 0x60, + 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, + 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x3A, 0x20, 0x32, 0x00, 0x3A, 0x20, 0x32, 0x20, 0x32, 0x20, 0x3A, 0x60, 0x32, 0x20, 0x32, 0x40, + 0x29, 0x60, 0x42, 0x40, 0x4A, 0xC0, 0x4A, 0x80, 0x4A, 0x60, 0x42, 0x40, 0x42, 0x40, 0x42, 0x60, + 0x42, 0x80, 0x42, 0x80, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0x80, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x40, + 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x60, 0x42, 0x80, 0x31, 0xC0, + 0x10, 0xA0, 0x08, 0xA0, 0x10, 0x80, 0x21, 0x20, 0x3A, 0x00, 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xA0, + 0x4A, 0xC0, 0x4A, 0x80, 0x39, 0xE0, 0x42, 0x20, 0x52, 0x80, 0x63, 0x40, 0x73, 0xA0, 0x7B, 0xC1, + 0x42, 0x01, 0x20, 0x40, 0x61, 0x82, 0x82, 0xA7, 0x42, 0x01, 0x29, 0xC0, 0x32, 0x01, 0x31, 0xE0, + 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x29, 0x80, 0x21, 0x40, 0x21, 0x20, + 0x11, 0x00, 0x11, 0x00, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xA0, 0x08, 0x80, 0x08, 0x60, 0x08, 0x60, + 0x00, 0x80, 0x00, 0x61, 0x08, 0x80, 0x29, 0xA0, 0x39, 0xE0, 0x31, 0xC0, 0x3A, 0x00, 0x3A, 0x01, + 0x4A, 0x81, 0x4A, 0x81, 0x21, 0x40, 0x08, 0xA0, 0x10, 0xE0, 0x08, 0xA0, 0x10, 0xC0, 0x29, 0xA0, + 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0xC0, 0x21, 0x80, 0x19, 0x40, 0x19, 0x60, 0x21, 0x60, 0x21, 0x60, + 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x32, 0x00, + 0x32, 0x00, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x32, 0x20, 0x32, 0x20, 0x3A, 0x20, + 0x21, 0x40, 0x42, 0x20, 0x4A, 0xA0, 0x4A, 0x80, 0x4A, 0x60, 0x42, 0x60, 0x42, 0x40, 0x42, 0x40, + 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x60, 0x42, 0x60, 0x42, 0x80, + 0x42, 0x80, 0x42, 0x60, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x42, 0x80, 0x32, 0x00, + 0x10, 0xE0, 0x08, 0x80, 0x10, 0x80, 0x29, 0x40, 0x42, 0x20, 0x42, 0x60, 0x42, 0x80, 0x4A, 0xA0, + 0x4A, 0xA0, 0x31, 0xE0, 0x42, 0x02, 0x5A, 0xC3, 0x5A, 0xE0, 0x6B, 0x80, 0x73, 0xC0, 0x73, 0xA1, + 0x52, 0xE1, 0x10, 0x40, 0x49, 0x21, 0x8A, 0xA7, 0x5A, 0x22, 0x2A, 0x00, 0x32, 0x00, 0x31, 0xE0, + 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x60, 0x21, 0x40, + 0x21, 0x41, 0x19, 0x00, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x00, 0x80, + 0x08, 0x80, 0x08, 0x80, 0x08, 0x60, 0x21, 0x21, 0x32, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x21, + 0x42, 0x40, 0x4A, 0x80, 0x5B, 0x22, 0x39, 0xE2, 0x10, 0xC0, 0x10, 0xE0, 0x08, 0xA0, 0x19, 0x40, + 0x42, 0x61, 0x4A, 0xA0, 0x4A, 0xA0, 0x32, 0x00, 0x21, 0x60, 0x21, 0x80, 0x21, 0x60, 0x29, 0x80, + 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, 0x32, 0x00, + 0x32, 0x00, 0x3A, 0x20, 0x32, 0x20, 0x32, 0x40, 0x3A, 0x40, 0x32, 0x20, 0x3A, 0x20, 0x32, 0x00, + 0x21, 0x20, 0x3A, 0x00, 0x4A, 0xA0, 0x4A, 0x80, 0x42, 0x60, 0x42, 0x60, 0x42, 0x40, 0x42, 0x20, + 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, + 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xA0, 0x42, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x42, 0x60, 0x3A, 0x20, + 0x19, 0x00, 0x08, 0x80, 0x10, 0xA0, 0x31, 0x80, 0x42, 0x40, 0x42, 0x60, 0x42, 0x80, 0x4A, 0xA0, + 0x42, 0x80, 0x31, 0xC0, 0x52, 0x82, 0x6B, 0x63, 0x6B, 0x62, 0x63, 0x60, 0x6B, 0x80, 0x5B, 0x20, + 0x42, 0x80, 0x18, 0xA0, 0x28, 0xA1, 0x59, 0xA2, 0x8B, 0x07, 0x3A, 0x20, 0x31, 0xE0, 0x31, 0xE0, + 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x31, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x60, + 0x21, 0x40, 0x19, 0x00, 0x18, 0xE0, 0x18, 0xE0, 0x18, 0xC0, 0x10, 0x80, 0x10, 0x80, 0x10, 0x60, + 0x08, 0x60, 0x08, 0x40, 0x08, 0x60, 0x10, 0xA0, 0x3A, 0x20, 0x4A, 0x81, 0x4A, 0xA0, 0x53, 0x00, + 0x5A, 0xE2, 0x63, 0x41, 0x52, 0xA1, 0x52, 0x81, 0x4A, 0x61, 0x18, 0xE0, 0x10, 0xC0, 0x10, 0xE0, + 0x31, 0xA0, 0x4A, 0xA0, 0x4A, 0xA0, 0x42, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, + 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, + 0x21, 0xA0, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x31, 0xE0, 0x32, 0x00, + 0x32, 0x00, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x32, 0x20, 0x3A, 0x20, 0x32, 0x20, 0x32, 0x00, + 0x19, 0x00, 0x31, 0xC0, 0x4A, 0x80, 0x4A, 0x80, 0x42, 0x60, 0x42, 0x60, 0x42, 0x40, 0x42, 0x20, + 0x42, 0x60, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, + 0x42, 0x60, 0x4A, 0xC0, 0x4A, 0xC0, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x40, + 0x19, 0x20, 0x08, 0x80, 0x10, 0xA0, 0x31, 0xA0, 0x42, 0x40, 0x42, 0x60, 0x42, 0x80, 0x4A, 0xA0, + 0x4A, 0xA0, 0x4A, 0x80, 0x5B, 0x00, 0x63, 0x40, 0x63, 0x61, 0x63, 0x40, 0x5B, 0x00, 0x42, 0x40, + 0x29, 0xE0, 0x29, 0x40, 0x10, 0x40, 0x39, 0x00, 0x82, 0x86, 0x52, 0x01, 0x32, 0x00, 0x32, 0x00, + 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x31, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0x80, + 0x21, 0x40, 0x21, 0x60, 0x31, 0xA1, 0x4A, 0x41, 0x63, 0x02, 0x73, 0x62, 0x6B, 0x22, 0x5A, 0xA2, + 0x42, 0x42, 0x18, 0xC0, 0x08, 0x60, 0x19, 0x00, 0x4A, 0xE1, 0x42, 0x80, 0x42, 0xA1, 0x4A, 0xC0, + 0x52, 0xC0, 0x6B, 0x83, 0x7C, 0x05, 0x4A, 0x40, 0x5A, 0xE2, 0x52, 0xE2, 0x21, 0x40, 0x10, 0xE0, + 0x19, 0x20, 0x4A, 0x80, 0x4A, 0xA0, 0x53, 0x00, 0x31, 0xC0, 0x21, 0x80, 0x29, 0xC0, 0x29, 0xA0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, + 0x32, 0x00, 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x00, 0x3A, 0x20, 0x32, 0x00, 0x32, 0x00, + 0x18, 0xE0, 0x29, 0x80, 0x4A, 0x60, 0x4A, 0x80, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0x60, 0x4A, 0x20, + 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x60, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, + 0x42, 0x60, 0x4B, 0x00, 0x4A, 0xC0, 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x40, + 0x21, 0x20, 0x08, 0x80, 0x10, 0xA0, 0x31, 0xA0, 0x42, 0x40, 0x42, 0x60, 0x42, 0x80, 0x42, 0x80, + 0x4A, 0xC1, 0x52, 0xE0, 0x5B, 0x20, 0x63, 0x40, 0x5B, 0x20, 0x52, 0xC0, 0x32, 0x00, 0x29, 0xA0, + 0x21, 0xA1, 0x31, 0xA0, 0x10, 0x60, 0x30, 0xC0, 0x72, 0x45, 0x7A, 0x85, 0x32, 0x20, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xC0, 0x29, 0xA0, + 0x42, 0x00, 0x5A, 0xA1, 0x73, 0x62, 0x7B, 0xA2, 0x7B, 0x82, 0x7B, 0x83, 0x7B, 0xA3, 0x7B, 0xA3, + 0x7B, 0xA3, 0x6B, 0x23, 0x39, 0xC1, 0x4A, 0x81, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x4A, 0xA0, + 0x5B, 0x00, 0x63, 0x60, 0x7B, 0xE4, 0x4A, 0x60, 0x52, 0xA0, 0x63, 0x41, 0x52, 0xC1, 0x19, 0x00, + 0x19, 0x20, 0x42, 0x41, 0x4A, 0x80, 0x5B, 0x60, 0x42, 0x41, 0x29, 0xA0, 0x21, 0xC0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, + 0x31, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xE0, + 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x3A, 0x20, 0x3A, 0x21, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, + 0x19, 0x00, 0x21, 0x60, 0x42, 0x60, 0x4A, 0xA0, 0x42, 0x60, 0x42, 0x60, 0x4A, 0x60, 0x4A, 0x40, + 0x42, 0x20, 0x42, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, + 0x3A, 0x60, 0x42, 0x80, 0x42, 0x80, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x40, + 0x21, 0x61, 0x08, 0x60, 0x18, 0xE0, 0x29, 0xA0, 0x3A, 0x40, 0x42, 0x60, 0x42, 0x60, 0x4A, 0xA0, + 0x52, 0xC0, 0x53, 0x00, 0x5B, 0x00, 0x52, 0xC0, 0x42, 0x40, 0x29, 0xA0, 0x21, 0x60, 0x21, 0x60, + 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x00, 0x18, 0x60, 0x51, 0x42, 0x8B, 0x08, 0x42, 0x20, 0x3A, 0x00, + 0x3A, 0x00, 0x3A, 0x01, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x31, 0xC0, 0x39, 0xE0, 0x52, 0x80, + 0x73, 0x61, 0x73, 0xA2, 0x7B, 0xC2, 0x7B, 0xC3, 0x7B, 0xC4, 0x7B, 0xC4, 0x7B, 0xC3, 0x7B, 0xC3, + 0x7B, 0xC2, 0x73, 0x83, 0x5A, 0xE1, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x42, 0x60, 0x52, 0xC0, + 0x63, 0x00, 0x63, 0x60, 0x63, 0x63, 0x42, 0x40, 0x5A, 0xA0, 0x63, 0x00, 0x73, 0xA2, 0x4A, 0x60, + 0x21, 0x20, 0x3A, 0x21, 0x53, 0x42, 0xA5, 0xD3, 0x4B, 0x01, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, + 0x31, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, + 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x80, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, + 0x19, 0x00, 0x21, 0x40, 0x42, 0x40, 0x4A, 0xA0, 0x42, 0x60, 0x42, 0x80, 0x4A, 0x80, 0x4A, 0x60, + 0x4A, 0x20, 0x42, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, + 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x60, + 0x21, 0x60, 0x10, 0x80, 0x21, 0x00, 0x31, 0xC0, 0x3A, 0x20, 0x3A, 0x40, 0x42, 0x60, 0x4A, 0xA0, + 0x4A, 0xA0, 0x4A, 0x80, 0x42, 0x40, 0x31, 0xC0, 0x29, 0x60, 0x21, 0x40, 0x21, 0x60, 0x21, 0x80, + 0x21, 0x80, 0x31, 0xE1, 0x29, 0x80, 0x10, 0x40, 0x38, 0xA0, 0x8A, 0xE8, 0x5A, 0x22, 0x3A, 0x20, + 0x3A, 0x00, 0x31, 0xE0, 0x3A, 0x20, 0x32, 0x00, 0x3A, 0x20, 0x42, 0x40, 0x5B, 0x21, 0x73, 0x82, + 0x7B, 0xC3, 0x7B, 0xC3, 0x7B, 0xE4, 0x7B, 0xE4, 0x7B, 0xE4, 0x7B, 0xC3, 0x7B, 0xC2, 0x7B, 0xA1, + 0x73, 0xA2, 0x5B, 0x01, 0x4A, 0x80, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x40, 0x42, 0x80, 0x52, 0xE0, + 0x63, 0x00, 0x73, 0xC2, 0x4A, 0xC0, 0x4A, 0x60, 0x52, 0xC0, 0x63, 0x20, 0x73, 0x82, 0x73, 0xA4, + 0x21, 0xA0, 0x31, 0xC0, 0xA5, 0x2D, 0xDF, 0x3B, 0x53, 0x68, 0x21, 0xA0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, + 0x31, 0xE0, 0x31, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, + 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, + 0x19, 0x20, 0x21, 0x40, 0x42, 0x20, 0x4A, 0xA0, 0x42, 0x60, 0x42, 0x60, 0x4A, 0x60, 0x4A, 0x80, + 0x4A, 0x40, 0x42, 0x40, 0x42, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, + 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, + 0x31, 0xC0, 0x18, 0xE0, 0x29, 0x60, 0x39, 0xE0, 0x3A, 0x00, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x40, + 0x3A, 0x20, 0x31, 0xC0, 0x21, 0x60, 0x19, 0x00, 0x18, 0xE0, 0x19, 0x00, 0x19, 0x40, 0x21, 0x80, + 0x21, 0x60, 0x29, 0xA0, 0x29, 0xC0, 0x10, 0xC0, 0x18, 0x40, 0x69, 0xE4, 0x82, 0xC6, 0x3A, 0x00, + 0x32, 0x00, 0x3A, 0x40, 0x32, 0x00, 0x3A, 0x00, 0x4A, 0x80, 0x63, 0x41, 0x6B, 0x80, 0x6B, 0x60, + 0x7C, 0x04, 0x7C, 0x04, 0x7B, 0xE4, 0x7B, 0xE4, 0x7B, 0xC3, 0x7B, 0xC2, 0x7B, 0xC2, 0x7B, 0xC1, + 0x6B, 0x81, 0x4A, 0x80, 0x42, 0x60, 0x42, 0x80, 0x42, 0x80, 0x42, 0x40, 0x4A, 0x80, 0x4A, 0xA0, + 0x5B, 0x00, 0x6B, 0x81, 0x42, 0x40, 0x4A, 0x80, 0x5A, 0xE0, 0x63, 0x00, 0x6B, 0x62, 0x7C, 0x05, + 0x52, 0xC1, 0x21, 0x60, 0x42, 0xA6, 0x2A, 0x43, 0x21, 0xA1, 0x29, 0x60, 0x29, 0xC1, 0x21, 0xE0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, + 0x31, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, + 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, + 0x21, 0x40, 0x21, 0x40, 0x42, 0x20, 0x4A, 0xA0, 0x4A, 0x80, 0x42, 0x80, 0x42, 0x60, 0x4A, 0x80, + 0x4A, 0x80, 0x4A, 0x60, 0x42, 0x40, 0x42, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, + 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x80, 0x42, 0x80, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, + 0x42, 0x40, 0x21, 0x40, 0x31, 0x80, 0x3A, 0x20, 0x3A, 0x20, 0x31, 0xE0, 0x29, 0xC0, 0x29, 0x80, + 0x21, 0x40, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x20, 0x21, 0x40, 0x21, 0x60, + 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0x60, 0x10, 0x21, 0x40, 0xE0, 0x92, 0xE8, 0x52, 0x01, + 0x3A, 0x00, 0x32, 0x20, 0x3A, 0x40, 0x4A, 0x60, 0x63, 0x21, 0x63, 0x40, 0x6B, 0x80, 0x73, 0xC1, + 0x7C, 0x02, 0x7C, 0x03, 0x7B, 0xE3, 0x7B, 0xC2, 0x7B, 0xA2, 0x7B, 0xE2, 0x7B, 0xC2, 0x7B, 0xA2, + 0x63, 0x41, 0x42, 0x60, 0x42, 0x60, 0x42, 0x40, 0x42, 0x40, 0x3A, 0x20, 0x4A, 0x60, 0x4A, 0x60, + 0x5B, 0x00, 0x5B, 0x00, 0x4A, 0x60, 0x4A, 0x80, 0x52, 0xC0, 0x5A, 0xA0, 0x73, 0x84, 0x84, 0x05, + 0x6B, 0xA4, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0xA0, 0x19, 0xC0, 0x21, 0xA0, 0x29, 0xA0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xC0, 0x31, 0xE0, + 0x21, 0x60, 0x21, 0x40, 0x42, 0x20, 0x52, 0xA0, 0x4A, 0xA0, 0x4A, 0x80, 0x42, 0x60, 0x4A, 0x80, + 0x4A, 0x80, 0x4A, 0x80, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, + 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x42, 0x80, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, + 0x42, 0x80, 0x29, 0x80, 0x31, 0xC0, 0x42, 0x40, 0x3A, 0x20, 0x29, 0x80, 0x21, 0x40, 0x19, 0x00, + 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x19, 0x00, 0x19, 0x20, 0x19, 0x40, 0x21, 0x40, 0x21, 0x60, + 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x10, 0x40, 0x28, 0xA0, 0x72, 0x04, 0x72, 0x64, + 0x39, 0xE0, 0x32, 0x20, 0x42, 0x60, 0x63, 0x21, 0x63, 0x40, 0x6B, 0xA1, 0x6B, 0xA1, 0x7B, 0xE3, + 0x7B, 0xE2, 0x7C, 0x03, 0x7B, 0xE2, 0x7B, 0xC1, 0x7B, 0xA0, 0x7B, 0xC2, 0x7B, 0xC2, 0x73, 0x82, + 0x52, 0xC0, 0x42, 0x60, 0x42, 0x81, 0x42, 0x40, 0x42, 0x40, 0x42, 0x20, 0x42, 0x40, 0x4A, 0x60, + 0x5B, 0x00, 0x5B, 0x01, 0x4A, 0x60, 0x4A, 0x80, 0x5A, 0xE1, 0x6B, 0x03, 0x73, 0x84, 0x8C, 0x05, + 0x8C, 0x68, 0x42, 0x42, 0x21, 0x80, 0x21, 0xA1, 0x21, 0x80, 0x29, 0x80, 0x29, 0xA0, 0x21, 0xC1, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x31, 0xC0, + 0x21, 0x60, 0x21, 0x40, 0x42, 0x20, 0x52, 0xC0, 0x4A, 0xA0, 0x4A, 0x80, 0x42, 0x60, 0x42, 0x60, + 0x4A, 0x80, 0x4A, 0x80, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x42, 0x60, + 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x60, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xC0, + 0x42, 0x60, 0x29, 0x80, 0x31, 0xE0, 0x42, 0x20, 0x31, 0xC0, 0x19, 0x20, 0x19, 0x00, 0x18, 0xE0, + 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x20, 0x19, 0x20, 0x19, 0x40, 0x21, 0x60, 0x21, 0x60, + 0x21, 0x80, 0x29, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x00, 0x18, 0x60, 0x41, 0x41, 0x8A, 0xA7, + 0x42, 0x00, 0x4A, 0x80, 0x52, 0xE0, 0x5A, 0xE0, 0x6B, 0x81, 0x73, 0xC3, 0x73, 0xC3, 0x6B, 0x81, + 0x84, 0x04, 0x84, 0x03, 0x7B, 0xE2, 0x73, 0xA0, 0x7B, 0xC1, 0x7B, 0xC2, 0x7B, 0xC2, 0x7B, 0x82, + 0x4A, 0xA0, 0x42, 0x40, 0x42, 0x60, 0x3A, 0x40, 0x42, 0x60, 0x42, 0x40, 0x42, 0x40, 0x4A, 0x80, + 0x52, 0xC0, 0x52, 0xC0, 0x4A, 0x60, 0x5A, 0xA1, 0x73, 0x63, 0x7B, 0xC6, 0x8C, 0x07, 0x9C, 0x88, + 0x9C, 0xC9, 0x4A, 0x63, 0x21, 0xA0, 0x21, 0x81, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, + 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, + 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, + 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x31, 0xC0, + 0x19, 0x60, 0x21, 0x40, 0x42, 0x40, 0x52, 0xE0, 0x4A, 0xA0, 0x42, 0x60, 0x42, 0x40, 0x3A, 0x60, + 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x80, 0x42, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x42, 0x60, 0x42, 0x60, + 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0xA0, 0x42, 0xC0, 0x42, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, + 0x42, 0x80, 0x29, 0xA0, 0x29, 0x80, 0x31, 0xA0, 0x29, 0x60, 0x19, 0x00, 0x19, 0x00, 0x19, 0x20, + 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x40, 0x21, 0x60, 0x21, 0x60, + 0x21, 0x80, 0x21, 0x60, 0x29, 0x80, 0x29, 0xA0, 0x29, 0x80, 0x10, 0x60, 0x28, 0xC0, 0x69, 0xE4, + 0x62, 0x63, 0x62, 0xE1, 0x5B, 0x00, 0x5B, 0x00, 0x73, 0x82, 0x73, 0xC2, 0x73, 0xC2, 0x7B, 0xE2, + 0x84, 0x24, 0x84, 0x03, 0x83, 0xE2, 0x73, 0x81, 0x83, 0xE3, 0x7B, 0xA3, 0x73, 0x62, 0x73, 0x41, + 0x52, 0x80, 0x42, 0x20, 0x42, 0x00, 0x39, 0xE0, 0x42, 0x00, 0x42, 0x20, 0x42, 0x40, 0x4A, 0xA0, + 0x5A, 0xE0, 0x5B, 0x00, 0x5A, 0xE1, 0x62, 0xE2, 0x73, 0x63, 0x7B, 0x85, 0x8C, 0x07, 0x9C, 0x67, + 0xA4, 0xC9, 0x5B, 0x04, 0x29, 0xC0, 0x29, 0x80, 0x21, 0x60, 0x21, 0xC0, 0x21, 0xA0, 0x29, 0xA0, + 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, + 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xC0, 0x31, 0xE0, + 0x21, 0x80, 0x29, 0x81, 0x4A, 0x61, 0x5B, 0x01, 0x52, 0xC0, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x40, + 0x42, 0x80, 0x4A, 0x80, 0x4A, 0x80, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x60, 0x42, 0x60, 0x42, 0x60, + 0x4A, 0xA0, 0x42, 0xA0, 0x42, 0xA0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xE0, + 0x4A, 0xC0, 0x31, 0xA0, 0x21, 0x20, 0x21, 0x20, 0x21, 0x20, 0x19, 0x20, 0x19, 0x40, 0x19, 0x40, + 0x21, 0x20, 0x21, 0x40, 0x21, 0x40, 0x19, 0x40, 0x19, 0x40, 0x21, 0x40, 0x21, 0x60, 0x21, 0x60, + 0x21, 0x60, 0x21, 0xA1, 0x29, 0x81, 0x21, 0xA0, 0x29, 0xA0, 0x18, 0xC0, 0x10, 0x20, 0x38, 0xC0, + 0x72, 0x65, 0x62, 0xA0, 0x63, 0x40, 0x63, 0x20, 0x73, 0xC2, 0x73, 0xA1, 0x7B, 0xE2, 0x7B, 0xA1, + 0x7B, 0xE1, 0x7B, 0xC0, 0x7B, 0xA1, 0x73, 0x61, 0x83, 0xC4, 0x73, 0x23, 0x5A, 0xA1, 0x52, 0x60, + 0x52, 0x20, 0x4A, 0x00, 0x52, 0x21, 0x4A, 0x00, 0x4A, 0x00, 0x4A, 0x20, 0x4A, 0x40, 0x52, 0x80, + 0x52, 0xC0, 0x6B, 0x41, 0x62, 0xE1, 0x73, 0x63, 0x83, 0xC5, 0x8C, 0x07, 0x94, 0x27, 0x9C, 0x27, + 0x9C, 0x88, 0x52, 0xA3, 0x21, 0xA0, 0x29, 0xC0, 0x29, 0xC1, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, + 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, + 0x21, 0x60, 0x29, 0x80, 0x52, 0xA1, 0x63, 0x21, 0x52, 0xC1, 0x42, 0x60, 0x42, 0x60, 0x42, 0x80, + 0x42, 0x80, 0x4A, 0x80, 0x4A, 0x60, 0x42, 0x20, 0x3A, 0x40, 0x42, 0x60, 0x42, 0x80, 0x42, 0xA0, + 0x42, 0xC0, 0x42, 0xC0, 0x42, 0xC0, 0x42, 0xC0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, + 0x4A, 0xE0, 0x31, 0xE0, 0x21, 0x40, 0x19, 0x20, 0x19, 0x40, 0x19, 0x40, 0x21, 0x60, 0x21, 0x40, + 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x19, 0x40, 0x19, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, + 0x21, 0x60, 0x29, 0x80, 0x29, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x21, 0x60, 0x08, 0x20, 0x20, 0x61, + 0x51, 0x22, 0x62, 0x62, 0x6B, 0x01, 0x6B, 0x61, 0x73, 0xE3, 0x7B, 0xE3, 0x7B, 0xC2, 0x7C, 0x02, + 0x83, 0xE2, 0x8B, 0xC2, 0x73, 0x21, 0x62, 0xC1, 0x5A, 0x61, 0x62, 0x41, 0x6A, 0xA2, 0x4A, 0x40, + 0x42, 0x20, 0x4A, 0x40, 0x52, 0xA0, 0x5A, 0xE0, 0x5B, 0x00, 0x5B, 0x00, 0x5A, 0xC0, 0x5A, 0x60, + 0x5A, 0xE0, 0x7B, 0xE4, 0x63, 0x23, 0x73, 0x84, 0x84, 0x06, 0x8C, 0x07, 0x8C, 0x06, 0x9C, 0x69, + 0x84, 0x09, 0x3A, 0x00, 0x31, 0xE0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, + 0x21, 0x60, 0x29, 0x80, 0x4A, 0x80, 0x5B, 0x20, 0x52, 0xC0, 0x42, 0x60, 0x42, 0x60, 0x42, 0x80, + 0x42, 0x80, 0x4A, 0x80, 0x4A, 0x60, 0x42, 0x40, 0x42, 0x60, 0x42, 0x80, 0x42, 0x80, 0x42, 0xA0, + 0x42, 0xA0, 0x42, 0xA0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, + 0x4A, 0xC0, 0x29, 0xC0, 0x19, 0x20, 0x19, 0x20, 0x19, 0x40, 0x19, 0x40, 0x21, 0x60, 0x21, 0x60, + 0x21, 0x40, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, + 0x21, 0x80, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x10, 0x80, 0x18, 0x20, + 0x20, 0x60, 0x59, 0xC2, 0x51, 0xC1, 0x73, 0x43, 0x84, 0x05, 0x83, 0xC4, 0x7B, 0xA0, 0x72, 0xA2, + 0x62, 0x01, 0x62, 0x40, 0x72, 0xE1, 0x7B, 0x63, 0x8B, 0xE5, 0x83, 0xE5, 0x52, 0xA1, 0x3A, 0x01, + 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x4A, 0x60, 0x5A, 0xC0, 0x63, 0x00, + 0x63, 0x00, 0x7B, 0xC3, 0x94, 0xAA, 0x7B, 0xE7, 0x84, 0x07, 0x8C, 0x07, 0x94, 0x28, 0x94, 0x09, + 0x4A, 0xA2, 0x31, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x2A, 0x00, 0x29, 0xE0, 0x31, 0xE0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, + 0x21, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, + 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, + 0x21, 0x80, 0x29, 0x80, 0x4A, 0x60, 0x5B, 0x00, 0x4A, 0xA0, 0x42, 0x80, 0x42, 0x60, 0x42, 0x80, + 0x42, 0x80, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x80, 0x42, 0x80, 0x4A, 0xA0, + 0x42, 0xA0, 0x42, 0xA0, 0x4A, 0xA0, 0x4A, 0xC0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x52, 0xE0, + 0x4A, 0xE0, 0x29, 0xC0, 0x21, 0x40, 0x19, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x60, 0x21, 0x60, + 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, + 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, 0x21, 0xA0, 0x21, 0x80, 0x29, 0x80, 0x29, 0x20, 0x10, 0x00, + 0x18, 0x60, 0x10, 0x62, 0x20, 0x41, 0x51, 0xA3, 0x6A, 0xC3, 0x7A, 0xA4, 0x69, 0x82, 0x6A, 0x21, + 0x83, 0x40, 0x83, 0xE2, 0x7B, 0xC3, 0x7B, 0x43, 0x83, 0x63, 0x6B, 0x42, 0x42, 0x40, 0x3A, 0x00, + 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x20, 0x4A, 0x60, 0x52, 0xA0, + 0x5A, 0xC0, 0x63, 0x21, 0x84, 0x26, 0x84, 0x45, 0x7B, 0xE4, 0x8C, 0x26, 0x8C, 0x06, 0x8B, 0xE7, + 0x5B, 0x01, 0x4A, 0xC0, 0x42, 0x80, 0x32, 0x20, 0x32, 0x20, 0x32, 0x00, 0x31, 0xE0, 0x32, 0x00, + 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, + 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, + 0x21, 0x80, 0x29, 0x80, 0x42, 0x60, 0x52, 0xE0, 0x4A, 0xC0, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, + 0x42, 0x60, 0x42, 0x60, 0x42, 0x40, 0x42, 0x60, 0x4A, 0x80, 0x42, 0x80, 0x42, 0x80, 0x4A, 0xA0, + 0x42, 0xA0, 0x42, 0xA0, 0x4A, 0xC0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x52, 0xE0, + 0x4A, 0xE0, 0x29, 0xC0, 0x21, 0x40, 0x21, 0x40, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, + 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, + 0x21, 0x60, 0x21, 0x80, 0x21, 0x60, 0x29, 0xA0, 0x21, 0x80, 0x29, 0xA0, 0x39, 0xE0, 0x10, 0x40, + 0x18, 0x00, 0x28, 0x80, 0x10, 0x20, 0x18, 0x80, 0x49, 0x01, 0x61, 0xA1, 0x72, 0xE0, 0x83, 0xA3, + 0x73, 0x60, 0x73, 0x62, 0x73, 0x43, 0x83, 0x63, 0x73, 0x42, 0x4A, 0x80, 0x3A, 0x20, 0x4A, 0x20, + 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x20, 0x42, 0x20, + 0x41, 0xE0, 0x52, 0x80, 0x5B, 0x00, 0x63, 0x60, 0x63, 0x20, 0x63, 0x40, 0x6B, 0x60, 0x6B, 0x40, + 0x73, 0x60, 0x7B, 0xC0, 0x73, 0xC2, 0x42, 0x40, 0x3A, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x01, + 0x32, 0x00, 0x32, 0x00, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, + 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, + 0x21, 0x80, 0x29, 0x80, 0x3A, 0x40, 0x52, 0xE0, 0x4A, 0xE0, 0x4A, 0xA0, 0x42, 0x80, 0x42, 0x80, + 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0xA0, + 0x42, 0xA0, 0x42, 0xC0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, + 0x4A, 0xE0, 0x29, 0xC0, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x29, 0x80, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0x80, 0x29, 0x80, 0x21, 0x80, + 0x21, 0x80, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x31, 0xE0, 0x42, 0x20, 0x18, 0xC0, + 0x18, 0x20, 0x18, 0x40, 0x30, 0xE2, 0x41, 0xC1, 0x63, 0x20, 0x73, 0x80, 0x7B, 0x60, 0x7B, 0xC2, + 0x73, 0x62, 0x5A, 0x60, 0x7B, 0x23, 0x73, 0x42, 0x52, 0xC0, 0x3A, 0x40, 0x3A, 0x20, 0x42, 0x20, + 0x42, 0x40, 0x3A, 0x20, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x20, 0x42, 0x20, 0x42, 0x20, + 0x39, 0xE0, 0x42, 0x00, 0x52, 0xA0, 0x5A, 0xE0, 0x63, 0x21, 0x63, 0x20, 0x63, 0x40, 0x63, 0x40, + 0x73, 0x60, 0x73, 0x80, 0x73, 0xA1, 0x42, 0x40, 0x3A, 0x21, 0x3A, 0x40, 0x3A, 0x60, 0x32, 0x20, + 0x32, 0x20, 0x32, 0x20, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x31, 0xE0, + 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, + 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, + 0x21, 0x80, 0x21, 0x60, 0x3A, 0x00, 0x4A, 0xC0, 0x52, 0xE0, 0x4A, 0xC0, 0x42, 0xA0, 0x42, 0x80, + 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0xA0, + 0x4A, 0xA0, 0x4A, 0xC0, 0x4A, 0xE0, 0x4B, 0x00, 0x4B, 0x00, 0x4B, 0x00, 0x4A, 0xE0, 0x4A, 0xE0, + 0x42, 0xA0, 0x29, 0xA0, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x29, 0xA0, 0x29, 0x80, 0x29, 0xA0, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, 0x31, 0xC0, 0x3A, 0x20, 0x3A, 0x00, 0x21, 0x20, + 0x08, 0x20, 0x18, 0x61, 0x29, 0x00, 0x4A, 0x60, 0x63, 0x21, 0x6B, 0x41, 0x7B, 0x60, 0x7B, 0x40, + 0x73, 0x41, 0x73, 0x20, 0x8B, 0xC3, 0x62, 0xE0, 0x42, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, + 0x42, 0x20, 0x42, 0x20, 0x42, 0x20, 0x42, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x20, 0x42, 0x20, + 0x39, 0xE0, 0x39, 0xC0, 0x42, 0x20, 0x4A, 0x60, 0x52, 0xA0, 0x52, 0xE0, 0x63, 0x41, 0x6B, 0x61, + 0x5B, 0x20, 0x4A, 0xE0, 0x42, 0x80, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, + 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x32, 0x20, 0x32, 0x20, 0x32, 0x00, 0x32, 0x00, 0x31, 0xE0, + 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, + 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x21, 0x80, 0x21, 0x60, 0x31, 0xC0, 0x4A, 0x80, 0x52, 0xE0, 0x4A, 0xE0, 0x4A, 0xC0, 0x42, 0xA0, + 0x42, 0x60, 0x42, 0x60, 0x3A, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x80, + 0x4A, 0xA0, 0x4A, 0xC0, 0x4A, 0xE0, 0x53, 0x00, 0x53, 0x00, 0x52, 0xE0, 0x52, 0xE0, 0x4A, 0xE0, + 0x3A, 0x60, 0x29, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xC0, 0x29, 0xA0, + 0x21, 0xA0, 0x21, 0x60, 0x21, 0x80, 0x29, 0x80, 0x3A, 0x00, 0x42, 0x60, 0x3A, 0x00, 0x31, 0xA0, + 0x10, 0x01, 0x20, 0x60, 0x30, 0xE0, 0x52, 0x62, 0x63, 0x00, 0x63, 0x20, 0x7B, 0xC1, 0x6B, 0x40, + 0x6A, 0xE1, 0x73, 0x21, 0x6B, 0x21, 0x4A, 0x60, 0x42, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x20, + 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x40, 0x42, 0x20, 0x42, 0x20, + 0x42, 0x00, 0x42, 0x00, 0x4A, 0x40, 0x4A, 0x60, 0x5B, 0x00, 0x63, 0x40, 0x63, 0x42, 0x42, 0x40, + 0x3A, 0x60, 0x42, 0x80, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x40, + 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, 0x32, 0x20, 0x32, 0x00, 0x32, 0x00, + 0x31, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, + 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, + 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x21, 0x80, 0x21, 0x40, 0x29, 0x80, 0x42, 0x60, 0x4A, 0xC0, 0x4A, 0xE0, 0x4A, 0xC0, 0x4A, 0xA0, + 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x42, 0x60, 0x42, 0x40, 0x42, 0x40, 0x42, 0x40, 0x42, 0x60, + 0x42, 0x60, 0x4A, 0x80, 0x4A, 0xC0, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x4A, 0xC0, 0x4A, 0xA0, + 0x3A, 0x20, 0x21, 0x60, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xC0, + 0x29, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x32, 0x00, 0x31, 0xE0, 0x29, 0xC0, + 0x29, 0xA0, 0x29, 0xA1, 0x21, 0x80, 0x31, 0xE1, 0x42, 0x40, 0x42, 0x40, 0x42, 0x21, 0x31, 0xC0, + 0x18, 0xA0, 0x18, 0x40, 0x30, 0xA0, 0x51, 0xE1, 0x5A, 0xA0, 0x6B, 0x40, 0x83, 0xC2, 0x7B, 0x64, + 0x7B, 0x42, 0x6B, 0x01, 0x52, 0xC0, 0x3A, 0x20, 0x3A, 0x00, 0x42, 0x00, 0x42, 0x20, 0x3A, 0x20, + 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x41, 0x42, 0x20, 0x39, 0xE0, + 0x39, 0xE0, 0x42, 0x00, 0x42, 0x20, 0x42, 0x40, 0x52, 0xC0, 0x5B, 0x00, 0x52, 0xE1, 0x42, 0x60, + 0x42, 0x60, 0x42, 0x60, 0x42, 0x80, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x40, 0x42, 0x60, + 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, 0x32, 0x20, 0x32, 0x20, + 0x31, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, + 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, + 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x31, 0xE0, 0x42, 0xA0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, + 0x4A, 0xC0, 0x4A, 0xA0, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x40, 0x42, 0x40, 0x42, 0x60, 0x42, 0x60, + 0x42, 0x40, 0x42, 0x60, 0x42, 0x80, 0x4A, 0x80, 0x52, 0x60, 0x4A, 0x20, 0x42, 0x00, 0x32, 0x00, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x31, 0xC0, + 0x31, 0xE0, 0x3A, 0x00, 0x3A, 0x40, 0x42, 0x40, 0x42, 0x40, 0x3A, 0x20, 0x31, 0xE0, 0x29, 0xC0, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0x80, 0x3A, 0x00, 0x3A, 0x00, 0x42, 0x40, 0x3A, 0x00, 0x39, 0xC0, + 0x21, 0x00, 0x10, 0x01, 0x28, 0xA0, 0x49, 0x80, 0x5A, 0xA1, 0x62, 0xE1, 0x73, 0x61, 0x7B, 0x42, + 0x83, 0xA2, 0x63, 0x01, 0x42, 0x40, 0x31, 0xE0, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x20, + 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x42, 0x40, 0x41, 0xE0, + 0x39, 0xC0, 0x42, 0x20, 0x42, 0x40, 0x42, 0x40, 0x52, 0xA0, 0x5B, 0x00, 0x6B, 0x85, 0x4A, 0xA0, + 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0xA0, 0x42, 0x80, 0x3A, 0x80, 0x42, 0x80, 0x3A, 0x60, + 0x3A, 0x80, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x32, 0x21, + 0x32, 0x00, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xA0, 0x21, 0xA0, 0x29, 0xC0, + 0x29, 0xA0, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x21, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xE0, 0x29, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x19, 0x60, 0x21, 0x60, 0x21, 0x60, 0x29, 0xA0, 0x42, 0x60, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, + 0x4A, 0xC0, 0x4A, 0xA0, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x42, 0x60, 0x42, 0x60, + 0x42, 0x60, 0x3A, 0x60, 0x42, 0x80, 0x4A, 0x80, 0x4A, 0x40, 0x39, 0xA0, 0x29, 0x80, 0x21, 0xA0, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x31, 0xE0, 0x31, 0xE0, + 0x32, 0x00, 0x3A, 0x20, 0x42, 0x61, 0x42, 0x61, 0x42, 0x61, 0x3A, 0x40, 0x32, 0x00, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x3A, 0x20, 0x42, 0x20, 0x42, 0x40, 0x42, 0x20, 0x39, 0xE0, + 0x39, 0xC0, 0x10, 0x40, 0x28, 0x60, 0x51, 0x82, 0x62, 0xA1, 0x63, 0x00, 0x6A, 0xE1, 0x8B, 0xC4, + 0x73, 0x83, 0x4A, 0x60, 0x31, 0xE0, 0x32, 0x00, 0x31, 0xE0, 0x39, 0xE0, 0x3A, 0x00, 0x32, 0x00, + 0x3A, 0x00, 0x3A, 0x00, 0x42, 0x20, 0x3A, 0x00, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x00, 0x39, 0xC0, + 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x20, 0x42, 0x60, 0x42, 0x60, 0x63, 0x41, 0x7B, 0xE8, 0x4A, 0xC0, + 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, + 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x40, 0x32, 0x20, 0x32, 0x20, + 0x3A, 0x20, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x21, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0x60, + 0x21, 0x80, 0x29, 0xA0, 0x29, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x19, 0x40, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x32, 0x00, 0x4A, 0xA0, 0x4A, 0xE0, 0x4A, 0xC0, + 0x4A, 0xC0, 0x42, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x42, 0x40, 0x42, 0x60, 0x42, 0x40, + 0x3A, 0x40, 0x3A, 0x40, 0x42, 0x80, 0x42, 0x80, 0x4A, 0x40, 0x39, 0xA0, 0x29, 0x80, 0x21, 0xA1, + 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, + 0x32, 0x00, 0x3A, 0x40, 0x42, 0x81, 0x4A, 0xA2, 0x4A, 0x82, 0x42, 0x61, 0x3A, 0x00, 0x31, 0xE0, + 0x29, 0xC0, 0x29, 0xC0, 0x31, 0xE0, 0x3A, 0x00, 0x42, 0x40, 0x42, 0x40, 0x42, 0x40, 0x39, 0xE0, + 0x4A, 0x20, 0x10, 0x60, 0x18, 0x00, 0x49, 0x62, 0x72, 0x83, 0x6B, 0x20, 0x62, 0xC0, 0x73, 0x81, + 0x4A, 0x81, 0x31, 0xC0, 0x29, 0xC0, 0x32, 0x01, 0x31, 0xC0, 0x31, 0xE0, 0x3A, 0x00, 0x31, 0xE0, + 0x32, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x20, 0x3A, 0x20, 0x31, 0xC0, 0x31, 0xA0, + 0x31, 0xC0, 0x31, 0xE0, 0x3A, 0x00, 0x42, 0x60, 0x42, 0x60, 0x73, 0xC5, 0x7C, 0x2B, 0x63, 0x64, + 0x4A, 0xA0, 0x42, 0xA0, 0x42, 0x80, 0x4A, 0xA0, 0x4A, 0xA0, 0x42, 0xA0, 0x42, 0x80, 0x42, 0xA0, + 0x42, 0x80, 0x42, 0x60, 0x3A, 0x60, 0x3A, 0x80, 0x3A, 0x60, 0x3A, 0x60, 0x42, 0x40, 0x3A, 0x20, + 0x32, 0x20, 0x32, 0x00, 0x31, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x20, + 0x19, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x29, 0xC0, 0x3A, 0x40, 0x4A, 0xC0, 0x52, 0xE0, + 0x4A, 0xE1, 0x4A, 0xC0, 0x4A, 0xA0, 0x4A, 0xC0, 0x42, 0x80, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x20, + 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x42, 0x40, 0x4A, 0x60, 0x39, 0xE0, 0x29, 0xA0, 0x21, 0xA0, + 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, + 0x32, 0x00, 0x3A, 0x40, 0x4A, 0x81, 0x4A, 0xA3, 0x4A, 0xA3, 0x42, 0x61, 0x3A, 0x20, 0x31, 0xE0, + 0x29, 0xC0, 0x29, 0xC0, 0x31, 0xE0, 0x3A, 0x00, 0x42, 0x40, 0x4A, 0x60, 0x4A, 0x60, 0x42, 0x20, + 0x52, 0x40, 0x29, 0x21, 0x18, 0x60, 0x30, 0xA0, 0x61, 0x84, 0x6A, 0xA1, 0x63, 0x20, 0x4A, 0x81, + 0x29, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x31, 0xC0, 0x31, 0xC0, 0x31, 0xC0, 0x31, 0xE0, 0x31, 0xE0, + 0x31, 0xE0, 0x31, 0xE0, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x20, 0x31, 0xA0, 0x39, 0xC0, + 0x39, 0xE0, 0x3A, 0x01, 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x40, 0x7C, 0x28, 0x73, 0xC9, 0x73, 0xE6, + 0x4A, 0xA0, 0x42, 0xA0, 0x42, 0x80, 0x4A, 0xA0, 0x4A, 0xA0, 0x42, 0x80, 0x42, 0xA0, 0x42, 0xA0, + 0x42, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x42, 0x60, 0x52, 0xC0, 0x63, 0x60, 0x73, 0xA2, + 0x73, 0xA1, 0x73, 0xC2, 0x52, 0xE1, 0x3A, 0x40, 0x3A, 0x21, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0x80, + 0x21, 0x80, 0x21, 0x60, 0x21, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x32, 0x20, + 0x19, 0x60, 0x19, 0x40, 0x21, 0x60, 0x21, 0x60, 0x29, 0x80, 0x31, 0xE0, 0x42, 0x80, 0x53, 0x00, + 0x53, 0x00, 0x4A, 0xC0, 0x4A, 0xA0, 0x4A, 0xA0, 0x42, 0x60, 0x42, 0x60, 0x42, 0x80, 0x42, 0x60, + 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x42, 0x40, 0x4A, 0x60, 0x3A, 0x00, 0x29, 0xA0, 0x21, 0xA0, + 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, + 0x31, 0xE0, 0x3A, 0x40, 0x42, 0x82, 0x4A, 0xA3, 0x4A, 0xA3, 0x42, 0x62, 0x3A, 0x20, 0x31, 0xE0, + 0x29, 0xC0, 0x31, 0xC0, 0x31, 0xE0, 0x3A, 0x20, 0x42, 0x20, 0x4A, 0x60, 0x52, 0x80, 0x52, 0x60, + 0x52, 0x60, 0x31, 0x40, 0x10, 0x61, 0x20, 0x40, 0x61, 0xA5, 0x6A, 0x62, 0x52, 0xC0, 0x29, 0x81, + 0x29, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x31, 0xC0, 0x31, 0xC0, 0x29, 0xA0, 0x31, 0xE0, + 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x3A, 0x00, 0x39, 0xE0, 0x29, 0x80, 0x31, 0xC0, + 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x20, 0x3A, 0x20, 0x52, 0xC1, 0x84, 0x4A, 0x7B, 0xE9, 0x74, 0x07, + 0x4A, 0xE1, 0x42, 0xA0, 0x4A, 0xC0, 0x4A, 0xA0, 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xA0, 0x42, 0xA0, + 0x3A, 0x80, 0x42, 0xA0, 0x52, 0xE0, 0x6B, 0x81, 0x7C, 0x03, 0x8C, 0x64, 0x94, 0xA5, 0x8C, 0x85, + 0x8C, 0x66, 0x9C, 0xC7, 0x9C, 0xC7, 0x9C, 0xA6, 0x94, 0xA6, 0x84, 0x25, 0x6B, 0xA5, 0x3A, 0x40, + 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0xC0, + 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, + 0x19, 0x60, 0x19, 0x40, 0x19, 0x40, 0x21, 0x60, 0x21, 0x80, 0x29, 0x80, 0x3A, 0x00, 0x4A, 0xA0, + 0x53, 0x00, 0x53, 0x00, 0x4A, 0xC0, 0x42, 0x80, 0x42, 0x60, 0x42, 0x40, 0x42, 0x60, 0x42, 0x80, + 0x3A, 0x20, 0x3A, 0x40, 0x42, 0x60, 0x42, 0x60, 0x4A, 0x61, 0x39, 0xE0, 0x29, 0xA0, 0x29, 0xA0, + 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, + 0x31, 0xE0, 0x3A, 0x20, 0x42, 0x82, 0x4A, 0xA3, 0x4A, 0xA3, 0x42, 0x62, 0x3A, 0x20, 0x31, 0xE0, + 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xC0, 0x3A, 0x00, 0x3A, 0x00, 0x4A, 0x60, 0x52, 0x80, 0x52, 0x80, + 0x52, 0x61, 0x49, 0xC1, 0x08, 0x40, 0x18, 0x40, 0x38, 0xC0, 0x6A, 0x44, 0x39, 0xC0, 0x29, 0x60, + 0x29, 0x80, 0x29, 0x80, 0x29, 0x80, 0x29, 0xA0, 0x31, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, + 0x31, 0xC0, 0x31, 0xC0, 0x31, 0xE0, 0x31, 0xE0, 0x39, 0xE0, 0x31, 0xC0, 0x29, 0x80, 0x39, 0xE0, + 0x3A, 0x00, 0x3A, 0x00, 0x31, 0xE0, 0x3A, 0x40, 0x73, 0xC6, 0x8C, 0x4B, 0x84, 0x49, 0x7C, 0x28, + 0x53, 0x02, 0x42, 0x60, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, 0x4A, 0xC0, 0x42, 0x80, 0x4A, 0xA0, + 0x52, 0xE1, 0x63, 0x40, 0x73, 0xC0, 0x84, 0x41, 0x8C, 0x63, 0x84, 0x45, 0x84, 0x65, 0x7C, 0x44, + 0x8C, 0x46, 0x94, 0x66, 0x94, 0xA8, 0x9C, 0xC8, 0xA5, 0x09, 0xB5, 0x4A, 0xC5, 0xCD, 0xA4, 0xA8, + 0x6B, 0x24, 0x39, 0xE0, 0x29, 0x80, 0x21, 0x80, 0x19, 0xA0, 0x19, 0x80, 0x21, 0xC0, 0x21, 0x80, + 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, + 0x19, 0x40, 0x19, 0x60, 0x19, 0x40, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x29, 0xC0, 0x3A, 0x20, + 0x4A, 0xC0, 0x53, 0x00, 0x53, 0x00, 0x4A, 0xC0, 0x4A, 0x80, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, + 0x42, 0x60, 0x42, 0x80, 0x42, 0xA0, 0x42, 0x60, 0x3A, 0x20, 0x29, 0xA0, 0x21, 0x80, 0x29, 0xA0, + 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, + 0x29, 0xC0, 0x32, 0x00, 0x42, 0x61, 0x4A, 0x83, 0x4A, 0xA3, 0x42, 0x61, 0x3A, 0x20, 0x31, 0xE0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x3A, 0x00, 0x3A, 0x00, 0x4A, 0x40, 0x52, 0x60, 0x52, 0x80, + 0x52, 0x60, 0x5A, 0x81, 0x4A, 0x42, 0x18, 0x60, 0x28, 0x80, 0x61, 0xC5, 0x51, 0xC4, 0x29, 0x80, + 0x21, 0x60, 0x29, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xA0, + 0x29, 0xA0, 0x29, 0xC0, 0x31, 0xC0, 0x31, 0xE0, 0x39, 0xE0, 0x31, 0xA0, 0x31, 0xA0, 0x39, 0xE0, + 0x3A, 0x00, 0x3A, 0x20, 0x32, 0x00, 0x4A, 0xA3, 0x7B, 0xE8, 0x7B, 0xE9, 0x7C, 0x09, 0x84, 0x29, + 0x5B, 0x21, 0x4A, 0xC0, 0x42, 0x80, 0x42, 0x80, 0x4A, 0xC0, 0x4A, 0xA0, 0x4A, 0x80, 0x52, 0xE0, + 0x63, 0x40, 0x6B, 0xA0, 0x73, 0xC0, 0x7C, 0x02, 0x7C, 0x23, 0x7C, 0x04, 0x7C, 0x24, 0x74, 0x21, + 0x84, 0x25, 0x84, 0x46, 0x94, 0x67, 0x94, 0x48, 0x9C, 0x88, 0xAC, 0xEA, 0xB5, 0x4B, 0xB5, 0x4B, + 0xC5, 0xAC, 0xC5, 0xCD, 0x8C, 0x69, 0x3A, 0x01, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x60, 0x29, 0x80, + 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, + 0x19, 0x40, 0x21, 0x60, 0x19, 0x60, 0x19, 0x40, 0x21, 0x61, 0x21, 0x80, 0x21, 0x80, 0x29, 0xC0, + 0x32, 0x00, 0x4A, 0xA0, 0x53, 0x00, 0x5B, 0x20, 0x53, 0x00, 0x52, 0xC0, 0x4A, 0xA0, 0x4A, 0xA0, + 0x42, 0x60, 0x42, 0x80, 0x42, 0xA0, 0x32, 0x20, 0x29, 0xC0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, + 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, + 0x29, 0xC0, 0x32, 0x00, 0x42, 0x41, 0x4A, 0x83, 0x4A, 0x82, 0x42, 0x61, 0x3A, 0x20, 0x29, 0xE0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x32, 0x00, 0x3A, 0x00, 0x4A, 0x40, 0x52, 0x80, 0x5A, 0xA0, + 0x62, 0xA0, 0x4A, 0x20, 0x5A, 0x60, 0x18, 0x81, 0x18, 0x40, 0x49, 0x81, 0x61, 0xE4, 0x29, 0xC0, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, + 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x31, 0xC0, 0x31, 0xC0, 0x31, 0x60, 0x31, 0x80, 0x39, 0xE0, + 0x39, 0xE0, 0x3A, 0x00, 0x4A, 0xA1, 0x73, 0xC8, 0x7C, 0x09, 0x7B, 0xE9, 0x7B, 0xE8, 0x7C, 0x08, + 0x63, 0x82, 0x73, 0xC3, 0x53, 0x01, 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xA0, 0x63, 0x21, 0x6B, 0x81, + 0x63, 0x60, 0x6B, 0xC0, 0x6B, 0xC0, 0x73, 0xE1, 0x7C, 0x02, 0x7C, 0x03, 0x7C, 0x24, 0x84, 0x06, + 0x84, 0x26, 0x84, 0x26, 0x94, 0x87, 0x94, 0x87, 0x94, 0x86, 0xA4, 0xE8, 0x9C, 0xC7, 0xAD, 0x29, + 0xBD, 0xAC, 0xCE, 0x0E, 0xD6, 0x2E, 0xB5, 0x2B, 0x9C, 0x89, 0x52, 0x83, 0x21, 0x80, 0x19, 0x81, + 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, + 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, + 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, + 0x29, 0xA0, 0x32, 0x00, 0x4A, 0xA0, 0x63, 0x60, 0x6B, 0xA0, 0x5B, 0x40, 0x4A, 0xC0, 0x4A, 0xA0, + 0x4A, 0xA0, 0x42, 0xA0, 0x3A, 0x20, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x21, 0xA0, 0x29, 0xA0, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, + 0x29, 0xA0, 0x31, 0xE0, 0x42, 0x41, 0x4A, 0x82, 0x4A, 0x63, 0x42, 0x61, 0x3A, 0x20, 0x29, 0xE0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x31, 0xC0, 0x3A, 0x00, 0x42, 0x00, 0x4A, 0x40, 0x62, 0xC0, + 0x5A, 0xA0, 0x5A, 0x20, 0x41, 0xC0, 0x29, 0x20, 0x18, 0x20, 0x31, 0x01, 0x6A, 0x45, 0x5A, 0x03, + 0x21, 0x80, 0x21, 0x80, 0x29, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0x80, 0x31, 0x80, 0x21, 0xA0, + 0x21, 0xA0, 0x29, 0xA0, 0x31, 0xC0, 0x29, 0xC0, 0x39, 0xA0, 0x39, 0x60, 0x31, 0xC0, 0x39, 0xE0, + 0x39, 0xE0, 0x3A, 0x21, 0x63, 0x66, 0x73, 0xE9, 0x7C, 0x0A, 0x7C, 0x09, 0x7C, 0x08, 0x4A, 0xC2, + 0x5B, 0x00, 0x73, 0xC2, 0x63, 0x81, 0x63, 0x82, 0x5B, 0x20, 0x6B, 0x62, 0x73, 0xC2, 0x6B, 0x81, + 0x73, 0xA0, 0x6B, 0x80, 0x73, 0xC0, 0x7B, 0xE0, 0x73, 0xC1, 0x84, 0x04, 0x7B, 0xE4, 0x7C, 0x04, + 0x7B, 0xE2, 0x7B, 0xE2, 0x7B, 0xE2, 0x84, 0x03, 0x84, 0x44, 0x94, 0x85, 0x94, 0x86, 0x9C, 0xA7, + 0xAD, 0x29, 0xBD, 0x6A, 0xC5, 0x8B, 0xCD, 0xED, 0xDE, 0x72, 0xC5, 0xEF, 0x9C, 0xC9, 0x52, 0xA1, + 0x21, 0x80, 0x19, 0x61, 0x19, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, + 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, + 0x21, 0x80, 0x29, 0xA0, 0x32, 0x00, 0x4A, 0xA0, 0x52, 0xE1, 0x4A, 0xC0, 0x3A, 0x40, 0x3A, 0x20, + 0x3A, 0x40, 0x3A, 0x40, 0x32, 0x00, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, + 0x21, 0xA0, 0x31, 0xE0, 0x3A, 0x41, 0x42, 0x62, 0x42, 0x62, 0x42, 0x41, 0x32, 0x00, 0x29, 0xC0, + 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x31, 0x80, 0x42, 0x00, 0x5A, 0x80, + 0x5A, 0xA1, 0x41, 0xC0, 0x31, 0x81, 0x29, 0x41, 0x10, 0x40, 0x20, 0x60, 0x51, 0x41, 0x6A, 0x64, + 0x39, 0xA1, 0x29, 0xA0, 0x29, 0x60, 0x21, 0x40, 0x21, 0xA0, 0x21, 0x60, 0x29, 0xA0, 0x21, 0xA0, + 0x29, 0xA1, 0x19, 0x80, 0x29, 0xA0, 0x31, 0xA0, 0x52, 0x21, 0x32, 0x00, 0x31, 0xC0, 0x3A, 0x41, + 0x4A, 0x82, 0x5B, 0x04, 0x63, 0x25, 0x7B, 0xC7, 0x84, 0x07, 0x94, 0x68, 0x9C, 0xEA, 0x84, 0x28, + 0x6B, 0x83, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xE0, 0x52, 0xE0, 0x63, 0x82, 0x6B, 0xA1, + 0x6B, 0xA0, 0x6B, 0x80, 0x73, 0xC0, 0x7C, 0x02, 0x73, 0xC1, 0x6B, 0xA0, 0x6B, 0xA0, 0x6B, 0xA0, + 0x6B, 0xC0, 0x6B, 0xC0, 0x6B, 0xA0, 0x6B, 0xC1, 0x74, 0x02, 0x84, 0x44, 0x84, 0x65, 0x8C, 0xA7, + 0x94, 0x86, 0x9C, 0xC6, 0xA4, 0xE6, 0xBD, 0x6B, 0xD6, 0x32, 0xD6, 0x32, 0xDE, 0x71, 0xD6, 0x51, + 0x7B, 0xC5, 0x42, 0x41, 0x29, 0x80, 0x21, 0xA0, 0x29, 0xC0, 0x29, 0xA0, 0x21, 0xA0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, + 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, + 0x29, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x32, 0x00, 0x31, 0xE0, 0x29, 0xC0, 0x29, 0xC0, + 0x31, 0xE0, 0x31, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, + 0x29, 0xA0, 0x31, 0xE0, 0x3A, 0x21, 0x42, 0x62, 0x42, 0x62, 0x3A, 0x41, 0x32, 0x00, 0x29, 0xC0, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0x81, 0x21, 0x81, 0x29, 0x80, 0x39, 0xE0, 0x52, 0x81, + 0x5A, 0x61, 0x4A, 0x21, 0x29, 0x80, 0x21, 0x60, 0x10, 0x60, 0x18, 0x40, 0x40, 0xC0, 0x59, 0xA2, + 0x62, 0x66, 0x39, 0xE2, 0x29, 0x80, 0x29, 0x80, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, + 0x21, 0x80, 0x29, 0xC0, 0x29, 0xA0, 0x52, 0x20, 0x42, 0x20, 0x29, 0xC0, 0x31, 0xE0, 0x29, 0xC0, + 0x32, 0x00, 0x42, 0x60, 0x73, 0xC4, 0x8C, 0x26, 0x9C, 0x87, 0xA4, 0xC9, 0xA4, 0xEA, 0x9C, 0xC9, + 0x7C, 0x06, 0x4A, 0x80, 0x4A, 0xA0, 0x42, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x4A, 0xC0, 0x52, 0xE0, + 0x6B, 0xC1, 0x7C, 0x01, 0x6B, 0x80, 0x6B, 0x60, 0x6B, 0x80, 0x6B, 0xA0, 0x6B, 0xA0, 0x6B, 0x60, + 0x6B, 0x80, 0x6B, 0xA0, 0x6B, 0xA0, 0x73, 0xC0, 0x73, 0xE1, 0x7C, 0x23, 0x7C, 0x03, 0x84, 0x24, + 0x8C, 0x65, 0x8C, 0x64, 0x94, 0x64, 0xA4, 0xE8, 0xC5, 0xEE, 0xC5, 0xED, 0xC5, 0xEC, 0xCD, 0xEE, + 0xC5, 0xCC, 0xBD, 0xAB, 0x84, 0x07, 0x42, 0x61, 0x21, 0x80, 0x29, 0xC0, 0x29, 0xE0, 0x21, 0x80, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, + 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, + 0x21, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, + 0x29, 0xA0, 0x31, 0xE0, 0x3A, 0x21, 0x42, 0x42, 0x42, 0x62, 0x3A, 0x41, 0x31, 0xE0, 0x29, 0xA0, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x29, 0x80, 0x31, 0xE0, + 0x5A, 0x20, 0x52, 0x41, 0x21, 0x60, 0x21, 0x80, 0x10, 0xA1, 0x10, 0x20, 0x20, 0x80, 0x30, 0xC0, + 0x30, 0xC0, 0x39, 0xC2, 0x21, 0x80, 0x29, 0xA0, 0x29, 0x80, 0x29, 0x80, 0x29, 0x80, 0x29, 0xA1, + 0x21, 0xA0, 0x29, 0x80, 0x52, 0x20, 0x52, 0xC2, 0x21, 0xC0, 0x29, 0xE0, 0x29, 0xA0, 0x32, 0x00, + 0x32, 0x00, 0x52, 0xC2, 0x6B, 0x84, 0x6B, 0x42, 0x7B, 0xA3, 0x7B, 0xC4, 0x84, 0x26, 0x8C, 0x27, + 0x5B, 0x02, 0x52, 0xA1, 0x42, 0x60, 0x4A, 0x80, 0x42, 0x60, 0x4A, 0xA1, 0x42, 0x80, 0x4A, 0xA0, + 0x52, 0xC0, 0x73, 0xA2, 0x6B, 0x40, 0x6B, 0x80, 0x63, 0x60, 0x63, 0x60, 0x63, 0x60, 0x6B, 0x60, + 0x6B, 0x80, 0x6B, 0x80, 0x6B, 0xA0, 0x6B, 0xA0, 0x6B, 0xC1, 0x74, 0x02, 0x7C, 0x03, 0x7C, 0x24, + 0x8C, 0x45, 0x94, 0x65, 0x94, 0x85, 0x94, 0xA6, 0xAD, 0x49, 0xB5, 0x8A, 0xB5, 0x8A, 0xBD, 0x8B, + 0xC5, 0xCC, 0xC5, 0xEB, 0xC6, 0x0D, 0xC5, 0xEE, 0x73, 0xE6, 0x29, 0xC0, 0x21, 0x80, 0x29, 0xC1, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, + 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0xA0, + 0x21, 0x80, 0x31, 0xC0, 0x3A, 0x20, 0x42, 0x42, 0x42, 0x42, 0x3A, 0x21, 0x31, 0xE0, 0x21, 0xA0, + 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x19, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, + 0x51, 0xE0, 0x39, 0xA0, 0x21, 0x40, 0x21, 0x60, 0x08, 0x60, 0x08, 0x00, 0x08, 0x00, 0x18, 0x61, + 0x41, 0x22, 0x49, 0x62, 0x29, 0xC0, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x29, 0x80, 0x21, 0xA0, + 0x29, 0xA0, 0x39, 0xA0, 0x5A, 0x80, 0x29, 0xE0, 0x21, 0xC1, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xC0, + 0x42, 0x20, 0x42, 0x61, 0x52, 0xC2, 0x52, 0xC1, 0x42, 0x80, 0x5B, 0x22, 0x63, 0x43, 0x63, 0x23, + 0x4A, 0x80, 0x52, 0x80, 0x4A, 0x40, 0x4A, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x60, 0x42, 0x80, + 0x52, 0xA0, 0x63, 0x00, 0x7B, 0xC1, 0x73, 0x80, 0x6B, 0x60, 0x6B, 0x81, 0x6B, 0x81, 0x6B, 0x80, + 0x6B, 0x60, 0x6B, 0x60, 0x6B, 0x80, 0x6B, 0x80, 0x73, 0xA1, 0x73, 0xC1, 0x7B, 0xE2, 0x7C, 0x03, + 0x84, 0x25, 0x84, 0x45, 0x8C, 0x86, 0x8C, 0x85, 0x9C, 0xE7, 0xAD, 0x2A, 0xAD, 0x4B, 0xB5, 0x4A, + 0xB5, 0x8A, 0xB5, 0x8A, 0xC5, 0xCC, 0xCE, 0x2F, 0xD6, 0x6F, 0x7B, 0xE5, 0x29, 0xA0, 0x21, 0x81, + 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, + 0x21, 0x80, 0x29, 0xC0, 0x3A, 0x00, 0x42, 0x22, 0x42, 0x42, 0x3A, 0x21, 0x31, 0xC0, 0x21, 0x80, + 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x60, 0x21, 0x40, 0x21, 0x40, + 0x62, 0x62, 0x39, 0xC1, 0x29, 0x80, 0x21, 0x60, 0x10, 0x60, 0x10, 0x20, 0x18, 0x40, 0x30, 0xC1, + 0x40, 0xE1, 0x49, 0x01, 0x39, 0xC1, 0x21, 0xA0, 0x21, 0x80, 0x21, 0xE0, 0x29, 0xA0, 0x29, 0xE0, + 0x39, 0xA0, 0x62, 0xA1, 0x2A, 0x00, 0x29, 0xC1, 0x29, 0xC0, 0x29, 0xA0, 0x31, 0xE0, 0x31, 0xE0, + 0x39, 0xE0, 0x39, 0xE0, 0x31, 0xE0, 0x3A, 0x20, 0x32, 0x20, 0x32, 0x20, 0x42, 0x40, 0x4A, 0x60, + 0x4A, 0x60, 0x4A, 0x40, 0x52, 0x80, 0x52, 0x80, 0x52, 0x80, 0x52, 0x80, 0x52, 0x80, 0x52, 0xA0, + 0x5A, 0xA0, 0x62, 0xE0, 0x73, 0x82, 0x7B, 0xC1, 0x7B, 0x82, 0x9C, 0x87, 0x7B, 0xC2, 0x73, 0xA0, + 0x7B, 0xA0, 0x7B, 0xA0, 0x7B, 0xC1, 0x7B, 0xE2, 0x84, 0x03, 0x84, 0x04, 0x83, 0xE4, 0x8C, 0x05, + 0x8C, 0x66, 0x84, 0x46, 0x8C, 0x66, 0x84, 0x64, 0x8C, 0xA4, 0xA5, 0x28, 0xAD, 0x2A, 0xAD, 0x49, + 0xAD, 0x6A, 0xAD, 0x6A, 0xBD, 0xCC, 0xCE, 0x0F, 0xDE, 0x90, 0xA5, 0x09, 0x31, 0xC0, 0x21, 0x80, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, + 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, + 0x31, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, + 0x21, 0x80, 0x29, 0xC0, 0x31, 0xE0, 0x3A, 0x22, 0x42, 0x42, 0x3A, 0x22, 0x29, 0xC0, 0x21, 0x60, + 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x21, 0x20, + 0x72, 0xC3, 0x39, 0xE1, 0x19, 0x40, 0x21, 0x60, 0x18, 0xA0, 0x18, 0x00, 0x28, 0x80, 0x41, 0x00, + 0x51, 0x21, 0x6A, 0x45, 0x49, 0xC2, 0x29, 0x80, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x31, 0xA0, + 0x5A, 0x61, 0x42, 0x40, 0x29, 0xC0, 0x32, 0x00, 0x4A, 0x61, 0x29, 0xC0, 0x31, 0xC0, 0x29, 0xE0, + 0x3A, 0x00, 0x31, 0xA0, 0x42, 0x21, 0x39, 0xE0, 0x32, 0x00, 0x3A, 0x40, 0x42, 0x40, 0x42, 0x40, + 0x4A, 0x40, 0x4A, 0x40, 0x5A, 0x80, 0x5A, 0xA0, 0x52, 0x60, 0x5A, 0x80, 0x5A, 0x80, 0x5A, 0x80, + 0x5A, 0xA0, 0x62, 0xC1, 0x5A, 0xC0, 0x6B, 0x20, 0x7B, 0x83, 0x73, 0x41, 0x73, 0x82, 0x63, 0x40, + 0x63, 0x40, 0x5B, 0x20, 0x63, 0x40, 0x5B, 0x20, 0x63, 0x60, 0x6B, 0x81, 0x73, 0xA1, 0x7B, 0xE2, + 0x7B, 0xC2, 0x84, 0x04, 0x8C, 0x86, 0x84, 0x63, 0x84, 0x41, 0x8C, 0xA3, 0x9C, 0xE7, 0xA5, 0x28, + 0xB5, 0x4A, 0xB5, 0x8A, 0xBD, 0xEB, 0xC6, 0x0E, 0xD6, 0x50, 0xDE, 0x70, 0x7B, 0xE6, 0x21, 0x80, + 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, + 0x21, 0x80, 0x29, 0xA0, 0x31, 0xE0, 0x3A, 0x22, 0x42, 0x22, 0x3A, 0x02, 0x29, 0xC0, 0x21, 0x60, + 0x19, 0x20, 0x19, 0x00, 0x11, 0x00, 0x11, 0x00, 0x10, 0xE0, 0x10, 0xE0, 0x19, 0x00, 0x19, 0x20, + 0x7A, 0xA2, 0x4A, 0x01, 0x21, 0x40, 0x21, 0x60, 0x18, 0xA1, 0x18, 0x20, 0x30, 0xC1, 0x49, 0x00, + 0x61, 0xC3, 0x51, 0xC3, 0x5A, 0x24, 0x31, 0xA0, 0x29, 0xA0, 0x29, 0x80, 0x31, 0xC0, 0x62, 0x42, + 0x52, 0x60, 0x3A, 0x00, 0x63, 0x02, 0x63, 0x02, 0x3A, 0x01, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, + 0x3A, 0x00, 0x42, 0x20, 0x41, 0xE0, 0x4A, 0x20, 0x42, 0x20, 0x42, 0x20, 0x42, 0x40, 0x4A, 0x40, + 0x4A, 0x60, 0x52, 0x60, 0x52, 0x80, 0x5A, 0x80, 0x5A, 0x80, 0x5A, 0x60, 0x5A, 0x81, 0x5A, 0x60, + 0x5A, 0x60, 0x5A, 0xA0, 0x5A, 0xE0, 0x73, 0x81, 0x7B, 0xA0, 0x83, 0xA0, 0x73, 0x80, 0x6B, 0x60, + 0x63, 0x60, 0x63, 0x20, 0x63, 0x40, 0x5B, 0x20, 0x63, 0x40, 0x63, 0x40, 0x63, 0x60, 0x6B, 0xA0, + 0x63, 0x80, 0x63, 0x60, 0x6B, 0x80, 0x73, 0xC0, 0x7C, 0x01, 0x8C, 0x44, 0x94, 0x47, 0x9C, 0x88, + 0x9C, 0x46, 0xB5, 0x6A, 0xB5, 0xCC, 0xBE, 0x0D, 0xD6, 0x2F, 0xDE, 0x6F, 0xBD, 0xCC, 0x39, 0xE1, + 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, + 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, + 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x60, + 0x21, 0x60, 0x21, 0xA0, 0x31, 0xE0, 0x3A, 0x22, 0x3A, 0x22, 0x3A, 0x02, 0x29, 0xA1, 0x21, 0x40, + 0x19, 0x00, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xE0, 0x11, 0x00, + 0x62, 0x40, 0x52, 0x20, 0x21, 0x21, 0x19, 0x40, 0x18, 0xC0, 0x20, 0x61, 0x28, 0x60, 0x41, 0x41, + 0x59, 0xE3, 0x49, 0x62, 0x41, 0xA2, 0x5A, 0x45, 0x41, 0xE3, 0x49, 0xC2, 0x71, 0xE3, 0x6A, 0x63, + 0x4A, 0x60, 0x52, 0x81, 0x31, 0xC1, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xE0, 0x31, 0xE1, + 0x42, 0x00, 0x4A, 0x40, 0x42, 0x20, 0x42, 0x20, 0x42, 0x21, 0x4A, 0x00, 0x52, 0x60, 0x42, 0x60, + 0x4A, 0x41, 0x4A, 0x20, 0x52, 0x60, 0x5A, 0x61, 0x62, 0x80, 0x6A, 0xC0, 0x5A, 0x80, 0x5A, 0x81, + 0x5A, 0xA0, 0x5A, 0xA0, 0x63, 0x20, 0x73, 0x80, 0x6B, 0x40, 0x73, 0x40, 0x7B, 0x60, 0x7B, 0x60, + 0x6B, 0x60, 0x63, 0x40, 0x63, 0x40, 0x63, 0x20, 0x63, 0x40, 0x5B, 0x40, 0x5B, 0x60, 0x63, 0x80, + 0x6B, 0x80, 0x6B, 0x80, 0x6B, 0x80, 0x6B, 0xA0, 0x63, 0x80, 0x6B, 0x80, 0x73, 0xC1, 0x7C, 0x02, + 0x8B, 0xE1, 0xAD, 0x07, 0xBD, 0xAC, 0xBD, 0xED, 0xCE, 0x4E, 0xDE, 0x91, 0xDE, 0x92, 0x8C, 0x47, + 0x21, 0x80, 0x29, 0x60, 0x21, 0x60, 0x21, 0xC0, 0x29, 0xA0, 0x29, 0xC0, 0x32, 0x00, 0x31, 0xE0, + 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, + 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, + 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x60, + 0x21, 0x60, 0x21, 0x80, 0x31, 0xC0, 0x3A, 0x02, 0x3A, 0x02, 0x31, 0xE2, 0x29, 0xA1, 0x19, 0x20, + 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xC0, 0x08, 0xC0, 0x08, 0xC0, 0x08, 0xC0, 0x10, 0xC0, 0x10, 0xE0, + 0x49, 0xA0, 0x5A, 0x01, 0x19, 0x20, 0x19, 0x40, 0x10, 0xA0, 0x20, 0xA0, 0x41, 0x62, 0x62, 0x44, + 0x51, 0xC3, 0x30, 0xC0, 0x30, 0xC0, 0x39, 0x02, 0x59, 0x84, 0x61, 0xC2, 0x49, 0xC0, 0x4A, 0x20, + 0x31, 0xE0, 0x31, 0xC0, 0x21, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, 0x32, 0x00, + 0x39, 0xA0, 0x41, 0xA0, 0x49, 0xE0, 0x42, 0x00, 0x39, 0xE0, 0x39, 0xE0, 0x4A, 0x00, 0x49, 0xE0, + 0x5A, 0x40, 0x5A, 0x60, 0x62, 0x60, 0x62, 0x80, 0x62, 0x80, 0x62, 0xC0, 0x5A, 0xA0, 0x5A, 0xC0, + 0x5A, 0xC0, 0x5A, 0xE0, 0x63, 0x40, 0x6B, 0x80, 0x6B, 0x60, 0x6B, 0x40, 0x6B, 0x20, 0x6B, 0x40, + 0x6B, 0x40, 0x6B, 0x40, 0x63, 0x40, 0x5B, 0x20, 0x5B, 0x20, 0x63, 0x40, 0x63, 0x40, 0x5B, 0x60, + 0x6B, 0xA0, 0x6B, 0x80, 0x6B, 0xA0, 0x6B, 0xC0, 0x6B, 0xA0, 0x6B, 0xA0, 0x6B, 0x80, 0x6B, 0x80, + 0x73, 0x61, 0x84, 0x43, 0x94, 0xC7, 0xAD, 0x69, 0xCE, 0x4E, 0xDE, 0x71, 0xDE, 0x6F, 0xC5, 0xCC, + 0x3A, 0x41, 0x29, 0x81, 0x21, 0x60, 0x21, 0xA0, 0x29, 0xC0, 0x31, 0xE0, 0x29, 0xE0, 0x29, 0xE0, + 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0xA0, + 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, + 0x21, 0x60, 0x21, 0x80, 0x31, 0xC0, 0x39, 0xE2, 0x39, 0xE2, 0x31, 0xC2, 0x29, 0x81, 0x19, 0x00, + 0x10, 0xC0, 0x08, 0xC0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xA0, 0x10, 0xC0, + 0x31, 0x60, 0x72, 0x42, 0x21, 0x60, 0x11, 0x00, 0x10, 0xA0, 0x18, 0x20, 0x28, 0xA0, 0x51, 0xA2, + 0x31, 0x00, 0x30, 0xE1, 0x20, 0x80, 0x28, 0xA1, 0x31, 0x41, 0x29, 0xC0, 0x29, 0xA0, 0x31, 0xA0, + 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xE0, 0x3A, 0x00, 0x3A, 0x41, 0x42, 0x20, 0x4A, 0x00, + 0x51, 0xE0, 0x51, 0xE0, 0x5A, 0x00, 0x5A, 0x20, 0x52, 0x00, 0x5A, 0x40, 0x5A, 0x41, 0x6A, 0x41, + 0x62, 0x80, 0x62, 0x60, 0x62, 0x60, 0x62, 0x80, 0x5A, 0x80, 0x62, 0xE0, 0x6B, 0x21, 0x5A, 0xC0, + 0x52, 0xC0, 0x63, 0x20, 0x6B, 0x60, 0x6B, 0x80, 0x6B, 0x80, 0x63, 0x60, 0x63, 0x40, 0x63, 0x40, + 0x6B, 0x60, 0x73, 0x60, 0x73, 0x60, 0x63, 0x60, 0x5B, 0x60, 0x63, 0x60, 0x6B, 0x60, 0x63, 0x80, + 0x6B, 0x80, 0x6B, 0x80, 0x6B, 0xA0, 0x6B, 0xC0, 0x6B, 0xA0, 0x6B, 0xA0, 0x6B, 0x80, 0x6B, 0x60, + 0x6B, 0x60, 0x7C, 0x41, 0x8C, 0xA4, 0x94, 0xC5, 0xB5, 0x6A, 0xDE, 0x51, 0xDE, 0x4F, 0xD6, 0x0D, + 0x63, 0x44, 0x21, 0x60, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xE0, 0x2A, 0x00, + 0x21, 0x80, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, + 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, + 0x21, 0x60, 0x21, 0x80, 0x29, 0xA0, 0x39, 0xE2, 0x39, 0xE2, 0x31, 0xC2, 0x29, 0x61, 0x19, 0x00, + 0x08, 0xC0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xC0, + 0x10, 0xC0, 0x59, 0xC0, 0x49, 0xE2, 0x19, 0x20, 0x18, 0xE1, 0x10, 0x20, 0x20, 0x80, 0x49, 0x61, + 0x38, 0xE0, 0x28, 0xC1, 0x08, 0x00, 0x28, 0x40, 0x51, 0xA3, 0x31, 0xC0, 0x29, 0xA0, 0x21, 0xC1, + 0x29, 0xC0, 0x32, 0x00, 0x4A, 0x80, 0x6B, 0x02, 0x7B, 0x22, 0x6A, 0xC0, 0x72, 0xA0, 0x62, 0x80, + 0x92, 0xC3, 0x82, 0xE2, 0x5A, 0x60, 0x5A, 0x20, 0x62, 0x01, 0x52, 0x20, 0x4A, 0x20, 0x52, 0x40, + 0x5A, 0xA0, 0x62, 0xC1, 0x62, 0xA0, 0x62, 0xC0, 0x62, 0xE0, 0x5A, 0xC0, 0x5A, 0xA0, 0x52, 0xA0, + 0x4A, 0x61, 0x4A, 0xA0, 0x63, 0x40, 0x6B, 0xA0, 0x6B, 0x80, 0x63, 0x60, 0x6B, 0x80, 0x63, 0x60, + 0x63, 0x20, 0x6B, 0x40, 0x73, 0x40, 0x6B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x63, 0x40, + 0x63, 0x60, 0x63, 0x80, 0x6B, 0xA0, 0x6B, 0xA0, 0x63, 0x80, 0x63, 0xA0, 0x6B, 0xA0, 0x6B, 0xA0, + 0x7B, 0xE0, 0x7C, 0x20, 0x84, 0x63, 0x8C, 0xA5, 0xA5, 0x27, 0xC5, 0xED, 0xD6, 0x50, 0xDE, 0x71, + 0xB5, 0x4B, 0x31, 0xE0, 0x21, 0x80, 0x29, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x31, 0xC0, 0x2A, 0x00, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, + 0x21, 0x60, 0x21, 0x60, 0x31, 0xA0, 0x39, 0xE2, 0x39, 0xE3, 0x39, 0xC2, 0x29, 0x61, 0x18, 0xE0, + 0x08, 0xA0, 0x08, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xC0, + 0x10, 0xA0, 0x49, 0xC2, 0x6A, 0x44, 0x19, 0x00, 0x10, 0xC0, 0x10, 0x40, 0x20, 0x80, 0x49, 0x60, + 0x41, 0x20, 0x30, 0xC1, 0x18, 0x21, 0x10, 0x00, 0x59, 0x64, 0x51, 0xA3, 0x29, 0xA0, 0x31, 0xE0, + 0x62, 0x81, 0x8B, 0x65, 0x8B, 0x85, 0x7A, 0xC3, 0x52, 0xA2, 0x42, 0x20, 0x32, 0x40, 0x82, 0x65, + 0xDB, 0xCD, 0xAB, 0xE8, 0x6B, 0x40, 0x62, 0xE0, 0x6A, 0xC0, 0x62, 0xC0, 0x5A, 0xA0, 0x5A, 0xA0, + 0x5A, 0xA1, 0x5A, 0x80, 0x63, 0x00, 0x6B, 0x60, 0x5B, 0x01, 0x42, 0x41, 0x31, 0xE0, 0x31, 0xE0, + 0x31, 0xC0, 0x31, 0xC0, 0x4A, 0xA0, 0x63, 0x60, 0x6B, 0x80, 0x63, 0x60, 0x6B, 0x80, 0x63, 0x60, + 0x5B, 0x60, 0x63, 0x40, 0x6B, 0x40, 0x73, 0x40, 0x6B, 0x40, 0x5B, 0x40, 0x53, 0x20, 0x63, 0x40, + 0x5B, 0x40, 0x63, 0x60, 0x6B, 0xA0, 0x6B, 0xA0, 0x63, 0x80, 0x63, 0x80, 0x63, 0xA0, 0x6B, 0xA0, + 0x73, 0xE0, 0x7C, 0x22, 0x84, 0x43, 0x8C, 0x85, 0x9C, 0xE6, 0xB5, 0xA9, 0xD6, 0x70, 0xDE, 0x71, + 0xDE, 0x6F, 0x5B, 0x44, 0x21, 0x80, 0x29, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, + 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, + 0x21, 0x40, 0x21, 0x60, 0x29, 0xA0, 0x39, 0xE2, 0x39, 0xE3, 0x39, 0xC2, 0x29, 0x61, 0x18, 0xE0, + 0x08, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0xA0, 0x08, 0xA0, + 0x10, 0xC0, 0x21, 0x00, 0x69, 0xE5, 0x49, 0xE4, 0x20, 0xC0, 0x10, 0x00, 0x30, 0xA0, 0x49, 0x41, + 0x30, 0xE2, 0x38, 0xA1, 0x38, 0x81, 0x10, 0x00, 0x28, 0x80, 0x61, 0xA3, 0x6A, 0x02, 0x82, 0x83, + 0x73, 0x03, 0x52, 0x60, 0x3A, 0x00, 0x2A, 0x00, 0x31, 0xE0, 0x32, 0x00, 0x5A, 0x42, 0xC2, 0xE9, + 0xB4, 0x47, 0x84, 0x02, 0x5B, 0xC0, 0x5B, 0x40, 0x5B, 0x00, 0x63, 0x41, 0x5B, 0x20, 0x6B, 0x40, + 0x63, 0x20, 0x63, 0x40, 0x63, 0x60, 0x6B, 0x80, 0x6B, 0xC0, 0x5B, 0x40, 0x3A, 0x60, 0x29, 0xE0, + 0x29, 0xA0, 0x29, 0xA0, 0x31, 0xC0, 0x42, 0x60, 0x5B, 0x20, 0x6B, 0x80, 0x6B, 0x80, 0x6B, 0x40, + 0x63, 0x60, 0x5B, 0x40, 0x5B, 0x20, 0x6B, 0x40, 0x73, 0x40, 0x63, 0x40, 0x5B, 0x20, 0x5B, 0x40, + 0x5B, 0x40, 0x63, 0x40, 0x63, 0x60, 0x63, 0x60, 0x63, 0x60, 0x63, 0x60, 0x63, 0x80, 0x63, 0x80, + 0x6B, 0xE0, 0x73, 0xE1, 0x74, 0x21, 0x8C, 0xA5, 0x9C, 0xE6, 0xAD, 0x28, 0xDE, 0x50, 0xDE, 0x50, + 0xD6, 0x2E, 0x94, 0xA8, 0x29, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, + 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, + 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, + 0x19, 0x40, 0x21, 0x60, 0x29, 0xA0, 0x39, 0xC1, 0x41, 0xE2, 0x39, 0xC2, 0x29, 0x61, 0x18, 0xE0, + 0x08, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x80, 0x08, 0xA0, + 0x08, 0xA0, 0x10, 0xA0, 0x30, 0xA0, 0x20, 0x80, 0x20, 0x60, 0x30, 0x80, 0x40, 0xE1, 0x30, 0x60, + 0x20, 0x40, 0x30, 0x00, 0x60, 0xA2, 0x78, 0xA2, 0x81, 0x43, 0x81, 0xC3, 0x7A, 0x22, 0x52, 0x21, + 0x31, 0xC0, 0x29, 0xA0, 0x29, 0xE0, 0x31, 0xC0, 0x39, 0xC0, 0x4A, 0x21, 0xB2, 0x47, 0xCB, 0xEB, + 0x8C, 0x03, 0x6B, 0x80, 0x63, 0x80, 0x63, 0x40, 0x5B, 0x00, 0x5B, 0x40, 0x53, 0x40, 0x5B, 0x40, + 0x5B, 0x60, 0x5B, 0x40, 0x5B, 0x60, 0x63, 0x60, 0x6B, 0xC0, 0x6B, 0xE0, 0x63, 0x61, 0x3A, 0x20, + 0x29, 0xE0, 0x29, 0xC0, 0x21, 0x80, 0x29, 0xA0, 0x3A, 0x40, 0x5B, 0x00, 0x6B, 0x60, 0x6B, 0x40, + 0x6B, 0x40, 0x63, 0x60, 0x5B, 0x40, 0x63, 0x20, 0x6B, 0x40, 0x73, 0x40, 0x6B, 0x40, 0x5B, 0x40, + 0x63, 0x40, 0x5B, 0x40, 0x63, 0x20, 0x63, 0x40, 0x5B, 0x40, 0x5B, 0x60, 0x63, 0x60, 0x63, 0x80, + 0x63, 0xA0, 0x63, 0xA0, 0x74, 0x00, 0x8C, 0x85, 0x94, 0xC6, 0xAD, 0x28, 0xD6, 0x50, 0xDE, 0x70, + 0xDE, 0x70, 0xC5, 0xCC, 0x42, 0x21, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xC0, + 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, + 0x29, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, + 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, + 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, 0x21, 0x40, + 0x19, 0x40, 0x21, 0x60, 0x29, 0xA0, 0x39, 0xC1, 0x39, 0xE2, 0x39, 0xC2, 0x29, 0x61, 0x18, 0xE0, + 0x10, 0xA0, 0x08, 0xA0, 0x08, 0x80, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x80, 0x08, 0x80, + 0x08, 0xA0, 0x10, 0xC0, 0x20, 0xC0, 0x30, 0xC0, 0x49, 0x21, 0x51, 0x60, 0x59, 0xA0, 0x49, 0x40, + 0x20, 0xC0, 0x19, 0x00, 0x30, 0xC1, 0x41, 0x00, 0x61, 0x80, 0x79, 0xC1, 0x7A, 0x43, 0x82, 0xA5, + 0x7A, 0xE2, 0x6A, 0x81, 0x51, 0xE0, 0x3A, 0x00, 0x3A, 0x01, 0x89, 0xC4, 0xBB, 0xA8, 0x8C, 0x04, + 0x73, 0xA0, 0x63, 0x80, 0x5B, 0x80, 0x63, 0x60, 0x63, 0x60, 0x5B, 0x20, 0x53, 0x20, 0x5B, 0x21, + 0x5B, 0x40, 0x5B, 0x40, 0x63, 0x80, 0x63, 0x80, 0x63, 0x80, 0x63, 0xA0, 0x6B, 0xA1, 0x4A, 0xA0, + 0x29, 0xE0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x60, 0x3A, 0x20, 0x5B, 0x00, 0x6B, 0x80, + 0x63, 0x60, 0x6B, 0x60, 0x63, 0x40, 0x5B, 0x20, 0x63, 0x20, 0x73, 0x40, 0x73, 0x40, 0x63, 0x40, + 0x63, 0x40, 0x63, 0x40, 0x63, 0x40, 0x63, 0x40, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x40, 0x63, 0x60, + 0x63, 0x61, 0x6B, 0xC1, 0x73, 0xE1, 0x7C, 0x23, 0x94, 0xA5, 0x9C, 0xE6, 0xB5, 0x8A, 0xD6, 0x2E, + 0xDE, 0x70, 0xD6, 0x0D, 0x6B, 0x24, 0x21, 0xA1, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x31, 0xC0, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x21, 0xA0, + 0x29, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xC0, + 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, + 0x29, 0xA0, 0x31, 0xE0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x60, 0x21, 0x40, 0x21, 0x40, + 0x21, 0x20, 0x21, 0x40, 0x29, 0x80, 0x31, 0xE1, 0x39, 0xC1, 0x39, 0xE2, 0x29, 0x41, 0x21, 0x00, + 0x10, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x60, 0x08, 0x80, 0x08, 0x80, 0x08, 0xA0, + 0x10, 0xA0, 0x18, 0xC0, 0x31, 0x21, 0x20, 0xA0, 0x38, 0xE0, 0x69, 0x61, 0x82, 0x20, 0x61, 0x80, + 0x21, 0x20, 0x18, 0xE0, 0x19, 0x20, 0x19, 0x00, 0x21, 0x21, 0x29, 0x01, 0x38, 0x81, 0x48, 0x41, + 0x60, 0xC0, 0x79, 0xA0, 0x82, 0x41, 0x7A, 0xA1, 0x8B, 0x44, 0xB3, 0x47, 0xB4, 0x07, 0x6B, 0xA0, + 0x6B, 0xA0, 0x6B, 0x80, 0x63, 0x80, 0x63, 0x60, 0x63, 0x60, 0x5B, 0x20, 0x63, 0x40, 0x63, 0x20, + 0x5B, 0x20, 0x5B, 0x40, 0x63, 0x80, 0x5B, 0x80, 0x63, 0x80, 0x6B, 0x80, 0x73, 0xC1, 0x63, 0x60, + 0x3A, 0x20, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x60, 0x21, 0x60, 0x3A, 0x00, 0x5B, 0x20, + 0x6B, 0x80, 0x63, 0x40, 0x5B, 0x40, 0x63, 0x40, 0x63, 0x41, 0x63, 0x20, 0x6B, 0x60, 0x63, 0x00, + 0x5B, 0x00, 0x63, 0x60, 0x6B, 0x60, 0x6B, 0x60, 0x6B, 0x60, 0x63, 0x60, 0x63, 0x60, 0x5B, 0x21, + 0x63, 0x80, 0x63, 0x81, 0x73, 0xC2, 0x84, 0x43, 0x84, 0x63, 0x8C, 0x63, 0xB5, 0x49, 0xCD, 0xEC, + 0xD6, 0x52, 0xE6, 0x71, 0xAC, 0xEB, 0x31, 0xC0, 0x21, 0x80, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, + 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x21, 0xA0, + 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, + 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, + 0x29, 0xC0, 0x29, 0x80, 0x29, 0xA0, 0x21, 0x80, 0x21, 0xA0, 0x19, 0x60, 0x21, 0x60, 0x21, 0x40, + 0x21, 0x20, 0x21, 0x20, 0x29, 0x60, 0x39, 0x81, 0x41, 0xC2, 0x39, 0xA2, 0x29, 0x61, 0x21, 0x00, + 0x10, 0xC0, 0x10, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, + 0x08, 0x80, 0x18, 0xA0, 0x18, 0xC0, 0x10, 0xA0, 0x18, 0xA0, 0x49, 0x00, 0x69, 0x80, 0x51, 0x41, + 0x18, 0xE0, 0x18, 0xC0, 0x18, 0xE0, 0x19, 0x20, 0x19, 0x00, 0x21, 0x00, 0x18, 0x60, 0x18, 0x20, + 0x30, 0x60, 0x51, 0x02, 0x7A, 0x47, 0x92, 0x67, 0x9A, 0x84, 0x92, 0xE3, 0xA3, 0x62, 0x9B, 0xA2, + 0x9C, 0x41, 0x8C, 0x01, 0x73, 0xA0, 0x63, 0x60, 0x63, 0x60, 0x5B, 0x60, 0x5B, 0x60, 0x5B, 0x60, + 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x20, 0x6B, 0x60, 0x63, 0x60, 0x5B, 0xA0, 0x63, 0xA0, 0x73, 0xA0, + 0x42, 0x80, 0x31, 0xC0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x60, 0x21, 0x40, 0x21, 0x40, 0x3A, 0x00, + 0x5B, 0x00, 0x6B, 0x81, 0x6B, 0x60, 0x63, 0x60, 0x5B, 0x20, 0x63, 0x60, 0x6B, 0x60, 0x6B, 0x60, + 0x53, 0x20, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x00, 0x5B, 0x00, 0x63, 0x20, 0x6B, 0x80, 0x6B, 0x80, + 0x6B, 0x80, 0x73, 0xC1, 0x84, 0x23, 0x7C, 0x02, 0x84, 0x43, 0x9C, 0xC6, 0xAD, 0x09, 0xBD, 0x6C, + 0xCE, 0x0E, 0xDE, 0x70, 0xD6, 0x4F, 0x73, 0x86, 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, + 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, + 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, + 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x29, 0xA0, + 0x21, 0xA0, 0x21, 0x60, 0x29, 0xA0, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x20, 0x18, 0xE0, + 0x19, 0x00, 0x21, 0x00, 0x29, 0x40, 0x39, 0x80, 0x41, 0xC1, 0x39, 0x81, 0x31, 0x41, 0x20, 0xE0, + 0x10, 0x80, 0x10, 0x80, 0x08, 0x80, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x10, 0x61, + 0x10, 0x81, 0x10, 0x60, 0x10, 0x80, 0x18, 0xA0, 0x20, 0x60, 0x50, 0xA0, 0x60, 0xE0, 0x29, 0x01, + 0x18, 0xC0, 0x18, 0xE0, 0x19, 0x01, 0x19, 0x00, 0x19, 0x20, 0x21, 0x20, 0x28, 0xC0, 0x20, 0x20, + 0x28, 0x20, 0x40, 0xA0, 0x48, 0xE1, 0x71, 0x84, 0x92, 0x67, 0x62, 0xC4, 0x62, 0xA0, 0x7B, 0x20, + 0x8B, 0x21, 0x9B, 0xA2, 0xAC, 0x63, 0xAC, 0xA3, 0x94, 0x62, 0x74, 0x01, 0x5B, 0x60, 0x5B, 0x60, + 0x5B, 0x40, 0x63, 0x80, 0x5B, 0x40, 0x5B, 0x80, 0x5B, 0x80, 0x6B, 0xA0, 0x6B, 0xA0, 0x63, 0xA0, + 0x53, 0x00, 0x39, 0xE0, 0x29, 0xA0, 0x21, 0x60, 0x21, 0x80, 0x21, 0x60, 0x19, 0x00, 0x21, 0x60, + 0x3A, 0x20, 0x5B, 0x00, 0x63, 0x40, 0x6B, 0x60, 0x63, 0x60, 0x5B, 0x40, 0x5B, 0x20, 0x73, 0x80, + 0x5B, 0x20, 0x5B, 0x00, 0x53, 0x00, 0x53, 0x20, 0x53, 0x00, 0x4A, 0xC0, 0x52, 0xE0, 0x52, 0xE0, + 0x5B, 0x00, 0x5A, 0xE0, 0x6B, 0x82, 0x8C, 0x85, 0x8C, 0x84, 0x8C, 0x85, 0xA5, 0x08, 0xBD, 0x8C, + 0xCD, 0xEE, 0xD6, 0x71, 0xE6, 0xD3, 0xBD, 0xAF, 0x31, 0xE1, 0x21, 0x80, 0x29, 0x80, 0x21, 0xA0, + 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, + 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, + 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, + 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x19, 0x20, 0x21, 0x20, 0x28, 0xE0, + 0x18, 0xE0, 0x19, 0x00, 0x29, 0x00, 0x39, 0x60, 0x41, 0x81, 0x41, 0x81, 0x31, 0x41, 0x18, 0xE0, + 0x10, 0xC0, 0x10, 0x80, 0x10, 0x60, 0x10, 0x60, 0x10, 0x60, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, + 0x08, 0x40, 0x10, 0xA0, 0x08, 0x60, 0x10, 0x80, 0x30, 0xA0, 0x60, 0xE0, 0x61, 0x41, 0x18, 0xA0, + 0x18, 0xC0, 0x18, 0xC0, 0x18, 0xE0, 0x18, 0xE0, 0x19, 0x00, 0x21, 0x00, 0x29, 0x20, 0x20, 0xA0, + 0x20, 0x00, 0x30, 0x60, 0x40, 0xC0, 0x51, 0xE2, 0x52, 0x02, 0x42, 0x41, 0x5B, 0x00, 0x6B, 0x61, + 0x6B, 0x81, 0x63, 0x20, 0x73, 0x20, 0x8B, 0x60, 0xA3, 0xA1, 0xBC, 0xA4, 0xAC, 0x84, 0x94, 0x23, + 0x6B, 0xA0, 0x63, 0x80, 0x63, 0x40, 0x63, 0x40, 0x63, 0x80, 0x63, 0xA0, 0x63, 0xA0, 0x6B, 0xA0, + 0x63, 0x60, 0x52, 0xE0, 0x52, 0xC1, 0x4A, 0xA0, 0x42, 0x80, 0x3A, 0x40, 0x31, 0xE0, 0x3A, 0x20, + 0x4A, 0xA0, 0x73, 0xC0, 0x84, 0x00, 0x6B, 0x80, 0x6B, 0x60, 0x63, 0x41, 0x63, 0x20, 0x63, 0x40, + 0x73, 0x61, 0x63, 0x00, 0x52, 0xE0, 0x53, 0x00, 0x4A, 0xE0, 0x42, 0xC0, 0x4A, 0xE0, 0x53, 0x00, + 0x4A, 0xE0, 0x4B, 0x00, 0x53, 0x20, 0x63, 0x80, 0x7C, 0x43, 0x9D, 0x07, 0xAD, 0x29, 0xB5, 0x4B, + 0xCD, 0x8E, 0xDE, 0x72, 0xDE, 0x72, 0xDE, 0x92, 0x7B, 0xC8, 0x21, 0x80, 0x21, 0x60, 0x21, 0x80, + 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, + 0x21, 0x80, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, + 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, + 0x21, 0x40, 0x21, 0x40, 0x19, 0x40, 0x21, 0x40, 0x21, 0x20, 0x21, 0x20, 0x18, 0xE0, 0x11, 0x00, + 0x18, 0xE1, 0x18, 0xE0, 0x21, 0x00, 0x31, 0x40, 0x39, 0x61, 0x39, 0x62, 0x31, 0x21, 0x28, 0xC0, + 0x10, 0xA0, 0x10, 0x60, 0x10, 0x60, 0x10, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x40, 0x10, 0x60, + 0x10, 0x60, 0x10, 0x80, 0x10, 0x81, 0x10, 0x80, 0x48, 0xC0, 0x81, 0x20, 0x49, 0x01, 0x10, 0xC0, + 0x19, 0x00, 0x18, 0xE0, 0x18, 0xC0, 0x21, 0x01, 0x18, 0xE0, 0x20, 0xE0, 0x21, 0x00, 0x29, 0x20, + 0x28, 0x60, 0x30, 0x00, 0x40, 0x80, 0x49, 0x80, 0x31, 0xA0, 0x4A, 0x60, 0x6B, 0x40, 0x6B, 0x60, + 0x6B, 0x80, 0x6B, 0xA0, 0x6B, 0x80, 0x63, 0x60, 0x63, 0x40, 0x6B, 0x20, 0x83, 0x40, 0xB4, 0x44, + 0xC5, 0x47, 0xA4, 0xC4, 0x84, 0x22, 0x73, 0xA0, 0x63, 0x40, 0x63, 0x60, 0x63, 0x80, 0x63, 0x60, + 0x63, 0x40, 0x5A, 0xE0, 0x52, 0xE0, 0x5B, 0x20, 0x63, 0x60, 0x63, 0x60, 0x63, 0x60, 0x63, 0x60, + 0x6B, 0x81, 0x73, 0xE0, 0x7C, 0x20, 0x84, 0x40, 0x8C, 0x60, 0x7C, 0x00, 0x63, 0x60, 0x5B, 0x20, + 0x6B, 0x40, 0x63, 0x20, 0x52, 0xE0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xA0, 0x52, 0xE0, + 0x4A, 0xE0, 0x53, 0x00, 0x5B, 0x20, 0x63, 0x80, 0x6B, 0xA0, 0x73, 0xC1, 0x9C, 0xC7, 0xBD, 0x6B, + 0xC5, 0x8C, 0xD6, 0x0F, 0xDE, 0x91, 0xDE, 0x91, 0xBD, 0xAD, 0x3A, 0x21, 0x19, 0x60, 0x21, 0x60, + 0x19, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x19, 0x60, + 0x21, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x21, 0x40, 0x19, 0x40, 0x19, 0x40, + 0x19, 0x40, 0x19, 0x20, 0x21, 0x20, 0x19, 0x00, 0x18, 0xE0, 0x21, 0x00, 0x18, 0xE0, 0x21, 0x00, + 0x10, 0xE0, 0x10, 0xA0, 0x21, 0x00, 0x31, 0x00, 0x41, 0x82, 0x41, 0x61, 0x39, 0x21, 0x28, 0xC0, + 0x18, 0xA0, 0x18, 0x60, 0x18, 0x60, 0x18, 0x60, 0x10, 0x60, 0x10, 0x80, 0x18, 0x60, 0x18, 0x60, + 0x18, 0x60, 0x18, 0xA0, 0x18, 0x60, 0x18, 0x80, 0x61, 0x00, 0x89, 0x40, 0x28, 0x80, 0x10, 0xA0, + 0x10, 0xA0, 0x18, 0xC0, 0x20, 0xE0, 0x20, 0xE0, 0x20, 0xC0, 0x20, 0xE0, 0x21, 0x00, 0x21, 0x20, + 0x28, 0xE0, 0x40, 0x80, 0x38, 0x40, 0x50, 0xC0, 0x41, 0xC0, 0x4A, 0xA1, 0x6B, 0x40, 0x6B, 0xA0, + 0x6B, 0xA0, 0x63, 0x80, 0x63, 0xA0, 0x63, 0xA0, 0x63, 0x60, 0x6B, 0x60, 0x63, 0x40, 0x63, 0x40, + 0x83, 0x81, 0xAC, 0x25, 0xC4, 0xC8, 0xAC, 0x86, 0x6B, 0x41, 0x5A, 0xE0, 0x52, 0xA0, 0x5A, 0xC0, + 0x52, 0xE0, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x20, 0x63, 0x61, 0x6B, 0x80, + 0x6B, 0x60, 0x6B, 0xA0, 0x73, 0xE0, 0x7C, 0x01, 0x73, 0xA0, 0x7C, 0x00, 0x7B, 0xE0, 0x74, 0x00, + 0x6B, 0x20, 0x6B, 0x40, 0x63, 0x40, 0x52, 0xC0, 0x4A, 0xA0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xE0, + 0x4A, 0xC0, 0x4A, 0xC0, 0x5B, 0x40, 0x5B, 0x40, 0x63, 0x80, 0x63, 0x80, 0x73, 0xC2, 0x9C, 0xE7, + 0xBD, 0xAC, 0xCE, 0x0E, 0xDE, 0x92, 0xDE, 0x91, 0xD6, 0x4F, 0x7B, 0xE7, 0x21, 0x80, 0x21, 0x40, + 0x19, 0x40, 0x19, 0x40, 0x19, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, + 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x19, 0x40, + 0x19, 0x40, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, + 0x19, 0x20, 0x21, 0x00, 0x20, 0xE0, 0x10, 0xC0, 0x11, 0x00, 0x20, 0xE0, 0x93, 0x2A, 0xCB, 0x8E, + 0xBB, 0x0B, 0xB2, 0x8A, 0xBA, 0xAA, 0xAA, 0x28, 0x9A, 0x28, 0x79, 0xA5, 0x51, 0x42, 0x39, 0x00, + 0x60, 0xE2, 0x81, 0x44, 0xA9, 0xE8, 0xC2, 0x0A, 0xC1, 0xE9, 0xC1, 0xE9, 0xC1, 0xE9, 0xC1, 0xC9, + 0xD2, 0x6D, 0xD2, 0xCD, 0xBA, 0x29, 0x91, 0xC7, 0x78, 0xC0, 0x89, 0x01, 0x8A, 0x06, 0x79, 0x65, + 0x79, 0x44, 0x71, 0x85, 0x59, 0xA4, 0x31, 0x00, 0x21, 0x00, 0x21, 0x00, 0x20, 0xE0, 0x20, 0xE0, + 0x21, 0x00, 0x30, 0xC0, 0x28, 0x20, 0x48, 0x41, 0x51, 0x40, 0x52, 0x60, 0x73, 0x60, 0x73, 0xA0, + 0x6B, 0xA0, 0x73, 0xA0, 0x7B, 0xC0, 0x7B, 0xC0, 0x6B, 0xA0, 0x63, 0xA0, 0x63, 0x80, 0x63, 0x80, + 0x6B, 0x40, 0x73, 0x60, 0x7B, 0x60, 0x93, 0x62, 0x82, 0xC0, 0x72, 0xE1, 0x5A, 0xA0, 0x52, 0xC0, + 0x5B, 0x00, 0x5B, 0x20, 0x63, 0x40, 0x63, 0x40, 0x63, 0x40, 0x63, 0x40, 0x63, 0x20, 0x63, 0x20, + 0x6B, 0x81, 0x63, 0x60, 0x63, 0x60, 0x6B, 0xA0, 0x63, 0x60, 0x6B, 0xA1, 0x6B, 0x80, 0x73, 0xC1, + 0x8C, 0x40, 0x84, 0x00, 0x7B, 0xE0, 0x6B, 0x40, 0x52, 0xA0, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0xE0, + 0x4A, 0xE0, 0x52, 0xE0, 0x5B, 0x60, 0x5B, 0x60, 0x63, 0x80, 0x6B, 0xE1, 0x73, 0xE2, 0x7C, 0x43, + 0xAD, 0x49, 0xCE, 0x0E, 0xCE, 0x30, 0xD6, 0x72, 0xDE, 0x92, 0xC5, 0xEF, 0x42, 0x21, 0x19, 0x40, + 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, + 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x19, 0x60, 0x19, 0x40, + 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x00, + 0x18, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x20, 0xE0, 0x40, 0xE1, 0x92, 0x68, 0xDB, 0xAF, 0xE3, 0x8F, + 0xE3, 0x2F, 0xD2, 0xCD, 0xDB, 0x2F, 0xDB, 0x4F, 0xE3, 0x50, 0xE3, 0x2F, 0xDA, 0xCE, 0xE2, 0xEE, + 0xE2, 0xEE, 0xDA, 0x4C, 0xD9, 0xEC, 0xD1, 0xCB, 0xC9, 0xCA, 0xD2, 0x0B, 0xC9, 0xCA, 0xB9, 0x08, + 0xD2, 0x2B, 0xB9, 0xE9, 0xA1, 0x64, 0x80, 0xC2, 0x81, 0x01, 0x99, 0x42, 0x99, 0x85, 0xA1, 0x86, + 0xA9, 0xC6, 0xBA, 0x29, 0xC2, 0x8C, 0xBA, 0x6B, 0xA2, 0x49, 0x79, 0xE5, 0x41, 0x21, 0x29, 0x20, + 0x31, 0x01, 0x28, 0xE0, 0x28, 0x40, 0x30, 0x00, 0x58, 0xC0, 0x62, 0x40, 0x63, 0x20, 0x7B, 0xA0, + 0x73, 0xA0, 0x73, 0xC0, 0x73, 0xE0, 0x73, 0xE0, 0x74, 0x00, 0x73, 0xC0, 0x73, 0xA0, 0x73, 0x80, + 0x6B, 0x80, 0x63, 0xA0, 0x5B, 0x80, 0x63, 0x40, 0x73, 0x00, 0x82, 0xE0, 0x72, 0x80, 0x62, 0xA0, + 0x5A, 0xE0, 0x5B, 0x00, 0x63, 0x20, 0x5B, 0x20, 0x63, 0x40, 0x63, 0x60, 0x63, 0x40, 0x63, 0x60, + 0x5B, 0x80, 0x5B, 0x40, 0x63, 0x40, 0x63, 0x40, 0x53, 0x20, 0x5B, 0x60, 0x63, 0x60, 0x6B, 0x80, + 0x6B, 0xC0, 0x6B, 0x80, 0x7B, 0xE0, 0x7C, 0x00, 0x6B, 0x60, 0x5A, 0xE0, 0x52, 0xA0, 0x4A, 0xA0, + 0x4A, 0xC0, 0x5B, 0x00, 0x63, 0x60, 0x73, 0xC0, 0x7C, 0x20, 0x84, 0x60, 0x8C, 0x60, 0x9C, 0xC1, + 0x9D, 0x04, 0xAD, 0x48, 0xCE, 0x2F, 0xDE, 0x72, 0xDE, 0xB3, 0xDE, 0xB2, 0x7B, 0xA7, 0x11, 0x20, + 0x19, 0x20, 0x19, 0x20, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, + 0x21, 0x40, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x19, 0x40, 0x19, 0x20, + 0x19, 0x21, 0x11, 0x20, 0x11, 0x00, 0x11, 0x00, 0x19, 0x01, 0x10, 0xE0, 0x11, 0x00, 0x18, 0xC0, + 0x18, 0xE0, 0x20, 0xC0, 0x8A, 0xC9, 0xC3, 0x4D, 0xC2, 0xEC, 0xC2, 0x8B, 0xDA, 0xCD, 0xE2, 0xCE, + 0xDA, 0x4C, 0xDA, 0x4C, 0xDA, 0x4C, 0xE2, 0x6D, 0xE2, 0x4D, 0xE2, 0x4D, 0xDA, 0x2C, 0xEA, 0xCF, + 0xE3, 0x0E, 0xC1, 0xEA, 0xC1, 0xA9, 0xC1, 0xEA, 0xB9, 0xE9, 0xA9, 0x86, 0x99, 0x24, 0x91, 0x02, + 0x70, 0xE1, 0x79, 0x01, 0x81, 0x22, 0x80, 0xE1, 0x78, 0x40, 0x89, 0x03, 0xB2, 0x48, 0x89, 0x63, + 0x79, 0x40, 0x79, 0x21, 0x81, 0x22, 0x91, 0x64, 0xA9, 0xE7, 0xBA, 0x49, 0xBA, 0x8A, 0xB2, 0x49, + 0x81, 0xC5, 0x51, 0x61, 0x51, 0x22, 0x28, 0x40, 0x38, 0x20, 0x61, 0x20, 0x6A, 0xC0, 0x73, 0x80, + 0x73, 0xA0, 0x7B, 0xA0, 0x73, 0xE0, 0x73, 0xE0, 0x7B, 0xE0, 0x73, 0xC0, 0x6B, 0xC0, 0x6B, 0xC0, + 0x6B, 0xA0, 0x6B, 0xA0, 0x6B, 0x80, 0x63, 0x80, 0x63, 0x40, 0x6B, 0x20, 0x73, 0x00, 0x7B, 0x01, + 0x93, 0x62, 0x6B, 0x21, 0x5B, 0x00, 0x63, 0x60, 0x5B, 0x20, 0x5B, 0x40, 0x63, 0x40, 0x63, 0x20, + 0x63, 0x40, 0x5B, 0x20, 0x5B, 0x00, 0x5B, 0x20, 0x5B, 0x00, 0x5B, 0x00, 0x63, 0x40, 0x63, 0x60, + 0x63, 0x60, 0x63, 0x60, 0x73, 0xC1, 0x7C, 0x00, 0x8C, 0x80, 0x94, 0xA0, 0x73, 0xA0, 0x5A, 0xC0, + 0x5A, 0xC0, 0x63, 0x60, 0x6C, 0x00, 0x63, 0xC0, 0x6B, 0xE0, 0x74, 0x00, 0x74, 0x00, 0x74, 0x20, + 0x8C, 0x81, 0x9D, 0x21, 0xBD, 0xC7, 0xD6, 0x51, 0xDE, 0x95, 0xD6, 0x92, 0x9C, 0xEB, 0x21, 0x40, + 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, + 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x20, 0x19, 0x20, + 0x19, 0x00, 0x21, 0x00, 0x11, 0x00, 0x18, 0xC0, 0x18, 0xE0, 0x18, 0xC0, 0x18, 0xC0, 0x10, 0xC0, + 0x18, 0xA0, 0x7A, 0x47, 0xDC, 0x71, 0xBA, 0xEC, 0xCA, 0xEC, 0xCA, 0x2B, 0xD2, 0x4B, 0xD1, 0xEA, + 0xD1, 0xEA, 0xE2, 0x4C, 0xE2, 0x0C, 0xE9, 0xEC, 0xE1, 0xCB, 0xD9, 0x4A, 0xE1, 0x6B, 0xE9, 0xAC, + 0xEA, 0x8F, 0xD9, 0xEB, 0xD1, 0xC9, 0xB1, 0x66, 0x91, 0x43, 0x79, 0x01, 0x60, 0xE0, 0x69, 0x00, + 0xCB, 0x8D, 0xA2, 0xA8, 0xA2, 0x26, 0x81, 0x02, 0x60, 0x80, 0x81, 0x63, 0x99, 0xC4, 0x89, 0xC3, + 0x89, 0x64, 0x89, 0x64, 0x91, 0x64, 0xA1, 0xA6, 0xB9, 0xC8, 0xCA, 0x4B, 0xDA, 0xAD, 0xDA, 0x8E, + 0xDA, 0x8C, 0xDA, 0xEC, 0xEC, 0x10, 0xEC, 0xB3, 0x8A, 0x29, 0x50, 0x40, 0x71, 0xC0, 0x73, 0x20, + 0x73, 0x80, 0x7B, 0xC0, 0x73, 0xA0, 0x73, 0xA0, 0x73, 0xC0, 0x7B, 0xC0, 0x83, 0xE0, 0x6B, 0x80, + 0x6B, 0xC0, 0x6B, 0xA0, 0x6B, 0xA0, 0x63, 0x80, 0x63, 0x60, 0x63, 0x60, 0x6B, 0x40, 0x6B, 0x20, + 0x7B, 0x61, 0x8B, 0x21, 0x73, 0x21, 0x5B, 0x00, 0x5A, 0xE0, 0x63, 0x40, 0x53, 0x00, 0x63, 0x00, + 0x63, 0x40, 0x63, 0x40, 0x63, 0x40, 0x63, 0x40, 0x63, 0x40, 0x63, 0x40, 0x63, 0x80, 0x63, 0x80, + 0x63, 0xA0, 0x6B, 0x80, 0x73, 0xC0, 0x7C, 0x20, 0x7C, 0x00, 0x7C, 0x20, 0x8C, 0x82, 0x63, 0x20, + 0x6B, 0xA0, 0x63, 0x80, 0x63, 0xA0, 0x63, 0xE0, 0x63, 0xC0, 0x63, 0xA0, 0x6B, 0xE0, 0x74, 0x00, + 0x84, 0x40, 0x8C, 0x80, 0x94, 0x80, 0xA5, 0x02, 0xAD, 0x24, 0xBD, 0xA8, 0xBD, 0xCA, 0x73, 0x82, + 0x11, 0x00, 0x11, 0x00, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, + 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, + 0x11, 0x20, 0x10, 0xE0, 0x18, 0xA0, 0x11, 0x00, 0x10, 0xE0, 0x10, 0xC0, 0x18, 0x80, 0x10, 0xC0, + 0x59, 0x83, 0xBA, 0xCB, 0xCA, 0xEC, 0xC2, 0xCC, 0xC2, 0x0A, 0xD1, 0xEA, 0xD2, 0x0A, 0xD1, 0xEA, + 0xD2, 0x4B, 0xD9, 0xEA, 0xD1, 0x49, 0xD9, 0x6A, 0xE9, 0x4B, 0xE1, 0x2A, 0xD9, 0x0A, 0xE0, 0xEA, + 0xE0, 0xCB, 0xE1, 0x0B, 0xE1, 0x4C, 0xE1, 0x6C, 0xD9, 0x4A, 0xD9, 0xAA, 0xB9, 0x47, 0xB1, 0x66, + 0xA9, 0x28, 0xB1, 0x68, 0xA9, 0x26, 0xA9, 0x26, 0xA9, 0x06, 0xB1, 0x26, 0xC1, 0x67, 0xC1, 0x67, + 0xD1, 0x8A, 0xD1, 0xAA, 0xE2, 0x4C, 0xD1, 0xA9, 0xD9, 0xEB, 0xE2, 0x2C, 0xD1, 0xCA, 0xF2, 0xAE, + 0xF3, 0x50, 0xF3, 0xD1, 0xE3, 0x6F, 0xE3, 0xF0, 0xF5, 0x15, 0x92, 0x09, 0x58, 0x80, 0x6A, 0x80, + 0x6B, 0x80, 0x73, 0x60, 0x7B, 0x80, 0x73, 0xA0, 0x73, 0x80, 0x73, 0xA0, 0x73, 0x80, 0x7B, 0x81, + 0x6B, 0x60, 0x6B, 0x60, 0x6B, 0x40, 0x63, 0x20, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x00, 0x62, 0xE0, + 0x5A, 0xA0, 0x62, 0xA0, 0x8B, 0x02, 0x83, 0x42, 0x5B, 0x20, 0x63, 0x00, 0x63, 0x20, 0x5B, 0x20, + 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x60, 0x5B, 0x60, + 0x63, 0x60, 0x63, 0x80, 0x6B, 0xA0, 0x73, 0xE0, 0x73, 0xE0, 0x73, 0xE0, 0x6B, 0xA0, 0x84, 0x61, + 0x84, 0x61, 0x6B, 0xC0, 0x63, 0xA0, 0x63, 0xA0, 0x63, 0xC0, 0x63, 0xA0, 0x6B, 0xE0, 0x6C, 0x00, + 0x74, 0x20, 0x7C, 0x40, 0x84, 0x80, 0x84, 0x60, 0x8C, 0x80, 0x8C, 0x80, 0x8C, 0x81, 0x8C, 0x80, + 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, + 0x11, 0x00, 0x19, 0x00, 0x11, 0x00, 0x11, 0x00, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x00, + 0x19, 0x20, 0x11, 0x00, 0x11, 0x00, 0x18, 0xC0, 0x10, 0xC0, 0x08, 0xA0, 0x10, 0xA0, 0x69, 0x84, + 0xBB, 0x0C, 0xDB, 0x2D, 0xC2, 0x8B, 0xBA, 0x2A, 0xC1, 0x48, 0xD1, 0xAA, 0xE2, 0x4C, 0xC9, 0x89, + 0xD1, 0x89, 0xE9, 0xEB, 0xD0, 0x88, 0xD8, 0x89, 0xD8, 0xC9, 0xE0, 0xCA, 0xE0, 0x89, 0xD0, 0x28, + 0xD8, 0x29, 0xE0, 0x6A, 0xE0, 0x8A, 0xD0, 0x09, 0xD8, 0x49, 0xD8, 0x69, 0xD8, 0x89, 0xD8, 0xEA, + 0xE8, 0xAA, 0xE1, 0x0A, 0xE1, 0x2B, 0xE9, 0x0B, 0xD8, 0xA9, 0xD8, 0x89, 0xE0, 0xCA, 0xD9, 0x2B, + 0xE9, 0xCB, 0xE1, 0x6A, 0xE1, 0x8B, 0xE9, 0xCC, 0xF1, 0xED, 0xE9, 0xAC, 0xF2, 0x2D, 0xE1, 0xAB, + 0xEA, 0xAD, 0xEB, 0x0F, 0xE2, 0x8E, 0xF3, 0x50, 0xF3, 0xD1, 0xF3, 0xD2, 0xDB, 0x6E, 0x99, 0x63, + 0x72, 0x80, 0x6B, 0x20, 0x73, 0x60, 0x73, 0x20, 0x6B, 0x40, 0x5B, 0x20, 0x5A, 0xE0, 0x5A, 0xE0, + 0x5A, 0xA0, 0x52, 0xA0, 0x52, 0x80, 0x4A, 0x60, 0x4A, 0x60, 0x4A, 0x60, 0x4A, 0x60, 0x42, 0x40, + 0x4A, 0x41, 0x42, 0x21, 0x4A, 0x00, 0x82, 0xE2, 0x8B, 0x63, 0x6B, 0x40, 0x63, 0x40, 0x5B, 0x20, + 0x5B, 0x00, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x60, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x20, + 0x63, 0x60, 0x5B, 0x40, 0x63, 0x80, 0x63, 0x80, 0x6B, 0x80, 0x6B, 0xA0, 0x6B, 0xC0, 0x6B, 0xE0, + 0x73, 0xE0, 0x7C, 0x20, 0x63, 0x80, 0x63, 0x80, 0x5B, 0x80, 0x63, 0xA0, 0x63, 0xE0, 0x6B, 0xE0, + 0x74, 0x01, 0x7C, 0x20, 0x7C, 0x20, 0x7C, 0x40, 0x7C, 0x20, 0x7C, 0x40, 0x84, 0x80, 0x84, 0x80, + 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x10, 0xE0, 0x10, 0xE0, + 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x11, 0x00, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, + 0x10, 0xC0, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xA0, 0x10, 0x80, 0x18, 0xC0, 0x69, 0x64, 0xB2, 0xA9, + 0xD3, 0x2E, 0xCB, 0x0E, 0xC2, 0x8B, 0xC1, 0xC8, 0xB8, 0xE6, 0xC9, 0x27, 0xC9, 0x08, 0xC9, 0x08, + 0xD1, 0x08, 0xD0, 0x88, 0xD0, 0x48, 0xE0, 0x89, 0xD8, 0x49, 0xE0, 0xCA, 0xD8, 0x69, 0xD8, 0x29, + 0xD8, 0x08, 0xE0, 0x89, 0xE0, 0x69, 0xE0, 0x48, 0xE0, 0x08, 0xE0, 0x09, 0xE0, 0x29, 0xE8, 0x6B, + 0xE8, 0x49, 0xE0, 0xCA, 0xE0, 0xCA, 0xE8, 0xAA, 0xE8, 0xAA, 0xF0, 0xAA, 0xE8, 0x6A, 0xE0, 0xCB, + 0xE8, 0x8A, 0xE0, 0x8A, 0xE8, 0xCA, 0xE9, 0x0B, 0xF1, 0x6C, 0xE1, 0x8B, 0xEA, 0x0C, 0xEA, 0x8D, + 0xEA, 0x0C, 0xF2, 0x4E, 0xEA, 0x8F, 0xFB, 0xD2, 0xF3, 0xF1, 0xF3, 0xF1, 0xF3, 0xB0, 0xEB, 0x8F, + 0x99, 0xE4, 0x7A, 0xA2, 0x62, 0xE0, 0x62, 0xC0, 0x52, 0x80, 0x4A, 0x40, 0x42, 0x00, 0x3A, 0x20, + 0x3A, 0x00, 0x3A, 0x00, 0x31, 0xE0, 0x31, 0xC0, 0x31, 0xC0, 0x31, 0xE0, 0x31, 0xE0, 0x29, 0xE0, + 0x31, 0x80, 0x29, 0x80, 0x29, 0xA0, 0x39, 0xC0, 0x72, 0x80, 0x8B, 0x22, 0x6B, 0x41, 0x63, 0x20, + 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x20, 0x5B, 0x60, 0x63, 0x60, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x00, + 0x52, 0xC0, 0x5B, 0x20, 0x5B, 0x00, 0x5B, 0x20, 0x63, 0x60, 0x63, 0x80, 0x6B, 0xC0, 0x5B, 0x60, + 0x6B, 0xA0, 0x73, 0xE0, 0x74, 0x00, 0x63, 0x80, 0x63, 0xA0, 0x63, 0xA0, 0x63, 0xA0, 0x63, 0xC0, + 0x6B, 0xA0, 0x6B, 0xE0, 0x74, 0x20, 0x74, 0x20, 0x6B, 0xE0, 0x6B, 0xE0, 0x74, 0x20, 0x7C, 0x20, + 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x10, 0xE0, 0x11, 0x00, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, + 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xC0, + 0x10, 0xC0, 0x18, 0xA0, 0x10, 0x80, 0x08, 0x80, 0x10, 0x80, 0x8A, 0x47, 0xB2, 0x27, 0xD3, 0x6D, + 0xDB, 0xF1, 0xD3, 0x6F, 0xCA, 0x4A, 0xB9, 0x47, 0xB9, 0x47, 0xC0, 0xE7, 0xC0, 0x26, 0xC0, 0x47, + 0xC0, 0x67, 0xD0, 0xC9, 0xD0, 0x28, 0xD0, 0x07, 0xD8, 0x89, 0xE0, 0xA9, 0xD8, 0x08, 0xD0, 0x08, + 0xD0, 0x27, 0xD0, 0x27, 0xD0, 0x28, 0xD0, 0x08, 0xE0, 0x4A, 0xE0, 0x08, 0xE0, 0x49, 0xE0, 0x48, + 0xE8, 0x08, 0xF0, 0x49, 0xE8, 0x29, 0xF0, 0xAA, 0xE8, 0xEA, 0xE8, 0xEA, 0xF0, 0xEA, 0xE0, 0x28, + 0xE8, 0x28, 0xE8, 0x49, 0xE8, 0x29, 0xE8, 0x6A, 0xF0, 0xAB, 0xE9, 0x0B, 0xE1, 0x4B, 0xF2, 0x0D, + 0xF2, 0x2D, 0xF2, 0x6E, 0xF2, 0xCE, 0xF3, 0x50, 0xFB, 0xF2, 0xEB, 0x8F, 0xFB, 0xF1, 0xF3, 0xD1, + 0xEB, 0xF0, 0x91, 0xE4, 0x72, 0x20, 0x4A, 0x00, 0x39, 0xE0, 0x31, 0xE0, 0x31, 0xA0, 0x31, 0x80, + 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x29, 0x80, 0x29, 0x80, 0x21, 0x80, + 0x21, 0x80, 0x29, 0x80, 0x21, 0x80, 0x21, 0x60, 0x31, 0xA0, 0x72, 0xC2, 0xA3, 0xE6, 0x73, 0x62, + 0x5A, 0xE0, 0x5A, 0xE0, 0x53, 0x00, 0x5B, 0x41, 0x63, 0x60, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x00, + 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x20, 0x63, 0x60, 0x5B, 0x60, 0x63, 0x80, 0x5B, 0x40, 0x63, 0xA1, + 0x63, 0x60, 0x6B, 0x80, 0x63, 0x80, 0x6B, 0xC0, 0x63, 0x80, 0x5B, 0x80, 0x63, 0xA0, 0x63, 0xA0, + 0x6B, 0xE0, 0x63, 0xA0, 0x63, 0xC0, 0x63, 0xA0, 0x6B, 0xC0, 0x73, 0xE1, 0x6B, 0xA0, 0x7C, 0x00, + 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, + 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xE0, 0x10, 0xC0, 0x08, 0xC0, 0x10, 0xC0, 0x08, 0xA0, 0x08, 0xA0, + 0x08, 0xA0, 0x10, 0xA0, 0x10, 0x80, 0x10, 0x80, 0x61, 0x63, 0xB2, 0xA9, 0xA2, 0x48, 0xC2, 0x8A, + 0xCB, 0x6D, 0xC2, 0x8B, 0xA8, 0xE5, 0xB0, 0xA5, 0xB1, 0x06, 0xB8, 0x66, 0xC8, 0x26, 0xC0, 0x06, + 0xC0, 0x06, 0xC8, 0x06, 0xC8, 0x07, 0xC8, 0x06, 0xD8, 0x27, 0xD8, 0x27, 0xC8, 0x06, 0xD8, 0x27, + 0xD0, 0x27, 0xD0, 0x07, 0xD8, 0x07, 0xE0, 0x28, 0xD8, 0x07, 0xD8, 0x07, 0xD8, 0x27, 0xE0, 0x07, + 0xE0, 0x29, 0xE8, 0x6A, 0xE8, 0x29, 0xE8, 0x28, 0xE0, 0xA9, 0xE8, 0xA9, 0xF0, 0x29, 0xE8, 0x09, + 0xE8, 0x49, 0xE8, 0x4A, 0xE8, 0x4A, 0xE8, 0x4A, 0xE8, 0x6A, 0xF0, 0xCA, 0xE8, 0xE9, 0xF1, 0x6B, + 0xF1, 0xCD, 0xF1, 0xEC, 0xFA, 0x4D, 0xFA, 0xCF, 0xFB, 0x30, 0xF2, 0xCE, 0xFB, 0x90, 0xF4, 0x32, + 0xF4, 0x53, 0xEB, 0xCF, 0x91, 0xA3, 0x69, 0xA1, 0x39, 0xA0, 0x29, 0x60, 0x31, 0x80, 0x29, 0x80, + 0x29, 0x80, 0x29, 0x80, 0x29, 0xA0, 0x29, 0x80, 0x29, 0x80, 0x29, 0x60, 0x29, 0x60, 0x21, 0x60, + 0x21, 0x60, 0x19, 0x60, 0x21, 0x40, 0x21, 0x20, 0x19, 0x20, 0x31, 0xA0, 0x73, 0x43, 0xA3, 0xC5, + 0x6B, 0x21, 0x62, 0xE0, 0x52, 0xA0, 0x5A, 0xE0, 0x5B, 0x00, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, + 0x53, 0x00, 0x52, 0xE0, 0x52, 0xE0, 0x53, 0x00, 0x5B, 0x60, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, + 0x63, 0x80, 0x5B, 0x20, 0x63, 0x60, 0x5B, 0x40, 0x5B, 0x60, 0x63, 0x81, 0x63, 0xA1, 0x63, 0xA0, + 0x6B, 0xA0, 0x73, 0xC0, 0x73, 0xC0, 0x73, 0xE1, 0x6B, 0x80, 0x73, 0xA0, 0x7C, 0x00, 0x73, 0xC0, + 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, + 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x08, 0xC0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0x80, 0x08, 0x80, + 0x10, 0x80, 0x00, 0x60, 0x20, 0xC0, 0x7A, 0x25, 0xA2, 0x88, 0xAA, 0x49, 0xA1, 0x86, 0x99, 0x65, + 0xA1, 0x85, 0xA9, 0x86, 0xA8, 0xC4, 0xB0, 0xA5, 0xA8, 0x65, 0xB0, 0x04, 0xC0, 0x06, 0xB8, 0x06, + 0xC8, 0x46, 0xC0, 0x05, 0xC0, 0x26, 0xC8, 0x67, 0xC0, 0x25, 0xC8, 0x66, 0xC8, 0x66, 0xC0, 0x25, + 0xC8, 0x46, 0xC8, 0x06, 0xD0, 0x27, 0xD8, 0x28, 0xD0, 0x07, 0xD8, 0x07, 0xE0, 0x07, 0xE0, 0x07, + 0xD8, 0x27, 0xE0, 0x28, 0xF0, 0x29, 0xE8, 0x08, 0xF0, 0x69, 0xF0, 0x69, 0xF0, 0x29, 0xE8, 0x0A, + 0xF0, 0x0A, 0xF0, 0x4A, 0xF8, 0x8A, 0xE8, 0x07, 0xE8, 0x07, 0xE8, 0x07, 0xF0, 0x28, 0xF0, 0x49, + 0xF1, 0x2B, 0xF8, 0xCB, 0xF9, 0xCD, 0xF2, 0x6E, 0xF3, 0x10, 0xFB, 0x0F, 0xFB, 0x30, 0xFD, 0xB6, + 0xF4, 0x53, 0xEB, 0xB0, 0xE3, 0xCE, 0x81, 0x84, 0x69, 0x82, 0x49, 0xA0, 0x29, 0xA0, 0x29, 0x80, + 0x29, 0x60, 0x29, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x19, 0x60, + 0x19, 0x41, 0x21, 0x40, 0x21, 0x20, 0x19, 0x20, 0x21, 0x41, 0x21, 0x40, 0x52, 0x20, 0x7B, 0x41, + 0x8B, 0xE4, 0x73, 0x42, 0x52, 0xA0, 0x52, 0xC0, 0x5B, 0x00, 0x53, 0x00, 0x52, 0xE0, 0x4A, 0xA0, + 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x5B, 0x20, 0x53, 0x20, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x20, + 0x5B, 0x40, 0x63, 0x60, 0x5B, 0x00, 0x52, 0xA0, 0x52, 0xE0, 0x5B, 0x60, 0x63, 0x60, 0x63, 0x60, + 0x63, 0x80, 0x63, 0x80, 0x63, 0x80, 0x63, 0xA0, 0x63, 0xA0, 0x63, 0xA0, 0x63, 0xA0, 0x6B, 0xE0, + 0x19, 0x00, 0x19, 0x00, 0x11, 0x00, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, + 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x08, 0xC0, 0x08, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, + 0x08, 0x60, 0x08, 0x80, 0x61, 0x22, 0x9A, 0x46, 0xA2, 0x48, 0x99, 0xE6, 0xA1, 0x46, 0xA1, 0x86, + 0xB1, 0x87, 0xB1, 0x46, 0xA8, 0xC5, 0xA0, 0x44, 0xA0, 0x03, 0xB8, 0x65, 0xC0, 0xC7, 0xB0, 0x04, + 0xC0, 0x04, 0xB8, 0x24, 0xC8, 0xA6, 0xD0, 0xA7, 0xC8, 0x87, 0xD0, 0x87, 0xD0, 0x87, 0xC9, 0x26, + 0xD0, 0xA8, 0xC8, 0x05, 0xC8, 0x05, 0xD0, 0x27, 0xD8, 0x07, 0xD8, 0x06, 0xD0, 0x05, 0xD0, 0x04, + 0xD8, 0x04, 0xE0, 0x26, 0xE8, 0x48, 0xE8, 0x48, 0xE8, 0x69, 0xE8, 0x69, 0xF0, 0x6A, 0xE8, 0x09, + 0xE8, 0x09, 0xF0, 0xAA, 0xF1, 0x0B, 0xF0, 0x48, 0xF8, 0x27, 0xE8, 0x06, 0xF0, 0xAA, 0xF9, 0x2B, + 0xF9, 0x4C, 0xF1, 0x4B, 0xFA, 0x4E, 0xFA, 0x6E, 0xF2, 0xCE, 0xFB, 0x70, 0xFB, 0xB1, 0xFC, 0x53, + 0xFB, 0xD2, 0xF3, 0x4F, 0xF3, 0xAE, 0xCB, 0x29, 0x40, 0x81, 0x69, 0x41, 0x62, 0x02, 0x39, 0x60, + 0x29, 0x60, 0x21, 0x80, 0x21, 0x60, 0x29, 0x80, 0x29, 0x60, 0x21, 0x40, 0x21, 0x60, 0x21, 0x60, + 0x21, 0x60, 0x39, 0xC1, 0x49, 0xE1, 0x4A, 0x20, 0x5A, 0x40, 0x5A, 0x40, 0x52, 0x20, 0x62, 0xA0, + 0x83, 0x62, 0x9C, 0x06, 0x5A, 0xC1, 0x52, 0xC0, 0x52, 0xE0, 0x5A, 0xE0, 0x52, 0xC0, 0x4A, 0xC1, + 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x53, 0x00, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x00, 0x5B, 0x20, + 0x5B, 0x40, 0x5B, 0x40, 0x63, 0x41, 0x52, 0xE0, 0x52, 0xC0, 0x52, 0xE0, 0x63, 0x40, 0x63, 0x60, + 0x5B, 0x80, 0x5B, 0x80, 0x63, 0xA0, 0x5B, 0x80, 0x63, 0xA0, 0x6B, 0xC0, 0x63, 0xC0, 0x6B, 0xC0, + 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, 0x11, 0x00, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, + 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x08, 0xC0, 0x08, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x08, 0x60, + 0x08, 0x40, 0x00, 0x40, 0x7A, 0x26, 0x9A, 0x47, 0x9A, 0x07, 0x99, 0xE6, 0xA1, 0xA6, 0xA9, 0xA6, + 0xA9, 0x65, 0x98, 0xC4, 0x98, 0x23, 0x98, 0x03, 0xA8, 0x44, 0xC9, 0x28, 0xD1, 0x49, 0xB0, 0x24, + 0xB0, 0x25, 0xB0, 0x04, 0xD0, 0x46, 0xD0, 0x06, 0xD0, 0x47, 0xD0, 0x68, 0xD8, 0xA8, 0xC8, 0xA6, + 0xC8, 0x87, 0xC8, 0x26, 0xC8, 0x06, 0xD0, 0x47, 0xD8, 0x07, 0xD8, 0x27, 0xD0, 0x26, 0xD8, 0x05, + 0xD8, 0x03, 0xD8, 0x05, 0xE0, 0x05, 0xE8, 0x26, 0xF0, 0x87, 0xE8, 0x46, 0xF0, 0x48, 0xF0, 0x08, + 0xF0, 0x29, 0xF0, 0x29, 0xF0, 0x6A, 0xF0, 0x48, 0xF0, 0x68, 0xE8, 0x48, 0xF0, 0xAA, 0xF9, 0x2B, + 0xF1, 0xAC, 0xF1, 0xED, 0xFA, 0x6E, 0xFA, 0xAF, 0xFA, 0xEF, 0xFB, 0x70, 0xFB, 0xB1, 0xFB, 0xD1, + 0xFC, 0x11, 0xFB, 0x0F, 0xFA, 0x8D, 0xE3, 0x2C, 0x50, 0xC2, 0x30, 0x20, 0x50, 0xC1, 0x7A, 0x24, + 0x51, 0xE3, 0x29, 0x40, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x29, 0xA1, 0x41, 0xC2, 0x62, 0x02, + 0x6A, 0x61, 0x62, 0x20, 0x5A, 0x00, 0x52, 0x00, 0x52, 0x00, 0x4A, 0x01, 0x62, 0xA3, 0x83, 0x86, + 0x6A, 0xE2, 0x7B, 0x62, 0x93, 0xE5, 0x52, 0x80, 0x4A, 0x80, 0x5A, 0xA0, 0x52, 0xE0, 0x4A, 0xA0, + 0x52, 0xC0, 0x52, 0xE0, 0x52, 0xE0, 0x53, 0x00, 0x53, 0x00, 0x52, 0xE0, 0x52, 0xE0, 0x5A, 0xE0, + 0x5B, 0x20, 0x5B, 0x00, 0x5B, 0x20, 0x5B, 0x00, 0x5B, 0x01, 0x52, 0xE0, 0x5B, 0x40, 0x5B, 0x60, + 0x6B, 0x41, 0x63, 0x60, 0x63, 0x80, 0x63, 0xA0, 0x63, 0xA0, 0x63, 0xC0, 0x6B, 0xC0, 0x6B, 0xC0, + 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, + 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x08, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x08, 0x60, + 0x08, 0x61, 0x00, 0x60, 0x71, 0xE5, 0x9A, 0x47, 0xA2, 0x47, 0xA2, 0x26, 0x99, 0xA4, 0xA9, 0x64, + 0xA9, 0xA6, 0xA9, 0x45, 0x90, 0x42, 0x98, 0x02, 0xA0, 0x43, 0xA0, 0x23, 0xA8, 0x24, 0xC0, 0xC7, + 0xA8, 0x65, 0xA8, 0x03, 0xC8, 0x25, 0xD8, 0x07, 0xE0, 0xC9, 0xD8, 0xA8, 0xD0, 0x68, 0xB8, 0x04, + 0xC0, 0x05, 0xC8, 0x05, 0xC0, 0x05, 0xC8, 0x26, 0xD0, 0x06, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x05, + 0xD8, 0x05, 0xD8, 0x05, 0xE0, 0x06, 0xE8, 0x06, 0xE8, 0x26, 0xF0, 0x47, 0xF0, 0x28, 0xE8, 0x08, + 0xE8, 0x08, 0xF0, 0x2A, 0xF8, 0x8B, 0xE8, 0x49, 0xF0, 0x8A, 0xF0, 0x48, 0xF0, 0x68, 0xF8, 0xCA, + 0xF2, 0x0D, 0xFA, 0x0D, 0xFA, 0x4E, 0xF2, 0x2D, 0xF2, 0x2D, 0xFA, 0x2D, 0xFB, 0x50, 0xF3, 0xD1, + 0xFB, 0xB1, 0xFC, 0x11, 0xF2, 0x6C, 0xEB, 0x4D, 0x79, 0xE5, 0x38, 0xA1, 0x20, 0x20, 0x40, 0xA0, + 0x71, 0xA4, 0x6A, 0x05, 0x41, 0xA2, 0x39, 0x81, 0x62, 0x05, 0x79, 0xA5, 0x79, 0xA3, 0x69, 0xE1, + 0x51, 0x81, 0x39, 0x60, 0x29, 0x60, 0x21, 0x20, 0x19, 0x40, 0x21, 0x60, 0x62, 0xE3, 0x73, 0x26, + 0x4A, 0x42, 0x62, 0xA0, 0x7B, 0x62, 0x8B, 0xC5, 0x52, 0x81, 0x4A, 0x80, 0x52, 0xE0, 0x5B, 0x00, + 0x5B, 0x00, 0x5B, 0x00, 0x53, 0x00, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x5A, 0xE0, 0x5B, 0x00, + 0x52, 0xE0, 0x52, 0xE0, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x20, 0x5B, 0x00, 0x5B, 0x01, 0x4A, 0xA0, + 0x5A, 0xC0, 0x63, 0x20, 0x63, 0x40, 0x63, 0x60, 0x63, 0x60, 0x6B, 0xA0, 0x6B, 0xA0, 0x6B, 0xC0, + 0x19, 0x40, 0x19, 0x40, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, 0x18, 0xE0, + 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x08, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x08, 0x60, + 0x00, 0x40, 0x08, 0x40, 0x82, 0x05, 0xA2, 0x67, 0x9A, 0x26, 0x91, 0x83, 0x91, 0xC3, 0xA1, 0x63, + 0x99, 0x23, 0x99, 0x04, 0x90, 0x42, 0x98, 0x63, 0xA0, 0x64, 0xA0, 0x23, 0xA8, 0x44, 0xC9, 0x28, + 0xB0, 0x44, 0xA0, 0x02, 0xB0, 0x03, 0xC0, 0x25, 0xC8, 0x86, 0xC8, 0x66, 0xC0, 0x05, 0xB8, 0x03, + 0xC0, 0x05, 0xC8, 0x25, 0xC0, 0x04, 0xC8, 0x25, 0xD0, 0x05, 0xD0, 0x06, 0xD0, 0x26, 0xD8, 0x05, + 0xD8, 0x06, 0xE0, 0x27, 0xE0, 0x07, 0xE8, 0x48, 0xF0, 0x68, 0xE8, 0x07, 0xE8, 0x08, 0xF0, 0x2A, + 0xF8, 0x49, 0xF0, 0x09, 0xF0, 0x09, 0xF8, 0x6A, 0xF0, 0x09, 0xF8, 0x89, 0xE8, 0xE8, 0xF1, 0xAB, + 0xFA, 0xAE, 0xFA, 0x2D, 0xFA, 0x6E, 0xFA, 0xCF, 0xF9, 0x2B, 0xF9, 0xAC, 0xFB, 0x50, 0xFB, 0x90, + 0xFB, 0xB1, 0xFB, 0x4E, 0xFB, 0x2E, 0xF2, 0x8A, 0xAA, 0xA8, 0x61, 0xA0, 0x38, 0xE0, 0x20, 0x40, + 0x30, 0x40, 0x48, 0x81, 0x71, 0x25, 0x78, 0xE3, 0x70, 0x82, 0x58, 0x61, 0x41, 0x01, 0x31, 0x80, + 0x21, 0x40, 0x19, 0x40, 0x19, 0x60, 0x19, 0x20, 0x21, 0x40, 0x29, 0x80, 0x73, 0x85, 0x52, 0x84, + 0x19, 0x20, 0x52, 0x61, 0x5A, 0x80, 0x7B, 0x43, 0x73, 0x23, 0x4A, 0x60, 0x4A, 0x40, 0x4A, 0xA0, + 0x4A, 0x80, 0x52, 0xA0, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x5A, 0xE0, 0x5B, 0x00, + 0x53, 0x00, 0x53, 0x00, 0x5B, 0x01, 0x5B, 0x00, 0x5B, 0x00, 0x52, 0xC0, 0x4A, 0xA0, 0x3A, 0x00, + 0x29, 0xE0, 0x42, 0x60, 0x52, 0xC0, 0x62, 0xE0, 0x6B, 0x20, 0x6B, 0x40, 0x63, 0x60, 0x63, 0x80, + 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, + 0x19, 0x00, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xA0, 0x08, 0x80, 0x08, 0x60, 0x08, 0x60, + 0x08, 0x40, 0x38, 0xC0, 0x8A, 0x05, 0x92, 0x05, 0x91, 0xE4, 0x99, 0xA4, 0x89, 0xA3, 0x91, 0x63, + 0x99, 0x23, 0x99, 0x03, 0x90, 0x82, 0xA0, 0xA3, 0x98, 0x42, 0xA0, 0x43, 0xA0, 0x23, 0xA8, 0x03, + 0xA8, 0x02, 0xA8, 0x63, 0xA8, 0x23, 0xA8, 0x03, 0xA8, 0x03, 0xB8, 0x03, 0xB8, 0x03, 0xB8, 0x23, + 0xC0, 0x04, 0xC0, 0x24, 0xB8, 0x02, 0xC0, 0x03, 0xC8, 0x04, 0xC8, 0x04, 0xC8, 0x05, 0xD0, 0x04, + 0xD8, 0x05, 0xD8, 0x26, 0xE8, 0x88, 0xE8, 0x47, 0xE8, 0x07, 0xF0, 0x69, 0xF0, 0x29, 0xE8, 0x08, + 0xF0, 0x28, 0xE8, 0x69, 0xF0, 0xAA, 0xF0, 0x8A, 0xF8, 0x8A, 0xF0, 0x68, 0xE8, 0x46, 0xF0, 0x88, + 0xE9, 0x6A, 0xF9, 0xEC, 0xFA, 0xEF, 0xFA, 0x4E, 0xF9, 0xED, 0xF9, 0xED, 0xFB, 0x91, 0xF4, 0x52, + 0xFB, 0x90, 0xFB, 0x8E, 0xF3, 0xAF, 0xFA, 0x4B, 0xEB, 0x2D, 0x69, 0xC0, 0x49, 0x80, 0x39, 0x00, + 0x28, 0xC0, 0x30, 0x40, 0x48, 0x60, 0x50, 0xC0, 0x49, 0x40, 0x31, 0x40, 0x21, 0x40, 0x21, 0x60, + 0x21, 0x40, 0x21, 0x40, 0x19, 0x40, 0x19, 0x60, 0x19, 0x60, 0x4A, 0x21, 0x7B, 0x66, 0x39, 0xE2, + 0x19, 0x20, 0x21, 0x40, 0x52, 0x61, 0x62, 0xA0, 0x83, 0xC5, 0x62, 0xA2, 0x42, 0x40, 0x42, 0x60, + 0x42, 0x60, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0x80, 0x4A, 0xA0, 0x52, 0xC0, 0x5B, 0x00, + 0x5B, 0x21, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x00, 0x52, 0xC0, 0x4A, 0xA0, 0x52, 0xC0, 0x52, 0xC1, + 0x3A, 0x20, 0x32, 0x00, 0x32, 0x01, 0x32, 0x20, 0x42, 0x80, 0x52, 0xC0, 0x63, 0x20, 0x6B, 0x40, + 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x21, 0x40, 0x19, 0x20, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, + 0x19, 0x00, 0x18, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xA0, 0x10, 0x80, 0x08, 0x60, 0x08, 0x60, + 0x10, 0x60, 0x71, 0xE4, 0x92, 0x25, 0x89, 0xC4, 0x89, 0xA2, 0x99, 0xC3, 0x89, 0xA2, 0x99, 0x83, + 0x99, 0x43, 0x99, 0x23, 0x90, 0xA2, 0x98, 0xC2, 0x98, 0x82, 0xA0, 0x62, 0xA0, 0x42, 0xA8, 0x23, + 0xA8, 0x02, 0xB0, 0x63, 0xB0, 0x44, 0xA8, 0x03, 0xB0, 0x03, 0xB8, 0x24, 0xB0, 0x04, 0xB8, 0x24, + 0xB8, 0x03, 0xC0, 0x23, 0xB8, 0x02, 0xB8, 0x03, 0xC8, 0x04, 0xC8, 0x04, 0xC8, 0x04, 0xC8, 0x04, + 0xD8, 0x04, 0xE0, 0x65, 0xD8, 0x46, 0xE0, 0x46, 0xE0, 0x27, 0xE8, 0x27, 0xE8, 0x28, 0xE8, 0x28, + 0xE8, 0x27, 0xF0, 0x69, 0xF8, 0xCA, 0xF8, 0xAA, 0xF8, 0xAA, 0xF9, 0x2A, 0xF9, 0x09, 0xF8, 0x88, + 0xF1, 0x6B, 0xFA, 0xCE, 0xF2, 0x8D, 0xFA, 0xAE, 0xFA, 0x6E, 0xFA, 0x4E, 0xF9, 0xEC, 0xFB, 0xF1, + 0xFB, 0x90, 0xF3, 0xAF, 0xFC, 0x10, 0xEB, 0x0D, 0xEB, 0x2D, 0x89, 0xE4, 0x51, 0x80, 0x49, 0xA0, + 0x29, 0x40, 0x30, 0xE1, 0x30, 0xA1, 0x28, 0xE0, 0x29, 0x40, 0x21, 0x20, 0x29, 0x61, 0x19, 0x40, + 0x19, 0x40, 0x21, 0x60, 0x21, 0x60, 0x19, 0x80, 0x21, 0x60, 0x62, 0xC3, 0x62, 0xC5, 0x21, 0x81, + 0x10, 0xE0, 0x10, 0xE0, 0x29, 0xA0, 0x52, 0x80, 0x62, 0xA0, 0x83, 0xC6, 0x52, 0x81, 0x42, 0x60, + 0x42, 0x80, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0x80, 0x4A, 0x80, + 0x4A, 0xA0, 0x52, 0xC0, 0x5B, 0x01, 0x63, 0x22, 0x5B, 0x01, 0x5A, 0xE0, 0x52, 0xE0, 0x53, 0x00, + 0x32, 0x60, 0x29, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x3A, 0x40, 0x42, 0x61, 0x31, 0xC0, + 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, + 0x19, 0x00, 0x18, 0xE0, 0x10, 0xC0, 0x10, 0xA0, 0x10, 0xA0, 0x10, 0x80, 0x08, 0x60, 0x08, 0x60, + 0x20, 0xA1, 0x82, 0x24, 0x8A, 0x24, 0x89, 0xC3, 0x89, 0xA2, 0x81, 0x81, 0x89, 0xE2, 0x91, 0x83, + 0x99, 0x63, 0x91, 0x22, 0x90, 0xE2, 0x98, 0xE2, 0x98, 0xA2, 0xA0, 0x82, 0xA0, 0x83, 0x98, 0x02, + 0xA0, 0x22, 0xA8, 0x22, 0xA8, 0x03, 0xA8, 0x03, 0xB0, 0x23, 0xB0, 0x03, 0xB0, 0x04, 0xB0, 0x03, + 0xB8, 0x03, 0xB8, 0x03, 0xB0, 0x02, 0xB8, 0x03, 0xC8, 0x04, 0xD0, 0x05, 0xC8, 0x04, 0xC8, 0x03, + 0xD8, 0x05, 0xD8, 0x25, 0xE0, 0x86, 0xD8, 0x66, 0xD0, 0x05, 0xE8, 0x47, 0xF0, 0x48, 0xF0, 0x28, + 0xF8, 0x28, 0xF0, 0x07, 0xF0, 0x28, 0xE8, 0x68, 0xF9, 0x4A, 0xF1, 0x4A, 0xF9, 0x2A, 0xF8, 0xC9, + 0xF9, 0x8C, 0xFA, 0x8D, 0xF2, 0x8D, 0xFA, 0x4D, 0xF2, 0x4D, 0xFA, 0xCF, 0xFA, 0x6D, 0xF2, 0x2C, + 0xFB, 0xD1, 0xFB, 0xD0, 0xFB, 0xCF, 0xF2, 0xCB, 0xF3, 0x0B, 0x8A, 0x05, 0x41, 0x20, 0x59, 0x80, + 0x49, 0x80, 0x28, 0xE0, 0x28, 0xC0, 0x30, 0xC0, 0x38, 0xE0, 0x31, 0x40, 0x21, 0x40, 0x21, 0x60, + 0x29, 0xA0, 0x31, 0xE0, 0x32, 0x00, 0x21, 0xA0, 0x39, 0xE1, 0x72, 0xE5, 0x49, 0xE2, 0x21, 0x20, + 0x11, 0x00, 0x19, 0x01, 0x11, 0x00, 0x4A, 0x20, 0x5A, 0x80, 0x5A, 0xC0, 0x83, 0xC6, 0x4A, 0x40, + 0x42, 0x60, 0x4A, 0x80, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x80, + 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xC0, 0x4A, 0xA0, 0x52, 0xC0, 0x52, 0xE0, 0x4A, 0xC0, 0x52, 0xE0, + 0x3A, 0x40, 0x29, 0xE0, 0x32, 0x00, 0x32, 0x01, 0x31, 0xE0, 0x3A, 0x01, 0x31, 0xC1, 0x21, 0x60, + 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, + 0x19, 0x00, 0x18, 0xE0, 0x10, 0xC0, 0x10, 0xA0, 0x10, 0xA0, 0x10, 0x80, 0x08, 0x60, 0x08, 0x60, + 0x20, 0x80, 0x82, 0x03, 0x82, 0x03, 0x89, 0xA2, 0x89, 0xA1, 0x81, 0xA1, 0x79, 0x60, 0x99, 0x82, + 0xA1, 0xE5, 0x91, 0x43, 0x88, 0xE1, 0x99, 0x02, 0x98, 0xC2, 0x98, 0x81, 0xA0, 0x62, 0xA0, 0x22, + 0xA0, 0x22, 0xA0, 0x22, 0xA0, 0x22, 0xA8, 0x23, 0xA8, 0x02, 0xA8, 0x02, 0xB0, 0x03, 0xB0, 0x03, + 0xB8, 0x03, 0xB0, 0x03, 0xB0, 0x02, 0xB8, 0x03, 0xC0, 0x04, 0xC8, 0x04, 0xC0, 0x04, 0xC8, 0x03, + 0xD8, 0x05, 0xD8, 0x25, 0xE0, 0xC6, 0xE8, 0xC6, 0xD8, 0x24, 0xE0, 0x05, 0xE8, 0x06, 0xE8, 0x27, + 0xE8, 0x48, 0xF0, 0x47, 0xF0, 0x48, 0xF8, 0xCA, 0xF0, 0xA8, 0xF8, 0xA9, 0xF0, 0xA9, 0xF0, 0xC9, + 0xF9, 0x8C, 0xF2, 0x0C, 0xFA, 0x2C, 0xFA, 0x2C, 0xFA, 0x8E, 0xFA, 0xEF, 0xFB, 0x50, 0xFA, 0xAD, + 0xFB, 0x6F, 0xF3, 0x4C, 0xFB, 0x6F, 0xFA, 0xEB, 0xF2, 0xCA, 0xC2, 0xC8, 0x31, 0x61, 0x49, 0x60, + 0x51, 0xC0, 0x41, 0xA0, 0x29, 0x40, 0x31, 0x20, 0x41, 0x21, 0x41, 0x21, 0x31, 0x60, 0x31, 0xE0, + 0x3A, 0x20, 0x39, 0xE0, 0x29, 0xC0, 0x19, 0x40, 0x52, 0x42, 0x62, 0xA5, 0x29, 0x80, 0x19, 0x20, + 0x18, 0xE0, 0x11, 0x00, 0x19, 0x00, 0x31, 0x80, 0x5A, 0x80, 0x52, 0x40, 0x62, 0xE2, 0x73, 0x23, + 0x3A, 0x00, 0x42, 0x40, 0x4A, 0x60, 0x42, 0x60, 0x42, 0x40, 0x42, 0x40, 0x42, 0x60, 0x4A, 0xA0, + 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xC1, 0x4A, 0x80, 0x53, 0x01, + 0x53, 0x01, 0x42, 0x60, 0x32, 0x00, 0x32, 0x20, 0x3A, 0x40, 0x42, 0x80, 0x4A, 0x60, 0x6B, 0x40, + 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x00, + 0x19, 0x00, 0x10, 0xE0, 0x10, 0xA0, 0x10, 0xA0, 0x10, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x60, + 0x20, 0xC0, 0x82, 0x02, 0x81, 0xE2, 0x79, 0xE0, 0x81, 0xA1, 0x81, 0x81, 0x91, 0xE1, 0xA1, 0xA3, + 0xA9, 0xA5, 0x91, 0x22, 0x89, 0x01, 0x88, 0xE1, 0x98, 0xC2, 0x98, 0x62, 0x98, 0x42, 0x98, 0x42, + 0x98, 0x02, 0x98, 0x02, 0xA0, 0x02, 0xA0, 0x02, 0xA8, 0x02, 0xA8, 0x02, 0xA8, 0x02, 0xA8, 0x02, + 0xB0, 0x02, 0xB0, 0x03, 0xB0, 0x02, 0xA8, 0x01, 0xB8, 0x22, 0xC0, 0x03, 0xC0, 0x24, 0xB8, 0x03, + 0xE0, 0x26, 0xE8, 0x28, 0xE8, 0xC8, 0xE1, 0x68, 0xF1, 0x8A, 0xE0, 0x25, 0xE8, 0x27, 0xE8, 0x27, + 0xE8, 0x08, 0xE8, 0x47, 0xE8, 0xA8, 0xF8, 0xC9, 0xF8, 0xC9, 0xF1, 0x2A, 0xF9, 0xAB, 0xF1, 0x2A, + 0xF9, 0x0B, 0xF9, 0xAC, 0xFA, 0x0D, 0xFA, 0x2D, 0xFA, 0x0C, 0xFA, 0x2D, 0xFA, 0xAE, 0xF2, 0xCD, + 0xFA, 0xAB, 0xF2, 0x8A, 0xF4, 0x92, 0xF3, 0x8C, 0xF2, 0xCA, 0xDB, 0x0A, 0x59, 0x81, 0x28, 0xE0, + 0x41, 0x80, 0x51, 0xE0, 0x41, 0xA0, 0x29, 0x60, 0x39, 0x40, 0x51, 0x61, 0x51, 0xC2, 0x41, 0xA0, + 0x31, 0xE0, 0x31, 0xC1, 0x19, 0x40, 0x29, 0xA0, 0x62, 0xA4, 0x49, 0xE2, 0x21, 0x20, 0x11, 0x40, + 0x19, 0x01, 0x11, 0x00, 0x11, 0x00, 0x21, 0x01, 0x4A, 0x60, 0x4A, 0x61, 0x52, 0x60, 0x73, 0x44, + 0x6B, 0x23, 0x42, 0x21, 0x42, 0x40, 0x4A, 0x81, 0x42, 0x80, 0x42, 0x20, 0x4A, 0x40, 0x42, 0x80, + 0x4A, 0xA0, 0x4A, 0x80, 0x4A, 0x80, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xC0, 0x4A, 0xA0, 0x52, 0xE0, + 0x53, 0x00, 0x4A, 0xC0, 0x32, 0x20, 0x32, 0x60, 0x3A, 0x80, 0x5B, 0x20, 0x6B, 0x80, 0x63, 0x80, + 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, + 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xA0, 0x10, 0x80, 0x08, 0x80, 0x08, 0x80, 0x10, 0x60, + 0x39, 0x00, 0x82, 0x02, 0x81, 0xE2, 0x79, 0xE0, 0x81, 0x81, 0x79, 0x61, 0x81, 0x80, 0x91, 0x82, + 0xA1, 0xC5, 0x89, 0x22, 0x80, 0xE1, 0x80, 0xC0, 0x90, 0xC2, 0x98, 0x62, 0x98, 0x22, 0x98, 0x01, + 0x98, 0x02, 0x98, 0x02, 0xA0, 0x02, 0xA0, 0x02, 0xA0, 0x02, 0xA0, 0x02, 0xA0, 0x02, 0xA8, 0x02, + 0xB0, 0x02, 0xB0, 0x23, 0xA8, 0x02, 0xA0, 0x00, 0xB0, 0x02, 0xC0, 0x04, 0xC0, 0x24, 0xB8, 0x03, + 0xE0, 0xE6, 0xF1, 0x4A, 0xE8, 0xE8, 0xE0, 0x67, 0xD8, 0x47, 0xE0, 0x05, 0xE0, 0x05, 0xE0, 0x46, + 0xD8, 0x87, 0xE8, 0x06, 0xE8, 0x27, 0xF0, 0xE9, 0xF1, 0x0A, 0xF0, 0xEA, 0xF1, 0xAA, 0xF9, 0xAB, + 0xF9, 0x0A, 0xF9, 0x4A, 0xF9, 0xEC, 0xF1, 0xAB, 0xF0, 0x67, 0xF2, 0x0C, 0xFA, 0x8D, 0xFA, 0x4C, + 0xF1, 0x69, 0xFA, 0xEC, 0xFD, 0x36, 0xF3, 0xAE, 0xF3, 0x4D, 0xE3, 0x2C, 0x8A, 0x25, 0x19, 0x00, + 0x29, 0x00, 0x41, 0xA0, 0x51, 0xE0, 0x41, 0x80, 0x31, 0x60, 0x31, 0x41, 0x41, 0x62, 0x49, 0xA1, + 0x39, 0x20, 0x21, 0x60, 0x21, 0x40, 0x49, 0x61, 0x61, 0xE3, 0x31, 0x60, 0x11, 0x00, 0x19, 0x01, + 0x19, 0x00, 0x11, 0x00, 0x10, 0xE0, 0x18, 0xE0, 0x39, 0xC0, 0x4A, 0x60, 0x42, 0x00, 0x52, 0x60, + 0x73, 0x43, 0x39, 0xA0, 0x39, 0xE0, 0x31, 0xC0, 0x3A, 0x01, 0x42, 0x40, 0x42, 0x41, 0x4A, 0xA1, + 0x52, 0xA0, 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xC0, 0x52, 0xE0, 0x53, 0x00, 0x52, 0xE0, 0x53, 0x00, + 0x52, 0xA0, 0x52, 0xE0, 0x42, 0x40, 0x42, 0x41, 0x52, 0x80, 0x5A, 0xE0, 0x63, 0x40, 0x5B, 0x60, + 0x19, 0x40, 0x19, 0x40, 0x21, 0x40, 0x21, 0x40, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, + 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0x80, 0x08, 0x80, 0x10, 0x80, 0x08, 0x60, 0x10, 0x60, + 0x51, 0x80, 0x79, 0xE2, 0x79, 0xC1, 0x79, 0xA0, 0x79, 0x80, 0x71, 0x60, 0x71, 0x40, 0x79, 0x41, + 0x79, 0x01, 0x70, 0xC0, 0x78, 0xE0, 0x80, 0xA0, 0x88, 0x60, 0x88, 0x01, 0x90, 0x01, 0x98, 0x02, + 0x90, 0x01, 0x98, 0x02, 0x98, 0x02, 0x98, 0x02, 0x98, 0x02, 0x98, 0x02, 0xA0, 0x02, 0xA8, 0x02, + 0xA8, 0x02, 0xA0, 0x02, 0xA0, 0x01, 0xA0, 0x21, 0xA0, 0x02, 0xB8, 0x03, 0xB8, 0x03, 0xC0, 0x03, + 0xC8, 0x63, 0xE9, 0x69, 0xF9, 0x6A, 0xE8, 0x88, 0xD8, 0x07, 0xE0, 0x26, 0xE0, 0x25, 0xE0, 0x26, + 0xE8, 0xA8, 0xE8, 0x25, 0xF0, 0x47, 0xF0, 0x29, 0xF0, 0x8A, 0xF8, 0xEA, 0xF1, 0x28, 0xF9, 0x6B, + 0xF1, 0x8B, 0xF1, 0x09, 0xF9, 0xAB, 0xF9, 0x6A, 0xF8, 0xE9, 0xF1, 0xEB, 0xF1, 0xCB, 0xFA, 0x8D, + 0xF1, 0xC8, 0xF2, 0x49, 0xFC, 0x71, 0xFA, 0xCA, 0xF3, 0x0B, 0xEB, 0x6C, 0xC2, 0xC8, 0x21, 0x00, + 0x21, 0x00, 0x31, 0x40, 0x49, 0xC0, 0x51, 0xE0, 0x39, 0xA0, 0x29, 0x41, 0x31, 0x20, 0x39, 0x61, + 0x41, 0x01, 0x31, 0x20, 0x39, 0x41, 0x51, 0x63, 0x49, 0xA3, 0x21, 0x40, 0x11, 0x20, 0x19, 0x00, + 0x21, 0x20, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, 0x21, 0x20, 0x4A, 0x60, 0x42, 0x00, 0x42, 0x20, + 0x52, 0x60, 0x6A, 0xE3, 0x39, 0xA0, 0x31, 0xA0, 0x42, 0x01, 0x3A, 0x00, 0x31, 0xC0, 0x42, 0x40, + 0x42, 0x60, 0x52, 0xC0, 0x4A, 0xC0, 0x42, 0x60, 0x42, 0x60, 0x52, 0xE1, 0x52, 0xC0, 0x4A, 0x60, + 0x42, 0x60, 0x5A, 0xE1, 0x72, 0xE3, 0x62, 0x61, 0x5A, 0x80, 0x5B, 0x40, 0x5B, 0x61, 0x5B, 0x20, + 0x19, 0x60, 0x21, 0x40, 0x19, 0x40, 0x21, 0x40, 0x21, 0x40, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, + 0x18, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x08, 0x80, 0x08, 0x80, 0x10, 0x80, 0x10, 0x60, 0x18, 0xA0, + 0x72, 0x22, 0x79, 0xE2, 0x71, 0xC1, 0x71, 0x60, 0x79, 0x80, 0x71, 0x60, 0x71, 0x00, 0x71, 0x20, + 0x70, 0xE0, 0x70, 0xE0, 0x78, 0xE0, 0x78, 0xC0, 0x80, 0x81, 0x88, 0x21, 0x90, 0x01, 0x90, 0x02, + 0x90, 0x01, 0x90, 0x02, 0x98, 0x02, 0x90, 0x02, 0x88, 0x02, 0x90, 0x01, 0x98, 0x02, 0xA8, 0x02, + 0xA0, 0x02, 0x98, 0x01, 0x98, 0x00, 0xA0, 0x21, 0xA0, 0x22, 0xB0, 0x02, 0xB8, 0x02, 0xC0, 0x03, + 0xB8, 0x02, 0xC0, 0x03, 0xC0, 0x03, 0xD0, 0x25, 0xD8, 0x05, 0xE0, 0x25, 0xE0, 0x05, 0xE8, 0x07, + 0xE0, 0x05, 0xD8, 0x05, 0xE0, 0x07, 0xF0, 0x28, 0xF0, 0x68, 0xF1, 0x0A, 0xF9, 0x4A, 0xF9, 0x4B, + 0xF9, 0x8B, 0xF0, 0xC9, 0xF8, 0xC9, 0xF9, 0x09, 0xF9, 0x8B, 0xF1, 0x6A, 0xFA, 0x4C, 0xF2, 0x4C, + 0xF3, 0x4E, 0xF3, 0x0D, 0xFB, 0x4E, 0xF2, 0xAA, 0xF3, 0x2A, 0xEB, 0x2A, 0xAA, 0xC8, 0x21, 0x00, + 0x21, 0x20, 0x20, 0xE0, 0x31, 0x40, 0x49, 0xC0, 0x51, 0xC1, 0x49, 0xA1, 0x39, 0x80, 0x29, 0x20, + 0x29, 0x00, 0x30, 0xE1, 0x51, 0x43, 0x51, 0xA3, 0x31, 0xA2, 0x11, 0x20, 0x11, 0x00, 0x19, 0x20, + 0x19, 0x40, 0x19, 0x20, 0x19, 0x00, 0x19, 0x20, 0x19, 0x00, 0x42, 0x20, 0x4A, 0x20, 0x42, 0x00, + 0x42, 0x00, 0x62, 0xA1, 0x52, 0x61, 0x39, 0xE0, 0x42, 0x00, 0x29, 0xA0, 0x31, 0xE0, 0x4A, 0x41, + 0x42, 0x60, 0x4A, 0x80, 0x4A, 0xA1, 0x4A, 0x80, 0x4A, 0x80, 0x52, 0xC0, 0x52, 0xC0, 0x52, 0xA0, + 0x4A, 0x80, 0x5A, 0xA0, 0x7B, 0x44, 0x72, 0x83, 0x62, 0xA0, 0x5B, 0x20, 0x53, 0x00, 0x53, 0x00, + 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x40, 0x21, 0x40, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, + 0x18, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x10, 0x60, 0x28, 0xE1, + 0x7A, 0x42, 0x71, 0xE1, 0x71, 0xA0, 0x71, 0x40, 0x71, 0x60, 0x69, 0x40, 0x69, 0x00, 0x69, 0x00, + 0x71, 0x00, 0x70, 0xE0, 0x70, 0xC0, 0x78, 0x80, 0x78, 0x60, 0x80, 0x21, 0x88, 0x01, 0x88, 0x01, + 0x88, 0x01, 0x90, 0x01, 0x90, 0x02, 0x90, 0x02, 0x88, 0x02, 0x88, 0x21, 0x98, 0x02, 0xA0, 0x02, + 0x98, 0x01, 0x98, 0x01, 0xA0, 0x01, 0xA0, 0x21, 0x90, 0x01, 0xA8, 0x02, 0xB0, 0x02, 0xB8, 0x03, + 0xC0, 0x03, 0xC8, 0x04, 0xC0, 0x03, 0xC8, 0x04, 0xD8, 0x25, 0xD8, 0x03, 0xD8, 0x05, 0xE0, 0x07, + 0xD8, 0x25, 0xD0, 0x04, 0xE0, 0x05, 0xE0, 0x66, 0xF0, 0xA7, 0xF1, 0x69, 0xF1, 0x27, 0xF8, 0xE8, + 0xF9, 0x2A, 0xF8, 0xCA, 0xF0, 0xE8, 0xF0, 0xA8, 0xF9, 0xCC, 0xFA, 0x4D, 0xF2, 0xAD, 0xFA, 0x4D, + 0xFC, 0x11, 0xF3, 0x8F, 0xF3, 0x4D, 0xFB, 0xAE, 0xEB, 0x2B, 0xF3, 0x2B, 0x8A, 0x05, 0x21, 0x00, + 0x21, 0x00, 0x29, 0x00, 0x21, 0x20, 0x29, 0x60, 0x41, 0x60, 0x59, 0xA0, 0x49, 0xC0, 0x29, 0x20, + 0x18, 0xA0, 0x20, 0xA0, 0x39, 0x21, 0x41, 0xA1, 0x31, 0xC0, 0x19, 0x60, 0x19, 0x40, 0x21, 0x21, + 0x19, 0x60, 0x19, 0x20, 0x19, 0x00, 0x11, 0x20, 0x19, 0x00, 0x31, 0xA0, 0x4A, 0x40, 0x42, 0x00, + 0x4A, 0x00, 0x4A, 0x00, 0x62, 0xC1, 0x4A, 0x20, 0x31, 0xC0, 0x29, 0x80, 0x39, 0xE0, 0x39, 0xE0, + 0x42, 0x40, 0x42, 0x40, 0x42, 0x60, 0x42, 0x40, 0x4A, 0x60, 0x52, 0xE0, 0x5A, 0xE0, 0x5B, 0x01, + 0x42, 0x00, 0x5A, 0xA0, 0x6A, 0xE2, 0x6A, 0xA1, 0x63, 0x00, 0x5B, 0x20, 0x53, 0x00, 0x5B, 0x21, + 0x19, 0x60, 0x19, 0x40, 0x19, 0x40, 0x21, 0x40, 0x21, 0x40, 0x19, 0x20, 0x19, 0x20, 0x19, 0x00, + 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xA0, 0x10, 0x80, 0x08, 0x60, 0x10, 0x60, 0x20, 0xC0, + 0x69, 0xE1, 0x69, 0xA0, 0x69, 0xA0, 0x69, 0x40, 0x69, 0x20, 0x69, 0x20, 0x71, 0x00, 0x71, 0x21, + 0x68, 0xE0, 0x70, 0xE0, 0x70, 0xC0, 0x78, 0x80, 0x78, 0x61, 0x78, 0x41, 0x80, 0x21, 0x88, 0x22, + 0x88, 0x01, 0x88, 0x01, 0x90, 0x01, 0x90, 0x01, 0x88, 0x02, 0x88, 0x01, 0x90, 0x01, 0x98, 0x01, + 0x98, 0x01, 0x98, 0x01, 0xA8, 0x01, 0xA0, 0x02, 0x90, 0x01, 0xA0, 0x01, 0xB0, 0x02, 0xB8, 0x03, + 0xB8, 0x03, 0xC0, 0x04, 0xC8, 0x04, 0xC8, 0x04, 0xD0, 0x03, 0xD8, 0x02, 0xE0, 0x06, 0xD8, 0x06, + 0xE0, 0x06, 0xE0, 0xC6, 0xE0, 0x87, 0xE0, 0x67, 0xE8, 0x46, 0xE1, 0x06, 0xF1, 0x27, 0xE0, 0x26, + 0xF0, 0xC8, 0xF0, 0xE9, 0xF1, 0x49, 0xF9, 0x29, 0xF9, 0xEB, 0xF3, 0x2E, 0xF2, 0x8D, 0xFA, 0x8D, + 0xF1, 0xE8, 0xF2, 0x29, 0xF2, 0xAB, 0xFB, 0x6D, 0xF3, 0xCD, 0xEB, 0x8D, 0xB3, 0x09, 0x29, 0x20, + 0x28, 0xE0, 0x29, 0x20, 0x21, 0x20, 0x21, 0x40, 0x29, 0x60, 0x51, 0xC1, 0x6A, 0x42, 0x5A, 0x22, + 0x42, 0x01, 0x49, 0xE0, 0x42, 0x20, 0x42, 0x20, 0x4A, 0x40, 0x4A, 0x40, 0x31, 0xE0, 0x29, 0x60, + 0x19, 0x40, 0x19, 0x20, 0x19, 0x41, 0x19, 0x20, 0x19, 0x20, 0x29, 0x40, 0x4A, 0x40, 0x4A, 0x00, + 0x41, 0xE0, 0x4A, 0x40, 0x41, 0xE0, 0x4A, 0x00, 0x29, 0x40, 0x39, 0xC1, 0x42, 0x00, 0x39, 0xE0, + 0x3A, 0x00, 0x3A, 0x20, 0x42, 0x40, 0x3A, 0x00, 0x42, 0x40, 0x52, 0xC0, 0x52, 0xA0, 0x4A, 0x80, + 0x52, 0xE1, 0x63, 0x21, 0x6B, 0x02, 0x62, 0xC2, 0x63, 0x20, 0x5B, 0x60, 0x5B, 0x20, 0x5B, 0x00, + 0x21, 0x60, 0x21, 0x60, 0x21, 0x40, 0x21, 0x40, 0x19, 0x20, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, + 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xA0, 0x10, 0x80, 0x08, 0x80, 0x08, 0x60, 0x08, 0x60, 0x10, 0x60, + 0x51, 0x60, 0x69, 0xA0, 0x69, 0xA0, 0x69, 0x60, 0x69, 0x21, 0x69, 0x01, 0x81, 0x41, 0x79, 0x22, + 0x69, 0x00, 0x70, 0xE0, 0x68, 0x80, 0x70, 0x80, 0x78, 0x81, 0x78, 0x40, 0x78, 0x00, 0x78, 0x00, + 0x80, 0x01, 0x80, 0x01, 0x88, 0x01, 0x90, 0x01, 0x90, 0x01, 0x90, 0x01, 0x90, 0x01, 0x90, 0x01, + 0xA0, 0x22, 0x98, 0x01, 0xB0, 0x01, 0xB0, 0x02, 0x98, 0x22, 0xA0, 0x01, 0xA8, 0x02, 0xA8, 0x02, + 0xC0, 0x04, 0xB8, 0x04, 0xC0, 0x05, 0xE0, 0x87, 0xD0, 0x03, 0xD8, 0x23, 0xD8, 0x05, 0xD8, 0x05, + 0xE0, 0x05, 0xF1, 0x6A, 0xF1, 0x4C, 0xE8, 0x06, 0xE8, 0x26, 0xE0, 0x46, 0xE0, 0x65, 0xE8, 0xC8, + 0xE8, 0xC8, 0xF9, 0x8A, 0xF1, 0x08, 0xF0, 0xA7, 0xFA, 0x0B, 0xF2, 0x8C, 0xFA, 0x4D, 0xFA, 0x8D, + 0xFA, 0x6B, 0xF2, 0xAB, 0xF2, 0x09, 0xFB, 0x8E, 0xF3, 0xED, 0xEB, 0x8D, 0xC3, 0x49, 0x6A, 0x03, + 0x29, 0x00, 0x21, 0x00, 0x21, 0x00, 0x19, 0x20, 0x19, 0x40, 0x31, 0x60, 0x5A, 0x01, 0x6A, 0x61, + 0x4A, 0x01, 0x4A, 0x00, 0x42, 0x20, 0x39, 0xE0, 0x39, 0xC0, 0x42, 0x00, 0x42, 0x00, 0x31, 0xE0, + 0x21, 0x60, 0x21, 0x20, 0x19, 0x40, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x39, 0xE0, 0x4A, 0x20, + 0x4A, 0x01, 0x42, 0x20, 0x41, 0xC0, 0x4A, 0x21, 0x41, 0xE1, 0x41, 0xC0, 0x39, 0xC0, 0x29, 0x60, + 0x18, 0xE0, 0x18, 0xE0, 0x29, 0x80, 0x31, 0xE0, 0x42, 0x60, 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xE0, + 0x73, 0x84, 0x5B, 0x22, 0x4A, 0xC0, 0x52, 0xC0, 0x63, 0x00, 0x7B, 0x81, 0x6B, 0x40, 0x5B, 0x20, + 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x60, 0x21, 0x40, 0x19, 0x20, 0x19, 0x20, 0x19, 0x00, 0x18, 0xE0, + 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xA0, 0x10, 0x80, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, + 0x41, 0x41, 0x69, 0xA0, 0x69, 0x80, 0x61, 0x40, 0x61, 0x20, 0x68, 0xC1, 0x81, 0x21, 0x79, 0x02, + 0x61, 0x00, 0x68, 0xE0, 0x68, 0x60, 0x68, 0x60, 0x70, 0x60, 0x78, 0x40, 0x78, 0x00, 0x80, 0x01, + 0x80, 0x01, 0x80, 0x01, 0x88, 0x01, 0x90, 0x01, 0x90, 0x01, 0x90, 0x01, 0x90, 0x01, 0x90, 0x01, + 0x98, 0x01, 0xA0, 0x21, 0xC8, 0x63, 0xB8, 0x23, 0x98, 0x02, 0x98, 0x01, 0xA0, 0x01, 0xA8, 0x02, + 0xC8, 0x04, 0xC0, 0x05, 0xC8, 0x66, 0xC8, 0x04, 0xD0, 0x02, 0xD0, 0x23, 0xD8, 0x26, 0xE0, 0x05, + 0xC8, 0x24, 0xC8, 0x03, 0xD8, 0x87, 0xE8, 0x07, 0xE0, 0x67, 0xE0, 0x05, 0xF1, 0x47, 0xF1, 0x8A, + 0xF1, 0xEB, 0xE9, 0x27, 0xF1, 0x68, 0xE8, 0xA6, 0xF2, 0x2A, 0xFA, 0x2B, 0xFA, 0x6C, 0xFA, 0x8C, + 0xF2, 0x6A, 0xFA, 0x8C, 0xE9, 0xE7, 0xFB, 0x0C, 0xFB, 0xCD, 0xE3, 0x8C, 0xCC, 0x0E, 0x49, 0x82, + 0x21, 0x20, 0x20, 0xE0, 0x29, 0x00, 0x21, 0x20, 0x21, 0x00, 0x21, 0x20, 0x41, 0xC1, 0x6A, 0x61, + 0x52, 0x21, 0x39, 0xE0, 0x42, 0x00, 0x42, 0x00, 0x39, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x3A, 0x00, + 0x31, 0xC0, 0x21, 0x61, 0x19, 0x20, 0x21, 0x40, 0x19, 0x20, 0x19, 0x20, 0x31, 0xA1, 0x4A, 0x40, + 0x42, 0x00, 0x4A, 0x20, 0x39, 0xE0, 0x39, 0xC0, 0x5A, 0xA1, 0x4A, 0x00, 0x42, 0x20, 0x29, 0x40, + 0x18, 0xC0, 0x18, 0xC0, 0x31, 0x81, 0x3A, 0x00, 0x4A, 0x60, 0x4A, 0xA0, 0x52, 0xC0, 0x5B, 0x21, + 0x63, 0x62, 0x6B, 0xC4, 0x4A, 0xA0, 0x4A, 0xA0, 0x62, 0xE0, 0x7B, 0x60, 0x7B, 0x80, 0x63, 0x60, + 0x4A, 0xA0, 0x42, 0x80, 0x3A, 0x20, 0x31, 0xE0, 0x29, 0x80, 0x19, 0x20, 0x19, 0x00, 0x18, 0xE0, + 0x18, 0xC0, 0x10, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x41, + 0x41, 0x00, 0x61, 0xA0, 0x61, 0x80, 0x69, 0x40, 0x68, 0xE0, 0x60, 0xC0, 0x79, 0x03, 0x81, 0x22, + 0x71, 0x00, 0x68, 0xC0, 0x68, 0x80, 0x68, 0x60, 0x70, 0x60, 0x78, 0x60, 0x70, 0x00, 0x78, 0x01, + 0x78, 0x01, 0x80, 0x01, 0x80, 0x01, 0x88, 0x01, 0x88, 0x22, 0x88, 0x01, 0x88, 0x01, 0x90, 0x01, + 0x90, 0x02, 0x98, 0x22, 0xA8, 0x02, 0xB0, 0x02, 0xA0, 0x02, 0x90, 0x00, 0xA0, 0x01, 0xC8, 0x04, + 0xD8, 0x07, 0xC0, 0x04, 0xB8, 0x04, 0xC0, 0x05, 0xC8, 0x03, 0xD0, 0x03, 0xD0, 0x04, 0xD8, 0x06, + 0xD0, 0x03, 0xD0, 0x05, 0xE0, 0x06, 0xE0, 0x67, 0xE8, 0x06, 0xE0, 0x46, 0xF3, 0x0E, 0xFB, 0x70, + 0xE9, 0x89, 0xE9, 0x68, 0xE9, 0xC8, 0xF0, 0x26, 0xE9, 0xA8, 0xFA, 0x0B, 0xF1, 0xEB, 0xFA, 0x8D, + 0xFA, 0xAC, 0xF2, 0x0A, 0xF3, 0x0C, 0xEA, 0x69, 0xFB, 0xAC, 0xE3, 0x8B, 0x7A, 0x46, 0x21, 0x00, + 0x21, 0x00, 0x28, 0xE0, 0x29, 0x00, 0x21, 0x00, 0x19, 0x20, 0x21, 0x20, 0x31, 0x40, 0x52, 0x01, + 0x62, 0x41, 0x41, 0xE0, 0x39, 0xC0, 0x39, 0xC0, 0x39, 0xE0, 0x42, 0x00, 0x39, 0xE0, 0x3A, 0x00, + 0x42, 0x20, 0x42, 0x20, 0x29, 0xA0, 0x21, 0x60, 0x21, 0x40, 0x29, 0x61, 0x41, 0xE1, 0x4A, 0x21, + 0x4A, 0x20, 0x4A, 0x20, 0x42, 0x20, 0x31, 0xE0, 0x52, 0x41, 0x4A, 0x20, 0x39, 0xE0, 0x39, 0xE0, + 0x31, 0xA0, 0x31, 0x80, 0x42, 0x20, 0x4A, 0x60, 0x4A, 0x60, 0x52, 0xA0, 0x52, 0xE0, 0x63, 0x41, + 0x6B, 0xC3, 0x6B, 0xA3, 0x4A, 0xC0, 0x42, 0x40, 0x42, 0x40, 0x5A, 0xC0, 0x63, 0x20, 0x73, 0x60, + 0x5B, 0x40, 0x5B, 0x20, 0x53, 0x00, 0x4A, 0xC0, 0x42, 0x60, 0x31, 0xE0, 0x21, 0x40, 0x18, 0xE0, + 0x10, 0xA0, 0x08, 0x80, 0x08, 0xA0, 0x08, 0x80, 0x08, 0x60, 0x08, 0x40, 0x08, 0x60, 0x08, 0x60, + 0x30, 0xC0, 0x61, 0x80, 0x61, 0x60, 0x61, 0x40, 0x69, 0x00, 0x60, 0xE0, 0x68, 0xE2, 0x70, 0xE0, + 0x71, 0x00, 0x68, 0xC0, 0x68, 0x80, 0x60, 0x60, 0x68, 0x80, 0x70, 0x60, 0x70, 0x00, 0x78, 0x01, + 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x88, 0x01, 0x88, 0x21, 0x88, 0x01, 0x88, 0x01, 0x90, 0x01, + 0x90, 0x02, 0x90, 0x01, 0xA0, 0x01, 0xA0, 0x02, 0x98, 0x01, 0x90, 0x00, 0xA0, 0x01, 0xC8, 0x04, + 0xD0, 0x47, 0xC8, 0x25, 0xB8, 0x03, 0xC0, 0x03, 0xC8, 0x04, 0xD0, 0x45, 0xD0, 0x04, 0xD0, 0x05, + 0xD0, 0x03, 0xC8, 0x24, 0xD8, 0x26, 0xE0, 0x06, 0xE0, 0x05, 0xE0, 0x05, 0xD8, 0xE7, 0xF2, 0x4C, + 0xD8, 0xC6, 0xF1, 0x68, 0xFA, 0x0A, 0xF0, 0xA7, 0xF1, 0x68, 0xF2, 0x0A, 0xFA, 0x4C, 0xF2, 0x6B, + 0xFA, 0xEC, 0xF2, 0x29, 0xFB, 0x8D, 0xE2, 0x69, 0xF3, 0x4B, 0xDB, 0x4B, 0x59, 0x62, 0x20, 0xE0, + 0x21, 0x00, 0x20, 0xE0, 0x29, 0x00, 0x21, 0x00, 0x21, 0x20, 0x21, 0x20, 0x29, 0x20, 0x41, 0xC1, + 0x62, 0x62, 0x4A, 0x20, 0x39, 0xC0, 0x31, 0xA0, 0x31, 0xA0, 0x39, 0xC0, 0x42, 0x00, 0x4A, 0x40, + 0x42, 0x20, 0x42, 0x40, 0x42, 0x40, 0x42, 0x21, 0x41, 0xE2, 0x49, 0xC3, 0x51, 0xE3, 0x51, 0xA2, + 0x4A, 0x00, 0x4A, 0x00, 0x42, 0x20, 0x39, 0xC0, 0x41, 0xE0, 0x62, 0xA3, 0x39, 0xC0, 0x42, 0x40, + 0x4A, 0x60, 0x4A, 0x80, 0x4A, 0x60, 0x52, 0xC0, 0x5A, 0xE1, 0x52, 0xA0, 0x5B, 0x00, 0x5B, 0x40, + 0x7C, 0x07, 0x7C, 0x05, 0x5B, 0x21, 0x31, 0xE0, 0x29, 0x80, 0x39, 0xE0, 0x52, 0xA0, 0x63, 0x20, + 0x5B, 0x40, 0x5B, 0x60, 0x5B, 0x60, 0x5B, 0x40, 0x5B, 0x20, 0x52, 0xC0, 0x42, 0x20, 0x31, 0xA0, + 0x19, 0x00, 0x08, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x08, 0x60, 0x08, 0x40, 0x08, 0x40, 0x08, 0x40, + 0x18, 0x80, 0x59, 0x80, 0x59, 0x60, 0x59, 0x60, 0x61, 0x20, 0x61, 0x00, 0x60, 0xE0, 0x68, 0xE0, + 0x68, 0xC0, 0x60, 0xA0, 0x60, 0xA0, 0x60, 0x80, 0x60, 0x80, 0x68, 0x60, 0x70, 0x00, 0x78, 0x01, + 0x78, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x88, 0x01, 0x88, 0x01, 0x88, 0x01, 0x88, 0x01, + 0x90, 0x01, 0x90, 0x01, 0xA0, 0x01, 0xA8, 0x02, 0xA0, 0x01, 0x90, 0x00, 0x90, 0x00, 0x98, 0x02, + 0xB0, 0x03, 0xB8, 0x03, 0xC0, 0x02, 0xC8, 0x03, 0xC8, 0x25, 0xD8, 0xA6, 0xC8, 0x03, 0xD0, 0x05, + 0xD0, 0x43, 0xC8, 0x03, 0xD8, 0x05, 0xE0, 0x06, 0xD8, 0x05, 0xE0, 0x25, 0xD8, 0x25, 0xD8, 0x66, + 0xF1, 0x88, 0xF9, 0xA9, 0xE9, 0x87, 0xE9, 0x07, 0xE8, 0xE6, 0xF2, 0x2B, 0xFA, 0x4B, 0xF2, 0x4A, + 0xF2, 0xCB, 0xFB, 0x0C, 0xEB, 0x4C, 0xF3, 0x4B, 0xE3, 0x0A, 0xD3, 0x4A, 0x62, 0x24, 0x28, 0xE0, + 0x20, 0xE0, 0x20, 0xE0, 0x21, 0x20, 0x21, 0x20, 0x21, 0x20, 0x21, 0x20, 0x21, 0x20, 0x31, 0x60, + 0x62, 0x42, 0x5A, 0x60, 0x39, 0xE0, 0x29, 0xA0, 0x29, 0x80, 0x31, 0xA0, 0x39, 0xE0, 0x42, 0x20, + 0x4A, 0x40, 0x4A, 0x60, 0x42, 0x40, 0x4A, 0x40, 0x52, 0x21, 0x49, 0xC2, 0x49, 0x62, 0x40, 0xC1, + 0x39, 0x80, 0x42, 0x00, 0x42, 0x20, 0x42, 0x00, 0x39, 0xC0, 0x5A, 0xA3, 0x4A, 0x41, 0x42, 0x40, + 0x42, 0x61, 0x42, 0x40, 0x4A, 0x80, 0x4A, 0x60, 0x52, 0xA0, 0x52, 0xC0, 0x5B, 0x00, 0x6B, 0x81, + 0x73, 0xA5, 0x7C, 0x06, 0x63, 0x43, 0x29, 0x80, 0x31, 0xA1, 0x31, 0xA0, 0x3A, 0x00, 0x4A, 0x80, + 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x20, 0x52, 0xE0, 0x4A, 0x80, + 0x39, 0xE0, 0x21, 0x40, 0x10, 0xA0, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x40, 0x00, 0x20, + 0x10, 0x60, 0x59, 0x80, 0x59, 0x80, 0x51, 0x60, 0x59, 0x00, 0x61, 0x00, 0x59, 0x00, 0x61, 0x00, + 0x60, 0xA0, 0x60, 0xA0, 0x60, 0x80, 0x58, 0x60, 0x60, 0x60, 0x60, 0x40, 0x68, 0x00, 0x70, 0x01, + 0x78, 0x01, 0x78, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x88, 0x01, 0x88, 0x01, + 0x90, 0x01, 0x90, 0x01, 0x90, 0x01, 0x98, 0x02, 0x98, 0x02, 0x90, 0x00, 0x90, 0x00, 0x98, 0x01, + 0xB0, 0x22, 0xB8, 0x23, 0xC0, 0x03, 0xC0, 0x03, 0xB8, 0x03, 0xC0, 0x24, 0xC0, 0x03, 0xD0, 0x04, + 0xD0, 0x02, 0xD0, 0xA5, 0xD8, 0x05, 0xE0, 0x05, 0xD0, 0x04, 0xD8, 0x04, 0xE0, 0xA6, 0xE9, 0x07, + 0xE9, 0x87, 0xFA, 0x29, 0xF2, 0x09, 0xF1, 0xEA, 0xE8, 0xA5, 0xF1, 0xEA, 0xF1, 0xC9, 0xF2, 0x29, + 0xF2, 0xAB, 0xF3, 0x0C, 0xF3, 0x4C, 0xF3, 0x8C, 0xEB, 0x6B, 0xBB, 0x0A, 0x39, 0x40, 0x28, 0xE0, + 0x29, 0x00, 0x21, 0x00, 0x21, 0x20, 0x21, 0x20, 0x21, 0x20, 0x21, 0x20, 0x21, 0x40, 0x21, 0x60, + 0x51, 0xE1, 0x62, 0x81, 0x42, 0x00, 0x31, 0xC0, 0x31, 0xA0, 0x31, 0xA0, 0x39, 0xC0, 0x39, 0xE0, + 0x42, 0x00, 0x4A, 0x60, 0x42, 0x60, 0x42, 0x40, 0x42, 0x20, 0x39, 0xC0, 0x39, 0x60, 0x31, 0x40, + 0x31, 0x60, 0x31, 0xA0, 0x42, 0x20, 0x42, 0x20, 0x39, 0xE0, 0x42, 0x00, 0x52, 0x40, 0x31, 0xA0, + 0x42, 0x20, 0x42, 0x20, 0x4A, 0xA0, 0x4A, 0x80, 0x4A, 0x60, 0x52, 0xA1, 0x63, 0x43, 0x6B, 0x63, + 0x73, 0xA3, 0x84, 0x47, 0x52, 0xC2, 0x31, 0xC0, 0x31, 0xE0, 0x3A, 0x00, 0x39, 0xE0, 0x3A, 0x00, + 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x21, 0x53, 0x20, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x20, + 0x5A, 0xE0, 0x4A, 0x40, 0x31, 0x60, 0x10, 0xA0, 0x08, 0x40, 0x00, 0x40, 0x08, 0x40, 0x00, 0x40, + 0x08, 0x40, 0x49, 0x40, 0x59, 0x60, 0x51, 0x60, 0x59, 0x40, 0x61, 0x00, 0x59, 0x00, 0x58, 0xE0, + 0x58, 0xE0, 0x58, 0xA0, 0x58, 0x80, 0x58, 0x40, 0x58, 0x20, 0x60, 0x20, 0x68, 0x20, 0x70, 0x20, + 0x70, 0x00, 0x78, 0x00, 0x78, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x88, 0x01, 0x88, 0x01, + 0x88, 0x01, 0x88, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x01, 0x98, 0x00, 0x98, 0x00, 0xA0, 0x22, + 0xA8, 0x01, 0xB0, 0x02, 0xB8, 0x03, 0xC0, 0x04, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x02, + 0xB8, 0x22, 0xC8, 0xE5, 0xD0, 0x25, 0xD0, 0x04, 0xD8, 0x04, 0xE0, 0x24, 0xD8, 0x24, 0xE0, 0x65, + 0xF1, 0xA8, 0xEA, 0x08, 0xEA, 0x09, 0xF2, 0x0A, 0xF1, 0x67, 0xE9, 0x88, 0xE9, 0x88, 0xFA, 0x6A, + 0xF2, 0x8A, 0xF3, 0x0C, 0xF3, 0x4C, 0xF3, 0xAD, 0xF3, 0xCD, 0x92, 0x87, 0x29, 0x00, 0x29, 0x00, + 0x29, 0x00, 0x21, 0x00, 0x21, 0x20, 0x21, 0x20, 0x21, 0x20, 0x29, 0x20, 0x21, 0x40, 0x21, 0x60, + 0x39, 0xA1, 0x6A, 0x82, 0x4A, 0x20, 0x39, 0xE0, 0x39, 0xA0, 0x31, 0xA0, 0x39, 0xC0, 0x31, 0xC0, + 0x39, 0xE0, 0x42, 0x00, 0x42, 0x40, 0x42, 0x60, 0x42, 0x40, 0x3A, 0x20, 0x3A, 0x01, 0x39, 0xC0, + 0x31, 0xA0, 0x31, 0xC1, 0x31, 0xC0, 0x42, 0x20, 0x42, 0x41, 0x39, 0xE0, 0x52, 0x61, 0x39, 0xA0, + 0x31, 0xE0, 0x42, 0x20, 0x42, 0x60, 0x4A, 0xA0, 0x4A, 0x80, 0x4A, 0x80, 0x63, 0x42, 0x63, 0x41, + 0x73, 0xE5, 0x7C, 0x05, 0x63, 0x42, 0x3A, 0x00, 0x31, 0xE0, 0x3A, 0x00, 0x3A, 0x20, 0x42, 0x20, + 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x40, + 0x63, 0x40, 0x63, 0x20, 0x52, 0x80, 0x31, 0x60, 0x10, 0x60, 0x00, 0x20, 0x00, 0x40, 0x00, 0x40, + 0x00, 0x20, 0x30, 0xE0, 0x59, 0x80, 0x51, 0x40, 0x59, 0x40, 0x61, 0x00, 0x59, 0x00, 0x58, 0xE0, + 0x58, 0xC0, 0x58, 0xA0, 0x58, 0x80, 0x60, 0x60, 0x60, 0x20, 0x60, 0x00, 0x68, 0x20, 0x68, 0x00, + 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, + 0x80, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x02, 0x98, 0x01, 0x98, 0x00, 0x90, 0x00, 0x90, 0x01, + 0xA8, 0x03, 0xA8, 0x02, 0xB0, 0x02, 0xB8, 0x03, 0xC0, 0x23, 0xC0, 0x03, 0xC8, 0x03, 0xB0, 0x00, + 0xB8, 0x02, 0xD8, 0x04, 0xD0, 0x04, 0xD8, 0x04, 0xD8, 0x04, 0xD8, 0x84, 0xD8, 0xA5, 0xE0, 0xE6, + 0xE1, 0x06, 0xE9, 0xE7, 0xE9, 0xE8, 0xF1, 0xE8, 0xE9, 0xE9, 0xE9, 0xA7, 0xF1, 0xC8, 0xEA, 0x48, + 0xEA, 0x29, 0xEA, 0xEA, 0xEB, 0x2B, 0xEB, 0x6C, 0xDB, 0x8C, 0x61, 0xE3, 0x31, 0x40, 0x29, 0x20, + 0x29, 0x20, 0x29, 0x20, 0x29, 0x40, 0x29, 0x40, 0x29, 0x20, 0x29, 0x40, 0x29, 0x40, 0x21, 0x40, + 0x31, 0xA1, 0x6A, 0x82, 0x52, 0x40, 0x42, 0x00, 0x41, 0xE0, 0x39, 0xC0, 0x39, 0xC0, 0x31, 0xC0, + 0x39, 0xE0, 0x39, 0xE0, 0x3A, 0x00, 0x42, 0x20, 0x42, 0x40, 0x42, 0x40, 0x42, 0x20, 0x39, 0xE0, + 0x32, 0x00, 0x29, 0xC0, 0x31, 0xE0, 0x39, 0xE0, 0x3A, 0x20, 0x4A, 0x60, 0x4A, 0x00, 0x52, 0x61, + 0x39, 0xC0, 0x3A, 0x00, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xC0, 0x52, 0xE0, 0x73, 0xA2, + 0x73, 0xC5, 0x7C, 0x06, 0x6B, 0xA3, 0x42, 0x20, 0x3A, 0x01, 0x42, 0x20, 0x42, 0x20, 0x4A, 0x60, + 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x60, 0x5B, 0x60, 0x5B, 0x40, 0x53, 0x20, 0x53, 0x20, 0x5B, 0x20, + 0x63, 0x40, 0x6B, 0x60, 0x63, 0x20, 0x4A, 0x40, 0x21, 0x20, 0x08, 0x60, 0x08, 0x40, 0x00, 0x40, + 0x00, 0x20, 0x18, 0x80, 0x51, 0x80, 0x59, 0x40, 0x51, 0x20, 0x59, 0x00, 0x59, 0x00, 0x59, 0x00, + 0x50, 0xC0, 0x58, 0xA0, 0x58, 0x80, 0x60, 0x80, 0x60, 0x40, 0x58, 0x20, 0x60, 0x20, 0x60, 0x00, + 0x68, 0x00, 0x70, 0x20, 0x70, 0x00, 0x70, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x01, 0x80, 0x01, + 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x88, 0x01, 0x88, 0x01, 0x90, 0x00, 0x98, 0x01, 0xA0, 0x02, + 0xA8, 0x02, 0xA8, 0x02, 0xA8, 0x02, 0xB0, 0x02, 0xC0, 0x03, 0xC8, 0x04, 0xC8, 0x03, 0xB8, 0x00, + 0xC8, 0x03, 0xD0, 0x04, 0xC8, 0x04, 0xD0, 0x04, 0xD0, 0x03, 0xD8, 0x64, 0xE0, 0xA5, 0xD9, 0x26, + 0xE9, 0x46, 0xE1, 0xC6, 0xE1, 0x87, 0xF2, 0x08, 0xEA, 0x09, 0xE9, 0xC7, 0xE9, 0x88, 0xEA, 0x48, + 0xEA, 0x28, 0xEB, 0x0A, 0xEB, 0x0A, 0xE3, 0x2A, 0xCB, 0x8B, 0x39, 0x40, 0x29, 0x00, 0x31, 0x20, + 0x29, 0x40, 0x31, 0x40, 0x29, 0x60, 0x29, 0x60, 0x29, 0x60, 0x29, 0x60, 0x29, 0x60, 0x29, 0x60, + 0x31, 0xA0, 0x6A, 0x42, 0x52, 0x20, 0x4A, 0x20, 0x4A, 0x20, 0x3A, 0x00, 0x41, 0xE0, 0x3A, 0x00, + 0x39, 0xE0, 0x42, 0x00, 0x42, 0x00, 0x3A, 0x00, 0x42, 0x20, 0x42, 0x20, 0x3A, 0x00, 0x42, 0x40, + 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x42, 0x40, 0x42, 0x20, 0x52, 0x60, + 0x39, 0xE0, 0x42, 0x20, 0x4A, 0x60, 0x4A, 0xA0, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x80, 0x6B, 0x84, + 0x7B, 0xE5, 0x94, 0x88, 0x63, 0x02, 0x4A, 0x40, 0x4A, 0x60, 0x4A, 0x80, 0x4A, 0x60, 0x4A, 0x60, + 0x63, 0x60, 0x5B, 0x60, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, + 0x5B, 0x40, 0x63, 0x40, 0x6B, 0x60, 0x63, 0x00, 0x42, 0x00, 0x18, 0xE0, 0x08, 0x40, 0x08, 0x40, + 0x00, 0x20, 0x08, 0x41, 0x49, 0x60, 0x51, 0x20, 0x51, 0x40, 0x59, 0x20, 0x51, 0x00, 0x50, 0xE0, + 0x58, 0xE0, 0x58, 0xA0, 0x50, 0x80, 0x58, 0x80, 0x58, 0x60, 0x58, 0x20, 0x60, 0x40, 0x68, 0x20, + 0x68, 0x20, 0x70, 0x40, 0x70, 0x20, 0x70, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x80, 0x01, + 0x80, 0x01, 0x80, 0x00, 0x88, 0x01, 0x88, 0x01, 0x88, 0x01, 0x90, 0x01, 0x90, 0x01, 0x98, 0x02, + 0xA0, 0x01, 0xB0, 0x03, 0xB0, 0x02, 0xB0, 0x01, 0xB8, 0x03, 0xC8, 0x04, 0xC0, 0x02, 0xC0, 0x22, + 0xC8, 0x04, 0xC8, 0x24, 0xC8, 0x45, 0xC8, 0x44, 0xC8, 0x43, 0xD8, 0x84, 0xD8, 0xC5, 0xE1, 0x06, + 0xE9, 0x87, 0xE1, 0xC6, 0xE9, 0xA7, 0xEA, 0x08, 0xE9, 0xE8, 0xE9, 0xE7, 0xE1, 0x67, 0xEA, 0x08, + 0xEA, 0x27, 0xE3, 0x09, 0xE2, 0xC8, 0xDB, 0x09, 0xAA, 0x86, 0x31, 0x80, 0x39, 0x40, 0x39, 0x40, + 0x31, 0x60, 0x31, 0x60, 0x31, 0x60, 0x31, 0x60, 0x29, 0x80, 0x29, 0x80, 0x29, 0x80, 0x31, 0x80, + 0x31, 0xC0, 0x6A, 0x22, 0x52, 0x20, 0x42, 0x20, 0x4A, 0x60, 0x3A, 0x00, 0x41, 0xE0, 0x42, 0x00, + 0x42, 0x20, 0x42, 0x00, 0x42, 0x20, 0x42, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, + 0x3A, 0x20, 0x42, 0x20, 0x42, 0x40, 0x42, 0x60, 0x4A, 0x60, 0x4A, 0x40, 0x5A, 0xE2, 0x52, 0x40, + 0x39, 0xE0, 0x42, 0x00, 0x42, 0x60, 0x4A, 0xC0, 0x4A, 0xA0, 0x52, 0xC0, 0x4A, 0x80, 0x63, 0x22, + 0x73, 0xA4, 0x84, 0x26, 0x7C, 0x05, 0x4A, 0x60, 0x52, 0xA1, 0x4A, 0x80, 0x52, 0xA0, 0x52, 0xC1, + 0x5B, 0x40, 0x63, 0x40, 0x63, 0x40, 0x5B, 0x40, 0x5B, 0x60, 0x63, 0x60, 0x5B, 0x60, 0x5B, 0x60, + 0x63, 0x40, 0x63, 0x40, 0x63, 0x40, 0x63, 0x20, 0x5A, 0xA0, 0x39, 0xC0, 0x21, 0x00, 0x08, 0x40, + 0x00, 0x40, 0x10, 0x60, 0x30, 0xC0, 0x49, 0x40, 0x51, 0x40, 0x51, 0x20, 0x51, 0x00, 0x59, 0x00, + 0x50, 0xE0, 0x58, 0xE0, 0x58, 0xC0, 0x50, 0x80, 0x58, 0x60, 0x58, 0x40, 0x60, 0x40, 0x68, 0x40, + 0x60, 0x40, 0x68, 0x40, 0x68, 0x40, 0x70, 0x20, 0x70, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, + 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0x80, 0x00, 0x88, 0x01, 0x90, 0x01, 0x90, 0x01, 0x98, 0x01, + 0x98, 0x01, 0xA0, 0x02, 0xA8, 0x02, 0xB0, 0x02, 0xB8, 0x03, 0xC0, 0x04, 0xC0, 0x03, 0xC0, 0x02, + 0xC0, 0x03, 0xC0, 0x43, 0xC8, 0x84, 0xC0, 0x03, 0xC8, 0x24, 0xD0, 0x84, 0xD0, 0xA5, 0xD8, 0xA5, + 0xD9, 0x26, 0xE1, 0xA7, 0xE1, 0xC7, 0xEA, 0x07, 0xEA, 0x08, 0xE9, 0xE8, 0xEA, 0x08, 0xEA, 0x48, + 0xE2, 0x68, 0xE2, 0xC8, 0xDB, 0x09, 0xD3, 0x09, 0x61, 0xC1, 0x39, 0x60, 0x41, 0x60, 0x39, 0x80, + 0x39, 0x80, 0x39, 0x80, 0x31, 0x80, 0x31, 0x80, 0x31, 0x80, 0x31, 0xA0, 0x31, 0xA0, 0x31, 0xA0, + 0x41, 0xC0, 0x62, 0xA1, 0x4A, 0x20, 0x39, 0xC0, 0x4A, 0x41, 0x4A, 0x60, 0x39, 0xE0, 0x39, 0xE0, + 0x39, 0xE0, 0x42, 0x20, 0x4A, 0x40, 0x4A, 0x40, 0x42, 0x40, 0x42, 0x40, 0x42, 0x40, 0x3A, 0x40, + 0x42, 0x40, 0x42, 0x40, 0x42, 0x40, 0x4A, 0x60, 0x4A, 0x80, 0x52, 0xE3, 0x5B, 0x23, 0x4A, 0xC0, + 0x4A, 0x60, 0x31, 0xC0, 0x3A, 0x00, 0x42, 0x40, 0x5A, 0xE1, 0x53, 0x00, 0x52, 0xC0, 0x62, 0xE0, + 0x63, 0x22, 0x8C, 0x47, 0x84, 0x47, 0x52, 0xC1, 0x52, 0xA0, 0x5A, 0xE0, 0x52, 0xC0, 0x5A, 0xE0, + 0x52, 0xC0, 0x5B, 0x00, 0x5B, 0x40, 0x63, 0x60, 0x63, 0x60, 0x63, 0x60, 0x63, 0x60, 0x63, 0x60, + 0x63, 0x60, 0x5B, 0x40, 0x5B, 0x20, 0x63, 0x40, 0x63, 0x20, 0x5A, 0xA0, 0x41, 0xE1, 0x20, 0xE0, + 0x08, 0x40, 0x08, 0x40, 0x18, 0x60, 0x51, 0x81, 0x49, 0x20, 0x49, 0x20, 0x49, 0x00, 0x51, 0x00, + 0x50, 0xE0, 0x50, 0xE0, 0x50, 0xC0, 0x50, 0xA0, 0x58, 0x60, 0x58, 0x40, 0x60, 0x40, 0x60, 0x40, + 0x60, 0x40, 0x60, 0x40, 0x68, 0x40, 0x68, 0x20, 0x70, 0x20, 0x70, 0x00, 0x78, 0x01, 0x78, 0x01, + 0x78, 0x00, 0x80, 0x00, 0x80, 0x01, 0x80, 0x01, 0x88, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x21, + 0x98, 0x22, 0xA0, 0x02, 0xA8, 0x02, 0xB0, 0x02, 0xB0, 0x03, 0xB8, 0x03, 0xB8, 0x03, 0xC0, 0x02, + 0xC8, 0x03, 0xC8, 0x64, 0xD0, 0xE5, 0xC8, 0x44, 0xD0, 0x85, 0xD0, 0xA4, 0xD0, 0xC4, 0xD0, 0xA5, + 0xD9, 0x26, 0xE1, 0x86, 0xD9, 0xA6, 0xE1, 0xE7, 0xE1, 0xC7, 0xE1, 0xC7, 0xE2, 0x28, 0xEA, 0x89, + 0xE2, 0x68, 0xDA, 0xC9, 0xDA, 0xE9, 0xAA, 0xC7, 0x51, 0x80, 0x41, 0x80, 0x41, 0x80, 0x41, 0xA0, + 0x39, 0xA0, 0x39, 0xC0, 0x39, 0xC0, 0x39, 0xA0, 0x39, 0xC0, 0x39, 0xC0, 0x39, 0xC0, 0x39, 0xC0, + 0x41, 0xE0, 0x62, 0xA1, 0x52, 0x40, 0x39, 0xC0, 0x39, 0xE0, 0x4A, 0x60, 0x4A, 0x40, 0x42, 0x00, + 0x3A, 0x00, 0x3A, 0x00, 0x42, 0x20, 0x42, 0x40, 0x42, 0x40, 0x4A, 0x60, 0x42, 0x60, 0x42, 0x60, + 0x42, 0x40, 0x42, 0x40, 0x42, 0x60, 0x5A, 0xC0, 0x5A, 0xC1, 0x63, 0x25, 0x5B, 0x04, 0x4A, 0xC0, + 0x52, 0xA0, 0x39, 0xC0, 0x3A, 0x00, 0x42, 0x20, 0x42, 0x60, 0x52, 0xE0, 0x5A, 0xE0, 0x5A, 0xC0, + 0x63, 0x21, 0x73, 0xC4, 0x7B, 0xC4, 0x5A, 0xE1, 0x52, 0xC0, 0x5B, 0x01, 0x5B, 0x01, 0x5B, 0x21, + 0x39, 0xE0, 0x42, 0x40, 0x52, 0xA0, 0x5B, 0x00, 0x63, 0x40, 0x63, 0x60, 0x63, 0x60, 0x63, 0x60, + 0x63, 0x80, 0x5B, 0x60, 0x5B, 0x40, 0x63, 0x40, 0x63, 0x40, 0x6B, 0x20, 0x5A, 0xA0, 0x39, 0xC0, + 0x18, 0xC0, 0x00, 0x40, 0x08, 0x40, 0x39, 0x00, 0x51, 0x40, 0x49, 0x20, 0x49, 0x20, 0x48, 0xE0, + 0x51, 0x00, 0x50, 0xE0, 0x50, 0xC0, 0x50, 0xA0, 0x50, 0x80, 0x58, 0x60, 0x58, 0x60, 0x60, 0x40, + 0x58, 0x20, 0x58, 0x20, 0x60, 0x20, 0x60, 0x20, 0x68, 0x20, 0x70, 0x20, 0x70, 0x00, 0x70, 0x01, + 0x78, 0x00, 0x80, 0x00, 0x78, 0x00, 0x80, 0x01, 0x80, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x41, + 0xA0, 0x22, 0x98, 0x01, 0xA0, 0x02, 0xA8, 0x02, 0xB0, 0x03, 0xB0, 0x03, 0xB8, 0x03, 0xB8, 0x02, + 0xB8, 0x03, 0xC8, 0xA4, 0xD0, 0xE5, 0xC8, 0x64, 0xC8, 0x64, 0xC8, 0x84, 0xC8, 0xA4, 0xD8, 0xE5, + 0xD9, 0x45, 0xD9, 0x66, 0xD9, 0xA7, 0xE1, 0xC7, 0xE1, 0xC7, 0xE2, 0x08, 0xE2, 0x48, 0xE2, 0xC9, + 0xE2, 0xAA, 0xDA, 0xE9, 0xD3, 0x2A, 0x72, 0x23, 0x49, 0x80, 0x49, 0xC0, 0x41, 0x80, 0x41, 0xE0, + 0x41, 0xE0, 0x41, 0xE0, 0x41, 0xE0, 0x39, 0xE0, 0x39, 0xE0, 0x39, 0xE0, 0x39, 0xE0, 0x39, 0xE0, + 0x4A, 0x21, 0x62, 0xA1, 0x52, 0x60, 0x39, 0xE0, 0x39, 0xC0, 0x42, 0x00, 0x4A, 0x61, 0x4A, 0x60, + 0x42, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x20, 0x42, 0x20, 0x4A, 0x60, 0x4A, 0x80, 0x4A, 0x40, + 0x4A, 0x40, 0x42, 0x60, 0x4A, 0x80, 0x63, 0x21, 0x6B, 0x23, 0x7B, 0x67, 0x62, 0xE5, 0x4A, 0xC0, + 0x52, 0xE0, 0x4A, 0x60, 0x39, 0xE0, 0x3A, 0x00, 0x3A, 0x20, 0x4A, 0x80, 0x5B, 0x01, 0x5B, 0x00, + 0x63, 0x21, 0x63, 0x41, 0x6B, 0x82, 0x63, 0x21, 0x63, 0x21, 0x63, 0x21, 0x63, 0x41, 0x63, 0x21, + 0x29, 0x60, 0x31, 0x80, 0x39, 0xC0, 0x42, 0x20, 0x52, 0xC0, 0x63, 0x40, 0x6B, 0x60, 0x6B, 0x80, + 0x63, 0x80, 0x63, 0x80, 0x63, 0x60, 0x63, 0x60, 0x63, 0x40, 0x63, 0x40, 0x63, 0x00, 0x52, 0x60, + 0x31, 0x40, 0x10, 0xA0, 0x08, 0x61, 0x18, 0x60, 0x49, 0x40, 0x49, 0x20, 0x49, 0x20, 0x49, 0x00, + 0x49, 0x00, 0x50, 0xE0, 0x50, 0xE0, 0x50, 0xC0, 0x50, 0xA0, 0x50, 0x80, 0x58, 0x60, 0x58, 0x60, + 0x60, 0x20, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x68, 0x60, 0x68, 0x40, 0x70, 0x20, 0x70, 0x01, + 0x78, 0x20, 0x78, 0x20, 0x78, 0x00, 0x78, 0x00, 0x80, 0x01, 0x80, 0x01, 0x88, 0x01, 0x90, 0x21, + 0x98, 0x42, 0x98, 0x01, 0xA0, 0x02, 0xA8, 0x02, 0xA8, 0x02, 0xB0, 0x02, 0xB8, 0x02, 0xB8, 0x02, + 0xC0, 0x23, 0xC8, 0xA4, 0xC8, 0xA4, 0xC8, 0xA4, 0xD0, 0xC5, 0xD0, 0xC5, 0xC0, 0x63, 0xC8, 0xC4, + 0xD9, 0x86, 0xD9, 0x86, 0xD9, 0xA7, 0xE1, 0xC8, 0xE2, 0x08, 0xE2, 0x49, 0xDA, 0x68, 0xDA, 0xA8, + 0xDA, 0xCA, 0xDB, 0x0A, 0xA2, 0xE7, 0x49, 0xC0, 0x49, 0xC0, 0x49, 0xE0, 0x49, 0xC0, 0x42, 0x00, + 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, + 0x52, 0x41, 0x62, 0xA1, 0x4A, 0x40, 0x3A, 0x00, 0x39, 0xE0, 0x39, 0xE0, 0x42, 0x00, 0x52, 0xA1, + 0x4A, 0x60, 0x42, 0x40, 0x42, 0x40, 0x42, 0x20, 0x3A, 0x20, 0x42, 0x40, 0x4A, 0x60, 0x4A, 0x60, + 0x4A, 0x60, 0x4A, 0x80, 0x52, 0xA0, 0x5B, 0x00, 0x73, 0x42, 0x83, 0x87, 0x6B, 0x25, 0x53, 0x01, + 0x5B, 0x00, 0x5A, 0xE0, 0x39, 0xE0, 0x3A, 0x20, 0x42, 0x40, 0x42, 0x20, 0x52, 0xC0, 0x52, 0xE0, + 0x63, 0x21, 0x63, 0x00, 0x6B, 0x61, 0x63, 0x41, 0x63, 0x41, 0x63, 0x41, 0x63, 0x62, 0x63, 0x41, + 0x29, 0x60, 0x29, 0x40, 0x29, 0x60, 0x39, 0xC0, 0x4A, 0x60, 0x63, 0x00, 0x6B, 0x80, 0x73, 0xA0, + 0x73, 0xC0, 0x73, 0xA0, 0x6B, 0xA0, 0x6B, 0x80, 0x63, 0x60, 0x6B, 0x40, 0x6B, 0x20, 0x62, 0xE0, + 0x4A, 0x00, 0x29, 0x20, 0x10, 0x80, 0x08, 0x60, 0x29, 0x00, 0x49, 0x60, 0x49, 0x20, 0x49, 0x20, + 0x49, 0x00, 0x49, 0x00, 0x50, 0xE0, 0x50, 0xC0, 0x50, 0xC0, 0x50, 0xA0, 0x58, 0x80, 0x58, 0x80, + 0x60, 0x60, 0x60, 0x60, 0x60, 0x80, 0x68, 0x80, 0x68, 0x80, 0x68, 0x60, 0x68, 0x40, 0x70, 0x20, + 0x68, 0x40, 0x70, 0x60, 0x78, 0x80, 0x80, 0x60, 0x80, 0x40, 0x80, 0x00, 0x88, 0x00, 0x90, 0x01, + 0x98, 0x21, 0x98, 0x01, 0x98, 0x02, 0xA0, 0x02, 0xA8, 0x02, 0xA8, 0x22, 0xB0, 0x22, 0xB8, 0x42, + 0xB8, 0x42, 0xC8, 0xA4, 0xC8, 0xA4, 0xC8, 0xC5, 0xC8, 0xA5, 0xD0, 0xC5, 0xC8, 0x84, 0xD1, 0x25, + 0xDA, 0x07, 0xD9, 0xA6, 0xD9, 0x87, 0xE1, 0xA7, 0xDA, 0x08, 0xDA, 0x89, 0xDA, 0x88, 0xDA, 0xA9, + 0xDA, 0xEA, 0xC3, 0x09, 0x62, 0x02, 0x51, 0xE0, 0x49, 0xE0, 0x51, 0xE0, 0x52, 0x00, 0x4A, 0x20, + 0x4A, 0x20, 0x4A, 0x20, 0x4A, 0x20, 0x4A, 0x40, 0x4A, 0x40, 0x4A, 0x40, 0x4A, 0x20, 0x4A, 0x20, + 0x52, 0x41, 0x6A, 0xC2, 0x4A, 0x40, 0x39, 0xE0, 0x3A, 0x00, 0x39, 0xE0, 0x39, 0xE0, 0x4A, 0x60, + 0x52, 0xA1, 0x42, 0x40, 0x42, 0x20, 0x42, 0x60, 0x42, 0x40, 0x3A, 0x20, 0x42, 0x40, 0x4A, 0x80, + 0x4A, 0x80, 0x4A, 0x80, 0x52, 0xA0, 0x52, 0xA0, 0x6B, 0x00, 0x7B, 0x43, 0x73, 0x23, 0x5B, 0x41, + 0x5B, 0x20, 0x52, 0xE0, 0x42, 0x20, 0x3A, 0x00, 0x3A, 0x40, 0x42, 0x20, 0x52, 0xC1, 0x4A, 0xC0, + 0x63, 0x21, 0x6B, 0x61, 0x6B, 0x81, 0x63, 0x61, 0x63, 0x61, 0x6B, 0x62, 0x6B, 0x82, 0x6B, 0x82, + 0x29, 0x80, 0x29, 0x60, 0x29, 0x60, 0x39, 0xA0, 0x4A, 0x40, 0x5B, 0x00, 0x6B, 0x80, 0x73, 0xE0, + 0x7B, 0xE0, 0x7C, 0x00, 0x7B, 0xE0, 0x73, 0xC0, 0x6B, 0xA0, 0x6B, 0x60, 0x6B, 0x40, 0x63, 0x20, + 0x62, 0xC0, 0x52, 0x00, 0x31, 0x41, 0x18, 0xC1, 0x18, 0x80, 0x41, 0x40, 0x49, 0x40, 0x41, 0x00, + 0x49, 0x00, 0x49, 0x00, 0x49, 0x00, 0x50, 0xE0, 0x50, 0xC0, 0x50, 0xC0, 0x50, 0xC0, 0x50, 0xA0, + 0x58, 0x80, 0x60, 0x80, 0x60, 0x80, 0x60, 0xA0, 0x60, 0x80, 0x60, 0x80, 0x68, 0x60, 0x68, 0x40, + 0x68, 0x60, 0x70, 0x80, 0x78, 0xA0, 0x78, 0xA0, 0x80, 0x80, 0x80, 0x40, 0x88, 0x40, 0x90, 0x41, + 0x90, 0x41, 0x90, 0x21, 0x98, 0x01, 0xA0, 0x22, 0xA8, 0x42, 0xA8, 0x82, 0xB0, 0xA2, 0xB8, 0xC2, + 0xC0, 0xE3, 0xC0, 0xC4, 0xC0, 0xA4, 0xC0, 0xC4, 0xC8, 0xC4, 0xC8, 0xC5, 0xC8, 0xE5, 0xD1, 0x46, + 0xD2, 0x07, 0xD1, 0xA6, 0xD9, 0xA7, 0xD9, 0xC8, 0xD2, 0x08, 0xDA, 0x89, 0xDA, 0xC9, 0xDA, 0xEA, + 0xD3, 0x0A, 0x82, 0xA4, 0x51, 0xE0, 0x5A, 0x00, 0x4A, 0x20, 0x5A, 0x00, 0x52, 0x20, 0x4A, 0x40, + 0x52, 0x40, 0x52, 0x40, 0x52, 0x60, 0x52, 0x60, 0x52, 0x60, 0x52, 0x60, 0x4A, 0x60, 0x4A, 0x60, + 0x52, 0x61, 0x6A, 0xA1, 0x4A, 0x40, 0x3A, 0x00, 0x39, 0xE0, 0x3A, 0x00, 0x39, 0xE0, 0x3A, 0x20, + 0x5A, 0xC1, 0x4A, 0x60, 0x42, 0x40, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x42, 0x60, + 0x52, 0xC0, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x80, 0x63, 0x00, 0x73, 0x20, 0x6A, 0xE1, 0x5A, 0xE0, + 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xA0, 0x39, 0xE0, 0x3A, 0x00, 0x42, 0x40, 0x4A, 0x80, 0x52, 0xA0, + 0x5B, 0x01, 0x6B, 0x82, 0x73, 0xA2, 0x6B, 0x81, 0x6B, 0x82, 0x6B, 0xA2, 0x6B, 0x82, 0x6B, 0xA2, + 0x31, 0xA0, 0x31, 0x80, 0x31, 0x80, 0x39, 0xC0, 0x4A, 0x40, 0x5A, 0xE0, 0x6B, 0x60, 0x73, 0xC0, + 0x7C, 0x00, 0x84, 0x20, 0x84, 0x20, 0x84, 0x20, 0x7C, 0x00, 0x73, 0xE0, 0x73, 0xA0, 0x73, 0x60, + 0x6B, 0x40, 0x73, 0x02, 0x72, 0xA5, 0x49, 0xE4, 0x29, 0x01, 0x30, 0xE0, 0x49, 0x40, 0x49, 0x40, + 0x41, 0x20, 0x49, 0x20, 0x49, 0x00, 0x51, 0x00, 0x50, 0xE0, 0x50, 0xE0, 0x50, 0xC0, 0x50, 0xA0, + 0x50, 0xA0, 0x58, 0xA0, 0x60, 0xA0, 0x60, 0xA0, 0x60, 0xA0, 0x60, 0xA0, 0x60, 0x80, 0x68, 0x80, + 0x68, 0x80, 0x68, 0xA0, 0x70, 0x80, 0x70, 0x80, 0x78, 0x80, 0x80, 0x80, 0x88, 0x80, 0x88, 0xA1, + 0x90, 0x80, 0x90, 0x41, 0x90, 0x21, 0xA0, 0x41, 0xA8, 0xA2, 0xA8, 0xC2, 0xB1, 0x02, 0xB9, 0x63, + 0xC1, 0x63, 0xC1, 0x24, 0xC1, 0x24, 0xC9, 0x45, 0xC1, 0x25, 0xC0, 0xC4, 0xC9, 0x05, 0xC9, 0x85, + 0xC9, 0xA6, 0xD1, 0xA6, 0xD1, 0xC7, 0xD2, 0x08, 0xD2, 0x48, 0xD2, 0xA9, 0xD2, 0xEA, 0xCA, 0xEA, + 0xA2, 0xE6, 0x62, 0x21, 0x5A, 0x20, 0x62, 0x20, 0x52, 0x60, 0x5A, 0x60, 0x5A, 0x40, 0x52, 0x60, + 0x52, 0x80, 0x52, 0x80, 0x52, 0x80, 0x52, 0x81, 0x52, 0x81, 0x52, 0x81, 0x52, 0x81, 0x52, 0x80, + 0x5A, 0xA1, 0x6A, 0xA1, 0x4A, 0x40, 0x42, 0x20, 0x3A, 0x00, 0x39, 0xE0, 0x39, 0xE0, 0x3A, 0x00, + 0x4A, 0x60, 0x52, 0xA1, 0x4A, 0x80, 0x42, 0x40, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x40, + 0x4A, 0xA0, 0x4A, 0x60, 0x4A, 0x60, 0x4A, 0xA0, 0x63, 0x20, 0x73, 0x40, 0x73, 0x20, 0x5A, 0xC0, + 0x4A, 0x80, 0x4A, 0xC0, 0x52, 0xE0, 0x3A, 0x20, 0x39, 0xE0, 0x42, 0x20, 0x42, 0x20, 0x42, 0x40, + 0x4A, 0x80, 0x5B, 0x00, 0x63, 0x60, 0x6B, 0x81, 0x73, 0xA2, 0x73, 0xC2, 0x73, 0xC2, 0x73, 0xC2, + 0x31, 0xC0, 0x31, 0xA0, 0x31, 0xA0, 0x39, 0xC0, 0x4A, 0x40, 0x52, 0xE0, 0x63, 0x40, 0x6B, 0x80, + 0x73, 0xE0, 0x84, 0x40, 0x84, 0x40, 0x8C, 0x60, 0x8C, 0x80, 0x8C, 0x80, 0x84, 0x20, 0x83, 0xE0, + 0x7B, 0xC0, 0x83, 0x83, 0x8B, 0x46, 0x83, 0x27, 0x5A, 0x65, 0x31, 0x21, 0x39, 0x20, 0x49, 0x40, + 0x49, 0x20, 0x49, 0x20, 0x51, 0x20, 0x51, 0x00, 0x50, 0xE0, 0x50, 0xE0, 0x50, 0xE0, 0x50, 0xC0, + 0x50, 0xC0, 0x58, 0xC0, 0x58, 0xA0, 0x58, 0xA0, 0x58, 0xA0, 0x58, 0xA0, 0x60, 0xA0, 0x60, 0x80, + 0x68, 0x80, 0x70, 0xA0, 0x70, 0xA0, 0x70, 0xA0, 0x70, 0x80, 0x78, 0x80, 0x80, 0xA0, 0x88, 0xE0, + 0x88, 0xA0, 0x88, 0x61, 0x90, 0x20, 0x98, 0x41, 0xA8, 0xC2, 0xA9, 0x01, 0xB1, 0x42, 0xB9, 0xC3, + 0xB9, 0xA3, 0xB9, 0x43, 0xB9, 0x23, 0xC1, 0x85, 0xC1, 0x44, 0xC9, 0x25, 0xC9, 0x66, 0xC9, 0xC5, + 0xD1, 0xA6, 0xD1, 0xC7, 0xC9, 0xE7, 0xD2, 0x28, 0xD2, 0x48, 0xD2, 0xA9, 0xCA, 0xEA, 0xBA, 0xE9, + 0x72, 0x42, 0x62, 0x20, 0x62, 0x40, 0x62, 0x60, 0x62, 0x60, 0x52, 0xC0, 0x5A, 0xA1, 0x5A, 0xA1, + 0x5A, 0xA1, 0x5A, 0xA1, 0x5A, 0xA1, 0x5A, 0xC1, 0x5A, 0xC1, 0x5A, 0xC1, 0x5A, 0xC1, 0x5A, 0xC1, + 0x5A, 0xC1, 0x6A, 0xC2, 0x4A, 0x40, 0x39, 0xE0, 0x39, 0xE0, 0x32, 0x00, 0x39, 0xE0, 0x32, 0x00, + 0x42, 0x20, 0x52, 0xA1, 0x52, 0xA1, 0x42, 0x60, 0x42, 0x60, 0x4A, 0x80, 0x42, 0x80, 0x42, 0x80, + 0x42, 0x80, 0x52, 0xA0, 0x52, 0x80, 0x4A, 0xA0, 0x5B, 0x00, 0x73, 0x61, 0x7B, 0x61, 0x63, 0x00, + 0x52, 0xC1, 0x42, 0x60, 0x42, 0x60, 0x42, 0x20, 0x39, 0xC0, 0x3A, 0x20, 0x4A, 0x81, 0x4A, 0x40, + 0x52, 0x80, 0x5A, 0xE0, 0x5B, 0x20, 0x63, 0x60, 0x6B, 0xA1, 0x73, 0xE2, 0x7B, 0xE2, 0x7B, 0xE2, + 0x32, 0x00, 0x39, 0xE0, 0x39, 0xC1, 0x41, 0xE1, 0x4A, 0x40, 0x52, 0xE0, 0x63, 0x40, 0x6B, 0xA0, + 0x73, 0xC0, 0x7C, 0x20, 0x84, 0x60, 0x84, 0x80, 0x8C, 0xA0, 0x94, 0xA0, 0x94, 0xA0, 0x94, 0x60, + 0x8B, 0xE0, 0x83, 0xA1, 0x83, 0x83, 0x8B, 0x85, 0x7B, 0x06, 0x5A, 0x04, 0x39, 0x00, 0x41, 0x60, + 0x49, 0x40, 0x49, 0x20, 0x49, 0x20, 0x49, 0x00, 0x51, 0x00, 0x51, 0x00, 0x50, 0xE0, 0x50, 0xE0, + 0x50, 0xC0, 0x58, 0xC0, 0x58, 0xC0, 0x58, 0xC0, 0x58, 0xC0, 0x58, 0xA0, 0x58, 0xA0, 0x60, 0xC0, + 0x60, 0xA0, 0x60, 0xA0, 0x68, 0xA0, 0x68, 0xA0, 0x70, 0xA0, 0x78, 0xA0, 0x78, 0x80, 0x80, 0x80, + 0x88, 0xC0, 0x88, 0xA0, 0x88, 0x60, 0x98, 0xC1, 0x98, 0xE0, 0xA9, 0x42, 0xA9, 0x42, 0xB1, 0x63, + 0xB9, 0x83, 0xB9, 0x64, 0xB9, 0x44, 0xC1, 0x45, 0xC9, 0x65, 0xC9, 0x85, 0xC9, 0xA6, 0xC9, 0xA6, + 0xC9, 0xE6, 0xC9, 0xE7, 0xCA, 0x28, 0xC2, 0x48, 0xC2, 0x48, 0xC2, 0x69, 0xB2, 0xC8, 0x7A, 0x62, + 0x62, 0x60, 0x62, 0x60, 0x62, 0x80, 0x62, 0xA0, 0x62, 0xC0, 0x62, 0xC1, 0x62, 0xC1, 0x62, 0xE1, + 0x62, 0xE1, 0x62, 0xE1, 0x62, 0xE1, 0x62, 0xE1, 0x62, 0xE1, 0x62, 0xE1, 0x62, 0xE1, 0x62, 0xE1, + 0x62, 0xE1, 0x72, 0xE2, 0x4A, 0x40, 0x3A, 0x20, 0x3A, 0x00, 0x32, 0x00, 0x39, 0xE0, 0x3A, 0x00, + 0x3A, 0x21, 0x42, 0x60, 0x5B, 0x01, 0x4A, 0x80, 0x4A, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0xA0, + 0x4A, 0xA0, 0x52, 0xA0, 0x52, 0xE0, 0x4A, 0xC0, 0x52, 0xE0, 0x73, 0xA1, 0x7B, 0x82, 0x73, 0x41, + 0x5A, 0xC0, 0x4A, 0x80, 0x42, 0x80, 0x42, 0x80, 0x31, 0xE0, 0x42, 0x20, 0x4A, 0x60, 0x4A, 0x60, + 0x52, 0xC0, 0x5B, 0x20, 0x5B, 0x00, 0x53, 0x00, 0x6B, 0xA1, 0x7C, 0x01, 0x7C, 0x01, 0x84, 0x02, + 0x6B, 0x04, 0x4A, 0x41, 0x39, 0xE0, 0x42, 0x20, 0x4A, 0x80, 0x5A, 0xE0, 0x6B, 0x60, 0x73, 0xC0, + 0x7B, 0xE0, 0x84, 0x40, 0x84, 0x60, 0x8C, 0x80, 0x94, 0xA0, 0x9C, 0xC0, 0x9C, 0xC0, 0x9C, 0xA0, + 0x8C, 0x21, 0x7B, 0x80, 0x7B, 0x41, 0x93, 0xA6, 0x9B, 0xE9, 0x7B, 0x07, 0x49, 0xA1, 0x41, 0x40, + 0x49, 0x60, 0x41, 0x40, 0x41, 0x20, 0x49, 0x20, 0x51, 0x20, 0x51, 0x00, 0x50, 0xE0, 0x48, 0xE0, + 0x59, 0x00, 0x58, 0xE0, 0x50, 0xA0, 0x50, 0xA0, 0x58, 0xC0, 0x58, 0xC0, 0x58, 0xC0, 0x60, 0xC0, + 0x60, 0xC0, 0x60, 0xC0, 0x60, 0xC0, 0x68, 0xC0, 0x68, 0xC0, 0x70, 0xC0, 0x78, 0xC0, 0x78, 0xA0, + 0x80, 0xC0, 0x88, 0xC0, 0x88, 0xC0, 0x99, 0x22, 0x99, 0x21, 0xA9, 0x82, 0xA9, 0x82, 0xB1, 0x83, + 0xB1, 0xA3, 0xB9, 0x84, 0xB9, 0x84, 0xB9, 0xA5, 0xC1, 0xA5, 0xC1, 0xC5, 0xC1, 0xC6, 0xC1, 0xE6, + 0xCA, 0x07, 0xC2, 0x27, 0xC2, 0x47, 0xC2, 0x09, 0xB9, 0xA7, 0xB2, 0xA7, 0x82, 0xA3, 0x6A, 0x60, + 0x6A, 0x80, 0x6A, 0xA0, 0x6A, 0xC0, 0x62, 0xC0, 0x62, 0xE1, 0x6A, 0xE1, 0x63, 0x01, 0x63, 0x01, + 0x63, 0x01, 0x63, 0x02, 0x63, 0x02, 0x6B, 0x02, 0x6B, 0x22, 0x63, 0x22, 0x63, 0x22, 0x63, 0x22, + 0x63, 0x02, 0x73, 0x03, 0x52, 0x80, 0x42, 0x20, 0x3A, 0x00, 0x32, 0x00, 0x3A, 0x00, 0x31, 0xE0, + 0x3A, 0x20, 0x42, 0x20, 0x4A, 0xA0, 0x5A, 0xE1, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0xA0, + 0x4A, 0x80, 0x52, 0xA0, 0x52, 0xE0, 0x52, 0xE0, 0x5B, 0x00, 0x7B, 0xA2, 0x83, 0xC3, 0x7B, 0x82, + 0x6B, 0x20, 0x52, 0xA0, 0x4A, 0xA0, 0x4A, 0xA0, 0x42, 0x40, 0x42, 0x20, 0x4A, 0x60, 0x4A, 0x60, + 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x40, 0x6B, 0xA0, 0x7C, 0x21, 0x84, 0x22, + 0x9B, 0xE8, 0x73, 0x04, 0x52, 0x82, 0x4A, 0x80, 0x5A, 0xE0, 0x73, 0x81, 0x8C, 0x22, 0x8C, 0x62, + 0x9C, 0xC2, 0x9D, 0x03, 0xA5, 0x03, 0xA5, 0x03, 0xA5, 0x02, 0xA5, 0x01, 0xA4, 0xE0, 0x9C, 0xC0, + 0x8C, 0x40, 0x7B, 0x80, 0x83, 0x63, 0xAC, 0x4B, 0xC4, 0xD0, 0xAC, 0x4D, 0x72, 0xC4, 0x51, 0xC0, + 0x49, 0x80, 0x49, 0x60, 0x49, 0x60, 0x49, 0x40, 0x49, 0x20, 0x49, 0x20, 0x49, 0x00, 0x48, 0xE0, + 0x51, 0x00, 0x50, 0xE0, 0x50, 0xC0, 0x50, 0xC0, 0x58, 0xE0, 0x58, 0xE0, 0x58, 0xE0, 0x58, 0xE0, + 0x58, 0xE0, 0x58, 0xE0, 0x60, 0xE0, 0x60, 0xE0, 0x68, 0xE0, 0x68, 0xE0, 0x70, 0xE0, 0x78, 0xE0, + 0x78, 0xE0, 0x81, 0x00, 0x88, 0xE0, 0x91, 0x21, 0x91, 0x20, 0xA1, 0x61, 0xA1, 0x82, 0xA9, 0xA2, + 0xB1, 0x83, 0xB1, 0x83, 0xB9, 0xA4, 0xB9, 0xA5, 0xB9, 0xA5, 0xB9, 0xC5, 0xB9, 0xE5, 0xC2, 0x07, + 0xC2, 0x07, 0xBA, 0x67, 0xBA, 0x48, 0xB1, 0xE8, 0xB2, 0xA8, 0x82, 0x82, 0x6A, 0x80, 0x62, 0xA0, + 0x6A, 0xC0, 0x6A, 0xE0, 0x6A, 0xE0, 0x6B, 0x01, 0x6B, 0x01, 0x6B, 0x21, 0x6B, 0x21, 0x6B, 0x21, + 0x6B, 0x22, 0x6B, 0x42, 0x6B, 0x22, 0x6B, 0x42, 0x6B, 0x42, 0x6B, 0x42, 0x6B, 0x42, 0x6B, 0x42, + 0x6B, 0x43, 0x73, 0x23, 0x52, 0x80, 0x42, 0x40, 0x42, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, + 0x3A, 0x20, 0x3A, 0x00, 0x42, 0x40, 0x52, 0xC0, 0x4A, 0xA0, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0xA0, + 0x4A, 0xC0, 0x52, 0xA0, 0x52, 0xC0, 0x52, 0xC0, 0x5B, 0x00, 0x7B, 0xC2, 0x83, 0xE3, 0x83, 0xC3, + 0x6B, 0x20, 0x5A, 0xE0, 0x5A, 0xE0, 0x4A, 0xC0, 0x4A, 0x80, 0x52, 0xA0, 0x5A, 0xE0, 0x4A, 0xA0, + 0x5B, 0x20, 0x53, 0x00, 0x53, 0x20, 0x5B, 0x20, 0x53, 0x00, 0x63, 0x40, 0x7C, 0x01, 0x84, 0x41, + 0xC4, 0xCC, 0x9B, 0xE8, 0x7B, 0x45, 0x6B, 0x23, 0x73, 0x62, 0x8C, 0x04, 0x9C, 0xA5, 0xA4, 0xE6, + 0xAD, 0x48, 0xB5, 0x69, 0xB5, 0x69, 0xB5, 0x69, 0xB5, 0x48, 0xAD, 0x25, 0xA4, 0xE3, 0x9C, 0x80, + 0x84, 0x00, 0x83, 0xC0, 0x9B, 0xE7, 0xBC, 0xAD, 0xD5, 0x31, 0xC4, 0xCF, 0x93, 0xA5, 0x6A, 0x80, + 0x51, 0xC0, 0x51, 0xA0, 0x49, 0x80, 0x49, 0x60, 0x49, 0x40, 0x49, 0x40, 0x49, 0x20, 0x49, 0x20, + 0x49, 0x00, 0x51, 0x00, 0x50, 0xE0, 0x51, 0x00, 0x59, 0x00, 0x59, 0x00, 0x58, 0xE0, 0x58, 0xE0, + 0x58, 0xE0, 0x58, 0xE0, 0x58, 0xE0, 0x60, 0xE0, 0x60, 0xE0, 0x68, 0xE0, 0x70, 0xE0, 0x70, 0xE0, + 0x79, 0x00, 0x81, 0x21, 0x81, 0x00, 0x89, 0x20, 0x89, 0x00, 0x91, 0x61, 0x99, 0x81, 0xA1, 0xC2, + 0xA9, 0x63, 0xA9, 0x63, 0xA9, 0x84, 0xB1, 0xA4, 0xB1, 0xA4, 0xB1, 0xA5, 0xB9, 0xE6, 0xBA, 0x27, + 0xBA, 0x47, 0xBA, 0x48, 0xB2, 0x27, 0xAA, 0xC7, 0x82, 0xA2, 0x72, 0xA0, 0x6A, 0xC0, 0x6A, 0xE0, + 0x72, 0xE0, 0x6B, 0x00, 0x6B, 0x21, 0x6B, 0x21, 0x6B, 0x21, 0x6B, 0x41, 0x6B, 0x41, 0x6B, 0x41, + 0x6B, 0x41, 0x6B, 0x62, 0x6B, 0x62, 0x6B, 0x62, 0x6B, 0x62, 0x6B, 0x62, 0x73, 0x62, 0x73, 0x63, + 0x73, 0x83, 0x73, 0x23, 0x52, 0x60, 0x4A, 0x40, 0x4A, 0x40, 0x3A, 0x20, 0x3A, 0x00, 0x3A, 0x20, + 0x42, 0x40, 0x42, 0x40, 0x42, 0x40, 0x42, 0x60, 0x52, 0xC0, 0x4A, 0xA0, 0x52, 0xC0, 0x52, 0xC0, + 0x52, 0xE0, 0x52, 0xC0, 0x52, 0xC0, 0x52, 0xC0, 0x5B, 0x00, 0x83, 0xE2, 0x8C, 0x04, 0x8C, 0x03, + 0x7B, 0x83, 0x5A, 0xC0, 0x52, 0xC0, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xC0, 0x5B, 0x00, 0x5B, 0x00, + 0x53, 0x00, 0x53, 0x00, 0x53, 0x00, 0x53, 0x20, 0x5B, 0x20, 0x5B, 0x20, 0x6B, 0x80, 0x7C, 0x40, + 0xCD, 0x8F, 0xB4, 0xAB, 0x93, 0xC7, 0x83, 0x84, 0x83, 0xC4, 0x8C, 0x44, 0x94, 0xA6, 0xAD, 0x29, + 0xAD, 0x49, 0xB5, 0x6B, 0xB5, 0x6B, 0xB5, 0x6B, 0xB5, 0x4A, 0xA5, 0x07, 0x9C, 0xA3, 0x8C, 0x40, + 0x83, 0xC0, 0x8B, 0xE1, 0xA4, 0x27, 0xC4, 0xAB, 0xD5, 0x0D, 0xC4, 0xAB, 0xA3, 0xE3, 0x83, 0x00, + 0x6A, 0x60, 0x5A, 0x00, 0x51, 0xA0, 0x49, 0xA0, 0x49, 0x80, 0x49, 0x40, 0x49, 0x40, 0x51, 0x40, + 0x51, 0x40, 0x51, 0x20, 0x51, 0x00, 0x51, 0x00, 0x51, 0x20, 0x59, 0x20, 0x59, 0x00, 0x59, 0x00, + 0x59, 0x00, 0x59, 0x00, 0x58, 0xE0, 0x60, 0xE0, 0x61, 0x00, 0x61, 0x00, 0x69, 0x00, 0x71, 0x00, + 0x71, 0x00, 0x79, 0x20, 0x81, 0x20, 0x81, 0x20, 0x89, 0x20, 0x91, 0x61, 0x99, 0x82, 0x99, 0xA2, + 0x99, 0x83, 0x99, 0x83, 0x99, 0xA3, 0xA1, 0xC4, 0xA9, 0xC5, 0xA9, 0xE5, 0xB2, 0x06, 0xB2, 0x47, + 0xB2, 0x87, 0xAA, 0x47, 0xA2, 0xA6, 0x7A, 0xC2, 0x6A, 0xA0, 0x72, 0xC0, 0x73, 0x00, 0x73, 0x00, + 0x73, 0x20, 0x73, 0x41, 0x73, 0x41, 0x73, 0x61, 0x73, 0x62, 0x73, 0x62, 0x73, 0x62, 0x73, 0x82, + 0x73, 0x62, 0x73, 0x82, 0x73, 0x82, 0x73, 0x82, 0x73, 0x82, 0x73, 0x82, 0x73, 0x82, 0x7B, 0xA3, + 0x73, 0xA3, 0x73, 0x23, 0x4A, 0x40, 0x42, 0x40, 0x4A, 0x60, 0x42, 0x40, 0x42, 0x20, 0x3A, 0x40, + 0x42, 0x40, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x20, 0x4A, 0x80, 0x52, 0xC0, 0x52, 0xE0, 0x52, 0xC0, + 0x52, 0xC0, 0x52, 0xC0, 0x52, 0xE0, 0x53, 0x00, 0x63, 0x20, 0x84, 0x23, 0x94, 0x24, 0x8C, 0x04, + 0x7B, 0xA3, 0x5A, 0xE0, 0x52, 0xC0, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0x80, 0x52, 0xC1, 0x52, 0xA1, + 0x53, 0x00, 0x53, 0x00, 0x53, 0x00, 0x53, 0x20, 0x5B, 0x41, 0x5B, 0x20, 0x5B, 0x40, 0x73, 0xE0, + 0xD6, 0x10, 0xC5, 0x6D, 0xA4, 0x48, 0x8B, 0xA4, 0x8B, 0xC3, 0x8C, 0x23, 0x8C, 0x44, 0x94, 0xA6, + 0xA4, 0xE9, 0xAD, 0x0A, 0xAD, 0x2B, 0xAD, 0x0B, 0x9C, 0xC9, 0x94, 0x66, 0x84, 0x03, 0x73, 0xC0, + 0x73, 0x81, 0x83, 0xC0, 0x9C, 0x26, 0xBC, 0xAA, 0xCD, 0x0A, 0xC4, 0xA6, 0xAC, 0x21, 0x93, 0x80, + 0x83, 0x00, 0x6A, 0x60, 0x51, 0xE0, 0x49, 0xC0, 0x49, 0xA0, 0x49, 0x80, 0x49, 0x60, 0x49, 0x40, + 0x51, 0x40, 0x51, 0x40, 0x51, 0x20, 0x51, 0x00, 0x51, 0x20, 0x51, 0x20, 0x51, 0x20, 0x59, 0x20, + 0x59, 0x00, 0x59, 0x00, 0x59, 0x00, 0x59, 0x00, 0x59, 0x00, 0x61, 0x00, 0x69, 0x00, 0x69, 0x00, + 0x69, 0x00, 0x71, 0x20, 0x79, 0x20, 0x79, 0x40, 0x81, 0x40, 0x81, 0x61, 0x89, 0x82, 0x91, 0x82, + 0x91, 0x83, 0x91, 0xA3, 0x99, 0xC3, 0xA1, 0xE4, 0xA2, 0x05, 0xAA, 0x05, 0xAA, 0x45, 0xAA, 0x65, + 0xA2, 0x85, 0x9A, 0xC4, 0x82, 0xE1, 0x72, 0xC0, 0x72, 0xE0, 0x7A, 0xE0, 0x73, 0x00, 0x73, 0x60, + 0x73, 0x41, 0x73, 0x61, 0x73, 0x81, 0x73, 0x82, 0x73, 0x82, 0x73, 0x82, 0x73, 0x82, 0x73, 0x82, + 0x73, 0x82, 0x73, 0xA2, 0x7B, 0xA2, 0x7B, 0xA2, 0x7B, 0xA2, 0x7B, 0xA2, 0x7B, 0xA3, 0x7B, 0xC3, + 0x73, 0xA3, 0x73, 0x43, 0x4A, 0x40, 0x3A, 0x20, 0x4A, 0x40, 0x4A, 0x80, 0x4A, 0x40, 0x42, 0x40, + 0x42, 0x40, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x40, 0x52, 0xC0, 0x5A, 0xE0, 0x52, 0xC0, + 0x4A, 0xC0, 0x52, 0xE0, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x00, 0x84, 0x02, 0x94, 0x44, 0x8C, 0x24, + 0x73, 0xA1, 0x63, 0x20, 0x52, 0xC0, 0x4A, 0xC0, 0x5B, 0x20, 0x52, 0xA0, 0x4A, 0xA0, 0x52, 0xC0, + 0x5B, 0x20, 0x53, 0x00, 0x53, 0x00, 0x53, 0x20, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x40, 0x63, 0xA0, + 0xD6, 0x10, 0xCD, 0xCF, 0xB4, 0xEA, 0x93, 0xC4, 0x83, 0x81, 0x83, 0xA1, 0x7B, 0xA1, 0x73, 0xC2, + 0x84, 0x24, 0x8C, 0x45, 0x8C, 0x45, 0x8C, 0x45, 0x7C, 0x04, 0x73, 0xA2, 0x6B, 0x80, 0x63, 0x40, + 0x63, 0x40, 0x73, 0x80, 0x8C, 0x03, 0xAC, 0x87, 0xBC, 0xE7, 0xB4, 0xA3, 0xAC, 0x60, 0xA4, 0x00, + 0x93, 0x80, 0x7B, 0x00, 0x62, 0x60, 0x52, 0x00, 0x49, 0xE0, 0x51, 0xE0, 0x51, 0xC0, 0x49, 0x80, + 0x49, 0x60, 0x49, 0x60, 0x51, 0x40, 0x51, 0x40, 0x51, 0x20, 0x51, 0x20, 0x51, 0x20, 0x59, 0x40, + 0x51, 0x20, 0x59, 0x20, 0x59, 0x20, 0x59, 0x20, 0x59, 0x40, 0x59, 0x40, 0x61, 0x20, 0x61, 0x20, + 0x69, 0x40, 0x71, 0x60, 0x71, 0x60, 0x79, 0x60, 0x79, 0x40, 0x79, 0x61, 0x81, 0x81, 0x89, 0x81, + 0x91, 0x82, 0x91, 0xA2, 0x91, 0xC3, 0x99, 0xE3, 0x9A, 0x04, 0xA2, 0x44, 0x9A, 0x83, 0x92, 0xA3, + 0x8A, 0xC2, 0x7B, 0x00, 0x6A, 0xE0, 0x7B, 0x20, 0x73, 0x20, 0x73, 0x00, 0x7B, 0x40, 0x73, 0x60, + 0x7B, 0x81, 0x73, 0x81, 0x7B, 0xA2, 0x73, 0xA2, 0x7B, 0xA2, 0x7B, 0xA2, 0x7B, 0xC2, 0x73, 0xA2, + 0x7B, 0xC2, 0x7B, 0xC2, 0x7B, 0xC2, 0x7B, 0xC3, 0x7B, 0xC3, 0x7B, 0xC3, 0x7B, 0xC3, 0x7B, 0xC3, + 0x7B, 0xC3, 0x73, 0x23, 0x4A, 0x40, 0x3A, 0x00, 0x42, 0x20, 0x4A, 0x60, 0x52, 0x80, 0x42, 0x60, + 0x42, 0x60, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0xA0, 0x42, 0x40, 0x4A, 0xA0, 0x5B, 0x01, 0x5A, 0xE0, + 0x52, 0xC0, 0x52, 0xE0, 0x52, 0xE0, 0x5A, 0xE0, 0x5B, 0x00, 0x84, 0x02, 0x94, 0x44, 0x94, 0x64, + 0x84, 0x01, 0x63, 0x40, 0x5B, 0x00, 0x4A, 0xC0, 0x4A, 0xA0, 0x63, 0x64, 0x84, 0x49, 0x73, 0xE7, + 0x5B, 0x40, 0x53, 0x20, 0x53, 0x20, 0x53, 0x20, 0x53, 0x20, 0x53, 0x40, 0x5B, 0x60, 0x63, 0x60, + 0xCD, 0xD1, 0xC5, 0xAF, 0xB5, 0x2B, 0x94, 0x25, 0x83, 0x61, 0x7B, 0x40, 0x73, 0x60, 0x6B, 0x60, + 0x6B, 0x80, 0x73, 0xA1, 0x73, 0xA1, 0x73, 0x81, 0x6B, 0x60, 0x63, 0x20, 0x5B, 0x20, 0x5B, 0x20, + 0x5B, 0x20, 0x63, 0x60, 0x7B, 0xC0, 0x8C, 0x21, 0xA4, 0x81, 0xAC, 0xA0, 0xAC, 0x80, 0xA4, 0x40, + 0x9B, 0xC0, 0x83, 0x60, 0x6A, 0xC0, 0x5A, 0x60, 0x52, 0x00, 0x52, 0x00, 0x52, 0x00, 0x51, 0xE0, + 0x51, 0xA0, 0x51, 0xA0, 0x51, 0x60, 0x51, 0x60, 0x51, 0x60, 0x51, 0x40, 0x51, 0x20, 0x51, 0x20, + 0x51, 0x40, 0x51, 0x40, 0x51, 0x40, 0x59, 0x40, 0x59, 0x40, 0x59, 0x60, 0x61, 0x40, 0x61, 0x40, + 0x61, 0x40, 0x69, 0x60, 0x71, 0x80, 0x71, 0x80, 0x71, 0x60, 0x71, 0x61, 0x79, 0x61, 0x79, 0x61, + 0x81, 0xA1, 0x89, 0xC2, 0x8A, 0x02, 0x8A, 0x02, 0x8A, 0x23, 0x92, 0x63, 0x8A, 0xA2, 0x82, 0xE2, + 0x73, 0x20, 0x7B, 0x00, 0x7B, 0x20, 0x73, 0x40, 0x73, 0x60, 0x73, 0x80, 0x73, 0x60, 0x7B, 0x82, + 0x7B, 0xA1, 0x7B, 0xC2, 0x7B, 0xC2, 0x7B, 0xE2, 0x7B, 0xC2, 0x7B, 0xC2, 0x7B, 0xC2, 0x7B, 0xE2, + 0x7B, 0xE2, 0x7B, 0xE3, 0x83, 0xE3, 0x83, 0xE3, 0x83, 0xE3, 0x83, 0xE3, 0x83, 0xE3, 0x83, 0xE3, + 0x83, 0xE4, 0x73, 0x22, 0x4A, 0x40, 0x3A, 0x20, 0x3A, 0x00, 0x4A, 0x40, 0x52, 0xA1, 0x4A, 0x80, + 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x20, 0x52, 0xC1, 0x5B, 0x00, + 0x52, 0xE0, 0x52, 0xC0, 0x52, 0xC0, 0x5B, 0x00, 0x63, 0x40, 0x8C, 0x43, 0x94, 0x64, 0x94, 0x84, + 0x84, 0x21, 0x73, 0xA0, 0x5B, 0x20, 0x52, 0xE0, 0x53, 0x00, 0x52, 0xE0, 0x4A, 0xE0, 0x4B, 0x00, + 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x40, 0x53, 0x20, 0x53, 0x20, 0x53, 0x40, 0x5B, 0x40, 0x5B, 0x41, + 0xC5, 0x6E, 0xBD, 0x4E, 0xAC, 0xEB, 0x9C, 0x66, 0x8B, 0xA1, 0x7B, 0x40, 0x73, 0x40, 0x63, 0x00, + 0x5B, 0x20, 0x5B, 0x40, 0x53, 0x20, 0x53, 0x20, 0x5B, 0x00, 0x5A, 0xE0, 0x52, 0xE0, 0x53, 0x00, + 0x5B, 0x00, 0x63, 0x20, 0x6B, 0x80, 0x7B, 0xE0, 0x8C, 0x60, 0x9C, 0x80, 0x9C, 0x80, 0x9C, 0x60, + 0x94, 0x00, 0x83, 0xA0, 0x73, 0x00, 0x62, 0xA0, 0x52, 0x60, 0x52, 0x40, 0x52, 0x40, 0x5A, 0x20, + 0x5A, 0x20, 0x5A, 0x20, 0x59, 0xC0, 0x51, 0x80, 0x51, 0x80, 0x51, 0x60, 0x51, 0x60, 0x51, 0x60, + 0x51, 0x40, 0x51, 0x40, 0x51, 0x40, 0x51, 0x60, 0x59, 0x60, 0x59, 0x60, 0x59, 0x60, 0x61, 0x60, + 0x61, 0x60, 0x69, 0x60, 0x69, 0x80, 0x69, 0x60, 0x69, 0x60, 0x71, 0x80, 0x79, 0xA0, 0x79, 0xA0, + 0x79, 0xE1, 0x79, 0xC0, 0x81, 0xE0, 0x8A, 0x61, 0x92, 0xE2, 0x93, 0x63, 0x83, 0x61, 0x7B, 0x40, + 0x7B, 0x40, 0x7B, 0x60, 0x7B, 0x60, 0x7B, 0x60, 0x7B, 0x80, 0x73, 0x81, 0x7B, 0xA1, 0x7B, 0xC1, + 0x7B, 0xE2, 0x7B, 0xE2, 0x7B, 0xE2, 0x83, 0xE2, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, + 0x84, 0x03, 0x84, 0x03, 0x84, 0x03, 0x84, 0x03, 0x84, 0x03, 0x84, 0x03, 0x84, 0x03, 0x84, 0x03, + 0x83, 0xE4, 0x73, 0x43, 0x42, 0x20, 0x3A, 0x00, 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x40, 0x5A, 0xC1, + 0x4A, 0x80, 0x42, 0x60, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0x80, 0x42, 0x20, 0x4A, 0x60, 0x5B, 0x01, + 0x5A, 0xE1, 0x5A, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x5B, 0x00, 0x84, 0x42, 0x94, 0xA4, 0x94, 0x85, + 0x94, 0x84, 0x7B, 0xC0, 0x63, 0x40, 0x5B, 0x20, 0x52, 0xE0, 0x53, 0x00, 0x53, 0x20, 0x53, 0x00, + 0x53, 0x00, 0x53, 0x20, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x40, + 0xAC, 0xEB, 0xAD, 0x0B, 0xA4, 0xCA, 0x94, 0x46, 0x83, 0xC2, 0x7B, 0x80, 0x73, 0x61, 0x6B, 0x00, + 0x5B, 0x00, 0x53, 0x00, 0x53, 0x20, 0x53, 0x00, 0x52, 0xE0, 0x5A, 0xE0, 0x5B, 0x00, 0x53, 0x00, + 0x5B, 0x20, 0x63, 0x40, 0x6B, 0x60, 0x73, 0xC0, 0x84, 0x20, 0x94, 0x60, 0x9C, 0x80, 0x9C, 0x80, + 0x94, 0x20, 0x8B, 0xC0, 0x73, 0x40, 0x62, 0xC0, 0x5A, 0xA0, 0x5A, 0x80, 0x5A, 0x80, 0x5A, 0x60, + 0x62, 0x80, 0x62, 0x80, 0x62, 0x60, 0x62, 0x40, 0x62, 0x40, 0x59, 0xE0, 0x59, 0xA0, 0x51, 0x80, + 0x51, 0x80, 0x51, 0x80, 0x51, 0x80, 0x51, 0x80, 0x51, 0x80, 0x59, 0x80, 0x59, 0x80, 0x59, 0x80, + 0x59, 0x80, 0x61, 0xA0, 0x61, 0xA0, 0x61, 0x80, 0x61, 0x80, 0x69, 0xA0, 0x71, 0xC0, 0x71, 0xE0, + 0x82, 0x20, 0x92, 0xC2, 0xAB, 0x84, 0xAB, 0xE4, 0xA3, 0xC3, 0x93, 0xA1, 0x83, 0x80, 0x7B, 0x80, + 0x7B, 0x80, 0x7B, 0x80, 0x7B, 0x80, 0x7B, 0xA0, 0x7B, 0xA1, 0x7B, 0xA1, 0x7B, 0xC1, 0x7B, 0xE2, + 0x83, 0xE2, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, + 0x84, 0x23, 0x84, 0x23, 0x84, 0x23, 0x84, 0x23, 0x8C, 0x23, 0x8C, 0x23, 0x8C, 0x23, 0x8C, 0x24, + 0x84, 0x04, 0x73, 0x43, 0x42, 0x20, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x42, 0x00, 0x52, 0x80, + 0x5A, 0xE1, 0x4A, 0x60, 0x4A, 0x80, 0x52, 0xC0, 0x52, 0xC0, 0x4A, 0x80, 0x4A, 0x60, 0x5B, 0x01, + 0x63, 0x01, 0x5B, 0x01, 0x53, 0x00, 0x5B, 0x01, 0x5B, 0x00, 0x84, 0x42, 0x9C, 0xA4, 0x9C, 0xA5, + 0x94, 0xA5, 0x84, 0x22, 0x6B, 0x80, 0x63, 0x40, 0x53, 0x00, 0x53, 0x00, 0x53, 0x20, 0x53, 0x20, + 0x53, 0x00, 0x53, 0x20, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, + 0x94, 0x48, 0x9C, 0xA9, 0x9C, 0xA9, 0x94, 0x66, 0x8C, 0x04, 0x8C, 0x03, 0x83, 0xE4, 0x7B, 0x83, + 0x63, 0x20, 0x52, 0xE0, 0x52, 0xE0, 0x53, 0x00, 0x52, 0xE0, 0x52, 0xE0, 0x5B, 0x00, 0x53, 0x00, + 0x5B, 0x00, 0x63, 0x20, 0x63, 0x60, 0x73, 0xA0, 0x84, 0x00, 0x94, 0x60, 0x9C, 0xA0, 0x9C, 0xA0, + 0x94, 0x40, 0x83, 0xE0, 0x73, 0x40, 0x63, 0x00, 0x62, 0xE0, 0x5A, 0xC0, 0x5A, 0xC0, 0x62, 0xC0, + 0x62, 0xA0, 0x62, 0xC0, 0x6A, 0xC0, 0x6A, 0xE0, 0x6A, 0xE0, 0x6A, 0xC0, 0x72, 0xA1, 0x7A, 0xC2, + 0x7A, 0x83, 0x7A, 0x63, 0x72, 0x42, 0x69, 0xE1, 0x61, 0xC0, 0x61, 0xA0, 0x59, 0xA0, 0x59, 0x80, + 0x61, 0x80, 0x61, 0xA0, 0x69, 0xC0, 0x72, 0x01, 0x82, 0x63, 0x9B, 0x05, 0xB3, 0xC7, 0xBC, 0x28, + 0xCC, 0x89, 0xC4, 0x88, 0xBC, 0x66, 0xA4, 0x04, 0x93, 0xC2, 0x8B, 0xA0, 0x83, 0xA0, 0x83, 0xA0, + 0x83, 0xA0, 0x83, 0xC0, 0x83, 0xC0, 0x83, 0xE0, 0x7B, 0xE1, 0x7B, 0xE1, 0x7B, 0xE1, 0x84, 0x02, + 0x84, 0x22, 0x84, 0x23, 0x84, 0x23, 0x84, 0x43, 0x84, 0x43, 0x84, 0x43, 0x84, 0x23, 0x84, 0x23, + 0x8C, 0x43, 0x8C, 0x43, 0x8C, 0x43, 0x8C, 0x43, 0x8C, 0x44, 0x8C, 0x44, 0x8C, 0x44, 0x8C, 0x44, + 0x8C, 0x24, 0x6B, 0x42, 0x4A, 0x40, 0x3A, 0x00, 0x32, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x42, 0x40, + 0x5B, 0x02, 0x52, 0xC1, 0x52, 0xC0, 0x52, 0xC0, 0x52, 0xC1, 0x52, 0xE1, 0x4A, 0xA0, 0x52, 0xC0, + 0x63, 0x42, 0x5B, 0x01, 0x5B, 0x01, 0x53, 0x00, 0x5B, 0x00, 0x84, 0x42, 0x9C, 0xA4, 0x9C, 0xC5, + 0x9C, 0xC5, 0x8C, 0x43, 0x6B, 0xA0, 0x63, 0x40, 0x5B, 0x00, 0x53, 0x00, 0x53, 0x20, 0x53, 0x20, + 0x53, 0x20, 0x53, 0x20, 0x53, 0x20, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, + 0x8C, 0x05, 0x9C, 0x88, 0x9C, 0xA9, 0x9C, 0xA8, 0x9C, 0x87, 0x9C, 0x87, 0x9C, 0x88, 0x94, 0x27, + 0x7B, 0xC3, 0x63, 0x41, 0x52, 0xE0, 0x52, 0xE0, 0x53, 0x00, 0x52, 0xE0, 0x53, 0x00, 0x5B, 0x20, + 0x5B, 0x00, 0x5B, 0x40, 0x63, 0x60, 0x73, 0xA0, 0x84, 0x01, 0x94, 0x82, 0x9C, 0xC2, 0xA4, 0xC2, + 0x9C, 0x80, 0x8C, 0x00, 0x73, 0x60, 0x6B, 0x20, 0x63, 0x00, 0x63, 0x00, 0x63, 0x00, 0x63, 0x00, + 0x63, 0x00, 0x63, 0x00, 0x6B, 0x00, 0x6B, 0x20, 0x73, 0x20, 0x7B, 0x22, 0x93, 0x64, 0xA3, 0xC7, + 0xC4, 0x2A, 0xD4, 0x8C, 0xDC, 0xEE, 0xDD, 0x0F, 0xDD, 0x0F, 0xDC, 0xEE, 0xD4, 0xAC, 0xCC, 0x8B, + 0xCC, 0x8C, 0xD4, 0xAC, 0xD4, 0xCC, 0xDC, 0xED, 0xDC, 0xEC, 0xDC, 0xEC, 0xDC, 0xEC, 0xDC, 0xEB, + 0xCC, 0xAA, 0xBC, 0x88, 0xAC, 0x25, 0x93, 0xE3, 0x8B, 0xE1, 0x83, 0xC0, 0x83, 0xC0, 0x83, 0xC0, + 0x83, 0xE0, 0x83, 0xE0, 0x83, 0xE1, 0x84, 0x01, 0x84, 0x01, 0x84, 0x01, 0x84, 0x22, 0x84, 0x22, + 0x84, 0x23, 0x84, 0x43, 0x8C, 0x43, 0x8C, 0x63, 0x8C, 0x63, 0x8C, 0x43, 0x8C, 0x43, 0x8C, 0x43, + 0x8C, 0x63, 0x8C, 0x63, 0x8C, 0x63, 0x8C, 0x64, 0x8C, 0x64, 0x94, 0x64, 0x94, 0x64, 0x94, 0x64, + 0x8C, 0x24, 0x6B, 0x22, 0x4A, 0x40, 0x42, 0x20, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x20, 0x3A, 0x20, + 0x52, 0x81, 0x5A, 0xE1, 0x52, 0xC0, 0x52, 0xC0, 0x52, 0xE1, 0x52, 0xE1, 0x52, 0xE0, 0x4A, 0xA0, + 0x5B, 0x01, 0x5B, 0x01, 0x5B, 0x02, 0x5B, 0x21, 0x6B, 0x81, 0x94, 0xA4, 0x9C, 0xC4, 0x9C, 0xE5, + 0x9C, 0xC5, 0x8C, 0x83, 0x73, 0xC1, 0x63, 0x60, 0x5B, 0x20, 0x5B, 0x20, 0x53, 0x00, 0x5B, 0x20, + 0x5B, 0x20, 0x53, 0x20, 0x53, 0x20, 0x5B, 0x40, 0x5B, 0x60, 0x5B, 0x60, 0x5B, 0x40, 0x5B, 0x40, + 0x8C, 0x05, 0x9C, 0x88, 0xAC, 0xEA, 0xA4, 0xEA, 0xA4, 0xEA, 0xAC, 0xEA, 0xB5, 0x0B, 0xB4, 0xEB, + 0x9C, 0xA8, 0x83, 0xE5, 0x5B, 0x20, 0x4A, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x5B, 0x20, + 0x5B, 0x00, 0x63, 0x40, 0x63, 0x40, 0x6B, 0x80, 0x7B, 0xE1, 0x94, 0x63, 0xA4, 0xC5, 0xA4, 0xE6, + 0x9C, 0xC3, 0x8C, 0x21, 0x73, 0xA0, 0x6B, 0x40, 0x63, 0x20, 0x63, 0x20, 0x6B, 0x20, 0x6B, 0x40, + 0x6B, 0x60, 0x6B, 0x40, 0x73, 0x40, 0x73, 0x61, 0x83, 0x62, 0x93, 0xA4, 0xAC, 0x08, 0xC4, 0x6B, + 0xD4, 0xED, 0xDD, 0x4F, 0xE5, 0x90, 0xE5, 0xB1, 0xE5, 0xD1, 0xE5, 0xD1, 0xE5, 0xB0, 0xDD, 0x8F, + 0xDD, 0x4F, 0xDD, 0x4E, 0xDD, 0x4E, 0xDD, 0x2D, 0xDD, 0x2D, 0xD5, 0x0C, 0xCD, 0x0B, 0xCC, 0xEA, + 0xBC, 0xC8, 0xB4, 0x86, 0xA4, 0x44, 0x8C, 0x22, 0x83, 0xE0, 0x83, 0xE0, 0x84, 0x00, 0x8C, 0x00, + 0x84, 0x01, 0x84, 0x01, 0x84, 0x21, 0x84, 0x21, 0x84, 0x22, 0x84, 0x22, 0x84, 0x22, 0x84, 0x42, + 0x8C, 0x43, 0x8C, 0x63, 0x8C, 0x63, 0x8C, 0x83, 0x8C, 0x83, 0x8C, 0x83, 0x8C, 0x83, 0x8C, 0x83, + 0x8C, 0x63, 0x8C, 0x63, 0x94, 0x84, 0x94, 0x84, 0x94, 0x84, 0x94, 0x84, 0x94, 0x84, 0x94, 0x84, + 0x94, 0x45, 0x6B, 0x02, 0x4A, 0x40, 0x42, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, + 0x42, 0x40, 0x52, 0xC0, 0x52, 0xC0, 0x52, 0xC0, 0x52, 0xE1, 0x52, 0xC0, 0x52, 0xE0, 0x4A, 0xA0, + 0x5B, 0x01, 0x63, 0x22, 0x5B, 0x02, 0x63, 0x21, 0x7B, 0xC2, 0x9C, 0xC5, 0x9C, 0xE5, 0xA5, 0x05, + 0x9C, 0xE5, 0x94, 0xA4, 0x7B, 0xE1, 0x63, 0x60, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x20, + 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x63, 0x60, 0x63, 0x60, 0x63, 0x60, + 0x8C, 0x26, 0xA4, 0xA9, 0xB5, 0x0B, 0xB5, 0x4C, 0xB5, 0x4C, 0xB5, 0x4C, 0xBD, 0x6D, 0xC5, 0x6E, + 0xBD, 0x4C, 0xA4, 0xA9, 0x7B, 0xA3, 0x52, 0xE0, 0x52, 0xC0, 0x52, 0xE0, 0x52, 0xE0, 0x53, 0x00, + 0x5B, 0x00, 0x63, 0x20, 0x6B, 0x60, 0x73, 0x80, 0x83, 0xE2, 0x94, 0x65, 0xA4, 0xC7, 0xA4, 0xE8, + 0xA4, 0xE5, 0x94, 0x64, 0x7B, 0xE2, 0x73, 0x81, 0x6B, 0x61, 0x6B, 0x60, 0x6B, 0x60, 0x73, 0x60, + 0x6B, 0x80, 0x73, 0x60, 0x7B, 0x81, 0x8B, 0xA3, 0x9B, 0xE5, 0xAC, 0x48, 0xC4, 0xAC, 0xD5, 0x0E, + 0xDD, 0x70, 0xE5, 0xB1, 0xED, 0xD2, 0xE5, 0xD2, 0xE5, 0xD2, 0xE5, 0xB1, 0xDD, 0x90, 0xDD, 0x6F, + 0xDD, 0x6E, 0xD5, 0x4E, 0xD5, 0x2D, 0xD5, 0x2C, 0xCD, 0x0C, 0xCD, 0x0B, 0xBC, 0xE9, 0xBC, 0xC8, + 0xB4, 0xC5, 0xA4, 0x64, 0x94, 0x22, 0x8C, 0x00, 0x84, 0x00, 0x84, 0x20, 0x8C, 0x20, 0x8C, 0x20, + 0x8C, 0x21, 0x8C, 0x21, 0x8C, 0x21, 0x8C, 0x42, 0x8C, 0x42, 0x8C, 0x42, 0x84, 0x42, 0x8C, 0x43, + 0x8C, 0x63, 0x8C, 0x63, 0x8C, 0x83, 0x8C, 0x83, 0x8C, 0x83, 0x8C, 0x83, 0x8C, 0x83, 0x8C, 0x83, + 0x8C, 0x83, 0x94, 0x84, 0x94, 0x84, 0x94, 0x84, 0x94, 0x84, 0x94, 0x84, 0x9C, 0x84, 0x9C, 0x85, + 0x94, 0x45, 0x62, 0xE1, 0x42, 0x40, 0x42, 0x40, 0x42, 0x20, 0x3A, 0x00, 0x3A, 0x20, 0x3A, 0x20, + 0x42, 0x20, 0x4A, 0x80, 0x5B, 0x01, 0x52, 0xA0, 0x52, 0xC0, 0x5A, 0xE1, 0x52, 0xC0, 0x4A, 0xA0, + 0x63, 0x21, 0x63, 0x43, 0x5B, 0x02, 0x63, 0x41, 0x84, 0x03, 0x9C, 0xC5, 0x9C, 0xE5, 0xA5, 0x05, + 0xA5, 0x05, 0x9C, 0xC5, 0x7C, 0x03, 0x6B, 0x80, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x40, + 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x63, 0x60, 0x63, 0x80, 0x63, 0x80, + 0x8C, 0x06, 0xA4, 0xA9, 0xB5, 0x2B, 0xC5, 0x8D, 0xC5, 0x8D, 0xBD, 0x6D, 0xC5, 0x8D, 0xCD, 0xAE, + 0xCD, 0x8F, 0xBD, 0x2C, 0x94, 0x47, 0x6B, 0x42, 0x52, 0xC0, 0x52, 0xC0, 0x52, 0xE0, 0x52, 0xC0, + 0x52, 0xC0, 0x5B, 0x00, 0x6B, 0x40, 0x73, 0xA1, 0x84, 0x03, 0x94, 0x65, 0x9C, 0xA7, 0xA4, 0xC8, + 0xA4, 0xE7, 0x9C, 0x86, 0x84, 0x24, 0x7B, 0xC2, 0x73, 0xA1, 0x73, 0x81, 0x73, 0x81, 0x73, 0xA1, + 0x7B, 0xA1, 0x83, 0xC2, 0x93, 0xE5, 0xA4, 0x27, 0xB4, 0x8A, 0xC4, 0xED, 0xD5, 0x4F, 0xDD, 0x91, + 0xDD, 0xD2, 0xE5, 0xF3, 0xE6, 0x13, 0xE5, 0xF2, 0xE5, 0xF2, 0xDD, 0xD0, 0xDD, 0xAF, 0xDD, 0x8F, + 0xD5, 0x4D, 0xCD, 0x2D, 0xCD, 0x0C, 0xC5, 0x0B, 0xC5, 0x0A, 0xBD, 0x09, 0xB4, 0xE7, 0xB4, 0xC6, + 0x9C, 0xA4, 0x9C, 0x62, 0x94, 0x22, 0x8C, 0x21, 0x8C, 0x21, 0x8C, 0x21, 0x8C, 0x21, 0x8C, 0x41, + 0x8C, 0x41, 0x8C, 0x41, 0x8C, 0x41, 0x8C, 0x62, 0x8C, 0x62, 0x8C, 0x62, 0x8C, 0x62, 0x8C, 0x63, + 0x8C, 0x63, 0x8C, 0x83, 0x94, 0x83, 0x94, 0x83, 0x94, 0x83, 0x94, 0x83, 0x94, 0x83, 0x94, 0xA3, + 0x94, 0xA3, 0x94, 0xA4, 0x94, 0xA4, 0x94, 0xA4, 0x9C, 0xA4, 0x9C, 0xA4, 0x9C, 0xA5, 0x9C, 0xA5, + 0x8C, 0x25, 0x5A, 0xA0, 0x42, 0x00, 0x42, 0x40, 0x42, 0x40, 0x42, 0x00, 0x3A, 0x00, 0x3A, 0x20, + 0x3A, 0x00, 0x42, 0x40, 0x52, 0xE1, 0x52, 0xA0, 0x52, 0xA0, 0x63, 0x02, 0x5B, 0x01, 0x52, 0xC0, + 0x52, 0xE0, 0x5A, 0xE1, 0x63, 0x22, 0x7C, 0x03, 0x9C, 0xC5, 0xA5, 0x06, 0xA5, 0x06, 0xA5, 0x05, + 0xA5, 0x05, 0x9C, 0xC6, 0x84, 0x24, 0x73, 0xC2, 0x63, 0x40, 0x5B, 0x20, 0x53, 0x20, 0x5B, 0x40, + 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x63, 0x60, 0x63, 0x80, 0x63, 0xA0, + 0x7B, 0xA5, 0x94, 0x68, 0xB5, 0x0B, 0xC5, 0x8D, 0xC5, 0xAD, 0xBD, 0x8D, 0xC5, 0x8D, 0xC5, 0x8D, + 0xCD, 0x8F, 0xBD, 0x4D, 0xA4, 0xA9, 0x7B, 0xA4, 0x5A, 0xE0, 0x4A, 0xA0, 0x4A, 0xC0, 0x4A, 0x80, + 0x52, 0xA0, 0x5A, 0xE0, 0x63, 0x20, 0x73, 0x81, 0x83, 0xE3, 0x94, 0x45, 0x9C, 0xA7, 0xA4, 0xC8, + 0xA4, 0xC8, 0x9C, 0xA7, 0x8C, 0x45, 0x84, 0x03, 0x7B, 0xC2, 0x73, 0xA1, 0x7B, 0xA2, 0x7B, 0xC2, + 0x83, 0xE4, 0x9C, 0x26, 0xAC, 0x89, 0xC4, 0xCC, 0xCD, 0x2E, 0xDD, 0x70, 0xDD, 0xB2, 0xE5, 0xF3, + 0xE6, 0x14, 0xE6, 0x34, 0xE6, 0x13, 0xDD, 0xF2, 0xDD, 0xF1, 0xDD, 0xB0, 0xD5, 0x8F, 0xD5, 0x6E, + 0xCD, 0x6D, 0xCD, 0x4C, 0xC5, 0x2B, 0xBD, 0x0A, 0xBC, 0xE9, 0xB4, 0xE7, 0xA4, 0xC5, 0x9C, 0xA3, + 0x94, 0x82, 0x94, 0x61, 0x94, 0x41, 0x94, 0x41, 0x94, 0x41, 0x94, 0x41, 0x94, 0x41, 0x94, 0x61, + 0x94, 0x62, 0x94, 0x62, 0x8C, 0x62, 0x94, 0x62, 0x94, 0x83, 0x8C, 0x62, 0x8C, 0x63, 0x8C, 0x63, + 0x94, 0x83, 0x94, 0x83, 0x94, 0x83, 0x94, 0xA3, 0x94, 0xA3, 0x94, 0xA3, 0x94, 0xA4, 0x94, 0xA4, + 0x94, 0xA4, 0x94, 0xA4, 0x94, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC5, 0x9C, 0xA5, 0x9C, 0xA5, + 0x8C, 0x25, 0x52, 0x80, 0x39, 0xE0, 0x42, 0x40, 0x4A, 0x60, 0x42, 0x20, 0x3A, 0x00, 0x3A, 0x20, + 0x3A, 0x20, 0x3A, 0x20, 0x4A, 0x80, 0x52, 0xE0, 0x52, 0xA0, 0x5A, 0xE1, 0x5A, 0xE1, 0x52, 0xC0, + 0x5B, 0x00, 0x5B, 0x01, 0x63, 0x42, 0x8C, 0x64, 0xA5, 0x05, 0xA5, 0x05, 0xAD, 0x26, 0xA5, 0x25, + 0xAD, 0x05, 0xA4, 0xE6, 0x8C, 0x65, 0x7C, 0x03, 0x63, 0x60, 0x5B, 0x20, 0x53, 0x20, 0x5B, 0x40, + 0x5B, 0x60, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x60, 0x5B, 0x60, 0x63, 0x80, 0x6B, 0xA0, + 0x73, 0x63, 0x8C, 0x06, 0xA4, 0xC9, 0xBD, 0x4C, 0xC5, 0x8D, 0xBD, 0x6D, 0xBD, 0x6B, 0xBD, 0x6B, + 0xC5, 0x6B, 0xBD, 0x4C, 0xAC, 0xAA, 0x83, 0xC5, 0x63, 0x01, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0xA0, + 0x52, 0xA0, 0x52, 0xC0, 0x5B, 0x20, 0x6B, 0x60, 0x7B, 0xC1, 0x8C, 0x24, 0x9C, 0x66, 0x9C, 0xA7, + 0x9C, 0x87, 0x9C, 0xA7, 0x94, 0x85, 0x84, 0x44, 0x84, 0x03, 0x83, 0xC3, 0x8B, 0xE5, 0x94, 0x26, + 0xAC, 0x48, 0xBC, 0xAA, 0xCD, 0x0D, 0xD5, 0x6F, 0xDD, 0xD1, 0xE5, 0xF3, 0xE6, 0x13, 0xE6, 0x34, + 0xE6, 0x34, 0xE6, 0x34, 0xE6, 0x13, 0xDD, 0xF2, 0xDD, 0xD1, 0xDD, 0xB0, 0xDD, 0x8F, 0xD5, 0x8E, + 0xCD, 0x6D, 0xC5, 0x4C, 0xBD, 0x29, 0xB5, 0x08, 0xAC, 0xE6, 0xA4, 0xC4, 0xA4, 0xA3, 0x9C, 0x82, + 0x94, 0x62, 0x94, 0x62, 0x94, 0x62, 0x94, 0x62, 0x94, 0x62, 0x94, 0x82, 0x94, 0x62, 0x94, 0x62, + 0x94, 0x82, 0x94, 0x83, 0x94, 0x83, 0x94, 0x83, 0x94, 0x83, 0x94, 0x83, 0x94, 0x83, 0x94, 0x83, + 0x94, 0x84, 0x94, 0x84, 0x94, 0xA3, 0x94, 0xA3, 0x94, 0xA3, 0x94, 0xA3, 0x94, 0xA4, 0x9C, 0xC4, + 0x94, 0xC4, 0x9C, 0xE4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC5, 0xA4, 0xC6, + 0x84, 0x04, 0x4A, 0x60, 0x3A, 0x00, 0x3A, 0x00, 0x4A, 0x60, 0x4A, 0x40, 0x3A, 0x00, 0x3A, 0x20, + 0x3A, 0x20, 0x3A, 0x40, 0x42, 0x40, 0x52, 0xC1, 0x52, 0xA0, 0x52, 0xA0, 0x52, 0xC0, 0x5A, 0xE0, + 0x63, 0x62, 0x63, 0x21, 0x83, 0xE3, 0x9C, 0xC5, 0xA5, 0x25, 0xA5, 0x05, 0xA5, 0x25, 0xAD, 0x26, + 0xAD, 0x25, 0xA5, 0x25, 0x9C, 0xA6, 0x84, 0x03, 0x63, 0x60, 0x5B, 0x20, 0x53, 0x20, 0x53, 0x20, + 0x5B, 0x20, 0x5B, 0x20, 0x63, 0x60, 0x73, 0xA0, 0x73, 0xA0, 0x73, 0x60, 0x6B, 0x60, 0x63, 0xA0, + 0x6B, 0x22, 0x7B, 0xA4, 0x9C, 0x68, 0xB5, 0x2B, 0xC5, 0x8D, 0xC5, 0x8D, 0xBD, 0x6C, 0xBD, 0x2A, + 0xB5, 0x0A, 0xB4, 0xEA, 0xA4, 0x88, 0x7B, 0xC4, 0x63, 0x00, 0x52, 0xC0, 0x4A, 0xA0, 0x4A, 0xA0, + 0x4A, 0xC0, 0x52, 0xC0, 0x53, 0x00, 0x63, 0x20, 0x6B, 0x61, 0x7B, 0xA2, 0x8C, 0x24, 0x94, 0x66, + 0x9C, 0x86, 0x9C, 0x86, 0x94, 0x85, 0x94, 0x65, 0x94, 0x45, 0x9C, 0x46, 0xAC, 0x68, 0xB4, 0xA9, + 0xC4, 0xCC, 0xCD, 0x2E, 0xD5, 0x91, 0xDD, 0xD2, 0xE5, 0xF4, 0xE6, 0x35, 0xE6, 0x35, 0xE6, 0x35, + 0xE6, 0x14, 0xE6, 0x14, 0xE5, 0xF3, 0xDD, 0xD2, 0xDD, 0xD1, 0xDD, 0xB0, 0xD5, 0x8F, 0xD5, 0x6E, + 0xC5, 0x6C, 0xC5, 0x2A, 0xB5, 0x08, 0xAC, 0xE6, 0xAC, 0xC5, 0xA4, 0xC4, 0x9C, 0xA3, 0x9C, 0x82, + 0x9C, 0x82, 0x9C, 0x82, 0x9C, 0x82, 0x9C, 0x82, 0x9C, 0x83, 0x9C, 0x83, 0x9C, 0x82, 0x9C, 0x82, + 0x94, 0x83, 0x9C, 0x83, 0x9C, 0x83, 0x94, 0xA3, 0x94, 0x83, 0x94, 0xA3, 0x94, 0xA3, 0x94, 0x83, + 0x94, 0xA4, 0x94, 0xA4, 0x94, 0xA4, 0x94, 0xA4, 0x94, 0xA3, 0x94, 0xA4, 0x94, 0xC4, 0x9C, 0xC4, + 0x94, 0xC4, 0x9C, 0xE4, 0x9C, 0xC5, 0x9C, 0xC4, 0x9C, 0xE5, 0x9C, 0xC5, 0x9C, 0xC5, 0x9C, 0xC5, + 0x83, 0xE3, 0x4A, 0x60, 0x3A, 0x00, 0x3A, 0x20, 0x42, 0x40, 0x4A, 0x60, 0x3A, 0x20, 0x3A, 0x20, + 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x40, 0x52, 0xC1, 0x52, 0xC0, 0x52, 0xC0, 0x52, 0xC0, 0x52, 0xC0, + 0x5B, 0x01, 0x5B, 0x00, 0x8C, 0x44, 0xA5, 0x05, 0xAD, 0x25, 0xA5, 0x25, 0xAD, 0x26, 0xAD, 0x46, + 0xAD, 0x45, 0xAD, 0x26, 0x9C, 0xA6, 0x84, 0x03, 0x63, 0x80, 0x5B, 0x40, 0x5B, 0x40, 0x53, 0x20, + 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x40, 0x6B, 0x60, 0x73, 0x80, 0x73, 0x60, 0x6B, 0x60, 0x6B, 0xA0, + 0x6B, 0x42, 0x7B, 0xA4, 0x9C, 0x68, 0xB5, 0x0B, 0xC5, 0x8E, 0xCD, 0xCE, 0xC5, 0x8D, 0xBD, 0x2B, + 0xAD, 0x09, 0xA4, 0xA8, 0x94, 0x25, 0x7B, 0xC1, 0x6B, 0x40, 0x5A, 0xE0, 0x52, 0xC0, 0x4A, 0xC0, + 0x4A, 0xC0, 0x4A, 0xC0, 0x52, 0xE0, 0x53, 0x00, 0x5B, 0x20, 0x63, 0x40, 0x73, 0xA2, 0x84, 0x03, + 0x8C, 0x43, 0x8C, 0x64, 0x94, 0x65, 0x9C, 0x66, 0xA4, 0x67, 0xB4, 0x69, 0xC4, 0xAB, 0xCD, 0x0D, + 0xD5, 0x4F, 0xDD, 0x90, 0xE5, 0xD2, 0xE6, 0x13, 0xE6, 0x34, 0xE6, 0x34, 0xE6, 0x34, 0xE6, 0x14, + 0xE6, 0x14, 0xE6, 0x13, 0xDD, 0xF2, 0xDD, 0xD1, 0xDD, 0xB1, 0xD5, 0xB0, 0xD5, 0x8E, 0xCD, 0x6D, + 0xBD, 0x49, 0xB5, 0x28, 0xAC, 0xE6, 0xA4, 0xC4, 0xA4, 0xC3, 0x9C, 0xA3, 0x9C, 0xA3, 0x9C, 0xA3, + 0x9C, 0x83, 0x9C, 0x83, 0x9C, 0x83, 0x9C, 0x83, 0x9C, 0xA3, 0x9C, 0xA3, 0x9C, 0xA3, 0x9C, 0xA3, + 0x9C, 0xA3, 0x9C, 0xA3, 0x9C, 0xA3, 0x9C, 0xA4, 0x9C, 0xA4, 0x9C, 0xA4, 0x94, 0xA4, 0x94, 0xA4, + 0x94, 0xA4, 0x94, 0xA4, 0x94, 0xA4, 0x94, 0xA4, 0x94, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, + 0x9C, 0xC4, 0x9C, 0xE5, 0x9C, 0xC5, 0x9C, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0x9C, 0xC5, + 0x7B, 0xC3, 0x4A, 0x40, 0x3A, 0x00, 0x3A, 0x20, 0x42, 0x20, 0x4A, 0x60, 0x42, 0x40, 0x3A, 0x20, + 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x4A, 0xA0, 0x52, 0xC0, 0x52, 0xA0, 0x52, 0xC0, 0x52, 0xE0, + 0x52, 0xE1, 0x63, 0x20, 0x94, 0xA4, 0xA5, 0x05, 0xAD, 0x25, 0xAD, 0x25, 0xAD, 0x26, 0xAD, 0x46, + 0xAD, 0x45, 0xAD, 0x25, 0x9C, 0xA6, 0x7B, 0xE2, 0x63, 0x60, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x20, + 0x53, 0x20, 0x53, 0x20, 0x5B, 0x40, 0x63, 0x40, 0x6B, 0x60, 0x73, 0x60, 0x6B, 0x60, 0x73, 0xE0, + 0x6B, 0x21, 0x7B, 0xA4, 0x9C, 0x68, 0xBD, 0x2C, 0xC5, 0xAE, 0xCD, 0xEF, 0xCD, 0xCE, 0xBD, 0x6C, + 0xA5, 0x08, 0x9C, 0x86, 0x8C, 0x03, 0x8B, 0xE1, 0x83, 0xC0, 0x73, 0x60, 0x63, 0x20, 0x52, 0xE0, + 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x5A, 0xE0, 0x63, 0x40, 0x6B, 0x81, + 0x73, 0xC1, 0x7C, 0x02, 0x8C, 0x23, 0x9C, 0x45, 0xAC, 0x47, 0xBC, 0x8A, 0xCC, 0xAC, 0xDD, 0x0E, + 0xDD, 0x91, 0xE5, 0xD2, 0xE5, 0xF3, 0xE6, 0x13, 0xE6, 0x33, 0xE6, 0x33, 0xDE, 0x12, 0xDD, 0xF2, + 0xDD, 0xD2, 0xD5, 0xD1, 0xD5, 0x90, 0xCD, 0x6F, 0xCD, 0x6E, 0xC5, 0x6D, 0xBD, 0x4C, 0xBD, 0x4A, + 0xB5, 0x27, 0xAC, 0xE6, 0xA4, 0xC4, 0xA4, 0xA3, 0x9C, 0xA3, 0x9C, 0xA3, 0x9C, 0xA3, 0x9C, 0xA3, + 0x9C, 0x83, 0x9C, 0x83, 0x9C, 0xA3, 0x9C, 0xA3, 0x9C, 0xA3, 0x9C, 0xA3, 0x9C, 0xA3, 0x9C, 0xC3, + 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, + 0x94, 0xC4, 0x94, 0xC4, 0x94, 0xC4, 0x94, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xE4, + 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0x9C, 0xC5, + 0x73, 0xA3, 0x4A, 0x40, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x00, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x20, + 0x3A, 0x40, 0x42, 0x40, 0x42, 0x40, 0x42, 0x40, 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xC0, 0x5A, 0xE1, + 0x5B, 0x01, 0x7B, 0xC2, 0x9C, 0xE4, 0xA5, 0x25, 0xAD, 0x26, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, + 0xAD, 0x45, 0xA5, 0x25, 0x94, 0x85, 0x7B, 0xC2, 0x63, 0x60, 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x20, + 0x53, 0x40, 0x53, 0x20, 0x5B, 0x40, 0x5B, 0x20, 0x63, 0x60, 0x6B, 0x80, 0x6B, 0x80, 0x7C, 0x20, + 0x6B, 0x21, 0x83, 0xA4, 0xA4, 0x88, 0xC5, 0x4D, 0xCD, 0xCF, 0xCD, 0xEF, 0xC5, 0xCE, 0xBD, 0x6C, + 0xA4, 0xE7, 0x9C, 0x86, 0x9C, 0x45, 0xA4, 0x65, 0xA4, 0x65, 0x94, 0x04, 0x7B, 0x82, 0x63, 0x00, + 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xE0, 0x52, 0xE0, 0x52, 0xC0, 0x52, 0xE0, 0x5B, 0x00, 0x5B, 0x20, + 0x6B, 0x80, 0x6B, 0xA0, 0x7B, 0xC1, 0x8C, 0x03, 0xA4, 0x66, 0xBC, 0x89, 0xC4, 0xCC, 0xCC, 0xEE, + 0xDD, 0x70, 0xDD, 0xB1, 0xDD, 0xD2, 0xDD, 0xD1, 0xD5, 0xD1, 0xD5, 0xD0, 0xD5, 0xAF, 0xD5, 0x8F, + 0xCD, 0x8F, 0xC5, 0x6E, 0xC5, 0x2D, 0xBD, 0x0C, 0xB5, 0x0B, 0xB5, 0x0A, 0xAD, 0x09, 0xAD, 0x08, + 0xA4, 0xE6, 0xA4, 0xC4, 0xA4, 0xA3, 0xA4, 0xA3, 0xA4, 0xA3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, + 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xC4, 0xA4, 0xC4, 0xA4, 0xC4, 0xA4, 0xC4, + 0xA4, 0xC4, 0xA4, 0xC4, 0xA4, 0xC4, 0x9C, 0xE4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, + 0x9C, 0xC5, 0x9C, 0xC5, 0x9C, 0xC5, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xE4, 0x9C, 0xE5, + 0x9C, 0xE5, 0x9C, 0xE5, 0xA4, 0xE5, 0xA5, 0x05, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0x9C, 0xC5, + 0x73, 0x83, 0x4A, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x20, 0x42, 0x60, 0x3A, 0x20, + 0x3A, 0x20, 0x42, 0x40, 0x42, 0x40, 0x42, 0x40, 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xC0, 0x52, 0xC0, + 0x5A, 0xE0, 0x8C, 0x63, 0xA5, 0x24, 0xAD, 0x45, 0xAD, 0x26, 0xAD, 0x26, 0xAD, 0x45, 0xAD, 0x46, + 0xAD, 0x46, 0xA5, 0x05, 0x94, 0x65, 0x73, 0xC2, 0x63, 0x60, 0x5B, 0x20, 0x53, 0x20, 0x5B, 0x40, + 0x5B, 0x20, 0x5B, 0x20, 0x63, 0x40, 0x63, 0x40, 0x6B, 0x60, 0x6B, 0x80, 0x73, 0xC0, 0x84, 0x81, + 0x6B, 0x22, 0x83, 0xA4, 0xAC, 0x68, 0xC5, 0x4C, 0xCD, 0xAE, 0xCD, 0xCE, 0xC5, 0x8D, 0xBD, 0x2C, + 0xB4, 0xC9, 0xAC, 0xA9, 0xB4, 0xA9, 0xBC, 0xCA, 0xBC, 0xA9, 0xB4, 0x48, 0x93, 0xC4, 0x73, 0x40, + 0x52, 0xC0, 0x52, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x52, 0xC0, 0x5A, 0xE0, 0x5B, 0x00, 0x5B, 0x20, + 0x63, 0x40, 0x6B, 0x80, 0x73, 0xA0, 0x7B, 0xE1, 0x94, 0x23, 0xA4, 0x66, 0xB4, 0xA9, 0xBC, 0xEB, + 0xC5, 0x2D, 0xCD, 0x4E, 0xC5, 0x6E, 0xC5, 0x6E, 0xC5, 0x4D, 0xBD, 0x4C, 0xBD, 0x2B, 0xBD, 0x2B, + 0xB5, 0x0C, 0xB5, 0x0B, 0xAC, 0xCA, 0xA4, 0xC9, 0xA4, 0xA9, 0x9C, 0xC8, 0x9C, 0xC6, 0x9C, 0xC6, + 0xA4, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, + 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xC4, 0xA4, 0xC4, 0xA4, 0xC4, 0xA4, 0xC4, 0xA4, 0xC4, 0xA4, 0xE4, + 0xA4, 0xE4, 0xA4, 0xE4, 0xA4, 0xE4, 0x9C, 0xE4, 0x9C, 0xE4, 0x9C, 0xE4, 0x9C, 0xE5, 0x9C, 0xE5, + 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE4, 0x9C, 0xE4, 0x9C, 0xE5, 0x9C, 0xE5, + 0x9C, 0xE5, 0x9D, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0x9C, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0x9C, 0xA5, + 0x6B, 0x43, 0x42, 0x40, 0x3A, 0x20, 0x3A, 0x00, 0x3A, 0x20, 0x3A, 0x00, 0x42, 0x40, 0x42, 0x40, + 0x3A, 0x20, 0x42, 0x40, 0x42, 0x60, 0x42, 0x40, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xC0, + 0x6B, 0x60, 0x9C, 0xE4, 0xA5, 0x04, 0xAD, 0x25, 0xAD, 0x26, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x25, + 0xAD, 0x46, 0xA5, 0x25, 0x8C, 0x65, 0x73, 0xC2, 0x63, 0x60, 0x53, 0x20, 0x53, 0x20, 0x53, 0x40, + 0x63, 0x00, 0x63, 0x20, 0x6B, 0x20, 0x6B, 0x40, 0x6B, 0x60, 0x73, 0xA0, 0x7C, 0x00, 0x94, 0xC2, + 0x73, 0x22, 0x8B, 0x84, 0xA4, 0x27, 0xB4, 0x89, 0xBD, 0x0B, 0xC5, 0x4C, 0xBD, 0x0C, 0xBC, 0xCB, + 0xBC, 0x8A, 0xBC, 0xAA, 0xC4, 0xCB, 0xCC, 0xCB, 0xC4, 0xAB, 0xBC, 0x6A, 0x9C, 0x06, 0x7B, 0x81, + 0x52, 0xE0, 0x52, 0xC0, 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xC0, 0x52, 0xC0, 0x5B, 0x00, 0x5B, 0x20, + 0x63, 0x20, 0x63, 0x60, 0x6B, 0x80, 0x73, 0xC0, 0x7B, 0xE1, 0x84, 0x02, 0x94, 0x44, 0x94, 0x86, + 0xA4, 0xA8, 0xAC, 0xC9, 0xAC, 0xEA, 0xAC, 0xCA, 0xA4, 0xC9, 0xA4, 0xC9, 0xA4, 0xC9, 0xA4, 0xC9, + 0x94, 0xA8, 0x94, 0x88, 0x8C, 0x87, 0x8C, 0x67, 0x8C, 0x66, 0x94, 0x86, 0x94, 0x85, 0x9C, 0x84, + 0xA4, 0xA5, 0xA4, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA5, 0xA4, 0xA5, 0xA4, 0xA5, 0xA4, 0xC4, + 0xA4, 0xC4, 0xA4, 0xC4, 0xA4, 0xC4, 0xA4, 0xC4, 0xA4, 0xC4, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, + 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, + 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, + 0x9D, 0x05, 0x9D, 0x05, 0x9C, 0xE5, 0xA5, 0x05, 0x9D, 0x05, 0xA5, 0x05, 0x9C, 0xE5, 0x94, 0xA4, + 0x63, 0x22, 0x42, 0x40, 0x3A, 0x20, 0x3A, 0x00, 0x3A, 0x00, 0x39, 0xE0, 0x3A, 0x00, 0x42, 0x40, + 0x3A, 0x40, 0x42, 0x40, 0x42, 0x60, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0xA0, 0x52, 0xC0, + 0x84, 0x21, 0xA5, 0x05, 0xA5, 0x05, 0xAD, 0x25, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x45, + 0xAD, 0x46, 0xA5, 0x25, 0x94, 0x65, 0x73, 0xC2, 0x63, 0x80, 0x5B, 0x20, 0x53, 0x00, 0x53, 0x20, + 0x63, 0x20, 0x63, 0x20, 0x6B, 0x40, 0x6B, 0x40, 0x6B, 0x80, 0x73, 0xC0, 0x8C, 0x61, 0x9D, 0x03, + 0x73, 0x63, 0x8B, 0xA5, 0xA3, 0xE6, 0xA3, 0xE7, 0xA4, 0x28, 0xAC, 0x69, 0xAC, 0x49, 0xAC, 0x29, + 0xBC, 0x49, 0xC4, 0x6A, 0xCC, 0xCB, 0xCC, 0xCB, 0xCC, 0xAB, 0xC4, 0xAA, 0xA4, 0x47, 0x7B, 0x81, + 0x5B, 0x00, 0x52, 0xC0, 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xC0, 0x52, 0xC0, 0x5A, 0xE0, 0x5B, 0x20, + 0x63, 0x40, 0x6B, 0x60, 0x6B, 0x80, 0x73, 0xA0, 0x73, 0xA0, 0x73, 0xC0, 0x73, 0xC0, 0x73, 0xE1, + 0x7B, 0xE1, 0x84, 0x23, 0x8C, 0x44, 0x8C, 0x44, 0x8C, 0x24, 0x84, 0x45, 0x84, 0x45, 0x84, 0x46, + 0x84, 0x46, 0x84, 0x46, 0x84, 0x46, 0x84, 0x66, 0x8C, 0x66, 0x94, 0x86, 0x9C, 0xA5, 0xA4, 0xC5, + 0xA4, 0xC5, 0xA4, 0xC5, 0xA4, 0xA5, 0xA4, 0xA5, 0xA4, 0xA5, 0xA4, 0xA5, 0xA4, 0xC5, 0xAC, 0xC5, + 0xAC, 0xC5, 0xAC, 0xC5, 0xAC, 0xE5, 0xAC, 0xE4, 0xAC, 0xE4, 0xAC, 0xE5, 0xAC, 0xE5, 0xA5, 0x05, + 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, + 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9D, 0x05, + 0xA5, 0x05, 0x9D, 0x05, 0x9C, 0xE5, 0xA5, 0x05, 0x9D, 0x05, 0xA5, 0x05, 0x9C, 0xE5, 0x94, 0x84, + 0x5A, 0xE1, 0x4A, 0x60, 0x3A, 0x00, 0x32, 0x00, 0x32, 0x00, 0x31, 0xE0, 0x39, 0xE0, 0x42, 0x60, + 0x42, 0x40, 0x42, 0x40, 0x42, 0x60, 0x42, 0x80, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0xC0, + 0x8C, 0x82, 0x9C, 0xE5, 0xA5, 0x26, 0xAD, 0x26, 0xAD, 0x26, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x45, + 0xAD, 0x46, 0xA5, 0x26, 0x94, 0x85, 0x73, 0xC2, 0x63, 0x60, 0x5B, 0x40, 0x53, 0x20, 0x53, 0x20, + 0x5B, 0x40, 0x63, 0x60, 0x63, 0x60, 0x63, 0x60, 0x63, 0x80, 0x74, 0x00, 0x8C, 0xC2, 0xA5, 0x44, + 0x8B, 0xA5, 0x93, 0xA5, 0x9B, 0xE7, 0x9B, 0x86, 0x93, 0x86, 0x9B, 0x86, 0xA3, 0xA6, 0xAB, 0xC7, + 0xBC, 0x09, 0xCC, 0x8C, 0xCC, 0xAC, 0xC4, 0xAB, 0xBC, 0xAA, 0xAC, 0xA9, 0x94, 0x45, 0x7B, 0xC1, + 0x63, 0x60, 0x53, 0x00, 0x4A, 0xC1, 0x4A, 0xA0, 0x4A, 0xC0, 0x4A, 0xA0, 0x52, 0xC0, 0x5A, 0xE0, + 0x5B, 0x20, 0x63, 0x40, 0x6B, 0x80, 0x6B, 0xA0, 0x73, 0xA0, 0x73, 0xC0, 0x73, 0xC0, 0x73, 0xE0, + 0x6B, 0xE0, 0x6B, 0xC0, 0x6B, 0xA0, 0x6B, 0xC0, 0x73, 0xE0, 0x73, 0xE2, 0x74, 0x03, 0x7C, 0x23, + 0x7C, 0x45, 0x84, 0x45, 0x8C, 0x66, 0x94, 0x86, 0x9C, 0xA6, 0x9C, 0xA6, 0xA4, 0xC6, 0xA4, 0xC5, + 0xA4, 0xC5, 0xA4, 0xC5, 0xA4, 0xC5, 0xA4, 0xC5, 0xA4, 0xC5, 0xA4, 0xC5, 0xAC, 0xC5, 0xAC, 0xC5, + 0xAC, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, + 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0x9D, 0x05, 0xA4, 0xE5, + 0x9D, 0x05, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, + 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x04, 0x9C, 0xE5, 0x84, 0x03, + 0x52, 0xA0, 0x4A, 0x60, 0x42, 0x20, 0x3A, 0x00, 0x3A, 0x00, 0x31, 0xE0, 0x31, 0xE0, 0x42, 0x40, + 0x42, 0x80, 0x42, 0x40, 0x4A, 0x60, 0x4A, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x80, 0x63, 0x80, + 0x9C, 0xC4, 0xA4, 0xE4, 0xA5, 0x25, 0xA5, 0x25, 0xAD, 0x26, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, + 0xA5, 0x65, 0xAD, 0x46, 0x94, 0x65, 0x73, 0xC2, 0x63, 0x41, 0x5B, 0x20, 0x53, 0x20, 0x53, 0x00, + 0x53, 0x20, 0x63, 0x60, 0x6B, 0x80, 0x63, 0x80, 0x73, 0xC0, 0x8C, 0x81, 0x9D, 0x04, 0xA5, 0x25, + 0x9C, 0x46, 0x9C, 0x26, 0xA4, 0x27, 0x93, 0xC7, 0x8B, 0x45, 0x83, 0x04, 0x93, 0x45, 0xAB, 0xC8, + 0xC4, 0x09, 0xC4, 0x6B, 0xC4, 0x6B, 0xB4, 0x89, 0xAC, 0xA8, 0x9C, 0x87, 0x8C, 0x44, 0x7C, 0x02, + 0x6B, 0xA0, 0x5B, 0x20, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xC0, + 0x5A, 0xE0, 0x5B, 0x20, 0x63, 0x60, 0x6B, 0x80, 0x6B, 0xA0, 0x73, 0xC0, 0x74, 0x00, 0x7C, 0x20, + 0x74, 0x00, 0x6C, 0x00, 0x6B, 0xE0, 0x73, 0xE0, 0x74, 0x00, 0x7C, 0x22, 0x7C, 0x23, 0x84, 0x44, + 0x84, 0x65, 0x8C, 0x86, 0x94, 0xA6, 0x9C, 0xA6, 0x9C, 0xC6, 0xA4, 0xC6, 0xA4, 0xE6, 0xA4, 0xE6, + 0xA4, 0xC5, 0xA4, 0xC5, 0xA4, 0xC5, 0xA4, 0xC5, 0xA4, 0xC5, 0xAC, 0xC5, 0xAC, 0xC5, 0xAC, 0xC5, + 0xAC, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, + 0xAD, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, + 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, + 0x9C, 0xE5, 0x9D, 0x05, 0x9C, 0xE5, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x04, 0x9C, 0xC5, 0x7B, 0xA2, + 0x4A, 0x60, 0x4A, 0x60, 0x42, 0x20, 0x3A, 0x00, 0x32, 0x00, 0x31, 0xE0, 0x32, 0x00, 0x42, 0x40, + 0x42, 0x60, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0x80, 0x73, 0xE1, + 0x9C, 0xE4, 0xA5, 0x05, 0xA5, 0x25, 0xA5, 0x26, 0xA5, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, + 0xAD, 0x46, 0xA5, 0x26, 0x94, 0x84, 0x73, 0xA1, 0x5B, 0x40, 0x53, 0x20, 0x53, 0x20, 0x53, 0x20, + 0x5B, 0x40, 0x63, 0x60, 0x63, 0x80, 0x6B, 0xC0, 0x84, 0x41, 0x94, 0xE3, 0x9D, 0x25, 0xA5, 0x45, + 0xAC, 0xE8, 0xAC, 0xC8, 0xA4, 0x88, 0x9C, 0x07, 0x83, 0x45, 0x72, 0x82, 0x8A, 0xE4, 0xAB, 0xC8, + 0xBC, 0x29, 0xBC, 0x6A, 0xB4, 0x8A, 0xAC, 0xA8, 0x9C, 0xA6, 0x8C, 0x65, 0x84, 0x44, 0x7C, 0x22, + 0x73, 0xE0, 0x6B, 0x80, 0x5B, 0x00, 0x4A, 0xE0, 0x4A, 0xC0, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0xA0, + 0x52, 0xC0, 0x5B, 0x00, 0x63, 0x40, 0x6B, 0x60, 0x6B, 0x80, 0x73, 0xC0, 0x7C, 0x20, 0x84, 0x61, + 0x84, 0x62, 0x7C, 0x60, 0x7C, 0x40, 0x7C, 0x20, 0x7C, 0x41, 0x84, 0x62, 0x84, 0x63, 0x8C, 0x83, + 0x8C, 0x84, 0x94, 0xC5, 0x9C, 0xC5, 0x9C, 0xC5, 0xA4, 0xC5, 0xA4, 0xC5, 0xAC, 0xE5, 0xAC, 0xE5, + 0xAC, 0xE6, 0xAC, 0xE6, 0xAC, 0xC6, 0xAC, 0xC6, 0xAC, 0xC5, 0xAC, 0xC5, 0xAC, 0xE5, 0xAC, 0xE5, + 0xAC, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, + 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x05, 0xA5, 0x05, + 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9D, 0x05, 0x9D, 0x05, + 0x9C, 0xE5, 0x9D, 0x05, 0x9C, 0xE5, 0x9D, 0x05, 0x9D, 0x05, 0x9C, 0xE4, 0x94, 0xC5, 0x6B, 0x61, + 0x42, 0x40, 0x42, 0x60, 0x42, 0x40, 0x3A, 0x20, 0x32, 0x00, 0x32, 0x00, 0x3A, 0x00, 0x42, 0x40, + 0x42, 0x40, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0x80, 0x52, 0xA0, 0x7C, 0x21, + 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x25, 0xA5, 0x26, 0xA5, 0x26, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, + 0xAD, 0x46, 0xA5, 0x26, 0x8C, 0x84, 0x6B, 0xA0, 0x5B, 0x40, 0x53, 0x40, 0x53, 0x20, 0x53, 0x20, + 0x53, 0x20, 0x5B, 0x60, 0x6B, 0xC0, 0x7C, 0x40, 0x94, 0xE2, 0x9D, 0x44, 0xA5, 0x45, 0xA5, 0x45, + 0xB5, 0x29, 0xB5, 0x2A, 0xAC, 0xA9, 0x94, 0x27, 0x7B, 0x64, 0x6A, 0x81, 0x8A, 0xE3, 0xB3, 0xC7, + 0xBC, 0x28, 0xB4, 0x69, 0xAC, 0x89, 0x9C, 0xA7, 0x8C, 0x84, 0x84, 0x63, 0x84, 0x43, 0x84, 0x43, + 0x7C, 0x22, 0x73, 0xC0, 0x63, 0x40, 0x53, 0x00, 0x4A, 0xE0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xA0, + 0x52, 0xC0, 0x52, 0xE0, 0x5B, 0x20, 0x63, 0x40, 0x6B, 0x60, 0x73, 0xC0, 0x7C, 0x20, 0x8C, 0x81, + 0x8C, 0xC4, 0x8C, 0xA1, 0x84, 0x80, 0x84, 0x60, 0x84, 0x60, 0x8C, 0x81, 0x8C, 0xA1, 0x8C, 0xA1, + 0x94, 0xA2, 0x94, 0xC3, 0x9C, 0xE3, 0x9C, 0xE3, 0x9C, 0xC3, 0xA4, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, + 0xAC, 0xE6, 0xAC, 0xE6, 0xAC, 0xE6, 0xAC, 0xE5, 0xAC, 0xC5, 0xAC, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, + 0xAC, 0xE5, 0xAC, 0xE5, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, + 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x05, 0x9D, 0x05, + 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE4, 0x9C, 0xE4, + 0x9D, 0x05, 0x9D, 0x05, 0x94, 0xE4, 0x9D, 0x05, 0x9D, 0x04, 0x9D, 0x04, 0x94, 0xC5, 0x63, 0x41, + 0x42, 0x40, 0x42, 0x40, 0x42, 0x61, 0x3A, 0x20, 0x32, 0x00, 0x32, 0x00, 0x3A, 0x00, 0x42, 0x40, + 0x4A, 0x60, 0x42, 0x60, 0x42, 0x60, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0x80, 0x5B, 0x00, 0x84, 0x61, + 0x9D, 0x05, 0xA5, 0x05, 0xA5, 0x25, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x46, 0xA5, 0x46, 0xAD, 0x46, + 0xAD, 0x46, 0xA5, 0x26, 0x8C, 0x84, 0x63, 0x80, 0x53, 0x00, 0x53, 0x00, 0x53, 0x00, 0x5B, 0x20, + 0x63, 0x60, 0x6B, 0xC0, 0x7C, 0x41, 0x94, 0xE2, 0x9D, 0x24, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, + 0xB5, 0x08, 0xB5, 0x49, 0xAC, 0xE9, 0x94, 0x47, 0x7B, 0x63, 0x6A, 0xA1, 0x8B, 0x23, 0xB3, 0xC7, + 0xBC, 0x28, 0xBC, 0x89, 0xAC, 0x88, 0x94, 0x64, 0x84, 0x42, 0x84, 0x42, 0x84, 0x63, 0x8C, 0x43, + 0x84, 0x43, 0x7C, 0x01, 0x6B, 0xA0, 0x63, 0x20, 0x52, 0xE0, 0x4A, 0xC0, 0x4A, 0xC0, 0x52, 0xC0, + 0x52, 0xE0, 0x53, 0x00, 0x5B, 0x20, 0x5B, 0x20, 0x63, 0x40, 0x6B, 0xA0, 0x84, 0x21, 0x94, 0xA2, + 0x94, 0xC5, 0x8C, 0xA2, 0x8C, 0x80, 0x84, 0x60, 0x8C, 0x60, 0x8C, 0x80, 0x8C, 0x80, 0x8C, 0xA0, + 0x94, 0xC0, 0x94, 0xE0, 0x9C, 0xE1, 0x9C, 0xE1, 0x9C, 0xE3, 0xA5, 0x04, 0xAD, 0x06, 0xAC, 0xE7, + 0xAD, 0x07, 0xAC, 0xE6, 0xAC, 0xE6, 0xAC, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, + 0xAC, 0xE5, 0xAC, 0xE5, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, + 0xA5, 0x25, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x05, 0x9D, 0x05, 0x9D, 0x05, + 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x94, 0xE5, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xE4, + 0x94, 0xE5, 0x9D, 0x04, 0x94, 0xE4, 0x9D, 0x05, 0x94, 0xE4, 0x94, 0xE4, 0x8C, 0xA5, 0x63, 0x21, + 0x42, 0x40, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x00, 0x3A, 0x20, 0x42, 0x60, + 0x4A, 0x80, 0x4A, 0x60, 0x42, 0x60, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0xA0, 0x73, 0xC1, 0x94, 0xC3, + 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, + 0xAD, 0x46, 0xA5, 0x26, 0x8C, 0x63, 0x63, 0x60, 0x53, 0x00, 0x5B, 0x40, 0x63, 0x60, 0x6B, 0xC0, + 0x84, 0x41, 0x8C, 0xA2, 0x95, 0x03, 0x9D, 0x45, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, + 0xA4, 0xE6, 0xB5, 0x28, 0xA4, 0xE7, 0x8C, 0x45, 0x7B, 0x63, 0x72, 0xC1, 0x93, 0x45, 0xB3, 0xC8, + 0xBC, 0x28, 0xBC, 0x69, 0xB4, 0x87, 0x94, 0x23, 0x84, 0x21, 0x84, 0x62, 0x84, 0x63, 0x84, 0x63, + 0x84, 0x64, 0x84, 0x43, 0x7B, 0xC1, 0x6B, 0x60, 0x5B, 0x00, 0x52, 0xE0, 0x52, 0xC0, 0x52, 0xE0, + 0x52, 0xE0, 0x53, 0x00, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x20, 0x6B, 0x60, 0x7C, 0x01, 0x94, 0x82, + 0x94, 0xC3, 0x8C, 0xA1, 0x8C, 0x60, 0x84, 0x60, 0x84, 0x60, 0x84, 0x80, 0x8C, 0x80, 0x8C, 0x80, + 0x8C, 0xA0, 0x8C, 0xC0, 0x94, 0xC0, 0x94, 0xC0, 0x9C, 0xE2, 0xA5, 0x05, 0xAD, 0x27, 0xAD, 0x08, + 0xAD, 0x07, 0xAD, 0x07, 0xAC, 0xE6, 0xAC, 0xE5, 0xA4, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, + 0xAC, 0xE5, 0xAC, 0xE5, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x25, + 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, 0x9D, 0x25, 0x9D, 0x05, 0x9D, 0x05, + 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xE4, + 0x94, 0xE5, 0x95, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x94, 0xE4, 0x94, 0xE4, 0x84, 0x64, 0x5A, 0xE1, + 0x42, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x60, + 0x4A, 0x60, 0x4A, 0x81, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0xA0, 0x5B, 0x00, 0x8C, 0x62, 0xA5, 0x05, + 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, + 0xAD, 0x46, 0x9D, 0x05, 0x84, 0x22, 0x63, 0x60, 0x6B, 0xA0, 0x74, 0x21, 0x7C, 0x61, 0x8C, 0xC2, + 0x9D, 0x04, 0x9D, 0x24, 0xA5, 0x45, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x47, 0xA5, 0x46, 0xA5, 0x46, + 0x9C, 0xC5, 0xA4, 0xE6, 0x9C, 0xC6, 0x8C, 0x25, 0x7B, 0x83, 0x73, 0x02, 0x93, 0x45, 0xAB, 0xA7, + 0xB3, 0xC7, 0xB4, 0x27, 0xAC, 0x45, 0x94, 0x22, 0x8C, 0x21, 0x8C, 0x62, 0x8C, 0x63, 0x8C, 0x63, + 0x8C, 0x84, 0x8C, 0x44, 0x84, 0x03, 0x73, 0xA1, 0x63, 0x40, 0x52, 0xE0, 0x4A, 0xE0, 0x52, 0xC0, + 0x52, 0xE0, 0x53, 0x00, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x00, 0x63, 0x40, 0x73, 0xC0, 0x8C, 0x60, + 0x8C, 0xA0, 0x8C, 0x80, 0x84, 0x40, 0x84, 0x40, 0x7C, 0x40, 0x84, 0x60, 0x84, 0x60, 0x84, 0x80, + 0x84, 0x60, 0x84, 0x80, 0x84, 0x80, 0x8C, 0xA0, 0x94, 0xC1, 0x9D, 0x04, 0xA5, 0x06, 0xAD, 0x27, + 0xAD, 0x27, 0xAD, 0x07, 0xAC, 0xE6, 0xA4, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, + 0xAC, 0xE5, 0xAC, 0xE5, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xA5, 0x25, 0xA5, 0x25, + 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, + 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x04, 0x9D, 0x04, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xE4, + 0x94, 0xE5, 0x94, 0xE4, 0x9D, 0x05, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xC4, 0x7C, 0x03, 0x52, 0xA0, + 0x42, 0x60, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x40, + 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0xA0, 0x5B, 0x20, 0x73, 0xC1, 0x94, 0xC2, 0xA4, 0xE5, + 0x9C, 0xE5, 0x9D, 0x05, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x46, 0xA5, 0x46, + 0xA5, 0x46, 0x9C, 0xE5, 0x7C, 0x02, 0x73, 0xC0, 0x84, 0x82, 0x95, 0x04, 0x9D, 0x24, 0x9D, 0x44, + 0xA5, 0x45, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x66, 0xA5, 0x67, 0xA5, 0x67, + 0x9C, 0xA6, 0x94, 0x86, 0x94, 0x66, 0x84, 0x24, 0x7B, 0xA3, 0x7B, 0x42, 0x93, 0x65, 0xA3, 0x66, + 0xA3, 0xA6, 0xA3, 0xC6, 0xA4, 0x04, 0x94, 0x01, 0x8C, 0x00, 0x8C, 0x22, 0x8C, 0x43, 0x94, 0x64, + 0x8C, 0x84, 0x94, 0x65, 0x94, 0x45, 0x84, 0x02, 0x6B, 0x80, 0x53, 0x20, 0x4A, 0xE0, 0x4A, 0xC0, + 0x52, 0xE0, 0x52, 0xE0, 0x53, 0x00, 0x53, 0x00, 0x5B, 0x00, 0x5B, 0x20, 0x73, 0xC0, 0x84, 0x40, + 0x8C, 0x60, 0x84, 0x40, 0x7C, 0x20, 0x7C, 0x20, 0x74, 0x20, 0x74, 0x40, 0x74, 0x40, 0x7C, 0x60, + 0x7C, 0x40, 0x7C, 0x40, 0x7C, 0x40, 0x84, 0x60, 0x8C, 0xA1, 0x9C, 0xC3, 0xA5, 0x05, 0xA5, 0x07, + 0xAD, 0x28, 0xAD, 0x07, 0xAC, 0xE6, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, + 0xAC, 0xE5, 0xAC, 0xE5, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, + 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, + 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x04, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xE4, + 0x94, 0xE5, 0x94, 0xE4, 0x9D, 0x04, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xC4, 0x73, 0xE3, 0x4A, 0x80, + 0x42, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x42, 0x60, + 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0x80, 0x52, 0xC0, 0x6B, 0xA0, 0x8C, 0xA3, 0x9D, 0x03, 0x9C, 0xE4, + 0xA5, 0x05, 0x9D, 0x05, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x46, + 0x9D, 0x46, 0x9D, 0x06, 0x84, 0x43, 0x84, 0x42, 0x9D, 0x04, 0xA5, 0x66, 0xA5, 0x47, 0xA5, 0x27, + 0xA5, 0x46, 0xA5, 0x47, 0xA5, 0x47, 0xA5, 0x66, 0xA5, 0x66, 0xA5, 0x65, 0xA5, 0x46, 0xA5, 0x47, + 0x9C, 0x27, 0x94, 0x47, 0x94, 0x65, 0x84, 0x44, 0x84, 0x03, 0x83, 0xC3, 0x8B, 0x84, 0x93, 0x85, + 0x93, 0x64, 0x93, 0x83, 0x93, 0xA1, 0x93, 0xE0, 0x94, 0x20, 0x8C, 0x21, 0x8C, 0x22, 0x94, 0x44, + 0x94, 0x44, 0x9C, 0x66, 0x9C, 0x66, 0x94, 0x24, 0x7B, 0xC1, 0x63, 0x40, 0x52, 0xE0, 0x4A, 0xC0, + 0x4A, 0xC0, 0x4A, 0xC0, 0x52, 0xE0, 0x5A, 0xE0, 0x5A, 0xE0, 0x5B, 0x20, 0x73, 0xA0, 0x84, 0x20, + 0x84, 0x60, 0x7C, 0x20, 0x7C, 0x20, 0x74, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x74, 0x20, + 0x6C, 0x20, 0x74, 0x20, 0x74, 0x20, 0x74, 0x20, 0x84, 0x60, 0x8C, 0xA2, 0x9C, 0xC4, 0xA4, 0xE6, + 0xAD, 0x08, 0xAD, 0x07, 0xAD, 0x05, 0xA4, 0xE4, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, + 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, + 0xA5, 0x25, 0xA5, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, + 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x04, 0x9D, 0x05, 0x94, 0xE5, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xE4, + 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xE4, 0x8C, 0xA4, 0x6B, 0x82, 0x4A, 0x80, + 0x3A, 0x40, 0x42, 0x40, 0x3A, 0x00, 0x3A, 0x40, 0x42, 0x60, 0x42, 0x60, 0x42, 0x40, 0x42, 0x60, + 0x4A, 0x80, 0x4A, 0xA0, 0x52, 0xA0, 0x5A, 0xE0, 0x7C, 0x02, 0x94, 0xE3, 0x94, 0xE3, 0x9D, 0x05, + 0x9D, 0x05, 0x9D, 0x05, 0xA5, 0x05, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, + 0xA5, 0x46, 0x9D, 0x05, 0x94, 0xC4, 0x94, 0xC4, 0x9D, 0x05, 0xA5, 0x46, 0xA5, 0x66, 0xA5, 0x46, + 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, + 0x93, 0xE7, 0x94, 0x27, 0x94, 0x66, 0x8C, 0x85, 0x8C, 0x64, 0x8C, 0x23, 0x8B, 0xC3, 0x83, 0xA3, + 0x83, 0x62, 0x83, 0x62, 0x8B, 0x80, 0x8B, 0xC0, 0x94, 0x20, 0x94, 0x41, 0x94, 0x42, 0x94, 0x44, + 0x9C, 0x44, 0x9C, 0x45, 0x9C, 0x66, 0x9C, 0x25, 0x8B, 0xE2, 0x73, 0x80, 0x5B, 0x00, 0x4A, 0xC0, + 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xC0, 0x52, 0xC0, 0x52, 0xE0, 0x5B, 0x20, 0x73, 0xC0, 0x7C, 0x20, + 0x7C, 0x40, 0x74, 0x00, 0x6B, 0xE0, 0x6B, 0xC0, 0x63, 0xC0, 0x6B, 0xE0, 0x6B, 0xE0, 0x6C, 0x00, + 0x6C, 0x00, 0x6C, 0x00, 0x6B, 0xE0, 0x6C, 0x00, 0x74, 0x20, 0x84, 0x41, 0x94, 0x82, 0x9C, 0xC4, + 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE6, 0xAC, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE4, 0xA4, 0xE5, + 0xA4, 0xE4, 0xA4, 0xE4, 0xA4, 0xE4, 0xA5, 0x04, 0xA5, 0x05, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x05, + 0xA5, 0x25, 0xA5, 0x25, 0x9D, 0x25, 0x9D, 0x24, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, + 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x04, 0x9D, 0x04, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE4, 0x94, 0xE4, + 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xE5, 0x94, 0xE4, 0x94, 0xE4, 0x84, 0x84, 0x63, 0x41, 0x4A, 0x60, + 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x42, 0x40, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x80, + 0x4A, 0x80, 0x4A, 0xA0, 0x63, 0x40, 0x7C, 0x02, 0x94, 0xA3, 0x9C, 0xE4, 0x9C, 0xE4, 0x9D, 0x06, + 0x9D, 0x05, 0xA5, 0x05, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, + 0xA5, 0x46, 0x9D, 0x26, 0x9D, 0x06, 0x9D, 0x26, 0x9D, 0x26, 0xA5, 0x46, 0xA5, 0x46, 0x9D, 0x46, + 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, + 0x94, 0x06, 0x94, 0x46, 0x94, 0x86, 0x94, 0xA5, 0x94, 0xA5, 0x8C, 0x84, 0x84, 0x23, 0x83, 0xE2, + 0x7B, 0x81, 0x7B, 0x60, 0x7B, 0x60, 0x83, 0xA0, 0x8C, 0x00, 0x94, 0x41, 0x9C, 0x62, 0x94, 0x43, + 0x9C, 0x45, 0xA4, 0x45, 0xA4, 0x45, 0xA4, 0x26, 0x94, 0x04, 0x7B, 0xA1, 0x63, 0x20, 0x52, 0xC0, + 0x4A, 0xC0, 0x4A, 0xA0, 0x4A, 0xC0, 0x52, 0xC0, 0x52, 0xE0, 0x5B, 0x20, 0x6B, 0xA0, 0x7B, 0xE0, + 0x74, 0x00, 0x6B, 0xC0, 0x63, 0x80, 0x5B, 0x60, 0x5B, 0x60, 0x5B, 0x80, 0x63, 0xA0, 0x6B, 0xE0, + 0x6B, 0xE0, 0x6B, 0xE0, 0x6B, 0xE0, 0x6B, 0xC0, 0x6B, 0xE0, 0x74, 0x00, 0x84, 0x40, 0x8C, 0x81, + 0x9C, 0xA2, 0x9C, 0xC3, 0xA4, 0xE5, 0xA4, 0xE6, 0xA4, 0xE5, 0xA5, 0x05, 0xA4, 0xE4, 0xA4, 0xE4, + 0xA4, 0xE4, 0xA4, 0xE4, 0xA4, 0xE4, 0xA5, 0x04, 0xA5, 0x04, 0xA5, 0x04, 0x9D, 0x04, 0x9D, 0x04, + 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, + 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x04, 0x9D, 0x05, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, + 0x94, 0xE4, 0x94, 0xE4, 0x9D, 0x04, 0x94, 0xE4, 0x94, 0xE5, 0x7C, 0x23, 0x52, 0xE0, 0x42, 0x40, + 0x42, 0x40, 0x3A, 0x40, 0x42, 0x40, 0x42, 0x40, 0x3A, 0x20, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0xA0, + 0x52, 0x80, 0x5B, 0x00, 0x84, 0x21, 0x9C, 0xE3, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x06, 0xA5, 0x06, + 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, + 0x9D, 0x26, 0x9D, 0x26, 0xA5, 0x47, 0xA5, 0x47, 0x9D, 0x27, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, + 0x9D, 0x46, 0x9D, 0x46, 0x9D, 0x46, 0x9D, 0x46, 0x9D, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x47, + 0x94, 0x45, 0x94, 0x85, 0x94, 0xA5, 0x94, 0xC5, 0x94, 0xC5, 0x94, 0xC5, 0x8C, 0x84, 0x84, 0x43, + 0x7B, 0xE2, 0x7B, 0xA0, 0x7B, 0x80, 0x83, 0xA0, 0x8B, 0xE0, 0x94, 0x41, 0x9C, 0x63, 0x9C, 0x43, + 0xA4, 0x46, 0xA4, 0x45, 0xAC, 0x45, 0xA4, 0x26, 0x9C, 0x04, 0x83, 0xC1, 0x6B, 0x40, 0x5B, 0x00, + 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x52, 0xC0, 0x52, 0xE0, 0x5B, 0x20, 0x6B, 0x80, 0x6B, 0xC0, + 0x6B, 0xC0, 0x5B, 0x60, 0x53, 0x20, 0x4B, 0x00, 0x4A, 0xE0, 0x53, 0x00, 0x53, 0x40, 0x5B, 0x80, + 0x63, 0xC0, 0x6B, 0xE0, 0x6C, 0x00, 0x6B, 0xE0, 0x6B, 0xE0, 0x6B, 0xE0, 0x74, 0x00, 0x84, 0x40, + 0x8C, 0x80, 0x94, 0xC2, 0x9C, 0xE4, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA4, 0xE5, 0xA4, 0xE5, + 0xA4, 0xE4, 0x9C, 0xE4, 0x9C, 0xE4, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, + 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, + 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, + 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xC5, 0x73, 0xE3, 0x4A, 0x80, 0x42, 0x60, + 0x42, 0x40, 0x3A, 0x20, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0xA0, 0x52, 0xC0, + 0x63, 0x40, 0x73, 0xC0, 0x94, 0xC3, 0x9D, 0x04, 0x9C, 0xE5, 0xA5, 0x06, 0xA5, 0x25, 0xA5, 0x05, + 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x46, 0xA5, 0x27, 0xA5, 0x27, 0xA5, 0x26, 0xA5, 0x26, + 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x27, 0x9D, 0x27, 0x9D, 0x26, 0x9D, 0x26, + 0x9D, 0x46, 0x9D, 0x46, 0x9D, 0x46, 0x9D, 0x26, 0x9D, 0x46, 0x9D, 0x46, 0xA5, 0x47, 0xA5, 0x47, + 0x94, 0xC4, 0x94, 0xC5, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xC5, 0x8C, 0xA4, + 0x84, 0x43, 0x83, 0xE2, 0x7B, 0xA1, 0x7B, 0xA0, 0x83, 0xC0, 0x8C, 0x02, 0x9C, 0x63, 0x9C, 0x64, + 0xAC, 0x46, 0xAC, 0x46, 0xAC, 0x46, 0xA4, 0x26, 0x9C, 0x05, 0x83, 0xE1, 0x73, 0x80, 0x63, 0x20, + 0x52, 0xE0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x52, 0xE0, 0x5B, 0x20, 0x63, 0x60, 0x63, 0x80, + 0x5B, 0x60, 0x52, 0xE0, 0x42, 0xA0, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x60, 0x4A, 0xC0, 0x53, 0x20, + 0x5B, 0x60, 0x63, 0xC0, 0x6B, 0xE0, 0x6C, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7C, 0x20, + 0x84, 0x60, 0x8C, 0x80, 0x94, 0xC1, 0x9C, 0xE3, 0xA4, 0xE4, 0xA5, 0x05, 0xA4, 0xE6, 0x9C, 0xE5, + 0xA5, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, + 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x95, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, + 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, + 0x94, 0xE4, 0x9C, 0xE4, 0x9C, 0xE4, 0x94, 0xE5, 0x8C, 0xA5, 0x6B, 0xA2, 0x42, 0x60, 0x42, 0x40, + 0x42, 0x40, 0x42, 0x40, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x52, 0xA0, 0x4A, 0xA0, 0x5B, 0x20, + 0x84, 0x62, 0x94, 0xA3, 0x9D, 0x04, 0xA5, 0x25, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x25, + 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x27, 0xA5, 0x27, 0xA5, 0x27, 0xA5, 0x27, 0xA5, 0x47, + 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, + 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x46, 0x9D, 0x47, 0xA5, 0x47, + 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE4, + 0x8C, 0x84, 0x84, 0x23, 0x7B, 0xE2, 0x7B, 0xA1, 0x7B, 0xA1, 0x83, 0xC2, 0x94, 0x04, 0xA4, 0x46, + 0xAC, 0x47, 0xAC, 0x46, 0xAC, 0x46, 0xA4, 0x46, 0x9C, 0x45, 0x8C, 0x22, 0x7B, 0xC0, 0x63, 0x40, + 0x52, 0xE0, 0x4A, 0xC0, 0x4A, 0xA0, 0x4A, 0xC0, 0x52, 0xE0, 0x5B, 0x20, 0x5B, 0x40, 0x63, 0x40, + 0x53, 0x00, 0x42, 0xA0, 0x3A, 0x40, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xE0, 0x3A, 0x40, 0x4A, 0xC0, + 0x53, 0x20, 0x63, 0x80, 0x6B, 0xE0, 0x74, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x74, 0x20, + 0x7C, 0x40, 0x84, 0x60, 0x8C, 0xA0, 0x94, 0xC1, 0x9C, 0xE3, 0x9C, 0xE4, 0xA5, 0x05, 0x9C, 0xE5, + 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9C, 0xE4, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, + 0x9D, 0x04, 0x9D, 0x04, 0x95, 0x04, 0x95, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, + 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, + 0x9D, 0x05, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, 0x8C, 0x85, 0x63, 0x62, 0x42, 0x60, 0x42, 0x40, + 0x4A, 0x60, 0x4A, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x80, 0x52, 0xA0, 0x5B, 0x00, 0x73, 0xC1, + 0x94, 0xE3, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x05, 0xA5, 0x26, + 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x27, 0xA5, 0x27, 0xA5, 0x27, 0xA5, 0x27, 0xA5, 0x27, + 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x06, 0x9D, 0x06, 0x9D, 0x26, + 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0xA5, 0x47, + 0x94, 0xE6, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, + 0x94, 0xC4, 0x8C, 0x84, 0x84, 0x02, 0x7B, 0xC2, 0x7B, 0x82, 0x83, 0x62, 0x93, 0xA4, 0xA3, 0xE6, + 0xAC, 0x27, 0xAC, 0x47, 0xAC, 0x66, 0xA4, 0x66, 0x9C, 0x85, 0x94, 0x63, 0x84, 0x21, 0x73, 0xA0, + 0x5B, 0x20, 0x52, 0xE0, 0x4A, 0xC0, 0x4A, 0xC0, 0x53, 0x00, 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x40, + 0x4A, 0xE0, 0x3A, 0x60, 0x32, 0x00, 0x21, 0xC0, 0x21, 0x80, 0x21, 0x80, 0x29, 0xC0, 0x3A, 0x40, + 0x4A, 0xE0, 0x5B, 0x40, 0x6B, 0xA0, 0x73, 0xE0, 0x74, 0x20, 0x74, 0x20, 0x74, 0x20, 0x74, 0x20, + 0x74, 0x20, 0x7C, 0x40, 0x84, 0x60, 0x8C, 0xA0, 0x94, 0xC0, 0x9C, 0xE2, 0x9C, 0xE3, 0x9C, 0xE4, + 0x9C, 0xE4, 0x9C, 0xE4, 0x9C, 0xE4, 0x9D, 0x04, 0x9C, 0xE4, 0x95, 0x04, 0x9D, 0x04, 0x9D, 0x04, + 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x95, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, + 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, + 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9C, 0xE5, 0x84, 0x44, 0x5B, 0x01, 0x42, 0x60, 0x42, 0x40, + 0x4A, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x52, 0xA0, 0x52, 0xC0, 0x63, 0x60, 0x7C, 0x01, 0x94, 0xC3, + 0x9C, 0xE4, 0xA5, 0x25, 0xA5, 0x25, 0x9D, 0x05, 0xA5, 0x25, 0xA5, 0x45, 0xA5, 0x26, 0xA5, 0x26, + 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xAD, 0x47, 0xAD, 0x47, 0xA5, 0x27, 0xA5, 0x27, 0xA5, 0x27, + 0xA5, 0x27, 0xA5, 0x27, 0x9D, 0x27, 0x9D, 0x27, 0x9D, 0x06, 0x9D, 0x06, 0x9D, 0x06, 0x9D, 0x06, + 0x9D, 0x06, 0x9D, 0x06, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, + 0x9C, 0xE6, 0x9C, 0xE5, 0x94, 0xE5, 0x94, 0xE5, 0x95, 0x05, 0x94, 0xE5, 0x95, 0x05, 0x9D, 0x06, + 0x95, 0x04, 0x94, 0xC4, 0x84, 0x43, 0x83, 0xE2, 0x7B, 0xA2, 0x7B, 0x42, 0x8B, 0x44, 0xA3, 0x87, + 0xA4, 0x06, 0xAC, 0x47, 0xAC, 0x87, 0xA4, 0x86, 0x9C, 0xA4, 0x94, 0x83, 0x8C, 0x62, 0x84, 0x00, + 0x63, 0x80, 0x53, 0x00, 0x4A, 0xC0, 0x52, 0xC0, 0x5B, 0x00, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x20, + 0x4A, 0xC0, 0x3A, 0x60, 0x32, 0x00, 0x21, 0xA0, 0x19, 0x60, 0x19, 0x40, 0x21, 0x80, 0x31, 0xE0, + 0x42, 0x80, 0x53, 0x00, 0x6B, 0x80, 0x73, 0xE0, 0x7C, 0x20, 0x7C, 0x40, 0x74, 0x40, 0x74, 0x40, + 0x74, 0x20, 0x7C, 0x40, 0x7C, 0x60, 0x84, 0x60, 0x8C, 0xA0, 0x94, 0xC0, 0x94, 0xE1, 0x9C, 0xE2, + 0x9C, 0xE4, 0x9C, 0xE4, 0x9C, 0xE4, 0x9C, 0xE4, 0x95, 0x04, 0x95, 0x04, 0x95, 0x04, 0x9D, 0x04, + 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x95, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, + 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, + 0x9D, 0x25, 0x9D, 0x25, 0x9C, 0xE5, 0x94, 0xC5, 0x7B, 0xE3, 0x52, 0xC0, 0x4A, 0x60, 0x42, 0x60, + 0x4A, 0x80, 0x4A, 0x80, 0x52, 0xA0, 0x5B, 0x00, 0x6B, 0x60, 0x84, 0x42, 0x94, 0xE4, 0x9D, 0x05, + 0x9D, 0x05, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, + 0xA5, 0x26, 0xA5, 0x26, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x27, 0xA5, 0x27, 0xA5, 0x27, + 0xA5, 0x27, 0xA5, 0x27, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x06, 0x9D, 0x06, + 0x9C, 0xE6, 0x9D, 0x06, 0x9D, 0x06, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x27, 0x9D, 0x27, + 0x94, 0xE5, 0x94, 0xE5, 0x9D, 0x05, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9C, 0xE5, + 0x9D, 0x05, 0x94, 0xE5, 0x94, 0xA4, 0x84, 0x02, 0x7B, 0x82, 0x83, 0x43, 0x8B, 0x24, 0x93, 0x66, + 0xA3, 0xE6, 0xAC, 0x47, 0xA4, 0xA6, 0x9C, 0xC5, 0x9C, 0xE5, 0x94, 0xC5, 0x94, 0xA3, 0x8C, 0x62, + 0x73, 0xC0, 0x63, 0x40, 0x53, 0x00, 0x52, 0xE0, 0x5B, 0x20, 0x63, 0x20, 0x63, 0x20, 0x53, 0x00, + 0x4A, 0xC0, 0x42, 0x60, 0x32, 0x00, 0x29, 0xC0, 0x21, 0x80, 0x19, 0x60, 0x19, 0x60, 0x21, 0x80, + 0x3A, 0x40, 0x4A, 0xC0, 0x63, 0x60, 0x73, 0xC0, 0x7C, 0x20, 0x7C, 0x40, 0x7C, 0x60, 0x7C, 0x40, + 0x7C, 0x40, 0x7C, 0x40, 0x7C, 0x40, 0x84, 0x60, 0x84, 0x80, 0x8C, 0x80, 0x8C, 0xA0, 0x94, 0xC0, + 0x94, 0xE2, 0x94, 0xE3, 0x9C, 0xE4, 0x9D, 0x04, 0x9D, 0x04, 0x95, 0x04, 0x95, 0x04, 0x95, 0x04, + 0x95, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, + 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, + 0x9D, 0x45, 0x9D, 0x05, 0x9D, 0x06, 0x9C, 0xC5, 0x6B, 0x81, 0x4A, 0x80, 0x4A, 0x61, 0x4A, 0xA0, + 0x4A, 0x80, 0x5A, 0xE0, 0x5B, 0x00, 0x7C, 0x22, 0x94, 0xC4, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x25, + 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x45, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xAD, 0x26, + 0xA5, 0x26, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x27, 0xAD, 0x27, 0xAD, 0x27, + 0xA5, 0x27, 0xA5, 0x27, 0x9D, 0x27, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9C, 0xE7, + 0x9D, 0x06, 0x9D, 0x06, 0x9D, 0x06, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x27, 0x9D, 0x27, + 0x94, 0xE5, 0x9C, 0xE5, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, + 0x9D, 0x05, 0x9D, 0x05, 0x94, 0xC4, 0x8C, 0x43, 0x7B, 0xA2, 0x7B, 0x42, 0x83, 0x03, 0x8B, 0x45, + 0x9B, 0xC6, 0xA4, 0x66, 0xA4, 0xC6, 0x9C, 0xE6, 0x9C, 0xE6, 0x9C, 0xE5, 0x94, 0xC4, 0x94, 0xA3, + 0x7C, 0x00, 0x6B, 0x80, 0x5B, 0x20, 0x53, 0x00, 0x63, 0x20, 0x63, 0x20, 0x63, 0x20, 0x5B, 0x00, + 0x4A, 0xC0, 0x42, 0x60, 0x32, 0x20, 0x29, 0xE0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, + 0x32, 0x20, 0x42, 0xA0, 0x5B, 0x40, 0x6B, 0xC0, 0x74, 0x00, 0x7C, 0x40, 0x84, 0x60, 0x7C, 0x60, + 0x7C, 0x60, 0x7C, 0x60, 0x7C, 0x60, 0x84, 0x60, 0x84, 0x80, 0x84, 0xA0, 0x8C, 0xA0, 0x8C, 0xC0, + 0x94, 0xC1, 0x94, 0xE2, 0x94, 0xE3, 0x94, 0xE4, 0x94, 0xE4, 0x95, 0x04, 0x95, 0x04, 0x95, 0x04, + 0x95, 0x03, 0x95, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, + 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, + 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x06, 0x8C, 0x84, 0x5B, 0x20, 0x4A, 0x60, 0x4A, 0x81, 0x52, 0xC0, + 0x63, 0x41, 0x7C, 0x03, 0x84, 0x63, 0x9C, 0xE5, 0x9D, 0x05, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, + 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xAD, 0x26, 0xAD, 0x26, + 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x27, 0xAD, 0x27, + 0xA5, 0x27, 0xA5, 0x27, 0xA5, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, + 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x27, 0x9D, 0x27, + 0x9C, 0xE7, 0x9D, 0x06, 0x9D, 0x06, 0x9D, 0x06, 0x9D, 0x06, 0x9D, 0x26, 0x9D, 0x25, 0x9D, 0x25, + 0x9D, 0x05, 0x9D, 0x05, 0x9C, 0xE5, 0x8C, 0x64, 0x7B, 0xC2, 0x7B, 0x42, 0x7B, 0x22, 0x83, 0x44, + 0x93, 0xE5, 0x9C, 0x66, 0xA4, 0xC6, 0x9D, 0x06, 0x9D, 0x06, 0x9D, 0x06, 0x9C, 0xE5, 0x94, 0xC4, + 0x8C, 0x81, 0x73, 0xE0, 0x63, 0x60, 0x63, 0x40, 0x63, 0x40, 0x63, 0x40, 0x63, 0x20, 0x5B, 0x20, + 0x52, 0xE0, 0x42, 0xA0, 0x3A, 0x40, 0x32, 0x20, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, + 0x32, 0x00, 0x42, 0x80, 0x53, 0x00, 0x6B, 0x80, 0x74, 0x00, 0x84, 0x40, 0x84, 0x80, 0x84, 0x80, + 0x84, 0x80, 0x84, 0x80, 0x84, 0x60, 0x84, 0x60, 0x84, 0x80, 0x84, 0x80, 0x84, 0xA0, 0x84, 0xA0, + 0x8C, 0xA0, 0x94, 0xC0, 0x94, 0xE1, 0x94, 0xE3, 0x94, 0xE4, 0x94, 0xE5, 0x95, 0x04, 0x94, 0xE3, + 0x95, 0x04, 0x95, 0x04, 0x95, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x04, + 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x26, + 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x84, 0x44, 0x52, 0xC0, 0x4A, 0x60, 0x5A, 0xE0, 0x5B, 0x00, + 0x84, 0x42, 0x9C, 0xE5, 0xA5, 0x26, 0xA5, 0x46, 0x9D, 0x25, 0xA5, 0x45, 0x9D, 0x25, 0x9D, 0x25, + 0xA5, 0x25, 0xA5, 0x45, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xAD, 0x26, 0xAD, 0x26, 0xAD, 0x26, + 0xAD, 0x27, 0xAD, 0x27, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, + 0xAD, 0x27, 0xA5, 0x27, 0xA5, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, + 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x27, 0xA5, 0x27, 0xA5, 0x27, + 0x9C, 0xE8, 0x9D, 0x08, 0xA5, 0x28, 0xA5, 0x28, 0xA5, 0x48, 0xA5, 0x27, 0x9D, 0x26, 0x9D, 0x26, + 0x9D, 0x05, 0x9D, 0x05, 0x9C, 0xE4, 0x8C, 0x64, 0x83, 0xC2, 0x7B, 0x62, 0x7B, 0x42, 0x83, 0x84, + 0x94, 0x24, 0x9C, 0xA6, 0xA4, 0xE6, 0x9D, 0x06, 0x9D, 0x06, 0x9C, 0xE6, 0x9D, 0x05, 0x9C, 0xE5, + 0x94, 0xC3, 0x84, 0x42, 0x73, 0xE1, 0x73, 0xC2, 0x6B, 0x80, 0x63, 0x20, 0x5B, 0x00, 0x5B, 0x00, + 0x52, 0xE0, 0x4A, 0xC0, 0x42, 0x80, 0x3A, 0x40, 0x32, 0x20, 0x32, 0x00, 0x32, 0x20, 0x32, 0x20, + 0x32, 0x20, 0x42, 0x80, 0x52, 0xE0, 0x63, 0x80, 0x73, 0xE0, 0x7C, 0x40, 0x84, 0x80, 0x8C, 0x80, + 0x8C, 0x80, 0x8C, 0x80, 0x84, 0x80, 0x84, 0x60, 0x84, 0x60, 0x84, 0x60, 0x84, 0x80, 0x84, 0xA0, + 0x8C, 0xA0, 0x8C, 0xC0, 0x8C, 0xC0, 0x94, 0xC1, 0x94, 0xE3, 0x95, 0x04, 0x95, 0x04, 0x94, 0xE4, + 0x95, 0x04, 0x95, 0x04, 0x95, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, + 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, + 0xA5, 0x26, 0x9D, 0x26, 0x9D, 0x05, 0x73, 0xE2, 0x4A, 0x60, 0x52, 0xA0, 0x73, 0xC2, 0x8C, 0x64, + 0x9D, 0x05, 0xA5, 0x46, 0xA5, 0x25, 0xA5, 0x46, 0xA5, 0x26, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, + 0xA5, 0x26, 0xA5, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x26, 0xAD, 0x26, + 0xAD, 0x27, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, + 0xAD, 0x28, 0xA5, 0x28, 0xA5, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, + 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0xA5, 0x27, 0xA5, 0x27, 0xA5, 0x47, + 0xA5, 0x0A, 0xA5, 0x2A, 0xAD, 0x2A, 0xAD, 0x4A, 0xAD, 0x4A, 0xA5, 0x49, 0xA5, 0x48, 0xA5, 0x27, + 0xA5, 0x06, 0x9C, 0xE5, 0x9C, 0xA5, 0x8C, 0x44, 0x83, 0xE3, 0x7B, 0xA3, 0x7B, 0xA3, 0x8B, 0xE4, + 0x94, 0x65, 0x9C, 0xC6, 0xA5, 0x06, 0xA5, 0x26, 0xA5, 0x06, 0xA5, 0x06, 0xA5, 0x06, 0x9C, 0xE5, + 0x9D, 0x05, 0x94, 0xC5, 0x94, 0xE7, 0x94, 0x87, 0x84, 0x25, 0x6B, 0x81, 0x63, 0x40, 0x5B, 0x20, + 0x52, 0xE0, 0x52, 0xE0, 0x4A, 0xC0, 0x42, 0x80, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, + 0x3A, 0x60, 0x42, 0x80, 0x53, 0x00, 0x63, 0x60, 0x73, 0xE0, 0x7C, 0x40, 0x84, 0x80, 0x8C, 0xA0, + 0x8C, 0xA0, 0x8C, 0xA0, 0x8C, 0xA0, 0x8C, 0x80, 0x8C, 0x80, 0x84, 0x80, 0x84, 0x80, 0x84, 0x80, + 0x84, 0x80, 0x8C, 0xA0, 0x8C, 0xC0, 0x8C, 0xC0, 0x94, 0xE2, 0x94, 0xE4, 0x95, 0x05, 0x94, 0xE5, + 0x94, 0xE4, 0x95, 0x04, 0x95, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x04, + 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, + 0xA5, 0x25, 0xA5, 0x26, 0x9D, 0x04, 0x6B, 0x81, 0x4A, 0x80, 0x63, 0x40, 0x94, 0xA4, 0xAD, 0x47, + 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xAD, 0x67, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x45, 0xA5, 0x46, + 0xA5, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x26, 0xAD, 0x26, 0xAD, 0x27, + 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x48, + 0xAD, 0x28, 0xA5, 0x28, 0xA5, 0x27, 0xA5, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, + 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x27, 0xA5, 0x27, 0xA5, 0x27, 0xA5, 0x27, + 0xA5, 0x0B, 0xAD, 0x2C, 0xAD, 0x4C, 0xB5, 0x6D, 0xB5, 0x6C, 0xAD, 0x6B, 0xAD, 0x49, 0xA5, 0x28, + 0xA4, 0xE6, 0x9C, 0xC5, 0x9C, 0x85, 0x94, 0x64, 0x8C, 0x24, 0x83, 0xE3, 0x83, 0xE3, 0x8C, 0x24, + 0x9C, 0xA5, 0xA4, 0xE6, 0xA5, 0x06, 0xA5, 0x26, 0xA5, 0x06, 0xA5, 0x06, 0xA5, 0x06, 0xA5, 0x06, + 0x9D, 0x06, 0x9D, 0x07, 0xAD, 0x4B, 0xA5, 0x0C, 0x94, 0xAA, 0x73, 0xC3, 0x63, 0x60, 0x5B, 0x00, + 0x53, 0x00, 0x52, 0xE0, 0x4A, 0xC0, 0x4A, 0xA0, 0x42, 0x80, 0x3A, 0x80, 0x42, 0x80, 0x42, 0x80, + 0x42, 0xA0, 0x4A, 0xC0, 0x53, 0x00, 0x63, 0x60, 0x73, 0xE0, 0x7C, 0x40, 0x8C, 0x80, 0x8C, 0xA1, + 0x94, 0xA0, 0x94, 0xA0, 0x94, 0xA0, 0x8C, 0xA0, 0x8C, 0x80, 0x8C, 0x80, 0x84, 0x80, 0x84, 0x60, + 0x84, 0x80, 0x84, 0x80, 0x8C, 0xA0, 0x8C, 0xC0, 0x94, 0xE0, 0x95, 0x02, 0x9D, 0x04, 0x9D, 0x05, + 0x95, 0x04, 0x95, 0x04, 0x95, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, + 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x45, + 0x9D, 0x25, 0xA5, 0x46, 0x94, 0xC4, 0x63, 0x60, 0x63, 0x20, 0x84, 0x43, 0xA5, 0x25, 0xAD, 0x46, + 0xA5, 0x46, 0xA5, 0x47, 0xA5, 0x47, 0xAD, 0x67, 0xAD, 0x47, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x45, + 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x47, + 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x48, 0xAD, 0x48, + 0xAD, 0x28, 0xAD, 0x28, 0xA5, 0x27, 0xA5, 0x07, 0xA5, 0x07, 0xA5, 0x07, 0x9D, 0x07, 0x9D, 0x07, + 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0xA5, 0x27, 0xA5, 0x27, 0xAD, 0x27, 0xAD, 0x27, + 0xA4, 0xEC, 0xAD, 0x2C, 0xAD, 0x4D, 0xB5, 0x6E, 0xB5, 0x6D, 0xB5, 0x4C, 0xAD, 0x2A, 0xA5, 0x09, + 0xA4, 0xE6, 0x9C, 0xC6, 0x9C, 0xA5, 0x9C, 0x85, 0x94, 0x64, 0x8C, 0x44, 0x8C, 0x64, 0x94, 0xA4, + 0x9C, 0xC5, 0xA5, 0x06, 0xA5, 0x06, 0xA5, 0x06, 0xA5, 0x26, 0xA5, 0x06, 0xA5, 0x26, 0x9D, 0x26, + 0x9D, 0x06, 0xA5, 0x27, 0xAD, 0x6A, 0xAD, 0x4C, 0x9C, 0xE9, 0x7C, 0x23, 0x6B, 0xA0, 0x63, 0x40, + 0x5B, 0x00, 0x53, 0x00, 0x52, 0xE0, 0x4A, 0xC0, 0x4A, 0xC0, 0x42, 0xA0, 0x42, 0xC0, 0x42, 0xC0, + 0x4A, 0xE0, 0x4A, 0xE0, 0x53, 0x20, 0x63, 0x80, 0x73, 0xE0, 0x7C, 0x40, 0x8C, 0x81, 0x94, 0xC3, + 0x94, 0xC3, 0x94, 0xC2, 0x94, 0xA1, 0x94, 0xA0, 0x94, 0xA0, 0x8C, 0xA0, 0x8C, 0x80, 0x84, 0x80, + 0x84, 0x80, 0x84, 0x80, 0x8C, 0xA0, 0x8C, 0xC0, 0x94, 0xE0, 0x94, 0xE1, 0x95, 0x03, 0x9D, 0x05, + 0x9D, 0x05, 0x9D, 0x05, 0x95, 0x04, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, + 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x45, + 0xA5, 0x46, 0xA5, 0x26, 0x8C, 0x64, 0x6B, 0x40, 0x7B, 0xE1, 0x9D, 0x25, 0xAD, 0x67, 0xAD, 0x47, + 0xAD, 0x67, 0xAD, 0x47, 0xAD, 0x67, 0xAD, 0x47, 0xAD, 0x46, 0xAD, 0x67, 0xAD, 0x66, 0xA5, 0x46, + 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, + 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x48, 0xAD, 0x48, 0xAD, 0x48, 0xAD, 0x48, + 0xAD, 0x48, 0xAD, 0x28, 0xA5, 0x28, 0xA5, 0x28, 0xA5, 0x28, 0xA5, 0x27, 0x9D, 0x27, 0x9D, 0x07, + 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0xA5, 0x27, 0xA5, 0x27, 0xA5, 0x27, 0xAD, 0x28, 0xAD, 0x28, + 0xA4, 0xEB, 0xAD, 0x0C, 0xAD, 0x2D, 0xB5, 0x4E, 0xB5, 0x4E, 0xB5, 0x2C, 0xAD, 0x0A, 0xA4, 0xE9, + 0xA4, 0xE6, 0x9C, 0xC6, 0x9C, 0xA5, 0x9C, 0xA5, 0x9C, 0xA5, 0x9C, 0xA5, 0x94, 0xC4, 0x9D, 0x05, + 0xA5, 0x06, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0x9D, 0x26, 0x9D, 0x26, + 0x9D, 0x26, 0x9D, 0x26, 0xA5, 0x27, 0xA5, 0x28, 0x94, 0xC6, 0x84, 0x42, 0x73, 0xC0, 0x63, 0x60, + 0x5B, 0x20, 0x5B, 0x00, 0x53, 0x00, 0x53, 0x00, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, + 0x53, 0x00, 0x53, 0x00, 0x53, 0x20, 0x63, 0x80, 0x73, 0xE0, 0x84, 0x40, 0x8C, 0xA2, 0x9C, 0xE4, + 0x9C, 0xE5, 0x94, 0xE4, 0x94, 0xC2, 0x94, 0xC1, 0x94, 0xC0, 0x8C, 0xA0, 0x8C, 0xA0, 0x8C, 0x80, + 0x84, 0x80, 0x84, 0x80, 0x8C, 0xA0, 0x8C, 0xC0, 0x94, 0xE0, 0x94, 0xE0, 0x95, 0x02, 0x9D, 0x04, + 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, + 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x05, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x45, + 0x9D, 0x26, 0xA5, 0x26, 0x94, 0x85, 0x7B, 0xC2, 0x8C, 0x83, 0xA5, 0x66, 0xAD, 0x67, 0xAD, 0x47, + 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x67, 0xAD, 0x67, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, + 0xAD, 0x66, 0xAD, 0x46, 0xAD, 0x66, 0xAD, 0x66, 0xAD, 0x46, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, + 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x48, 0xAD, 0x48, 0xAD, 0x48, 0xAD, 0x48, + 0xAD, 0x48, 0xA5, 0x48, 0xA5, 0x28, 0xA5, 0x28, 0xA5, 0x28, 0xA5, 0x28, 0xA5, 0x27, 0x9D, 0x27, + 0x9D, 0x27, 0x9D, 0x07, 0x9D, 0x07, 0xA5, 0x27, 0xA5, 0x28, 0xAD, 0x28, 0xAD, 0x48, 0xAD, 0x48, +}; +// clang-format on diff --git a/keyboards/fpb/rp2040_tft/graphics/Apple-Orchard-128x160.qgf.h b/keyboards/fpb/rp2040_tft/graphics/Apple-Orchard-128x160.qgf.h new file mode 100644 index 000000000000..c468ae98d214 --- /dev/null +++ b/keyboards/fpb/rp2040_tft/graphics/Apple-Orchard-128x160.qgf.h @@ -0,0 +1,11 @@ +// Copyright 2024 QMK -- generated source code only, image retains original copyright +// SPDX-License-Identifier: GPL-2.0-or-later + +// This file was auto-generated by `qmk painter-convert-graphics -i Apple-Orchard-128x160.jpg -f rgb565` + +#pragma once + +#include + +extern const uint32_t gfx_Apple_Orchard_128x160_length; +extern const uint8_t gfx_Apple_Orchard_128x160[41008]; diff --git a/keyboards/fpb/rp2040_tft/graphics/qmklogo.qgf.c b/keyboards/fpb/rp2040_tft/graphics/qmklogo.qgf.c new file mode 100644 index 000000000000..6994be0b2f3a --- /dev/null +++ b/keyboards/fpb/rp2040_tft/graphics/qmklogo.qgf.c @@ -0,0 +1,682 @@ +// Copyright 2024 QMK -- generated source code only, image retains original copyright +// SPDX-License-Identifier: GPL-2.0-or-later + +// This file was auto-generated by `qmk painter-convert-graphics -i qmklogo.png -f rgb565` + +#include + +const uint32_t gfx_qmklogo_length = 10700; + +// clang-format off +const uint8_t gfx_qmklogo[10700] = { + 0x00, 0xFF, 0x12, 0x00, 0x00, 0x51, 0x47, 0x46, 0x01, 0xCC, 0x29, 0x00, 0x00, 0x33, 0xD6, 0xFF, + 0xFF, 0x80, 0x00, 0x80, 0x00, 0x01, 0x00, 0x01, 0xFE, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x02, 0xFD, 0x06, 0x00, 0x00, 0x08, 0x00, 0x01, 0xFF, 0xE8, 0x03, 0x05, 0xFA, 0x9C, 0x29, 0x00, + 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x38, 0xFF, 0x83, 0xF7, 0xBE, 0xF7, 0xBE, 0x02, 0xFF, 0x83, 0xF7, 0x9E, + 0xFF, 0xDF, 0x02, 0xFF, 0x81, 0xF7, 0x9E, 0x02, 0xFF, 0x83, 0xF7, 0xBE, 0xF7, 0xBE, 0x02, 0xFF, + 0x83, 0xF7, 0x9E, 0xFF, 0xDF, 0x7F, 0xFF, 0x67, 0xFF, 0x83, 0xCE, 0x79, 0xCE, 0x79, 0x02, 0xFF, + 0x87, 0xBD, 0xD7, 0xEF, 0x5D, 0xF7, 0x9E, 0xBD, 0xD7, 0x02, 0xFF, 0x83, 0xDE, 0xDB, 0xC6, 0x38, + 0x02, 0xFF, 0x83, 0xC6, 0x18, 0xDE, 0xFB, 0x7F, 0xFF, 0x65, 0xFF, 0x9D, 0xF7, 0xBE, 0xAD, 0x55, + 0xAD, 0x75, 0xF7, 0xBE, 0x8C, 0x71, 0xD6, 0x9A, 0xDE, 0xFB, 0x8C, 0x51, 0xF7, 0x9E, 0xBD, 0xD7, + 0x9C, 0xF3, 0xF7, 0xBE, 0x94, 0xB2, 0xC6, 0x18, 0xFF, 0xDF, 0x16, 0xFF, 0x89, 0xF7, 0x9E, 0xE7, + 0x1C, 0xDE, 0xFB, 0xE7, 0x3C, 0xF7, 0xBE, 0x06, 0xFF, 0x85, 0xF7, 0x9E, 0xE7, 0x3C, 0xF7, 0xBE, + 0x0A, 0xFF, 0x85, 0xF7, 0x9E, 0xE7, 0x3C, 0xFF, 0xDF, 0x03, 0xFF, 0x82, 0xDF, 0xE7, 0x3C, 0x06, + 0xFF, 0x83, 0xEF, 0x5D, 0xF7, 0x9E, 0x09, 0xFF, 0x8A, 0xDF, 0xE7, 0x3C, 0xE7, 0x3C, 0xE7, 0x3C, + 0xE7, 0x1C, 0xF7, 0xBE, 0x02, 0xFF, 0x83, 0xE7, 0x1C, 0xF7, 0x9E, 0x79, 0xFF, 0xA2, 0xDF, 0xDE, + 0xDB, 0xB5, 0xB6, 0x7B, 0xEF, 0x84, 0x10, 0xAD, 0x75, 0x6B, 0x6D, 0x9C, 0xD3, 0xA5, 0x14, 0x6B, + 0x6D, 0xAD, 0x55, 0x8C, 0x51, 0x7B, 0xCF, 0xAD, 0x75, 0x73, 0xAE, 0x8C, 0x71, 0xBD, 0xD7, 0xE7, + 0x1C, 0x12, 0xFF, 0x8D, 0xE7, 0x1C, 0xA5, 0x14, 0x84, 0x30, 0x84, 0x10, 0x8C, 0x51, 0xBD, 0xD7, + 0xF7, 0x9E, 0x04, 0xFF, 0x85, 0xBD, 0xF7, 0x7B, 0xCF, 0xB5, 0xB6, 0x0A, 0xFF, 0x85, 0xAD, 0x55, + 0x7B, 0xCF, 0xD6, 0xBA, 0x02, 0xFF, 0x85, 0xE7, 0x3C, 0x84, 0x30, 0xF7, 0x9E, 0x02, 0xFF, 0x85, + 0xEF, 0x5D, 0x8C, 0x71, 0xC6, 0x38, 0x08, 0xFF, 0x8B, 0xDE, 0xDB, 0x7B, 0xEF, 0x8C, 0x71, 0x8C, + 0x71, 0x8C, 0x51, 0xD6, 0x9A, 0x02, 0xFF, 0x83, 0x7B, 0xEF, 0xC6, 0x18, 0x78, 0xFF, 0xA5, 0xCE, + 0x79, 0x5A, 0xCB, 0x31, 0xA6, 0x31, 0x86, 0x31, 0xA6, 0x31, 0xA6, 0x31, 0x86, 0x31, 0xA6, 0x31, + 0xA6, 0x31, 0x86, 0x31, 0xA6, 0x31, 0xA6, 0x31, 0x86, 0x31, 0xA6, 0x31, 0x86, 0x31, 0x86, 0x31, + 0xA6, 0x6B, 0x4D, 0xE7, 0x1C, 0x0E, 0xFF, 0x8F, 0xEF, 0x7D, 0x73, 0x8E, 0x6B, 0x4D, 0xAD, 0x55, + 0xBD, 0xD7, 0x94, 0x92, 0x4A, 0x69, 0xAD, 0x55, 0x04, 0xFF, 0x87, 0x84, 0x30, 0x31, 0xA6, 0x52, + 0xAA, 0xEF, 0x7D, 0x06, 0xFF, 0x87, 0xE7, 0x1C, 0x52, 0x8A, 0x31, 0x86, 0xAD, 0x75, 0x02, 0xFF, + 0x8D, 0xD6, 0x9A, 0x39, 0xC7, 0xEF, 0x5D, 0xF7, 0xBE, 0x94, 0x92, 0x5A, 0xEB, 0xDE, 0xFB, 0x08, + 0xFF, 0x8B, 0xB5, 0x96, 0x39, 0xC7, 0xAD, 0x55, 0xAD, 0x55, 0xA5, 0x34, 0xDE, 0xDB, 0x02, 0xFF, + 0x83, 0xA5, 0x34, 0xD6, 0x9A, 0x03, 0xFF, 0x80, 0xDF, 0x03, 0xFF, 0x82, 0xDF, 0xF7, 0xBE, 0x05, + 0xFF, 0x80, 0xDF, 0x02, 0xFF, 0x83, 0xF7, 0x9E, 0xFF, 0xDF, 0x04, 0xFF, 0x83, 0xF7, 0xBE, 0xF7, + 0xBE, 0x05, 0xFF, 0x82, 0xDF, 0xFF, 0xDF, 0x07, 0xFF, 0x80, 0xDF, 0x07, 0xFF, 0x80, 0xDF, 0x05, + 0xFF, 0x84, 0xDF, 0xF7, 0x9E, 0xF7, 0xBE, 0x07, 0xFF, 0x80, 0xDF, 0x03, 0xFF, 0x82, 0xDF, 0xF7, + 0xBE, 0x05, 0xFF, 0x84, 0xDF, 0xF7, 0x9E, 0xF7, 0xBE, 0x20, 0xFF, 0xA5, 0x73, 0x8E, 0x29, 0x45, + 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, + 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x21, 0x24, + 0x94, 0xB2, 0x0E, 0xFF, 0x85, 0xA5, 0x34, 0x4A, 0x49, 0xE7, 0x3C, 0x06, 0xFF, 0x85, 0x9C, 0xF3, + 0x4A, 0x49, 0xEF, 0x7D, 0x02, 0xFF, 0x87, 0x84, 0x10, 0x6B, 0x6D, 0x5A, 0xEB, 0xB5, 0x96, 0x06, + 0xFF, 0x87, 0x9C, 0xD3, 0x73, 0xAE, 0x5A, 0xCB, 0xAD, 0x75, 0x02, 0xFF, 0x8B, 0xD6, 0xBA, 0x42, + 0x08, 0xEF, 0x5D, 0xB5, 0x96, 0x52, 0xAA, 0xD6, 0x9A, 0x0A, 0xFF, 0x83, 0xB5, 0x96, 0x52, 0x8A, + 0x0A, 0xFF, 0x83, 0xCE, 0x59, 0xEF, 0x5D, 0x02, 0xFF, 0x9D, 0xDE, 0xDB, 0xD6, 0x9A, 0xCE, 0x79, + 0xAD, 0x75, 0xF7, 0x9E, 0xE7, 0x1C, 0xCE, 0x79, 0xDE, 0xDB, 0xB5, 0x96, 0xBD, 0xF7, 0xEF, 0x5D, + 0xDE, 0xFB, 0xB5, 0xB6, 0xB5, 0xB6, 0xEF, 0x5D, 0x02, 0xFF, 0x83, 0xD6, 0xBA, 0xCE, 0x79, 0x04, + 0xFF, 0x83, 0xDE, 0xDB, 0xC6, 0x38, 0x04, 0xFF, 0x83, 0xEF, 0x7D, 0xC6, 0x18, 0x02, 0xFF, 0x89, + 0xE7, 0x1C, 0xC6, 0x18, 0xB5, 0x96, 0xBD, 0xD7, 0xE7, 0x3C, 0x04, 0xFF, 0x87, 0xCE, 0x59, 0xDE, + 0xFB, 0xBD, 0xF7, 0xBD, 0xF7, 0x02, 0xFF, 0x89, 0xF7, 0x9E, 0xCE, 0x59, 0xB5, 0xB6, 0xBD, 0xD7, + 0xE7, 0x1C, 0x18, 0xFF, 0xAF, 0xF7, 0xBE, 0xE7, 0x1C, 0xDE, 0xFB, 0x4A, 0x69, 0x29, 0x65, 0x31, + 0x86, 0x31, 0xA6, 0x42, 0x08, 0x39, 0xE7, 0x31, 0x86, 0x31, 0x86, 0x39, 0xC7, 0x42, 0x08, 0x31, + 0xA6, 0x31, 0x86, 0x31, 0x86, 0x42, 0x08, 0x39, 0xE7, 0x31, 0x86, 0x31, 0x86, 0x29, 0x65, 0x6B, + 0x4D, 0xE7, 0x1C, 0xE7, 0x1C, 0x0A, 0xFF, 0x83, 0x63, 0x2C, 0x84, 0x30, 0x08, 0xFF, 0x85, 0xE7, + 0x3C, 0x39, 0xC7, 0xCE, 0x79, 0x02, 0xFF, 0x89, 0x84, 0x10, 0x7B, 0xEF, 0x9C, 0xF3, 0x63, 0x2C, + 0xFF, 0xDF, 0x02, 0xFF, 0x89, 0xF7, 0x9E, 0x5A, 0xCB, 0xC6, 0x18, 0x5A, 0xCB, 0xAD, 0x75, 0x02, + 0xFF, 0x89, 0xD6, 0xBA, 0x42, 0x08, 0xB5, 0xB6, 0x5A, 0xCB, 0xBD, 0xF7, 0x0C, 0xFF, 0x8B, 0xB5, + 0xB6, 0x4A, 0x69, 0xEF, 0x5D, 0xEF, 0x5D, 0xEF, 0x5D, 0xFF, 0xDF, 0x02, 0xFF, 0x83, 0x5A, 0xCB, + 0xB5, 0xB6, 0x02, 0xFF, 0x9D, 0x9C, 0xD3, 0x5A, 0xEB, 0x73, 0xAE, 0x73, 0x8E, 0xE7, 0x1C, 0xAD, + 0x55, 0x5A, 0xCB, 0x84, 0x30, 0x84, 0x10, 0x52, 0xAA, 0x8C, 0x71, 0x84, 0x30, 0x84, 0x10, 0x5A, + 0xCB, 0x8C, 0x71, 0x02, 0xFF, 0x85, 0x9C, 0xF3, 0x63, 0x2C, 0xFF, 0xDF, 0x02, 0xFF, 0x85, 0x84, + 0x30, 0x4A, 0x49, 0xF7, 0x9E, 0x02, 0xFF, 0x83, 0xAD, 0x75, 0x63, 0x0C, 0x02, 0xFF, 0x8B, 0x9C, + 0xF3, 0x84, 0x10, 0x8C, 0x71, 0x6B, 0x4D, 0x7B, 0xEF, 0xFF, 0xDF, 0x02, 0xFF, 0x95, 0x6B, 0x4D, + 0x6B, 0x6D, 0x73, 0x8E, 0x84, 0x30, 0xFF, 0xDF, 0xA5, 0x34, 0x6B, 0x6D, 0x94, 0x92, 0x7B, 0xEF, + 0x73, 0x8E, 0xEF, 0x5D, 0x16, 0xFF, 0xB1, 0xE7, 0x3C, 0xA5, 0x34, 0xA5, 0x14, 0x42, 0x08, 0x31, + 0x86, 0x31, 0x86, 0x39, 0xC7, 0xA5, 0x34, 0x7B, 0xEF, 0x29, 0x65, 0x29, 0x65, 0x5A, 0xEB, 0xAD, + 0x75, 0x4A, 0x49, 0x31, 0x86, 0x31, 0x86, 0x94, 0xB2, 0x8C, 0x71, 0x31, 0x86, 0x31, 0x86, 0x29, + 0x65, 0x52, 0xAA, 0xA5, 0x34, 0xAD, 0x55, 0xF7, 0x9E, 0x08, 0xFF, 0x83, 0x52, 0x8A, 0x9C, 0xF3, + 0x08, 0xFF, 0x85, 0xF7, 0x9E, 0x42, 0x08, 0xBD, 0xF7, 0x02, 0xFF, 0x89, 0x84, 0x10, 0x7B, 0xCF, + 0xE7, 0x3C, 0x42, 0x28, 0xD6, 0xBA, 0x02, 0xFF, 0x89, 0xBD, 0xD7, 0x5A, 0xEB, 0xF7, 0xBE, 0x52, + 0xAA, 0xAD, 0x75, 0x02, 0xFF, 0x89, 0xD6, 0xBA, 0x42, 0x08, 0x5A, 0xCB, 0x73, 0x8E, 0xFF, 0xDF, + 0x0C, 0xFF, 0x8B, 0xB5, 0xB6, 0x39, 0xE7, 0x9C, 0xF3, 0x9C, 0xF3, 0x9C, 0xF3, 0xE7, 0x3C, 0x02, + 0xFF, 0x83, 0x52, 0xAA, 0xB5, 0x96, 0x02, 0xFF, 0x87, 0x9C, 0xD3, 0x39, 0xE7, 0xCE, 0x79, 0xFF, + 0xDF, 0x02, 0xFF, 0x85, 0xA5, 0x34, 0x39, 0xE7, 0xD6, 0x9A, 0x02, 0xFF, 0x85, 0x9C, 0xF3, 0x31, + 0xA6, 0xC6, 0x18, 0x02, 0xFF, 0x93, 0xBD, 0xD7, 0x42, 0x28, 0xF7, 0xBE, 0xDE, 0xDB, 0x42, 0x28, + 0xE7, 0x3C, 0xFF, 0xDF, 0x5A, 0xEB, 0x39, 0xE7, 0xCE, 0x59, 0x02, 0xFF, 0x83, 0x73, 0x8E, 0x94, + 0x92, 0x02, 0xFF, 0x8B, 0xDE, 0xFB, 0xF7, 0x9E, 0xEF, 0x7D, 0xC6, 0x38, 0x39, 0xE7, 0xEF, 0x5D, + 0x02, 0xFF, 0x95, 0x63, 0x0C, 0x5A, 0xEB, 0xE7, 0x3C, 0xFF, 0xDF, 0xE7, 0x3C, 0x4A, 0x49, 0xC6, + 0x18, 0xEF, 0x5D, 0xEF, 0x5D, 0x4A, 0x69, 0xAD, 0x75, 0x16, 0xFF, 0x97, 0xF7, 0xBE, 0xDE, 0xFB, + 0xD6, 0xBA, 0x4A, 0x49, 0x31, 0x86, 0x31, 0x86, 0x39, 0xE7, 0xF7, 0xBE, 0xB5, 0xB6, 0x29, 0x45, + 0x29, 0x45, 0x84, 0x10, 0x02, 0xFF, 0x97, 0x5A, 0xEB, 0x29, 0x65, 0x31, 0x86, 0xDE, 0xDB, 0xD6, + 0x9A, 0x29, 0x65, 0x31, 0x86, 0x29, 0x65, 0x63, 0x2C, 0xDE, 0xFB, 0xDE, 0xFB, 0xFF, 0xDF, 0x08, + 0xFF, 0x83, 0x52, 0xAA, 0x9C, 0xD3, 0x08, 0xFF, 0x85, 0xEF, 0x7D, 0x42, 0x08, 0xC6, 0x38, 0x02, + 0xFF, 0x83, 0x84, 0x10, 0x73, 0xAE, 0x02, 0xFF, 0x89, 0x6B, 0x6D, 0x8C, 0x71, 0xFF, 0xDF, 0x6B, + 0x6D, 0xA5, 0x14, 0x02, 0xFF, 0x83, 0x52, 0xAA, 0xAD, 0x75, 0x02, 0xFF, 0x89, 0xD6, 0xBA, 0x42, + 0x08, 0x9C, 0xD3, 0x52, 0xAA, 0xCE, 0x79, 0x0C, 0xFF, 0x8B, 0xB5, 0xB6, 0x39, 0xE7, 0x9C, 0xD3, + 0x9C, 0xD3, 0x9C, 0xD3, 0xE7, 0x3C, 0x02, 0xFF, 0x83, 0x52, 0xAA, 0xB5, 0x96, 0x02, 0xFF, 0x83, + 0x94, 0xB2, 0x6B, 0x4D, 0x06, 0xFF, 0x83, 0xA5, 0x14, 0x63, 0x0C, 0x04, 0xFF, 0x83, 0xC6, 0x18, + 0x4A, 0x69, 0x04, 0xFF, 0x99, 0xDE, 0xDB, 0x42, 0x08, 0xEF, 0x5D, 0xFF, 0xDF, 0x52, 0xAA, 0xB5, + 0xB6, 0xDE, 0xDB, 0x63, 0x2C, 0x7B, 0xCF, 0x94, 0x92, 0xF7, 0xBE, 0x4A, 0x69, 0xD6, 0x9A, 0x02, + 0xFF, 0x8B, 0xE7, 0x1C, 0xBD, 0xF7, 0xAD, 0x75, 0x9C, 0xF3, 0x42, 0x08, 0xE7, 0x1C, 0x02, 0xFF, + 0x83, 0x5A, 0xEB, 0xA5, 0x34, 0x04, 0xFF, 0x8D, 0xC6, 0x38, 0x39, 0xE7, 0xA5, 0x34, 0xA5, 0x34, + 0xAD, 0x55, 0x63, 0x0C, 0x9C, 0xF3, 0x16, 0xFF, 0x97, 0xF7, 0x9E, 0xD6, 0x9A, 0xCE, 0x59, 0x4A, + 0x49, 0x31, 0x86, 0x31, 0x86, 0x39, 0xE7, 0xEF, 0x7D, 0xB5, 0x96, 0x29, 0x45, 0x29, 0x45, 0x7B, + 0xEF, 0x02, 0xFF, 0x97, 0x5A, 0xEB, 0x29, 0x65, 0x31, 0x86, 0xD6, 0xBA, 0xCE, 0x79, 0x29, 0x65, + 0x31, 0x86, 0x29, 0x65, 0x63, 0x0C, 0xD6, 0x9A, 0xD6, 0x9A, 0xFF, 0xDF, 0x08, 0xFF, 0x85, 0x73, + 0x8E, 0x73, 0xAE, 0xFF, 0xDF, 0x06, 0xFF, 0x85, 0xCE, 0x59, 0x42, 0x08, 0xE7, 0x1C, 0x02, 0xFF, + 0x83, 0x84, 0x10, 0x73, 0xAE, 0x02, 0xFF, 0x89, 0xBD, 0xD7, 0x52, 0x8A, 0xC6, 0x18, 0x52, 0x8A, + 0xE7, 0x3C, 0x02, 0xFF, 0x83, 0x52, 0xAA, 0xAD, 0x75, 0x02, 0xFF, 0x8B, 0xD6, 0xBA, 0x42, 0x08, + 0xEF, 0x5D, 0x8C, 0x51, 0x63, 0x0C, 0xE7, 0x3C, 0x0A, 0xFF, 0x83, 0xB5, 0x96, 0x52, 0x8A, 0x0A, + 0xFF, 0x83, 0x52, 0xAA, 0xB5, 0x96, 0x02, 0xFF, 0x83, 0x94, 0xB2, 0x6B, 0x6D, 0x06, 0xFF, 0x83, + 0xA5, 0x14, 0x63, 0x0C, 0x04, 0xFF, 0x85, 0xC6, 0x18, 0x4A, 0x69, 0xFF, 0xDF, 0x02, 0xFF, 0x85, + 0xDE, 0xDB, 0x42, 0x28, 0xEF, 0x5D, 0x02, 0xFF, 0x9C, 0x8C, 0x71, 0x7B, 0xCF, 0xA5, 0x34, 0x8C, + 0x51, 0xC6, 0x18, 0x63, 0x0C, 0xC6, 0x18, 0x5A, 0xCB, 0xF7, 0xBE, 0xF7, 0xBE, 0x7B, 0xCF, 0x7B, + 0xCF, 0xA5, 0x14, 0x9C, 0xD3, 0x39, 0x02, 0xE7, 0x80, 0x3C, 0x02, 0xFF, 0x83, 0x5A, 0xEB, 0xAD, + 0x55, 0x04, 0xFF, 0x8D, 0xC6, 0x18, 0x39, 0xE7, 0xAD, 0x55, 0xAD, 0x75, 0xAD, 0x75, 0xB5, 0x96, + 0xDE, 0xFB, 0x16, 0xFF, 0x97, 0xEF, 0x5D, 0xAD, 0x75, 0xAD, 0x55, 0x42, 0x28, 0x31, 0x86, 0x31, + 0x86, 0x39, 0xE7, 0xEF, 0x7D, 0xB5, 0x96, 0x29, 0x45, 0x29, 0x45, 0x7B, 0xEF, 0x02, 0xFF, 0x97, + 0x5A, 0xEB, 0x29, 0x65, 0x31, 0x86, 0xD6, 0xBA, 0xCE, 0x79, 0x29, 0x65, 0x31, 0x86, 0x29, 0x65, + 0x5A, 0xCB, 0xB5, 0x96, 0xB5, 0x96, 0xF7, 0xBE, 0x08, 0xFF, 0x91, 0xB5, 0xB6, 0x4A, 0x49, 0xC6, + 0x18, 0xE7, 0x3C, 0xE7, 0x3C, 0xDE, 0xDB, 0x6B, 0x6D, 0x6B, 0x6D, 0xFF, 0xDF, 0x02, 0xFF, 0x83, + 0x84, 0x10, 0x73, 0xAE, 0x02, 0xFF, 0x87, 0xF7, 0x9E, 0x5A, 0xCB, 0x52, 0x8A, 0x8C, 0x51, 0x04, + 0xFF, 0x83, 0x52, 0xAA, 0xAD, 0x75, 0x02, 0xFF, 0x8A, 0xD6, 0xBA, 0x39, 0xE7, 0xEF, 0x7D, 0xF7, + 0x9E, 0x6B, 0x4D, 0x7B, 0x02, 0xEF, 0x80, 0x7D, 0x08, 0xFF, 0x83, 0xB5, 0x96, 0x4A, 0x69, 0x0A, + 0xFF, 0x83, 0x52, 0xAA, 0xB5, 0x96, 0x02, 0xFF, 0x83, 0x94, 0xB2, 0x6B, 0x6D, 0x06, 0xFF, 0x83, + 0xA5, 0x14, 0x63, 0x0C, 0x04, 0xFF, 0x85, 0xC6, 0x18, 0x4A, 0x69, 0xFF, 0xDF, 0x02, 0xFF, 0x85, + 0xDE, 0xDB, 0x42, 0x08, 0xEF, 0x5D, 0x02, 0xFF, 0x86, 0xCE, 0x79, 0x52, 0x8A, 0x63, 0x0C, 0xBD, + 0x02, 0xF7, 0x86, 0x9E, 0x5A, 0xCB, 0x63, 0x2C, 0x8C, 0x71, 0x02, 0xFF, 0x8D, 0xE7, 0x1C, 0x39, + 0xE7, 0xCE, 0x59, 0xEF, 0x7D, 0xCE, 0x59, 0x42, 0x08, 0xE7, 0x1C, 0x02, 0xFF, 0x83, 0x5A, 0xEB, + 0xAD, 0x55, 0x04, 0xFF, 0x8D, 0xE7, 0x1C, 0x4A, 0x69, 0xCE, 0x59, 0xEF, 0x5D, 0xEF, 0x5D, 0xDE, + 0xFB, 0xF7, 0xBE, 0x17, 0xFF, 0x96, 0xDF, 0xE7, 0x3C, 0xE7, 0x1C, 0x4A, 0x69, 0x31, 0x86, 0x31, + 0x86, 0x39, 0xE7, 0xEF, 0x7D, 0xB5, 0xB6, 0x29, 0x45, 0x29, 0x45, 0x7B, 0xEF, 0x02, 0xFF, 0x95, + 0x5A, 0xEB, 0x29, 0x65, 0x31, 0x86, 0xD6, 0xBA, 0xCE, 0x59, 0x29, 0x65, 0x31, 0x86, 0x29, 0x65, + 0x6B, 0x4D, 0xE7, 0x3C, 0xEF, 0x5D, 0x0A, 0xFF, 0x97, 0xF7, 0xBE, 0x8C, 0x51, 0x6B, 0x4D, 0x94, + 0xB2, 0x9C, 0xF3, 0x84, 0x10, 0x4A, 0x49, 0x8C, 0x51, 0xDE, 0xFB, 0xFF, 0xDF, 0x8C, 0x71, 0x84, + 0x10, 0x04, 0xFF, 0x85, 0x9C, 0xD3, 0x39, 0xE7, 0xD6, 0x9A, 0x04, 0xFF, 0x83, 0x63, 0x2C, 0xB5, + 0xB6, 0x02, 0xFF, 0x85, 0xDE, 0xDB, 0x52, 0x8A, 0xEF, 0x5D, 0x02, 0xFF, 0x85, 0xD6, 0xBA, 0x52, + 0xAA, 0xBD, 0xD7, 0x08, 0xFF, 0x83, 0xBD, 0xD7, 0x63, 0x0C, 0x0A, 0xFF, 0x83, 0x63, 0x2C, 0xBD, + 0xD7, 0x02, 0xFF, 0x83, 0x9C, 0xF3, 0x7B, 0xEF, 0x06, 0xFF, 0x83, 0xAD, 0x55, 0x73, 0x8E, 0x04, + 0xFF, 0x85, 0xC6, 0x38, 0x63, 0x0C, 0xFF, 0xDF, 0x02, 0xFF, 0x85, 0xDE, 0xFB, 0x52, 0xAA, 0xEF, + 0x7D, 0x02, 0xFF, 0x87, 0xF7, 0xBE, 0x63, 0x0C, 0x52, 0x8A, 0xEF, 0x5D, 0x02, 0xFF, 0x85, 0x7B, + 0xEF, 0x42, 0x08, 0xCE, 0x79, 0x02, 0xFF, 0x8D, 0xF7, 0x9E, 0x6B, 0x4D, 0x8C, 0x71, 0xAD, 0x75, + 0x84, 0x30, 0x52, 0xAA, 0xE7, 0x3C, 0x02, 0xFF, 0x83, 0x6B, 0x6D, 0xB5, 0x96, 0x06, 0xFF, 0x8B, + 0x94, 0xB2, 0x73, 0x8E, 0xAD, 0x55, 0xAD, 0x55, 0x94, 0x92, 0xE7, 0x1C, 0x16, 0xFF, 0x97, 0xEF, + 0x5D, 0xB5, 0xB6, 0xB5, 0x96, 0x42, 0x28, 0x31, 0x86, 0x31, 0x86, 0x31, 0xA6, 0xE7, 0x1C, 0xC6, + 0x38, 0x31, 0x86, 0x29, 0x45, 0x7B, 0xEF, 0x02, 0xFF, 0x84, 0x5A, 0xEB, 0x29, 0x65, 0x39, 0x02, + 0xE7, 0x90, 0x3C, 0xBD, 0xD7, 0x29, 0x65, 0x31, 0x86, 0x29, 0x65, 0x5A, 0xCB, 0xBD, 0xD7, 0xBD, + 0xD7, 0xF7, 0xBE, 0x0A, 0xFF, 0x95, 0xF7, 0xBE, 0xBD, 0xD7, 0x9C, 0xD3, 0x94, 0xB2, 0xB5, 0xB6, + 0xBD, 0xF7, 0x6B, 0x6D, 0x7B, 0xEF, 0xDE, 0xDB, 0xCE, 0x59, 0xC6, 0x38, 0x04, 0xFF, 0x85, 0xE7, + 0x1C, 0xAD, 0x75, 0xFF, 0xDF, 0x04, 0xFF, 0x83, 0xBD, 0xD7, 0xDE, 0xFB, 0x02, 0xFF, 0x85, 0xEF, + 0x7D, 0xAD, 0x75, 0xF7, 0xBE, 0x04, 0xFF, 0x83, 0xC6, 0x38, 0xBD, 0xF7, 0x08, 0xFF, 0x83, 0xE7, + 0x1C, 0xB5, 0xB6, 0x0A, 0xFF, 0x83, 0xBD, 0xD7, 0xDE, 0xFB, 0x02, 0xFF, 0x83, 0xD6, 0x9A, 0xC6, + 0x18, 0x06, 0xFF, 0x83, 0xDE, 0xDB, 0xBD, 0xF7, 0x04, 0xFF, 0x83, 0xE7, 0x3C, 0xB5, 0xB6, 0x04, + 0xFF, 0x85, 0xF7, 0x9E, 0xB5, 0x96, 0xF7, 0xBE, 0x04, 0xFF, 0x83, 0xC6, 0x18, 0xB5, 0xB6, 0x04, + 0xFF, 0x85, 0xD6, 0x9A, 0xAD, 0x55, 0xF7, 0xBE, 0x04, 0xFF, 0x8B, 0xDE, 0xDB, 0x9C, 0xF3, 0x9C, + 0xF3, 0xD6, 0x9A, 0xBD, 0xD7, 0xF7, 0xBE, 0x02, 0xFF, 0x83, 0xBD, 0xD7, 0xDE, 0xDB, 0x06, 0xFF, + 0x8B, 0xF7, 0xBE, 0xB5, 0xB6, 0x9C, 0xD3, 0x9C, 0xD3, 0xB5, 0xB6, 0xF7, 0xBE, 0x16, 0xFF, 0x97, + 0xEF, 0x7D, 0xC6, 0x18, 0xBD, 0xF7, 0x4A, 0x49, 0x29, 0x65, 0x31, 0x86, 0x29, 0x65, 0xB5, 0x96, + 0xEF, 0x5D, 0x5A, 0xEB, 0x31, 0x86, 0x84, 0x10, 0x02, 0xFF, 0x97, 0x63, 0x0C, 0x31, 0xA6, 0x73, + 0xAE, 0xF7, 0xBE, 0x84, 0x30, 0x29, 0x65, 0x31, 0x86, 0x29, 0x65, 0x5A, 0xEB, 0xC6, 0x18, 0xC6, + 0x38, 0xF7, 0xBE, 0x16, 0xFF, 0x85, 0xE7, 0x1C, 0x94, 0xB2, 0xCE, 0x59, 0x7F, 0xFF, 0x34, 0xFF, + 0x96, 0xDF, 0xE7, 0x1C, 0xDE, 0xFB, 0x4A, 0x69, 0x31, 0x86, 0x31, 0x86, 0x29, 0x65, 0x63, 0x0C, + 0xDE, 0xFB, 0xC6, 0x38, 0x73, 0xAE, 0xA5, 0x14, 0x02, 0xFF, 0x95, 0x8C, 0x51, 0x84, 0x10, 0xD6, + 0x9A, 0xC6, 0x38, 0x42, 0x08, 0x31, 0x86, 0x31, 0x86, 0x29, 0x65, 0x6B, 0x4D, 0xE7, 0x1C, 0xE7, + 0x3C, 0x7F, 0xFF, 0x51, 0xFF, 0x97, 0xE7, 0x3C, 0xAD, 0x55, 0xA5, 0x34, 0x42, 0x28, 0x31, 0x86, + 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x6B, 0x6D, 0xBD, 0xF7, 0xD6, 0x9A, 0xDE, 0xFB, 0x02, 0xFF, + 0x97, 0xDE, 0xDB, 0xCE, 0x79, 0xAD, 0x75, 0x52, 0x8A, 0x29, 0x65, 0x31, 0x86, 0x31, 0x86, 0x29, + 0x65, 0x52, 0xAA, 0xAD, 0x75, 0xAD, 0x75, 0xF7, 0xBE, 0x0C, 0xFF, 0x83, 0xF7, 0xBE, 0xF7, 0xBE, + 0x40, 0xFF, 0x81, 0xF7, 0xBE, 0x17, 0xFF, 0x84, 0xDF, 0xF7, 0x9E, 0xFF, 0xDF, 0x46, 0xFF, 0x83, + 0xEF, 0x7D, 0xFF, 0xDF, 0x16, 0xFF, 0x97, 0xF7, 0xBE, 0xDE, 0xDB, 0xD6, 0xBA, 0x4A, 0x49, 0x29, + 0x65, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x29, 0x65, 0x39, 0xE7, 0x52, 0xAA, 0xA5, 0x14, 0x02, + 0xFF, 0x97, 0x8C, 0x51, 0x52, 0x8A, 0x31, 0xA6, 0x29, 0x65, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, + 0x29, 0x65, 0x63, 0x2C, 0xDE, 0xDB, 0xDE, 0xDB, 0xFF, 0xDF, 0x0A, 0xFF, 0x87, 0xDE, 0xFB, 0xC6, + 0x38, 0xC6, 0x38, 0xE7, 0x3C, 0x3D, 0xFF, 0x82, 0xDF, 0xCE, 0x59, 0x02, 0xFF, 0x83, 0xEF, 0x5D, + 0xF7, 0xBE, 0x0E, 0xFF, 0x87, 0xF7, 0xBE, 0xCE, 0x79, 0xC6, 0x18, 0xD6, 0xBA, 0x31, 0xFF, 0x82, + 0xDF, 0xEF, 0x5D, 0x12, 0xFF, 0x83, 0xAD, 0x75, 0xE7, 0x3C, 0x16, 0xFF, 0xB1, 0xF7, 0x9E, 0xCE, + 0x79, 0xCE, 0x59, 0x4A, 0x49, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, + 0x86, 0x21, 0x24, 0x73, 0xAE, 0xEF, 0x5D, 0x52, 0xAA, 0x29, 0x45, 0x31, 0x86, 0x31, 0x86, 0x31, + 0x86, 0x31, 0x86, 0x31, 0x86, 0x29, 0x65, 0x63, 0x0C, 0xD6, 0x9A, 0xD6, 0x9A, 0xFF, 0xDF, 0x08, + 0xFF, 0x89, 0xE7, 0x3C, 0x8C, 0x51, 0xA5, 0x34, 0xAD, 0x55, 0xBD, 0xD7, 0x02, 0xFF, 0x85, 0xEF, + 0x5D, 0xE7, 0x1C, 0xEF, 0x5D, 0x03, 0xFF, 0x8C, 0xDF, 0xEF, 0x5D, 0xE7, 0x3C, 0xEF, 0x5D, 0xF7, + 0x9E, 0xE7, 0x1C, 0xEF, 0x7D, 0x02, 0xFF, 0x8D, 0xEF, 0x7D, 0xEF, 0x5D, 0xE7, 0x1C, 0xF7, 0x9E, + 0xEF, 0x5D, 0xE7, 0x1C, 0xFF, 0xDF, 0x02, 0xFF, 0x81, 0xEF, 0x5D, 0x03, 0xFF, 0x82, 0xDF, 0xEF, + 0x7D, 0x02, 0xFF, 0x95, 0xEF, 0x5D, 0xEF, 0x5D, 0xE7, 0x1C, 0xFF, 0xDF, 0xF7, 0x9E, 0xAD, 0x55, + 0xFF, 0xDF, 0xA5, 0x14, 0xCE, 0x59, 0xF7, 0x9E, 0xEF, 0x5D, 0x04, 0xFF, 0x81, 0xEF, 0x5D, 0x04, + 0xFF, 0x8B, 0xDE, 0xDB, 0x73, 0xAE, 0xAD, 0x75, 0xB5, 0x96, 0xFF, 0xDF, 0xEF, 0x5D, 0x04, 0xFF, + 0x81, 0xEF, 0x5D, 0x02, 0xFF, 0x87, 0xEF, 0x7D, 0xEF, 0x7D, 0xE7, 0x1C, 0xF7, 0x9E, 0x02, 0xFF, + 0x87, 0xEF, 0x7D, 0xEF, 0x7D, 0xE7, 0x1C, 0xEF, 0x7D, 0x03, 0xFF, 0x86, 0xDF, 0xE7, 0x3C, 0xE7, + 0x1C, 0xF7, 0x9E, 0x02, 0xFF, 0x8B, 0xEF, 0x7D, 0xEF, 0x5D, 0xE7, 0x3C, 0xD6, 0xBA, 0x9C, 0xF3, + 0xEF, 0x5D, 0x02, 0xFF, 0x85, 0xEF, 0x7D, 0xE7, 0x1C, 0xEF, 0x5D, 0x04, 0xFF, 0x87, 0xE7, 0x3C, + 0xE7, 0x3C, 0x7B, 0xEF, 0xD6, 0xBA, 0x16, 0xFF, 0xB1, 0xE7, 0x3C, 0xAD, 0x75, 0xAD, 0x55, 0x42, + 0x28, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x52, + 0xAA, 0x94, 0xB2, 0x42, 0x28, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, + 0x86, 0x29, 0x65, 0x5A, 0xCB, 0xAD, 0x75, 0xB5, 0x96, 0xF7, 0xBE, 0x08, 0xFF, 0x83, 0xA5, 0x34, + 0x94, 0xB2, 0x04, 0xFF, 0x99, 0xF7, 0xBE, 0xEF, 0x7D, 0xAD, 0x75, 0xA5, 0x34, 0xA5, 0x34, 0xE7, + 0x3C, 0xDE, 0xFB, 0xA5, 0x14, 0xAD, 0x75, 0x9C, 0xF3, 0xC6, 0x18, 0xA5, 0x14, 0xB5, 0x96, 0x02, + 0xFF, 0x91, 0xB5, 0xB6, 0xAD, 0x75, 0xA5, 0x14, 0xAD, 0x75, 0xBD, 0xD7, 0x9C, 0xD3, 0xD6, 0xBA, + 0xF7, 0xBE, 0xAD, 0x55, 0x02, 0xFF, 0xA1, 0xE7, 0x1C, 0xB5, 0x96, 0xFF, 0xDF, 0xA5, 0x14, 0xB5, + 0xB6, 0x9C, 0xD3, 0xD6, 0xBA, 0xFF, 0xDF, 0xAD, 0x75, 0xE7, 0x3C, 0x63, 0x0C, 0x8C, 0x71, 0xD6, + 0xBA, 0xA5, 0x34, 0xFF, 0xDF, 0xEF, 0x5D, 0xAD, 0x75, 0x04, 0xFF, 0x87, 0xCE, 0x59, 0x7B, 0xEF, + 0xDE, 0xDB, 0xF7, 0xBE, 0x02, 0xFF, 0x87, 0xAD, 0x55, 0xEF, 0x7D, 0xFF, 0xDF, 0xA5, 0x34, 0x02, + 0xFF, 0x87, 0xAD, 0x75, 0xB5, 0x96, 0xA5, 0x14, 0xB5, 0x96, 0x02, 0xFF, 0xB3, 0xB5, 0x96, 0xB5, + 0x96, 0xA5, 0x14, 0xB5, 0x96, 0xFF, 0xDF, 0xD6, 0x9A, 0xA5, 0x34, 0xA5, 0x34, 0xB5, 0xB6, 0xFF, + 0xDF, 0xB5, 0x96, 0xA5, 0x34, 0xB5, 0xB6, 0xA5, 0x34, 0x5A, 0xEB, 0xBD, 0xF7, 0xEF, 0x7D, 0xAD, + 0x75, 0xAD, 0x55, 0xAD, 0x55, 0xF7, 0x9E, 0xDE, 0xFB, 0x9C, 0xF3, 0xAD, 0x75, 0x6B, 0x4D, 0xDE, + 0xDB, 0x18, 0xFF, 0xAD, 0xF7, 0xBE, 0xF7, 0x9E, 0x5A, 0xCB, 0x29, 0x65, 0x31, 0x86, 0x31, 0x86, + 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x29, 0x65, 0x31, 0x86, 0x31, 0x86, + 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x29, 0x45, 0x7B, 0xCF, 0xF7, 0xBE, + 0xF7, 0xBE, 0x0A, 0xFF, 0x83, 0x84, 0x30, 0xBD, 0xF7, 0x06, 0xFF, 0xAB, 0xB5, 0x96, 0x94, 0x92, + 0xE7, 0x1C, 0x9C, 0xD3, 0xA5, 0x34, 0xCE, 0x79, 0x6B, 0x4D, 0xDE, 0xDB, 0x73, 0xAE, 0x94, 0xB2, + 0xD6, 0xBA, 0x6B, 0x6D, 0xFF, 0xDF, 0x84, 0x10, 0xA5, 0x14, 0xD6, 0x9A, 0x5A, 0xCB, 0xCE, 0x79, + 0xAD, 0x55, 0x94, 0x92, 0xEF, 0x7D, 0x73, 0x8E, 0x02, 0xFF, 0xA1, 0xD6, 0x9A, 0x84, 0x30, 0xF7, + 0xBE, 0x5A, 0xEB, 0xD6, 0x9A, 0xAD, 0x75, 0x8C, 0x71, 0xF7, 0xBE, 0x73, 0x8E, 0xF7, 0xBE, 0x7B, + 0xEF, 0xB5, 0xB6, 0xEF, 0x7D, 0x7B, 0xCF, 0xDE, 0xFB, 0xBD, 0xF7, 0x94, 0xB2, 0x04, 0xFF, 0xD1, + 0xF7, 0x9E, 0x9C, 0xD3, 0x8C, 0x71, 0xBD, 0xD7, 0xFF, 0xDF, 0x73, 0xAE, 0xE7, 0x1C, 0xFF, 0xDF, + 0x6B, 0x6D, 0xFF, 0xDF, 0x73, 0xAE, 0xAD, 0x55, 0xDE, 0xDB, 0x6B, 0x6D, 0xEF, 0x5D, 0x7B, 0xCF, + 0xAD, 0x55, 0xDE, 0xDB, 0x6B, 0x6D, 0xE7, 0x1C, 0x7B, 0xEF, 0xC6, 0x38, 0xDE, 0xFB, 0x73, 0x8E, + 0xE7, 0x3C, 0x84, 0x10, 0x9C, 0xD3, 0xE7, 0x1C, 0xC6, 0x38, 0x73, 0xAE, 0xE7, 0x3C, 0xBD, 0xF7, + 0x7B, 0xEF, 0xCE, 0x59, 0x7B, 0xEF, 0xCE, 0x79, 0x94, 0xB2, 0xAD, 0x55, 0xDE, 0xDB, 0x63, 0x2C, + 0xDE, 0xDB, 0x1C, 0xFF, 0xA5, 0x94, 0xB2, 0x39, 0xC7, 0x31, 0x86, 0x31, 0xA6, 0x31, 0xA6, 0x31, + 0x86, 0x31, 0xA6, 0x31, 0x86, 0x31, 0x86, 0x31, 0xA6, 0x31, 0x86, 0x31, 0xA6, 0x31, 0xA6, 0x31, + 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0xA6, 0x39, 0xE7, 0xB5, 0x96, 0x0E, 0xFF, 0x85, 0x94, 0x92, + 0xAD, 0x55, 0xFF, 0xDF, 0x02, 0xFF, 0x85, 0xF7, 0xBE, 0x94, 0x92, 0xBD, 0xD7, 0x02, 0xFF, 0x87, + 0xC6, 0x38, 0x8C, 0x71, 0xCE, 0x79, 0x94, 0x92, 0x02, 0xFF, 0x83, 0x94, 0xB2, 0xC6, 0x18, 0x02, + 0xFF, 0x87, 0x73, 0xAE, 0xF7, 0x9E, 0x8C, 0x51, 0xD6, 0xBA, 0x02, 0xFF, 0x81, 0x73, 0x8E, 0x02, + 0xFF, 0x87, 0xD6, 0x9A, 0x8C, 0x51, 0xF7, 0x9E, 0x73, 0xAE, 0x02, 0xFF, 0x87, 0xCE, 0x59, 0x84, + 0x30, 0xF7, 0xBE, 0x73, 0xAE, 0x02, 0xFF, 0x87, 0xDE, 0xDB, 0x84, 0x10, 0xF7, 0xBE, 0x73, 0xAE, + 0x02, 0xFF, 0x83, 0x8C, 0x71, 0xCE, 0x79, 0x02, 0xFF, 0x87, 0xB5, 0x96, 0x9C, 0xF3, 0x8C, 0x71, + 0xD6, 0xBA, 0x05, 0xFF, 0x96, 0xDF, 0xFF, 0xDF, 0xC6, 0x38, 0x63, 0x2C, 0xE7, 0x1C, 0x7B, 0xEF, + 0xE7, 0x1C, 0xF7, 0xBE, 0x73, 0x8E, 0xFF, 0xDF, 0x7B, 0xEF, 0xDE, 0xDB, 0x02, 0xFF, 0x87, 0x7B, + 0xCF, 0xDE, 0xFB, 0x84, 0x10, 0xDE, 0xDB, 0x02, 0xFF, 0x87, 0x7B, 0xEF, 0xCE, 0x59, 0x73, 0x8E, + 0xF7, 0xBE, 0x02, 0xFF, 0x87, 0x84, 0x10, 0xD6, 0x9A, 0x8C, 0x51, 0xD6, 0xBA, 0x02, 0xFF, 0x83, + 0xDE, 0xDB, 0x84, 0x10, 0x02, 0xFF, 0x8D, 0xA5, 0x14, 0x7B, 0xCF, 0xB5, 0xB6, 0x9C, 0xF3, 0xD6, + 0xBA, 0x84, 0x10, 0xD6, 0xBA, 0x02, 0xFF, 0x83, 0x7B, 0xEF, 0xD6, 0xBA, 0x1C, 0xFF, 0xA5, 0xEF, + 0x5D, 0x84, 0x30, 0x5A, 0xEB, 0x4A, 0x49, 0x4A, 0x49, 0x5A, 0xCB, 0x42, 0x28, 0x52, 0x8A, 0x52, + 0xAA, 0x42, 0x28, 0x5A, 0xCB, 0x4A, 0x69, 0x4A, 0x49, 0x5A, 0xCB, 0x42, 0x28, 0x4A, 0x69, 0x5A, + 0xEB, 0x94, 0xB2, 0xF7, 0xBE, 0x0E, 0xFF, 0x97, 0xCE, 0x59, 0x84, 0x10, 0xD6, 0xBA, 0xDE, 0xDB, + 0xD6, 0xBA, 0xB5, 0x96, 0x9C, 0xD3, 0xDE, 0xFB, 0xA5, 0x14, 0xB5, 0x96, 0xCE, 0x79, 0x94, 0xB2, + 0x02, 0xFF, 0x83, 0x9C, 0xD3, 0xC6, 0x18, 0x02, 0xFF, 0x9F, 0x7B, 0xEF, 0xF7, 0x9E, 0x8C, 0x71, + 0xD6, 0xBA, 0xFF, 0xDF, 0x7B, 0xCF, 0xFF, 0xDF, 0xD6, 0x9A, 0x8C, 0x71, 0xF7, 0xBE, 0x7B, 0xCF, + 0xDE, 0xDB, 0xAD, 0x55, 0x8C, 0x51, 0xF7, 0xBE, 0x7B, 0xEF, 0x02, 0xFF, 0x87, 0xDE, 0xDB, 0x8C, + 0x51, 0xF7, 0xBE, 0x7B, 0xCF, 0x02, 0xFF, 0x8D, 0x94, 0xB2, 0xB5, 0x96, 0xF7, 0x9E, 0xEF, 0x5D, + 0x6B, 0x6D, 0x84, 0x10, 0xFF, 0xDF, 0x04, 0xFF, 0x91, 0xE7, 0x1C, 0xD6, 0xBA, 0xDE, 0xDB, 0x7B, + 0xCF, 0xDE, 0xFB, 0x94, 0x92, 0xBD, 0xF7, 0xCE, 0x79, 0x6B, 0x6D, 0x02, 0xFF, 0x86, 0x7B, 0xCF, + 0xB5, 0x96, 0xDE, 0xDB, 0x7B, 0x02, 0xEF, 0x98, 0x7D, 0x7B, 0xEF, 0xAD, 0x75, 0xDE, 0xDB, 0x7B, + 0xEF, 0xE7, 0x3C, 0x84, 0x30, 0xCE, 0x59, 0xDE, 0xFB, 0x84, 0x10, 0xEF, 0x5D, 0x8C, 0x71, 0xD6, + 0xBA, 0x02, 0xFF, 0x99, 0xE7, 0x1C, 0x7B, 0xCF, 0xE7, 0x3C, 0xBD, 0xF7, 0x94, 0x92, 0xDE, 0xDB, + 0xDE, 0xDB, 0xFF, 0xDF, 0x9C, 0xD3, 0xB5, 0x96, 0xDE, 0xFB, 0x73, 0x8E, 0xDE, 0xDB, 0x1F, 0xFF, + 0x9E, 0xDF, 0xDE, 0xDB, 0x94, 0xB2, 0x9C, 0xD3, 0xD6, 0xBA, 0x84, 0x10, 0xBD, 0xD7, 0xC6, 0x18, + 0x7B, 0xEF, 0xD6, 0x9A, 0xA5, 0x34, 0x8C, 0x71, 0xD6, 0xBA, 0x8C, 0x51, 0xAD, 0x55, 0xDE, 0xFB, + 0x14, 0xFF, 0x95, 0xB5, 0x96, 0x9C, 0xD3, 0x9C, 0xF3, 0xC6, 0x38, 0xF7, 0x9E, 0xA5, 0x14, 0xA5, + 0x14, 0xA5, 0x34, 0xF7, 0x9E, 0xDE, 0xFB, 0xBD, 0xD7, 0x02, 0xFF, 0x83, 0xBD, 0xF7, 0xDE, 0xDB, + 0x02, 0xFF, 0x87, 0xAD, 0x55, 0xF7, 0xBE, 0xB5, 0xB6, 0xE7, 0x1C, 0x02, 0xFF, 0x81, 0xAD, 0x55, + 0x02, 0xFF, 0x83, 0xE7, 0x1C, 0xB5, 0xB6, 0x02, 0xFF, 0x8B, 0xB5, 0x96, 0x9C, 0xD3, 0xA5, 0x34, + 0xBD, 0xD7, 0xFF, 0xDF, 0xAD, 0x55, 0x02, 0xFF, 0x87, 0xE7, 0x3C, 0xB5, 0x96, 0xFF, 0xDF, 0xAD, + 0x55, 0x02, 0xFF, 0x85, 0xCE, 0x79, 0x94, 0x92, 0xDE, 0xFB, 0x02, 0xFF, 0x83, 0x73, 0x8E, 0xAD, + 0x55, 0x06, 0xFF, 0x87, 0xD6, 0xBA, 0x9C, 0xF3, 0x9C, 0xF3, 0xB5, 0x96, 0x02, 0xFF, 0x87, 0xCE, + 0x79, 0x94, 0xB2, 0xAD, 0x75, 0xA5, 0x14, 0x02, 0xFF, 0x87, 0x7B, 0xEF, 0x94, 0xB2, 0x9C, 0xF3, + 0xBD, 0xD7, 0x02, 0xFF, 0x87, 0x7B, 0xEF, 0x94, 0x92, 0x9C, 0xF3, 0xB5, 0xB6, 0x02, 0xFF, 0x87, + 0xCE, 0x79, 0x9C, 0xD3, 0xA5, 0x14, 0xBD, 0xF7, 0x02, 0xFF, 0x83, 0xB5, 0x96, 0xE7, 0x3C, 0x02, + 0xFF, 0x99, 0xF7, 0xBE, 0x9C, 0xD3, 0xB5, 0xB6, 0xF7, 0x9E, 0xA5, 0x34, 0xA5, 0x34, 0xAD, 0x75, + 0xF7, 0x9E, 0xDE, 0xFB, 0x94, 0xB2, 0xAD, 0x75, 0x9C, 0xF3, 0xEF, 0x5D, 0x22, 0xFF, 0x83, 0xBD, + 0xD7, 0xBD, 0xF7, 0x02, 0xFF, 0x87, 0xA5, 0x14, 0xE7, 0x1C, 0xEF, 0x7D, 0x9C, 0xF3, 0x02, 0xFF, + 0x83, 0xCE, 0x59, 0xAD, 0x75, 0x02, 0xFF, 0x83, 0xAD, 0x55, 0xD6, 0x9A, 0x18, 0xFF, 0x83, 0xF7, + 0xBE, 0xF7, 0xBE, 0x06, 0xFF, 0x81, 0xF7, 0x9E, 0x11, 0xFF, 0x80, 0xDF, 0x09, 0xFF, 0x80, 0xDF, + 0x0A, 0xFF, 0x81, 0xF7, 0x9E, 0x07, 0xFF, 0x80, 0xDF, 0x09, 0xFF, 0x80, 0xDF, 0x04, 0xFF, 0x89, + 0xF7, 0xBE, 0xFF, 0xDF, 0xFF, 0xDF, 0x84, 0x30, 0xE7, 0x1C, 0x08, 0xFF, 0x83, 0xF7, 0xBE, 0xF7, + 0x9E, 0x06, 0xFF, 0x83, 0xF7, 0xBE, 0xFF, 0xDF, 0x04, 0xFF, 0x85, 0x8C, 0x71, 0xE7, 0x1C, 0xF7, + 0x9E, 0x04, 0xFF, 0x85, 0x8C, 0x71, 0xDE, 0xFB, 0xF7, 0x9E, 0x06, 0xFF, 0x83, 0xF7, 0xBE, 0xF7, + 0xBE, 0x0D, 0xFF, 0x82, 0xDF, 0xF7, 0xBE, 0x04, 0xFF, 0x83, 0xF7, 0x9E, 0xF7, 0xBE, 0x04, 0xFF, + 0x83, 0xF7, 0xBE, 0xF7, 0xBE, 0x26, 0xFF, 0x83, 0xDE, 0xFB, 0xDE, 0xFB, 0x02, 0xFF, 0x87, 0xD6, + 0x9A, 0xEF, 0x7D, 0xF7, 0xBE, 0xCE, 0x79, 0x02, 0xFF, 0x83, 0xE7, 0x3C, 0xD6, 0xBA, 0x02, 0xFF, + 0x83, 0xD6, 0xBA, 0xE7, 0x3C, 0x66, 0xFF, 0x83, 0xF7, 0xBE, 0xC6, 0x38, 0x1C, 0xFF, 0x83, 0xCE, + 0x59, 0xF7, 0x9E, 0x06, 0xFF, 0x83, 0xCE, 0x59, 0xF7, 0x9E, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x13, 0xFF, 0x85, 0xF7, 0x9E, 0xFF, 0xDF, 0xF7, 0xBE, 0x24, 0xFF, 0x83, + 0xF7, 0xBE, 0xFF, 0xDF, 0x16, 0xFF, 0x81, 0xF7, 0x9E, 0x10, 0xFF, 0x81, 0xF7, 0xBE, 0x7A, 0xFF, + 0x89, 0xD6, 0x9A, 0x6B, 0x4D, 0x4A, 0x69, 0x7B, 0xEF, 0xF7, 0xBE, 0x0A, 0xFF, 0x89, 0xCE, 0x79, + 0x6B, 0x6D, 0x5A, 0xCB, 0x8C, 0x71, 0xF7, 0x9E, 0x04, 0xFF, 0x91, 0x63, 0x2C, 0x52, 0x8A, 0x52, + 0x8A, 0x52, 0x8A, 0xB5, 0xB6, 0xE7, 0x1C, 0x39, 0xC7, 0xBD, 0xF7, 0x63, 0x0C, 0x08, 0xFF, 0x83, + 0xDE, 0xDB, 0x4A, 0x49, 0x02, 0xFF, 0x8D, 0xF7, 0x9E, 0x31, 0xA6, 0x31, 0xA6, 0x31, 0xA6, 0x39, + 0xE7, 0x52, 0xAA, 0xAD, 0x55, 0x04, 0xFF, 0x8B, 0xD6, 0xBA, 0x5A, 0xCB, 0x42, 0x08, 0x39, 0xE7, + 0x63, 0x2C, 0xE7, 0x1C, 0x0C, 0xFF, 0x8B, 0xDE, 0xDB, 0x73, 0x8E, 0x4A, 0x69, 0x4A, 0x69, 0x4A, + 0x49, 0xAD, 0x55, 0x06, 0xFF, 0x8B, 0xEF, 0x7D, 0x7B, 0xEF, 0x4A, 0x69, 0x4A, 0x49, 0x6B, 0x4D, + 0xBD, 0xD7, 0x04, 0xFF, 0x89, 0xE7, 0x3C, 0x8C, 0x71, 0x52, 0xAA, 0x6B, 0x6D, 0xDE, 0xFB, 0x08, + 0xFF, 0x83, 0x84, 0x30, 0xA5, 0x34, 0x06, 0xFF, 0x87, 0xA5, 0x34, 0x5A, 0xCB, 0x52, 0x8A, 0xAD, + 0x55, 0x02, 0xFF, 0x8D, 0xEF, 0x7D, 0x52, 0x8A, 0x52, 0x8A, 0x52, 0x8A, 0x52, 0x8A, 0x52, 0x8A, + 0xB5, 0x96, 0x3C, 0xFF, 0x8B, 0xF7, 0x9E, 0x42, 0x08, 0xB5, 0x96, 0xD6, 0x9A, 0x6B, 0x6D, 0x8C, + 0x51, 0x09, 0xFF, 0x8A, 0xDF, 0x42, 0x08, 0xBD, 0xD7, 0xDE, 0xDB, 0x73, 0xAE, 0x94, 0x92, 0x02, + 0xFF, 0x93, 0xF7, 0x9E, 0x10, 0xA2, 0xC6, 0x18, 0xC6, 0x18, 0xC6, 0x18, 0xE7, 0x1C, 0xF7, 0xBE, + 0x52, 0xAA, 0xE7, 0x1C, 0x6B, 0x4D, 0x08, 0xFF, 0x83, 0xCE, 0x79, 0x10, 0x82, 0x02, 0xFF, 0x81, + 0xEF, 0x7D, 0x02, 0x00, 0x99, 0xC6, 0x38, 0xD6, 0x9A, 0xCE, 0x79, 0xAD, 0x75, 0x29, 0x45, 0xD6, + 0x9A, 0xFF, 0xDF, 0x39, 0xE7, 0x9C, 0xF3, 0xD6, 0x9A, 0xCE, 0x79, 0x7B, 0xEF, 0x52, 0x8A, 0x0A, + 0xFF, 0x8F, 0xD6, 0xBA, 0x42, 0x28, 0xA5, 0x34, 0xD6, 0xBA, 0xDE, 0xDB, 0xBD, 0xF7, 0x4A, 0x69, + 0xB5, 0x96, 0x02, 0xFF, 0x8F, 0xEF, 0x7D, 0x52, 0x8A, 0x84, 0x10, 0xCE, 0x79, 0xD6, 0xBA, 0xB5, + 0xB6, 0x31, 0x86, 0xD6, 0x9A, 0x02, 0xFF, 0x8B, 0x73, 0xAE, 0x84, 0x30, 0xD6, 0xBA, 0xB5, 0xB6, + 0x42, 0x08, 0xF7, 0x9E, 0x02, 0xFF, 0x87, 0xDE, 0xFB, 0x73, 0xAE, 0x18, 0xE3, 0x94, 0x92, 0x04, + 0xFF, 0x99, 0xC6, 0x18, 0x4A, 0x69, 0xCE, 0x59, 0xC6, 0x18, 0x42, 0x28, 0xCE, 0x79, 0xFF, 0xDF, + 0xC6, 0x18, 0xC6, 0x18, 0xC6, 0x18, 0x9C, 0xF3, 0x10, 0xA2, 0xDE, 0xDB, 0x3C, 0xFF, 0x85, 0xCE, + 0x59, 0x39, 0xE7, 0xF7, 0xBE, 0x02, 0xFF, 0x83, 0xCE, 0x59, 0x21, 0x04, 0x08, 0xFF, 0x85, 0xF7, + 0xBE, 0x00, 0x20, 0xE7, 0x1C, 0x02, 0xFF, 0x83, 0x8C, 0x51, 0x63, 0x2C, 0x02, 0xFF, 0x89, 0xCE, + 0x79, 0x39, 0xE7, 0xF7, 0x9E, 0xDE, 0xDB, 0xFF, 0xDF, 0x02, 0xFF, 0x87, 0xF7, 0x9E, 0xC6, 0x18, + 0xDE, 0xFB, 0xD6, 0xBA, 0x08, 0xFF, 0x83, 0xCE, 0x79, 0x10, 0x82, 0x02, 0xFF, 0x81, 0xEF, 0x7D, + 0x02, 0x00, 0x81, 0xF7, 0x9E, 0x04, 0xFF, 0x8B, 0xF7, 0xBE, 0x31, 0x86, 0xAD, 0x55, 0xFF, 0xDF, + 0x00, 0x20, 0xC6, 0x38, 0x04, 0xFF, 0x83, 0xE7, 0x3C, 0xA5, 0x34, 0x0A, 0xFF, 0x85, 0x7B, 0xCF, + 0x7B, 0xCF, 0xF7, 0x9E, 0x05, 0xFF, 0x84, 0xDF, 0xBD, 0xD7, 0xC6, 0x18, 0x02, 0xFF, 0x85, 0xB5, + 0xB6, 0x42, 0x08, 0xEF, 0x5D, 0x04, 0xFF, 0x8B, 0xF7, 0xBE, 0xAD, 0x55, 0xD6, 0xBA, 0xF7, 0x9E, + 0x10, 0xA2, 0xE7, 0x1C, 0x02, 0xFF, 0x85, 0xF7, 0xBE, 0x31, 0xA6, 0xBD, 0xD7, 0x02, 0xFF, 0x87, + 0x8C, 0x51, 0x9C, 0xF3, 0x63, 0x0C, 0x94, 0x92, 0x04, 0xFF, 0x8B, 0x7B, 0xCF, 0x8C, 0x71, 0xFF, + 0xDF, 0xFF, 0xDF, 0x7B, 0xEF, 0x7B, 0xEF, 0x03, 0xFF, 0x8A, 0xDF, 0xFF, 0xDF, 0xF7, 0xBE, 0x4A, + 0x69, 0x9C, 0xD3, 0xFF, 0xDF, 0x3C, 0xFF, 0x83, 0xAD, 0x55, 0x5A, 0xEB, 0x04, 0xFF, 0x81, 0xF7, + 0x9E, 0x02, 0x00, 0x81, 0xFF, 0xDF, 0x08, 0xFF, 0x89, 0x84, 0x30, 0x4A, 0x69, 0x84, 0x10, 0x42, + 0x08, 0xC6, 0x18, 0x02, 0xFF, 0x8B, 0x9C, 0xF3, 0x21, 0x24, 0x52, 0xAA, 0x31, 0x86, 0x63, 0x2C, + 0xF7, 0xBE, 0x03, 0xFF, 0x84, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0x08, 0xFF, 0x83, 0xCE, 0x79, 0x10, + 0x82, 0x02, 0xFF, 0x81, 0xEF, 0x7D, 0x02, 0x00, 0x81, 0xF7, 0x9E, 0x03, 0xFF, 0x86, 0xDF, 0xC6, + 0x38, 0x08, 0x41, 0xDE, 0xFB, 0x02, 0xFF, 0x8B, 0x73, 0x8E, 0x29, 0x65, 0x73, 0xAE, 0xB5, 0x96, + 0xEF, 0x5D, 0xF7, 0x9E, 0x0A, 0xFF, 0x83, 0x31, 0xA6, 0xB5, 0xB6, 0x08, 0xFF, 0x83, 0xF7, 0xBE, + 0xF7, 0xBE, 0x02, 0xFF, 0x83, 0x7B, 0xEF, 0x73, 0xAE, 0x08, 0xFF, 0x89, 0xF7, 0xBE, 0xFF, 0xDF, + 0xFF, 0xDF, 0x10, 0x82, 0xDE, 0xFB, 0x04, 0xFF, 0x83, 0x18, 0xC3, 0x9C, 0xF3, 0x02, 0xFF, 0x87, + 0xE7, 0x3C, 0xF7, 0x9E, 0x73, 0x8E, 0x94, 0x92, 0x04, 0xFF, 0x83, 0x52, 0x8A, 0xB5, 0x96, 0x04, + 0xFF, 0x83, 0xA5, 0x34, 0x5A, 0xEB, 0x06, 0xFF, 0x85, 0xA5, 0x34, 0x4A, 0x69, 0xF7, 0x9E, 0x3E, + 0xFF, 0x83, 0x94, 0x92, 0x6B, 0x6D, 0x06, 0xFF, 0x02, 0x00, 0x81, 0xF7, 0x9E, 0x07, 0xFF, 0x8A, + 0xDF, 0x6B, 0x6D, 0x39, 0xC7, 0x73, 0xAE, 0x21, 0x24, 0xBD, 0xD7, 0x02, 0xFF, 0x8B, 0xA5, 0x34, + 0x73, 0xAE, 0xDE, 0xDB, 0xC6, 0x18, 0x39, 0xE7, 0xB5, 0xB6, 0x10, 0xFF, 0x83, 0xCE, 0x79, 0x10, + 0x82, 0x02, 0xFF, 0x81, 0xEF, 0x7D, 0x02, 0x00, 0x8B, 0x42, 0x28, 0x4A, 0x49, 0x39, 0xE7, 0x21, + 0x24, 0x6B, 0x6D, 0xFF, 0xDF, 0x02, 0xFF, 0x8B, 0xEF, 0x5D, 0xA5, 0x34, 0x6B, 0x4D, 0x31, 0xA6, + 0x31, 0xA6, 0xB5, 0x96, 0x0A, 0xFF, 0x83, 0x08, 0x41, 0xCE, 0x79, 0x04, 0xFF, 0x87, 0x94, 0xB2, + 0x6B, 0x4D, 0x6B, 0x4D, 0x73, 0xAE, 0x02, 0xFF, 0x83, 0x5A, 0xEB, 0x8C, 0x51, 0x0E, 0xFF, 0x8B, + 0x63, 0x0C, 0x63, 0x2C, 0xC6, 0x38, 0x8C, 0x51, 0x10, 0x82, 0x9C, 0xD3, 0x06, 0xFF, 0x83, 0x73, + 0x8E, 0x94, 0x92, 0x04, 0xFF, 0x83, 0x39, 0xC7, 0xC6, 0x18, 0x04, 0xFF, 0x83, 0xB5, 0x96, 0x4A, + 0x69, 0x06, 0xFF, 0x83, 0x42, 0x08, 0xA5, 0x14, 0x40, 0xFF, 0x83, 0x9C, 0xF3, 0x63, 0x2C, 0x04, + 0xFF, 0x81, 0xF7, 0xBE, 0x02, 0x00, 0x81, 0xFF, 0xDF, 0x06, 0xFF, 0x8B, 0xCE, 0x59, 0x31, 0x86, + 0xDE, 0xFB, 0xE7, 0x3C, 0xAD, 0x55, 0x39, 0xC7, 0x02, 0xFF, 0x83, 0xEF, 0x7D, 0xEF, 0x5D, 0x03, + 0xFF, 0x84, 0xDF, 0x8C, 0x71, 0x5A, 0xEB, 0x10, 0xFF, 0x83, 0xCE, 0x79, 0x10, 0x82, 0x02, 0xFF, + 0x81, 0xEF, 0x7D, 0x02, 0x00, 0x89, 0xA5, 0x14, 0xAD, 0x75, 0xB5, 0x96, 0xCE, 0x59, 0xEF, 0x5D, + 0x05, 0xFF, 0x8C, 0xDF, 0xF7, 0xBE, 0xE7, 0x3C, 0xD6, 0xBA, 0x94, 0x92, 0x21, 0x24, 0xE7, 0x3C, + 0x08, 0xFF, 0x83, 0x29, 0x65, 0xB5, 0x96, 0x04, 0xFF, 0x87, 0xB5, 0xB6, 0x9C, 0xD3, 0x7B, 0xEF, + 0x21, 0x04, 0x02, 0xFF, 0x83, 0x7B, 0xEF, 0x73, 0x8E, 0x08, 0xFF, 0x83, 0xF7, 0x9E, 0xF7, 0xBE, + 0x02, 0xFF, 0x8B, 0xD6, 0xBA, 0x63, 0x0C, 0x52, 0xAA, 0x8C, 0x51, 0x52, 0xAA, 0xB5, 0x96, 0x06, + 0xFF, 0x83, 0x73, 0x8E, 0x94, 0x92, 0x04, 0xFF, 0x83, 0x42, 0x28, 0xBD, 0xD7, 0x04, 0xFF, 0x83, + 0xA5, 0x34, 0x63, 0x0C, 0x04, 0xFF, 0x85, 0xDE, 0xFB, 0x10, 0xA2, 0xEF, 0x5D, 0x40, 0xFF, 0x83, + 0xB5, 0xB6, 0x4A, 0x49, 0x04, 0xFF, 0x83, 0xDE, 0xFB, 0x18, 0xE3, 0x08, 0xFF, 0x83, 0xA5, 0x34, + 0x5A, 0xCB, 0x04, 0xFF, 0x89, 0xEF, 0x7D, 0x00, 0x20, 0xF7, 0xBE, 0xC6, 0x38, 0xDE, 0xFB, 0x04, + 0xFF, 0x83, 0x9C, 0xF3, 0x5A, 0xCB, 0x10, 0xFF, 0x83, 0xCE, 0x79, 0x10, 0x82, 0x02, 0xFF, 0x81, + 0xEF, 0x7D, 0x02, 0x00, 0x85, 0xEF, 0x5D, 0xF7, 0xBE, 0xF7, 0xBE, 0x06, 0xFF, 0x83, 0xC6, 0x18, + 0x63, 0x2C, 0x06, 0xFF, 0x85, 0xF7, 0x9E, 0x31, 0x86, 0xC6, 0x18, 0x08, 0xFF, 0x83, 0x6B, 0x4D, + 0x6B, 0x6D, 0x04, 0xFF, 0x87, 0xF7, 0xBE, 0xEF, 0x7D, 0xC6, 0x38, 0x10, 0xA2, 0x02, 0xFF, 0x85, + 0xAD, 0x55, 0x31, 0xA6, 0xFF, 0xDF, 0x06, 0xFF, 0x83, 0x84, 0x10, 0x7B, 0xCF, 0x02, 0xFF, 0x8B, + 0xE7, 0x1C, 0xE7, 0x1C, 0xDE, 0xFB, 0xEF, 0x5D, 0x39, 0xE7, 0xCE, 0x79, 0x06, 0xFF, 0x83, 0x73, + 0x8E, 0x94, 0x92, 0x04, 0xFF, 0x83, 0x63, 0x0C, 0xA5, 0x14, 0x04, 0xFF, 0x83, 0x8C, 0x71, 0x7B, + 0xEF, 0x04, 0xFF, 0x83, 0x9C, 0xD3, 0x5A, 0xCB, 0x42, 0xFF, 0x85, 0xEF, 0x7D, 0x18, 0xE3, 0xD6, + 0xBA, 0x02, 0xFF, 0x83, 0x84, 0x30, 0x6B, 0x6D, 0x02, 0xFF, 0x83, 0xF7, 0xBE, 0xDE, 0xDB, 0x02, + 0xFF, 0x85, 0xDE, 0xFB, 0x31, 0x86, 0xF7, 0x9E, 0x02, 0xFF, 0x83, 0xB5, 0xB6, 0x42, 0x08, 0x02, + 0xFF, 0x83, 0x9C, 0xF3, 0x6B, 0x6D, 0x02, 0xFF, 0x85, 0xF7, 0xBE, 0x52, 0xAA, 0x9C, 0xF3, 0x10, + 0xFF, 0x83, 0xCE, 0x79, 0x10, 0x82, 0x02, 0xFF, 0x81, 0xEF, 0x7D, 0x02, 0x00, 0x81, 0xF7, 0x9E, + 0x0A, 0xFF, 0x87, 0xE7, 0x3C, 0x10, 0x82, 0xB5, 0x96, 0xFF, 0xDF, 0x02, 0xFF, 0x85, 0xD6, 0x9A, + 0x10, 0x82, 0xE7, 0x1C, 0x08, 0xFF, 0x87, 0xD6, 0x9A, 0x31, 0x86, 0x9C, 0xF3, 0xF7, 0x9E, 0x02, + 0xFF, 0x85, 0xE7, 0x3C, 0x73, 0xAE, 0x18, 0xE3, 0x02, 0xFF, 0x87, 0xEF, 0x7D, 0x39, 0xE7, 0x8C, + 0x71, 0xF7, 0xBE, 0x02, 0xFF, 0x85, 0xC6, 0x38, 0x10, 0xA2, 0xAD, 0x75, 0x02, 0xFF, 0x83, 0x6B, + 0x4D, 0xC6, 0x38, 0x02, 0xFF, 0x85, 0xD6, 0x9A, 0x31, 0xA6, 0xF7, 0xBE, 0x06, 0xFF, 0x83, 0x73, + 0x8E, 0x94, 0x92, 0x04, 0xFF, 0x8B, 0xAD, 0x55, 0x4A, 0x69, 0xF7, 0x9E, 0xEF, 0x7D, 0x42, 0x08, + 0xBD, 0xF7, 0x04, 0xFF, 0x83, 0x63, 0x2C, 0x94, 0x92, 0x44, 0xFF, 0x89, 0x94, 0x92, 0x31, 0xA6, + 0x52, 0xAA, 0x52, 0x8A, 0xDE, 0xFB, 0x02, 0xFF, 0x83, 0xD6, 0x9A, 0x31, 0xA6, 0x03, 0xFF, 0x8A, + 0xDF, 0x8C, 0x51, 0x63, 0x2C, 0x63, 0x0C, 0x63, 0x0C, 0xBD, 0xD7, 0x02, 0xFF, 0x8B, 0xE7, 0x1C, + 0x5A, 0xEB, 0x5A, 0xEB, 0x42, 0x28, 0x5A, 0xEB, 0xEF, 0x5D, 0x10, 0xFF, 0x83, 0xCE, 0x79, 0x10, + 0x82, 0x02, 0xFF, 0x81, 0xEF, 0x7D, 0x02, 0x00, 0x81, 0xF7, 0x9E, 0x0C, 0xFF, 0x8D, 0xAD, 0x55, + 0x42, 0x28, 0x39, 0xE7, 0x42, 0x28, 0x42, 0x28, 0x9C, 0xF3, 0xFF, 0xDF, 0x09, 0xFF, 0x8E, 0xDF, + 0xBD, 0xF7, 0x5A, 0xEB, 0x42, 0x08, 0x42, 0x28, 0x39, 0xE7, 0x63, 0x2C, 0xC6, 0x38, 0x04, 0xFF, + 0x8D, 0xCE, 0x59, 0x5A, 0xCB, 0x4A, 0x49, 0x4A, 0x49, 0x5A, 0xEB, 0x8C, 0x71, 0xF7, 0x9E, 0x02, + 0xFF, 0x89, 0xB5, 0x96, 0x52, 0x8A, 0x63, 0x2C, 0x5A, 0xCB, 0xBD, 0xD7, 0x08, 0xFF, 0x83, 0x73, + 0x8E, 0x94, 0x92, 0x04, 0xFF, 0x8B, 0xF7, 0x9E, 0x5A, 0xEB, 0x42, 0x28, 0x4A, 0x49, 0x73, 0xAE, + 0xF7, 0xBE, 0x04, 0xFF, 0x83, 0x39, 0xC7, 0xBD, 0xD7, 0x44, 0xFF, 0x87, 0xF7, 0x9E, 0xD6, 0x9A, + 0xCE, 0x79, 0xDE, 0xFB, 0x04, 0xFF, 0x83, 0xF7, 0xBE, 0xD6, 0xBA, 0x04, 0xFF, 0x89, 0xEF, 0x7D, + 0xDE, 0xFB, 0xD6, 0x9A, 0xDE, 0xFB, 0xF7, 0xBE, 0x04, 0xFF, 0x87, 0xE7, 0x1C, 0xD6, 0x9A, 0xCE, + 0x79, 0xE7, 0x1C, 0x12, 0xFF, 0x83, 0xF7, 0xBE, 0xD6, 0xBA, 0x04, 0xFF, 0x81, 0xD6, 0x9A, 0x0E, + 0xFF, 0x8B, 0xF7, 0xBE, 0xDE, 0xDB, 0xCE, 0x79, 0xC6, 0x38, 0xDE, 0xDB, 0xF7, 0x9E, 0x0D, 0xFF, + 0x8C, 0xDF, 0xE7, 0x1C, 0xD6, 0xBA, 0xC6, 0x38, 0xD6, 0xBA, 0xE7, 0x3C, 0xFF, 0xDF, 0x05, 0xFF, + 0x8A, 0xDF, 0xE7, 0x1C, 0xD6, 0xBA, 0xCE, 0x59, 0xDE, 0xFB, 0xEF, 0x7D, 0x04, 0xFF, 0x89, 0xF7, + 0xBE, 0xDE, 0xDB, 0xD6, 0x9A, 0xDE, 0xFB, 0xF7, 0xBE, 0x08, 0xFF, 0x83, 0xE7, 0x3C, 0xEF, 0x5D, + 0x06, 0xFF, 0x87, 0xE7, 0x1C, 0xCE, 0x79, 0xD6, 0x9A, 0xEF, 0x5D, 0x06, 0xFF, 0x83, 0xDE, 0xDB, + 0xF7, 0x9E, 0x7F, 0xFF, 0x38, 0xFF, 0x80, 0xDF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x70, 0xFF, 0xA6, 0xDF, 0xFF, 0x9E, + 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, + 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, + 0xFF, 0xBE, 0xFF, 0xDF, 0x7F, 0xFF, 0x56, 0xFF, 0xAE, 0x7E, 0xF5, 0xD9, 0xEC, 0x13, 0xE3, 0x51, + 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, + 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, + 0xE3, 0x92, 0xEC, 0xB5, 0xF6, 0x7B, 0xFF, 0xBF, 0x7F, 0xFF, 0x50, 0xFF, 0xB0, 0x9E, 0xF5, 0xD8, + 0xE3, 0x10, 0xD9, 0x8B, 0xD9, 0x4B, 0xD9, 0x4B, 0xD9, 0x4A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x0A, + 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x4A, 0xD1, 0x4A, 0xD1, 0x2A, 0xD1, 0x0A, 0xD1, 0x0A, 0xD1, 0x2A, + 0xD1, 0x2A, 0xD9, 0x4B, 0xD9, 0x4B, 0xD9, 0x4B, 0xD9, 0xED, 0xE3, 0xF3, 0xF6, 0xBB, 0x7F, 0xFF, + 0x50, 0xFF, 0xB2, 0x1D, 0xEC, 0x54, 0xD9, 0xCC, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD9, 0x4B, + 0xDA, 0x0D, 0xE3, 0x30, 0xE3, 0x92, 0xE3, 0x51, 0xDA, 0x4E, 0xD9, 0x6B, 0xD9, 0x8C, 0xE2, 0xAF, + 0xE3, 0x71, 0xE3, 0x92, 0xE2, 0xCF, 0xD9, 0xCC, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, + 0xDA, 0x6E, 0xF5, 0x78, 0xFF, 0xBE, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xF3, 0xD9, + 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD9, 0xCC, 0xE3, 0x92, 0xED, 0x16, 0xED, 0x37, 0xEC, 0xF6, 0xED, + 0x16, 0xED, 0x16, 0xEC, 0x95, 0xEC, 0xB5, 0xED, 0x37, 0xEC, 0xF6, 0xEC, 0xF6, 0xED, 0x37, 0xEC, + 0xB5, 0xE2, 0xF0, 0xD9, 0x6B, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xED, 0x16, 0xFF, 0x7E, 0x7F, + 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x6B, 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x4E, + 0xEC, 0x95, 0xEC, 0x95, 0xE3, 0x31, 0xE2, 0xF0, 0xE2, 0xF0, 0xE3, 0xD2, 0xF5, 0x57, 0xEC, 0xF6, + 0xE3, 0x51, 0xE2, 0xF0, 0xE2, 0xF0, 0xE3, 0xB2, 0xEC, 0xF6, 0xE3, 0xF3, 0xD9, 0xAC, 0xD1, 0x0A, + 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, + 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x2D, 0xEC, 0x54, 0xEC, 0x13, 0xDA, 0x0D, 0xDA, + 0x0D, 0xE2, 0xCF, 0xE3, 0x51, 0xEC, 0x54, 0xEC, 0x13, 0xE3, 0x10, 0xE2, 0xAF, 0xD9, 0xCC, 0xDA, + 0x8F, 0xEC, 0x95, 0xE3, 0xB2, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, + 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, + 0xD9, 0xAC, 0xE3, 0xB2, 0xEC, 0x95, 0xE2, 0xAF, 0xD9, 0x6B, 0xDA, 0x4E, 0xEC, 0x54, 0xF6, 0x19, + 0xF5, 0x98, 0xE3, 0x92, 0xD9, 0xCC, 0xD9, 0x8C, 0xE3, 0x71, 0xEC, 0xB5, 0xE2, 0xF0, 0xD9, 0x2A, + 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, + 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD9, 0x4A, 0xDA, 0x4E, 0xEC, 0x54, 0xEC, + 0xD5, 0xE3, 0x92, 0xE3, 0xB2, 0xF5, 0xF9, 0xFF, 0x9E, 0xFF, 0x1D, 0xED, 0x16, 0xE3, 0x51, 0xE3, + 0xF3, 0xEC, 0xD6, 0xE3, 0xB2, 0xD9, 0xAC, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, + 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, + 0xD1, 0x2A, 0xD1, 0x2A, 0xD9, 0x8B, 0xE3, 0x71, 0xED, 0x57, 0xEC, 0xF6, 0xEC, 0xD6, 0xED, 0x57, + 0xEC, 0xB5, 0xEC, 0xD6, 0xED, 0x57, 0xEC, 0xD5, 0xED, 0x16, 0xEC, 0xF6, 0xDA, 0x8F, 0xD1, 0x2A, + 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, + 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD9, 0xED, 0xE3, + 0xD2, 0xEC, 0x74, 0xEC, 0x33, 0xEC, 0xF6, 0xEC, 0x54, 0xDA, 0x8F, 0xE3, 0x10, 0xEC, 0xD6, 0xEC, + 0xD5, 0xEC, 0x13, 0xEC, 0x74, 0xE3, 0x30, 0xD9, 0x6B, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, + 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, + 0xD1, 0x0A, 0xD1, 0x2A, 0xD9, 0x4B, 0xE2, 0xF0, 0xF5, 0x57, 0xF5, 0xD9, 0xED, 0x37, 0xED, 0x16, + 0xED, 0x16, 0xED, 0x57, 0xED, 0x57, 0xED, 0x16, 0xED, 0x16, 0xF5, 0x57, 0xF5, 0xD9, 0xEC, 0x95, + 0xDA, 0x0D, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, + 0x4D, 0xFF, 0xA0, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, + 0x54, 0xF6, 0x3A, 0xF6, 0x3A, 0xEC, 0x34, 0xDA, 0x6E, 0xE3, 0x71, 0xF5, 0x78, 0xEC, 0xF6, 0xE2, + 0xAF, 0xE2, 0xCF, 0xEC, 0x02, 0xF6, 0x90, 0x7B, 0xF5, 0xB8, 0xE3, 0x51, 0xD9, 0x8B, 0xD1, 0x2A, + 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, + 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD9, 0x4B, 0xE2, 0xCF, 0xEC, 0x74, 0xEC, 0xD5, 0xEC, 0x95, 0xE2, + 0xF0, 0xD1, 0x2A, 0xDA, 0x8E, 0xEC, 0xF6, 0xEC, 0x54, 0xD9, 0xAC, 0xD9, 0x8B, 0xE3, 0x92, 0xEC, + 0xD6, 0xEC, 0xB5, 0xE3, 0xF3, 0xDA, 0x2D, 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, + 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD9, 0x6B, + 0xE3, 0x10, 0xEC, 0x74, 0xEC, 0x74, 0xEC, 0xD5, 0xE3, 0xB2, 0xDA, 0x2E, 0xE3, 0xD3, 0xF6, 0x19, + 0xF5, 0x78, 0xE3, 0x10, 0xDA, 0x6E, 0xEC, 0x34, 0xEC, 0xD6, 0xEC, 0x54, 0xEC, 0x13, 0xDA, 0x6E, + 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0x8C, 0xFE, + 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD9, 0x4B, 0xE2, 0x8F, 0xEC, 0x02, 0xF6, 0xA4, 0x1A, + 0xF6, 0x9B, 0xF6, 0x7B, 0xF5, 0x98, 0xEC, 0xD6, 0xEC, 0x33, 0xEC, 0x54, 0xED, 0x37, 0xF5, 0xF9, + 0xF6, 0x9B, 0xF6, 0x9B, 0xF5, 0xB8, 0xEC, 0x13, 0xD9, 0xED, 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x0D, + 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0x8A, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, + 0x0A, 0xD1, 0x2A, 0xD9, 0x02, 0xEC, 0xA6, 0x34, 0xF5, 0xB8, 0xEC, 0xF6, 0xF5, 0x78, 0xF5, 0xF9, + 0xE3, 0xB2, 0xD9, 0xAC, 0xDA, 0x2D, 0xEC, 0xB5, 0xF6, 0x19, 0xED, 0x37, 0xED, 0x37, 0xF5, 0x78, + 0xE3, 0x51, 0xD9, 0x6B, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, + 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD9, 0x6B, 0xE3, + 0x10, 0xEC, 0x95, 0xE3, 0x71, 0xE3, 0x10, 0xEC, 0xB5, 0xEB, 0xF3, 0xDA, 0x0D, 0xE2, 0x8F, 0xEC, + 0x75, 0xEC, 0x34, 0xE2, 0xCF, 0xE3, 0xF3, 0xEC, 0x54, 0xDA, 0x4E, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, + 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, + 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xE4, 0x13, 0xEC, 0x54, 0xE3, 0x92, + 0xEC, 0xF6, 0xF5, 0xD9, 0xED, 0x37, 0xF5, 0x77, 0xF5, 0xD9, 0xEC, 0x54, 0xE3, 0xB2, 0xEC, 0x75, + 0xE3, 0x71, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, + 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, + 0x2A, 0xD9, 0x6B, 0xDA, 0x6E, 0xEC, 0x34, 0xF5, 0x98, 0xF6, 0x3A, 0xED, 0x57, 0xE3, 0xD2, 0xEC, + 0x33, 0xF5, 0xF9, 0xF6, 0x3A, 0xED, 0x16, 0xE3, 0x92, 0xD9, 0xED, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, + 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, + 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD9, 0x4B, 0xD9, 0xED, + 0xE3, 0x71, 0xEC, 0xF6, 0xED, 0x37, 0xEC, 0x74, 0xEC, 0x95, 0xED, 0x57, 0xEC, 0x95, 0xE2, 0xCF, + 0xD9, 0xAC, 0xD9, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xED, 0x16, + 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xEC, 0x13, 0xD9, 0x8C, 0xD1, 0x0A, 0xD1, + 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD9, 0x6B, 0xDA, 0x4E, 0xE3, 0x71, 0xEC, + 0x33, 0xE3, 0xF3, 0xE3, 0x10, 0xD9, 0xEC, 0xD1, 0x4B, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, + 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x4E, 0xED, 0x37, 0xFF, 0x9E, 0x7F, 0xFF, 0x4E, 0xFF, 0xB2, + 0x5D, 0xED, 0x16, 0xDA, 0x4E, 0xD1, 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, + 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x8B, 0xD9, 0xCC, 0xD9, 0xAC, 0xD9, 0x6B, 0xD1, 0x2A, 0xD9, + 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x6B, 0xE3, 0x10, 0xF6, + 0x19, 0xFF, 0xDF, 0x7F, 0xFF, 0x4E, 0xFF, 0xB0, 0xDF, 0xFE, 0xDC, 0xEC, 0x95, 0xDA, 0x8F, 0xD9, + 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xEC, 0xD9, 0xEC, 0xD9, + 0xCC, 0xD9, 0xCC, 0xD9, 0xEC, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, + 0xED, 0xDA, 0x0D, 0xE3, 0x30, 0xF5, 0x57, 0xFF, 0x5D, 0x7F, 0xFF, 0x52, 0xFF, 0xAC, 0xDF, 0xFF, + 0x3D, 0xF6, 0x7A, 0xF5, 0xF9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, + 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, + 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF6, 0x19, 0xF6, 0xBB, 0xFF, 0x7E, 0x7F, 0xFF, 0x5A, 0xFF, 0xA2, + 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, + 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, + 0xDF, 0xFF, 0xDF, 0x7F, 0xFF, 0x7F, 0xFF, 0x25, 0xFF, 0xC0, 0xBF, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, + 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, + 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, + 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, + 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x9E, 0xFF, 0xDF, 0x7F, 0xFF, 0x3E, 0xFF, 0xC4, + 0x5D, 0xF6, 0x5A, 0xF5, 0x78, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, + 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, + 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, + 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xED, 0x57, 0xF5, + 0x98, 0xF6, 0x7B, 0xFF, 0x9E, 0x7F, 0xFF, 0x3A, 0xFF, 0xC8, 0x9E, 0xF5, 0xF9, 0xEC, 0x74, 0xEC, + 0x95, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, + 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, + 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, + 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0x74, 0xEC, 0x95, 0xF6, + 0x5A, 0xFF, 0xBF, 0x0E, 0xFF, 0x8B, 0xF7, 0xBE, 0xF7, 0x9E, 0xF7, 0x9E, 0xF7, 0x9E, 0xF7, 0xBE, + 0xFF, 0xDF, 0x32, 0xFF, 0x87, 0xF7, 0x9E, 0xE7, 0x3C, 0xE7, 0x3C, 0xF7, 0xBE, 0x45, 0xFF, 0x8A, + 0xDF, 0xF7, 0xBE, 0xF7, 0x9E, 0xF7, 0x9E, 0xF7, 0xBE, 0xFF, 0xDE, 0x06, 0xFF, 0x85, 0xF7, 0x9E, + 0xEF, 0x7D, 0xF7, 0xBE, 0x07, 0xFF, 0x83, 0x1D, 0xED, 0x37, 0xEC, 0x02, 0xF6, 0xC2, 0x7B, 0xFF, + 0x1D, 0xF6, 0xFC, 0xF6, 0xDC, 0xEE, 0xDB, 0xEE, 0xDB, 0xEE, 0xDB, 0xF6, 0xFC, 0xF7, 0x1C, 0xFF, + 0x3D, 0xFF, 0x1D, 0xF6, 0xFC, 0xF6, 0xFC, 0xF7, 0x1C, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, + 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, + 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x1D, 0xF6, 0x3A, 0xEC, 0xB5, 0xF5, 0x77, 0xFF, + 0x7E, 0x0C, 0xFF, 0x91, 0xEF, 0x7D, 0xCE, 0x59, 0xAD, 0x55, 0xAD, 0x55, 0xAD, 0x55, 0xB5, 0x96, + 0xC6, 0x18, 0xE7, 0x1C, 0xF7, 0xBE, 0x2C, 0xFF, 0x89, 0xF7, 0xBE, 0xCE, 0x59, 0x8C, 0x51, 0x94, + 0x92, 0xDE, 0xDB, 0x42, 0xFF, 0x9B, 0xF7, 0x9E, 0xD6, 0x9A, 0xB5, 0x96, 0xAD, 0x55, 0xAD, 0x55, + 0xAD, 0x75, 0xBD, 0xF7, 0xDE, 0xDB, 0xF7, 0x9E, 0xEF, 0x7D, 0xBD, 0xD7, 0x9C, 0xD3, 0xC6, 0x38, + 0xF7, 0xBE, 0x04, 0xFF, 0xA1, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xFF, 0xDF, 0xDE, + 0xFB, 0xBD, 0xF7, 0xB5, 0x96, 0xB5, 0xB6, 0xB5, 0xB6, 0xC6, 0x18, 0xDE, 0xFB, 0xF7, 0xBE, 0xF7, + 0x9E, 0xD6, 0xBA, 0xCE, 0x59, 0xEF, 0x5D, 0x21, 0xFF, 0x86, 0x1D, 0xED, 0x16, 0xED, 0x37, 0xFF, + 0x5D, 0x0B, 0xFF, 0x94, 0xDF, 0xDE, 0xDB, 0x84, 0x10, 0x42, 0x08, 0x52, 0xAA, 0x63, 0x2C, 0x5A, + 0xEB, 0x5A, 0xCB, 0x7B, 0xCE, 0xC6, 0x18, 0xF7, 0xBE, 0x2A, 0xFF, 0x89, 0xF7, 0x9E, 0xB5, 0x96, + 0x52, 0xAA, 0x63, 0x2C, 0xCE, 0x79, 0x42, 0xFF, 0x9B, 0xE7, 0x1C, 0x94, 0x92, 0x4A, 0x69, 0x52, + 0x89, 0x63, 0x0C, 0x63, 0x0C, 0x5A, 0xEB, 0x6B, 0x6D, 0xAD, 0x75, 0xD6, 0x9A, 0xA5, 0x34, 0x84, + 0x10, 0xB5, 0xB6, 0xF7, 0x9E, 0x04, 0xFF, 0xA1, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, + 0xEF, 0x7D, 0xB5, 0x96, 0x73, 0xAE, 0x84, 0x10, 0x9C, 0xF3, 0x9C, 0xF3, 0x8C, 0x71, 0x8C, 0x51, + 0xB5, 0xB6, 0xDE, 0xFB, 0xCE, 0x59, 0xBD, 0xD7, 0xE7, 0x1C, 0x21, 0xFF, 0x86, 0x3D, 0xED, 0x17, + 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, 0xA0, 0xDF, 0xD6, 0x9A, 0x6B, 0x6D, 0x31, 0x85, 0x73, 0x8E, + 0xAD, 0x55, 0x94, 0xB2, 0x5A, 0xEB, 0x39, 0xE7, 0x84, 0x30, 0xE7, 0x3C, 0xF7, 0xBE, 0xDE, 0xFB, + 0xC6, 0x38, 0xC6, 0x38, 0xD6, 0xBA, 0xEF, 0x7D, 0x03, 0xFF, 0xAC, 0xDF, 0xE7, 0x1C, 0xCE, 0x59, + 0xC6, 0x18, 0xD6, 0x9A, 0xEF, 0x5D, 0xF7, 0xBE, 0xEF, 0x7D, 0xDE, 0xDB, 0xD6, 0xBA, 0xD6, 0x9A, + 0xCE, 0x59, 0xD6, 0x9A, 0xEF, 0x5D, 0xEF, 0x7D, 0xB5, 0x95, 0x52, 0x8A, 0x52, 0xAA, 0xAD, 0x55, + 0xCE, 0x59, 0xCE, 0x79, 0xEF, 0x5D, 0xFF, 0xDF, 0x02, 0xFF, 0xB3, 0xF7, 0xBE, 0xE7, 0x1C, 0xCE, + 0x59, 0xC6, 0x38, 0xD6, 0xBA, 0xF7, 0x9E, 0xFF, 0xDF, 0xEF, 0x5D, 0xD6, 0xBA, 0xD6, 0xBA, 0xD6, + 0xBA, 0xD6, 0xBA, 0xDE, 0xFB, 0xDE, 0xDB, 0xD6, 0xBA, 0xD6, 0xBA, 0xD6, 0x9A, 0xDE, 0xDB, 0xD6, + 0xBA, 0xDE, 0xDB, 0xF7, 0x9E, 0xFF, 0xDF, 0xE7, 0x3C, 0xD6, 0xBA, 0xDE, 0xFB, 0xF7, 0xBE, 0x04, + 0xFF, 0x9B, 0xDE, 0xFB, 0x7B, 0xEF, 0x39, 0xC7, 0x63, 0x0C, 0x9C, 0xF3, 0xA5, 0x13, 0x73, 0xAE, + 0x42, 0x28, 0x63, 0x2C, 0xBD, 0xD7, 0xBD, 0xD7, 0xA5, 0x14, 0xCE, 0x59, 0xF7, 0xBE, 0x04, 0xFF, + 0xA1, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xEF, 0x5D, 0xA5, 0x34, 0x73, 0x8E, 0xAD, + 0x54, 0xE7, 0x1C, 0xDE, 0xFB, 0xBD, 0xF7, 0x84, 0x10, 0x84, 0x10, 0xC6, 0x38, 0xD6, 0xBA, 0xCE, + 0x79, 0xEF, 0x5D, 0x02, 0xFF, 0x89, 0xEF, 0x7D, 0xD6, 0x9A, 0xC6, 0x38, 0xCE, 0x79, 0xEF, 0x5D, + 0x05, 0xFF, 0x8A, 0xDF, 0xE7, 0x3C, 0xCE, 0x79, 0xC6, 0x38, 0xD6, 0xBA, 0xF7, 0x9E, 0x05, 0xFF, + 0x86, 0x3D, 0xED, 0x17, 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, 0xFF, 0xDF, 0xD6, 0x9A, 0x6B, 0x6D, + 0x39, 0xE7, 0x9C, 0xF3, 0xEF, 0x7D, 0xDE, 0xFB, 0x8C, 0x71, 0x39, 0xC7, 0x6B, 0x6D, 0xCE, 0x79, + 0xC6, 0x18, 0x84, 0x10, 0x63, 0x2C, 0x63, 0x2C, 0x73, 0xAE, 0xAD, 0x75, 0xE7, 0x3C, 0xD6, 0xBA, + 0x94, 0x92, 0x6B, 0x6D, 0x6B, 0x4C, 0x73, 0x8E, 0x9C, 0xF3, 0xD6, 0x9A, 0xC6, 0x18, 0x84, 0x30, + 0x73, 0x8E, 0x73, 0xAE, 0x63, 0x2C, 0x6B, 0x6D, 0xA5, 0x34, 0xD6, 0xBA, 0xAD, 0x75, 0x52, 0x89, + 0x39, 0xE7, 0x63, 0x0C, 0x63, 0x2C, 0x6B, 0x6D, 0xA5, 0x13, 0xE7, 0x1C, 0xF7, 0x9E, 0xCE, 0x59, + 0x8C, 0x51, 0x63, 0x2C, 0x63, 0x0C, 0x7B, 0xCF, 0xB5, 0xB6, 0xDE, 0xFB, 0xBD, 0xF7, 0x84, 0x0F, + 0x73, 0x8E, 0x73, 0x8E, 0x84, 0x10, 0x9C, 0xF3, 0x84, 0x30, 0x73, 0x8E, 0x73, 0x8E, 0x7B, 0xEF, + 0x94, 0xB2, 0x84, 0x30, 0x8C, 0x51, 0xD6, 0x9A, 0xEF, 0x5D, 0xAD, 0x86, 0x55, 0x7B, 0xEF, 0xAD, + 0x55, 0xEF, 0x5D, 0x04, 0xFF, 0x9B, 0xDE, 0xFB, 0x7B, 0xEF, 0x42, 0x08, 0x84, 0x30, 0xDE, 0xDB, + 0xEF, 0x5D, 0xB5, 0xB6, 0x52, 0xAA, 0x4A, 0x69, 0x9C, 0xF3, 0x9C, 0xF3, 0x7B, 0xEF, 0xB5, 0x96, + 0xF7, 0x9E, 0x04, 0xFF, 0x8F, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xEF, 0x5D, 0xA5, + 0x34, 0x7B, 0xCF, 0xBD, 0xF7, 0x04, 0xFF, 0xAB, 0xE7, 0x3C, 0x9C, 0xD3, 0x73, 0xAE, 0xB5, 0x96, + 0xBD, 0xD7, 0xAD, 0x55, 0xDE, 0xDB, 0xEF, 0x7D, 0xBD, 0xD7, 0x8C, 0x51, 0x84, 0x30, 0x84, 0x30, + 0xA5, 0x34, 0xE7, 0x1B, 0xF7, 0xBE, 0xD6, 0xBA, 0x9C, 0xF3, 0x84, 0x30, 0x84, 0x30, 0x8C, 0x71, + 0xBD, 0xD6, 0xEF, 0x7D, 0x03, 0xFF, 0x86, 0x3D, 0xED, 0x17, 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, + 0xFF, 0xDF, 0xD6, 0x9A, 0x6B, 0x6D, 0x39, 0xC6, 0x8C, 0x71, 0xD6, 0xBA, 0xC6, 0x18, 0x7B, 0xCF, + 0x39, 0xC7, 0x7B, 0xCF, 0xC6, 0x38, 0x94, 0xB2, 0x5A, 0xEB, 0x6B, 0x6D, 0x73, 0xAE, 0x4A, 0x69, + 0x63, 0x2C, 0xBD, 0xD7, 0xAD, 0x55, 0x52, 0x8A, 0x63, 0x0C, 0x7B, 0xCF, 0x63, 0x2C, 0x6B, 0x6D, + 0xAD, 0x75, 0xA5, 0x34, 0x52, 0x8A, 0x42, 0x07, 0x6B, 0x4D, 0x6B, 0x4D, 0x4A, 0x48, 0x5A, 0xEB, + 0xAD, 0x75, 0xAD, 0x55, 0x4A, 0x69, 0x31, 0xA6, 0x63, 0x0C, 0x6B, 0x6D, 0x4A, 0x49, 0x5A, 0xCB, + 0xAD, 0x75, 0xCE, 0x59, 0x84, 0x30, 0x52, 0x89, 0x63, 0x2C, 0x6B, 0x6D, 0x52, 0xAA, 0x6B, 0x6D, + 0xB5, 0x96, 0x9C, 0xF3, 0x4A, 0x49, 0x31, 0xA6, 0x52, 0xAA, 0x7B, 0xEF, 0x8C, 0x51, 0x52, 0x8A, + 0x31, 0xA6, 0x52, 0x89, 0x7B, 0xCF, 0x94, 0xB2, 0x6B, 0x4D, 0x52, 0x8A, 0xAD, 0x55, 0xCE, 0x59, + 0x7B, 0x86, 0xCE, 0x4A, 0x69, 0x9C, 0xF3, 0xEF, 0x7D, 0x04, 0xFF, 0x9B, 0xDE, 0xFB, 0x7B, 0xEF, + 0x42, 0x07, 0x7B, 0xEF, 0xCE, 0x79, 0xDE, 0xDB, 0xA5, 0x34, 0x4A, 0x69, 0x4A, 0x69, 0x94, 0xB2, + 0x7B, 0xEF, 0x52, 0x89, 0x94, 0xB2, 0xEF, 0x5D, 0x04, 0xFF, 0xC9, 0xFE, 0xFC, 0xED, 0x16, 0xF5, + 0x98, 0xFF, 0x7E, 0xEF, 0x5D, 0xA5, 0x34, 0x73, 0xAE, 0xB5, 0xB6, 0xF7, 0x9E, 0xEF, 0x7D, 0xCE, + 0x79, 0x8C, 0x50, 0x7B, 0xCE, 0xB5, 0x95, 0xA5, 0x13, 0x84, 0x30, 0xC6, 0x38, 0xCE, 0x59, 0x8C, + 0x71, 0x94, 0x92, 0xAD, 0x75, 0x94, 0xB2, 0x7B, 0xCF, 0xB5, 0x96, 0xD6, 0xBA, 0x9C, 0xD3, 0x7B, + 0xCF, 0x9C, 0xF3, 0xAD, 0x75, 0x8C, 0x50, 0x7B, 0xEF, 0xC6, 0x18, 0xF7, 0xBE, 0xFF, 0x3D, 0xED, + 0x17, 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, 0xFF, 0xDF, 0xD6, 0x9A, 0x6B, 0x6D, 0x29, 0x45, 0x4A, + 0x69, 0x73, 0x8D, 0x63, 0x2C, 0x4A, 0x48, 0x5A, 0xCB, 0xAD, 0x75, 0xDE, 0xFB, 0xB5, 0x96, 0x8C, + 0x71, 0x9C, 0xD3, 0x94, 0x92, 0x52, 0x8A, 0x42, 0x28, 0x9C, 0xF3, 0x9C, 0xD3, 0x42, 0x08, 0x6B, + 0x4C, 0x9C, 0xF3, 0x9C, 0xD3, 0x9C, 0xF3, 0xBD, 0xF7, 0xA5, 0x14, 0x4A, 0x69, 0x52, 0xAA, 0xAD, + 0x75, 0xBD, 0xF7, 0x6B, 0x6D, 0x4A, 0x48, 0x8C, 0x50, 0x9C, 0xF3, 0x52, 0x8A, 0x4A, 0x69, 0xAD, + 0x54, 0xC6, 0x18, 0x73, 0xAE, 0x42, 0x28, 0x7B, 0xEF, 0x9C, 0xF3, 0x52, 0xAA, 0x4A, 0x49, 0x8C, + 0x51, 0x9C, 0xD3, 0x5A, 0xEB, 0x4A, 0x49, 0x8C, 0x71, 0x94, 0x92, 0x42, 0x28, 0x4A, 0x69, 0x9C, + 0xD3, 0xC6, 0x38, 0xA5, 0x14, 0x4A, 0x69, 0x42, 0x28, 0x8C, 0x71, 0xCE, 0x59, 0xCE, 0x79, 0x84, + 0x30, 0x4A, 0x49, 0x84, 0x10, 0xA5, 0x34, 0x5A, 0x86, 0xEB, 0x5A, 0xCA, 0xBD, 0xD7, 0xFF, 0xDF, + 0x04, 0xFF, 0x9B, 0xDE, 0xFB, 0x7B, 0xEF, 0x31, 0xA6, 0x4A, 0x69, 0x73, 0xAE, 0x7B, 0xCF, 0x5A, + 0xCB, 0x42, 0x08, 0x73, 0xAE, 0xB5, 0x96, 0x7B, 0xEF, 0x4A, 0x48, 0x94, 0x92, 0xEF, 0x5D, 0x04, + 0xFF, 0xC9, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xEF, 0x5D, 0xA5, 0x14, 0x63, 0x0C, + 0x7B, 0xEF, 0xA5, 0x34, 0xA5, 0x14, 0x8C, 0x51, 0x73, 0xAE, 0x9C, 0xD3, 0xCE, 0x58, 0x9C, 0xD3, + 0x7B, 0xEF, 0xB5, 0xB6, 0xAD, 0x55, 0x8C, 0x51, 0xCE, 0x59, 0xEF, 0x7D, 0xD6, 0xBA, 0xAD, 0x55, + 0xBD, 0xD7, 0xB5, 0xB6, 0x73, 0xAE, 0x94, 0xB2, 0xDE, 0xFB, 0xEF, 0x7D, 0xBD, 0xF7, 0x73, 0xAE, + 0x9C, 0xD2, 0xEF, 0x5D, 0xFF, 0x3D, 0xED, 0x17, 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, 0xFF, 0xDF, + 0xD6, 0x9A, 0x6B, 0x6D, 0x21, 0x24, 0x42, 0x28, 0x52, 0xAA, 0x39, 0xC7, 0x39, 0xC7, 0x8C, 0x51, + 0xE7, 0x1C, 0xEF, 0x5D, 0xB5, 0x96, 0x7B, 0xEF, 0x73, 0xAE, 0x73, 0x8D, 0x42, 0x28, 0x42, 0x07, + 0x9C, 0xF3, 0xBD, 0xD7, 0x63, 0x2C, 0x52, 0x8A, 0x63, 0x2C, 0x7B, 0xEF, 0xA5, 0x34, 0xCE, 0x79, + 0xA5, 0x34, 0x52, 0x8A, 0x63, 0x2C, 0xCE, 0x79, 0xE7, 0x1C, 0x8C, 0x71, 0x4A, 0x49, 0x73, 0xAE, + 0x94, 0xB2, 0x52, 0xAA, 0x5A, 0xEB, 0xCE, 0x58, 0xEF, 0x5C, 0x9C, 0xD2, 0x4A, 0x69, 0x63, 0x2C, + 0x7B, 0xEF, 0x42, 0x28, 0x39, 0xC7, 0x63, 0x2C, 0x73, 0x8D, 0x4A, 0x69, 0x4A, 0x49, 0x84, 0x30, + 0x8C, 0x51, 0x4A, 0x69, 0x6B, 0x4C, 0xCE, 0x59, 0xEF, 0x7D, 0xAD, 0x75, 0x52, 0x8A, 0x5A, 0xEB, + 0xC6, 0x18, 0xF7, 0xBE, 0xEF, 0x7D, 0xAD, 0x75, 0x52, 0xAA, 0x5A, 0xCB, 0x73, 0x8D, 0x52, 0x84, + 0x89, 0x73, 0xAE, 0xD6, 0xBA, 0x06, 0xFF, 0x9B, 0xDE, 0xFB, 0x7B, 0xEF, 0x31, 0x86, 0x39, 0xC6, + 0x52, 0xAA, 0x5A, 0xCB, 0x63, 0x0C, 0x84, 0x0F, 0xBD, 0xF7, 0xCE, 0x79, 0x7B, 0xEF, 0x4A, 0x48, + 0x94, 0x92, 0xEF, 0x5D, 0x04, 0xFF, 0xA7, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xEF, + 0x7D, 0xA5, 0x14, 0x5A, 0xEB, 0x6B, 0x4D, 0x8C, 0x71, 0x8C, 0x71, 0x94, 0x92, 0xAD, 0x55, 0xDE, + 0xDA, 0xDE, 0xFB, 0x9C, 0xD3, 0x7B, 0xEF, 0xAD, 0x75, 0x9C, 0xD3, 0x94, 0x92, 0xE7, 0x1C, 0x03, + 0xFF, 0x8C, 0xDF, 0xEF, 0x5D, 0xE7, 0x3C, 0xAD, 0x75, 0x6B, 0x6D, 0xB5, 0x96, 0xF7, 0x9E, 0x02, + 0xFF, 0x8F, 0xDE, 0xDB, 0x84, 0x30, 0x84, 0x30, 0xE7, 0x1C, 0xFF, 0x3D, 0xED, 0x17, 0xED, 0x37, + 0xFF, 0x5D, 0x0B, 0xFF, 0xF2, 0xDF, 0xD6, 0x9A, 0x6B, 0x6D, 0x31, 0xA6, 0x7B, 0xCF, 0xA5, 0x34, + 0x6B, 0x4C, 0x39, 0xC7, 0x84, 0x10, 0xDE, 0xFB, 0xCE, 0x79, 0x73, 0xAE, 0x4A, 0x69, 0x7B, 0xEF, + 0x8C, 0x71, 0x52, 0xAA, 0x42, 0x07, 0x9C, 0xF3, 0xD6, 0xBA, 0xA5, 0x14, 0x84, 0x30, 0x6B, 0x6D, + 0x52, 0x8A, 0x63, 0x2C, 0xAD, 0x54, 0xA5, 0x14, 0x52, 0x8A, 0x6B, 0x4C, 0xD6, 0x99, 0xE7, 0x3C, + 0x8C, 0x71, 0x4A, 0x49, 0x73, 0xAE, 0x94, 0xB2, 0x52, 0xAA, 0x63, 0x0B, 0xCE, 0x59, 0xEF, 0x5D, + 0x9C, 0xD2, 0x4A, 0x69, 0x63, 0x2C, 0x7B, 0xEF, 0x42, 0x28, 0x39, 0xE7, 0x73, 0xAE, 0x8C, 0x51, + 0x84, 0x10, 0x8C, 0x51, 0xAD, 0x55, 0x94, 0x92, 0x4A, 0x69, 0x6B, 0x6D, 0xD6, 0xBA, 0xF7, 0x9E, + 0xB5, 0x96, 0x52, 0x8A, 0x63, 0x0C, 0xCE, 0x59, 0x03, 0xFF, 0x8E, 0xDF, 0xCE, 0x79, 0x6B, 0x6D, + 0x39, 0xE7, 0x39, 0xE7, 0x4A, 0x69, 0x9C, 0xF3, 0xEF, 0x7D, 0x06, 0xFF, 0x9B, 0xDE, 0xFB, 0x7B, + 0xEF, 0x39, 0xC7, 0x63, 0x0C, 0x9C, 0xF3, 0xB5, 0x96, 0xC6, 0x18, 0xDE, 0xDB, 0xF7, 0x9E, 0xDE, + 0xFB, 0x7B, 0xEF, 0x4A, 0x48, 0x94, 0x92, 0xEF, 0x5D, 0x04, 0xFF, 0xA7, 0xFE, 0xFC, 0xED, 0x16, + 0xF5, 0x98, 0xFF, 0x7E, 0xEF, 0x7D, 0xA5, 0x34, 0x6B, 0x6D, 0x9C, 0xF3, 0xD6, 0xBA, 0xDE, 0xDB, + 0xDE, 0xFB, 0xEF, 0x7D, 0xFF, 0xDF, 0xE7, 0x3C, 0x9C, 0xD3, 0x7B, 0xEF, 0xAD, 0x75, 0x9C, 0xD2, + 0x94, 0x92, 0xE7, 0x3C, 0x03, 0xFF, 0x8C, 0xDF, 0xEF, 0x7D, 0xEF, 0x5D, 0xAD, 0x75, 0x6B, 0x6D, + 0xB5, 0xB6, 0xF7, 0xBE, 0x02, 0xFF, 0x8F, 0xDE, 0xDB, 0x84, 0x30, 0x84, 0x30, 0xE7, 0x1C, 0xFF, + 0x3D, 0xED, 0x17, 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, 0xF2, 0xDF, 0xD6, 0x9A, 0x6B, 0x6D, 0x39, + 0xC7, 0x9C, 0xF3, 0xE7, 0x3C, 0xA5, 0x34, 0x4A, 0x49, 0x52, 0xAA, 0xB5, 0x96, 0xB5, 0xB6, 0x52, + 0x8A, 0x42, 0x28, 0x94, 0xB2, 0xA5, 0x14, 0x5A, 0xCB, 0x39, 0xE7, 0x94, 0xB2, 0xB5, 0xB6, 0x8C, + 0x71, 0xA5, 0x34, 0xA5, 0x14, 0x63, 0x0B, 0x42, 0x28, 0x8C, 0x51, 0x9C, 0xD3, 0x52, 0x89, 0x52, + 0x8A, 0xA5, 0x34, 0xB5, 0xB6, 0x6B, 0x4D, 0x42, 0x28, 0x8C, 0x51, 0x9C, 0xF3, 0x52, 0x89, 0x4A, + 0x49, 0xA5, 0x14, 0xBD, 0xD7, 0x73, 0x8E, 0x42, 0x28, 0x84, 0x0F, 0x9C, 0xF3, 0x52, 0xAA, 0x42, + 0x28, 0x8C, 0x50, 0xAD, 0x75, 0xA5, 0x34, 0xAD, 0x55, 0xC6, 0x18, 0x9C, 0xD3, 0x4A, 0x49, 0x6B, + 0x6D, 0xD6, 0xBA, 0xF7, 0x9E, 0xB5, 0x95, 0x52, 0x8A, 0x63, 0x0C, 0xCE, 0x59, 0x04, 0xFF, 0x8D, + 0xE7, 0x1C, 0x8C, 0x71, 0x39, 0xC6, 0x21, 0x24, 0x5A, 0xEB, 0xBD, 0xF7, 0xFF, 0xDF, 0x06, 0xFF, + 0x8D, 0xDE, 0xFB, 0x7B, 0xEF, 0x42, 0x08, 0x84, 0x10, 0xDE, 0xDB, 0xF7, 0x9E, 0xF7, 0xBE, 0x04, + 0xFF, 0x89, 0xDE, 0xFB, 0x7B, 0xEF, 0x42, 0x28, 0x94, 0x92, 0xEF, 0x5D, 0x04, 0xFF, 0x91, 0xFE, + 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xEF, 0x5D, 0xA5, 0x34, 0x73, 0xAE, 0xBD, 0xD7, 0xFF, + 0xDF, 0x08, 0xFF, 0xAF, 0xE7, 0x3C, 0x9C, 0xD3, 0x7B, 0xEF, 0xB5, 0xB6, 0xAD, 0x55, 0x8C, 0x51, + 0xCE, 0x79, 0xF7, 0xBE, 0xDE, 0xFB, 0xB5, 0xB6, 0xC6, 0x18, 0xBD, 0xD6, 0x73, 0xAE, 0x94, 0xB2, + 0xE7, 0x1C, 0xF7, 0x9E, 0xBD, 0xF7, 0x73, 0xAE, 0x94, 0xB2, 0xEF, 0x5D, 0xFF, 0x3D, 0xED, 0x17, + 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, 0xF2, 0xDF, 0xD6, 0xBA, 0x73, 0xAE, 0x42, 0x28, 0xA5, 0x34, + 0xF7, 0xBE, 0xDE, 0xDB, 0x84, 0x10, 0x42, 0x28, 0x7B, 0xEF, 0xB5, 0x96, 0x7B, 0xCE, 0x39, 0xE7, + 0x52, 0x8A, 0x63, 0x0C, 0x4A, 0x48, 0x42, 0x28, 0x94, 0xB2, 0xB5, 0x96, 0x6B, 0x4D, 0x5A, 0xEB, + 0x5A, 0xEB, 0x4A, 0x69, 0x63, 0x2C, 0xAD, 0x55, 0xA5, 0x14, 0x4A, 0x69, 0x31, 0xA6, 0x52, 0xAA, + 0x52, 0xAA, 0x42, 0x28, 0x73, 0x8E, 0xBD, 0xF7, 0xAD, 0x75, 0x52, 0xAA, 0x42, 0x07, 0x5A, 0xEB, + 0x5A, 0xCA, 0x42, 0x28, 0x6B, 0x4C, 0xBD, 0xD7, 0xD6, 0xBA, 0x9C, 0xD3, 0x5A, 0xCB, 0x4A, 0x69, + 0x5A, 0xCB, 0x63, 0x0B, 0x8C, 0x51, 0xC6, 0x18, 0xA5, 0x13, 0x52, 0x8A, 0x73, 0xAE, 0xD6, 0xBA, + 0xF7, 0x9E, 0xB5, 0xB6, 0x5A, 0xCB, 0x63, 0x2C, 0xCE, 0x79, 0x04, 0xFF, 0x8B, 0xF7, 0xBE, 0xBD, + 0xD7, 0x52, 0x8A, 0x31, 0x86, 0x84, 0x10, 0xDE, 0xFB, 0x08, 0xFF, 0x89, 0xDE, 0xFB, 0x84, 0x10, + 0x4A, 0x49, 0x8C, 0x71, 0xE7, 0x3C, 0x08, 0xFF, 0x89, 0xE7, 0x1C, 0x84, 0x10, 0x4A, 0x69, 0x94, + 0xB2, 0xEF, 0x5D, 0x04, 0xFF, 0x8F, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xEF, 0x7D, + 0xA5, 0x34, 0x7B, 0xCF, 0xBD, 0xF7, 0x0A, 0xFF, 0xAF, 0xE7, 0x3C, 0x9C, 0xF3, 0x84, 0x10, 0xC6, + 0x38, 0xD6, 0x9A, 0x94, 0xB2, 0x7B, 0xEF, 0x8C, 0x71, 0x84, 0x10, 0x8C, 0x51, 0xC6, 0x38, 0xDE, + 0xFB, 0xA5, 0x34, 0x7B, 0xCF, 0x84, 0x30, 0x8C, 0x51, 0x7B, 0xCF, 0x8C, 0x50, 0xCE, 0x79, 0xF7, + 0xBE, 0xFF, 0x3D, 0xED, 0x17, 0xED, 0x37, 0xFF, 0x5D, 0x0C, 0xFF, 0x87, 0xEF, 0x5D, 0xBD, 0xD6, + 0xA5, 0x13, 0xD6, 0x9A, 0x02, 0xFF, 0xE7, 0xF7, 0xBE, 0xCE, 0x79, 0xA5, 0x13, 0xAD, 0x75, 0xDE, + 0xDA, 0xCE, 0x59, 0x9C, 0xD2, 0x8C, 0x51, 0x9C, 0xF3, 0xA5, 0x14, 0x9C, 0xF3, 0xC6, 0x38, 0xDE, + 0xFB, 0xB5, 0xB6, 0x94, 0x92, 0x8C, 0x51, 0x9C, 0xD3, 0xBD, 0xF7, 0xDE, 0xDB, 0xAD, 0x55, 0x4A, + 0x69, 0x4A, 0x69, 0x84, 0x10, 0x8C, 0x71, 0x9C, 0xD2, 0xC6, 0x38, 0xEF, 0x5D, 0xDE, 0xDB, 0xAD, + 0x55, 0x9C, 0xF3, 0x9C, 0xF3, 0x8C, 0x71, 0x94, 0xB2, 0xBD, 0xF7, 0xEF, 0x7D, 0xFF, 0xDF, 0xDE, + 0xFB, 0xB5, 0x96, 0x94, 0x92, 0x8C, 0x50, 0x9C, 0xD2, 0xC6, 0x17, 0xE7, 0x1C, 0xCE, 0x79, 0xA5, + 0x34, 0xBD, 0xD7, 0xEF, 0x5D, 0xFF, 0xDF, 0xDE, 0xDB, 0xAD, 0x55, 0xB5, 0x96, 0xE7, 0x3C, 0x06, + 0xFF, 0x89, 0xCE, 0x79, 0x63, 0x2C, 0x4A, 0x69, 0xAD, 0x55, 0xF7, 0x9E, 0x08, 0xFF, 0x89, 0xEF, + 0x7D, 0xBD, 0xF7, 0xA5, 0x14, 0xC6, 0x38, 0xF7, 0x9E, 0x08, 0xFF, 0x89, 0xEF, 0x7D, 0xC6, 0x17, + 0xA5, 0x34, 0xCE, 0x59, 0xF7, 0xBE, 0x04, 0xFF, 0x8F, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, + 0x7E, 0xF7, 0xBE, 0xD6, 0x9A, 0xBD, 0xD7, 0xDE, 0xFB, 0x0A, 0xFF, 0xA5, 0xF7, 0x9E, 0xCE, 0x79, + 0xBD, 0xF7, 0xE7, 0x1C, 0xF7, 0xBE, 0xCE, 0x79, 0xA5, 0x34, 0x9C, 0xD3, 0xA5, 0x14, 0xC6, 0x18, + 0xEF, 0x5D, 0xFF, 0xDF, 0xE7, 0x1C, 0xBD, 0xD6, 0x9C, 0xF3, 0x9C, 0xD3, 0xA5, 0x34, 0xCE, 0x79, + 0xF7, 0x9E, 0x03, 0xFF, 0x86, 0x3D, 0xED, 0x37, 0xED, 0x37, 0xFF, 0x5D, 0x0D, 0xFF, 0x86, 0xDF, + 0xF7, 0x9E, 0xEF, 0x5D, 0xF7, 0xBE, 0x04, 0xFF, 0xB1, 0xF7, 0xBE, 0xEF, 0x7D, 0xEF, 0x7D, 0xF7, + 0xBE, 0xF7, 0xBE, 0xEF, 0x5D, 0xE7, 0x1C, 0xEF, 0x5D, 0xEF, 0x7D, 0xEF, 0x5D, 0xF7, 0x9E, 0xFF, + 0xDF, 0xF7, 0x9E, 0xE7, 0x3C, 0xE7, 0x1C, 0xEF, 0x5D, 0xF7, 0xBE, 0xEF, 0x7D, 0xAD, 0x55, 0x52, + 0x89, 0x63, 0x0C, 0xC6, 0x17, 0xE7, 0x3C, 0xEF, 0x5D, 0xF7, 0xBE, 0x02, 0xFF, 0x8D, 0xF7, 0xBE, + 0xEF, 0x7D, 0xEF, 0x7D, 0xEF, 0x7D, 0xE7, 0x3C, 0xE7, 0x3C, 0xF7, 0x9E, 0x05, 0xFF, 0x94, 0xDF, + 0xF7, 0x9E, 0xE7, 0x3C, 0xE7, 0x1C, 0xEF, 0x5D, 0xF7, 0xBE, 0xFF, 0xDF, 0xF7, 0xBE, 0xEF, 0x7D, + 0xF7, 0x9E, 0xFF, 0xDF, 0x02, 0xFF, 0x87, 0xF7, 0xBE, 0xEF, 0x7D, 0xEF, 0x7D, 0xFF, 0xDF, 0x02, + 0xFF, 0x8B, 0xF7, 0xBE, 0xD6, 0xBA, 0x94, 0x92, 0x52, 0x89, 0x6B, 0x4D, 0xCE, 0x59, 0x0B, 0xFF, + 0x86, 0xDF, 0xF7, 0x9E, 0xEF, 0x7D, 0xF7, 0x9E, 0x0B, 0xFF, 0x86, 0xDF, 0xF7, 0x9E, 0xEF, 0x7D, + 0xF7, 0xBE, 0x07, 0xFF, 0x8E, 0x1C, 0xED, 0x16, 0xED, 0x37, 0xFF, 0x1D, 0xFF, 0xDF, 0xF7, 0x9E, + 0xEF, 0x7D, 0xF7, 0xBE, 0x0B, 0xFF, 0x94, 0xDF, 0xF7, 0x9E, 0xF7, 0x7D, 0xFF, 0xBE, 0xFF, 0xDF, + 0xF7, 0xBE, 0xEF, 0x5D, 0xE7, 0x1C, 0xE7, 0x3C, 0xF7, 0x9E, 0xFF, 0xDF, 0x03, 0xFF, 0x8A, 0xDF, + 0xF7, 0x7E, 0xE7, 0x3C, 0xE7, 0x1C, 0xEF, 0x5D, 0xF7, 0xBE, 0x04, 0xFF, 0x87, 0xFE, 0xDC, 0xEC, + 0xD6, 0xED, 0x37, 0xFF, 0x7E, 0x3A, 0xFF, 0x89, 0xF7, 0x9E, 0xAD, 0x75, 0x5A, 0xCB, 0x73, 0x8D, + 0xD6, 0x9A, 0x3C, 0xFF, 0x8B, 0xEF, 0x5D, 0xA5, 0x14, 0x52, 0xAA, 0x52, 0x8A, 0x9C, 0xF3, 0xEF, + 0x5D, 0x2B, 0xFF, 0xC8, 0x7E, 0xF5, 0xB8, 0xEC, 0x54, 0xEC, 0x95, 0xED, 0x16, 0xED, 0x16, 0xED, + 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, + 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, + 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, + 0x16, 0xED, 0x16, 0xED, 0x16, 0xEC, 0x75, 0xEC, 0x54, 0xF6, 0x19, 0xFF, 0xBE, 0x3B, 0xFF, 0x88, + 0xDF, 0xDE, 0xDA, 0xAD, 0x75, 0xBD, 0xD7, 0xEF, 0x5D, 0x3C, 0xFF, 0x8B, 0xF7, 0x9E, 0xC6, 0x18, + 0x9C, 0xD3, 0xAD, 0x75, 0xDE, 0xFB, 0xFF, 0xDF, 0x2B, 0xFF, 0xC6, 0xDF, 0xFF, 0x1D, 0xF5, 0xD9, + 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, + 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, + 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, + 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xF6, 0x19, + 0xFF, 0x5D, 0x3F, 0xFF, 0x86, 0xDF, 0xEF, 0x7D, 0xF7, 0x9E, 0xFF, 0xDF, 0x3D, 0xFF, 0x88, 0xDF, + 0xF7, 0x9E, 0xEF, 0x5D, 0xEF, 0x7D, 0xFF, 0xDF, 0x2F, 0xFF, 0xC2, 0xDF, 0xFF, 0x9E, 0xFF, 0x3D, + 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, + 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, + 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, + 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x3D, 0xFF, 0x9E, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x26, 0xFF, +}; +// clang-format on diff --git a/keyboards/fpb/rp2040_tft/graphics/qmklogo.qgf.h b/keyboards/fpb/rp2040_tft/graphics/qmklogo.qgf.h new file mode 100644 index 000000000000..41a467de3c92 --- /dev/null +++ b/keyboards/fpb/rp2040_tft/graphics/qmklogo.qgf.h @@ -0,0 +1,11 @@ +// Copyright 2024 QMK -- generated source code only, image retains original copyright +// SPDX-License-Identifier: GPL-2.0-or-later + +// This file was auto-generated by `qmk painter-convert-graphics -i qmklogo.png -f rgb565` + +#pragma once + +#include + +extern const uint32_t gfx_qmklogo_length; +extern const uint8_t gfx_qmklogo[10700]; diff --git a/keyboards/fpb/rp2040_tft/halconf.h b/keyboards/fpb/rp2040_tft/halconf.h new file mode 100644 index 000000000000..5807c53501ae --- /dev/null +++ b/keyboards/fpb/rp2040_tft/halconf.h @@ -0,0 +1,15 @@ +// Copyright 2022 Stefan Kerkmann +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define HAL_USE_I2C TRUE +#define HAL_USE_PWM TRUE +#define HAL_USE_ADC TRUE + +#define HAL_USE_SPI TRUE +//#define SPI_USE_WAIT TRUE +//#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD + +#include_next + diff --git a/keyboards/fpb/rp2040_tft/info.json b/keyboards/fpb/rp2040_tft/info.json new file mode 100644 index 000000000000..16d5569f0857 --- /dev/null +++ b/keyboards/fpb/rp2040_tft/info.json @@ -0,0 +1,51 @@ +{ + "keyboard_name": "Onekey RP2040", + "processor": "RP2040", + "bootloader": "rp2040", + "matrix_pins": { + "cols": ["GP4"], + "rows": ["GP5"] + }, + "backlight": { + "pin": "GP13", + "levels": 8, + } + "ws2812": { + "pin": "GP23" + }, + "indicators": { + "caps_lock": "GP25" + }, + "manufacturer": "QMK", + "url": "", + "maintainer": "qmk", + "usb": { + "vid": "0x0C45", + "pid": "0x6465", + "device_version": "0.0.1" + }, + "tapping": { + "term": 500 + }, + "diode_direction": "COL2ROW", + "features": { + "bootmagic": false, + "mousekey": false, + "extrakey": true, + "console": true, + "command": false, + "nkro": false, + "backlight": true, + "rgblight": true, + "audio": false + }, + "community_layouts": ["ortho_1x1"], + "layouts": { + "LAYOUT_ortho_1x1": { + "layout": [ + {"x": 0, "y": 0, "matrix": [0, 0]} + ] + } + } +} + diff --git a/keyboards/fpb/rp2040_tft/keymaps/default/keymap.c b/keyboards/fpb/rp2040_tft/keymaps/default/keymap.c new file mode 100644 index 000000000000..acef06b3d3d1 --- /dev/null +++ b/keyboards/fpb/rp2040_tft/keymaps/default/keymap.c @@ -0,0 +1,15 @@ +// Copyright 2020 QMK +// SPDX-License-Identifier: GPL-2.0-or-later +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + LAYOUT_ortho_1x1(QK_BACKLIGHT_STEP) +}; + +// https://github.com/qmk/qmk_firmware/blob/master/docs/feature_rgblight.md +void keyboard_post_init_user(void) { + rgblight_enable_noeeprom(); + rgblight_sethsv_noeeprom(HSV_CYAN); + // rgblight_mode_noeeprom(RGBLIGHT_MODE_RAINBOW_SWIRL); + rgblight_mode_noeeprom(RGBLIGHT_MODE_RAINBOW_SWIRL); +} \ No newline at end of file diff --git a/keyboards/fpb/rp2040_tft/keymaps/default/onekey.json b/keyboards/fpb/rp2040_tft/keymaps/default/onekey.json new file mode 100644 index 000000000000..0723e169df4d --- /dev/null +++ b/keyboards/fpb/rp2040_tft/keymaps/default/onekey.json @@ -0,0 +1,24 @@ +{ + "name": "Royal Kludge RK61 RGB", + "vendorId": "0x0c45", + "productId": "0x6465", + "menus": [ + ], + "keycodes": ["qmk_lighting"], + "customKeycodes": [ + {"name": "Windows Mode", "title": "Windows Mode", "shortName": "WIN"}, + {"name": "Mac Mode", "title": "Mac Mode", "shortName": "MAC"}, + {"name": "Bluetooth Host 1", "title": "Bluetooth Host 1", "shortName": "BT1"}, + {"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BT2"}, + {"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BT3"}, + {"name": "Bluetooth Pairing", "title": "Bluetooth Pairing", "shortName": "BT_PAIR"}, + {"name": "Bluetooth Toggle", "title": "Bluetooth Toggle", "shortName": "BT_TOG"}, + {"name": "Bluetooth Reset", "title": "Bluetooth Reset", "shortName": "BT_RST"} + ], + "matrix": {"rows": 5, "cols": 14}, + "layouts": { + "keymap": [ + [ "0,0" ] + ] + } +} \ No newline at end of file diff --git a/keyboards/fpb/rp2040_tft/keymaps/default/rules.mk b/keyboards/fpb/rp2040_tft/keymaps/default/rules.mk new file mode 100644 index 000000000000..036bd6d1c3ec --- /dev/null +++ b/keyboards/fpb/rp2040_tft/keymaps/default/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes \ No newline at end of file diff --git a/keyboards/fpb/rp2040_tft/mcuconf.h b/keyboards/fpb/rp2040_tft/mcuconf.h new file mode 100644 index 000000000000..7e0b89b80527 --- /dev/null +++ b/keyboards/fpb/rp2040_tft/mcuconf.h @@ -0,0 +1,18 @@ +// Copyright 2022 Stefan Kerkmann +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include_next + +#undef RP_PWM_USE_PWM0 +#define RP_PWM_USE_PWM0 TRUE + +#undef RP_PWM_USE_PWM4 +#define RP_PWM_USE_PWM4 TRUE + +#undef RP_PWM_USE_PWM6 +#define RP_PWM_USE_PWM6 TRUE + +#undef RP_SPI_USE_SPI1 +#define RP_SPI_USE_SPI1 TRUE \ No newline at end of file diff --git a/keyboards/fpb/rp2040_tft/qmklogo.qgf.c b/keyboards/fpb/rp2040_tft/qmklogo.qgf.c new file mode 100644 index 000000000000..6994be0b2f3a --- /dev/null +++ b/keyboards/fpb/rp2040_tft/qmklogo.qgf.c @@ -0,0 +1,682 @@ +// Copyright 2024 QMK -- generated source code only, image retains original copyright +// SPDX-License-Identifier: GPL-2.0-or-later + +// This file was auto-generated by `qmk painter-convert-graphics -i qmklogo.png -f rgb565` + +#include + +const uint32_t gfx_qmklogo_length = 10700; + +// clang-format off +const uint8_t gfx_qmklogo[10700] = { + 0x00, 0xFF, 0x12, 0x00, 0x00, 0x51, 0x47, 0x46, 0x01, 0xCC, 0x29, 0x00, 0x00, 0x33, 0xD6, 0xFF, + 0xFF, 0x80, 0x00, 0x80, 0x00, 0x01, 0x00, 0x01, 0xFE, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x02, 0xFD, 0x06, 0x00, 0x00, 0x08, 0x00, 0x01, 0xFF, 0xE8, 0x03, 0x05, 0xFA, 0x9C, 0x29, 0x00, + 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x38, 0xFF, 0x83, 0xF7, 0xBE, 0xF7, 0xBE, 0x02, 0xFF, 0x83, 0xF7, 0x9E, + 0xFF, 0xDF, 0x02, 0xFF, 0x81, 0xF7, 0x9E, 0x02, 0xFF, 0x83, 0xF7, 0xBE, 0xF7, 0xBE, 0x02, 0xFF, + 0x83, 0xF7, 0x9E, 0xFF, 0xDF, 0x7F, 0xFF, 0x67, 0xFF, 0x83, 0xCE, 0x79, 0xCE, 0x79, 0x02, 0xFF, + 0x87, 0xBD, 0xD7, 0xEF, 0x5D, 0xF7, 0x9E, 0xBD, 0xD7, 0x02, 0xFF, 0x83, 0xDE, 0xDB, 0xC6, 0x38, + 0x02, 0xFF, 0x83, 0xC6, 0x18, 0xDE, 0xFB, 0x7F, 0xFF, 0x65, 0xFF, 0x9D, 0xF7, 0xBE, 0xAD, 0x55, + 0xAD, 0x75, 0xF7, 0xBE, 0x8C, 0x71, 0xD6, 0x9A, 0xDE, 0xFB, 0x8C, 0x51, 0xF7, 0x9E, 0xBD, 0xD7, + 0x9C, 0xF3, 0xF7, 0xBE, 0x94, 0xB2, 0xC6, 0x18, 0xFF, 0xDF, 0x16, 0xFF, 0x89, 0xF7, 0x9E, 0xE7, + 0x1C, 0xDE, 0xFB, 0xE7, 0x3C, 0xF7, 0xBE, 0x06, 0xFF, 0x85, 0xF7, 0x9E, 0xE7, 0x3C, 0xF7, 0xBE, + 0x0A, 0xFF, 0x85, 0xF7, 0x9E, 0xE7, 0x3C, 0xFF, 0xDF, 0x03, 0xFF, 0x82, 0xDF, 0xE7, 0x3C, 0x06, + 0xFF, 0x83, 0xEF, 0x5D, 0xF7, 0x9E, 0x09, 0xFF, 0x8A, 0xDF, 0xE7, 0x3C, 0xE7, 0x3C, 0xE7, 0x3C, + 0xE7, 0x1C, 0xF7, 0xBE, 0x02, 0xFF, 0x83, 0xE7, 0x1C, 0xF7, 0x9E, 0x79, 0xFF, 0xA2, 0xDF, 0xDE, + 0xDB, 0xB5, 0xB6, 0x7B, 0xEF, 0x84, 0x10, 0xAD, 0x75, 0x6B, 0x6D, 0x9C, 0xD3, 0xA5, 0x14, 0x6B, + 0x6D, 0xAD, 0x55, 0x8C, 0x51, 0x7B, 0xCF, 0xAD, 0x75, 0x73, 0xAE, 0x8C, 0x71, 0xBD, 0xD7, 0xE7, + 0x1C, 0x12, 0xFF, 0x8D, 0xE7, 0x1C, 0xA5, 0x14, 0x84, 0x30, 0x84, 0x10, 0x8C, 0x51, 0xBD, 0xD7, + 0xF7, 0x9E, 0x04, 0xFF, 0x85, 0xBD, 0xF7, 0x7B, 0xCF, 0xB5, 0xB6, 0x0A, 0xFF, 0x85, 0xAD, 0x55, + 0x7B, 0xCF, 0xD6, 0xBA, 0x02, 0xFF, 0x85, 0xE7, 0x3C, 0x84, 0x30, 0xF7, 0x9E, 0x02, 0xFF, 0x85, + 0xEF, 0x5D, 0x8C, 0x71, 0xC6, 0x38, 0x08, 0xFF, 0x8B, 0xDE, 0xDB, 0x7B, 0xEF, 0x8C, 0x71, 0x8C, + 0x71, 0x8C, 0x51, 0xD6, 0x9A, 0x02, 0xFF, 0x83, 0x7B, 0xEF, 0xC6, 0x18, 0x78, 0xFF, 0xA5, 0xCE, + 0x79, 0x5A, 0xCB, 0x31, 0xA6, 0x31, 0x86, 0x31, 0xA6, 0x31, 0xA6, 0x31, 0x86, 0x31, 0xA6, 0x31, + 0xA6, 0x31, 0x86, 0x31, 0xA6, 0x31, 0xA6, 0x31, 0x86, 0x31, 0xA6, 0x31, 0x86, 0x31, 0x86, 0x31, + 0xA6, 0x6B, 0x4D, 0xE7, 0x1C, 0x0E, 0xFF, 0x8F, 0xEF, 0x7D, 0x73, 0x8E, 0x6B, 0x4D, 0xAD, 0x55, + 0xBD, 0xD7, 0x94, 0x92, 0x4A, 0x69, 0xAD, 0x55, 0x04, 0xFF, 0x87, 0x84, 0x30, 0x31, 0xA6, 0x52, + 0xAA, 0xEF, 0x7D, 0x06, 0xFF, 0x87, 0xE7, 0x1C, 0x52, 0x8A, 0x31, 0x86, 0xAD, 0x75, 0x02, 0xFF, + 0x8D, 0xD6, 0x9A, 0x39, 0xC7, 0xEF, 0x5D, 0xF7, 0xBE, 0x94, 0x92, 0x5A, 0xEB, 0xDE, 0xFB, 0x08, + 0xFF, 0x8B, 0xB5, 0x96, 0x39, 0xC7, 0xAD, 0x55, 0xAD, 0x55, 0xA5, 0x34, 0xDE, 0xDB, 0x02, 0xFF, + 0x83, 0xA5, 0x34, 0xD6, 0x9A, 0x03, 0xFF, 0x80, 0xDF, 0x03, 0xFF, 0x82, 0xDF, 0xF7, 0xBE, 0x05, + 0xFF, 0x80, 0xDF, 0x02, 0xFF, 0x83, 0xF7, 0x9E, 0xFF, 0xDF, 0x04, 0xFF, 0x83, 0xF7, 0xBE, 0xF7, + 0xBE, 0x05, 0xFF, 0x82, 0xDF, 0xFF, 0xDF, 0x07, 0xFF, 0x80, 0xDF, 0x07, 0xFF, 0x80, 0xDF, 0x05, + 0xFF, 0x84, 0xDF, 0xF7, 0x9E, 0xF7, 0xBE, 0x07, 0xFF, 0x80, 0xDF, 0x03, 0xFF, 0x82, 0xDF, 0xF7, + 0xBE, 0x05, 0xFF, 0x84, 0xDF, 0xF7, 0x9E, 0xF7, 0xBE, 0x20, 0xFF, 0xA5, 0x73, 0x8E, 0x29, 0x45, + 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, + 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x21, 0x24, + 0x94, 0xB2, 0x0E, 0xFF, 0x85, 0xA5, 0x34, 0x4A, 0x49, 0xE7, 0x3C, 0x06, 0xFF, 0x85, 0x9C, 0xF3, + 0x4A, 0x49, 0xEF, 0x7D, 0x02, 0xFF, 0x87, 0x84, 0x10, 0x6B, 0x6D, 0x5A, 0xEB, 0xB5, 0x96, 0x06, + 0xFF, 0x87, 0x9C, 0xD3, 0x73, 0xAE, 0x5A, 0xCB, 0xAD, 0x75, 0x02, 0xFF, 0x8B, 0xD6, 0xBA, 0x42, + 0x08, 0xEF, 0x5D, 0xB5, 0x96, 0x52, 0xAA, 0xD6, 0x9A, 0x0A, 0xFF, 0x83, 0xB5, 0x96, 0x52, 0x8A, + 0x0A, 0xFF, 0x83, 0xCE, 0x59, 0xEF, 0x5D, 0x02, 0xFF, 0x9D, 0xDE, 0xDB, 0xD6, 0x9A, 0xCE, 0x79, + 0xAD, 0x75, 0xF7, 0x9E, 0xE7, 0x1C, 0xCE, 0x79, 0xDE, 0xDB, 0xB5, 0x96, 0xBD, 0xF7, 0xEF, 0x5D, + 0xDE, 0xFB, 0xB5, 0xB6, 0xB5, 0xB6, 0xEF, 0x5D, 0x02, 0xFF, 0x83, 0xD6, 0xBA, 0xCE, 0x79, 0x04, + 0xFF, 0x83, 0xDE, 0xDB, 0xC6, 0x38, 0x04, 0xFF, 0x83, 0xEF, 0x7D, 0xC6, 0x18, 0x02, 0xFF, 0x89, + 0xE7, 0x1C, 0xC6, 0x18, 0xB5, 0x96, 0xBD, 0xD7, 0xE7, 0x3C, 0x04, 0xFF, 0x87, 0xCE, 0x59, 0xDE, + 0xFB, 0xBD, 0xF7, 0xBD, 0xF7, 0x02, 0xFF, 0x89, 0xF7, 0x9E, 0xCE, 0x59, 0xB5, 0xB6, 0xBD, 0xD7, + 0xE7, 0x1C, 0x18, 0xFF, 0xAF, 0xF7, 0xBE, 0xE7, 0x1C, 0xDE, 0xFB, 0x4A, 0x69, 0x29, 0x65, 0x31, + 0x86, 0x31, 0xA6, 0x42, 0x08, 0x39, 0xE7, 0x31, 0x86, 0x31, 0x86, 0x39, 0xC7, 0x42, 0x08, 0x31, + 0xA6, 0x31, 0x86, 0x31, 0x86, 0x42, 0x08, 0x39, 0xE7, 0x31, 0x86, 0x31, 0x86, 0x29, 0x65, 0x6B, + 0x4D, 0xE7, 0x1C, 0xE7, 0x1C, 0x0A, 0xFF, 0x83, 0x63, 0x2C, 0x84, 0x30, 0x08, 0xFF, 0x85, 0xE7, + 0x3C, 0x39, 0xC7, 0xCE, 0x79, 0x02, 0xFF, 0x89, 0x84, 0x10, 0x7B, 0xEF, 0x9C, 0xF3, 0x63, 0x2C, + 0xFF, 0xDF, 0x02, 0xFF, 0x89, 0xF7, 0x9E, 0x5A, 0xCB, 0xC6, 0x18, 0x5A, 0xCB, 0xAD, 0x75, 0x02, + 0xFF, 0x89, 0xD6, 0xBA, 0x42, 0x08, 0xB5, 0xB6, 0x5A, 0xCB, 0xBD, 0xF7, 0x0C, 0xFF, 0x8B, 0xB5, + 0xB6, 0x4A, 0x69, 0xEF, 0x5D, 0xEF, 0x5D, 0xEF, 0x5D, 0xFF, 0xDF, 0x02, 0xFF, 0x83, 0x5A, 0xCB, + 0xB5, 0xB6, 0x02, 0xFF, 0x9D, 0x9C, 0xD3, 0x5A, 0xEB, 0x73, 0xAE, 0x73, 0x8E, 0xE7, 0x1C, 0xAD, + 0x55, 0x5A, 0xCB, 0x84, 0x30, 0x84, 0x10, 0x52, 0xAA, 0x8C, 0x71, 0x84, 0x30, 0x84, 0x10, 0x5A, + 0xCB, 0x8C, 0x71, 0x02, 0xFF, 0x85, 0x9C, 0xF3, 0x63, 0x2C, 0xFF, 0xDF, 0x02, 0xFF, 0x85, 0x84, + 0x30, 0x4A, 0x49, 0xF7, 0x9E, 0x02, 0xFF, 0x83, 0xAD, 0x75, 0x63, 0x0C, 0x02, 0xFF, 0x8B, 0x9C, + 0xF3, 0x84, 0x10, 0x8C, 0x71, 0x6B, 0x4D, 0x7B, 0xEF, 0xFF, 0xDF, 0x02, 0xFF, 0x95, 0x6B, 0x4D, + 0x6B, 0x6D, 0x73, 0x8E, 0x84, 0x30, 0xFF, 0xDF, 0xA5, 0x34, 0x6B, 0x6D, 0x94, 0x92, 0x7B, 0xEF, + 0x73, 0x8E, 0xEF, 0x5D, 0x16, 0xFF, 0xB1, 0xE7, 0x3C, 0xA5, 0x34, 0xA5, 0x14, 0x42, 0x08, 0x31, + 0x86, 0x31, 0x86, 0x39, 0xC7, 0xA5, 0x34, 0x7B, 0xEF, 0x29, 0x65, 0x29, 0x65, 0x5A, 0xEB, 0xAD, + 0x75, 0x4A, 0x49, 0x31, 0x86, 0x31, 0x86, 0x94, 0xB2, 0x8C, 0x71, 0x31, 0x86, 0x31, 0x86, 0x29, + 0x65, 0x52, 0xAA, 0xA5, 0x34, 0xAD, 0x55, 0xF7, 0x9E, 0x08, 0xFF, 0x83, 0x52, 0x8A, 0x9C, 0xF3, + 0x08, 0xFF, 0x85, 0xF7, 0x9E, 0x42, 0x08, 0xBD, 0xF7, 0x02, 0xFF, 0x89, 0x84, 0x10, 0x7B, 0xCF, + 0xE7, 0x3C, 0x42, 0x28, 0xD6, 0xBA, 0x02, 0xFF, 0x89, 0xBD, 0xD7, 0x5A, 0xEB, 0xF7, 0xBE, 0x52, + 0xAA, 0xAD, 0x75, 0x02, 0xFF, 0x89, 0xD6, 0xBA, 0x42, 0x08, 0x5A, 0xCB, 0x73, 0x8E, 0xFF, 0xDF, + 0x0C, 0xFF, 0x8B, 0xB5, 0xB6, 0x39, 0xE7, 0x9C, 0xF3, 0x9C, 0xF3, 0x9C, 0xF3, 0xE7, 0x3C, 0x02, + 0xFF, 0x83, 0x52, 0xAA, 0xB5, 0x96, 0x02, 0xFF, 0x87, 0x9C, 0xD3, 0x39, 0xE7, 0xCE, 0x79, 0xFF, + 0xDF, 0x02, 0xFF, 0x85, 0xA5, 0x34, 0x39, 0xE7, 0xD6, 0x9A, 0x02, 0xFF, 0x85, 0x9C, 0xF3, 0x31, + 0xA6, 0xC6, 0x18, 0x02, 0xFF, 0x93, 0xBD, 0xD7, 0x42, 0x28, 0xF7, 0xBE, 0xDE, 0xDB, 0x42, 0x28, + 0xE7, 0x3C, 0xFF, 0xDF, 0x5A, 0xEB, 0x39, 0xE7, 0xCE, 0x59, 0x02, 0xFF, 0x83, 0x73, 0x8E, 0x94, + 0x92, 0x02, 0xFF, 0x8B, 0xDE, 0xFB, 0xF7, 0x9E, 0xEF, 0x7D, 0xC6, 0x38, 0x39, 0xE7, 0xEF, 0x5D, + 0x02, 0xFF, 0x95, 0x63, 0x0C, 0x5A, 0xEB, 0xE7, 0x3C, 0xFF, 0xDF, 0xE7, 0x3C, 0x4A, 0x49, 0xC6, + 0x18, 0xEF, 0x5D, 0xEF, 0x5D, 0x4A, 0x69, 0xAD, 0x75, 0x16, 0xFF, 0x97, 0xF7, 0xBE, 0xDE, 0xFB, + 0xD6, 0xBA, 0x4A, 0x49, 0x31, 0x86, 0x31, 0x86, 0x39, 0xE7, 0xF7, 0xBE, 0xB5, 0xB6, 0x29, 0x45, + 0x29, 0x45, 0x84, 0x10, 0x02, 0xFF, 0x97, 0x5A, 0xEB, 0x29, 0x65, 0x31, 0x86, 0xDE, 0xDB, 0xD6, + 0x9A, 0x29, 0x65, 0x31, 0x86, 0x29, 0x65, 0x63, 0x2C, 0xDE, 0xFB, 0xDE, 0xFB, 0xFF, 0xDF, 0x08, + 0xFF, 0x83, 0x52, 0xAA, 0x9C, 0xD3, 0x08, 0xFF, 0x85, 0xEF, 0x7D, 0x42, 0x08, 0xC6, 0x38, 0x02, + 0xFF, 0x83, 0x84, 0x10, 0x73, 0xAE, 0x02, 0xFF, 0x89, 0x6B, 0x6D, 0x8C, 0x71, 0xFF, 0xDF, 0x6B, + 0x6D, 0xA5, 0x14, 0x02, 0xFF, 0x83, 0x52, 0xAA, 0xAD, 0x75, 0x02, 0xFF, 0x89, 0xD6, 0xBA, 0x42, + 0x08, 0x9C, 0xD3, 0x52, 0xAA, 0xCE, 0x79, 0x0C, 0xFF, 0x8B, 0xB5, 0xB6, 0x39, 0xE7, 0x9C, 0xD3, + 0x9C, 0xD3, 0x9C, 0xD3, 0xE7, 0x3C, 0x02, 0xFF, 0x83, 0x52, 0xAA, 0xB5, 0x96, 0x02, 0xFF, 0x83, + 0x94, 0xB2, 0x6B, 0x4D, 0x06, 0xFF, 0x83, 0xA5, 0x14, 0x63, 0x0C, 0x04, 0xFF, 0x83, 0xC6, 0x18, + 0x4A, 0x69, 0x04, 0xFF, 0x99, 0xDE, 0xDB, 0x42, 0x08, 0xEF, 0x5D, 0xFF, 0xDF, 0x52, 0xAA, 0xB5, + 0xB6, 0xDE, 0xDB, 0x63, 0x2C, 0x7B, 0xCF, 0x94, 0x92, 0xF7, 0xBE, 0x4A, 0x69, 0xD6, 0x9A, 0x02, + 0xFF, 0x8B, 0xE7, 0x1C, 0xBD, 0xF7, 0xAD, 0x75, 0x9C, 0xF3, 0x42, 0x08, 0xE7, 0x1C, 0x02, 0xFF, + 0x83, 0x5A, 0xEB, 0xA5, 0x34, 0x04, 0xFF, 0x8D, 0xC6, 0x38, 0x39, 0xE7, 0xA5, 0x34, 0xA5, 0x34, + 0xAD, 0x55, 0x63, 0x0C, 0x9C, 0xF3, 0x16, 0xFF, 0x97, 0xF7, 0x9E, 0xD6, 0x9A, 0xCE, 0x59, 0x4A, + 0x49, 0x31, 0x86, 0x31, 0x86, 0x39, 0xE7, 0xEF, 0x7D, 0xB5, 0x96, 0x29, 0x45, 0x29, 0x45, 0x7B, + 0xEF, 0x02, 0xFF, 0x97, 0x5A, 0xEB, 0x29, 0x65, 0x31, 0x86, 0xD6, 0xBA, 0xCE, 0x79, 0x29, 0x65, + 0x31, 0x86, 0x29, 0x65, 0x63, 0x0C, 0xD6, 0x9A, 0xD6, 0x9A, 0xFF, 0xDF, 0x08, 0xFF, 0x85, 0x73, + 0x8E, 0x73, 0xAE, 0xFF, 0xDF, 0x06, 0xFF, 0x85, 0xCE, 0x59, 0x42, 0x08, 0xE7, 0x1C, 0x02, 0xFF, + 0x83, 0x84, 0x10, 0x73, 0xAE, 0x02, 0xFF, 0x89, 0xBD, 0xD7, 0x52, 0x8A, 0xC6, 0x18, 0x52, 0x8A, + 0xE7, 0x3C, 0x02, 0xFF, 0x83, 0x52, 0xAA, 0xAD, 0x75, 0x02, 0xFF, 0x8B, 0xD6, 0xBA, 0x42, 0x08, + 0xEF, 0x5D, 0x8C, 0x51, 0x63, 0x0C, 0xE7, 0x3C, 0x0A, 0xFF, 0x83, 0xB5, 0x96, 0x52, 0x8A, 0x0A, + 0xFF, 0x83, 0x52, 0xAA, 0xB5, 0x96, 0x02, 0xFF, 0x83, 0x94, 0xB2, 0x6B, 0x6D, 0x06, 0xFF, 0x83, + 0xA5, 0x14, 0x63, 0x0C, 0x04, 0xFF, 0x85, 0xC6, 0x18, 0x4A, 0x69, 0xFF, 0xDF, 0x02, 0xFF, 0x85, + 0xDE, 0xDB, 0x42, 0x28, 0xEF, 0x5D, 0x02, 0xFF, 0x9C, 0x8C, 0x71, 0x7B, 0xCF, 0xA5, 0x34, 0x8C, + 0x51, 0xC6, 0x18, 0x63, 0x0C, 0xC6, 0x18, 0x5A, 0xCB, 0xF7, 0xBE, 0xF7, 0xBE, 0x7B, 0xCF, 0x7B, + 0xCF, 0xA5, 0x14, 0x9C, 0xD3, 0x39, 0x02, 0xE7, 0x80, 0x3C, 0x02, 0xFF, 0x83, 0x5A, 0xEB, 0xAD, + 0x55, 0x04, 0xFF, 0x8D, 0xC6, 0x18, 0x39, 0xE7, 0xAD, 0x55, 0xAD, 0x75, 0xAD, 0x75, 0xB5, 0x96, + 0xDE, 0xFB, 0x16, 0xFF, 0x97, 0xEF, 0x5D, 0xAD, 0x75, 0xAD, 0x55, 0x42, 0x28, 0x31, 0x86, 0x31, + 0x86, 0x39, 0xE7, 0xEF, 0x7D, 0xB5, 0x96, 0x29, 0x45, 0x29, 0x45, 0x7B, 0xEF, 0x02, 0xFF, 0x97, + 0x5A, 0xEB, 0x29, 0x65, 0x31, 0x86, 0xD6, 0xBA, 0xCE, 0x79, 0x29, 0x65, 0x31, 0x86, 0x29, 0x65, + 0x5A, 0xCB, 0xB5, 0x96, 0xB5, 0x96, 0xF7, 0xBE, 0x08, 0xFF, 0x91, 0xB5, 0xB6, 0x4A, 0x49, 0xC6, + 0x18, 0xE7, 0x3C, 0xE7, 0x3C, 0xDE, 0xDB, 0x6B, 0x6D, 0x6B, 0x6D, 0xFF, 0xDF, 0x02, 0xFF, 0x83, + 0x84, 0x10, 0x73, 0xAE, 0x02, 0xFF, 0x87, 0xF7, 0x9E, 0x5A, 0xCB, 0x52, 0x8A, 0x8C, 0x51, 0x04, + 0xFF, 0x83, 0x52, 0xAA, 0xAD, 0x75, 0x02, 0xFF, 0x8A, 0xD6, 0xBA, 0x39, 0xE7, 0xEF, 0x7D, 0xF7, + 0x9E, 0x6B, 0x4D, 0x7B, 0x02, 0xEF, 0x80, 0x7D, 0x08, 0xFF, 0x83, 0xB5, 0x96, 0x4A, 0x69, 0x0A, + 0xFF, 0x83, 0x52, 0xAA, 0xB5, 0x96, 0x02, 0xFF, 0x83, 0x94, 0xB2, 0x6B, 0x6D, 0x06, 0xFF, 0x83, + 0xA5, 0x14, 0x63, 0x0C, 0x04, 0xFF, 0x85, 0xC6, 0x18, 0x4A, 0x69, 0xFF, 0xDF, 0x02, 0xFF, 0x85, + 0xDE, 0xDB, 0x42, 0x08, 0xEF, 0x5D, 0x02, 0xFF, 0x86, 0xCE, 0x79, 0x52, 0x8A, 0x63, 0x0C, 0xBD, + 0x02, 0xF7, 0x86, 0x9E, 0x5A, 0xCB, 0x63, 0x2C, 0x8C, 0x71, 0x02, 0xFF, 0x8D, 0xE7, 0x1C, 0x39, + 0xE7, 0xCE, 0x59, 0xEF, 0x7D, 0xCE, 0x59, 0x42, 0x08, 0xE7, 0x1C, 0x02, 0xFF, 0x83, 0x5A, 0xEB, + 0xAD, 0x55, 0x04, 0xFF, 0x8D, 0xE7, 0x1C, 0x4A, 0x69, 0xCE, 0x59, 0xEF, 0x5D, 0xEF, 0x5D, 0xDE, + 0xFB, 0xF7, 0xBE, 0x17, 0xFF, 0x96, 0xDF, 0xE7, 0x3C, 0xE7, 0x1C, 0x4A, 0x69, 0x31, 0x86, 0x31, + 0x86, 0x39, 0xE7, 0xEF, 0x7D, 0xB5, 0xB6, 0x29, 0x45, 0x29, 0x45, 0x7B, 0xEF, 0x02, 0xFF, 0x95, + 0x5A, 0xEB, 0x29, 0x65, 0x31, 0x86, 0xD6, 0xBA, 0xCE, 0x59, 0x29, 0x65, 0x31, 0x86, 0x29, 0x65, + 0x6B, 0x4D, 0xE7, 0x3C, 0xEF, 0x5D, 0x0A, 0xFF, 0x97, 0xF7, 0xBE, 0x8C, 0x51, 0x6B, 0x4D, 0x94, + 0xB2, 0x9C, 0xF3, 0x84, 0x10, 0x4A, 0x49, 0x8C, 0x51, 0xDE, 0xFB, 0xFF, 0xDF, 0x8C, 0x71, 0x84, + 0x10, 0x04, 0xFF, 0x85, 0x9C, 0xD3, 0x39, 0xE7, 0xD6, 0x9A, 0x04, 0xFF, 0x83, 0x63, 0x2C, 0xB5, + 0xB6, 0x02, 0xFF, 0x85, 0xDE, 0xDB, 0x52, 0x8A, 0xEF, 0x5D, 0x02, 0xFF, 0x85, 0xD6, 0xBA, 0x52, + 0xAA, 0xBD, 0xD7, 0x08, 0xFF, 0x83, 0xBD, 0xD7, 0x63, 0x0C, 0x0A, 0xFF, 0x83, 0x63, 0x2C, 0xBD, + 0xD7, 0x02, 0xFF, 0x83, 0x9C, 0xF3, 0x7B, 0xEF, 0x06, 0xFF, 0x83, 0xAD, 0x55, 0x73, 0x8E, 0x04, + 0xFF, 0x85, 0xC6, 0x38, 0x63, 0x0C, 0xFF, 0xDF, 0x02, 0xFF, 0x85, 0xDE, 0xFB, 0x52, 0xAA, 0xEF, + 0x7D, 0x02, 0xFF, 0x87, 0xF7, 0xBE, 0x63, 0x0C, 0x52, 0x8A, 0xEF, 0x5D, 0x02, 0xFF, 0x85, 0x7B, + 0xEF, 0x42, 0x08, 0xCE, 0x79, 0x02, 0xFF, 0x8D, 0xF7, 0x9E, 0x6B, 0x4D, 0x8C, 0x71, 0xAD, 0x75, + 0x84, 0x30, 0x52, 0xAA, 0xE7, 0x3C, 0x02, 0xFF, 0x83, 0x6B, 0x6D, 0xB5, 0x96, 0x06, 0xFF, 0x8B, + 0x94, 0xB2, 0x73, 0x8E, 0xAD, 0x55, 0xAD, 0x55, 0x94, 0x92, 0xE7, 0x1C, 0x16, 0xFF, 0x97, 0xEF, + 0x5D, 0xB5, 0xB6, 0xB5, 0x96, 0x42, 0x28, 0x31, 0x86, 0x31, 0x86, 0x31, 0xA6, 0xE7, 0x1C, 0xC6, + 0x38, 0x31, 0x86, 0x29, 0x45, 0x7B, 0xEF, 0x02, 0xFF, 0x84, 0x5A, 0xEB, 0x29, 0x65, 0x39, 0x02, + 0xE7, 0x90, 0x3C, 0xBD, 0xD7, 0x29, 0x65, 0x31, 0x86, 0x29, 0x65, 0x5A, 0xCB, 0xBD, 0xD7, 0xBD, + 0xD7, 0xF7, 0xBE, 0x0A, 0xFF, 0x95, 0xF7, 0xBE, 0xBD, 0xD7, 0x9C, 0xD3, 0x94, 0xB2, 0xB5, 0xB6, + 0xBD, 0xF7, 0x6B, 0x6D, 0x7B, 0xEF, 0xDE, 0xDB, 0xCE, 0x59, 0xC6, 0x38, 0x04, 0xFF, 0x85, 0xE7, + 0x1C, 0xAD, 0x75, 0xFF, 0xDF, 0x04, 0xFF, 0x83, 0xBD, 0xD7, 0xDE, 0xFB, 0x02, 0xFF, 0x85, 0xEF, + 0x7D, 0xAD, 0x75, 0xF7, 0xBE, 0x04, 0xFF, 0x83, 0xC6, 0x38, 0xBD, 0xF7, 0x08, 0xFF, 0x83, 0xE7, + 0x1C, 0xB5, 0xB6, 0x0A, 0xFF, 0x83, 0xBD, 0xD7, 0xDE, 0xFB, 0x02, 0xFF, 0x83, 0xD6, 0x9A, 0xC6, + 0x18, 0x06, 0xFF, 0x83, 0xDE, 0xDB, 0xBD, 0xF7, 0x04, 0xFF, 0x83, 0xE7, 0x3C, 0xB5, 0xB6, 0x04, + 0xFF, 0x85, 0xF7, 0x9E, 0xB5, 0x96, 0xF7, 0xBE, 0x04, 0xFF, 0x83, 0xC6, 0x18, 0xB5, 0xB6, 0x04, + 0xFF, 0x85, 0xD6, 0x9A, 0xAD, 0x55, 0xF7, 0xBE, 0x04, 0xFF, 0x8B, 0xDE, 0xDB, 0x9C, 0xF3, 0x9C, + 0xF3, 0xD6, 0x9A, 0xBD, 0xD7, 0xF7, 0xBE, 0x02, 0xFF, 0x83, 0xBD, 0xD7, 0xDE, 0xDB, 0x06, 0xFF, + 0x8B, 0xF7, 0xBE, 0xB5, 0xB6, 0x9C, 0xD3, 0x9C, 0xD3, 0xB5, 0xB6, 0xF7, 0xBE, 0x16, 0xFF, 0x97, + 0xEF, 0x7D, 0xC6, 0x18, 0xBD, 0xF7, 0x4A, 0x49, 0x29, 0x65, 0x31, 0x86, 0x29, 0x65, 0xB5, 0x96, + 0xEF, 0x5D, 0x5A, 0xEB, 0x31, 0x86, 0x84, 0x10, 0x02, 0xFF, 0x97, 0x63, 0x0C, 0x31, 0xA6, 0x73, + 0xAE, 0xF7, 0xBE, 0x84, 0x30, 0x29, 0x65, 0x31, 0x86, 0x29, 0x65, 0x5A, 0xEB, 0xC6, 0x18, 0xC6, + 0x38, 0xF7, 0xBE, 0x16, 0xFF, 0x85, 0xE7, 0x1C, 0x94, 0xB2, 0xCE, 0x59, 0x7F, 0xFF, 0x34, 0xFF, + 0x96, 0xDF, 0xE7, 0x1C, 0xDE, 0xFB, 0x4A, 0x69, 0x31, 0x86, 0x31, 0x86, 0x29, 0x65, 0x63, 0x0C, + 0xDE, 0xFB, 0xC6, 0x38, 0x73, 0xAE, 0xA5, 0x14, 0x02, 0xFF, 0x95, 0x8C, 0x51, 0x84, 0x10, 0xD6, + 0x9A, 0xC6, 0x38, 0x42, 0x08, 0x31, 0x86, 0x31, 0x86, 0x29, 0x65, 0x6B, 0x4D, 0xE7, 0x1C, 0xE7, + 0x3C, 0x7F, 0xFF, 0x51, 0xFF, 0x97, 0xE7, 0x3C, 0xAD, 0x55, 0xA5, 0x34, 0x42, 0x28, 0x31, 0x86, + 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x6B, 0x6D, 0xBD, 0xF7, 0xD6, 0x9A, 0xDE, 0xFB, 0x02, 0xFF, + 0x97, 0xDE, 0xDB, 0xCE, 0x79, 0xAD, 0x75, 0x52, 0x8A, 0x29, 0x65, 0x31, 0x86, 0x31, 0x86, 0x29, + 0x65, 0x52, 0xAA, 0xAD, 0x75, 0xAD, 0x75, 0xF7, 0xBE, 0x0C, 0xFF, 0x83, 0xF7, 0xBE, 0xF7, 0xBE, + 0x40, 0xFF, 0x81, 0xF7, 0xBE, 0x17, 0xFF, 0x84, 0xDF, 0xF7, 0x9E, 0xFF, 0xDF, 0x46, 0xFF, 0x83, + 0xEF, 0x7D, 0xFF, 0xDF, 0x16, 0xFF, 0x97, 0xF7, 0xBE, 0xDE, 0xDB, 0xD6, 0xBA, 0x4A, 0x49, 0x29, + 0x65, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x29, 0x65, 0x39, 0xE7, 0x52, 0xAA, 0xA5, 0x14, 0x02, + 0xFF, 0x97, 0x8C, 0x51, 0x52, 0x8A, 0x31, 0xA6, 0x29, 0x65, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, + 0x29, 0x65, 0x63, 0x2C, 0xDE, 0xDB, 0xDE, 0xDB, 0xFF, 0xDF, 0x0A, 0xFF, 0x87, 0xDE, 0xFB, 0xC6, + 0x38, 0xC6, 0x38, 0xE7, 0x3C, 0x3D, 0xFF, 0x82, 0xDF, 0xCE, 0x59, 0x02, 0xFF, 0x83, 0xEF, 0x5D, + 0xF7, 0xBE, 0x0E, 0xFF, 0x87, 0xF7, 0xBE, 0xCE, 0x79, 0xC6, 0x18, 0xD6, 0xBA, 0x31, 0xFF, 0x82, + 0xDF, 0xEF, 0x5D, 0x12, 0xFF, 0x83, 0xAD, 0x75, 0xE7, 0x3C, 0x16, 0xFF, 0xB1, 0xF7, 0x9E, 0xCE, + 0x79, 0xCE, 0x59, 0x4A, 0x49, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, + 0x86, 0x21, 0x24, 0x73, 0xAE, 0xEF, 0x5D, 0x52, 0xAA, 0x29, 0x45, 0x31, 0x86, 0x31, 0x86, 0x31, + 0x86, 0x31, 0x86, 0x31, 0x86, 0x29, 0x65, 0x63, 0x0C, 0xD6, 0x9A, 0xD6, 0x9A, 0xFF, 0xDF, 0x08, + 0xFF, 0x89, 0xE7, 0x3C, 0x8C, 0x51, 0xA5, 0x34, 0xAD, 0x55, 0xBD, 0xD7, 0x02, 0xFF, 0x85, 0xEF, + 0x5D, 0xE7, 0x1C, 0xEF, 0x5D, 0x03, 0xFF, 0x8C, 0xDF, 0xEF, 0x5D, 0xE7, 0x3C, 0xEF, 0x5D, 0xF7, + 0x9E, 0xE7, 0x1C, 0xEF, 0x7D, 0x02, 0xFF, 0x8D, 0xEF, 0x7D, 0xEF, 0x5D, 0xE7, 0x1C, 0xF7, 0x9E, + 0xEF, 0x5D, 0xE7, 0x1C, 0xFF, 0xDF, 0x02, 0xFF, 0x81, 0xEF, 0x5D, 0x03, 0xFF, 0x82, 0xDF, 0xEF, + 0x7D, 0x02, 0xFF, 0x95, 0xEF, 0x5D, 0xEF, 0x5D, 0xE7, 0x1C, 0xFF, 0xDF, 0xF7, 0x9E, 0xAD, 0x55, + 0xFF, 0xDF, 0xA5, 0x14, 0xCE, 0x59, 0xF7, 0x9E, 0xEF, 0x5D, 0x04, 0xFF, 0x81, 0xEF, 0x5D, 0x04, + 0xFF, 0x8B, 0xDE, 0xDB, 0x73, 0xAE, 0xAD, 0x75, 0xB5, 0x96, 0xFF, 0xDF, 0xEF, 0x5D, 0x04, 0xFF, + 0x81, 0xEF, 0x5D, 0x02, 0xFF, 0x87, 0xEF, 0x7D, 0xEF, 0x7D, 0xE7, 0x1C, 0xF7, 0x9E, 0x02, 0xFF, + 0x87, 0xEF, 0x7D, 0xEF, 0x7D, 0xE7, 0x1C, 0xEF, 0x7D, 0x03, 0xFF, 0x86, 0xDF, 0xE7, 0x3C, 0xE7, + 0x1C, 0xF7, 0x9E, 0x02, 0xFF, 0x8B, 0xEF, 0x7D, 0xEF, 0x5D, 0xE7, 0x3C, 0xD6, 0xBA, 0x9C, 0xF3, + 0xEF, 0x5D, 0x02, 0xFF, 0x85, 0xEF, 0x7D, 0xE7, 0x1C, 0xEF, 0x5D, 0x04, 0xFF, 0x87, 0xE7, 0x3C, + 0xE7, 0x3C, 0x7B, 0xEF, 0xD6, 0xBA, 0x16, 0xFF, 0xB1, 0xE7, 0x3C, 0xAD, 0x75, 0xAD, 0x55, 0x42, + 0x28, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x52, + 0xAA, 0x94, 0xB2, 0x42, 0x28, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, + 0x86, 0x29, 0x65, 0x5A, 0xCB, 0xAD, 0x75, 0xB5, 0x96, 0xF7, 0xBE, 0x08, 0xFF, 0x83, 0xA5, 0x34, + 0x94, 0xB2, 0x04, 0xFF, 0x99, 0xF7, 0xBE, 0xEF, 0x7D, 0xAD, 0x75, 0xA5, 0x34, 0xA5, 0x34, 0xE7, + 0x3C, 0xDE, 0xFB, 0xA5, 0x14, 0xAD, 0x75, 0x9C, 0xF3, 0xC6, 0x18, 0xA5, 0x14, 0xB5, 0x96, 0x02, + 0xFF, 0x91, 0xB5, 0xB6, 0xAD, 0x75, 0xA5, 0x14, 0xAD, 0x75, 0xBD, 0xD7, 0x9C, 0xD3, 0xD6, 0xBA, + 0xF7, 0xBE, 0xAD, 0x55, 0x02, 0xFF, 0xA1, 0xE7, 0x1C, 0xB5, 0x96, 0xFF, 0xDF, 0xA5, 0x14, 0xB5, + 0xB6, 0x9C, 0xD3, 0xD6, 0xBA, 0xFF, 0xDF, 0xAD, 0x75, 0xE7, 0x3C, 0x63, 0x0C, 0x8C, 0x71, 0xD6, + 0xBA, 0xA5, 0x34, 0xFF, 0xDF, 0xEF, 0x5D, 0xAD, 0x75, 0x04, 0xFF, 0x87, 0xCE, 0x59, 0x7B, 0xEF, + 0xDE, 0xDB, 0xF7, 0xBE, 0x02, 0xFF, 0x87, 0xAD, 0x55, 0xEF, 0x7D, 0xFF, 0xDF, 0xA5, 0x34, 0x02, + 0xFF, 0x87, 0xAD, 0x75, 0xB5, 0x96, 0xA5, 0x14, 0xB5, 0x96, 0x02, 0xFF, 0xB3, 0xB5, 0x96, 0xB5, + 0x96, 0xA5, 0x14, 0xB5, 0x96, 0xFF, 0xDF, 0xD6, 0x9A, 0xA5, 0x34, 0xA5, 0x34, 0xB5, 0xB6, 0xFF, + 0xDF, 0xB5, 0x96, 0xA5, 0x34, 0xB5, 0xB6, 0xA5, 0x34, 0x5A, 0xEB, 0xBD, 0xF7, 0xEF, 0x7D, 0xAD, + 0x75, 0xAD, 0x55, 0xAD, 0x55, 0xF7, 0x9E, 0xDE, 0xFB, 0x9C, 0xF3, 0xAD, 0x75, 0x6B, 0x4D, 0xDE, + 0xDB, 0x18, 0xFF, 0xAD, 0xF7, 0xBE, 0xF7, 0x9E, 0x5A, 0xCB, 0x29, 0x65, 0x31, 0x86, 0x31, 0x86, + 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x29, 0x65, 0x31, 0x86, 0x31, 0x86, + 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x29, 0x45, 0x7B, 0xCF, 0xF7, 0xBE, + 0xF7, 0xBE, 0x0A, 0xFF, 0x83, 0x84, 0x30, 0xBD, 0xF7, 0x06, 0xFF, 0xAB, 0xB5, 0x96, 0x94, 0x92, + 0xE7, 0x1C, 0x9C, 0xD3, 0xA5, 0x34, 0xCE, 0x79, 0x6B, 0x4D, 0xDE, 0xDB, 0x73, 0xAE, 0x94, 0xB2, + 0xD6, 0xBA, 0x6B, 0x6D, 0xFF, 0xDF, 0x84, 0x10, 0xA5, 0x14, 0xD6, 0x9A, 0x5A, 0xCB, 0xCE, 0x79, + 0xAD, 0x55, 0x94, 0x92, 0xEF, 0x7D, 0x73, 0x8E, 0x02, 0xFF, 0xA1, 0xD6, 0x9A, 0x84, 0x30, 0xF7, + 0xBE, 0x5A, 0xEB, 0xD6, 0x9A, 0xAD, 0x75, 0x8C, 0x71, 0xF7, 0xBE, 0x73, 0x8E, 0xF7, 0xBE, 0x7B, + 0xEF, 0xB5, 0xB6, 0xEF, 0x7D, 0x7B, 0xCF, 0xDE, 0xFB, 0xBD, 0xF7, 0x94, 0xB2, 0x04, 0xFF, 0xD1, + 0xF7, 0x9E, 0x9C, 0xD3, 0x8C, 0x71, 0xBD, 0xD7, 0xFF, 0xDF, 0x73, 0xAE, 0xE7, 0x1C, 0xFF, 0xDF, + 0x6B, 0x6D, 0xFF, 0xDF, 0x73, 0xAE, 0xAD, 0x55, 0xDE, 0xDB, 0x6B, 0x6D, 0xEF, 0x5D, 0x7B, 0xCF, + 0xAD, 0x55, 0xDE, 0xDB, 0x6B, 0x6D, 0xE7, 0x1C, 0x7B, 0xEF, 0xC6, 0x38, 0xDE, 0xFB, 0x73, 0x8E, + 0xE7, 0x3C, 0x84, 0x10, 0x9C, 0xD3, 0xE7, 0x1C, 0xC6, 0x38, 0x73, 0xAE, 0xE7, 0x3C, 0xBD, 0xF7, + 0x7B, 0xEF, 0xCE, 0x59, 0x7B, 0xEF, 0xCE, 0x79, 0x94, 0xB2, 0xAD, 0x55, 0xDE, 0xDB, 0x63, 0x2C, + 0xDE, 0xDB, 0x1C, 0xFF, 0xA5, 0x94, 0xB2, 0x39, 0xC7, 0x31, 0x86, 0x31, 0xA6, 0x31, 0xA6, 0x31, + 0x86, 0x31, 0xA6, 0x31, 0x86, 0x31, 0x86, 0x31, 0xA6, 0x31, 0x86, 0x31, 0xA6, 0x31, 0xA6, 0x31, + 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0xA6, 0x39, 0xE7, 0xB5, 0x96, 0x0E, 0xFF, 0x85, 0x94, 0x92, + 0xAD, 0x55, 0xFF, 0xDF, 0x02, 0xFF, 0x85, 0xF7, 0xBE, 0x94, 0x92, 0xBD, 0xD7, 0x02, 0xFF, 0x87, + 0xC6, 0x38, 0x8C, 0x71, 0xCE, 0x79, 0x94, 0x92, 0x02, 0xFF, 0x83, 0x94, 0xB2, 0xC6, 0x18, 0x02, + 0xFF, 0x87, 0x73, 0xAE, 0xF7, 0x9E, 0x8C, 0x51, 0xD6, 0xBA, 0x02, 0xFF, 0x81, 0x73, 0x8E, 0x02, + 0xFF, 0x87, 0xD6, 0x9A, 0x8C, 0x51, 0xF7, 0x9E, 0x73, 0xAE, 0x02, 0xFF, 0x87, 0xCE, 0x59, 0x84, + 0x30, 0xF7, 0xBE, 0x73, 0xAE, 0x02, 0xFF, 0x87, 0xDE, 0xDB, 0x84, 0x10, 0xF7, 0xBE, 0x73, 0xAE, + 0x02, 0xFF, 0x83, 0x8C, 0x71, 0xCE, 0x79, 0x02, 0xFF, 0x87, 0xB5, 0x96, 0x9C, 0xF3, 0x8C, 0x71, + 0xD6, 0xBA, 0x05, 0xFF, 0x96, 0xDF, 0xFF, 0xDF, 0xC6, 0x38, 0x63, 0x2C, 0xE7, 0x1C, 0x7B, 0xEF, + 0xE7, 0x1C, 0xF7, 0xBE, 0x73, 0x8E, 0xFF, 0xDF, 0x7B, 0xEF, 0xDE, 0xDB, 0x02, 0xFF, 0x87, 0x7B, + 0xCF, 0xDE, 0xFB, 0x84, 0x10, 0xDE, 0xDB, 0x02, 0xFF, 0x87, 0x7B, 0xEF, 0xCE, 0x59, 0x73, 0x8E, + 0xF7, 0xBE, 0x02, 0xFF, 0x87, 0x84, 0x10, 0xD6, 0x9A, 0x8C, 0x51, 0xD6, 0xBA, 0x02, 0xFF, 0x83, + 0xDE, 0xDB, 0x84, 0x10, 0x02, 0xFF, 0x8D, 0xA5, 0x14, 0x7B, 0xCF, 0xB5, 0xB6, 0x9C, 0xF3, 0xD6, + 0xBA, 0x84, 0x10, 0xD6, 0xBA, 0x02, 0xFF, 0x83, 0x7B, 0xEF, 0xD6, 0xBA, 0x1C, 0xFF, 0xA5, 0xEF, + 0x5D, 0x84, 0x30, 0x5A, 0xEB, 0x4A, 0x49, 0x4A, 0x49, 0x5A, 0xCB, 0x42, 0x28, 0x52, 0x8A, 0x52, + 0xAA, 0x42, 0x28, 0x5A, 0xCB, 0x4A, 0x69, 0x4A, 0x49, 0x5A, 0xCB, 0x42, 0x28, 0x4A, 0x69, 0x5A, + 0xEB, 0x94, 0xB2, 0xF7, 0xBE, 0x0E, 0xFF, 0x97, 0xCE, 0x59, 0x84, 0x10, 0xD6, 0xBA, 0xDE, 0xDB, + 0xD6, 0xBA, 0xB5, 0x96, 0x9C, 0xD3, 0xDE, 0xFB, 0xA5, 0x14, 0xB5, 0x96, 0xCE, 0x79, 0x94, 0xB2, + 0x02, 0xFF, 0x83, 0x9C, 0xD3, 0xC6, 0x18, 0x02, 0xFF, 0x9F, 0x7B, 0xEF, 0xF7, 0x9E, 0x8C, 0x71, + 0xD6, 0xBA, 0xFF, 0xDF, 0x7B, 0xCF, 0xFF, 0xDF, 0xD6, 0x9A, 0x8C, 0x71, 0xF7, 0xBE, 0x7B, 0xCF, + 0xDE, 0xDB, 0xAD, 0x55, 0x8C, 0x51, 0xF7, 0xBE, 0x7B, 0xEF, 0x02, 0xFF, 0x87, 0xDE, 0xDB, 0x8C, + 0x51, 0xF7, 0xBE, 0x7B, 0xCF, 0x02, 0xFF, 0x8D, 0x94, 0xB2, 0xB5, 0x96, 0xF7, 0x9E, 0xEF, 0x5D, + 0x6B, 0x6D, 0x84, 0x10, 0xFF, 0xDF, 0x04, 0xFF, 0x91, 0xE7, 0x1C, 0xD6, 0xBA, 0xDE, 0xDB, 0x7B, + 0xCF, 0xDE, 0xFB, 0x94, 0x92, 0xBD, 0xF7, 0xCE, 0x79, 0x6B, 0x6D, 0x02, 0xFF, 0x86, 0x7B, 0xCF, + 0xB5, 0x96, 0xDE, 0xDB, 0x7B, 0x02, 0xEF, 0x98, 0x7D, 0x7B, 0xEF, 0xAD, 0x75, 0xDE, 0xDB, 0x7B, + 0xEF, 0xE7, 0x3C, 0x84, 0x30, 0xCE, 0x59, 0xDE, 0xFB, 0x84, 0x10, 0xEF, 0x5D, 0x8C, 0x71, 0xD6, + 0xBA, 0x02, 0xFF, 0x99, 0xE7, 0x1C, 0x7B, 0xCF, 0xE7, 0x3C, 0xBD, 0xF7, 0x94, 0x92, 0xDE, 0xDB, + 0xDE, 0xDB, 0xFF, 0xDF, 0x9C, 0xD3, 0xB5, 0x96, 0xDE, 0xFB, 0x73, 0x8E, 0xDE, 0xDB, 0x1F, 0xFF, + 0x9E, 0xDF, 0xDE, 0xDB, 0x94, 0xB2, 0x9C, 0xD3, 0xD6, 0xBA, 0x84, 0x10, 0xBD, 0xD7, 0xC6, 0x18, + 0x7B, 0xEF, 0xD6, 0x9A, 0xA5, 0x34, 0x8C, 0x71, 0xD6, 0xBA, 0x8C, 0x51, 0xAD, 0x55, 0xDE, 0xFB, + 0x14, 0xFF, 0x95, 0xB5, 0x96, 0x9C, 0xD3, 0x9C, 0xF3, 0xC6, 0x38, 0xF7, 0x9E, 0xA5, 0x14, 0xA5, + 0x14, 0xA5, 0x34, 0xF7, 0x9E, 0xDE, 0xFB, 0xBD, 0xD7, 0x02, 0xFF, 0x83, 0xBD, 0xF7, 0xDE, 0xDB, + 0x02, 0xFF, 0x87, 0xAD, 0x55, 0xF7, 0xBE, 0xB5, 0xB6, 0xE7, 0x1C, 0x02, 0xFF, 0x81, 0xAD, 0x55, + 0x02, 0xFF, 0x83, 0xE7, 0x1C, 0xB5, 0xB6, 0x02, 0xFF, 0x8B, 0xB5, 0x96, 0x9C, 0xD3, 0xA5, 0x34, + 0xBD, 0xD7, 0xFF, 0xDF, 0xAD, 0x55, 0x02, 0xFF, 0x87, 0xE7, 0x3C, 0xB5, 0x96, 0xFF, 0xDF, 0xAD, + 0x55, 0x02, 0xFF, 0x85, 0xCE, 0x79, 0x94, 0x92, 0xDE, 0xFB, 0x02, 0xFF, 0x83, 0x73, 0x8E, 0xAD, + 0x55, 0x06, 0xFF, 0x87, 0xD6, 0xBA, 0x9C, 0xF3, 0x9C, 0xF3, 0xB5, 0x96, 0x02, 0xFF, 0x87, 0xCE, + 0x79, 0x94, 0xB2, 0xAD, 0x75, 0xA5, 0x14, 0x02, 0xFF, 0x87, 0x7B, 0xEF, 0x94, 0xB2, 0x9C, 0xF3, + 0xBD, 0xD7, 0x02, 0xFF, 0x87, 0x7B, 0xEF, 0x94, 0x92, 0x9C, 0xF3, 0xB5, 0xB6, 0x02, 0xFF, 0x87, + 0xCE, 0x79, 0x9C, 0xD3, 0xA5, 0x14, 0xBD, 0xF7, 0x02, 0xFF, 0x83, 0xB5, 0x96, 0xE7, 0x3C, 0x02, + 0xFF, 0x99, 0xF7, 0xBE, 0x9C, 0xD3, 0xB5, 0xB6, 0xF7, 0x9E, 0xA5, 0x34, 0xA5, 0x34, 0xAD, 0x75, + 0xF7, 0x9E, 0xDE, 0xFB, 0x94, 0xB2, 0xAD, 0x75, 0x9C, 0xF3, 0xEF, 0x5D, 0x22, 0xFF, 0x83, 0xBD, + 0xD7, 0xBD, 0xF7, 0x02, 0xFF, 0x87, 0xA5, 0x14, 0xE7, 0x1C, 0xEF, 0x7D, 0x9C, 0xF3, 0x02, 0xFF, + 0x83, 0xCE, 0x59, 0xAD, 0x75, 0x02, 0xFF, 0x83, 0xAD, 0x55, 0xD6, 0x9A, 0x18, 0xFF, 0x83, 0xF7, + 0xBE, 0xF7, 0xBE, 0x06, 0xFF, 0x81, 0xF7, 0x9E, 0x11, 0xFF, 0x80, 0xDF, 0x09, 0xFF, 0x80, 0xDF, + 0x0A, 0xFF, 0x81, 0xF7, 0x9E, 0x07, 0xFF, 0x80, 0xDF, 0x09, 0xFF, 0x80, 0xDF, 0x04, 0xFF, 0x89, + 0xF7, 0xBE, 0xFF, 0xDF, 0xFF, 0xDF, 0x84, 0x30, 0xE7, 0x1C, 0x08, 0xFF, 0x83, 0xF7, 0xBE, 0xF7, + 0x9E, 0x06, 0xFF, 0x83, 0xF7, 0xBE, 0xFF, 0xDF, 0x04, 0xFF, 0x85, 0x8C, 0x71, 0xE7, 0x1C, 0xF7, + 0x9E, 0x04, 0xFF, 0x85, 0x8C, 0x71, 0xDE, 0xFB, 0xF7, 0x9E, 0x06, 0xFF, 0x83, 0xF7, 0xBE, 0xF7, + 0xBE, 0x0D, 0xFF, 0x82, 0xDF, 0xF7, 0xBE, 0x04, 0xFF, 0x83, 0xF7, 0x9E, 0xF7, 0xBE, 0x04, 0xFF, + 0x83, 0xF7, 0xBE, 0xF7, 0xBE, 0x26, 0xFF, 0x83, 0xDE, 0xFB, 0xDE, 0xFB, 0x02, 0xFF, 0x87, 0xD6, + 0x9A, 0xEF, 0x7D, 0xF7, 0xBE, 0xCE, 0x79, 0x02, 0xFF, 0x83, 0xE7, 0x3C, 0xD6, 0xBA, 0x02, 0xFF, + 0x83, 0xD6, 0xBA, 0xE7, 0x3C, 0x66, 0xFF, 0x83, 0xF7, 0xBE, 0xC6, 0x38, 0x1C, 0xFF, 0x83, 0xCE, + 0x59, 0xF7, 0x9E, 0x06, 0xFF, 0x83, 0xCE, 0x59, 0xF7, 0x9E, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x13, 0xFF, 0x85, 0xF7, 0x9E, 0xFF, 0xDF, 0xF7, 0xBE, 0x24, 0xFF, 0x83, + 0xF7, 0xBE, 0xFF, 0xDF, 0x16, 0xFF, 0x81, 0xF7, 0x9E, 0x10, 0xFF, 0x81, 0xF7, 0xBE, 0x7A, 0xFF, + 0x89, 0xD6, 0x9A, 0x6B, 0x4D, 0x4A, 0x69, 0x7B, 0xEF, 0xF7, 0xBE, 0x0A, 0xFF, 0x89, 0xCE, 0x79, + 0x6B, 0x6D, 0x5A, 0xCB, 0x8C, 0x71, 0xF7, 0x9E, 0x04, 0xFF, 0x91, 0x63, 0x2C, 0x52, 0x8A, 0x52, + 0x8A, 0x52, 0x8A, 0xB5, 0xB6, 0xE7, 0x1C, 0x39, 0xC7, 0xBD, 0xF7, 0x63, 0x0C, 0x08, 0xFF, 0x83, + 0xDE, 0xDB, 0x4A, 0x49, 0x02, 0xFF, 0x8D, 0xF7, 0x9E, 0x31, 0xA6, 0x31, 0xA6, 0x31, 0xA6, 0x39, + 0xE7, 0x52, 0xAA, 0xAD, 0x55, 0x04, 0xFF, 0x8B, 0xD6, 0xBA, 0x5A, 0xCB, 0x42, 0x08, 0x39, 0xE7, + 0x63, 0x2C, 0xE7, 0x1C, 0x0C, 0xFF, 0x8B, 0xDE, 0xDB, 0x73, 0x8E, 0x4A, 0x69, 0x4A, 0x69, 0x4A, + 0x49, 0xAD, 0x55, 0x06, 0xFF, 0x8B, 0xEF, 0x7D, 0x7B, 0xEF, 0x4A, 0x69, 0x4A, 0x49, 0x6B, 0x4D, + 0xBD, 0xD7, 0x04, 0xFF, 0x89, 0xE7, 0x3C, 0x8C, 0x71, 0x52, 0xAA, 0x6B, 0x6D, 0xDE, 0xFB, 0x08, + 0xFF, 0x83, 0x84, 0x30, 0xA5, 0x34, 0x06, 0xFF, 0x87, 0xA5, 0x34, 0x5A, 0xCB, 0x52, 0x8A, 0xAD, + 0x55, 0x02, 0xFF, 0x8D, 0xEF, 0x7D, 0x52, 0x8A, 0x52, 0x8A, 0x52, 0x8A, 0x52, 0x8A, 0x52, 0x8A, + 0xB5, 0x96, 0x3C, 0xFF, 0x8B, 0xF7, 0x9E, 0x42, 0x08, 0xB5, 0x96, 0xD6, 0x9A, 0x6B, 0x6D, 0x8C, + 0x51, 0x09, 0xFF, 0x8A, 0xDF, 0x42, 0x08, 0xBD, 0xD7, 0xDE, 0xDB, 0x73, 0xAE, 0x94, 0x92, 0x02, + 0xFF, 0x93, 0xF7, 0x9E, 0x10, 0xA2, 0xC6, 0x18, 0xC6, 0x18, 0xC6, 0x18, 0xE7, 0x1C, 0xF7, 0xBE, + 0x52, 0xAA, 0xE7, 0x1C, 0x6B, 0x4D, 0x08, 0xFF, 0x83, 0xCE, 0x79, 0x10, 0x82, 0x02, 0xFF, 0x81, + 0xEF, 0x7D, 0x02, 0x00, 0x99, 0xC6, 0x38, 0xD6, 0x9A, 0xCE, 0x79, 0xAD, 0x75, 0x29, 0x45, 0xD6, + 0x9A, 0xFF, 0xDF, 0x39, 0xE7, 0x9C, 0xF3, 0xD6, 0x9A, 0xCE, 0x79, 0x7B, 0xEF, 0x52, 0x8A, 0x0A, + 0xFF, 0x8F, 0xD6, 0xBA, 0x42, 0x28, 0xA5, 0x34, 0xD6, 0xBA, 0xDE, 0xDB, 0xBD, 0xF7, 0x4A, 0x69, + 0xB5, 0x96, 0x02, 0xFF, 0x8F, 0xEF, 0x7D, 0x52, 0x8A, 0x84, 0x10, 0xCE, 0x79, 0xD6, 0xBA, 0xB5, + 0xB6, 0x31, 0x86, 0xD6, 0x9A, 0x02, 0xFF, 0x8B, 0x73, 0xAE, 0x84, 0x30, 0xD6, 0xBA, 0xB5, 0xB6, + 0x42, 0x08, 0xF7, 0x9E, 0x02, 0xFF, 0x87, 0xDE, 0xFB, 0x73, 0xAE, 0x18, 0xE3, 0x94, 0x92, 0x04, + 0xFF, 0x99, 0xC6, 0x18, 0x4A, 0x69, 0xCE, 0x59, 0xC6, 0x18, 0x42, 0x28, 0xCE, 0x79, 0xFF, 0xDF, + 0xC6, 0x18, 0xC6, 0x18, 0xC6, 0x18, 0x9C, 0xF3, 0x10, 0xA2, 0xDE, 0xDB, 0x3C, 0xFF, 0x85, 0xCE, + 0x59, 0x39, 0xE7, 0xF7, 0xBE, 0x02, 0xFF, 0x83, 0xCE, 0x59, 0x21, 0x04, 0x08, 0xFF, 0x85, 0xF7, + 0xBE, 0x00, 0x20, 0xE7, 0x1C, 0x02, 0xFF, 0x83, 0x8C, 0x51, 0x63, 0x2C, 0x02, 0xFF, 0x89, 0xCE, + 0x79, 0x39, 0xE7, 0xF7, 0x9E, 0xDE, 0xDB, 0xFF, 0xDF, 0x02, 0xFF, 0x87, 0xF7, 0x9E, 0xC6, 0x18, + 0xDE, 0xFB, 0xD6, 0xBA, 0x08, 0xFF, 0x83, 0xCE, 0x79, 0x10, 0x82, 0x02, 0xFF, 0x81, 0xEF, 0x7D, + 0x02, 0x00, 0x81, 0xF7, 0x9E, 0x04, 0xFF, 0x8B, 0xF7, 0xBE, 0x31, 0x86, 0xAD, 0x55, 0xFF, 0xDF, + 0x00, 0x20, 0xC6, 0x38, 0x04, 0xFF, 0x83, 0xE7, 0x3C, 0xA5, 0x34, 0x0A, 0xFF, 0x85, 0x7B, 0xCF, + 0x7B, 0xCF, 0xF7, 0x9E, 0x05, 0xFF, 0x84, 0xDF, 0xBD, 0xD7, 0xC6, 0x18, 0x02, 0xFF, 0x85, 0xB5, + 0xB6, 0x42, 0x08, 0xEF, 0x5D, 0x04, 0xFF, 0x8B, 0xF7, 0xBE, 0xAD, 0x55, 0xD6, 0xBA, 0xF7, 0x9E, + 0x10, 0xA2, 0xE7, 0x1C, 0x02, 0xFF, 0x85, 0xF7, 0xBE, 0x31, 0xA6, 0xBD, 0xD7, 0x02, 0xFF, 0x87, + 0x8C, 0x51, 0x9C, 0xF3, 0x63, 0x0C, 0x94, 0x92, 0x04, 0xFF, 0x8B, 0x7B, 0xCF, 0x8C, 0x71, 0xFF, + 0xDF, 0xFF, 0xDF, 0x7B, 0xEF, 0x7B, 0xEF, 0x03, 0xFF, 0x8A, 0xDF, 0xFF, 0xDF, 0xF7, 0xBE, 0x4A, + 0x69, 0x9C, 0xD3, 0xFF, 0xDF, 0x3C, 0xFF, 0x83, 0xAD, 0x55, 0x5A, 0xEB, 0x04, 0xFF, 0x81, 0xF7, + 0x9E, 0x02, 0x00, 0x81, 0xFF, 0xDF, 0x08, 0xFF, 0x89, 0x84, 0x30, 0x4A, 0x69, 0x84, 0x10, 0x42, + 0x08, 0xC6, 0x18, 0x02, 0xFF, 0x8B, 0x9C, 0xF3, 0x21, 0x24, 0x52, 0xAA, 0x31, 0x86, 0x63, 0x2C, + 0xF7, 0xBE, 0x03, 0xFF, 0x84, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0x08, 0xFF, 0x83, 0xCE, 0x79, 0x10, + 0x82, 0x02, 0xFF, 0x81, 0xEF, 0x7D, 0x02, 0x00, 0x81, 0xF7, 0x9E, 0x03, 0xFF, 0x86, 0xDF, 0xC6, + 0x38, 0x08, 0x41, 0xDE, 0xFB, 0x02, 0xFF, 0x8B, 0x73, 0x8E, 0x29, 0x65, 0x73, 0xAE, 0xB5, 0x96, + 0xEF, 0x5D, 0xF7, 0x9E, 0x0A, 0xFF, 0x83, 0x31, 0xA6, 0xB5, 0xB6, 0x08, 0xFF, 0x83, 0xF7, 0xBE, + 0xF7, 0xBE, 0x02, 0xFF, 0x83, 0x7B, 0xEF, 0x73, 0xAE, 0x08, 0xFF, 0x89, 0xF7, 0xBE, 0xFF, 0xDF, + 0xFF, 0xDF, 0x10, 0x82, 0xDE, 0xFB, 0x04, 0xFF, 0x83, 0x18, 0xC3, 0x9C, 0xF3, 0x02, 0xFF, 0x87, + 0xE7, 0x3C, 0xF7, 0x9E, 0x73, 0x8E, 0x94, 0x92, 0x04, 0xFF, 0x83, 0x52, 0x8A, 0xB5, 0x96, 0x04, + 0xFF, 0x83, 0xA5, 0x34, 0x5A, 0xEB, 0x06, 0xFF, 0x85, 0xA5, 0x34, 0x4A, 0x69, 0xF7, 0x9E, 0x3E, + 0xFF, 0x83, 0x94, 0x92, 0x6B, 0x6D, 0x06, 0xFF, 0x02, 0x00, 0x81, 0xF7, 0x9E, 0x07, 0xFF, 0x8A, + 0xDF, 0x6B, 0x6D, 0x39, 0xC7, 0x73, 0xAE, 0x21, 0x24, 0xBD, 0xD7, 0x02, 0xFF, 0x8B, 0xA5, 0x34, + 0x73, 0xAE, 0xDE, 0xDB, 0xC6, 0x18, 0x39, 0xE7, 0xB5, 0xB6, 0x10, 0xFF, 0x83, 0xCE, 0x79, 0x10, + 0x82, 0x02, 0xFF, 0x81, 0xEF, 0x7D, 0x02, 0x00, 0x8B, 0x42, 0x28, 0x4A, 0x49, 0x39, 0xE7, 0x21, + 0x24, 0x6B, 0x6D, 0xFF, 0xDF, 0x02, 0xFF, 0x8B, 0xEF, 0x5D, 0xA5, 0x34, 0x6B, 0x4D, 0x31, 0xA6, + 0x31, 0xA6, 0xB5, 0x96, 0x0A, 0xFF, 0x83, 0x08, 0x41, 0xCE, 0x79, 0x04, 0xFF, 0x87, 0x94, 0xB2, + 0x6B, 0x4D, 0x6B, 0x4D, 0x73, 0xAE, 0x02, 0xFF, 0x83, 0x5A, 0xEB, 0x8C, 0x51, 0x0E, 0xFF, 0x8B, + 0x63, 0x0C, 0x63, 0x2C, 0xC6, 0x38, 0x8C, 0x51, 0x10, 0x82, 0x9C, 0xD3, 0x06, 0xFF, 0x83, 0x73, + 0x8E, 0x94, 0x92, 0x04, 0xFF, 0x83, 0x39, 0xC7, 0xC6, 0x18, 0x04, 0xFF, 0x83, 0xB5, 0x96, 0x4A, + 0x69, 0x06, 0xFF, 0x83, 0x42, 0x08, 0xA5, 0x14, 0x40, 0xFF, 0x83, 0x9C, 0xF3, 0x63, 0x2C, 0x04, + 0xFF, 0x81, 0xF7, 0xBE, 0x02, 0x00, 0x81, 0xFF, 0xDF, 0x06, 0xFF, 0x8B, 0xCE, 0x59, 0x31, 0x86, + 0xDE, 0xFB, 0xE7, 0x3C, 0xAD, 0x55, 0x39, 0xC7, 0x02, 0xFF, 0x83, 0xEF, 0x7D, 0xEF, 0x5D, 0x03, + 0xFF, 0x84, 0xDF, 0x8C, 0x71, 0x5A, 0xEB, 0x10, 0xFF, 0x83, 0xCE, 0x79, 0x10, 0x82, 0x02, 0xFF, + 0x81, 0xEF, 0x7D, 0x02, 0x00, 0x89, 0xA5, 0x14, 0xAD, 0x75, 0xB5, 0x96, 0xCE, 0x59, 0xEF, 0x5D, + 0x05, 0xFF, 0x8C, 0xDF, 0xF7, 0xBE, 0xE7, 0x3C, 0xD6, 0xBA, 0x94, 0x92, 0x21, 0x24, 0xE7, 0x3C, + 0x08, 0xFF, 0x83, 0x29, 0x65, 0xB5, 0x96, 0x04, 0xFF, 0x87, 0xB5, 0xB6, 0x9C, 0xD3, 0x7B, 0xEF, + 0x21, 0x04, 0x02, 0xFF, 0x83, 0x7B, 0xEF, 0x73, 0x8E, 0x08, 0xFF, 0x83, 0xF7, 0x9E, 0xF7, 0xBE, + 0x02, 0xFF, 0x8B, 0xD6, 0xBA, 0x63, 0x0C, 0x52, 0xAA, 0x8C, 0x51, 0x52, 0xAA, 0xB5, 0x96, 0x06, + 0xFF, 0x83, 0x73, 0x8E, 0x94, 0x92, 0x04, 0xFF, 0x83, 0x42, 0x28, 0xBD, 0xD7, 0x04, 0xFF, 0x83, + 0xA5, 0x34, 0x63, 0x0C, 0x04, 0xFF, 0x85, 0xDE, 0xFB, 0x10, 0xA2, 0xEF, 0x5D, 0x40, 0xFF, 0x83, + 0xB5, 0xB6, 0x4A, 0x49, 0x04, 0xFF, 0x83, 0xDE, 0xFB, 0x18, 0xE3, 0x08, 0xFF, 0x83, 0xA5, 0x34, + 0x5A, 0xCB, 0x04, 0xFF, 0x89, 0xEF, 0x7D, 0x00, 0x20, 0xF7, 0xBE, 0xC6, 0x38, 0xDE, 0xFB, 0x04, + 0xFF, 0x83, 0x9C, 0xF3, 0x5A, 0xCB, 0x10, 0xFF, 0x83, 0xCE, 0x79, 0x10, 0x82, 0x02, 0xFF, 0x81, + 0xEF, 0x7D, 0x02, 0x00, 0x85, 0xEF, 0x5D, 0xF7, 0xBE, 0xF7, 0xBE, 0x06, 0xFF, 0x83, 0xC6, 0x18, + 0x63, 0x2C, 0x06, 0xFF, 0x85, 0xF7, 0x9E, 0x31, 0x86, 0xC6, 0x18, 0x08, 0xFF, 0x83, 0x6B, 0x4D, + 0x6B, 0x6D, 0x04, 0xFF, 0x87, 0xF7, 0xBE, 0xEF, 0x7D, 0xC6, 0x38, 0x10, 0xA2, 0x02, 0xFF, 0x85, + 0xAD, 0x55, 0x31, 0xA6, 0xFF, 0xDF, 0x06, 0xFF, 0x83, 0x84, 0x10, 0x7B, 0xCF, 0x02, 0xFF, 0x8B, + 0xE7, 0x1C, 0xE7, 0x1C, 0xDE, 0xFB, 0xEF, 0x5D, 0x39, 0xE7, 0xCE, 0x79, 0x06, 0xFF, 0x83, 0x73, + 0x8E, 0x94, 0x92, 0x04, 0xFF, 0x83, 0x63, 0x0C, 0xA5, 0x14, 0x04, 0xFF, 0x83, 0x8C, 0x71, 0x7B, + 0xEF, 0x04, 0xFF, 0x83, 0x9C, 0xD3, 0x5A, 0xCB, 0x42, 0xFF, 0x85, 0xEF, 0x7D, 0x18, 0xE3, 0xD6, + 0xBA, 0x02, 0xFF, 0x83, 0x84, 0x30, 0x6B, 0x6D, 0x02, 0xFF, 0x83, 0xF7, 0xBE, 0xDE, 0xDB, 0x02, + 0xFF, 0x85, 0xDE, 0xFB, 0x31, 0x86, 0xF7, 0x9E, 0x02, 0xFF, 0x83, 0xB5, 0xB6, 0x42, 0x08, 0x02, + 0xFF, 0x83, 0x9C, 0xF3, 0x6B, 0x6D, 0x02, 0xFF, 0x85, 0xF7, 0xBE, 0x52, 0xAA, 0x9C, 0xF3, 0x10, + 0xFF, 0x83, 0xCE, 0x79, 0x10, 0x82, 0x02, 0xFF, 0x81, 0xEF, 0x7D, 0x02, 0x00, 0x81, 0xF7, 0x9E, + 0x0A, 0xFF, 0x87, 0xE7, 0x3C, 0x10, 0x82, 0xB5, 0x96, 0xFF, 0xDF, 0x02, 0xFF, 0x85, 0xD6, 0x9A, + 0x10, 0x82, 0xE7, 0x1C, 0x08, 0xFF, 0x87, 0xD6, 0x9A, 0x31, 0x86, 0x9C, 0xF3, 0xF7, 0x9E, 0x02, + 0xFF, 0x85, 0xE7, 0x3C, 0x73, 0xAE, 0x18, 0xE3, 0x02, 0xFF, 0x87, 0xEF, 0x7D, 0x39, 0xE7, 0x8C, + 0x71, 0xF7, 0xBE, 0x02, 0xFF, 0x85, 0xC6, 0x38, 0x10, 0xA2, 0xAD, 0x75, 0x02, 0xFF, 0x83, 0x6B, + 0x4D, 0xC6, 0x38, 0x02, 0xFF, 0x85, 0xD6, 0x9A, 0x31, 0xA6, 0xF7, 0xBE, 0x06, 0xFF, 0x83, 0x73, + 0x8E, 0x94, 0x92, 0x04, 0xFF, 0x8B, 0xAD, 0x55, 0x4A, 0x69, 0xF7, 0x9E, 0xEF, 0x7D, 0x42, 0x08, + 0xBD, 0xF7, 0x04, 0xFF, 0x83, 0x63, 0x2C, 0x94, 0x92, 0x44, 0xFF, 0x89, 0x94, 0x92, 0x31, 0xA6, + 0x52, 0xAA, 0x52, 0x8A, 0xDE, 0xFB, 0x02, 0xFF, 0x83, 0xD6, 0x9A, 0x31, 0xA6, 0x03, 0xFF, 0x8A, + 0xDF, 0x8C, 0x51, 0x63, 0x2C, 0x63, 0x0C, 0x63, 0x0C, 0xBD, 0xD7, 0x02, 0xFF, 0x8B, 0xE7, 0x1C, + 0x5A, 0xEB, 0x5A, 0xEB, 0x42, 0x28, 0x5A, 0xEB, 0xEF, 0x5D, 0x10, 0xFF, 0x83, 0xCE, 0x79, 0x10, + 0x82, 0x02, 0xFF, 0x81, 0xEF, 0x7D, 0x02, 0x00, 0x81, 0xF7, 0x9E, 0x0C, 0xFF, 0x8D, 0xAD, 0x55, + 0x42, 0x28, 0x39, 0xE7, 0x42, 0x28, 0x42, 0x28, 0x9C, 0xF3, 0xFF, 0xDF, 0x09, 0xFF, 0x8E, 0xDF, + 0xBD, 0xF7, 0x5A, 0xEB, 0x42, 0x08, 0x42, 0x28, 0x39, 0xE7, 0x63, 0x2C, 0xC6, 0x38, 0x04, 0xFF, + 0x8D, 0xCE, 0x59, 0x5A, 0xCB, 0x4A, 0x49, 0x4A, 0x49, 0x5A, 0xEB, 0x8C, 0x71, 0xF7, 0x9E, 0x02, + 0xFF, 0x89, 0xB5, 0x96, 0x52, 0x8A, 0x63, 0x2C, 0x5A, 0xCB, 0xBD, 0xD7, 0x08, 0xFF, 0x83, 0x73, + 0x8E, 0x94, 0x92, 0x04, 0xFF, 0x8B, 0xF7, 0x9E, 0x5A, 0xEB, 0x42, 0x28, 0x4A, 0x49, 0x73, 0xAE, + 0xF7, 0xBE, 0x04, 0xFF, 0x83, 0x39, 0xC7, 0xBD, 0xD7, 0x44, 0xFF, 0x87, 0xF7, 0x9E, 0xD6, 0x9A, + 0xCE, 0x79, 0xDE, 0xFB, 0x04, 0xFF, 0x83, 0xF7, 0xBE, 0xD6, 0xBA, 0x04, 0xFF, 0x89, 0xEF, 0x7D, + 0xDE, 0xFB, 0xD6, 0x9A, 0xDE, 0xFB, 0xF7, 0xBE, 0x04, 0xFF, 0x87, 0xE7, 0x1C, 0xD6, 0x9A, 0xCE, + 0x79, 0xE7, 0x1C, 0x12, 0xFF, 0x83, 0xF7, 0xBE, 0xD6, 0xBA, 0x04, 0xFF, 0x81, 0xD6, 0x9A, 0x0E, + 0xFF, 0x8B, 0xF7, 0xBE, 0xDE, 0xDB, 0xCE, 0x79, 0xC6, 0x38, 0xDE, 0xDB, 0xF7, 0x9E, 0x0D, 0xFF, + 0x8C, 0xDF, 0xE7, 0x1C, 0xD6, 0xBA, 0xC6, 0x38, 0xD6, 0xBA, 0xE7, 0x3C, 0xFF, 0xDF, 0x05, 0xFF, + 0x8A, 0xDF, 0xE7, 0x1C, 0xD6, 0xBA, 0xCE, 0x59, 0xDE, 0xFB, 0xEF, 0x7D, 0x04, 0xFF, 0x89, 0xF7, + 0xBE, 0xDE, 0xDB, 0xD6, 0x9A, 0xDE, 0xFB, 0xF7, 0xBE, 0x08, 0xFF, 0x83, 0xE7, 0x3C, 0xEF, 0x5D, + 0x06, 0xFF, 0x87, 0xE7, 0x1C, 0xCE, 0x79, 0xD6, 0x9A, 0xEF, 0x5D, 0x06, 0xFF, 0x83, 0xDE, 0xDB, + 0xF7, 0x9E, 0x7F, 0xFF, 0x38, 0xFF, 0x80, 0xDF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x70, 0xFF, 0xA6, 0xDF, 0xFF, 0x9E, + 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, + 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, + 0xFF, 0xBE, 0xFF, 0xDF, 0x7F, 0xFF, 0x56, 0xFF, 0xAE, 0x7E, 0xF5, 0xD9, 0xEC, 0x13, 0xE3, 0x51, + 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, + 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, + 0xE3, 0x92, 0xEC, 0xB5, 0xF6, 0x7B, 0xFF, 0xBF, 0x7F, 0xFF, 0x50, 0xFF, 0xB0, 0x9E, 0xF5, 0xD8, + 0xE3, 0x10, 0xD9, 0x8B, 0xD9, 0x4B, 0xD9, 0x4B, 0xD9, 0x4A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x0A, + 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x4A, 0xD1, 0x4A, 0xD1, 0x2A, 0xD1, 0x0A, 0xD1, 0x0A, 0xD1, 0x2A, + 0xD1, 0x2A, 0xD9, 0x4B, 0xD9, 0x4B, 0xD9, 0x4B, 0xD9, 0xED, 0xE3, 0xF3, 0xF6, 0xBB, 0x7F, 0xFF, + 0x50, 0xFF, 0xB2, 0x1D, 0xEC, 0x54, 0xD9, 0xCC, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD9, 0x4B, + 0xDA, 0x0D, 0xE3, 0x30, 0xE3, 0x92, 0xE3, 0x51, 0xDA, 0x4E, 0xD9, 0x6B, 0xD9, 0x8C, 0xE2, 0xAF, + 0xE3, 0x71, 0xE3, 0x92, 0xE2, 0xCF, 0xD9, 0xCC, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, + 0xDA, 0x6E, 0xF5, 0x78, 0xFF, 0xBE, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xF3, 0xD9, + 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD9, 0xCC, 0xE3, 0x92, 0xED, 0x16, 0xED, 0x37, 0xEC, 0xF6, 0xED, + 0x16, 0xED, 0x16, 0xEC, 0x95, 0xEC, 0xB5, 0xED, 0x37, 0xEC, 0xF6, 0xEC, 0xF6, 0xED, 0x37, 0xEC, + 0xB5, 0xE2, 0xF0, 0xD9, 0x6B, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xED, 0x16, 0xFF, 0x7E, 0x7F, + 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x6B, 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x4E, + 0xEC, 0x95, 0xEC, 0x95, 0xE3, 0x31, 0xE2, 0xF0, 0xE2, 0xF0, 0xE3, 0xD2, 0xF5, 0x57, 0xEC, 0xF6, + 0xE3, 0x51, 0xE2, 0xF0, 0xE2, 0xF0, 0xE3, 0xB2, 0xEC, 0xF6, 0xE3, 0xF3, 0xD9, 0xAC, 0xD1, 0x0A, + 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, + 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x2D, 0xEC, 0x54, 0xEC, 0x13, 0xDA, 0x0D, 0xDA, + 0x0D, 0xE2, 0xCF, 0xE3, 0x51, 0xEC, 0x54, 0xEC, 0x13, 0xE3, 0x10, 0xE2, 0xAF, 0xD9, 0xCC, 0xDA, + 0x8F, 0xEC, 0x95, 0xE3, 0xB2, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, + 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, + 0xD9, 0xAC, 0xE3, 0xB2, 0xEC, 0x95, 0xE2, 0xAF, 0xD9, 0x6B, 0xDA, 0x4E, 0xEC, 0x54, 0xF6, 0x19, + 0xF5, 0x98, 0xE3, 0x92, 0xD9, 0xCC, 0xD9, 0x8C, 0xE3, 0x71, 0xEC, 0xB5, 0xE2, 0xF0, 0xD9, 0x2A, + 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, + 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD9, 0x4A, 0xDA, 0x4E, 0xEC, 0x54, 0xEC, + 0xD5, 0xE3, 0x92, 0xE3, 0xB2, 0xF5, 0xF9, 0xFF, 0x9E, 0xFF, 0x1D, 0xED, 0x16, 0xE3, 0x51, 0xE3, + 0xF3, 0xEC, 0xD6, 0xE3, 0xB2, 0xD9, 0xAC, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, + 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, + 0xD1, 0x2A, 0xD1, 0x2A, 0xD9, 0x8B, 0xE3, 0x71, 0xED, 0x57, 0xEC, 0xF6, 0xEC, 0xD6, 0xED, 0x57, + 0xEC, 0xB5, 0xEC, 0xD6, 0xED, 0x57, 0xEC, 0xD5, 0xED, 0x16, 0xEC, 0xF6, 0xDA, 0x8F, 0xD1, 0x2A, + 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, + 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD9, 0xED, 0xE3, + 0xD2, 0xEC, 0x74, 0xEC, 0x33, 0xEC, 0xF6, 0xEC, 0x54, 0xDA, 0x8F, 0xE3, 0x10, 0xEC, 0xD6, 0xEC, + 0xD5, 0xEC, 0x13, 0xEC, 0x74, 0xE3, 0x30, 0xD9, 0x6B, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, + 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, + 0xD1, 0x0A, 0xD1, 0x2A, 0xD9, 0x4B, 0xE2, 0xF0, 0xF5, 0x57, 0xF5, 0xD9, 0xED, 0x37, 0xED, 0x16, + 0xED, 0x16, 0xED, 0x57, 0xED, 0x57, 0xED, 0x16, 0xED, 0x16, 0xF5, 0x57, 0xF5, 0xD9, 0xEC, 0x95, + 0xDA, 0x0D, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, + 0x4D, 0xFF, 0xA0, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, + 0x54, 0xF6, 0x3A, 0xF6, 0x3A, 0xEC, 0x34, 0xDA, 0x6E, 0xE3, 0x71, 0xF5, 0x78, 0xEC, 0xF6, 0xE2, + 0xAF, 0xE2, 0xCF, 0xEC, 0x02, 0xF6, 0x90, 0x7B, 0xF5, 0xB8, 0xE3, 0x51, 0xD9, 0x8B, 0xD1, 0x2A, + 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, + 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD9, 0x4B, 0xE2, 0xCF, 0xEC, 0x74, 0xEC, 0xD5, 0xEC, 0x95, 0xE2, + 0xF0, 0xD1, 0x2A, 0xDA, 0x8E, 0xEC, 0xF6, 0xEC, 0x54, 0xD9, 0xAC, 0xD9, 0x8B, 0xE3, 0x92, 0xEC, + 0xD6, 0xEC, 0xB5, 0xE3, 0xF3, 0xDA, 0x2D, 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, + 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD9, 0x6B, + 0xE3, 0x10, 0xEC, 0x74, 0xEC, 0x74, 0xEC, 0xD5, 0xE3, 0xB2, 0xDA, 0x2E, 0xE3, 0xD3, 0xF6, 0x19, + 0xF5, 0x78, 0xE3, 0x10, 0xDA, 0x6E, 0xEC, 0x34, 0xEC, 0xD6, 0xEC, 0x54, 0xEC, 0x13, 0xDA, 0x6E, + 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0x8C, 0xFE, + 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD9, 0x4B, 0xE2, 0x8F, 0xEC, 0x02, 0xF6, 0xA4, 0x1A, + 0xF6, 0x9B, 0xF6, 0x7B, 0xF5, 0x98, 0xEC, 0xD6, 0xEC, 0x33, 0xEC, 0x54, 0xED, 0x37, 0xF5, 0xF9, + 0xF6, 0x9B, 0xF6, 0x9B, 0xF5, 0xB8, 0xEC, 0x13, 0xD9, 0xED, 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x0D, + 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0x8A, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, + 0x0A, 0xD1, 0x2A, 0xD9, 0x02, 0xEC, 0xA6, 0x34, 0xF5, 0xB8, 0xEC, 0xF6, 0xF5, 0x78, 0xF5, 0xF9, + 0xE3, 0xB2, 0xD9, 0xAC, 0xDA, 0x2D, 0xEC, 0xB5, 0xF6, 0x19, 0xED, 0x37, 0xED, 0x37, 0xF5, 0x78, + 0xE3, 0x51, 0xD9, 0x6B, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, + 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD9, 0x6B, 0xE3, + 0x10, 0xEC, 0x95, 0xE3, 0x71, 0xE3, 0x10, 0xEC, 0xB5, 0xEB, 0xF3, 0xDA, 0x0D, 0xE2, 0x8F, 0xEC, + 0x75, 0xEC, 0x34, 0xE2, 0xCF, 0xE3, 0xF3, 0xEC, 0x54, 0xDA, 0x4E, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, + 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, + 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xE4, 0x13, 0xEC, 0x54, 0xE3, 0x92, + 0xEC, 0xF6, 0xF5, 0xD9, 0xED, 0x37, 0xF5, 0x77, 0xF5, 0xD9, 0xEC, 0x54, 0xE3, 0xB2, 0xEC, 0x75, + 0xE3, 0x71, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, + 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, + 0x2A, 0xD9, 0x6B, 0xDA, 0x6E, 0xEC, 0x34, 0xF5, 0x98, 0xF6, 0x3A, 0xED, 0x57, 0xE3, 0xD2, 0xEC, + 0x33, 0xF5, 0xF9, 0xF6, 0x3A, 0xED, 0x16, 0xE3, 0x92, 0xD9, 0xED, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, + 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, + 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD9, 0x4B, 0xD9, 0xED, + 0xE3, 0x71, 0xEC, 0xF6, 0xED, 0x37, 0xEC, 0x74, 0xEC, 0x95, 0xED, 0x57, 0xEC, 0x95, 0xE2, 0xCF, + 0xD9, 0xAC, 0xD9, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xED, 0x16, + 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xEC, 0x13, 0xD9, 0x8C, 0xD1, 0x0A, 0xD1, + 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD9, 0x6B, 0xDA, 0x4E, 0xE3, 0x71, 0xEC, + 0x33, 0xE3, 0xF3, 0xE3, 0x10, 0xD9, 0xEC, 0xD1, 0x4B, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, + 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x4E, 0xED, 0x37, 0xFF, 0x9E, 0x7F, 0xFF, 0x4E, 0xFF, 0xB2, + 0x5D, 0xED, 0x16, 0xDA, 0x4E, 0xD1, 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, + 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x8B, 0xD9, 0xCC, 0xD9, 0xAC, 0xD9, 0x6B, 0xD1, 0x2A, 0xD9, + 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x6B, 0xE3, 0x10, 0xF6, + 0x19, 0xFF, 0xDF, 0x7F, 0xFF, 0x4E, 0xFF, 0xB0, 0xDF, 0xFE, 0xDC, 0xEC, 0x95, 0xDA, 0x8F, 0xD9, + 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xEC, 0xD9, 0xEC, 0xD9, + 0xCC, 0xD9, 0xCC, 0xD9, 0xEC, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, + 0xED, 0xDA, 0x0D, 0xE3, 0x30, 0xF5, 0x57, 0xFF, 0x5D, 0x7F, 0xFF, 0x52, 0xFF, 0xAC, 0xDF, 0xFF, + 0x3D, 0xF6, 0x7A, 0xF5, 0xF9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, + 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, + 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF6, 0x19, 0xF6, 0xBB, 0xFF, 0x7E, 0x7F, 0xFF, 0x5A, 0xFF, 0xA2, + 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, + 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, + 0xDF, 0xFF, 0xDF, 0x7F, 0xFF, 0x7F, 0xFF, 0x25, 0xFF, 0xC0, 0xBF, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, + 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, + 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, + 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, + 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x9E, 0xFF, 0xDF, 0x7F, 0xFF, 0x3E, 0xFF, 0xC4, + 0x5D, 0xF6, 0x5A, 0xF5, 0x78, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, + 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, + 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, + 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xED, 0x57, 0xF5, + 0x98, 0xF6, 0x7B, 0xFF, 0x9E, 0x7F, 0xFF, 0x3A, 0xFF, 0xC8, 0x9E, 0xF5, 0xF9, 0xEC, 0x74, 0xEC, + 0x95, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, + 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, + 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, + 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0x74, 0xEC, 0x95, 0xF6, + 0x5A, 0xFF, 0xBF, 0x0E, 0xFF, 0x8B, 0xF7, 0xBE, 0xF7, 0x9E, 0xF7, 0x9E, 0xF7, 0x9E, 0xF7, 0xBE, + 0xFF, 0xDF, 0x32, 0xFF, 0x87, 0xF7, 0x9E, 0xE7, 0x3C, 0xE7, 0x3C, 0xF7, 0xBE, 0x45, 0xFF, 0x8A, + 0xDF, 0xF7, 0xBE, 0xF7, 0x9E, 0xF7, 0x9E, 0xF7, 0xBE, 0xFF, 0xDE, 0x06, 0xFF, 0x85, 0xF7, 0x9E, + 0xEF, 0x7D, 0xF7, 0xBE, 0x07, 0xFF, 0x83, 0x1D, 0xED, 0x37, 0xEC, 0x02, 0xF6, 0xC2, 0x7B, 0xFF, + 0x1D, 0xF6, 0xFC, 0xF6, 0xDC, 0xEE, 0xDB, 0xEE, 0xDB, 0xEE, 0xDB, 0xF6, 0xFC, 0xF7, 0x1C, 0xFF, + 0x3D, 0xFF, 0x1D, 0xF6, 0xFC, 0xF6, 0xFC, 0xF7, 0x1C, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, + 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, + 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x1D, 0xF6, 0x3A, 0xEC, 0xB5, 0xF5, 0x77, 0xFF, + 0x7E, 0x0C, 0xFF, 0x91, 0xEF, 0x7D, 0xCE, 0x59, 0xAD, 0x55, 0xAD, 0x55, 0xAD, 0x55, 0xB5, 0x96, + 0xC6, 0x18, 0xE7, 0x1C, 0xF7, 0xBE, 0x2C, 0xFF, 0x89, 0xF7, 0xBE, 0xCE, 0x59, 0x8C, 0x51, 0x94, + 0x92, 0xDE, 0xDB, 0x42, 0xFF, 0x9B, 0xF7, 0x9E, 0xD6, 0x9A, 0xB5, 0x96, 0xAD, 0x55, 0xAD, 0x55, + 0xAD, 0x75, 0xBD, 0xF7, 0xDE, 0xDB, 0xF7, 0x9E, 0xEF, 0x7D, 0xBD, 0xD7, 0x9C, 0xD3, 0xC6, 0x38, + 0xF7, 0xBE, 0x04, 0xFF, 0xA1, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xFF, 0xDF, 0xDE, + 0xFB, 0xBD, 0xF7, 0xB5, 0x96, 0xB5, 0xB6, 0xB5, 0xB6, 0xC6, 0x18, 0xDE, 0xFB, 0xF7, 0xBE, 0xF7, + 0x9E, 0xD6, 0xBA, 0xCE, 0x59, 0xEF, 0x5D, 0x21, 0xFF, 0x86, 0x1D, 0xED, 0x16, 0xED, 0x37, 0xFF, + 0x5D, 0x0B, 0xFF, 0x94, 0xDF, 0xDE, 0xDB, 0x84, 0x10, 0x42, 0x08, 0x52, 0xAA, 0x63, 0x2C, 0x5A, + 0xEB, 0x5A, 0xCB, 0x7B, 0xCE, 0xC6, 0x18, 0xF7, 0xBE, 0x2A, 0xFF, 0x89, 0xF7, 0x9E, 0xB5, 0x96, + 0x52, 0xAA, 0x63, 0x2C, 0xCE, 0x79, 0x42, 0xFF, 0x9B, 0xE7, 0x1C, 0x94, 0x92, 0x4A, 0x69, 0x52, + 0x89, 0x63, 0x0C, 0x63, 0x0C, 0x5A, 0xEB, 0x6B, 0x6D, 0xAD, 0x75, 0xD6, 0x9A, 0xA5, 0x34, 0x84, + 0x10, 0xB5, 0xB6, 0xF7, 0x9E, 0x04, 0xFF, 0xA1, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, + 0xEF, 0x7D, 0xB5, 0x96, 0x73, 0xAE, 0x84, 0x10, 0x9C, 0xF3, 0x9C, 0xF3, 0x8C, 0x71, 0x8C, 0x51, + 0xB5, 0xB6, 0xDE, 0xFB, 0xCE, 0x59, 0xBD, 0xD7, 0xE7, 0x1C, 0x21, 0xFF, 0x86, 0x3D, 0xED, 0x17, + 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, 0xA0, 0xDF, 0xD6, 0x9A, 0x6B, 0x6D, 0x31, 0x85, 0x73, 0x8E, + 0xAD, 0x55, 0x94, 0xB2, 0x5A, 0xEB, 0x39, 0xE7, 0x84, 0x30, 0xE7, 0x3C, 0xF7, 0xBE, 0xDE, 0xFB, + 0xC6, 0x38, 0xC6, 0x38, 0xD6, 0xBA, 0xEF, 0x7D, 0x03, 0xFF, 0xAC, 0xDF, 0xE7, 0x1C, 0xCE, 0x59, + 0xC6, 0x18, 0xD6, 0x9A, 0xEF, 0x5D, 0xF7, 0xBE, 0xEF, 0x7D, 0xDE, 0xDB, 0xD6, 0xBA, 0xD6, 0x9A, + 0xCE, 0x59, 0xD6, 0x9A, 0xEF, 0x5D, 0xEF, 0x7D, 0xB5, 0x95, 0x52, 0x8A, 0x52, 0xAA, 0xAD, 0x55, + 0xCE, 0x59, 0xCE, 0x79, 0xEF, 0x5D, 0xFF, 0xDF, 0x02, 0xFF, 0xB3, 0xF7, 0xBE, 0xE7, 0x1C, 0xCE, + 0x59, 0xC6, 0x38, 0xD6, 0xBA, 0xF7, 0x9E, 0xFF, 0xDF, 0xEF, 0x5D, 0xD6, 0xBA, 0xD6, 0xBA, 0xD6, + 0xBA, 0xD6, 0xBA, 0xDE, 0xFB, 0xDE, 0xDB, 0xD6, 0xBA, 0xD6, 0xBA, 0xD6, 0x9A, 0xDE, 0xDB, 0xD6, + 0xBA, 0xDE, 0xDB, 0xF7, 0x9E, 0xFF, 0xDF, 0xE7, 0x3C, 0xD6, 0xBA, 0xDE, 0xFB, 0xF7, 0xBE, 0x04, + 0xFF, 0x9B, 0xDE, 0xFB, 0x7B, 0xEF, 0x39, 0xC7, 0x63, 0x0C, 0x9C, 0xF3, 0xA5, 0x13, 0x73, 0xAE, + 0x42, 0x28, 0x63, 0x2C, 0xBD, 0xD7, 0xBD, 0xD7, 0xA5, 0x14, 0xCE, 0x59, 0xF7, 0xBE, 0x04, 0xFF, + 0xA1, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xEF, 0x5D, 0xA5, 0x34, 0x73, 0x8E, 0xAD, + 0x54, 0xE7, 0x1C, 0xDE, 0xFB, 0xBD, 0xF7, 0x84, 0x10, 0x84, 0x10, 0xC6, 0x38, 0xD6, 0xBA, 0xCE, + 0x79, 0xEF, 0x5D, 0x02, 0xFF, 0x89, 0xEF, 0x7D, 0xD6, 0x9A, 0xC6, 0x38, 0xCE, 0x79, 0xEF, 0x5D, + 0x05, 0xFF, 0x8A, 0xDF, 0xE7, 0x3C, 0xCE, 0x79, 0xC6, 0x38, 0xD6, 0xBA, 0xF7, 0x9E, 0x05, 0xFF, + 0x86, 0x3D, 0xED, 0x17, 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, 0xFF, 0xDF, 0xD6, 0x9A, 0x6B, 0x6D, + 0x39, 0xE7, 0x9C, 0xF3, 0xEF, 0x7D, 0xDE, 0xFB, 0x8C, 0x71, 0x39, 0xC7, 0x6B, 0x6D, 0xCE, 0x79, + 0xC6, 0x18, 0x84, 0x10, 0x63, 0x2C, 0x63, 0x2C, 0x73, 0xAE, 0xAD, 0x75, 0xE7, 0x3C, 0xD6, 0xBA, + 0x94, 0x92, 0x6B, 0x6D, 0x6B, 0x4C, 0x73, 0x8E, 0x9C, 0xF3, 0xD6, 0x9A, 0xC6, 0x18, 0x84, 0x30, + 0x73, 0x8E, 0x73, 0xAE, 0x63, 0x2C, 0x6B, 0x6D, 0xA5, 0x34, 0xD6, 0xBA, 0xAD, 0x75, 0x52, 0x89, + 0x39, 0xE7, 0x63, 0x0C, 0x63, 0x2C, 0x6B, 0x6D, 0xA5, 0x13, 0xE7, 0x1C, 0xF7, 0x9E, 0xCE, 0x59, + 0x8C, 0x51, 0x63, 0x2C, 0x63, 0x0C, 0x7B, 0xCF, 0xB5, 0xB6, 0xDE, 0xFB, 0xBD, 0xF7, 0x84, 0x0F, + 0x73, 0x8E, 0x73, 0x8E, 0x84, 0x10, 0x9C, 0xF3, 0x84, 0x30, 0x73, 0x8E, 0x73, 0x8E, 0x7B, 0xEF, + 0x94, 0xB2, 0x84, 0x30, 0x8C, 0x51, 0xD6, 0x9A, 0xEF, 0x5D, 0xAD, 0x86, 0x55, 0x7B, 0xEF, 0xAD, + 0x55, 0xEF, 0x5D, 0x04, 0xFF, 0x9B, 0xDE, 0xFB, 0x7B, 0xEF, 0x42, 0x08, 0x84, 0x30, 0xDE, 0xDB, + 0xEF, 0x5D, 0xB5, 0xB6, 0x52, 0xAA, 0x4A, 0x69, 0x9C, 0xF3, 0x9C, 0xF3, 0x7B, 0xEF, 0xB5, 0x96, + 0xF7, 0x9E, 0x04, 0xFF, 0x8F, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xEF, 0x5D, 0xA5, + 0x34, 0x7B, 0xCF, 0xBD, 0xF7, 0x04, 0xFF, 0xAB, 0xE7, 0x3C, 0x9C, 0xD3, 0x73, 0xAE, 0xB5, 0x96, + 0xBD, 0xD7, 0xAD, 0x55, 0xDE, 0xDB, 0xEF, 0x7D, 0xBD, 0xD7, 0x8C, 0x51, 0x84, 0x30, 0x84, 0x30, + 0xA5, 0x34, 0xE7, 0x1B, 0xF7, 0xBE, 0xD6, 0xBA, 0x9C, 0xF3, 0x84, 0x30, 0x84, 0x30, 0x8C, 0x71, + 0xBD, 0xD6, 0xEF, 0x7D, 0x03, 0xFF, 0x86, 0x3D, 0xED, 0x17, 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, + 0xFF, 0xDF, 0xD6, 0x9A, 0x6B, 0x6D, 0x39, 0xC6, 0x8C, 0x71, 0xD6, 0xBA, 0xC6, 0x18, 0x7B, 0xCF, + 0x39, 0xC7, 0x7B, 0xCF, 0xC6, 0x38, 0x94, 0xB2, 0x5A, 0xEB, 0x6B, 0x6D, 0x73, 0xAE, 0x4A, 0x69, + 0x63, 0x2C, 0xBD, 0xD7, 0xAD, 0x55, 0x52, 0x8A, 0x63, 0x0C, 0x7B, 0xCF, 0x63, 0x2C, 0x6B, 0x6D, + 0xAD, 0x75, 0xA5, 0x34, 0x52, 0x8A, 0x42, 0x07, 0x6B, 0x4D, 0x6B, 0x4D, 0x4A, 0x48, 0x5A, 0xEB, + 0xAD, 0x75, 0xAD, 0x55, 0x4A, 0x69, 0x31, 0xA6, 0x63, 0x0C, 0x6B, 0x6D, 0x4A, 0x49, 0x5A, 0xCB, + 0xAD, 0x75, 0xCE, 0x59, 0x84, 0x30, 0x52, 0x89, 0x63, 0x2C, 0x6B, 0x6D, 0x52, 0xAA, 0x6B, 0x6D, + 0xB5, 0x96, 0x9C, 0xF3, 0x4A, 0x49, 0x31, 0xA6, 0x52, 0xAA, 0x7B, 0xEF, 0x8C, 0x51, 0x52, 0x8A, + 0x31, 0xA6, 0x52, 0x89, 0x7B, 0xCF, 0x94, 0xB2, 0x6B, 0x4D, 0x52, 0x8A, 0xAD, 0x55, 0xCE, 0x59, + 0x7B, 0x86, 0xCE, 0x4A, 0x69, 0x9C, 0xF3, 0xEF, 0x7D, 0x04, 0xFF, 0x9B, 0xDE, 0xFB, 0x7B, 0xEF, + 0x42, 0x07, 0x7B, 0xEF, 0xCE, 0x79, 0xDE, 0xDB, 0xA5, 0x34, 0x4A, 0x69, 0x4A, 0x69, 0x94, 0xB2, + 0x7B, 0xEF, 0x52, 0x89, 0x94, 0xB2, 0xEF, 0x5D, 0x04, 0xFF, 0xC9, 0xFE, 0xFC, 0xED, 0x16, 0xF5, + 0x98, 0xFF, 0x7E, 0xEF, 0x5D, 0xA5, 0x34, 0x73, 0xAE, 0xB5, 0xB6, 0xF7, 0x9E, 0xEF, 0x7D, 0xCE, + 0x79, 0x8C, 0x50, 0x7B, 0xCE, 0xB5, 0x95, 0xA5, 0x13, 0x84, 0x30, 0xC6, 0x38, 0xCE, 0x59, 0x8C, + 0x71, 0x94, 0x92, 0xAD, 0x75, 0x94, 0xB2, 0x7B, 0xCF, 0xB5, 0x96, 0xD6, 0xBA, 0x9C, 0xD3, 0x7B, + 0xCF, 0x9C, 0xF3, 0xAD, 0x75, 0x8C, 0x50, 0x7B, 0xEF, 0xC6, 0x18, 0xF7, 0xBE, 0xFF, 0x3D, 0xED, + 0x17, 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, 0xFF, 0xDF, 0xD6, 0x9A, 0x6B, 0x6D, 0x29, 0x45, 0x4A, + 0x69, 0x73, 0x8D, 0x63, 0x2C, 0x4A, 0x48, 0x5A, 0xCB, 0xAD, 0x75, 0xDE, 0xFB, 0xB5, 0x96, 0x8C, + 0x71, 0x9C, 0xD3, 0x94, 0x92, 0x52, 0x8A, 0x42, 0x28, 0x9C, 0xF3, 0x9C, 0xD3, 0x42, 0x08, 0x6B, + 0x4C, 0x9C, 0xF3, 0x9C, 0xD3, 0x9C, 0xF3, 0xBD, 0xF7, 0xA5, 0x14, 0x4A, 0x69, 0x52, 0xAA, 0xAD, + 0x75, 0xBD, 0xF7, 0x6B, 0x6D, 0x4A, 0x48, 0x8C, 0x50, 0x9C, 0xF3, 0x52, 0x8A, 0x4A, 0x69, 0xAD, + 0x54, 0xC6, 0x18, 0x73, 0xAE, 0x42, 0x28, 0x7B, 0xEF, 0x9C, 0xF3, 0x52, 0xAA, 0x4A, 0x49, 0x8C, + 0x51, 0x9C, 0xD3, 0x5A, 0xEB, 0x4A, 0x49, 0x8C, 0x71, 0x94, 0x92, 0x42, 0x28, 0x4A, 0x69, 0x9C, + 0xD3, 0xC6, 0x38, 0xA5, 0x14, 0x4A, 0x69, 0x42, 0x28, 0x8C, 0x71, 0xCE, 0x59, 0xCE, 0x79, 0x84, + 0x30, 0x4A, 0x49, 0x84, 0x10, 0xA5, 0x34, 0x5A, 0x86, 0xEB, 0x5A, 0xCA, 0xBD, 0xD7, 0xFF, 0xDF, + 0x04, 0xFF, 0x9B, 0xDE, 0xFB, 0x7B, 0xEF, 0x31, 0xA6, 0x4A, 0x69, 0x73, 0xAE, 0x7B, 0xCF, 0x5A, + 0xCB, 0x42, 0x08, 0x73, 0xAE, 0xB5, 0x96, 0x7B, 0xEF, 0x4A, 0x48, 0x94, 0x92, 0xEF, 0x5D, 0x04, + 0xFF, 0xC9, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xEF, 0x5D, 0xA5, 0x14, 0x63, 0x0C, + 0x7B, 0xEF, 0xA5, 0x34, 0xA5, 0x14, 0x8C, 0x51, 0x73, 0xAE, 0x9C, 0xD3, 0xCE, 0x58, 0x9C, 0xD3, + 0x7B, 0xEF, 0xB5, 0xB6, 0xAD, 0x55, 0x8C, 0x51, 0xCE, 0x59, 0xEF, 0x7D, 0xD6, 0xBA, 0xAD, 0x55, + 0xBD, 0xD7, 0xB5, 0xB6, 0x73, 0xAE, 0x94, 0xB2, 0xDE, 0xFB, 0xEF, 0x7D, 0xBD, 0xF7, 0x73, 0xAE, + 0x9C, 0xD2, 0xEF, 0x5D, 0xFF, 0x3D, 0xED, 0x17, 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, 0xFF, 0xDF, + 0xD6, 0x9A, 0x6B, 0x6D, 0x21, 0x24, 0x42, 0x28, 0x52, 0xAA, 0x39, 0xC7, 0x39, 0xC7, 0x8C, 0x51, + 0xE7, 0x1C, 0xEF, 0x5D, 0xB5, 0x96, 0x7B, 0xEF, 0x73, 0xAE, 0x73, 0x8D, 0x42, 0x28, 0x42, 0x07, + 0x9C, 0xF3, 0xBD, 0xD7, 0x63, 0x2C, 0x52, 0x8A, 0x63, 0x2C, 0x7B, 0xEF, 0xA5, 0x34, 0xCE, 0x79, + 0xA5, 0x34, 0x52, 0x8A, 0x63, 0x2C, 0xCE, 0x79, 0xE7, 0x1C, 0x8C, 0x71, 0x4A, 0x49, 0x73, 0xAE, + 0x94, 0xB2, 0x52, 0xAA, 0x5A, 0xEB, 0xCE, 0x58, 0xEF, 0x5C, 0x9C, 0xD2, 0x4A, 0x69, 0x63, 0x2C, + 0x7B, 0xEF, 0x42, 0x28, 0x39, 0xC7, 0x63, 0x2C, 0x73, 0x8D, 0x4A, 0x69, 0x4A, 0x49, 0x84, 0x30, + 0x8C, 0x51, 0x4A, 0x69, 0x6B, 0x4C, 0xCE, 0x59, 0xEF, 0x7D, 0xAD, 0x75, 0x52, 0x8A, 0x5A, 0xEB, + 0xC6, 0x18, 0xF7, 0xBE, 0xEF, 0x7D, 0xAD, 0x75, 0x52, 0xAA, 0x5A, 0xCB, 0x73, 0x8D, 0x52, 0x84, + 0x89, 0x73, 0xAE, 0xD6, 0xBA, 0x06, 0xFF, 0x9B, 0xDE, 0xFB, 0x7B, 0xEF, 0x31, 0x86, 0x39, 0xC6, + 0x52, 0xAA, 0x5A, 0xCB, 0x63, 0x0C, 0x84, 0x0F, 0xBD, 0xF7, 0xCE, 0x79, 0x7B, 0xEF, 0x4A, 0x48, + 0x94, 0x92, 0xEF, 0x5D, 0x04, 0xFF, 0xA7, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xEF, + 0x7D, 0xA5, 0x14, 0x5A, 0xEB, 0x6B, 0x4D, 0x8C, 0x71, 0x8C, 0x71, 0x94, 0x92, 0xAD, 0x55, 0xDE, + 0xDA, 0xDE, 0xFB, 0x9C, 0xD3, 0x7B, 0xEF, 0xAD, 0x75, 0x9C, 0xD3, 0x94, 0x92, 0xE7, 0x1C, 0x03, + 0xFF, 0x8C, 0xDF, 0xEF, 0x5D, 0xE7, 0x3C, 0xAD, 0x75, 0x6B, 0x6D, 0xB5, 0x96, 0xF7, 0x9E, 0x02, + 0xFF, 0x8F, 0xDE, 0xDB, 0x84, 0x30, 0x84, 0x30, 0xE7, 0x1C, 0xFF, 0x3D, 0xED, 0x17, 0xED, 0x37, + 0xFF, 0x5D, 0x0B, 0xFF, 0xF2, 0xDF, 0xD6, 0x9A, 0x6B, 0x6D, 0x31, 0xA6, 0x7B, 0xCF, 0xA5, 0x34, + 0x6B, 0x4C, 0x39, 0xC7, 0x84, 0x10, 0xDE, 0xFB, 0xCE, 0x79, 0x73, 0xAE, 0x4A, 0x69, 0x7B, 0xEF, + 0x8C, 0x71, 0x52, 0xAA, 0x42, 0x07, 0x9C, 0xF3, 0xD6, 0xBA, 0xA5, 0x14, 0x84, 0x30, 0x6B, 0x6D, + 0x52, 0x8A, 0x63, 0x2C, 0xAD, 0x54, 0xA5, 0x14, 0x52, 0x8A, 0x6B, 0x4C, 0xD6, 0x99, 0xE7, 0x3C, + 0x8C, 0x71, 0x4A, 0x49, 0x73, 0xAE, 0x94, 0xB2, 0x52, 0xAA, 0x63, 0x0B, 0xCE, 0x59, 0xEF, 0x5D, + 0x9C, 0xD2, 0x4A, 0x69, 0x63, 0x2C, 0x7B, 0xEF, 0x42, 0x28, 0x39, 0xE7, 0x73, 0xAE, 0x8C, 0x51, + 0x84, 0x10, 0x8C, 0x51, 0xAD, 0x55, 0x94, 0x92, 0x4A, 0x69, 0x6B, 0x6D, 0xD6, 0xBA, 0xF7, 0x9E, + 0xB5, 0x96, 0x52, 0x8A, 0x63, 0x0C, 0xCE, 0x59, 0x03, 0xFF, 0x8E, 0xDF, 0xCE, 0x79, 0x6B, 0x6D, + 0x39, 0xE7, 0x39, 0xE7, 0x4A, 0x69, 0x9C, 0xF3, 0xEF, 0x7D, 0x06, 0xFF, 0x9B, 0xDE, 0xFB, 0x7B, + 0xEF, 0x39, 0xC7, 0x63, 0x0C, 0x9C, 0xF3, 0xB5, 0x96, 0xC6, 0x18, 0xDE, 0xDB, 0xF7, 0x9E, 0xDE, + 0xFB, 0x7B, 0xEF, 0x4A, 0x48, 0x94, 0x92, 0xEF, 0x5D, 0x04, 0xFF, 0xA7, 0xFE, 0xFC, 0xED, 0x16, + 0xF5, 0x98, 0xFF, 0x7E, 0xEF, 0x7D, 0xA5, 0x34, 0x6B, 0x6D, 0x9C, 0xF3, 0xD6, 0xBA, 0xDE, 0xDB, + 0xDE, 0xFB, 0xEF, 0x7D, 0xFF, 0xDF, 0xE7, 0x3C, 0x9C, 0xD3, 0x7B, 0xEF, 0xAD, 0x75, 0x9C, 0xD2, + 0x94, 0x92, 0xE7, 0x3C, 0x03, 0xFF, 0x8C, 0xDF, 0xEF, 0x7D, 0xEF, 0x5D, 0xAD, 0x75, 0x6B, 0x6D, + 0xB5, 0xB6, 0xF7, 0xBE, 0x02, 0xFF, 0x8F, 0xDE, 0xDB, 0x84, 0x30, 0x84, 0x30, 0xE7, 0x1C, 0xFF, + 0x3D, 0xED, 0x17, 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, 0xF2, 0xDF, 0xD6, 0x9A, 0x6B, 0x6D, 0x39, + 0xC7, 0x9C, 0xF3, 0xE7, 0x3C, 0xA5, 0x34, 0x4A, 0x49, 0x52, 0xAA, 0xB5, 0x96, 0xB5, 0xB6, 0x52, + 0x8A, 0x42, 0x28, 0x94, 0xB2, 0xA5, 0x14, 0x5A, 0xCB, 0x39, 0xE7, 0x94, 0xB2, 0xB5, 0xB6, 0x8C, + 0x71, 0xA5, 0x34, 0xA5, 0x14, 0x63, 0x0B, 0x42, 0x28, 0x8C, 0x51, 0x9C, 0xD3, 0x52, 0x89, 0x52, + 0x8A, 0xA5, 0x34, 0xB5, 0xB6, 0x6B, 0x4D, 0x42, 0x28, 0x8C, 0x51, 0x9C, 0xF3, 0x52, 0x89, 0x4A, + 0x49, 0xA5, 0x14, 0xBD, 0xD7, 0x73, 0x8E, 0x42, 0x28, 0x84, 0x0F, 0x9C, 0xF3, 0x52, 0xAA, 0x42, + 0x28, 0x8C, 0x50, 0xAD, 0x75, 0xA5, 0x34, 0xAD, 0x55, 0xC6, 0x18, 0x9C, 0xD3, 0x4A, 0x49, 0x6B, + 0x6D, 0xD6, 0xBA, 0xF7, 0x9E, 0xB5, 0x95, 0x52, 0x8A, 0x63, 0x0C, 0xCE, 0x59, 0x04, 0xFF, 0x8D, + 0xE7, 0x1C, 0x8C, 0x71, 0x39, 0xC6, 0x21, 0x24, 0x5A, 0xEB, 0xBD, 0xF7, 0xFF, 0xDF, 0x06, 0xFF, + 0x8D, 0xDE, 0xFB, 0x7B, 0xEF, 0x42, 0x08, 0x84, 0x10, 0xDE, 0xDB, 0xF7, 0x9E, 0xF7, 0xBE, 0x04, + 0xFF, 0x89, 0xDE, 0xFB, 0x7B, 0xEF, 0x42, 0x28, 0x94, 0x92, 0xEF, 0x5D, 0x04, 0xFF, 0x91, 0xFE, + 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xEF, 0x5D, 0xA5, 0x34, 0x73, 0xAE, 0xBD, 0xD7, 0xFF, + 0xDF, 0x08, 0xFF, 0xAF, 0xE7, 0x3C, 0x9C, 0xD3, 0x7B, 0xEF, 0xB5, 0xB6, 0xAD, 0x55, 0x8C, 0x51, + 0xCE, 0x79, 0xF7, 0xBE, 0xDE, 0xFB, 0xB5, 0xB6, 0xC6, 0x18, 0xBD, 0xD6, 0x73, 0xAE, 0x94, 0xB2, + 0xE7, 0x1C, 0xF7, 0x9E, 0xBD, 0xF7, 0x73, 0xAE, 0x94, 0xB2, 0xEF, 0x5D, 0xFF, 0x3D, 0xED, 0x17, + 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, 0xF2, 0xDF, 0xD6, 0xBA, 0x73, 0xAE, 0x42, 0x28, 0xA5, 0x34, + 0xF7, 0xBE, 0xDE, 0xDB, 0x84, 0x10, 0x42, 0x28, 0x7B, 0xEF, 0xB5, 0x96, 0x7B, 0xCE, 0x39, 0xE7, + 0x52, 0x8A, 0x63, 0x0C, 0x4A, 0x48, 0x42, 0x28, 0x94, 0xB2, 0xB5, 0x96, 0x6B, 0x4D, 0x5A, 0xEB, + 0x5A, 0xEB, 0x4A, 0x69, 0x63, 0x2C, 0xAD, 0x55, 0xA5, 0x14, 0x4A, 0x69, 0x31, 0xA6, 0x52, 0xAA, + 0x52, 0xAA, 0x42, 0x28, 0x73, 0x8E, 0xBD, 0xF7, 0xAD, 0x75, 0x52, 0xAA, 0x42, 0x07, 0x5A, 0xEB, + 0x5A, 0xCA, 0x42, 0x28, 0x6B, 0x4C, 0xBD, 0xD7, 0xD6, 0xBA, 0x9C, 0xD3, 0x5A, 0xCB, 0x4A, 0x69, + 0x5A, 0xCB, 0x63, 0x0B, 0x8C, 0x51, 0xC6, 0x18, 0xA5, 0x13, 0x52, 0x8A, 0x73, 0xAE, 0xD6, 0xBA, + 0xF7, 0x9E, 0xB5, 0xB6, 0x5A, 0xCB, 0x63, 0x2C, 0xCE, 0x79, 0x04, 0xFF, 0x8B, 0xF7, 0xBE, 0xBD, + 0xD7, 0x52, 0x8A, 0x31, 0x86, 0x84, 0x10, 0xDE, 0xFB, 0x08, 0xFF, 0x89, 0xDE, 0xFB, 0x84, 0x10, + 0x4A, 0x49, 0x8C, 0x71, 0xE7, 0x3C, 0x08, 0xFF, 0x89, 0xE7, 0x1C, 0x84, 0x10, 0x4A, 0x69, 0x94, + 0xB2, 0xEF, 0x5D, 0x04, 0xFF, 0x8F, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xEF, 0x7D, + 0xA5, 0x34, 0x7B, 0xCF, 0xBD, 0xF7, 0x0A, 0xFF, 0xAF, 0xE7, 0x3C, 0x9C, 0xF3, 0x84, 0x10, 0xC6, + 0x38, 0xD6, 0x9A, 0x94, 0xB2, 0x7B, 0xEF, 0x8C, 0x71, 0x84, 0x10, 0x8C, 0x51, 0xC6, 0x38, 0xDE, + 0xFB, 0xA5, 0x34, 0x7B, 0xCF, 0x84, 0x30, 0x8C, 0x51, 0x7B, 0xCF, 0x8C, 0x50, 0xCE, 0x79, 0xF7, + 0xBE, 0xFF, 0x3D, 0xED, 0x17, 0xED, 0x37, 0xFF, 0x5D, 0x0C, 0xFF, 0x87, 0xEF, 0x5D, 0xBD, 0xD6, + 0xA5, 0x13, 0xD6, 0x9A, 0x02, 0xFF, 0xE7, 0xF7, 0xBE, 0xCE, 0x79, 0xA5, 0x13, 0xAD, 0x75, 0xDE, + 0xDA, 0xCE, 0x59, 0x9C, 0xD2, 0x8C, 0x51, 0x9C, 0xF3, 0xA5, 0x14, 0x9C, 0xF3, 0xC6, 0x38, 0xDE, + 0xFB, 0xB5, 0xB6, 0x94, 0x92, 0x8C, 0x51, 0x9C, 0xD3, 0xBD, 0xF7, 0xDE, 0xDB, 0xAD, 0x55, 0x4A, + 0x69, 0x4A, 0x69, 0x84, 0x10, 0x8C, 0x71, 0x9C, 0xD2, 0xC6, 0x38, 0xEF, 0x5D, 0xDE, 0xDB, 0xAD, + 0x55, 0x9C, 0xF3, 0x9C, 0xF3, 0x8C, 0x71, 0x94, 0xB2, 0xBD, 0xF7, 0xEF, 0x7D, 0xFF, 0xDF, 0xDE, + 0xFB, 0xB5, 0x96, 0x94, 0x92, 0x8C, 0x50, 0x9C, 0xD2, 0xC6, 0x17, 0xE7, 0x1C, 0xCE, 0x79, 0xA5, + 0x34, 0xBD, 0xD7, 0xEF, 0x5D, 0xFF, 0xDF, 0xDE, 0xDB, 0xAD, 0x55, 0xB5, 0x96, 0xE7, 0x3C, 0x06, + 0xFF, 0x89, 0xCE, 0x79, 0x63, 0x2C, 0x4A, 0x69, 0xAD, 0x55, 0xF7, 0x9E, 0x08, 0xFF, 0x89, 0xEF, + 0x7D, 0xBD, 0xF7, 0xA5, 0x14, 0xC6, 0x38, 0xF7, 0x9E, 0x08, 0xFF, 0x89, 0xEF, 0x7D, 0xC6, 0x17, + 0xA5, 0x34, 0xCE, 0x59, 0xF7, 0xBE, 0x04, 0xFF, 0x8F, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, + 0x7E, 0xF7, 0xBE, 0xD6, 0x9A, 0xBD, 0xD7, 0xDE, 0xFB, 0x0A, 0xFF, 0xA5, 0xF7, 0x9E, 0xCE, 0x79, + 0xBD, 0xF7, 0xE7, 0x1C, 0xF7, 0xBE, 0xCE, 0x79, 0xA5, 0x34, 0x9C, 0xD3, 0xA5, 0x14, 0xC6, 0x18, + 0xEF, 0x5D, 0xFF, 0xDF, 0xE7, 0x1C, 0xBD, 0xD6, 0x9C, 0xF3, 0x9C, 0xD3, 0xA5, 0x34, 0xCE, 0x79, + 0xF7, 0x9E, 0x03, 0xFF, 0x86, 0x3D, 0xED, 0x37, 0xED, 0x37, 0xFF, 0x5D, 0x0D, 0xFF, 0x86, 0xDF, + 0xF7, 0x9E, 0xEF, 0x5D, 0xF7, 0xBE, 0x04, 0xFF, 0xB1, 0xF7, 0xBE, 0xEF, 0x7D, 0xEF, 0x7D, 0xF7, + 0xBE, 0xF7, 0xBE, 0xEF, 0x5D, 0xE7, 0x1C, 0xEF, 0x5D, 0xEF, 0x7D, 0xEF, 0x5D, 0xF7, 0x9E, 0xFF, + 0xDF, 0xF7, 0x9E, 0xE7, 0x3C, 0xE7, 0x1C, 0xEF, 0x5D, 0xF7, 0xBE, 0xEF, 0x7D, 0xAD, 0x55, 0x52, + 0x89, 0x63, 0x0C, 0xC6, 0x17, 0xE7, 0x3C, 0xEF, 0x5D, 0xF7, 0xBE, 0x02, 0xFF, 0x8D, 0xF7, 0xBE, + 0xEF, 0x7D, 0xEF, 0x7D, 0xEF, 0x7D, 0xE7, 0x3C, 0xE7, 0x3C, 0xF7, 0x9E, 0x05, 0xFF, 0x94, 0xDF, + 0xF7, 0x9E, 0xE7, 0x3C, 0xE7, 0x1C, 0xEF, 0x5D, 0xF7, 0xBE, 0xFF, 0xDF, 0xF7, 0xBE, 0xEF, 0x7D, + 0xF7, 0x9E, 0xFF, 0xDF, 0x02, 0xFF, 0x87, 0xF7, 0xBE, 0xEF, 0x7D, 0xEF, 0x7D, 0xFF, 0xDF, 0x02, + 0xFF, 0x8B, 0xF7, 0xBE, 0xD6, 0xBA, 0x94, 0x92, 0x52, 0x89, 0x6B, 0x4D, 0xCE, 0x59, 0x0B, 0xFF, + 0x86, 0xDF, 0xF7, 0x9E, 0xEF, 0x7D, 0xF7, 0x9E, 0x0B, 0xFF, 0x86, 0xDF, 0xF7, 0x9E, 0xEF, 0x7D, + 0xF7, 0xBE, 0x07, 0xFF, 0x8E, 0x1C, 0xED, 0x16, 0xED, 0x37, 0xFF, 0x1D, 0xFF, 0xDF, 0xF7, 0x9E, + 0xEF, 0x7D, 0xF7, 0xBE, 0x0B, 0xFF, 0x94, 0xDF, 0xF7, 0x9E, 0xF7, 0x7D, 0xFF, 0xBE, 0xFF, 0xDF, + 0xF7, 0xBE, 0xEF, 0x5D, 0xE7, 0x1C, 0xE7, 0x3C, 0xF7, 0x9E, 0xFF, 0xDF, 0x03, 0xFF, 0x8A, 0xDF, + 0xF7, 0x7E, 0xE7, 0x3C, 0xE7, 0x1C, 0xEF, 0x5D, 0xF7, 0xBE, 0x04, 0xFF, 0x87, 0xFE, 0xDC, 0xEC, + 0xD6, 0xED, 0x37, 0xFF, 0x7E, 0x3A, 0xFF, 0x89, 0xF7, 0x9E, 0xAD, 0x75, 0x5A, 0xCB, 0x73, 0x8D, + 0xD6, 0x9A, 0x3C, 0xFF, 0x8B, 0xEF, 0x5D, 0xA5, 0x14, 0x52, 0xAA, 0x52, 0x8A, 0x9C, 0xF3, 0xEF, + 0x5D, 0x2B, 0xFF, 0xC8, 0x7E, 0xF5, 0xB8, 0xEC, 0x54, 0xEC, 0x95, 0xED, 0x16, 0xED, 0x16, 0xED, + 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, + 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, + 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, + 0x16, 0xED, 0x16, 0xED, 0x16, 0xEC, 0x75, 0xEC, 0x54, 0xF6, 0x19, 0xFF, 0xBE, 0x3B, 0xFF, 0x88, + 0xDF, 0xDE, 0xDA, 0xAD, 0x75, 0xBD, 0xD7, 0xEF, 0x5D, 0x3C, 0xFF, 0x8B, 0xF7, 0x9E, 0xC6, 0x18, + 0x9C, 0xD3, 0xAD, 0x75, 0xDE, 0xFB, 0xFF, 0xDF, 0x2B, 0xFF, 0xC6, 0xDF, 0xFF, 0x1D, 0xF5, 0xD9, + 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, + 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, + 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, + 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xF6, 0x19, + 0xFF, 0x5D, 0x3F, 0xFF, 0x86, 0xDF, 0xEF, 0x7D, 0xF7, 0x9E, 0xFF, 0xDF, 0x3D, 0xFF, 0x88, 0xDF, + 0xF7, 0x9E, 0xEF, 0x5D, 0xEF, 0x7D, 0xFF, 0xDF, 0x2F, 0xFF, 0xC2, 0xDF, 0xFF, 0x9E, 0xFF, 0x3D, + 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, + 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, + 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, + 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x3D, 0xFF, 0x9E, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, + 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x26, 0xFF, +}; +// clang-format on diff --git a/keyboards/fpb/rp2040_tft/qmklogo.qgf.h b/keyboards/fpb/rp2040_tft/qmklogo.qgf.h new file mode 100644 index 000000000000..41a467de3c92 --- /dev/null +++ b/keyboards/fpb/rp2040_tft/qmklogo.qgf.h @@ -0,0 +1,11 @@ +// Copyright 2024 QMK -- generated source code only, image retains original copyright +// SPDX-License-Identifier: GPL-2.0-or-later + +// This file was auto-generated by `qmk painter-convert-graphics -i qmklogo.png -f rgb565` + +#pragma once + +#include + +extern const uint32_t gfx_qmklogo_length; +extern const uint8_t gfx_qmklogo[10700]; diff --git a/keyboards/fpb/rp2040_tft/readme.md b/keyboards/fpb/rp2040_tft/readme.md new file mode 100644 index 000000000000..5e0853d5be4d --- /dev/null +++ b/keyboards/fpb/rp2040_tft/readme.md @@ -0,0 +1,13 @@ +# Raspberry Pi 2040 onekey + +To trigger keypress, short together pins *GP4* and *GP5*. + +Double-tap reset to enter bootloader mode. Copy the built uf2 file to the device by dragging the file to the new USB disk. + +## Supported Hardware + +* Raspberry Pi Pico +* SparkFun Pro Micro - RP2040 +* Adafruit KB2040 - RP2040 Kee Boar +* ...and many more RP2040 based development boards + diff --git a/keyboards/fpb/rp2040_tft/rp2040_tft.c b/keyboards/fpb/rp2040_tft/rp2040_tft.c new file mode 100644 index 000000000000..ff7c644389ce --- /dev/null +++ b/keyboards/fpb/rp2040_tft/rp2040_tft.c @@ -0,0 +1,65 @@ +#include "rp2040_tft.h" + +#include +//#include + +//#include + + +#include "graphics/Apple-Orchard-128x160.qgf.h" +#include "graphics/qmklogo.qgf.h" + +static painter_device_t qp_display; +static painter_image_handle_t qp_image; + +void keyboard_post_init_kb(void) { + //qp_display = qp_st7735_make_spi_device( + qp_display = qp_gc9107_make_spi_device( + PANEL_WIDTH, + PANEL_HEIGHT, + PANEL_CS, + PANEL_DC, + PANEL_RST, + 8, //spi_divisor, + 0 //spi_mode + ); // Create the display + qp_init(qp_display, QP_ROTATION_180); // Initialise the display + qp_rect(qp_display, 0, 0, PANEL_WIDTH, PANEL_HEIGHT, 128, 255, 255, true); + + // if (qp_lvgl_attach(display)) { // Attach LVGL to the display + // //...Your code to draw // Run LVGL specific code to draw + // } + qp_image = qp_load_image_mem(gfx_qmklogo); + qp_drawimage(qp_display, 0, 0, qp_image); + + // if (qp_lvgl_attach(qp_display)) { // Attach LVGL to the display + // lv_obj_t * label1 = lv_label_create(lv_display_get_screen_active()); + // lv_label_set_long_mode(label1, LV_LABEL_LONG_WRAP); /*Break the long lines*/ + // lv_label_set_text(label1, "Recolor is not supported for v9 now."); + // lv_obj_set_width(label1, 150); /*Set smaller width to make the lines wrap*/ + // lv_obj_set_style_text_align(label1, LV_TEXT_ALIGN_CENTER, 0); + // lv_obj_align(label1, LV_ALIGN_CENTER, 0, -40); + + // lv_obj_t * label2 = lv_label_create(lv_screen_active()); + // lv_label_set_long_mode(label2, LV_LABEL_LONG_SCROLL_CIRCULAR); /*Circular scroll*/ + // lv_obj_set_width(label2, 150); + // lv_label_set_text(label2, "It is a circularly scrolling text. "); + // lv_obj_align(label2, LV_ALIGN_CENTER, 0, 40); + // } + + + return keyboard_post_init_user(); +} + +void housekeeping_task_kb(void) { + static uint32_t last_draw = 0; + if (timer_elapsed32(last_draw) > 33) { // Throttle to 30fps + last_draw = timer_read32(); + // Draw 8px-wide rainbow down the left side of the display + for (int i = 0; i < PANEL_WIDTH; ++i) { + qp_line(qp_display, i, 0, i, 7, i, 255, 255); + } + qp_flush(qp_display); + } +} + diff --git a/keyboards/fpb/rp2040_tft/rp2040_tft.h b/keyboards/fpb/rp2040_tft/rp2040_tft.h new file mode 100644 index 000000000000..5bf719419ae0 --- /dev/null +++ b/keyboards/fpb/rp2040_tft/rp2040_tft.h @@ -0,0 +1,12 @@ +#pragma once + +#define PANEL_WIDTH 128 +//#define PANEL_HEIGHT 160 +#define PANEL_HEIGHT 128 + +#define PANEL_DC 8 +#define PANEL_CS 9 +#define PANEL_CLK 10 +#define PANEL_MOSI 11 +#define PANEL_RST 12 +#define PANEL_BLK 13 \ No newline at end of file diff --git a/keyboards/fpb/rp2040_tft/rules.mk b/keyboards/fpb/rp2040_tft/rules.mk new file mode 100644 index 000000000000..903c4f00c547 --- /dev/null +++ b/keyboards/fpb/rp2040_tft/rules.mk @@ -0,0 +1,15 @@ +WS2812_DRIVER = vendor +#RGBLIGHT_ENABLE = yes + +QUANTUM_PAINTER_ENABLE = yes +#QUANTUM_PAINTER_DRIVERS += st7735_spi +QUANTUM_PAINTER_DRIVERS += gc9107_spi +#QUANTUM_PAINTER_DRIVERS += gc9a01_spi +QUANTUM_PAINTER_LVGL_INTEGRATION = yes + +#SPI_DRIVER_REQUIRED = yes + +#SRC += rp2040_tft.c +SRC += graphics/Apple-Orchard-128x160.qgf.c graphics/qmklogo.qgf.c + +#CONSOLE_ENABLE = yes \ No newline at end of file From 148360ad8b963f0bc4734eed259f1e7bada076ec Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Fri, 2 Feb 2024 21:02:47 +0000 Subject: [PATCH 05/35] clean up --- keyboards/fpb/rp2040_tft/qmklogo.qgf.c | 682 ------------------------- keyboards/fpb/rp2040_tft/qmklogo.qgf.h | 11 - 2 files changed, 693 deletions(-) delete mode 100644 keyboards/fpb/rp2040_tft/qmklogo.qgf.c delete mode 100644 keyboards/fpb/rp2040_tft/qmklogo.qgf.h diff --git a/keyboards/fpb/rp2040_tft/qmklogo.qgf.c b/keyboards/fpb/rp2040_tft/qmklogo.qgf.c deleted file mode 100644 index 6994be0b2f3a..000000000000 --- a/keyboards/fpb/rp2040_tft/qmklogo.qgf.c +++ /dev/null @@ -1,682 +0,0 @@ -// Copyright 2024 QMK -- generated source code only, image retains original copyright -// SPDX-License-Identifier: GPL-2.0-or-later - -// This file was auto-generated by `qmk painter-convert-graphics -i qmklogo.png -f rgb565` - -#include - -const uint32_t gfx_qmklogo_length = 10700; - -// clang-format off -const uint8_t gfx_qmklogo[10700] = { - 0x00, 0xFF, 0x12, 0x00, 0x00, 0x51, 0x47, 0x46, 0x01, 0xCC, 0x29, 0x00, 0x00, 0x33, 0xD6, 0xFF, - 0xFF, 0x80, 0x00, 0x80, 0x00, 0x01, 0x00, 0x01, 0xFE, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x02, 0xFD, 0x06, 0x00, 0x00, 0x08, 0x00, 0x01, 0xFF, 0xE8, 0x03, 0x05, 0xFA, 0x9C, 0x29, 0x00, - 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, - 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, - 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, - 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, - 0x7F, 0xFF, 0x7F, 0xFF, 0x38, 0xFF, 0x83, 0xF7, 0xBE, 0xF7, 0xBE, 0x02, 0xFF, 0x83, 0xF7, 0x9E, - 0xFF, 0xDF, 0x02, 0xFF, 0x81, 0xF7, 0x9E, 0x02, 0xFF, 0x83, 0xF7, 0xBE, 0xF7, 0xBE, 0x02, 0xFF, - 0x83, 0xF7, 0x9E, 0xFF, 0xDF, 0x7F, 0xFF, 0x67, 0xFF, 0x83, 0xCE, 0x79, 0xCE, 0x79, 0x02, 0xFF, - 0x87, 0xBD, 0xD7, 0xEF, 0x5D, 0xF7, 0x9E, 0xBD, 0xD7, 0x02, 0xFF, 0x83, 0xDE, 0xDB, 0xC6, 0x38, - 0x02, 0xFF, 0x83, 0xC6, 0x18, 0xDE, 0xFB, 0x7F, 0xFF, 0x65, 0xFF, 0x9D, 0xF7, 0xBE, 0xAD, 0x55, - 0xAD, 0x75, 0xF7, 0xBE, 0x8C, 0x71, 0xD6, 0x9A, 0xDE, 0xFB, 0x8C, 0x51, 0xF7, 0x9E, 0xBD, 0xD7, - 0x9C, 0xF3, 0xF7, 0xBE, 0x94, 0xB2, 0xC6, 0x18, 0xFF, 0xDF, 0x16, 0xFF, 0x89, 0xF7, 0x9E, 0xE7, - 0x1C, 0xDE, 0xFB, 0xE7, 0x3C, 0xF7, 0xBE, 0x06, 0xFF, 0x85, 0xF7, 0x9E, 0xE7, 0x3C, 0xF7, 0xBE, - 0x0A, 0xFF, 0x85, 0xF7, 0x9E, 0xE7, 0x3C, 0xFF, 0xDF, 0x03, 0xFF, 0x82, 0xDF, 0xE7, 0x3C, 0x06, - 0xFF, 0x83, 0xEF, 0x5D, 0xF7, 0x9E, 0x09, 0xFF, 0x8A, 0xDF, 0xE7, 0x3C, 0xE7, 0x3C, 0xE7, 0x3C, - 0xE7, 0x1C, 0xF7, 0xBE, 0x02, 0xFF, 0x83, 0xE7, 0x1C, 0xF7, 0x9E, 0x79, 0xFF, 0xA2, 0xDF, 0xDE, - 0xDB, 0xB5, 0xB6, 0x7B, 0xEF, 0x84, 0x10, 0xAD, 0x75, 0x6B, 0x6D, 0x9C, 0xD3, 0xA5, 0x14, 0x6B, - 0x6D, 0xAD, 0x55, 0x8C, 0x51, 0x7B, 0xCF, 0xAD, 0x75, 0x73, 0xAE, 0x8C, 0x71, 0xBD, 0xD7, 0xE7, - 0x1C, 0x12, 0xFF, 0x8D, 0xE7, 0x1C, 0xA5, 0x14, 0x84, 0x30, 0x84, 0x10, 0x8C, 0x51, 0xBD, 0xD7, - 0xF7, 0x9E, 0x04, 0xFF, 0x85, 0xBD, 0xF7, 0x7B, 0xCF, 0xB5, 0xB6, 0x0A, 0xFF, 0x85, 0xAD, 0x55, - 0x7B, 0xCF, 0xD6, 0xBA, 0x02, 0xFF, 0x85, 0xE7, 0x3C, 0x84, 0x30, 0xF7, 0x9E, 0x02, 0xFF, 0x85, - 0xEF, 0x5D, 0x8C, 0x71, 0xC6, 0x38, 0x08, 0xFF, 0x8B, 0xDE, 0xDB, 0x7B, 0xEF, 0x8C, 0x71, 0x8C, - 0x71, 0x8C, 0x51, 0xD6, 0x9A, 0x02, 0xFF, 0x83, 0x7B, 0xEF, 0xC6, 0x18, 0x78, 0xFF, 0xA5, 0xCE, - 0x79, 0x5A, 0xCB, 0x31, 0xA6, 0x31, 0x86, 0x31, 0xA6, 0x31, 0xA6, 0x31, 0x86, 0x31, 0xA6, 0x31, - 0xA6, 0x31, 0x86, 0x31, 0xA6, 0x31, 0xA6, 0x31, 0x86, 0x31, 0xA6, 0x31, 0x86, 0x31, 0x86, 0x31, - 0xA6, 0x6B, 0x4D, 0xE7, 0x1C, 0x0E, 0xFF, 0x8F, 0xEF, 0x7D, 0x73, 0x8E, 0x6B, 0x4D, 0xAD, 0x55, - 0xBD, 0xD7, 0x94, 0x92, 0x4A, 0x69, 0xAD, 0x55, 0x04, 0xFF, 0x87, 0x84, 0x30, 0x31, 0xA6, 0x52, - 0xAA, 0xEF, 0x7D, 0x06, 0xFF, 0x87, 0xE7, 0x1C, 0x52, 0x8A, 0x31, 0x86, 0xAD, 0x75, 0x02, 0xFF, - 0x8D, 0xD6, 0x9A, 0x39, 0xC7, 0xEF, 0x5D, 0xF7, 0xBE, 0x94, 0x92, 0x5A, 0xEB, 0xDE, 0xFB, 0x08, - 0xFF, 0x8B, 0xB5, 0x96, 0x39, 0xC7, 0xAD, 0x55, 0xAD, 0x55, 0xA5, 0x34, 0xDE, 0xDB, 0x02, 0xFF, - 0x83, 0xA5, 0x34, 0xD6, 0x9A, 0x03, 0xFF, 0x80, 0xDF, 0x03, 0xFF, 0x82, 0xDF, 0xF7, 0xBE, 0x05, - 0xFF, 0x80, 0xDF, 0x02, 0xFF, 0x83, 0xF7, 0x9E, 0xFF, 0xDF, 0x04, 0xFF, 0x83, 0xF7, 0xBE, 0xF7, - 0xBE, 0x05, 0xFF, 0x82, 0xDF, 0xFF, 0xDF, 0x07, 0xFF, 0x80, 0xDF, 0x07, 0xFF, 0x80, 0xDF, 0x05, - 0xFF, 0x84, 0xDF, 0xF7, 0x9E, 0xF7, 0xBE, 0x07, 0xFF, 0x80, 0xDF, 0x03, 0xFF, 0x82, 0xDF, 0xF7, - 0xBE, 0x05, 0xFF, 0x84, 0xDF, 0xF7, 0x9E, 0xF7, 0xBE, 0x20, 0xFF, 0xA5, 0x73, 0x8E, 0x29, 0x45, - 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, - 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x21, 0x24, - 0x94, 0xB2, 0x0E, 0xFF, 0x85, 0xA5, 0x34, 0x4A, 0x49, 0xE7, 0x3C, 0x06, 0xFF, 0x85, 0x9C, 0xF3, - 0x4A, 0x49, 0xEF, 0x7D, 0x02, 0xFF, 0x87, 0x84, 0x10, 0x6B, 0x6D, 0x5A, 0xEB, 0xB5, 0x96, 0x06, - 0xFF, 0x87, 0x9C, 0xD3, 0x73, 0xAE, 0x5A, 0xCB, 0xAD, 0x75, 0x02, 0xFF, 0x8B, 0xD6, 0xBA, 0x42, - 0x08, 0xEF, 0x5D, 0xB5, 0x96, 0x52, 0xAA, 0xD6, 0x9A, 0x0A, 0xFF, 0x83, 0xB5, 0x96, 0x52, 0x8A, - 0x0A, 0xFF, 0x83, 0xCE, 0x59, 0xEF, 0x5D, 0x02, 0xFF, 0x9D, 0xDE, 0xDB, 0xD6, 0x9A, 0xCE, 0x79, - 0xAD, 0x75, 0xF7, 0x9E, 0xE7, 0x1C, 0xCE, 0x79, 0xDE, 0xDB, 0xB5, 0x96, 0xBD, 0xF7, 0xEF, 0x5D, - 0xDE, 0xFB, 0xB5, 0xB6, 0xB5, 0xB6, 0xEF, 0x5D, 0x02, 0xFF, 0x83, 0xD6, 0xBA, 0xCE, 0x79, 0x04, - 0xFF, 0x83, 0xDE, 0xDB, 0xC6, 0x38, 0x04, 0xFF, 0x83, 0xEF, 0x7D, 0xC6, 0x18, 0x02, 0xFF, 0x89, - 0xE7, 0x1C, 0xC6, 0x18, 0xB5, 0x96, 0xBD, 0xD7, 0xE7, 0x3C, 0x04, 0xFF, 0x87, 0xCE, 0x59, 0xDE, - 0xFB, 0xBD, 0xF7, 0xBD, 0xF7, 0x02, 0xFF, 0x89, 0xF7, 0x9E, 0xCE, 0x59, 0xB5, 0xB6, 0xBD, 0xD7, - 0xE7, 0x1C, 0x18, 0xFF, 0xAF, 0xF7, 0xBE, 0xE7, 0x1C, 0xDE, 0xFB, 0x4A, 0x69, 0x29, 0x65, 0x31, - 0x86, 0x31, 0xA6, 0x42, 0x08, 0x39, 0xE7, 0x31, 0x86, 0x31, 0x86, 0x39, 0xC7, 0x42, 0x08, 0x31, - 0xA6, 0x31, 0x86, 0x31, 0x86, 0x42, 0x08, 0x39, 0xE7, 0x31, 0x86, 0x31, 0x86, 0x29, 0x65, 0x6B, - 0x4D, 0xE7, 0x1C, 0xE7, 0x1C, 0x0A, 0xFF, 0x83, 0x63, 0x2C, 0x84, 0x30, 0x08, 0xFF, 0x85, 0xE7, - 0x3C, 0x39, 0xC7, 0xCE, 0x79, 0x02, 0xFF, 0x89, 0x84, 0x10, 0x7B, 0xEF, 0x9C, 0xF3, 0x63, 0x2C, - 0xFF, 0xDF, 0x02, 0xFF, 0x89, 0xF7, 0x9E, 0x5A, 0xCB, 0xC6, 0x18, 0x5A, 0xCB, 0xAD, 0x75, 0x02, - 0xFF, 0x89, 0xD6, 0xBA, 0x42, 0x08, 0xB5, 0xB6, 0x5A, 0xCB, 0xBD, 0xF7, 0x0C, 0xFF, 0x8B, 0xB5, - 0xB6, 0x4A, 0x69, 0xEF, 0x5D, 0xEF, 0x5D, 0xEF, 0x5D, 0xFF, 0xDF, 0x02, 0xFF, 0x83, 0x5A, 0xCB, - 0xB5, 0xB6, 0x02, 0xFF, 0x9D, 0x9C, 0xD3, 0x5A, 0xEB, 0x73, 0xAE, 0x73, 0x8E, 0xE7, 0x1C, 0xAD, - 0x55, 0x5A, 0xCB, 0x84, 0x30, 0x84, 0x10, 0x52, 0xAA, 0x8C, 0x71, 0x84, 0x30, 0x84, 0x10, 0x5A, - 0xCB, 0x8C, 0x71, 0x02, 0xFF, 0x85, 0x9C, 0xF3, 0x63, 0x2C, 0xFF, 0xDF, 0x02, 0xFF, 0x85, 0x84, - 0x30, 0x4A, 0x49, 0xF7, 0x9E, 0x02, 0xFF, 0x83, 0xAD, 0x75, 0x63, 0x0C, 0x02, 0xFF, 0x8B, 0x9C, - 0xF3, 0x84, 0x10, 0x8C, 0x71, 0x6B, 0x4D, 0x7B, 0xEF, 0xFF, 0xDF, 0x02, 0xFF, 0x95, 0x6B, 0x4D, - 0x6B, 0x6D, 0x73, 0x8E, 0x84, 0x30, 0xFF, 0xDF, 0xA5, 0x34, 0x6B, 0x6D, 0x94, 0x92, 0x7B, 0xEF, - 0x73, 0x8E, 0xEF, 0x5D, 0x16, 0xFF, 0xB1, 0xE7, 0x3C, 0xA5, 0x34, 0xA5, 0x14, 0x42, 0x08, 0x31, - 0x86, 0x31, 0x86, 0x39, 0xC7, 0xA5, 0x34, 0x7B, 0xEF, 0x29, 0x65, 0x29, 0x65, 0x5A, 0xEB, 0xAD, - 0x75, 0x4A, 0x49, 0x31, 0x86, 0x31, 0x86, 0x94, 0xB2, 0x8C, 0x71, 0x31, 0x86, 0x31, 0x86, 0x29, - 0x65, 0x52, 0xAA, 0xA5, 0x34, 0xAD, 0x55, 0xF7, 0x9E, 0x08, 0xFF, 0x83, 0x52, 0x8A, 0x9C, 0xF3, - 0x08, 0xFF, 0x85, 0xF7, 0x9E, 0x42, 0x08, 0xBD, 0xF7, 0x02, 0xFF, 0x89, 0x84, 0x10, 0x7B, 0xCF, - 0xE7, 0x3C, 0x42, 0x28, 0xD6, 0xBA, 0x02, 0xFF, 0x89, 0xBD, 0xD7, 0x5A, 0xEB, 0xF7, 0xBE, 0x52, - 0xAA, 0xAD, 0x75, 0x02, 0xFF, 0x89, 0xD6, 0xBA, 0x42, 0x08, 0x5A, 0xCB, 0x73, 0x8E, 0xFF, 0xDF, - 0x0C, 0xFF, 0x8B, 0xB5, 0xB6, 0x39, 0xE7, 0x9C, 0xF3, 0x9C, 0xF3, 0x9C, 0xF3, 0xE7, 0x3C, 0x02, - 0xFF, 0x83, 0x52, 0xAA, 0xB5, 0x96, 0x02, 0xFF, 0x87, 0x9C, 0xD3, 0x39, 0xE7, 0xCE, 0x79, 0xFF, - 0xDF, 0x02, 0xFF, 0x85, 0xA5, 0x34, 0x39, 0xE7, 0xD6, 0x9A, 0x02, 0xFF, 0x85, 0x9C, 0xF3, 0x31, - 0xA6, 0xC6, 0x18, 0x02, 0xFF, 0x93, 0xBD, 0xD7, 0x42, 0x28, 0xF7, 0xBE, 0xDE, 0xDB, 0x42, 0x28, - 0xE7, 0x3C, 0xFF, 0xDF, 0x5A, 0xEB, 0x39, 0xE7, 0xCE, 0x59, 0x02, 0xFF, 0x83, 0x73, 0x8E, 0x94, - 0x92, 0x02, 0xFF, 0x8B, 0xDE, 0xFB, 0xF7, 0x9E, 0xEF, 0x7D, 0xC6, 0x38, 0x39, 0xE7, 0xEF, 0x5D, - 0x02, 0xFF, 0x95, 0x63, 0x0C, 0x5A, 0xEB, 0xE7, 0x3C, 0xFF, 0xDF, 0xE7, 0x3C, 0x4A, 0x49, 0xC6, - 0x18, 0xEF, 0x5D, 0xEF, 0x5D, 0x4A, 0x69, 0xAD, 0x75, 0x16, 0xFF, 0x97, 0xF7, 0xBE, 0xDE, 0xFB, - 0xD6, 0xBA, 0x4A, 0x49, 0x31, 0x86, 0x31, 0x86, 0x39, 0xE7, 0xF7, 0xBE, 0xB5, 0xB6, 0x29, 0x45, - 0x29, 0x45, 0x84, 0x10, 0x02, 0xFF, 0x97, 0x5A, 0xEB, 0x29, 0x65, 0x31, 0x86, 0xDE, 0xDB, 0xD6, - 0x9A, 0x29, 0x65, 0x31, 0x86, 0x29, 0x65, 0x63, 0x2C, 0xDE, 0xFB, 0xDE, 0xFB, 0xFF, 0xDF, 0x08, - 0xFF, 0x83, 0x52, 0xAA, 0x9C, 0xD3, 0x08, 0xFF, 0x85, 0xEF, 0x7D, 0x42, 0x08, 0xC6, 0x38, 0x02, - 0xFF, 0x83, 0x84, 0x10, 0x73, 0xAE, 0x02, 0xFF, 0x89, 0x6B, 0x6D, 0x8C, 0x71, 0xFF, 0xDF, 0x6B, - 0x6D, 0xA5, 0x14, 0x02, 0xFF, 0x83, 0x52, 0xAA, 0xAD, 0x75, 0x02, 0xFF, 0x89, 0xD6, 0xBA, 0x42, - 0x08, 0x9C, 0xD3, 0x52, 0xAA, 0xCE, 0x79, 0x0C, 0xFF, 0x8B, 0xB5, 0xB6, 0x39, 0xE7, 0x9C, 0xD3, - 0x9C, 0xD3, 0x9C, 0xD3, 0xE7, 0x3C, 0x02, 0xFF, 0x83, 0x52, 0xAA, 0xB5, 0x96, 0x02, 0xFF, 0x83, - 0x94, 0xB2, 0x6B, 0x4D, 0x06, 0xFF, 0x83, 0xA5, 0x14, 0x63, 0x0C, 0x04, 0xFF, 0x83, 0xC6, 0x18, - 0x4A, 0x69, 0x04, 0xFF, 0x99, 0xDE, 0xDB, 0x42, 0x08, 0xEF, 0x5D, 0xFF, 0xDF, 0x52, 0xAA, 0xB5, - 0xB6, 0xDE, 0xDB, 0x63, 0x2C, 0x7B, 0xCF, 0x94, 0x92, 0xF7, 0xBE, 0x4A, 0x69, 0xD6, 0x9A, 0x02, - 0xFF, 0x8B, 0xE7, 0x1C, 0xBD, 0xF7, 0xAD, 0x75, 0x9C, 0xF3, 0x42, 0x08, 0xE7, 0x1C, 0x02, 0xFF, - 0x83, 0x5A, 0xEB, 0xA5, 0x34, 0x04, 0xFF, 0x8D, 0xC6, 0x38, 0x39, 0xE7, 0xA5, 0x34, 0xA5, 0x34, - 0xAD, 0x55, 0x63, 0x0C, 0x9C, 0xF3, 0x16, 0xFF, 0x97, 0xF7, 0x9E, 0xD6, 0x9A, 0xCE, 0x59, 0x4A, - 0x49, 0x31, 0x86, 0x31, 0x86, 0x39, 0xE7, 0xEF, 0x7D, 0xB5, 0x96, 0x29, 0x45, 0x29, 0x45, 0x7B, - 0xEF, 0x02, 0xFF, 0x97, 0x5A, 0xEB, 0x29, 0x65, 0x31, 0x86, 0xD6, 0xBA, 0xCE, 0x79, 0x29, 0x65, - 0x31, 0x86, 0x29, 0x65, 0x63, 0x0C, 0xD6, 0x9A, 0xD6, 0x9A, 0xFF, 0xDF, 0x08, 0xFF, 0x85, 0x73, - 0x8E, 0x73, 0xAE, 0xFF, 0xDF, 0x06, 0xFF, 0x85, 0xCE, 0x59, 0x42, 0x08, 0xE7, 0x1C, 0x02, 0xFF, - 0x83, 0x84, 0x10, 0x73, 0xAE, 0x02, 0xFF, 0x89, 0xBD, 0xD7, 0x52, 0x8A, 0xC6, 0x18, 0x52, 0x8A, - 0xE7, 0x3C, 0x02, 0xFF, 0x83, 0x52, 0xAA, 0xAD, 0x75, 0x02, 0xFF, 0x8B, 0xD6, 0xBA, 0x42, 0x08, - 0xEF, 0x5D, 0x8C, 0x51, 0x63, 0x0C, 0xE7, 0x3C, 0x0A, 0xFF, 0x83, 0xB5, 0x96, 0x52, 0x8A, 0x0A, - 0xFF, 0x83, 0x52, 0xAA, 0xB5, 0x96, 0x02, 0xFF, 0x83, 0x94, 0xB2, 0x6B, 0x6D, 0x06, 0xFF, 0x83, - 0xA5, 0x14, 0x63, 0x0C, 0x04, 0xFF, 0x85, 0xC6, 0x18, 0x4A, 0x69, 0xFF, 0xDF, 0x02, 0xFF, 0x85, - 0xDE, 0xDB, 0x42, 0x28, 0xEF, 0x5D, 0x02, 0xFF, 0x9C, 0x8C, 0x71, 0x7B, 0xCF, 0xA5, 0x34, 0x8C, - 0x51, 0xC6, 0x18, 0x63, 0x0C, 0xC6, 0x18, 0x5A, 0xCB, 0xF7, 0xBE, 0xF7, 0xBE, 0x7B, 0xCF, 0x7B, - 0xCF, 0xA5, 0x14, 0x9C, 0xD3, 0x39, 0x02, 0xE7, 0x80, 0x3C, 0x02, 0xFF, 0x83, 0x5A, 0xEB, 0xAD, - 0x55, 0x04, 0xFF, 0x8D, 0xC6, 0x18, 0x39, 0xE7, 0xAD, 0x55, 0xAD, 0x75, 0xAD, 0x75, 0xB5, 0x96, - 0xDE, 0xFB, 0x16, 0xFF, 0x97, 0xEF, 0x5D, 0xAD, 0x75, 0xAD, 0x55, 0x42, 0x28, 0x31, 0x86, 0x31, - 0x86, 0x39, 0xE7, 0xEF, 0x7D, 0xB5, 0x96, 0x29, 0x45, 0x29, 0x45, 0x7B, 0xEF, 0x02, 0xFF, 0x97, - 0x5A, 0xEB, 0x29, 0x65, 0x31, 0x86, 0xD6, 0xBA, 0xCE, 0x79, 0x29, 0x65, 0x31, 0x86, 0x29, 0x65, - 0x5A, 0xCB, 0xB5, 0x96, 0xB5, 0x96, 0xF7, 0xBE, 0x08, 0xFF, 0x91, 0xB5, 0xB6, 0x4A, 0x49, 0xC6, - 0x18, 0xE7, 0x3C, 0xE7, 0x3C, 0xDE, 0xDB, 0x6B, 0x6D, 0x6B, 0x6D, 0xFF, 0xDF, 0x02, 0xFF, 0x83, - 0x84, 0x10, 0x73, 0xAE, 0x02, 0xFF, 0x87, 0xF7, 0x9E, 0x5A, 0xCB, 0x52, 0x8A, 0x8C, 0x51, 0x04, - 0xFF, 0x83, 0x52, 0xAA, 0xAD, 0x75, 0x02, 0xFF, 0x8A, 0xD6, 0xBA, 0x39, 0xE7, 0xEF, 0x7D, 0xF7, - 0x9E, 0x6B, 0x4D, 0x7B, 0x02, 0xEF, 0x80, 0x7D, 0x08, 0xFF, 0x83, 0xB5, 0x96, 0x4A, 0x69, 0x0A, - 0xFF, 0x83, 0x52, 0xAA, 0xB5, 0x96, 0x02, 0xFF, 0x83, 0x94, 0xB2, 0x6B, 0x6D, 0x06, 0xFF, 0x83, - 0xA5, 0x14, 0x63, 0x0C, 0x04, 0xFF, 0x85, 0xC6, 0x18, 0x4A, 0x69, 0xFF, 0xDF, 0x02, 0xFF, 0x85, - 0xDE, 0xDB, 0x42, 0x08, 0xEF, 0x5D, 0x02, 0xFF, 0x86, 0xCE, 0x79, 0x52, 0x8A, 0x63, 0x0C, 0xBD, - 0x02, 0xF7, 0x86, 0x9E, 0x5A, 0xCB, 0x63, 0x2C, 0x8C, 0x71, 0x02, 0xFF, 0x8D, 0xE7, 0x1C, 0x39, - 0xE7, 0xCE, 0x59, 0xEF, 0x7D, 0xCE, 0x59, 0x42, 0x08, 0xE7, 0x1C, 0x02, 0xFF, 0x83, 0x5A, 0xEB, - 0xAD, 0x55, 0x04, 0xFF, 0x8D, 0xE7, 0x1C, 0x4A, 0x69, 0xCE, 0x59, 0xEF, 0x5D, 0xEF, 0x5D, 0xDE, - 0xFB, 0xF7, 0xBE, 0x17, 0xFF, 0x96, 0xDF, 0xE7, 0x3C, 0xE7, 0x1C, 0x4A, 0x69, 0x31, 0x86, 0x31, - 0x86, 0x39, 0xE7, 0xEF, 0x7D, 0xB5, 0xB6, 0x29, 0x45, 0x29, 0x45, 0x7B, 0xEF, 0x02, 0xFF, 0x95, - 0x5A, 0xEB, 0x29, 0x65, 0x31, 0x86, 0xD6, 0xBA, 0xCE, 0x59, 0x29, 0x65, 0x31, 0x86, 0x29, 0x65, - 0x6B, 0x4D, 0xE7, 0x3C, 0xEF, 0x5D, 0x0A, 0xFF, 0x97, 0xF7, 0xBE, 0x8C, 0x51, 0x6B, 0x4D, 0x94, - 0xB2, 0x9C, 0xF3, 0x84, 0x10, 0x4A, 0x49, 0x8C, 0x51, 0xDE, 0xFB, 0xFF, 0xDF, 0x8C, 0x71, 0x84, - 0x10, 0x04, 0xFF, 0x85, 0x9C, 0xD3, 0x39, 0xE7, 0xD6, 0x9A, 0x04, 0xFF, 0x83, 0x63, 0x2C, 0xB5, - 0xB6, 0x02, 0xFF, 0x85, 0xDE, 0xDB, 0x52, 0x8A, 0xEF, 0x5D, 0x02, 0xFF, 0x85, 0xD6, 0xBA, 0x52, - 0xAA, 0xBD, 0xD7, 0x08, 0xFF, 0x83, 0xBD, 0xD7, 0x63, 0x0C, 0x0A, 0xFF, 0x83, 0x63, 0x2C, 0xBD, - 0xD7, 0x02, 0xFF, 0x83, 0x9C, 0xF3, 0x7B, 0xEF, 0x06, 0xFF, 0x83, 0xAD, 0x55, 0x73, 0x8E, 0x04, - 0xFF, 0x85, 0xC6, 0x38, 0x63, 0x0C, 0xFF, 0xDF, 0x02, 0xFF, 0x85, 0xDE, 0xFB, 0x52, 0xAA, 0xEF, - 0x7D, 0x02, 0xFF, 0x87, 0xF7, 0xBE, 0x63, 0x0C, 0x52, 0x8A, 0xEF, 0x5D, 0x02, 0xFF, 0x85, 0x7B, - 0xEF, 0x42, 0x08, 0xCE, 0x79, 0x02, 0xFF, 0x8D, 0xF7, 0x9E, 0x6B, 0x4D, 0x8C, 0x71, 0xAD, 0x75, - 0x84, 0x30, 0x52, 0xAA, 0xE7, 0x3C, 0x02, 0xFF, 0x83, 0x6B, 0x6D, 0xB5, 0x96, 0x06, 0xFF, 0x8B, - 0x94, 0xB2, 0x73, 0x8E, 0xAD, 0x55, 0xAD, 0x55, 0x94, 0x92, 0xE7, 0x1C, 0x16, 0xFF, 0x97, 0xEF, - 0x5D, 0xB5, 0xB6, 0xB5, 0x96, 0x42, 0x28, 0x31, 0x86, 0x31, 0x86, 0x31, 0xA6, 0xE7, 0x1C, 0xC6, - 0x38, 0x31, 0x86, 0x29, 0x45, 0x7B, 0xEF, 0x02, 0xFF, 0x84, 0x5A, 0xEB, 0x29, 0x65, 0x39, 0x02, - 0xE7, 0x90, 0x3C, 0xBD, 0xD7, 0x29, 0x65, 0x31, 0x86, 0x29, 0x65, 0x5A, 0xCB, 0xBD, 0xD7, 0xBD, - 0xD7, 0xF7, 0xBE, 0x0A, 0xFF, 0x95, 0xF7, 0xBE, 0xBD, 0xD7, 0x9C, 0xD3, 0x94, 0xB2, 0xB5, 0xB6, - 0xBD, 0xF7, 0x6B, 0x6D, 0x7B, 0xEF, 0xDE, 0xDB, 0xCE, 0x59, 0xC6, 0x38, 0x04, 0xFF, 0x85, 0xE7, - 0x1C, 0xAD, 0x75, 0xFF, 0xDF, 0x04, 0xFF, 0x83, 0xBD, 0xD7, 0xDE, 0xFB, 0x02, 0xFF, 0x85, 0xEF, - 0x7D, 0xAD, 0x75, 0xF7, 0xBE, 0x04, 0xFF, 0x83, 0xC6, 0x38, 0xBD, 0xF7, 0x08, 0xFF, 0x83, 0xE7, - 0x1C, 0xB5, 0xB6, 0x0A, 0xFF, 0x83, 0xBD, 0xD7, 0xDE, 0xFB, 0x02, 0xFF, 0x83, 0xD6, 0x9A, 0xC6, - 0x18, 0x06, 0xFF, 0x83, 0xDE, 0xDB, 0xBD, 0xF7, 0x04, 0xFF, 0x83, 0xE7, 0x3C, 0xB5, 0xB6, 0x04, - 0xFF, 0x85, 0xF7, 0x9E, 0xB5, 0x96, 0xF7, 0xBE, 0x04, 0xFF, 0x83, 0xC6, 0x18, 0xB5, 0xB6, 0x04, - 0xFF, 0x85, 0xD6, 0x9A, 0xAD, 0x55, 0xF7, 0xBE, 0x04, 0xFF, 0x8B, 0xDE, 0xDB, 0x9C, 0xF3, 0x9C, - 0xF3, 0xD6, 0x9A, 0xBD, 0xD7, 0xF7, 0xBE, 0x02, 0xFF, 0x83, 0xBD, 0xD7, 0xDE, 0xDB, 0x06, 0xFF, - 0x8B, 0xF7, 0xBE, 0xB5, 0xB6, 0x9C, 0xD3, 0x9C, 0xD3, 0xB5, 0xB6, 0xF7, 0xBE, 0x16, 0xFF, 0x97, - 0xEF, 0x7D, 0xC6, 0x18, 0xBD, 0xF7, 0x4A, 0x49, 0x29, 0x65, 0x31, 0x86, 0x29, 0x65, 0xB5, 0x96, - 0xEF, 0x5D, 0x5A, 0xEB, 0x31, 0x86, 0x84, 0x10, 0x02, 0xFF, 0x97, 0x63, 0x0C, 0x31, 0xA6, 0x73, - 0xAE, 0xF7, 0xBE, 0x84, 0x30, 0x29, 0x65, 0x31, 0x86, 0x29, 0x65, 0x5A, 0xEB, 0xC6, 0x18, 0xC6, - 0x38, 0xF7, 0xBE, 0x16, 0xFF, 0x85, 0xE7, 0x1C, 0x94, 0xB2, 0xCE, 0x59, 0x7F, 0xFF, 0x34, 0xFF, - 0x96, 0xDF, 0xE7, 0x1C, 0xDE, 0xFB, 0x4A, 0x69, 0x31, 0x86, 0x31, 0x86, 0x29, 0x65, 0x63, 0x0C, - 0xDE, 0xFB, 0xC6, 0x38, 0x73, 0xAE, 0xA5, 0x14, 0x02, 0xFF, 0x95, 0x8C, 0x51, 0x84, 0x10, 0xD6, - 0x9A, 0xC6, 0x38, 0x42, 0x08, 0x31, 0x86, 0x31, 0x86, 0x29, 0x65, 0x6B, 0x4D, 0xE7, 0x1C, 0xE7, - 0x3C, 0x7F, 0xFF, 0x51, 0xFF, 0x97, 0xE7, 0x3C, 0xAD, 0x55, 0xA5, 0x34, 0x42, 0x28, 0x31, 0x86, - 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x6B, 0x6D, 0xBD, 0xF7, 0xD6, 0x9A, 0xDE, 0xFB, 0x02, 0xFF, - 0x97, 0xDE, 0xDB, 0xCE, 0x79, 0xAD, 0x75, 0x52, 0x8A, 0x29, 0x65, 0x31, 0x86, 0x31, 0x86, 0x29, - 0x65, 0x52, 0xAA, 0xAD, 0x75, 0xAD, 0x75, 0xF7, 0xBE, 0x0C, 0xFF, 0x83, 0xF7, 0xBE, 0xF7, 0xBE, - 0x40, 0xFF, 0x81, 0xF7, 0xBE, 0x17, 0xFF, 0x84, 0xDF, 0xF7, 0x9E, 0xFF, 0xDF, 0x46, 0xFF, 0x83, - 0xEF, 0x7D, 0xFF, 0xDF, 0x16, 0xFF, 0x97, 0xF7, 0xBE, 0xDE, 0xDB, 0xD6, 0xBA, 0x4A, 0x49, 0x29, - 0x65, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x29, 0x65, 0x39, 0xE7, 0x52, 0xAA, 0xA5, 0x14, 0x02, - 0xFF, 0x97, 0x8C, 0x51, 0x52, 0x8A, 0x31, 0xA6, 0x29, 0x65, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, - 0x29, 0x65, 0x63, 0x2C, 0xDE, 0xDB, 0xDE, 0xDB, 0xFF, 0xDF, 0x0A, 0xFF, 0x87, 0xDE, 0xFB, 0xC6, - 0x38, 0xC6, 0x38, 0xE7, 0x3C, 0x3D, 0xFF, 0x82, 0xDF, 0xCE, 0x59, 0x02, 0xFF, 0x83, 0xEF, 0x5D, - 0xF7, 0xBE, 0x0E, 0xFF, 0x87, 0xF7, 0xBE, 0xCE, 0x79, 0xC6, 0x18, 0xD6, 0xBA, 0x31, 0xFF, 0x82, - 0xDF, 0xEF, 0x5D, 0x12, 0xFF, 0x83, 0xAD, 0x75, 0xE7, 0x3C, 0x16, 0xFF, 0xB1, 0xF7, 0x9E, 0xCE, - 0x79, 0xCE, 0x59, 0x4A, 0x49, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, - 0x86, 0x21, 0x24, 0x73, 0xAE, 0xEF, 0x5D, 0x52, 0xAA, 0x29, 0x45, 0x31, 0x86, 0x31, 0x86, 0x31, - 0x86, 0x31, 0x86, 0x31, 0x86, 0x29, 0x65, 0x63, 0x0C, 0xD6, 0x9A, 0xD6, 0x9A, 0xFF, 0xDF, 0x08, - 0xFF, 0x89, 0xE7, 0x3C, 0x8C, 0x51, 0xA5, 0x34, 0xAD, 0x55, 0xBD, 0xD7, 0x02, 0xFF, 0x85, 0xEF, - 0x5D, 0xE7, 0x1C, 0xEF, 0x5D, 0x03, 0xFF, 0x8C, 0xDF, 0xEF, 0x5D, 0xE7, 0x3C, 0xEF, 0x5D, 0xF7, - 0x9E, 0xE7, 0x1C, 0xEF, 0x7D, 0x02, 0xFF, 0x8D, 0xEF, 0x7D, 0xEF, 0x5D, 0xE7, 0x1C, 0xF7, 0x9E, - 0xEF, 0x5D, 0xE7, 0x1C, 0xFF, 0xDF, 0x02, 0xFF, 0x81, 0xEF, 0x5D, 0x03, 0xFF, 0x82, 0xDF, 0xEF, - 0x7D, 0x02, 0xFF, 0x95, 0xEF, 0x5D, 0xEF, 0x5D, 0xE7, 0x1C, 0xFF, 0xDF, 0xF7, 0x9E, 0xAD, 0x55, - 0xFF, 0xDF, 0xA5, 0x14, 0xCE, 0x59, 0xF7, 0x9E, 0xEF, 0x5D, 0x04, 0xFF, 0x81, 0xEF, 0x5D, 0x04, - 0xFF, 0x8B, 0xDE, 0xDB, 0x73, 0xAE, 0xAD, 0x75, 0xB5, 0x96, 0xFF, 0xDF, 0xEF, 0x5D, 0x04, 0xFF, - 0x81, 0xEF, 0x5D, 0x02, 0xFF, 0x87, 0xEF, 0x7D, 0xEF, 0x7D, 0xE7, 0x1C, 0xF7, 0x9E, 0x02, 0xFF, - 0x87, 0xEF, 0x7D, 0xEF, 0x7D, 0xE7, 0x1C, 0xEF, 0x7D, 0x03, 0xFF, 0x86, 0xDF, 0xE7, 0x3C, 0xE7, - 0x1C, 0xF7, 0x9E, 0x02, 0xFF, 0x8B, 0xEF, 0x7D, 0xEF, 0x5D, 0xE7, 0x3C, 0xD6, 0xBA, 0x9C, 0xF3, - 0xEF, 0x5D, 0x02, 0xFF, 0x85, 0xEF, 0x7D, 0xE7, 0x1C, 0xEF, 0x5D, 0x04, 0xFF, 0x87, 0xE7, 0x3C, - 0xE7, 0x3C, 0x7B, 0xEF, 0xD6, 0xBA, 0x16, 0xFF, 0xB1, 0xE7, 0x3C, 0xAD, 0x75, 0xAD, 0x55, 0x42, - 0x28, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x52, - 0xAA, 0x94, 0xB2, 0x42, 0x28, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, - 0x86, 0x29, 0x65, 0x5A, 0xCB, 0xAD, 0x75, 0xB5, 0x96, 0xF7, 0xBE, 0x08, 0xFF, 0x83, 0xA5, 0x34, - 0x94, 0xB2, 0x04, 0xFF, 0x99, 0xF7, 0xBE, 0xEF, 0x7D, 0xAD, 0x75, 0xA5, 0x34, 0xA5, 0x34, 0xE7, - 0x3C, 0xDE, 0xFB, 0xA5, 0x14, 0xAD, 0x75, 0x9C, 0xF3, 0xC6, 0x18, 0xA5, 0x14, 0xB5, 0x96, 0x02, - 0xFF, 0x91, 0xB5, 0xB6, 0xAD, 0x75, 0xA5, 0x14, 0xAD, 0x75, 0xBD, 0xD7, 0x9C, 0xD3, 0xD6, 0xBA, - 0xF7, 0xBE, 0xAD, 0x55, 0x02, 0xFF, 0xA1, 0xE7, 0x1C, 0xB5, 0x96, 0xFF, 0xDF, 0xA5, 0x14, 0xB5, - 0xB6, 0x9C, 0xD3, 0xD6, 0xBA, 0xFF, 0xDF, 0xAD, 0x75, 0xE7, 0x3C, 0x63, 0x0C, 0x8C, 0x71, 0xD6, - 0xBA, 0xA5, 0x34, 0xFF, 0xDF, 0xEF, 0x5D, 0xAD, 0x75, 0x04, 0xFF, 0x87, 0xCE, 0x59, 0x7B, 0xEF, - 0xDE, 0xDB, 0xF7, 0xBE, 0x02, 0xFF, 0x87, 0xAD, 0x55, 0xEF, 0x7D, 0xFF, 0xDF, 0xA5, 0x34, 0x02, - 0xFF, 0x87, 0xAD, 0x75, 0xB5, 0x96, 0xA5, 0x14, 0xB5, 0x96, 0x02, 0xFF, 0xB3, 0xB5, 0x96, 0xB5, - 0x96, 0xA5, 0x14, 0xB5, 0x96, 0xFF, 0xDF, 0xD6, 0x9A, 0xA5, 0x34, 0xA5, 0x34, 0xB5, 0xB6, 0xFF, - 0xDF, 0xB5, 0x96, 0xA5, 0x34, 0xB5, 0xB6, 0xA5, 0x34, 0x5A, 0xEB, 0xBD, 0xF7, 0xEF, 0x7D, 0xAD, - 0x75, 0xAD, 0x55, 0xAD, 0x55, 0xF7, 0x9E, 0xDE, 0xFB, 0x9C, 0xF3, 0xAD, 0x75, 0x6B, 0x4D, 0xDE, - 0xDB, 0x18, 0xFF, 0xAD, 0xF7, 0xBE, 0xF7, 0x9E, 0x5A, 0xCB, 0x29, 0x65, 0x31, 0x86, 0x31, 0x86, - 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x29, 0x65, 0x31, 0x86, 0x31, 0x86, - 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x29, 0x45, 0x7B, 0xCF, 0xF7, 0xBE, - 0xF7, 0xBE, 0x0A, 0xFF, 0x83, 0x84, 0x30, 0xBD, 0xF7, 0x06, 0xFF, 0xAB, 0xB5, 0x96, 0x94, 0x92, - 0xE7, 0x1C, 0x9C, 0xD3, 0xA5, 0x34, 0xCE, 0x79, 0x6B, 0x4D, 0xDE, 0xDB, 0x73, 0xAE, 0x94, 0xB2, - 0xD6, 0xBA, 0x6B, 0x6D, 0xFF, 0xDF, 0x84, 0x10, 0xA5, 0x14, 0xD6, 0x9A, 0x5A, 0xCB, 0xCE, 0x79, - 0xAD, 0x55, 0x94, 0x92, 0xEF, 0x7D, 0x73, 0x8E, 0x02, 0xFF, 0xA1, 0xD6, 0x9A, 0x84, 0x30, 0xF7, - 0xBE, 0x5A, 0xEB, 0xD6, 0x9A, 0xAD, 0x75, 0x8C, 0x71, 0xF7, 0xBE, 0x73, 0x8E, 0xF7, 0xBE, 0x7B, - 0xEF, 0xB5, 0xB6, 0xEF, 0x7D, 0x7B, 0xCF, 0xDE, 0xFB, 0xBD, 0xF7, 0x94, 0xB2, 0x04, 0xFF, 0xD1, - 0xF7, 0x9E, 0x9C, 0xD3, 0x8C, 0x71, 0xBD, 0xD7, 0xFF, 0xDF, 0x73, 0xAE, 0xE7, 0x1C, 0xFF, 0xDF, - 0x6B, 0x6D, 0xFF, 0xDF, 0x73, 0xAE, 0xAD, 0x55, 0xDE, 0xDB, 0x6B, 0x6D, 0xEF, 0x5D, 0x7B, 0xCF, - 0xAD, 0x55, 0xDE, 0xDB, 0x6B, 0x6D, 0xE7, 0x1C, 0x7B, 0xEF, 0xC6, 0x38, 0xDE, 0xFB, 0x73, 0x8E, - 0xE7, 0x3C, 0x84, 0x10, 0x9C, 0xD3, 0xE7, 0x1C, 0xC6, 0x38, 0x73, 0xAE, 0xE7, 0x3C, 0xBD, 0xF7, - 0x7B, 0xEF, 0xCE, 0x59, 0x7B, 0xEF, 0xCE, 0x79, 0x94, 0xB2, 0xAD, 0x55, 0xDE, 0xDB, 0x63, 0x2C, - 0xDE, 0xDB, 0x1C, 0xFF, 0xA5, 0x94, 0xB2, 0x39, 0xC7, 0x31, 0x86, 0x31, 0xA6, 0x31, 0xA6, 0x31, - 0x86, 0x31, 0xA6, 0x31, 0x86, 0x31, 0x86, 0x31, 0xA6, 0x31, 0x86, 0x31, 0xA6, 0x31, 0xA6, 0x31, - 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0xA6, 0x39, 0xE7, 0xB5, 0x96, 0x0E, 0xFF, 0x85, 0x94, 0x92, - 0xAD, 0x55, 0xFF, 0xDF, 0x02, 0xFF, 0x85, 0xF7, 0xBE, 0x94, 0x92, 0xBD, 0xD7, 0x02, 0xFF, 0x87, - 0xC6, 0x38, 0x8C, 0x71, 0xCE, 0x79, 0x94, 0x92, 0x02, 0xFF, 0x83, 0x94, 0xB2, 0xC6, 0x18, 0x02, - 0xFF, 0x87, 0x73, 0xAE, 0xF7, 0x9E, 0x8C, 0x51, 0xD6, 0xBA, 0x02, 0xFF, 0x81, 0x73, 0x8E, 0x02, - 0xFF, 0x87, 0xD6, 0x9A, 0x8C, 0x51, 0xF7, 0x9E, 0x73, 0xAE, 0x02, 0xFF, 0x87, 0xCE, 0x59, 0x84, - 0x30, 0xF7, 0xBE, 0x73, 0xAE, 0x02, 0xFF, 0x87, 0xDE, 0xDB, 0x84, 0x10, 0xF7, 0xBE, 0x73, 0xAE, - 0x02, 0xFF, 0x83, 0x8C, 0x71, 0xCE, 0x79, 0x02, 0xFF, 0x87, 0xB5, 0x96, 0x9C, 0xF3, 0x8C, 0x71, - 0xD6, 0xBA, 0x05, 0xFF, 0x96, 0xDF, 0xFF, 0xDF, 0xC6, 0x38, 0x63, 0x2C, 0xE7, 0x1C, 0x7B, 0xEF, - 0xE7, 0x1C, 0xF7, 0xBE, 0x73, 0x8E, 0xFF, 0xDF, 0x7B, 0xEF, 0xDE, 0xDB, 0x02, 0xFF, 0x87, 0x7B, - 0xCF, 0xDE, 0xFB, 0x84, 0x10, 0xDE, 0xDB, 0x02, 0xFF, 0x87, 0x7B, 0xEF, 0xCE, 0x59, 0x73, 0x8E, - 0xF7, 0xBE, 0x02, 0xFF, 0x87, 0x84, 0x10, 0xD6, 0x9A, 0x8C, 0x51, 0xD6, 0xBA, 0x02, 0xFF, 0x83, - 0xDE, 0xDB, 0x84, 0x10, 0x02, 0xFF, 0x8D, 0xA5, 0x14, 0x7B, 0xCF, 0xB5, 0xB6, 0x9C, 0xF3, 0xD6, - 0xBA, 0x84, 0x10, 0xD6, 0xBA, 0x02, 0xFF, 0x83, 0x7B, 0xEF, 0xD6, 0xBA, 0x1C, 0xFF, 0xA5, 0xEF, - 0x5D, 0x84, 0x30, 0x5A, 0xEB, 0x4A, 0x49, 0x4A, 0x49, 0x5A, 0xCB, 0x42, 0x28, 0x52, 0x8A, 0x52, - 0xAA, 0x42, 0x28, 0x5A, 0xCB, 0x4A, 0x69, 0x4A, 0x49, 0x5A, 0xCB, 0x42, 0x28, 0x4A, 0x69, 0x5A, - 0xEB, 0x94, 0xB2, 0xF7, 0xBE, 0x0E, 0xFF, 0x97, 0xCE, 0x59, 0x84, 0x10, 0xD6, 0xBA, 0xDE, 0xDB, - 0xD6, 0xBA, 0xB5, 0x96, 0x9C, 0xD3, 0xDE, 0xFB, 0xA5, 0x14, 0xB5, 0x96, 0xCE, 0x79, 0x94, 0xB2, - 0x02, 0xFF, 0x83, 0x9C, 0xD3, 0xC6, 0x18, 0x02, 0xFF, 0x9F, 0x7B, 0xEF, 0xF7, 0x9E, 0x8C, 0x71, - 0xD6, 0xBA, 0xFF, 0xDF, 0x7B, 0xCF, 0xFF, 0xDF, 0xD6, 0x9A, 0x8C, 0x71, 0xF7, 0xBE, 0x7B, 0xCF, - 0xDE, 0xDB, 0xAD, 0x55, 0x8C, 0x51, 0xF7, 0xBE, 0x7B, 0xEF, 0x02, 0xFF, 0x87, 0xDE, 0xDB, 0x8C, - 0x51, 0xF7, 0xBE, 0x7B, 0xCF, 0x02, 0xFF, 0x8D, 0x94, 0xB2, 0xB5, 0x96, 0xF7, 0x9E, 0xEF, 0x5D, - 0x6B, 0x6D, 0x84, 0x10, 0xFF, 0xDF, 0x04, 0xFF, 0x91, 0xE7, 0x1C, 0xD6, 0xBA, 0xDE, 0xDB, 0x7B, - 0xCF, 0xDE, 0xFB, 0x94, 0x92, 0xBD, 0xF7, 0xCE, 0x79, 0x6B, 0x6D, 0x02, 0xFF, 0x86, 0x7B, 0xCF, - 0xB5, 0x96, 0xDE, 0xDB, 0x7B, 0x02, 0xEF, 0x98, 0x7D, 0x7B, 0xEF, 0xAD, 0x75, 0xDE, 0xDB, 0x7B, - 0xEF, 0xE7, 0x3C, 0x84, 0x30, 0xCE, 0x59, 0xDE, 0xFB, 0x84, 0x10, 0xEF, 0x5D, 0x8C, 0x71, 0xD6, - 0xBA, 0x02, 0xFF, 0x99, 0xE7, 0x1C, 0x7B, 0xCF, 0xE7, 0x3C, 0xBD, 0xF7, 0x94, 0x92, 0xDE, 0xDB, - 0xDE, 0xDB, 0xFF, 0xDF, 0x9C, 0xD3, 0xB5, 0x96, 0xDE, 0xFB, 0x73, 0x8E, 0xDE, 0xDB, 0x1F, 0xFF, - 0x9E, 0xDF, 0xDE, 0xDB, 0x94, 0xB2, 0x9C, 0xD3, 0xD6, 0xBA, 0x84, 0x10, 0xBD, 0xD7, 0xC6, 0x18, - 0x7B, 0xEF, 0xD6, 0x9A, 0xA5, 0x34, 0x8C, 0x71, 0xD6, 0xBA, 0x8C, 0x51, 0xAD, 0x55, 0xDE, 0xFB, - 0x14, 0xFF, 0x95, 0xB5, 0x96, 0x9C, 0xD3, 0x9C, 0xF3, 0xC6, 0x38, 0xF7, 0x9E, 0xA5, 0x14, 0xA5, - 0x14, 0xA5, 0x34, 0xF7, 0x9E, 0xDE, 0xFB, 0xBD, 0xD7, 0x02, 0xFF, 0x83, 0xBD, 0xF7, 0xDE, 0xDB, - 0x02, 0xFF, 0x87, 0xAD, 0x55, 0xF7, 0xBE, 0xB5, 0xB6, 0xE7, 0x1C, 0x02, 0xFF, 0x81, 0xAD, 0x55, - 0x02, 0xFF, 0x83, 0xE7, 0x1C, 0xB5, 0xB6, 0x02, 0xFF, 0x8B, 0xB5, 0x96, 0x9C, 0xD3, 0xA5, 0x34, - 0xBD, 0xD7, 0xFF, 0xDF, 0xAD, 0x55, 0x02, 0xFF, 0x87, 0xE7, 0x3C, 0xB5, 0x96, 0xFF, 0xDF, 0xAD, - 0x55, 0x02, 0xFF, 0x85, 0xCE, 0x79, 0x94, 0x92, 0xDE, 0xFB, 0x02, 0xFF, 0x83, 0x73, 0x8E, 0xAD, - 0x55, 0x06, 0xFF, 0x87, 0xD6, 0xBA, 0x9C, 0xF3, 0x9C, 0xF3, 0xB5, 0x96, 0x02, 0xFF, 0x87, 0xCE, - 0x79, 0x94, 0xB2, 0xAD, 0x75, 0xA5, 0x14, 0x02, 0xFF, 0x87, 0x7B, 0xEF, 0x94, 0xB2, 0x9C, 0xF3, - 0xBD, 0xD7, 0x02, 0xFF, 0x87, 0x7B, 0xEF, 0x94, 0x92, 0x9C, 0xF3, 0xB5, 0xB6, 0x02, 0xFF, 0x87, - 0xCE, 0x79, 0x9C, 0xD3, 0xA5, 0x14, 0xBD, 0xF7, 0x02, 0xFF, 0x83, 0xB5, 0x96, 0xE7, 0x3C, 0x02, - 0xFF, 0x99, 0xF7, 0xBE, 0x9C, 0xD3, 0xB5, 0xB6, 0xF7, 0x9E, 0xA5, 0x34, 0xA5, 0x34, 0xAD, 0x75, - 0xF7, 0x9E, 0xDE, 0xFB, 0x94, 0xB2, 0xAD, 0x75, 0x9C, 0xF3, 0xEF, 0x5D, 0x22, 0xFF, 0x83, 0xBD, - 0xD7, 0xBD, 0xF7, 0x02, 0xFF, 0x87, 0xA5, 0x14, 0xE7, 0x1C, 0xEF, 0x7D, 0x9C, 0xF3, 0x02, 0xFF, - 0x83, 0xCE, 0x59, 0xAD, 0x75, 0x02, 0xFF, 0x83, 0xAD, 0x55, 0xD6, 0x9A, 0x18, 0xFF, 0x83, 0xF7, - 0xBE, 0xF7, 0xBE, 0x06, 0xFF, 0x81, 0xF7, 0x9E, 0x11, 0xFF, 0x80, 0xDF, 0x09, 0xFF, 0x80, 0xDF, - 0x0A, 0xFF, 0x81, 0xF7, 0x9E, 0x07, 0xFF, 0x80, 0xDF, 0x09, 0xFF, 0x80, 0xDF, 0x04, 0xFF, 0x89, - 0xF7, 0xBE, 0xFF, 0xDF, 0xFF, 0xDF, 0x84, 0x30, 0xE7, 0x1C, 0x08, 0xFF, 0x83, 0xF7, 0xBE, 0xF7, - 0x9E, 0x06, 0xFF, 0x83, 0xF7, 0xBE, 0xFF, 0xDF, 0x04, 0xFF, 0x85, 0x8C, 0x71, 0xE7, 0x1C, 0xF7, - 0x9E, 0x04, 0xFF, 0x85, 0x8C, 0x71, 0xDE, 0xFB, 0xF7, 0x9E, 0x06, 0xFF, 0x83, 0xF7, 0xBE, 0xF7, - 0xBE, 0x0D, 0xFF, 0x82, 0xDF, 0xF7, 0xBE, 0x04, 0xFF, 0x83, 0xF7, 0x9E, 0xF7, 0xBE, 0x04, 0xFF, - 0x83, 0xF7, 0xBE, 0xF7, 0xBE, 0x26, 0xFF, 0x83, 0xDE, 0xFB, 0xDE, 0xFB, 0x02, 0xFF, 0x87, 0xD6, - 0x9A, 0xEF, 0x7D, 0xF7, 0xBE, 0xCE, 0x79, 0x02, 0xFF, 0x83, 0xE7, 0x3C, 0xD6, 0xBA, 0x02, 0xFF, - 0x83, 0xD6, 0xBA, 0xE7, 0x3C, 0x66, 0xFF, 0x83, 0xF7, 0xBE, 0xC6, 0x38, 0x1C, 0xFF, 0x83, 0xCE, - 0x59, 0xF7, 0x9E, 0x06, 0xFF, 0x83, 0xCE, 0x59, 0xF7, 0x9E, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, - 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, - 0x7F, 0xFF, 0x7F, 0xFF, 0x13, 0xFF, 0x85, 0xF7, 0x9E, 0xFF, 0xDF, 0xF7, 0xBE, 0x24, 0xFF, 0x83, - 0xF7, 0xBE, 0xFF, 0xDF, 0x16, 0xFF, 0x81, 0xF7, 0x9E, 0x10, 0xFF, 0x81, 0xF7, 0xBE, 0x7A, 0xFF, - 0x89, 0xD6, 0x9A, 0x6B, 0x4D, 0x4A, 0x69, 0x7B, 0xEF, 0xF7, 0xBE, 0x0A, 0xFF, 0x89, 0xCE, 0x79, - 0x6B, 0x6D, 0x5A, 0xCB, 0x8C, 0x71, 0xF7, 0x9E, 0x04, 0xFF, 0x91, 0x63, 0x2C, 0x52, 0x8A, 0x52, - 0x8A, 0x52, 0x8A, 0xB5, 0xB6, 0xE7, 0x1C, 0x39, 0xC7, 0xBD, 0xF7, 0x63, 0x0C, 0x08, 0xFF, 0x83, - 0xDE, 0xDB, 0x4A, 0x49, 0x02, 0xFF, 0x8D, 0xF7, 0x9E, 0x31, 0xA6, 0x31, 0xA6, 0x31, 0xA6, 0x39, - 0xE7, 0x52, 0xAA, 0xAD, 0x55, 0x04, 0xFF, 0x8B, 0xD6, 0xBA, 0x5A, 0xCB, 0x42, 0x08, 0x39, 0xE7, - 0x63, 0x2C, 0xE7, 0x1C, 0x0C, 0xFF, 0x8B, 0xDE, 0xDB, 0x73, 0x8E, 0x4A, 0x69, 0x4A, 0x69, 0x4A, - 0x49, 0xAD, 0x55, 0x06, 0xFF, 0x8B, 0xEF, 0x7D, 0x7B, 0xEF, 0x4A, 0x69, 0x4A, 0x49, 0x6B, 0x4D, - 0xBD, 0xD7, 0x04, 0xFF, 0x89, 0xE7, 0x3C, 0x8C, 0x71, 0x52, 0xAA, 0x6B, 0x6D, 0xDE, 0xFB, 0x08, - 0xFF, 0x83, 0x84, 0x30, 0xA5, 0x34, 0x06, 0xFF, 0x87, 0xA5, 0x34, 0x5A, 0xCB, 0x52, 0x8A, 0xAD, - 0x55, 0x02, 0xFF, 0x8D, 0xEF, 0x7D, 0x52, 0x8A, 0x52, 0x8A, 0x52, 0x8A, 0x52, 0x8A, 0x52, 0x8A, - 0xB5, 0x96, 0x3C, 0xFF, 0x8B, 0xF7, 0x9E, 0x42, 0x08, 0xB5, 0x96, 0xD6, 0x9A, 0x6B, 0x6D, 0x8C, - 0x51, 0x09, 0xFF, 0x8A, 0xDF, 0x42, 0x08, 0xBD, 0xD7, 0xDE, 0xDB, 0x73, 0xAE, 0x94, 0x92, 0x02, - 0xFF, 0x93, 0xF7, 0x9E, 0x10, 0xA2, 0xC6, 0x18, 0xC6, 0x18, 0xC6, 0x18, 0xE7, 0x1C, 0xF7, 0xBE, - 0x52, 0xAA, 0xE7, 0x1C, 0x6B, 0x4D, 0x08, 0xFF, 0x83, 0xCE, 0x79, 0x10, 0x82, 0x02, 0xFF, 0x81, - 0xEF, 0x7D, 0x02, 0x00, 0x99, 0xC6, 0x38, 0xD6, 0x9A, 0xCE, 0x79, 0xAD, 0x75, 0x29, 0x45, 0xD6, - 0x9A, 0xFF, 0xDF, 0x39, 0xE7, 0x9C, 0xF3, 0xD6, 0x9A, 0xCE, 0x79, 0x7B, 0xEF, 0x52, 0x8A, 0x0A, - 0xFF, 0x8F, 0xD6, 0xBA, 0x42, 0x28, 0xA5, 0x34, 0xD6, 0xBA, 0xDE, 0xDB, 0xBD, 0xF7, 0x4A, 0x69, - 0xB5, 0x96, 0x02, 0xFF, 0x8F, 0xEF, 0x7D, 0x52, 0x8A, 0x84, 0x10, 0xCE, 0x79, 0xD6, 0xBA, 0xB5, - 0xB6, 0x31, 0x86, 0xD6, 0x9A, 0x02, 0xFF, 0x8B, 0x73, 0xAE, 0x84, 0x30, 0xD6, 0xBA, 0xB5, 0xB6, - 0x42, 0x08, 0xF7, 0x9E, 0x02, 0xFF, 0x87, 0xDE, 0xFB, 0x73, 0xAE, 0x18, 0xE3, 0x94, 0x92, 0x04, - 0xFF, 0x99, 0xC6, 0x18, 0x4A, 0x69, 0xCE, 0x59, 0xC6, 0x18, 0x42, 0x28, 0xCE, 0x79, 0xFF, 0xDF, - 0xC6, 0x18, 0xC6, 0x18, 0xC6, 0x18, 0x9C, 0xF3, 0x10, 0xA2, 0xDE, 0xDB, 0x3C, 0xFF, 0x85, 0xCE, - 0x59, 0x39, 0xE7, 0xF7, 0xBE, 0x02, 0xFF, 0x83, 0xCE, 0x59, 0x21, 0x04, 0x08, 0xFF, 0x85, 0xF7, - 0xBE, 0x00, 0x20, 0xE7, 0x1C, 0x02, 0xFF, 0x83, 0x8C, 0x51, 0x63, 0x2C, 0x02, 0xFF, 0x89, 0xCE, - 0x79, 0x39, 0xE7, 0xF7, 0x9E, 0xDE, 0xDB, 0xFF, 0xDF, 0x02, 0xFF, 0x87, 0xF7, 0x9E, 0xC6, 0x18, - 0xDE, 0xFB, 0xD6, 0xBA, 0x08, 0xFF, 0x83, 0xCE, 0x79, 0x10, 0x82, 0x02, 0xFF, 0x81, 0xEF, 0x7D, - 0x02, 0x00, 0x81, 0xF7, 0x9E, 0x04, 0xFF, 0x8B, 0xF7, 0xBE, 0x31, 0x86, 0xAD, 0x55, 0xFF, 0xDF, - 0x00, 0x20, 0xC6, 0x38, 0x04, 0xFF, 0x83, 0xE7, 0x3C, 0xA5, 0x34, 0x0A, 0xFF, 0x85, 0x7B, 0xCF, - 0x7B, 0xCF, 0xF7, 0x9E, 0x05, 0xFF, 0x84, 0xDF, 0xBD, 0xD7, 0xC6, 0x18, 0x02, 0xFF, 0x85, 0xB5, - 0xB6, 0x42, 0x08, 0xEF, 0x5D, 0x04, 0xFF, 0x8B, 0xF7, 0xBE, 0xAD, 0x55, 0xD6, 0xBA, 0xF7, 0x9E, - 0x10, 0xA2, 0xE7, 0x1C, 0x02, 0xFF, 0x85, 0xF7, 0xBE, 0x31, 0xA6, 0xBD, 0xD7, 0x02, 0xFF, 0x87, - 0x8C, 0x51, 0x9C, 0xF3, 0x63, 0x0C, 0x94, 0x92, 0x04, 0xFF, 0x8B, 0x7B, 0xCF, 0x8C, 0x71, 0xFF, - 0xDF, 0xFF, 0xDF, 0x7B, 0xEF, 0x7B, 0xEF, 0x03, 0xFF, 0x8A, 0xDF, 0xFF, 0xDF, 0xF7, 0xBE, 0x4A, - 0x69, 0x9C, 0xD3, 0xFF, 0xDF, 0x3C, 0xFF, 0x83, 0xAD, 0x55, 0x5A, 0xEB, 0x04, 0xFF, 0x81, 0xF7, - 0x9E, 0x02, 0x00, 0x81, 0xFF, 0xDF, 0x08, 0xFF, 0x89, 0x84, 0x30, 0x4A, 0x69, 0x84, 0x10, 0x42, - 0x08, 0xC6, 0x18, 0x02, 0xFF, 0x8B, 0x9C, 0xF3, 0x21, 0x24, 0x52, 0xAA, 0x31, 0x86, 0x63, 0x2C, - 0xF7, 0xBE, 0x03, 0xFF, 0x84, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0x08, 0xFF, 0x83, 0xCE, 0x79, 0x10, - 0x82, 0x02, 0xFF, 0x81, 0xEF, 0x7D, 0x02, 0x00, 0x81, 0xF7, 0x9E, 0x03, 0xFF, 0x86, 0xDF, 0xC6, - 0x38, 0x08, 0x41, 0xDE, 0xFB, 0x02, 0xFF, 0x8B, 0x73, 0x8E, 0x29, 0x65, 0x73, 0xAE, 0xB5, 0x96, - 0xEF, 0x5D, 0xF7, 0x9E, 0x0A, 0xFF, 0x83, 0x31, 0xA6, 0xB5, 0xB6, 0x08, 0xFF, 0x83, 0xF7, 0xBE, - 0xF7, 0xBE, 0x02, 0xFF, 0x83, 0x7B, 0xEF, 0x73, 0xAE, 0x08, 0xFF, 0x89, 0xF7, 0xBE, 0xFF, 0xDF, - 0xFF, 0xDF, 0x10, 0x82, 0xDE, 0xFB, 0x04, 0xFF, 0x83, 0x18, 0xC3, 0x9C, 0xF3, 0x02, 0xFF, 0x87, - 0xE7, 0x3C, 0xF7, 0x9E, 0x73, 0x8E, 0x94, 0x92, 0x04, 0xFF, 0x83, 0x52, 0x8A, 0xB5, 0x96, 0x04, - 0xFF, 0x83, 0xA5, 0x34, 0x5A, 0xEB, 0x06, 0xFF, 0x85, 0xA5, 0x34, 0x4A, 0x69, 0xF7, 0x9E, 0x3E, - 0xFF, 0x83, 0x94, 0x92, 0x6B, 0x6D, 0x06, 0xFF, 0x02, 0x00, 0x81, 0xF7, 0x9E, 0x07, 0xFF, 0x8A, - 0xDF, 0x6B, 0x6D, 0x39, 0xC7, 0x73, 0xAE, 0x21, 0x24, 0xBD, 0xD7, 0x02, 0xFF, 0x8B, 0xA5, 0x34, - 0x73, 0xAE, 0xDE, 0xDB, 0xC6, 0x18, 0x39, 0xE7, 0xB5, 0xB6, 0x10, 0xFF, 0x83, 0xCE, 0x79, 0x10, - 0x82, 0x02, 0xFF, 0x81, 0xEF, 0x7D, 0x02, 0x00, 0x8B, 0x42, 0x28, 0x4A, 0x49, 0x39, 0xE7, 0x21, - 0x24, 0x6B, 0x6D, 0xFF, 0xDF, 0x02, 0xFF, 0x8B, 0xEF, 0x5D, 0xA5, 0x34, 0x6B, 0x4D, 0x31, 0xA6, - 0x31, 0xA6, 0xB5, 0x96, 0x0A, 0xFF, 0x83, 0x08, 0x41, 0xCE, 0x79, 0x04, 0xFF, 0x87, 0x94, 0xB2, - 0x6B, 0x4D, 0x6B, 0x4D, 0x73, 0xAE, 0x02, 0xFF, 0x83, 0x5A, 0xEB, 0x8C, 0x51, 0x0E, 0xFF, 0x8B, - 0x63, 0x0C, 0x63, 0x2C, 0xC6, 0x38, 0x8C, 0x51, 0x10, 0x82, 0x9C, 0xD3, 0x06, 0xFF, 0x83, 0x73, - 0x8E, 0x94, 0x92, 0x04, 0xFF, 0x83, 0x39, 0xC7, 0xC6, 0x18, 0x04, 0xFF, 0x83, 0xB5, 0x96, 0x4A, - 0x69, 0x06, 0xFF, 0x83, 0x42, 0x08, 0xA5, 0x14, 0x40, 0xFF, 0x83, 0x9C, 0xF3, 0x63, 0x2C, 0x04, - 0xFF, 0x81, 0xF7, 0xBE, 0x02, 0x00, 0x81, 0xFF, 0xDF, 0x06, 0xFF, 0x8B, 0xCE, 0x59, 0x31, 0x86, - 0xDE, 0xFB, 0xE7, 0x3C, 0xAD, 0x55, 0x39, 0xC7, 0x02, 0xFF, 0x83, 0xEF, 0x7D, 0xEF, 0x5D, 0x03, - 0xFF, 0x84, 0xDF, 0x8C, 0x71, 0x5A, 0xEB, 0x10, 0xFF, 0x83, 0xCE, 0x79, 0x10, 0x82, 0x02, 0xFF, - 0x81, 0xEF, 0x7D, 0x02, 0x00, 0x89, 0xA5, 0x14, 0xAD, 0x75, 0xB5, 0x96, 0xCE, 0x59, 0xEF, 0x5D, - 0x05, 0xFF, 0x8C, 0xDF, 0xF7, 0xBE, 0xE7, 0x3C, 0xD6, 0xBA, 0x94, 0x92, 0x21, 0x24, 0xE7, 0x3C, - 0x08, 0xFF, 0x83, 0x29, 0x65, 0xB5, 0x96, 0x04, 0xFF, 0x87, 0xB5, 0xB6, 0x9C, 0xD3, 0x7B, 0xEF, - 0x21, 0x04, 0x02, 0xFF, 0x83, 0x7B, 0xEF, 0x73, 0x8E, 0x08, 0xFF, 0x83, 0xF7, 0x9E, 0xF7, 0xBE, - 0x02, 0xFF, 0x8B, 0xD6, 0xBA, 0x63, 0x0C, 0x52, 0xAA, 0x8C, 0x51, 0x52, 0xAA, 0xB5, 0x96, 0x06, - 0xFF, 0x83, 0x73, 0x8E, 0x94, 0x92, 0x04, 0xFF, 0x83, 0x42, 0x28, 0xBD, 0xD7, 0x04, 0xFF, 0x83, - 0xA5, 0x34, 0x63, 0x0C, 0x04, 0xFF, 0x85, 0xDE, 0xFB, 0x10, 0xA2, 0xEF, 0x5D, 0x40, 0xFF, 0x83, - 0xB5, 0xB6, 0x4A, 0x49, 0x04, 0xFF, 0x83, 0xDE, 0xFB, 0x18, 0xE3, 0x08, 0xFF, 0x83, 0xA5, 0x34, - 0x5A, 0xCB, 0x04, 0xFF, 0x89, 0xEF, 0x7D, 0x00, 0x20, 0xF7, 0xBE, 0xC6, 0x38, 0xDE, 0xFB, 0x04, - 0xFF, 0x83, 0x9C, 0xF3, 0x5A, 0xCB, 0x10, 0xFF, 0x83, 0xCE, 0x79, 0x10, 0x82, 0x02, 0xFF, 0x81, - 0xEF, 0x7D, 0x02, 0x00, 0x85, 0xEF, 0x5D, 0xF7, 0xBE, 0xF7, 0xBE, 0x06, 0xFF, 0x83, 0xC6, 0x18, - 0x63, 0x2C, 0x06, 0xFF, 0x85, 0xF7, 0x9E, 0x31, 0x86, 0xC6, 0x18, 0x08, 0xFF, 0x83, 0x6B, 0x4D, - 0x6B, 0x6D, 0x04, 0xFF, 0x87, 0xF7, 0xBE, 0xEF, 0x7D, 0xC6, 0x38, 0x10, 0xA2, 0x02, 0xFF, 0x85, - 0xAD, 0x55, 0x31, 0xA6, 0xFF, 0xDF, 0x06, 0xFF, 0x83, 0x84, 0x10, 0x7B, 0xCF, 0x02, 0xFF, 0x8B, - 0xE7, 0x1C, 0xE7, 0x1C, 0xDE, 0xFB, 0xEF, 0x5D, 0x39, 0xE7, 0xCE, 0x79, 0x06, 0xFF, 0x83, 0x73, - 0x8E, 0x94, 0x92, 0x04, 0xFF, 0x83, 0x63, 0x0C, 0xA5, 0x14, 0x04, 0xFF, 0x83, 0x8C, 0x71, 0x7B, - 0xEF, 0x04, 0xFF, 0x83, 0x9C, 0xD3, 0x5A, 0xCB, 0x42, 0xFF, 0x85, 0xEF, 0x7D, 0x18, 0xE3, 0xD6, - 0xBA, 0x02, 0xFF, 0x83, 0x84, 0x30, 0x6B, 0x6D, 0x02, 0xFF, 0x83, 0xF7, 0xBE, 0xDE, 0xDB, 0x02, - 0xFF, 0x85, 0xDE, 0xFB, 0x31, 0x86, 0xF7, 0x9E, 0x02, 0xFF, 0x83, 0xB5, 0xB6, 0x42, 0x08, 0x02, - 0xFF, 0x83, 0x9C, 0xF3, 0x6B, 0x6D, 0x02, 0xFF, 0x85, 0xF7, 0xBE, 0x52, 0xAA, 0x9C, 0xF3, 0x10, - 0xFF, 0x83, 0xCE, 0x79, 0x10, 0x82, 0x02, 0xFF, 0x81, 0xEF, 0x7D, 0x02, 0x00, 0x81, 0xF7, 0x9E, - 0x0A, 0xFF, 0x87, 0xE7, 0x3C, 0x10, 0x82, 0xB5, 0x96, 0xFF, 0xDF, 0x02, 0xFF, 0x85, 0xD6, 0x9A, - 0x10, 0x82, 0xE7, 0x1C, 0x08, 0xFF, 0x87, 0xD6, 0x9A, 0x31, 0x86, 0x9C, 0xF3, 0xF7, 0x9E, 0x02, - 0xFF, 0x85, 0xE7, 0x3C, 0x73, 0xAE, 0x18, 0xE3, 0x02, 0xFF, 0x87, 0xEF, 0x7D, 0x39, 0xE7, 0x8C, - 0x71, 0xF7, 0xBE, 0x02, 0xFF, 0x85, 0xC6, 0x38, 0x10, 0xA2, 0xAD, 0x75, 0x02, 0xFF, 0x83, 0x6B, - 0x4D, 0xC6, 0x38, 0x02, 0xFF, 0x85, 0xD6, 0x9A, 0x31, 0xA6, 0xF7, 0xBE, 0x06, 0xFF, 0x83, 0x73, - 0x8E, 0x94, 0x92, 0x04, 0xFF, 0x8B, 0xAD, 0x55, 0x4A, 0x69, 0xF7, 0x9E, 0xEF, 0x7D, 0x42, 0x08, - 0xBD, 0xF7, 0x04, 0xFF, 0x83, 0x63, 0x2C, 0x94, 0x92, 0x44, 0xFF, 0x89, 0x94, 0x92, 0x31, 0xA6, - 0x52, 0xAA, 0x52, 0x8A, 0xDE, 0xFB, 0x02, 0xFF, 0x83, 0xD6, 0x9A, 0x31, 0xA6, 0x03, 0xFF, 0x8A, - 0xDF, 0x8C, 0x51, 0x63, 0x2C, 0x63, 0x0C, 0x63, 0x0C, 0xBD, 0xD7, 0x02, 0xFF, 0x8B, 0xE7, 0x1C, - 0x5A, 0xEB, 0x5A, 0xEB, 0x42, 0x28, 0x5A, 0xEB, 0xEF, 0x5D, 0x10, 0xFF, 0x83, 0xCE, 0x79, 0x10, - 0x82, 0x02, 0xFF, 0x81, 0xEF, 0x7D, 0x02, 0x00, 0x81, 0xF7, 0x9E, 0x0C, 0xFF, 0x8D, 0xAD, 0x55, - 0x42, 0x28, 0x39, 0xE7, 0x42, 0x28, 0x42, 0x28, 0x9C, 0xF3, 0xFF, 0xDF, 0x09, 0xFF, 0x8E, 0xDF, - 0xBD, 0xF7, 0x5A, 0xEB, 0x42, 0x08, 0x42, 0x28, 0x39, 0xE7, 0x63, 0x2C, 0xC6, 0x38, 0x04, 0xFF, - 0x8D, 0xCE, 0x59, 0x5A, 0xCB, 0x4A, 0x49, 0x4A, 0x49, 0x5A, 0xEB, 0x8C, 0x71, 0xF7, 0x9E, 0x02, - 0xFF, 0x89, 0xB5, 0x96, 0x52, 0x8A, 0x63, 0x2C, 0x5A, 0xCB, 0xBD, 0xD7, 0x08, 0xFF, 0x83, 0x73, - 0x8E, 0x94, 0x92, 0x04, 0xFF, 0x8B, 0xF7, 0x9E, 0x5A, 0xEB, 0x42, 0x28, 0x4A, 0x49, 0x73, 0xAE, - 0xF7, 0xBE, 0x04, 0xFF, 0x83, 0x39, 0xC7, 0xBD, 0xD7, 0x44, 0xFF, 0x87, 0xF7, 0x9E, 0xD6, 0x9A, - 0xCE, 0x79, 0xDE, 0xFB, 0x04, 0xFF, 0x83, 0xF7, 0xBE, 0xD6, 0xBA, 0x04, 0xFF, 0x89, 0xEF, 0x7D, - 0xDE, 0xFB, 0xD6, 0x9A, 0xDE, 0xFB, 0xF7, 0xBE, 0x04, 0xFF, 0x87, 0xE7, 0x1C, 0xD6, 0x9A, 0xCE, - 0x79, 0xE7, 0x1C, 0x12, 0xFF, 0x83, 0xF7, 0xBE, 0xD6, 0xBA, 0x04, 0xFF, 0x81, 0xD6, 0x9A, 0x0E, - 0xFF, 0x8B, 0xF7, 0xBE, 0xDE, 0xDB, 0xCE, 0x79, 0xC6, 0x38, 0xDE, 0xDB, 0xF7, 0x9E, 0x0D, 0xFF, - 0x8C, 0xDF, 0xE7, 0x1C, 0xD6, 0xBA, 0xC6, 0x38, 0xD6, 0xBA, 0xE7, 0x3C, 0xFF, 0xDF, 0x05, 0xFF, - 0x8A, 0xDF, 0xE7, 0x1C, 0xD6, 0xBA, 0xCE, 0x59, 0xDE, 0xFB, 0xEF, 0x7D, 0x04, 0xFF, 0x89, 0xF7, - 0xBE, 0xDE, 0xDB, 0xD6, 0x9A, 0xDE, 0xFB, 0xF7, 0xBE, 0x08, 0xFF, 0x83, 0xE7, 0x3C, 0xEF, 0x5D, - 0x06, 0xFF, 0x87, 0xE7, 0x1C, 0xCE, 0x79, 0xD6, 0x9A, 0xEF, 0x5D, 0x06, 0xFF, 0x83, 0xDE, 0xDB, - 0xF7, 0x9E, 0x7F, 0xFF, 0x38, 0xFF, 0x80, 0xDF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, - 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, - 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x70, 0xFF, 0xA6, 0xDF, 0xFF, 0x9E, - 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, - 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, - 0xFF, 0xBE, 0xFF, 0xDF, 0x7F, 0xFF, 0x56, 0xFF, 0xAE, 0x7E, 0xF5, 0xD9, 0xEC, 0x13, 0xE3, 0x51, - 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, - 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, - 0xE3, 0x92, 0xEC, 0xB5, 0xF6, 0x7B, 0xFF, 0xBF, 0x7F, 0xFF, 0x50, 0xFF, 0xB0, 0x9E, 0xF5, 0xD8, - 0xE3, 0x10, 0xD9, 0x8B, 0xD9, 0x4B, 0xD9, 0x4B, 0xD9, 0x4A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x0A, - 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x4A, 0xD1, 0x4A, 0xD1, 0x2A, 0xD1, 0x0A, 0xD1, 0x0A, 0xD1, 0x2A, - 0xD1, 0x2A, 0xD9, 0x4B, 0xD9, 0x4B, 0xD9, 0x4B, 0xD9, 0xED, 0xE3, 0xF3, 0xF6, 0xBB, 0x7F, 0xFF, - 0x50, 0xFF, 0xB2, 0x1D, 0xEC, 0x54, 0xD9, 0xCC, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD9, 0x4B, - 0xDA, 0x0D, 0xE3, 0x30, 0xE3, 0x92, 0xE3, 0x51, 0xDA, 0x4E, 0xD9, 0x6B, 0xD9, 0x8C, 0xE2, 0xAF, - 0xE3, 0x71, 0xE3, 0x92, 0xE2, 0xCF, 0xD9, 0xCC, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, - 0xDA, 0x6E, 0xF5, 0x78, 0xFF, 0xBE, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xF3, 0xD9, - 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD9, 0xCC, 0xE3, 0x92, 0xED, 0x16, 0xED, 0x37, 0xEC, 0xF6, 0xED, - 0x16, 0xED, 0x16, 0xEC, 0x95, 0xEC, 0xB5, 0xED, 0x37, 0xEC, 0xF6, 0xEC, 0xF6, 0xED, 0x37, 0xEC, - 0xB5, 0xE2, 0xF0, 0xD9, 0x6B, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xED, 0x16, 0xFF, 0x7E, 0x7F, - 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x6B, 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x4E, - 0xEC, 0x95, 0xEC, 0x95, 0xE3, 0x31, 0xE2, 0xF0, 0xE2, 0xF0, 0xE3, 0xD2, 0xF5, 0x57, 0xEC, 0xF6, - 0xE3, 0x51, 0xE2, 0xF0, 0xE2, 0xF0, 0xE3, 0xB2, 0xEC, 0xF6, 0xE3, 0xF3, 0xD9, 0xAC, 0xD1, 0x0A, - 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, - 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x2D, 0xEC, 0x54, 0xEC, 0x13, 0xDA, 0x0D, 0xDA, - 0x0D, 0xE2, 0xCF, 0xE3, 0x51, 0xEC, 0x54, 0xEC, 0x13, 0xE3, 0x10, 0xE2, 0xAF, 0xD9, 0xCC, 0xDA, - 0x8F, 0xEC, 0x95, 0xE3, 0xB2, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, - 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, - 0xD9, 0xAC, 0xE3, 0xB2, 0xEC, 0x95, 0xE2, 0xAF, 0xD9, 0x6B, 0xDA, 0x4E, 0xEC, 0x54, 0xF6, 0x19, - 0xF5, 0x98, 0xE3, 0x92, 0xD9, 0xCC, 0xD9, 0x8C, 0xE3, 0x71, 0xEC, 0xB5, 0xE2, 0xF0, 0xD9, 0x2A, - 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, - 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD9, 0x4A, 0xDA, 0x4E, 0xEC, 0x54, 0xEC, - 0xD5, 0xE3, 0x92, 0xE3, 0xB2, 0xF5, 0xF9, 0xFF, 0x9E, 0xFF, 0x1D, 0xED, 0x16, 0xE3, 0x51, 0xE3, - 0xF3, 0xEC, 0xD6, 0xE3, 0xB2, 0xD9, 0xAC, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, - 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, - 0xD1, 0x2A, 0xD1, 0x2A, 0xD9, 0x8B, 0xE3, 0x71, 0xED, 0x57, 0xEC, 0xF6, 0xEC, 0xD6, 0xED, 0x57, - 0xEC, 0xB5, 0xEC, 0xD6, 0xED, 0x57, 0xEC, 0xD5, 0xED, 0x16, 0xEC, 0xF6, 0xDA, 0x8F, 0xD1, 0x2A, - 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, - 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD9, 0xED, 0xE3, - 0xD2, 0xEC, 0x74, 0xEC, 0x33, 0xEC, 0xF6, 0xEC, 0x54, 0xDA, 0x8F, 0xE3, 0x10, 0xEC, 0xD6, 0xEC, - 0xD5, 0xEC, 0x13, 0xEC, 0x74, 0xE3, 0x30, 0xD9, 0x6B, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, - 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, - 0xD1, 0x0A, 0xD1, 0x2A, 0xD9, 0x4B, 0xE2, 0xF0, 0xF5, 0x57, 0xF5, 0xD9, 0xED, 0x37, 0xED, 0x16, - 0xED, 0x16, 0xED, 0x57, 0xED, 0x57, 0xED, 0x16, 0xED, 0x16, 0xF5, 0x57, 0xF5, 0xD9, 0xEC, 0x95, - 0xDA, 0x0D, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, - 0x4D, 0xFF, 0xA0, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, - 0x54, 0xF6, 0x3A, 0xF6, 0x3A, 0xEC, 0x34, 0xDA, 0x6E, 0xE3, 0x71, 0xF5, 0x78, 0xEC, 0xF6, 0xE2, - 0xAF, 0xE2, 0xCF, 0xEC, 0x02, 0xF6, 0x90, 0x7B, 0xF5, 0xB8, 0xE3, 0x51, 0xD9, 0x8B, 0xD1, 0x2A, - 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, - 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD9, 0x4B, 0xE2, 0xCF, 0xEC, 0x74, 0xEC, 0xD5, 0xEC, 0x95, 0xE2, - 0xF0, 0xD1, 0x2A, 0xDA, 0x8E, 0xEC, 0xF6, 0xEC, 0x54, 0xD9, 0xAC, 0xD9, 0x8B, 0xE3, 0x92, 0xEC, - 0xD6, 0xEC, 0xB5, 0xE3, 0xF3, 0xDA, 0x2D, 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, - 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD9, 0x6B, - 0xE3, 0x10, 0xEC, 0x74, 0xEC, 0x74, 0xEC, 0xD5, 0xE3, 0xB2, 0xDA, 0x2E, 0xE3, 0xD3, 0xF6, 0x19, - 0xF5, 0x78, 0xE3, 0x10, 0xDA, 0x6E, 0xEC, 0x34, 0xEC, 0xD6, 0xEC, 0x54, 0xEC, 0x13, 0xDA, 0x6E, - 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0x8C, 0xFE, - 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD9, 0x4B, 0xE2, 0x8F, 0xEC, 0x02, 0xF6, 0xA4, 0x1A, - 0xF6, 0x9B, 0xF6, 0x7B, 0xF5, 0x98, 0xEC, 0xD6, 0xEC, 0x33, 0xEC, 0x54, 0xED, 0x37, 0xF5, 0xF9, - 0xF6, 0x9B, 0xF6, 0x9B, 0xF5, 0xB8, 0xEC, 0x13, 0xD9, 0xED, 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x0D, - 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0x8A, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, - 0x0A, 0xD1, 0x2A, 0xD9, 0x02, 0xEC, 0xA6, 0x34, 0xF5, 0xB8, 0xEC, 0xF6, 0xF5, 0x78, 0xF5, 0xF9, - 0xE3, 0xB2, 0xD9, 0xAC, 0xDA, 0x2D, 0xEC, 0xB5, 0xF6, 0x19, 0xED, 0x37, 0xED, 0x37, 0xF5, 0x78, - 0xE3, 0x51, 0xD9, 0x6B, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, - 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD9, 0x6B, 0xE3, - 0x10, 0xEC, 0x95, 0xE3, 0x71, 0xE3, 0x10, 0xEC, 0xB5, 0xEB, 0xF3, 0xDA, 0x0D, 0xE2, 0x8F, 0xEC, - 0x75, 0xEC, 0x34, 0xE2, 0xCF, 0xE3, 0xF3, 0xEC, 0x54, 0xDA, 0x4E, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, - 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, - 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xE4, 0x13, 0xEC, 0x54, 0xE3, 0x92, - 0xEC, 0xF6, 0xF5, 0xD9, 0xED, 0x37, 0xF5, 0x77, 0xF5, 0xD9, 0xEC, 0x54, 0xE3, 0xB2, 0xEC, 0x75, - 0xE3, 0x71, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, - 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, - 0x2A, 0xD9, 0x6B, 0xDA, 0x6E, 0xEC, 0x34, 0xF5, 0x98, 0xF6, 0x3A, 0xED, 0x57, 0xE3, 0xD2, 0xEC, - 0x33, 0xF5, 0xF9, 0xF6, 0x3A, 0xED, 0x16, 0xE3, 0x92, 0xD9, 0xED, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, - 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, - 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD9, 0x4B, 0xD9, 0xED, - 0xE3, 0x71, 0xEC, 0xF6, 0xED, 0x37, 0xEC, 0x74, 0xEC, 0x95, 0xED, 0x57, 0xEC, 0x95, 0xE2, 0xCF, - 0xD9, 0xAC, 0xD9, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xED, 0x16, - 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xEC, 0x13, 0xD9, 0x8C, 0xD1, 0x0A, 0xD1, - 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD9, 0x6B, 0xDA, 0x4E, 0xE3, 0x71, 0xEC, - 0x33, 0xE3, 0xF3, 0xE3, 0x10, 0xD9, 0xEC, 0xD1, 0x4B, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, - 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x4E, 0xED, 0x37, 0xFF, 0x9E, 0x7F, 0xFF, 0x4E, 0xFF, 0xB2, - 0x5D, 0xED, 0x16, 0xDA, 0x4E, 0xD1, 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, - 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x8B, 0xD9, 0xCC, 0xD9, 0xAC, 0xD9, 0x6B, 0xD1, 0x2A, 0xD9, - 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x6B, 0xE3, 0x10, 0xF6, - 0x19, 0xFF, 0xDF, 0x7F, 0xFF, 0x4E, 0xFF, 0xB0, 0xDF, 0xFE, 0xDC, 0xEC, 0x95, 0xDA, 0x8F, 0xD9, - 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xEC, 0xD9, 0xEC, 0xD9, - 0xCC, 0xD9, 0xCC, 0xD9, 0xEC, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, - 0xED, 0xDA, 0x0D, 0xE3, 0x30, 0xF5, 0x57, 0xFF, 0x5D, 0x7F, 0xFF, 0x52, 0xFF, 0xAC, 0xDF, 0xFF, - 0x3D, 0xF6, 0x7A, 0xF5, 0xF9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, - 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, - 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF6, 0x19, 0xF6, 0xBB, 0xFF, 0x7E, 0x7F, 0xFF, 0x5A, 0xFF, 0xA2, - 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, - 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, - 0xDF, 0xFF, 0xDF, 0x7F, 0xFF, 0x7F, 0xFF, 0x25, 0xFF, 0xC0, 0xBF, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, - 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, - 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, - 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, - 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x9E, 0xFF, 0xDF, 0x7F, 0xFF, 0x3E, 0xFF, 0xC4, - 0x5D, 0xF6, 0x5A, 0xF5, 0x78, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, - 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, - 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, - 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xED, 0x57, 0xF5, - 0x98, 0xF6, 0x7B, 0xFF, 0x9E, 0x7F, 0xFF, 0x3A, 0xFF, 0xC8, 0x9E, 0xF5, 0xF9, 0xEC, 0x74, 0xEC, - 0x95, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, - 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, - 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, - 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0x74, 0xEC, 0x95, 0xF6, - 0x5A, 0xFF, 0xBF, 0x0E, 0xFF, 0x8B, 0xF7, 0xBE, 0xF7, 0x9E, 0xF7, 0x9E, 0xF7, 0x9E, 0xF7, 0xBE, - 0xFF, 0xDF, 0x32, 0xFF, 0x87, 0xF7, 0x9E, 0xE7, 0x3C, 0xE7, 0x3C, 0xF7, 0xBE, 0x45, 0xFF, 0x8A, - 0xDF, 0xF7, 0xBE, 0xF7, 0x9E, 0xF7, 0x9E, 0xF7, 0xBE, 0xFF, 0xDE, 0x06, 0xFF, 0x85, 0xF7, 0x9E, - 0xEF, 0x7D, 0xF7, 0xBE, 0x07, 0xFF, 0x83, 0x1D, 0xED, 0x37, 0xEC, 0x02, 0xF6, 0xC2, 0x7B, 0xFF, - 0x1D, 0xF6, 0xFC, 0xF6, 0xDC, 0xEE, 0xDB, 0xEE, 0xDB, 0xEE, 0xDB, 0xF6, 0xFC, 0xF7, 0x1C, 0xFF, - 0x3D, 0xFF, 0x1D, 0xF6, 0xFC, 0xF6, 0xFC, 0xF7, 0x1C, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, - 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, - 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x1D, 0xF6, 0x3A, 0xEC, 0xB5, 0xF5, 0x77, 0xFF, - 0x7E, 0x0C, 0xFF, 0x91, 0xEF, 0x7D, 0xCE, 0x59, 0xAD, 0x55, 0xAD, 0x55, 0xAD, 0x55, 0xB5, 0x96, - 0xC6, 0x18, 0xE7, 0x1C, 0xF7, 0xBE, 0x2C, 0xFF, 0x89, 0xF7, 0xBE, 0xCE, 0x59, 0x8C, 0x51, 0x94, - 0x92, 0xDE, 0xDB, 0x42, 0xFF, 0x9B, 0xF7, 0x9E, 0xD6, 0x9A, 0xB5, 0x96, 0xAD, 0x55, 0xAD, 0x55, - 0xAD, 0x75, 0xBD, 0xF7, 0xDE, 0xDB, 0xF7, 0x9E, 0xEF, 0x7D, 0xBD, 0xD7, 0x9C, 0xD3, 0xC6, 0x38, - 0xF7, 0xBE, 0x04, 0xFF, 0xA1, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xFF, 0xDF, 0xDE, - 0xFB, 0xBD, 0xF7, 0xB5, 0x96, 0xB5, 0xB6, 0xB5, 0xB6, 0xC6, 0x18, 0xDE, 0xFB, 0xF7, 0xBE, 0xF7, - 0x9E, 0xD6, 0xBA, 0xCE, 0x59, 0xEF, 0x5D, 0x21, 0xFF, 0x86, 0x1D, 0xED, 0x16, 0xED, 0x37, 0xFF, - 0x5D, 0x0B, 0xFF, 0x94, 0xDF, 0xDE, 0xDB, 0x84, 0x10, 0x42, 0x08, 0x52, 0xAA, 0x63, 0x2C, 0x5A, - 0xEB, 0x5A, 0xCB, 0x7B, 0xCE, 0xC6, 0x18, 0xF7, 0xBE, 0x2A, 0xFF, 0x89, 0xF7, 0x9E, 0xB5, 0x96, - 0x52, 0xAA, 0x63, 0x2C, 0xCE, 0x79, 0x42, 0xFF, 0x9B, 0xE7, 0x1C, 0x94, 0x92, 0x4A, 0x69, 0x52, - 0x89, 0x63, 0x0C, 0x63, 0x0C, 0x5A, 0xEB, 0x6B, 0x6D, 0xAD, 0x75, 0xD6, 0x9A, 0xA5, 0x34, 0x84, - 0x10, 0xB5, 0xB6, 0xF7, 0x9E, 0x04, 0xFF, 0xA1, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, - 0xEF, 0x7D, 0xB5, 0x96, 0x73, 0xAE, 0x84, 0x10, 0x9C, 0xF3, 0x9C, 0xF3, 0x8C, 0x71, 0x8C, 0x51, - 0xB5, 0xB6, 0xDE, 0xFB, 0xCE, 0x59, 0xBD, 0xD7, 0xE7, 0x1C, 0x21, 0xFF, 0x86, 0x3D, 0xED, 0x17, - 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, 0xA0, 0xDF, 0xD6, 0x9A, 0x6B, 0x6D, 0x31, 0x85, 0x73, 0x8E, - 0xAD, 0x55, 0x94, 0xB2, 0x5A, 0xEB, 0x39, 0xE7, 0x84, 0x30, 0xE7, 0x3C, 0xF7, 0xBE, 0xDE, 0xFB, - 0xC6, 0x38, 0xC6, 0x38, 0xD6, 0xBA, 0xEF, 0x7D, 0x03, 0xFF, 0xAC, 0xDF, 0xE7, 0x1C, 0xCE, 0x59, - 0xC6, 0x18, 0xD6, 0x9A, 0xEF, 0x5D, 0xF7, 0xBE, 0xEF, 0x7D, 0xDE, 0xDB, 0xD6, 0xBA, 0xD6, 0x9A, - 0xCE, 0x59, 0xD6, 0x9A, 0xEF, 0x5D, 0xEF, 0x7D, 0xB5, 0x95, 0x52, 0x8A, 0x52, 0xAA, 0xAD, 0x55, - 0xCE, 0x59, 0xCE, 0x79, 0xEF, 0x5D, 0xFF, 0xDF, 0x02, 0xFF, 0xB3, 0xF7, 0xBE, 0xE7, 0x1C, 0xCE, - 0x59, 0xC6, 0x38, 0xD6, 0xBA, 0xF7, 0x9E, 0xFF, 0xDF, 0xEF, 0x5D, 0xD6, 0xBA, 0xD6, 0xBA, 0xD6, - 0xBA, 0xD6, 0xBA, 0xDE, 0xFB, 0xDE, 0xDB, 0xD6, 0xBA, 0xD6, 0xBA, 0xD6, 0x9A, 0xDE, 0xDB, 0xD6, - 0xBA, 0xDE, 0xDB, 0xF7, 0x9E, 0xFF, 0xDF, 0xE7, 0x3C, 0xD6, 0xBA, 0xDE, 0xFB, 0xF7, 0xBE, 0x04, - 0xFF, 0x9B, 0xDE, 0xFB, 0x7B, 0xEF, 0x39, 0xC7, 0x63, 0x0C, 0x9C, 0xF3, 0xA5, 0x13, 0x73, 0xAE, - 0x42, 0x28, 0x63, 0x2C, 0xBD, 0xD7, 0xBD, 0xD7, 0xA5, 0x14, 0xCE, 0x59, 0xF7, 0xBE, 0x04, 0xFF, - 0xA1, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xEF, 0x5D, 0xA5, 0x34, 0x73, 0x8E, 0xAD, - 0x54, 0xE7, 0x1C, 0xDE, 0xFB, 0xBD, 0xF7, 0x84, 0x10, 0x84, 0x10, 0xC6, 0x38, 0xD6, 0xBA, 0xCE, - 0x79, 0xEF, 0x5D, 0x02, 0xFF, 0x89, 0xEF, 0x7D, 0xD6, 0x9A, 0xC6, 0x38, 0xCE, 0x79, 0xEF, 0x5D, - 0x05, 0xFF, 0x8A, 0xDF, 0xE7, 0x3C, 0xCE, 0x79, 0xC6, 0x38, 0xD6, 0xBA, 0xF7, 0x9E, 0x05, 0xFF, - 0x86, 0x3D, 0xED, 0x17, 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, 0xFF, 0xDF, 0xD6, 0x9A, 0x6B, 0x6D, - 0x39, 0xE7, 0x9C, 0xF3, 0xEF, 0x7D, 0xDE, 0xFB, 0x8C, 0x71, 0x39, 0xC7, 0x6B, 0x6D, 0xCE, 0x79, - 0xC6, 0x18, 0x84, 0x10, 0x63, 0x2C, 0x63, 0x2C, 0x73, 0xAE, 0xAD, 0x75, 0xE7, 0x3C, 0xD6, 0xBA, - 0x94, 0x92, 0x6B, 0x6D, 0x6B, 0x4C, 0x73, 0x8E, 0x9C, 0xF3, 0xD6, 0x9A, 0xC6, 0x18, 0x84, 0x30, - 0x73, 0x8E, 0x73, 0xAE, 0x63, 0x2C, 0x6B, 0x6D, 0xA5, 0x34, 0xD6, 0xBA, 0xAD, 0x75, 0x52, 0x89, - 0x39, 0xE7, 0x63, 0x0C, 0x63, 0x2C, 0x6B, 0x6D, 0xA5, 0x13, 0xE7, 0x1C, 0xF7, 0x9E, 0xCE, 0x59, - 0x8C, 0x51, 0x63, 0x2C, 0x63, 0x0C, 0x7B, 0xCF, 0xB5, 0xB6, 0xDE, 0xFB, 0xBD, 0xF7, 0x84, 0x0F, - 0x73, 0x8E, 0x73, 0x8E, 0x84, 0x10, 0x9C, 0xF3, 0x84, 0x30, 0x73, 0x8E, 0x73, 0x8E, 0x7B, 0xEF, - 0x94, 0xB2, 0x84, 0x30, 0x8C, 0x51, 0xD6, 0x9A, 0xEF, 0x5D, 0xAD, 0x86, 0x55, 0x7B, 0xEF, 0xAD, - 0x55, 0xEF, 0x5D, 0x04, 0xFF, 0x9B, 0xDE, 0xFB, 0x7B, 0xEF, 0x42, 0x08, 0x84, 0x30, 0xDE, 0xDB, - 0xEF, 0x5D, 0xB5, 0xB6, 0x52, 0xAA, 0x4A, 0x69, 0x9C, 0xF3, 0x9C, 0xF3, 0x7B, 0xEF, 0xB5, 0x96, - 0xF7, 0x9E, 0x04, 0xFF, 0x8F, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xEF, 0x5D, 0xA5, - 0x34, 0x7B, 0xCF, 0xBD, 0xF7, 0x04, 0xFF, 0xAB, 0xE7, 0x3C, 0x9C, 0xD3, 0x73, 0xAE, 0xB5, 0x96, - 0xBD, 0xD7, 0xAD, 0x55, 0xDE, 0xDB, 0xEF, 0x7D, 0xBD, 0xD7, 0x8C, 0x51, 0x84, 0x30, 0x84, 0x30, - 0xA5, 0x34, 0xE7, 0x1B, 0xF7, 0xBE, 0xD6, 0xBA, 0x9C, 0xF3, 0x84, 0x30, 0x84, 0x30, 0x8C, 0x71, - 0xBD, 0xD6, 0xEF, 0x7D, 0x03, 0xFF, 0x86, 0x3D, 0xED, 0x17, 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, - 0xFF, 0xDF, 0xD6, 0x9A, 0x6B, 0x6D, 0x39, 0xC6, 0x8C, 0x71, 0xD6, 0xBA, 0xC6, 0x18, 0x7B, 0xCF, - 0x39, 0xC7, 0x7B, 0xCF, 0xC6, 0x38, 0x94, 0xB2, 0x5A, 0xEB, 0x6B, 0x6D, 0x73, 0xAE, 0x4A, 0x69, - 0x63, 0x2C, 0xBD, 0xD7, 0xAD, 0x55, 0x52, 0x8A, 0x63, 0x0C, 0x7B, 0xCF, 0x63, 0x2C, 0x6B, 0x6D, - 0xAD, 0x75, 0xA5, 0x34, 0x52, 0x8A, 0x42, 0x07, 0x6B, 0x4D, 0x6B, 0x4D, 0x4A, 0x48, 0x5A, 0xEB, - 0xAD, 0x75, 0xAD, 0x55, 0x4A, 0x69, 0x31, 0xA6, 0x63, 0x0C, 0x6B, 0x6D, 0x4A, 0x49, 0x5A, 0xCB, - 0xAD, 0x75, 0xCE, 0x59, 0x84, 0x30, 0x52, 0x89, 0x63, 0x2C, 0x6B, 0x6D, 0x52, 0xAA, 0x6B, 0x6D, - 0xB5, 0x96, 0x9C, 0xF3, 0x4A, 0x49, 0x31, 0xA6, 0x52, 0xAA, 0x7B, 0xEF, 0x8C, 0x51, 0x52, 0x8A, - 0x31, 0xA6, 0x52, 0x89, 0x7B, 0xCF, 0x94, 0xB2, 0x6B, 0x4D, 0x52, 0x8A, 0xAD, 0x55, 0xCE, 0x59, - 0x7B, 0x86, 0xCE, 0x4A, 0x69, 0x9C, 0xF3, 0xEF, 0x7D, 0x04, 0xFF, 0x9B, 0xDE, 0xFB, 0x7B, 0xEF, - 0x42, 0x07, 0x7B, 0xEF, 0xCE, 0x79, 0xDE, 0xDB, 0xA5, 0x34, 0x4A, 0x69, 0x4A, 0x69, 0x94, 0xB2, - 0x7B, 0xEF, 0x52, 0x89, 0x94, 0xB2, 0xEF, 0x5D, 0x04, 0xFF, 0xC9, 0xFE, 0xFC, 0xED, 0x16, 0xF5, - 0x98, 0xFF, 0x7E, 0xEF, 0x5D, 0xA5, 0x34, 0x73, 0xAE, 0xB5, 0xB6, 0xF7, 0x9E, 0xEF, 0x7D, 0xCE, - 0x79, 0x8C, 0x50, 0x7B, 0xCE, 0xB5, 0x95, 0xA5, 0x13, 0x84, 0x30, 0xC6, 0x38, 0xCE, 0x59, 0x8C, - 0x71, 0x94, 0x92, 0xAD, 0x75, 0x94, 0xB2, 0x7B, 0xCF, 0xB5, 0x96, 0xD6, 0xBA, 0x9C, 0xD3, 0x7B, - 0xCF, 0x9C, 0xF3, 0xAD, 0x75, 0x8C, 0x50, 0x7B, 0xEF, 0xC6, 0x18, 0xF7, 0xBE, 0xFF, 0x3D, 0xED, - 0x17, 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, 0xFF, 0xDF, 0xD6, 0x9A, 0x6B, 0x6D, 0x29, 0x45, 0x4A, - 0x69, 0x73, 0x8D, 0x63, 0x2C, 0x4A, 0x48, 0x5A, 0xCB, 0xAD, 0x75, 0xDE, 0xFB, 0xB5, 0x96, 0x8C, - 0x71, 0x9C, 0xD3, 0x94, 0x92, 0x52, 0x8A, 0x42, 0x28, 0x9C, 0xF3, 0x9C, 0xD3, 0x42, 0x08, 0x6B, - 0x4C, 0x9C, 0xF3, 0x9C, 0xD3, 0x9C, 0xF3, 0xBD, 0xF7, 0xA5, 0x14, 0x4A, 0x69, 0x52, 0xAA, 0xAD, - 0x75, 0xBD, 0xF7, 0x6B, 0x6D, 0x4A, 0x48, 0x8C, 0x50, 0x9C, 0xF3, 0x52, 0x8A, 0x4A, 0x69, 0xAD, - 0x54, 0xC6, 0x18, 0x73, 0xAE, 0x42, 0x28, 0x7B, 0xEF, 0x9C, 0xF3, 0x52, 0xAA, 0x4A, 0x49, 0x8C, - 0x51, 0x9C, 0xD3, 0x5A, 0xEB, 0x4A, 0x49, 0x8C, 0x71, 0x94, 0x92, 0x42, 0x28, 0x4A, 0x69, 0x9C, - 0xD3, 0xC6, 0x38, 0xA5, 0x14, 0x4A, 0x69, 0x42, 0x28, 0x8C, 0x71, 0xCE, 0x59, 0xCE, 0x79, 0x84, - 0x30, 0x4A, 0x49, 0x84, 0x10, 0xA5, 0x34, 0x5A, 0x86, 0xEB, 0x5A, 0xCA, 0xBD, 0xD7, 0xFF, 0xDF, - 0x04, 0xFF, 0x9B, 0xDE, 0xFB, 0x7B, 0xEF, 0x31, 0xA6, 0x4A, 0x69, 0x73, 0xAE, 0x7B, 0xCF, 0x5A, - 0xCB, 0x42, 0x08, 0x73, 0xAE, 0xB5, 0x96, 0x7B, 0xEF, 0x4A, 0x48, 0x94, 0x92, 0xEF, 0x5D, 0x04, - 0xFF, 0xC9, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xEF, 0x5D, 0xA5, 0x14, 0x63, 0x0C, - 0x7B, 0xEF, 0xA5, 0x34, 0xA5, 0x14, 0x8C, 0x51, 0x73, 0xAE, 0x9C, 0xD3, 0xCE, 0x58, 0x9C, 0xD3, - 0x7B, 0xEF, 0xB5, 0xB6, 0xAD, 0x55, 0x8C, 0x51, 0xCE, 0x59, 0xEF, 0x7D, 0xD6, 0xBA, 0xAD, 0x55, - 0xBD, 0xD7, 0xB5, 0xB6, 0x73, 0xAE, 0x94, 0xB2, 0xDE, 0xFB, 0xEF, 0x7D, 0xBD, 0xF7, 0x73, 0xAE, - 0x9C, 0xD2, 0xEF, 0x5D, 0xFF, 0x3D, 0xED, 0x17, 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, 0xFF, 0xDF, - 0xD6, 0x9A, 0x6B, 0x6D, 0x21, 0x24, 0x42, 0x28, 0x52, 0xAA, 0x39, 0xC7, 0x39, 0xC7, 0x8C, 0x51, - 0xE7, 0x1C, 0xEF, 0x5D, 0xB5, 0x96, 0x7B, 0xEF, 0x73, 0xAE, 0x73, 0x8D, 0x42, 0x28, 0x42, 0x07, - 0x9C, 0xF3, 0xBD, 0xD7, 0x63, 0x2C, 0x52, 0x8A, 0x63, 0x2C, 0x7B, 0xEF, 0xA5, 0x34, 0xCE, 0x79, - 0xA5, 0x34, 0x52, 0x8A, 0x63, 0x2C, 0xCE, 0x79, 0xE7, 0x1C, 0x8C, 0x71, 0x4A, 0x49, 0x73, 0xAE, - 0x94, 0xB2, 0x52, 0xAA, 0x5A, 0xEB, 0xCE, 0x58, 0xEF, 0x5C, 0x9C, 0xD2, 0x4A, 0x69, 0x63, 0x2C, - 0x7B, 0xEF, 0x42, 0x28, 0x39, 0xC7, 0x63, 0x2C, 0x73, 0x8D, 0x4A, 0x69, 0x4A, 0x49, 0x84, 0x30, - 0x8C, 0x51, 0x4A, 0x69, 0x6B, 0x4C, 0xCE, 0x59, 0xEF, 0x7D, 0xAD, 0x75, 0x52, 0x8A, 0x5A, 0xEB, - 0xC6, 0x18, 0xF7, 0xBE, 0xEF, 0x7D, 0xAD, 0x75, 0x52, 0xAA, 0x5A, 0xCB, 0x73, 0x8D, 0x52, 0x84, - 0x89, 0x73, 0xAE, 0xD6, 0xBA, 0x06, 0xFF, 0x9B, 0xDE, 0xFB, 0x7B, 0xEF, 0x31, 0x86, 0x39, 0xC6, - 0x52, 0xAA, 0x5A, 0xCB, 0x63, 0x0C, 0x84, 0x0F, 0xBD, 0xF7, 0xCE, 0x79, 0x7B, 0xEF, 0x4A, 0x48, - 0x94, 0x92, 0xEF, 0x5D, 0x04, 0xFF, 0xA7, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xEF, - 0x7D, 0xA5, 0x14, 0x5A, 0xEB, 0x6B, 0x4D, 0x8C, 0x71, 0x8C, 0x71, 0x94, 0x92, 0xAD, 0x55, 0xDE, - 0xDA, 0xDE, 0xFB, 0x9C, 0xD3, 0x7B, 0xEF, 0xAD, 0x75, 0x9C, 0xD3, 0x94, 0x92, 0xE7, 0x1C, 0x03, - 0xFF, 0x8C, 0xDF, 0xEF, 0x5D, 0xE7, 0x3C, 0xAD, 0x75, 0x6B, 0x6D, 0xB5, 0x96, 0xF7, 0x9E, 0x02, - 0xFF, 0x8F, 0xDE, 0xDB, 0x84, 0x30, 0x84, 0x30, 0xE7, 0x1C, 0xFF, 0x3D, 0xED, 0x17, 0xED, 0x37, - 0xFF, 0x5D, 0x0B, 0xFF, 0xF2, 0xDF, 0xD6, 0x9A, 0x6B, 0x6D, 0x31, 0xA6, 0x7B, 0xCF, 0xA5, 0x34, - 0x6B, 0x4C, 0x39, 0xC7, 0x84, 0x10, 0xDE, 0xFB, 0xCE, 0x79, 0x73, 0xAE, 0x4A, 0x69, 0x7B, 0xEF, - 0x8C, 0x71, 0x52, 0xAA, 0x42, 0x07, 0x9C, 0xF3, 0xD6, 0xBA, 0xA5, 0x14, 0x84, 0x30, 0x6B, 0x6D, - 0x52, 0x8A, 0x63, 0x2C, 0xAD, 0x54, 0xA5, 0x14, 0x52, 0x8A, 0x6B, 0x4C, 0xD6, 0x99, 0xE7, 0x3C, - 0x8C, 0x71, 0x4A, 0x49, 0x73, 0xAE, 0x94, 0xB2, 0x52, 0xAA, 0x63, 0x0B, 0xCE, 0x59, 0xEF, 0x5D, - 0x9C, 0xD2, 0x4A, 0x69, 0x63, 0x2C, 0x7B, 0xEF, 0x42, 0x28, 0x39, 0xE7, 0x73, 0xAE, 0x8C, 0x51, - 0x84, 0x10, 0x8C, 0x51, 0xAD, 0x55, 0x94, 0x92, 0x4A, 0x69, 0x6B, 0x6D, 0xD6, 0xBA, 0xF7, 0x9E, - 0xB5, 0x96, 0x52, 0x8A, 0x63, 0x0C, 0xCE, 0x59, 0x03, 0xFF, 0x8E, 0xDF, 0xCE, 0x79, 0x6B, 0x6D, - 0x39, 0xE7, 0x39, 0xE7, 0x4A, 0x69, 0x9C, 0xF3, 0xEF, 0x7D, 0x06, 0xFF, 0x9B, 0xDE, 0xFB, 0x7B, - 0xEF, 0x39, 0xC7, 0x63, 0x0C, 0x9C, 0xF3, 0xB5, 0x96, 0xC6, 0x18, 0xDE, 0xDB, 0xF7, 0x9E, 0xDE, - 0xFB, 0x7B, 0xEF, 0x4A, 0x48, 0x94, 0x92, 0xEF, 0x5D, 0x04, 0xFF, 0xA7, 0xFE, 0xFC, 0xED, 0x16, - 0xF5, 0x98, 0xFF, 0x7E, 0xEF, 0x7D, 0xA5, 0x34, 0x6B, 0x6D, 0x9C, 0xF3, 0xD6, 0xBA, 0xDE, 0xDB, - 0xDE, 0xFB, 0xEF, 0x7D, 0xFF, 0xDF, 0xE7, 0x3C, 0x9C, 0xD3, 0x7B, 0xEF, 0xAD, 0x75, 0x9C, 0xD2, - 0x94, 0x92, 0xE7, 0x3C, 0x03, 0xFF, 0x8C, 0xDF, 0xEF, 0x7D, 0xEF, 0x5D, 0xAD, 0x75, 0x6B, 0x6D, - 0xB5, 0xB6, 0xF7, 0xBE, 0x02, 0xFF, 0x8F, 0xDE, 0xDB, 0x84, 0x30, 0x84, 0x30, 0xE7, 0x1C, 0xFF, - 0x3D, 0xED, 0x17, 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, 0xF2, 0xDF, 0xD6, 0x9A, 0x6B, 0x6D, 0x39, - 0xC7, 0x9C, 0xF3, 0xE7, 0x3C, 0xA5, 0x34, 0x4A, 0x49, 0x52, 0xAA, 0xB5, 0x96, 0xB5, 0xB6, 0x52, - 0x8A, 0x42, 0x28, 0x94, 0xB2, 0xA5, 0x14, 0x5A, 0xCB, 0x39, 0xE7, 0x94, 0xB2, 0xB5, 0xB6, 0x8C, - 0x71, 0xA5, 0x34, 0xA5, 0x14, 0x63, 0x0B, 0x42, 0x28, 0x8C, 0x51, 0x9C, 0xD3, 0x52, 0x89, 0x52, - 0x8A, 0xA5, 0x34, 0xB5, 0xB6, 0x6B, 0x4D, 0x42, 0x28, 0x8C, 0x51, 0x9C, 0xF3, 0x52, 0x89, 0x4A, - 0x49, 0xA5, 0x14, 0xBD, 0xD7, 0x73, 0x8E, 0x42, 0x28, 0x84, 0x0F, 0x9C, 0xF3, 0x52, 0xAA, 0x42, - 0x28, 0x8C, 0x50, 0xAD, 0x75, 0xA5, 0x34, 0xAD, 0x55, 0xC6, 0x18, 0x9C, 0xD3, 0x4A, 0x49, 0x6B, - 0x6D, 0xD6, 0xBA, 0xF7, 0x9E, 0xB5, 0x95, 0x52, 0x8A, 0x63, 0x0C, 0xCE, 0x59, 0x04, 0xFF, 0x8D, - 0xE7, 0x1C, 0x8C, 0x71, 0x39, 0xC6, 0x21, 0x24, 0x5A, 0xEB, 0xBD, 0xF7, 0xFF, 0xDF, 0x06, 0xFF, - 0x8D, 0xDE, 0xFB, 0x7B, 0xEF, 0x42, 0x08, 0x84, 0x10, 0xDE, 0xDB, 0xF7, 0x9E, 0xF7, 0xBE, 0x04, - 0xFF, 0x89, 0xDE, 0xFB, 0x7B, 0xEF, 0x42, 0x28, 0x94, 0x92, 0xEF, 0x5D, 0x04, 0xFF, 0x91, 0xFE, - 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xEF, 0x5D, 0xA5, 0x34, 0x73, 0xAE, 0xBD, 0xD7, 0xFF, - 0xDF, 0x08, 0xFF, 0xAF, 0xE7, 0x3C, 0x9C, 0xD3, 0x7B, 0xEF, 0xB5, 0xB6, 0xAD, 0x55, 0x8C, 0x51, - 0xCE, 0x79, 0xF7, 0xBE, 0xDE, 0xFB, 0xB5, 0xB6, 0xC6, 0x18, 0xBD, 0xD6, 0x73, 0xAE, 0x94, 0xB2, - 0xE7, 0x1C, 0xF7, 0x9E, 0xBD, 0xF7, 0x73, 0xAE, 0x94, 0xB2, 0xEF, 0x5D, 0xFF, 0x3D, 0xED, 0x17, - 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, 0xF2, 0xDF, 0xD6, 0xBA, 0x73, 0xAE, 0x42, 0x28, 0xA5, 0x34, - 0xF7, 0xBE, 0xDE, 0xDB, 0x84, 0x10, 0x42, 0x28, 0x7B, 0xEF, 0xB5, 0x96, 0x7B, 0xCE, 0x39, 0xE7, - 0x52, 0x8A, 0x63, 0x0C, 0x4A, 0x48, 0x42, 0x28, 0x94, 0xB2, 0xB5, 0x96, 0x6B, 0x4D, 0x5A, 0xEB, - 0x5A, 0xEB, 0x4A, 0x69, 0x63, 0x2C, 0xAD, 0x55, 0xA5, 0x14, 0x4A, 0x69, 0x31, 0xA6, 0x52, 0xAA, - 0x52, 0xAA, 0x42, 0x28, 0x73, 0x8E, 0xBD, 0xF7, 0xAD, 0x75, 0x52, 0xAA, 0x42, 0x07, 0x5A, 0xEB, - 0x5A, 0xCA, 0x42, 0x28, 0x6B, 0x4C, 0xBD, 0xD7, 0xD6, 0xBA, 0x9C, 0xD3, 0x5A, 0xCB, 0x4A, 0x69, - 0x5A, 0xCB, 0x63, 0x0B, 0x8C, 0x51, 0xC6, 0x18, 0xA5, 0x13, 0x52, 0x8A, 0x73, 0xAE, 0xD6, 0xBA, - 0xF7, 0x9E, 0xB5, 0xB6, 0x5A, 0xCB, 0x63, 0x2C, 0xCE, 0x79, 0x04, 0xFF, 0x8B, 0xF7, 0xBE, 0xBD, - 0xD7, 0x52, 0x8A, 0x31, 0x86, 0x84, 0x10, 0xDE, 0xFB, 0x08, 0xFF, 0x89, 0xDE, 0xFB, 0x84, 0x10, - 0x4A, 0x49, 0x8C, 0x71, 0xE7, 0x3C, 0x08, 0xFF, 0x89, 0xE7, 0x1C, 0x84, 0x10, 0x4A, 0x69, 0x94, - 0xB2, 0xEF, 0x5D, 0x04, 0xFF, 0x8F, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xEF, 0x7D, - 0xA5, 0x34, 0x7B, 0xCF, 0xBD, 0xF7, 0x0A, 0xFF, 0xAF, 0xE7, 0x3C, 0x9C, 0xF3, 0x84, 0x10, 0xC6, - 0x38, 0xD6, 0x9A, 0x94, 0xB2, 0x7B, 0xEF, 0x8C, 0x71, 0x84, 0x10, 0x8C, 0x51, 0xC6, 0x38, 0xDE, - 0xFB, 0xA5, 0x34, 0x7B, 0xCF, 0x84, 0x30, 0x8C, 0x51, 0x7B, 0xCF, 0x8C, 0x50, 0xCE, 0x79, 0xF7, - 0xBE, 0xFF, 0x3D, 0xED, 0x17, 0xED, 0x37, 0xFF, 0x5D, 0x0C, 0xFF, 0x87, 0xEF, 0x5D, 0xBD, 0xD6, - 0xA5, 0x13, 0xD6, 0x9A, 0x02, 0xFF, 0xE7, 0xF7, 0xBE, 0xCE, 0x79, 0xA5, 0x13, 0xAD, 0x75, 0xDE, - 0xDA, 0xCE, 0x59, 0x9C, 0xD2, 0x8C, 0x51, 0x9C, 0xF3, 0xA5, 0x14, 0x9C, 0xF3, 0xC6, 0x38, 0xDE, - 0xFB, 0xB5, 0xB6, 0x94, 0x92, 0x8C, 0x51, 0x9C, 0xD3, 0xBD, 0xF7, 0xDE, 0xDB, 0xAD, 0x55, 0x4A, - 0x69, 0x4A, 0x69, 0x84, 0x10, 0x8C, 0x71, 0x9C, 0xD2, 0xC6, 0x38, 0xEF, 0x5D, 0xDE, 0xDB, 0xAD, - 0x55, 0x9C, 0xF3, 0x9C, 0xF3, 0x8C, 0x71, 0x94, 0xB2, 0xBD, 0xF7, 0xEF, 0x7D, 0xFF, 0xDF, 0xDE, - 0xFB, 0xB5, 0x96, 0x94, 0x92, 0x8C, 0x50, 0x9C, 0xD2, 0xC6, 0x17, 0xE7, 0x1C, 0xCE, 0x79, 0xA5, - 0x34, 0xBD, 0xD7, 0xEF, 0x5D, 0xFF, 0xDF, 0xDE, 0xDB, 0xAD, 0x55, 0xB5, 0x96, 0xE7, 0x3C, 0x06, - 0xFF, 0x89, 0xCE, 0x79, 0x63, 0x2C, 0x4A, 0x69, 0xAD, 0x55, 0xF7, 0x9E, 0x08, 0xFF, 0x89, 0xEF, - 0x7D, 0xBD, 0xF7, 0xA5, 0x14, 0xC6, 0x38, 0xF7, 0x9E, 0x08, 0xFF, 0x89, 0xEF, 0x7D, 0xC6, 0x17, - 0xA5, 0x34, 0xCE, 0x59, 0xF7, 0xBE, 0x04, 0xFF, 0x8F, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, - 0x7E, 0xF7, 0xBE, 0xD6, 0x9A, 0xBD, 0xD7, 0xDE, 0xFB, 0x0A, 0xFF, 0xA5, 0xF7, 0x9E, 0xCE, 0x79, - 0xBD, 0xF7, 0xE7, 0x1C, 0xF7, 0xBE, 0xCE, 0x79, 0xA5, 0x34, 0x9C, 0xD3, 0xA5, 0x14, 0xC6, 0x18, - 0xEF, 0x5D, 0xFF, 0xDF, 0xE7, 0x1C, 0xBD, 0xD6, 0x9C, 0xF3, 0x9C, 0xD3, 0xA5, 0x34, 0xCE, 0x79, - 0xF7, 0x9E, 0x03, 0xFF, 0x86, 0x3D, 0xED, 0x37, 0xED, 0x37, 0xFF, 0x5D, 0x0D, 0xFF, 0x86, 0xDF, - 0xF7, 0x9E, 0xEF, 0x5D, 0xF7, 0xBE, 0x04, 0xFF, 0xB1, 0xF7, 0xBE, 0xEF, 0x7D, 0xEF, 0x7D, 0xF7, - 0xBE, 0xF7, 0xBE, 0xEF, 0x5D, 0xE7, 0x1C, 0xEF, 0x5D, 0xEF, 0x7D, 0xEF, 0x5D, 0xF7, 0x9E, 0xFF, - 0xDF, 0xF7, 0x9E, 0xE7, 0x3C, 0xE7, 0x1C, 0xEF, 0x5D, 0xF7, 0xBE, 0xEF, 0x7D, 0xAD, 0x55, 0x52, - 0x89, 0x63, 0x0C, 0xC6, 0x17, 0xE7, 0x3C, 0xEF, 0x5D, 0xF7, 0xBE, 0x02, 0xFF, 0x8D, 0xF7, 0xBE, - 0xEF, 0x7D, 0xEF, 0x7D, 0xEF, 0x7D, 0xE7, 0x3C, 0xE7, 0x3C, 0xF7, 0x9E, 0x05, 0xFF, 0x94, 0xDF, - 0xF7, 0x9E, 0xE7, 0x3C, 0xE7, 0x1C, 0xEF, 0x5D, 0xF7, 0xBE, 0xFF, 0xDF, 0xF7, 0xBE, 0xEF, 0x7D, - 0xF7, 0x9E, 0xFF, 0xDF, 0x02, 0xFF, 0x87, 0xF7, 0xBE, 0xEF, 0x7D, 0xEF, 0x7D, 0xFF, 0xDF, 0x02, - 0xFF, 0x8B, 0xF7, 0xBE, 0xD6, 0xBA, 0x94, 0x92, 0x52, 0x89, 0x6B, 0x4D, 0xCE, 0x59, 0x0B, 0xFF, - 0x86, 0xDF, 0xF7, 0x9E, 0xEF, 0x7D, 0xF7, 0x9E, 0x0B, 0xFF, 0x86, 0xDF, 0xF7, 0x9E, 0xEF, 0x7D, - 0xF7, 0xBE, 0x07, 0xFF, 0x8E, 0x1C, 0xED, 0x16, 0xED, 0x37, 0xFF, 0x1D, 0xFF, 0xDF, 0xF7, 0x9E, - 0xEF, 0x7D, 0xF7, 0xBE, 0x0B, 0xFF, 0x94, 0xDF, 0xF7, 0x9E, 0xF7, 0x7D, 0xFF, 0xBE, 0xFF, 0xDF, - 0xF7, 0xBE, 0xEF, 0x5D, 0xE7, 0x1C, 0xE7, 0x3C, 0xF7, 0x9E, 0xFF, 0xDF, 0x03, 0xFF, 0x8A, 0xDF, - 0xF7, 0x7E, 0xE7, 0x3C, 0xE7, 0x1C, 0xEF, 0x5D, 0xF7, 0xBE, 0x04, 0xFF, 0x87, 0xFE, 0xDC, 0xEC, - 0xD6, 0xED, 0x37, 0xFF, 0x7E, 0x3A, 0xFF, 0x89, 0xF7, 0x9E, 0xAD, 0x75, 0x5A, 0xCB, 0x73, 0x8D, - 0xD6, 0x9A, 0x3C, 0xFF, 0x8B, 0xEF, 0x5D, 0xA5, 0x14, 0x52, 0xAA, 0x52, 0x8A, 0x9C, 0xF3, 0xEF, - 0x5D, 0x2B, 0xFF, 0xC8, 0x7E, 0xF5, 0xB8, 0xEC, 0x54, 0xEC, 0x95, 0xED, 0x16, 0xED, 0x16, 0xED, - 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, - 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, - 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, - 0x16, 0xED, 0x16, 0xED, 0x16, 0xEC, 0x75, 0xEC, 0x54, 0xF6, 0x19, 0xFF, 0xBE, 0x3B, 0xFF, 0x88, - 0xDF, 0xDE, 0xDA, 0xAD, 0x75, 0xBD, 0xD7, 0xEF, 0x5D, 0x3C, 0xFF, 0x8B, 0xF7, 0x9E, 0xC6, 0x18, - 0x9C, 0xD3, 0xAD, 0x75, 0xDE, 0xFB, 0xFF, 0xDF, 0x2B, 0xFF, 0xC6, 0xDF, 0xFF, 0x1D, 0xF5, 0xD9, - 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, - 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, - 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, - 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xF6, 0x19, - 0xFF, 0x5D, 0x3F, 0xFF, 0x86, 0xDF, 0xEF, 0x7D, 0xF7, 0x9E, 0xFF, 0xDF, 0x3D, 0xFF, 0x88, 0xDF, - 0xF7, 0x9E, 0xEF, 0x5D, 0xEF, 0x7D, 0xFF, 0xDF, 0x2F, 0xFF, 0xC2, 0xDF, 0xFF, 0x9E, 0xFF, 0x3D, - 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, - 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, - 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, - 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x3D, 0xFF, 0x9E, 0x7F, 0xFF, - 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, - 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, - 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, - 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x26, 0xFF, -}; -// clang-format on diff --git a/keyboards/fpb/rp2040_tft/qmklogo.qgf.h b/keyboards/fpb/rp2040_tft/qmklogo.qgf.h deleted file mode 100644 index 41a467de3c92..000000000000 --- a/keyboards/fpb/rp2040_tft/qmklogo.qgf.h +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2024 QMK -- generated source code only, image retains original copyright -// SPDX-License-Identifier: GPL-2.0-or-later - -// This file was auto-generated by `qmk painter-convert-graphics -i qmklogo.png -f rgb565` - -#pragma once - -#include - -extern const uint32_t gfx_qmklogo_length; -extern const uint8_t gfx_qmklogo[10700]; From 70d9d819a1f0ae8dddc9f86ecfb6684841b0d97a Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Fri, 2 Feb 2024 21:27:36 +0000 Subject: [PATCH 06/35] code fixes for develop branch --- keyboards/fpb/rp2040_tft/config.h | 2 +- keyboards/fpb/rp2040_tft/info.json | 5 ++++- keyboards/fpb/rp2040_tft/rules.mk | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/keyboards/fpb/rp2040_tft/config.h b/keyboards/fpb/rp2040_tft/config.h index b3e2ced62e2c..845565e8a886 100644 --- a/keyboards/fpb/rp2040_tft/config.h +++ b/keyboards/fpb/rp2040_tft/config.h @@ -21,7 +21,7 @@ //#define WS2812_DI_PIN GP23 //#ifdef WS2812_DI_PIN -# define RGBLED_NUM 1 +//# define RGBLED_NUM 1 # define RGBLIGHT_HUE_STEP 8 # define RGBLIGHT_SAT_STEP 8 # define RGBLIGHT_VAL_STEP 8 diff --git a/keyboards/fpb/rp2040_tft/info.json b/keyboards/fpb/rp2040_tft/info.json index 16d5569f0857..c0ef285a5069 100644 --- a/keyboards/fpb/rp2040_tft/info.json +++ b/keyboards/fpb/rp2040_tft/info.json @@ -9,7 +9,10 @@ "backlight": { "pin": "GP13", "levels": 8, - } + }, + "rgblight": { + "led_count": 1 + }, "ws2812": { "pin": "GP23" }, diff --git a/keyboards/fpb/rp2040_tft/rules.mk b/keyboards/fpb/rp2040_tft/rules.mk index 903c4f00c547..8205abc3fe77 100644 --- a/keyboards/fpb/rp2040_tft/rules.mk +++ b/keyboards/fpb/rp2040_tft/rules.mk @@ -1,5 +1,5 @@ WS2812_DRIVER = vendor -#RGBLIGHT_ENABLE = yes +RGBLIGHT_ENABLE = yes QUANTUM_PAINTER_ENABLE = yes #QUANTUM_PAINTER_DRIVERS += st7735_spi From dcc57ae353e34a774f3329680a484eb195086ec5 Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Sun, 4 Feb 2024 00:07:06 +0000 Subject: [PATCH 07/35] Copyright headers and Code cleaup --- keyboards/fpb/rp2040_tft/config.h | 2 +- .../graphics/Apple-Orchard-128x160.qgf.c | 2576 ----------------- .../graphics/Apple-Orchard-128x160.qgf.h | 11 - keyboards/fpb/rp2040_tft/halconf.h | 4 +- keyboards/fpb/rp2040_tft/info.json | 2 +- .../rp2040_tft/keymaps/default/onekey.json | 1 + keyboards/fpb/rp2040_tft/mcuconf.h | 8 +- keyboards/fpb/rp2040_tft/readme.md | 7 +- keyboards/fpb/rp2040_tft/rp2040_tft.c | 28 +- keyboards/fpb/rp2040_tft/rp2040_tft.h | 4 +- keyboards/fpb/rp2040_tft/rules.mk | 10 +- 11 files changed, 16 insertions(+), 2637 deletions(-) delete mode 100644 keyboards/fpb/rp2040_tft/graphics/Apple-Orchard-128x160.qgf.c delete mode 100644 keyboards/fpb/rp2040_tft/graphics/Apple-Orchard-128x160.qgf.h diff --git a/keyboards/fpb/rp2040_tft/config.h b/keyboards/fpb/rp2040_tft/config.h index 845565e8a886..9771fd8d0d97 100644 --- a/keyboards/fpb/rp2040_tft/config.h +++ b/keyboards/fpb/rp2040_tft/config.h @@ -1,4 +1,4 @@ -// Copyright 2022 Stefan Kerkmann +// Copyright 2024 Fernando Birra // SPDX-License-Identifier: GPL-2.0-or-later #pragma once diff --git a/keyboards/fpb/rp2040_tft/graphics/Apple-Orchard-128x160.qgf.c b/keyboards/fpb/rp2040_tft/graphics/Apple-Orchard-128x160.qgf.c deleted file mode 100644 index e655bf76d4c7..000000000000 --- a/keyboards/fpb/rp2040_tft/graphics/Apple-Orchard-128x160.qgf.c +++ /dev/null @@ -1,2576 +0,0 @@ -// Copyright 2024 QMK -- generated source code only, image retains original copyright -// SPDX-License-Identifier: GPL-2.0-or-later - -// This file was auto-generated by `qmk painter-convert-graphics -i Apple-Orchard-128x160.jpg -f rgb565` - -#include - -const uint32_t gfx_Apple_Orchard_128x160_length = 41008; - -// clang-format off -const uint8_t gfx_Apple_Orchard_128x160[41008] = { - 0x00, 0xFF, 0x12, 0x00, 0x00, 0x51, 0x47, 0x46, 0x01, 0x30, 0xA0, 0x00, 0x00, 0xCF, 0x5F, 0xFF, - 0xFF, 0x80, 0x00, 0xA0, 0x00, 0x01, 0x00, 0x01, 0xFE, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x02, 0xFD, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0xFF, 0xE8, 0x03, 0x05, 0xFA, 0x00, 0xA0, 0x00, - 0x3A, 0x00, 0x3A, 0x20, 0x3A, 0x40, 0x4A, 0xA0, 0x5B, 0x03, 0x73, 0x88, 0x7B, 0xAA, 0x63, 0x06, - 0x31, 0xE0, 0x31, 0xC0, 0x31, 0x80, 0x31, 0x80, 0x31, 0xC0, 0x31, 0xC0, 0x39, 0xE0, 0x42, 0x20, - 0x5A, 0xE1, 0x42, 0x41, 0x3A, 0x20, 0x42, 0x60, 0x5A, 0xE0, 0x6B, 0x84, 0x52, 0xC1, 0x4A, 0x81, - 0x5A, 0xE0, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x00, 0x52, 0xE0, 0x52, 0xC0, - 0x52, 0xC0, 0x4A, 0xA0, 0x52, 0xA1, 0x4A, 0xA0, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0x60, 0x4A, 0xA0, - 0x4A, 0xA0, 0x4A, 0xC0, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x53, 0x00, 0x5B, 0x00, 0x5B, 0x20, - 0x5B, 0x20, 0x42, 0x60, 0x21, 0x60, 0x19, 0x20, 0x19, 0x20, 0x21, 0x40, 0x21, 0x20, 0x21, 0x40, - 0x21, 0x60, 0x21, 0x60, 0x29, 0x60, 0x29, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xE0, - 0x31, 0xE0, 0x4A, 0x81, 0x4A, 0x40, 0x42, 0x20, 0x42, 0x40, 0x3A, 0x40, 0x42, 0x60, 0x42, 0x60, - 0x52, 0xE1, 0x63, 0x60, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x20, 0x5A, 0xE0, - 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x00, 0x32, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, - 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x32, 0x40, 0x32, 0x40, - 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x60, - 0x42, 0x80, 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, - 0x63, 0x20, 0x52, 0xE0, 0x52, 0xE0, 0x4A, 0xE0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xE0, 0x4A, 0xE0, - 0x5B, 0x01, 0x5B, 0x00, 0x5B, 0x00, 0x6B, 0x61, 0x63, 0x40, 0x63, 0x80, 0x4A, 0xC0, 0x42, 0xC0, - 0x52, 0xE0, 0x52, 0xC1, 0x42, 0x80, 0x4A, 0x80, 0x5A, 0xE2, 0x83, 0xEA, 0x9C, 0x8E, 0x83, 0xEA, - 0x42, 0x42, 0x29, 0x80, 0x31, 0x80, 0x31, 0xA0, 0x31, 0xC0, 0x31, 0xC0, 0x31, 0xC0, 0x39, 0xE0, - 0x4A, 0x40, 0x39, 0xE0, 0x31, 0xE0, 0x3A, 0x00, 0x42, 0x40, 0x4A, 0xC0, 0x42, 0x20, 0x42, 0x40, - 0x52, 0xC0, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x00, 0x5B, 0x20, 0x5B, 0x00, 0x52, 0xE0, 0x52, 0xC0, - 0x52, 0xC0, 0x4A, 0xC0, 0x4A, 0xA0, 0x4A, 0x80, 0x42, 0x60, 0x52, 0xA0, 0x4A, 0x40, 0x42, 0x80, - 0x4A, 0xA0, 0x4A, 0xC0, 0x52, 0xC0, 0x52, 0xE0, 0x53, 0x00, 0x53, 0x00, 0x5B, 0x00, 0x5B, 0x20, - 0x5B, 0x00, 0x3A, 0x20, 0x21, 0x40, 0x21, 0x20, 0x19, 0x20, 0x19, 0x20, 0x21, 0x20, 0x21, 0x40, - 0x21, 0x40, 0x21, 0x60, 0x21, 0x60, 0x29, 0x80, 0x29, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, - 0x31, 0xC0, 0x31, 0xE0, 0x4A, 0x60, 0x4A, 0x60, 0x4A, 0x60, 0x42, 0x40, 0x3A, 0x40, 0x42, 0x40, - 0x3A, 0x40, 0x4A, 0xC0, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x01, 0x52, 0xC0, 0x42, 0x60, - 0x32, 0x00, 0x32, 0x00, 0x31, 0xE0, 0x32, 0x00, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, - 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x40, - 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x42, 0x60, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, - 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xC0, - 0x52, 0xC0, 0x5B, 0x40, 0x53, 0x00, 0x53, 0x01, 0x52, 0xE0, 0x4A, 0xE0, 0x4A, 0xC0, 0x4A, 0xC0, - 0x53, 0x00, 0x5B, 0x40, 0x53, 0x00, 0x63, 0x41, 0x63, 0x40, 0x73, 0xE1, 0x4A, 0xC0, 0x42, 0xA0, - 0x63, 0x40, 0x63, 0x62, 0x63, 0x62, 0x5B, 0x20, 0x63, 0x22, 0x8C, 0x2A, 0xAD, 0x10, 0x9C, 0xAF, - 0x4A, 0x83, 0x31, 0xA0, 0x31, 0xA1, 0x31, 0xC0, 0x31, 0xC0, 0x31, 0xC0, 0x31, 0xA0, 0x3A, 0x00, - 0x39, 0xC0, 0x29, 0x80, 0x29, 0xC0, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x20, 0x29, 0x80, 0x42, 0x01, - 0x4A, 0x60, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x00, 0x5A, 0xE0, 0x5A, 0xE0, 0x52, 0xE0, - 0x52, 0xC0, 0x4A, 0xC0, 0x4A, 0xA0, 0x4A, 0x80, 0x42, 0x40, 0x5A, 0x80, 0x52, 0x41, 0x4A, 0xA0, - 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xC0, 0x53, 0x00, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x20, - 0x52, 0xE0, 0x31, 0xC0, 0x21, 0x40, 0x21, 0x40, 0x19, 0x20, 0x21, 0x20, 0x21, 0x40, 0x21, 0x40, - 0x21, 0x40, 0x21, 0x40, 0x21, 0x60, 0x21, 0x60, 0x29, 0x80, 0x29, 0x80, 0x29, 0xA0, 0x29, 0xA0, - 0x29, 0xA0, 0x29, 0xC0, 0x31, 0xE0, 0x52, 0xA0, 0x52, 0x60, 0x4A, 0x40, 0x42, 0x40, 0x3A, 0x40, - 0x32, 0x00, 0x42, 0x61, 0x5B, 0x21, 0x52, 0xA0, 0x4A, 0x80, 0x4A, 0x40, 0x3A, 0x20, 0x31, 0xE0, - 0x31, 0xC0, 0x31, 0xC0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, - 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, - 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0xA0, 0x42, 0xA0, - 0x42, 0xA0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, - 0x4A, 0xC0, 0x52, 0xE0, 0x63, 0x40, 0x5B, 0x00, 0x53, 0x00, 0x53, 0x00, 0x53, 0x00, 0x53, 0x00, - 0x53, 0x00, 0x53, 0x20, 0x5B, 0x20, 0x63, 0x40, 0x63, 0x40, 0x63, 0x80, 0x42, 0x80, 0x42, 0xA0, - 0x52, 0xE0, 0x63, 0x41, 0x63, 0x41, 0x53, 0x00, 0x52, 0xC0, 0x73, 0xA5, 0x9C, 0xAC, 0x9C, 0xCF, - 0x5B, 0x04, 0x31, 0xA0, 0x31, 0xA0, 0x31, 0xC0, 0x31, 0xC0, 0x31, 0xC0, 0x39, 0xE0, 0x31, 0xC0, - 0x39, 0xE0, 0x29, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x40, 0x29, 0xA0, 0x18, 0xC0, 0x31, 0x61, - 0x42, 0x20, 0x5A, 0xE0, 0x5A, 0xE0, 0x5A, 0xE0, 0x5B, 0x00, 0x52, 0xE0, 0x5A, 0xE0, 0x52, 0xE0, - 0x52, 0xC0, 0x4A, 0xC0, 0x4A, 0xA0, 0x4A, 0x60, 0x42, 0x00, 0x52, 0x20, 0x62, 0x62, 0x52, 0xC0, - 0x52, 0xC0, 0x52, 0xC0, 0x52, 0xC0, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x00, - 0x4A, 0xA0, 0x29, 0xA0, 0x29, 0x60, 0x21, 0x40, 0x21, 0x40, 0x21, 0x20, 0x21, 0x20, 0x21, 0x40, - 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x60, 0x21, 0x60, 0x29, 0x80, 0x29, 0x80, 0x29, 0x80, - 0x29, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x31, 0xE0, 0x4A, 0x60, 0x4A, 0x60, 0x4A, 0x80, 0x42, 0x60, - 0x32, 0x00, 0x3A, 0x00, 0x4A, 0x80, 0x3A, 0x00, 0x31, 0xA0, 0x31, 0xC0, 0x31, 0xC0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x20, - 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, - 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x42, 0x80, 0x42, 0x80, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, - 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, - 0x4A, 0xE0, 0x4A, 0xC0, 0x52, 0xC0, 0x5B, 0x40, 0x53, 0x00, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, - 0x4A, 0xE0, 0x5B, 0x20, 0x53, 0x00, 0x5B, 0x20, 0x5B, 0x00, 0x6B, 0xA1, 0x4A, 0xC0, 0x42, 0x80, - 0x42, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x42, 0x60, 0x42, 0x60, 0x52, 0xC0, 0x6B, 0x85, 0x7B, 0xE9, - 0x52, 0xC3, 0x31, 0xC0, 0x29, 0x80, 0x31, 0xC0, 0x31, 0xE0, 0x31, 0xC0, 0x3A, 0x00, 0x3A, 0x00, - 0x31, 0xC0, 0x29, 0xA0, 0x31, 0xA0, 0x31, 0xA0, 0x21, 0x60, 0x21, 0x60, 0x19, 0x00, 0x21, 0x20, - 0x3A, 0x20, 0x52, 0xE0, 0x5A, 0xE0, 0x5A, 0xE0, 0x5B, 0x00, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, - 0x52, 0xC0, 0x52, 0xE0, 0x4A, 0xA0, 0x4A, 0x60, 0x39, 0xC0, 0x49, 0xC0, 0x6A, 0xA4, 0x5A, 0x80, - 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x00, 0x5A, 0xE0, - 0x3A, 0x40, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x40, 0x21, 0x40, 0x21, 0x20, 0x19, 0x20, 0x21, 0x20, - 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x60, 0x21, 0x60, 0x29, 0x80, - 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x31, 0xE0, 0x52, 0x80, 0x4A, 0x60, 0x4A, 0x80, - 0x42, 0x40, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x61, 0x29, 0xA1, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, - 0x29, 0xA0, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xE0, 0x32, 0x00, 0x32, 0x00, - 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x20, 0x3A, 0x20, 0x3A, 0x20, - 0x3A, 0x40, 0x3A, 0x60, 0x42, 0x80, 0x42, 0x80, 0x42, 0xA0, 0x42, 0xA0, 0x4A, 0xC0, 0x4A, 0xC0, - 0x4A, 0xC0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xC0, - 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x52, 0xE0, 0x63, 0x40, 0x52, 0xE0, 0x52, 0xC0, 0x4A, 0xC0, - 0x4A, 0xC0, 0x53, 0x00, 0x5B, 0x41, 0x53, 0x00, 0x53, 0x00, 0x5B, 0x20, 0x5B, 0x40, 0x42, 0x80, - 0x42, 0x60, 0x42, 0x40, 0x42, 0x20, 0x42, 0x40, 0x42, 0x60, 0x42, 0x60, 0x4A, 0xA0, 0x5B, 0x01, - 0x4A, 0x81, 0x29, 0xA0, 0x29, 0xA0, 0x31, 0xC0, 0x31, 0xC0, 0x5A, 0xE4, 0x6B, 0x66, 0x42, 0x00, - 0x31, 0xC0, 0x31, 0xC0, 0x39, 0xE0, 0x52, 0x61, 0x42, 0x21, 0x21, 0x60, 0x21, 0x80, 0x29, 0xA0, - 0x3A, 0x00, 0x4A, 0xA0, 0x52, 0xC0, 0x52, 0xC0, 0x5A, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, - 0x5A, 0xE0, 0x52, 0xE0, 0x52, 0xC0, 0x4A, 0x80, 0x31, 0xA0, 0x41, 0xA0, 0x6A, 0x84, 0x5A, 0x41, - 0x5A, 0xE0, 0x5A, 0xE0, 0x5A, 0xE0, 0x5A, 0xE0, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x00, 0x52, 0xC0, - 0x31, 0xE0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x60, 0x21, 0x40, 0x21, 0x40, 0x19, 0x00, 0x21, 0x20, - 0x21, 0x20, 0x21, 0x20, 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x60, - 0x21, 0x41, 0x21, 0x40, 0x21, 0x80, 0x19, 0x40, 0x21, 0x80, 0x31, 0xE0, 0x4A, 0x60, 0x4A, 0x60, - 0x4A, 0x60, 0x42, 0x40, 0x3A, 0x20, 0x3A, 0x80, 0x29, 0xC0, 0x19, 0x60, 0x21, 0x60, 0x21, 0x60, - 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x31, 0xC0, 0x31, 0xE0, - 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x3A, 0x20, 0x3A, 0x20, - 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x80, 0x42, 0x80, 0x42, 0xA0, 0x42, 0xA0, 0x4A, 0xC0, 0x4A, 0xC0, - 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xC0, 0x4A, 0xC0, - 0x4A, 0xA0, 0x42, 0xA0, 0x42, 0xC0, 0x4A, 0xA0, 0x52, 0xC0, 0x63, 0x41, 0x5B, 0x00, 0x53, 0x01, - 0x53, 0x00, 0x4A, 0xE0, 0x4A, 0xC0, 0x52, 0xE0, 0x52, 0xE0, 0x5B, 0x20, 0x5B, 0x40, 0x3A, 0x60, - 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x40, 0x42, 0x60, 0x3A, 0x40, 0x42, 0x60, 0x52, 0xC0, - 0x4A, 0xA0, 0x31, 0xE0, 0x29, 0xA0, 0x31, 0xE0, 0x39, 0xC0, 0x52, 0x82, 0x52, 0x82, 0x42, 0x00, - 0x31, 0xC0, 0x39, 0xE0, 0x5A, 0xC2, 0x83, 0xE7, 0x73, 0x86, 0x29, 0xC0, 0x21, 0xA0, 0x29, 0xA0, - 0x31, 0xC0, 0x3A, 0x40, 0x4A, 0xA0, 0x52, 0xA0, 0x52, 0xC0, 0x5A, 0xE0, 0x52, 0xC0, 0x52, 0xE0, - 0x52, 0xE0, 0x52, 0xC0, 0x52, 0xA0, 0x4A, 0xA0, 0x29, 0x80, 0x39, 0x40, 0x62, 0x22, 0x72, 0x64, - 0x52, 0xC0, 0x5A, 0xE0, 0x52, 0xE0, 0x5A, 0xE0, 0x5A, 0xE0, 0x5B, 0x20, 0x63, 0x20, 0x52, 0xA0, - 0x31, 0xE0, 0x29, 0xC0, 0x29, 0x80, 0x29, 0x80, 0x21, 0x60, 0x21, 0x40, 0x19, 0x20, 0x19, 0x20, - 0x19, 0x20, 0x19, 0x20, 0x21, 0x20, 0x21, 0x20, 0x21, 0x20, 0x19, 0x20, 0x21, 0x40, 0x21, 0x40, - 0x19, 0x40, 0x21, 0x40, 0x19, 0x20, 0x21, 0x40, 0x19, 0x20, 0x21, 0x40, 0x31, 0xE0, 0x4A, 0x40, - 0x4A, 0x40, 0x42, 0x60, 0x42, 0x40, 0x3A, 0x40, 0x3A, 0x20, 0x19, 0x20, 0x19, 0x20, 0x21, 0x41, - 0x19, 0x20, 0x19, 0x40, 0x19, 0x40, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x20, 0x32, 0x20, - 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x42, 0x80, 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xC0, 0x4A, 0xC0, - 0x4A, 0xC0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xC0, 0x4A, 0xC0, 0x42, 0xA0, - 0x4A, 0xA0, 0x4A, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x4A, 0xA0, 0x5B, 0x20, 0x52, 0xE0, - 0x52, 0xE0, 0x52, 0xE0, 0x53, 0x00, 0x4A, 0xC0, 0x53, 0x00, 0x5B, 0x21, 0x5B, 0x60, 0x42, 0x60, - 0x42, 0x60, 0x3A, 0x40, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x42, 0x60, 0x4A, 0x80, - 0x4A, 0x80, 0x3A, 0x20, 0x31, 0xC0, 0x29, 0xA0, 0x31, 0xA0, 0x52, 0x82, 0x4A, 0x40, 0x4A, 0x20, - 0x39, 0xE0, 0x39, 0xA0, 0x63, 0x02, 0x8B, 0xC8, 0x6B, 0x46, 0x29, 0xA0, 0x21, 0x60, 0x21, 0xA0, - 0x29, 0xA0, 0x32, 0x00, 0x4A, 0x80, 0x4A, 0x80, 0x52, 0xC0, 0x52, 0xE0, 0x52, 0xC0, 0x52, 0xE0, - 0x52, 0xE0, 0x52, 0xC0, 0x52, 0xA0, 0x52, 0xE0, 0x29, 0x80, 0x29, 0x00, 0x59, 0xA1, 0x82, 0xC7, - 0x52, 0xA0, 0x5A, 0xE0, 0x5A, 0xC0, 0x5A, 0xE0, 0x5B, 0x00, 0x63, 0x40, 0x63, 0x41, 0x52, 0xA0, - 0x32, 0x00, 0x29, 0xC0, 0x29, 0x80, 0x29, 0xA0, 0x21, 0x60, 0x21, 0x40, 0x21, 0x20, 0x19, 0x00, - 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, - 0x11, 0x20, 0x19, 0x20, 0x21, 0x20, 0x19, 0x00, 0x19, 0x20, 0x19, 0x00, 0x19, 0x20, 0x3A, 0x01, - 0x42, 0x60, 0x4A, 0x60, 0x42, 0x40, 0x42, 0x00, 0x52, 0xC2, 0x21, 0x61, 0x10, 0xE0, 0x11, 0x00, - 0x19, 0x00, 0x19, 0x00, 0x19, 0x20, 0x19, 0x40, 0x21, 0x40, 0x21, 0x60, 0x21, 0x80, 0x29, 0xA0, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, - 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x80, 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xA0, 0x4A, 0xC0, - 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x42, 0xA0, - 0x42, 0xA0, 0x42, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x4A, 0xA0, 0x63, 0x20, - 0x53, 0x00, 0x53, 0x00, 0x53, 0x00, 0x53, 0x00, 0x53, 0x20, 0x5B, 0x21, 0x53, 0x00, 0x3A, 0x60, - 0x42, 0x40, 0x42, 0x40, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x20, 0x42, 0x40, 0x42, 0x60, 0x42, 0x80, - 0x4A, 0x80, 0x3A, 0x40, 0x32, 0x00, 0x31, 0xE0, 0x39, 0xC0, 0x52, 0xA1, 0x4A, 0x40, 0x42, 0x00, - 0x39, 0x80, 0x29, 0xC0, 0x4A, 0x40, 0x83, 0x87, 0x73, 0x66, 0x32, 0x00, 0x21, 0x60, 0x21, 0x60, - 0x21, 0xA0, 0x31, 0xE0, 0x42, 0x40, 0x4A, 0x80, 0x52, 0xA0, 0x52, 0xE0, 0x52, 0xE0, 0x4A, 0xC0, - 0x52, 0xC0, 0x52, 0xA0, 0x4A, 0x80, 0x4A, 0xC0, 0x39, 0xE0, 0x18, 0x80, 0x49, 0x62, 0x72, 0x43, - 0x62, 0x61, 0x53, 0x00, 0x5A, 0xE0, 0x5A, 0xE0, 0x63, 0x20, 0x73, 0x81, 0x6B, 0x83, 0x42, 0x61, - 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x40, 0x21, 0x20, 0x19, 0x00, - 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, - 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x11, 0x00, 0x19, 0x00, 0x19, 0x00, - 0x42, 0x40, 0x4A, 0x80, 0x42, 0x40, 0x4A, 0x80, 0x52, 0xC1, 0x63, 0x48, 0x10, 0xE0, 0x08, 0xC0, - 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x11, 0x00, 0x21, 0x20, 0x19, 0x20, 0x21, 0x60, 0x21, 0x80, - 0x21, 0x60, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x32, 0x00, 0x32, 0x00, - 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x42, 0x60, 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xA0, 0x4A, 0xC0, - 0x42, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xE0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x42, 0xA0, - 0x42, 0xA0, 0x42, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x40, 0x42, 0x60, 0x42, 0x60, - 0x5B, 0x60, 0x5B, 0x20, 0x5B, 0x00, 0x5B, 0x00, 0x53, 0x21, 0x5B, 0x41, 0x5B, 0x40, 0x3A, 0x40, - 0x42, 0x20, 0x42, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x42, 0x40, 0x42, 0x40, 0x42, 0x60, - 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, 0x39, 0xE0, 0x4A, 0x60, 0x42, 0x20, 0x39, 0xE0, - 0x31, 0xC0, 0x29, 0xA0, 0x39, 0xE0, 0x6B, 0x03, 0x7B, 0xA6, 0x42, 0x21, 0x19, 0x60, 0x21, 0x40, - 0x21, 0x60, 0x29, 0xA0, 0x3A, 0x20, 0x42, 0x60, 0x52, 0xA0, 0x52, 0xC0, 0x52, 0xC0, 0x4A, 0xC0, - 0x52, 0xC0, 0x5A, 0xC0, 0x4A, 0x80, 0x4A, 0xA0, 0x42, 0x40, 0x10, 0x40, 0x30, 0xC0, 0x7A, 0x64, - 0x6A, 0x83, 0x5A, 0xE0, 0x5B, 0x00, 0x5A, 0xE0, 0x6B, 0x40, 0x84, 0x04, 0x63, 0x62, 0x42, 0x41, - 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x60, 0x21, 0x20, 0x19, 0x00, - 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x18, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x18, 0xE0, 0x18, 0xE0, - 0x18, 0xE0, 0x18, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, - 0x21, 0x00, 0x42, 0x80, 0x4A, 0x81, 0x42, 0x40, 0x42, 0x40, 0x8C, 0x6A, 0x42, 0x46, 0x10, 0xE0, - 0x08, 0xA0, 0x10, 0xC0, 0x11, 0x00, 0x11, 0x00, 0x10, 0xE0, 0x19, 0x20, 0x21, 0x40, 0x19, 0x60, - 0x21, 0x60, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, 0x32, 0x00, - 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x42, 0x60, 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xA0, - 0x42, 0xC0, 0x42, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xA0, 0x42, 0xA0, - 0x42, 0xA0, 0x42, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, - 0x42, 0x81, 0x5B, 0x20, 0x5B, 0x00, 0x5B, 0x01, 0x53, 0x20, 0x5B, 0x40, 0x5B, 0x40, 0x3A, 0x40, - 0x4A, 0x20, 0x42, 0x20, 0x42, 0x20, 0x42, 0x40, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, - 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x20, 0x39, 0xE0, 0x3A, 0x00, 0x39, 0xE0, 0x31, 0xC0, - 0x29, 0xC0, 0x29, 0x80, 0x29, 0x60, 0x4A, 0x40, 0x7B, 0x45, 0x5A, 0xA4, 0x21, 0x81, 0x19, 0x20, - 0x21, 0x40, 0x29, 0x80, 0x3A, 0x00, 0x42, 0x60, 0x4A, 0xA0, 0x52, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, - 0x4A, 0xC0, 0x5A, 0xA0, 0x4A, 0x60, 0x42, 0x80, 0x4A, 0x80, 0x10, 0x60, 0x18, 0x20, 0x6A, 0x04, - 0x72, 0x64, 0x5A, 0xE0, 0x5B, 0x00, 0x63, 0x00, 0x83, 0xC3, 0x84, 0x06, 0x5B, 0x01, 0x3A, 0x00, - 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x60, 0x21, 0x40, 0x19, 0x00, - 0x19, 0x00, 0x19, 0x00, 0x18, 0xE0, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xE0, - 0x10, 0xC0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, - 0x10, 0xA0, 0x21, 0x40, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x80, 0x73, 0xA6, 0x84, 0x2C, 0x10, 0xE1, - 0x08, 0xA0, 0x10, 0xC0, 0x10, 0xE0, 0x11, 0x00, 0x10, 0xE0, 0x19, 0x20, 0x19, 0x40, 0x19, 0x60, - 0x21, 0x60, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, 0x32, 0x00, - 0x32, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x80, 0x42, 0xA0, 0x42, 0xA0, - 0x42, 0xA0, 0x42, 0xC0, 0x42, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xA0, 0x42, 0xA0, 0x42, 0xA0, - 0x42, 0xA0, 0x42, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x20, - 0x3A, 0x01, 0x3A, 0x40, 0x5B, 0x20, 0x52, 0xE0, 0x53, 0x20, 0x5B, 0x20, 0x6B, 0xA1, 0x3A, 0x40, - 0x4A, 0x20, 0x42, 0x20, 0x42, 0x20, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x80, - 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x32, 0x00, 0x31, 0xC0, - 0x29, 0xA0, 0x31, 0x81, 0x29, 0x80, 0x31, 0xC0, 0x5A, 0x83, 0x73, 0x26, 0x39, 0xE2, 0x19, 0x20, - 0x19, 0x20, 0x21, 0x60, 0x3A, 0x00, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0xC0, - 0x52, 0xC0, 0x52, 0xC0, 0x4A, 0x80, 0x42, 0x80, 0x4A, 0xA0, 0x29, 0x20, 0x10, 0x20, 0x41, 0x21, - 0x82, 0x45, 0x62, 0xA1, 0x5B, 0x00, 0x73, 0x61, 0x8C, 0x25, 0x73, 0xA4, 0x4A, 0xC1, 0x3A, 0x00, - 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x60, 0x21, 0x40, 0x19, 0x00, - 0x18, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, - 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x08, 0xC0, 0x08, 0xC0, 0x08, 0xC0, 0x08, 0xA0, 0x08, 0xA0, - 0x08, 0xA0, 0x08, 0x80, 0x29, 0xA0, 0x52, 0xC0, 0x4A, 0x60, 0x4A, 0x60, 0x84, 0x4B, 0x3A, 0x24, - 0x08, 0xA0, 0x10, 0xE0, 0x08, 0xC0, 0x11, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x40, 0x21, 0x60, - 0x21, 0x60, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, 0x32, 0x00, - 0x32, 0x00, 0x32, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x80, 0x42, 0x80, - 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xC0, 0x42, 0xC0, 0x4A, 0xC0, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, - 0x42, 0xA0, 0x42, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, - 0x32, 0x00, 0x32, 0x20, 0x3A, 0x40, 0x53, 0x00, 0x5B, 0x20, 0x63, 0x20, 0x63, 0x40, 0x3A, 0x40, - 0x4A, 0x60, 0x4A, 0x40, 0x42, 0x40, 0x42, 0x40, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x60, 0x42, 0x60, - 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, - 0x31, 0xE0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x31, 0xE0, 0x62, 0xC4, 0x52, 0x43, 0x21, 0x40, - 0x11, 0x00, 0x19, 0x20, 0x31, 0xA0, 0x42, 0x20, 0x4A, 0x80, 0x4A, 0x80, 0x42, 0x80, 0x4A, 0xA0, - 0x52, 0xE0, 0x52, 0xC0, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0xA0, 0x39, 0xC1, 0x10, 0x20, 0x28, 0xA0, - 0x82, 0x65, 0x62, 0x00, 0x6B, 0x60, 0x84, 0x23, 0x84, 0x05, 0x63, 0x43, 0x3A, 0x60, 0x32, 0x00, - 0x32, 0x00, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x40, 0x19, 0x20, 0x19, 0x00, - 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xA0, - 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0x80, 0x08, 0x80, - 0x08, 0xA0, 0x08, 0xA1, 0x10, 0xA0, 0x42, 0x40, 0x4A, 0xA0, 0x4A, 0x60, 0x63, 0x43, 0x7B, 0xEA, - 0x19, 0x00, 0x08, 0xC0, 0x10, 0xE0, 0x11, 0x00, 0x11, 0x00, 0x19, 0x00, 0x19, 0x40, 0x19, 0x60, - 0x21, 0x60, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, - 0x32, 0x00, 0x32, 0x00, 0x32, 0x20, 0x32, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x60, - 0x42, 0x80, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, - 0x42, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x20, - 0x3A, 0x20, 0x32, 0x00, 0x32, 0x00, 0x42, 0x60, 0x5B, 0x40, 0x63, 0x20, 0x7B, 0xC3, 0x52, 0xE2, - 0x4A, 0x80, 0x4A, 0x60, 0x42, 0x40, 0x42, 0x40, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x60, 0x3A, 0x60, - 0x3A, 0x60, 0x42, 0x60, 0x42, 0x80, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, - 0x42, 0x40, 0x32, 0x20, 0x32, 0x00, 0x32, 0x00, 0x29, 0xC0, 0x42, 0x00, 0x5A, 0x83, 0x39, 0xE1, - 0x19, 0x20, 0x18, 0xE0, 0x21, 0x60, 0x3A, 0x00, 0x42, 0x60, 0x4A, 0x80, 0x42, 0x80, 0x42, 0xA0, - 0x4A, 0xC0, 0x52, 0xC0, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0xA0, 0x42, 0x40, 0x10, 0x40, 0x28, 0xA1, - 0x7A, 0x66, 0x59, 0xA1, 0x83, 0xE3, 0x8C, 0x44, 0x7B, 0xA4, 0x53, 0x01, 0x3A, 0x20, 0x32, 0x00, - 0x32, 0x00, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xA0, 0x21, 0x60, 0x21, 0x40, 0x19, 0x20, 0x19, 0x00, - 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xA0, 0x10, 0xA0, - 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, - 0x08, 0x80, 0x08, 0x80, 0x08, 0x40, 0x19, 0x00, 0x4A, 0x80, 0x4A, 0x80, 0x42, 0x60, 0x73, 0xA7, - 0x42, 0x44, 0x08, 0xA0, 0x10, 0xC0, 0x11, 0x00, 0x10, 0xE0, 0x19, 0x20, 0x19, 0x40, 0x21, 0x60, - 0x21, 0x60, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, - 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, 0x3A, 0x40, 0x3A, 0x40, - 0x3A, 0x60, 0x3A, 0x80, 0x42, 0x80, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0x80, - 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, - 0x3A, 0x20, 0x32, 0x00, 0x31, 0xE0, 0x31, 0xE0, 0x3A, 0x60, 0x5B, 0x00, 0x6B, 0x40, 0x73, 0xC5, - 0x4A, 0xA0, 0x4A, 0x80, 0x4A, 0x60, 0x4A, 0x40, 0x42, 0x60, 0x42, 0x60, 0x42, 0x80, 0x42, 0x80, - 0x3A, 0x80, 0x42, 0x80, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0xC0, 0x4A, 0xC1, 0x4A, 0xA0, 0x4A, 0xC0, - 0x4A, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x3A, 0x40, 0x32, 0x00, 0x31, 0xA0, 0x42, 0x21, 0x42, 0x22, - 0x19, 0x40, 0x10, 0xE0, 0x21, 0x20, 0x31, 0xE0, 0x42, 0x60, 0x4A, 0x80, 0x42, 0x80, 0x42, 0xA0, - 0x4A, 0xA0, 0x4A, 0xA0, 0x42, 0x40, 0x42, 0x61, 0x52, 0xA0, 0x4A, 0xA0, 0x18, 0xA0, 0x20, 0x81, - 0x72, 0x88, 0x8A, 0xE9, 0x9C, 0x47, 0x8C, 0x25, 0x6B, 0x43, 0x42, 0xA0, 0x3A, 0x20, 0x32, 0x20, - 0x32, 0x00, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x40, 0x21, 0x20, 0x19, 0x00, - 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xA0, 0x10, 0xA0, 0x10, 0xA0, 0x10, 0xA0, 0x08, 0x80, - 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x80, 0x08, 0x60, - 0x08, 0x60, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x29, 0x61, 0x4A, 0xA0, 0x4A, 0x80, 0x4A, 0x60, - 0x5B, 0x04, 0x19, 0x20, 0x08, 0xC0, 0x11, 0x00, 0x11, 0x00, 0x19, 0x20, 0x19, 0x20, 0x21, 0x60, - 0x21, 0x60, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x32, 0x20, 0x32, 0x20, 0x3A, 0x20, - 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x80, 0x3A, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, - 0x42, 0x60, 0x42, 0x60, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x20, - 0x32, 0x00, 0x3A, 0x01, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x20, 0x4A, 0xA0, 0x63, 0x00, 0x84, 0x07, - 0x4A, 0xA0, 0x4A, 0x80, 0x4A, 0x60, 0x4A, 0x40, 0x4A, 0x40, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, - 0x3A, 0x80, 0x42, 0x80, 0x42, 0x60, 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xC1, 0x42, 0x80, 0x4A, 0xA0, - 0x42, 0xA0, 0x4A, 0xA0, 0x4A, 0xA0, 0x42, 0x60, 0x42, 0x40, 0x31, 0xC1, 0x19, 0x20, 0x29, 0x40, - 0x19, 0x00, 0x10, 0xC0, 0x19, 0x00, 0x31, 0xC0, 0x42, 0x60, 0x4A, 0x80, 0x42, 0x80, 0x4A, 0xA0, - 0x42, 0xA0, 0x4A, 0x80, 0x42, 0x40, 0x3A, 0x20, 0x4A, 0x40, 0x52, 0xA0, 0x18, 0xA0, 0x08, 0x00, - 0x20, 0x81, 0x8B, 0x0B, 0x73, 0x04, 0x7B, 0xC4, 0x52, 0xE1, 0x3A, 0x40, 0x31, 0xE0, 0x32, 0x00, - 0x32, 0x00, 0x31, 0xE0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x40, 0x21, 0x20, 0x19, 0x00, - 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xA0, 0x10, 0xA0, 0x10, 0xA0, 0x10, 0xA0, 0x08, 0xA0, 0x08, 0x80, - 0x08, 0x80, 0x08, 0x80, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, - 0x08, 0x60, 0x00, 0x60, 0x00, 0x80, 0x08, 0x80, 0x10, 0xA0, 0x42, 0x20, 0x4A, 0x80, 0x4A, 0x60, - 0x4A, 0xA0, 0x29, 0xA0, 0x10, 0xC0, 0x10, 0xE0, 0x19, 0x00, 0x19, 0x20, 0x19, 0x40, 0x19, 0x40, - 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x20, 0x32, 0x20, - 0x32, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x40, - 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, - 0x32, 0x00, 0x32, 0x00, 0x3A, 0x00, 0x3A, 0x20, 0x2A, 0x20, 0x5A, 0xE4, 0xC5, 0xEE, 0x94, 0x27, - 0x42, 0x40, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0x60, 0x42, 0x20, 0x42, 0x00, 0x42, 0x40, 0x42, 0x60, - 0x42, 0x40, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, - 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xA0, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x20, 0x21, 0x40, 0x10, 0xA0, - 0x10, 0xC0, 0x08, 0xC0, 0x19, 0x00, 0x31, 0xA0, 0x4A, 0x40, 0x4A, 0xA0, 0x42, 0xA0, 0x4A, 0xA0, - 0x4A, 0xA0, 0x42, 0x80, 0x39, 0xE0, 0x3A, 0x00, 0x4A, 0x60, 0x52, 0xA0, 0x31, 0xA0, 0x08, 0x01, - 0x18, 0x00, 0x82, 0xCA, 0x7A, 0x87, 0x6B, 0x22, 0x4A, 0x80, 0x32, 0x01, 0x39, 0xC0, 0x32, 0x20, - 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x60, 0x21, 0x20, 0x19, 0x00, - 0x19, 0x00, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, - 0x08, 0x80, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x00, 0x60, 0x08, 0x61, 0x08, 0x60, 0x08, 0x80, - 0x00, 0x80, 0x00, 0x60, 0x08, 0x80, 0x08, 0x80, 0x10, 0x80, 0x19, 0x00, 0x42, 0x61, 0x42, 0x80, - 0x42, 0x60, 0x4A, 0xA0, 0x18, 0xE1, 0x18, 0xE0, 0x19, 0x00, 0x19, 0x20, 0x19, 0x40, 0x21, 0x60, - 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x32, 0x20, - 0x32, 0x20, 0x32, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, - 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, - 0x32, 0x00, 0x3A, 0x20, 0x3A, 0x20, 0x32, 0x00, 0x3A, 0x40, 0x32, 0x41, 0x95, 0x30, 0xCF, 0x19, - 0x3A, 0x00, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0x60, 0x42, 0x20, 0x42, 0x00, 0x42, 0x40, 0x42, 0x60, - 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x80, - 0x3A, 0x60, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x42, 0x80, 0x3A, 0x40, 0x31, 0xC0, 0x19, 0x00, - 0x10, 0xA0, 0x08, 0xA0, 0x10, 0xE0, 0x29, 0x60, 0x42, 0x20, 0x4A, 0xA0, 0x42, 0xA0, 0x4A, 0xA0, - 0x4A, 0xA0, 0x42, 0x80, 0x39, 0xE0, 0x42, 0x00, 0x4A, 0x60, 0x5A, 0xE0, 0x52, 0x80, 0x08, 0x00, - 0x10, 0x20, 0x49, 0x22, 0x72, 0x26, 0x5A, 0x81, 0x32, 0x00, 0x32, 0x00, 0x3A, 0x00, 0x2A, 0x00, - 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x60, 0x21, 0x40, 0x19, 0x20, - 0x18, 0xE0, 0x18, 0xC0, 0x10, 0xC0, 0x10, 0xA0, 0x10, 0xA0, 0x08, 0xA0, 0x08, 0xA0, 0x00, 0x80, - 0x00, 0x60, 0x08, 0x60, 0x10, 0xC1, 0x08, 0xA0, 0x08, 0x80, 0x10, 0xE0, 0x10, 0xC0, 0x08, 0x60, - 0x08, 0x60, 0x08, 0x60, 0x08, 0x80, 0x08, 0xA0, 0x08, 0x80, 0x10, 0xA0, 0x29, 0x80, 0x42, 0x60, - 0x4A, 0x80, 0x42, 0x80, 0x29, 0x81, 0x19, 0x00, 0x19, 0x20, 0x19, 0x20, 0x19, 0x40, 0x21, 0x60, - 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, - 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x00, 0x32, 0x00, - 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, - 0x32, 0x20, 0x32, 0x00, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x32, 0x20, 0x3A, 0x62, 0x42, 0xA4, - 0x31, 0xA0, 0x42, 0x60, 0x4A, 0xA0, 0x4A, 0x60, 0x42, 0x20, 0x42, 0x20, 0x42, 0x40, 0x42, 0x60, - 0x42, 0x60, 0x42, 0x60, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, - 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x40, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x40, 0x21, 0x60, - 0x10, 0xA0, 0x08, 0xA0, 0x10, 0xA0, 0x29, 0x20, 0x3A, 0x00, 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xA0, - 0x4A, 0xA0, 0x4A, 0x80, 0x3A, 0x00, 0x42, 0x20, 0x52, 0x80, 0x5A, 0xC0, 0x6B, 0x40, 0x4A, 0x20, - 0x10, 0x60, 0x30, 0xA0, 0x71, 0xE4, 0x72, 0x84, 0x32, 0x00, 0x31, 0xE0, 0x29, 0xE0, 0x32, 0x00, - 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x60, 0x21, 0x40, 0x19, 0x20, - 0x19, 0x00, 0x10, 0xE0, 0x10, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0x80, - 0x08, 0x60, 0x08, 0x60, 0x18, 0xE0, 0x4A, 0x81, 0x52, 0x83, 0x52, 0xA1, 0x4A, 0x60, 0x4A, 0x60, - 0x31, 0x80, 0x10, 0xA0, 0x08, 0x80, 0x08, 0xA1, 0x00, 0xA0, 0x08, 0xC0, 0x19, 0x01, 0x42, 0x41, - 0x4A, 0x80, 0x4A, 0x80, 0x42, 0x61, 0x19, 0x00, 0x19, 0x40, 0x19, 0x40, 0x21, 0x60, 0x21, 0x60, - 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, - 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, - 0x3A, 0x20, 0x32, 0x00, 0x3A, 0x20, 0x32, 0x20, 0x32, 0x20, 0x3A, 0x60, 0x32, 0x20, 0x32, 0x40, - 0x29, 0x60, 0x42, 0x40, 0x4A, 0xC0, 0x4A, 0x80, 0x4A, 0x60, 0x42, 0x40, 0x42, 0x40, 0x42, 0x60, - 0x42, 0x80, 0x42, 0x80, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0x80, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x40, - 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x60, 0x42, 0x80, 0x31, 0xC0, - 0x10, 0xA0, 0x08, 0xA0, 0x10, 0x80, 0x21, 0x20, 0x3A, 0x00, 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xA0, - 0x4A, 0xC0, 0x4A, 0x80, 0x39, 0xE0, 0x42, 0x20, 0x52, 0x80, 0x63, 0x40, 0x73, 0xA0, 0x7B, 0xC1, - 0x42, 0x01, 0x20, 0x40, 0x61, 0x82, 0x82, 0xA7, 0x42, 0x01, 0x29, 0xC0, 0x32, 0x01, 0x31, 0xE0, - 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x29, 0x80, 0x21, 0x40, 0x21, 0x20, - 0x11, 0x00, 0x11, 0x00, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xA0, 0x08, 0x80, 0x08, 0x60, 0x08, 0x60, - 0x00, 0x80, 0x00, 0x61, 0x08, 0x80, 0x29, 0xA0, 0x39, 0xE0, 0x31, 0xC0, 0x3A, 0x00, 0x3A, 0x01, - 0x4A, 0x81, 0x4A, 0x81, 0x21, 0x40, 0x08, 0xA0, 0x10, 0xE0, 0x08, 0xA0, 0x10, 0xC0, 0x29, 0xA0, - 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0xC0, 0x21, 0x80, 0x19, 0x40, 0x19, 0x60, 0x21, 0x60, 0x21, 0x60, - 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x32, 0x00, - 0x32, 0x00, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x32, 0x20, 0x32, 0x20, 0x3A, 0x20, - 0x21, 0x40, 0x42, 0x20, 0x4A, 0xA0, 0x4A, 0x80, 0x4A, 0x60, 0x42, 0x60, 0x42, 0x40, 0x42, 0x40, - 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x60, 0x42, 0x60, 0x42, 0x80, - 0x42, 0x80, 0x42, 0x60, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x42, 0x80, 0x32, 0x00, - 0x10, 0xE0, 0x08, 0x80, 0x10, 0x80, 0x29, 0x40, 0x42, 0x20, 0x42, 0x60, 0x42, 0x80, 0x4A, 0xA0, - 0x4A, 0xA0, 0x31, 0xE0, 0x42, 0x02, 0x5A, 0xC3, 0x5A, 0xE0, 0x6B, 0x80, 0x73, 0xC0, 0x73, 0xA1, - 0x52, 0xE1, 0x10, 0x40, 0x49, 0x21, 0x8A, 0xA7, 0x5A, 0x22, 0x2A, 0x00, 0x32, 0x00, 0x31, 0xE0, - 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x60, 0x21, 0x40, - 0x21, 0x41, 0x19, 0x00, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x00, 0x80, - 0x08, 0x80, 0x08, 0x80, 0x08, 0x60, 0x21, 0x21, 0x32, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x21, - 0x42, 0x40, 0x4A, 0x80, 0x5B, 0x22, 0x39, 0xE2, 0x10, 0xC0, 0x10, 0xE0, 0x08, 0xA0, 0x19, 0x40, - 0x42, 0x61, 0x4A, 0xA0, 0x4A, 0xA0, 0x32, 0x00, 0x21, 0x60, 0x21, 0x80, 0x21, 0x60, 0x29, 0x80, - 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, 0x32, 0x00, - 0x32, 0x00, 0x3A, 0x20, 0x32, 0x20, 0x32, 0x40, 0x3A, 0x40, 0x32, 0x20, 0x3A, 0x20, 0x32, 0x00, - 0x21, 0x20, 0x3A, 0x00, 0x4A, 0xA0, 0x4A, 0x80, 0x42, 0x60, 0x42, 0x60, 0x42, 0x40, 0x42, 0x20, - 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, - 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xA0, 0x42, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x42, 0x60, 0x3A, 0x20, - 0x19, 0x00, 0x08, 0x80, 0x10, 0xA0, 0x31, 0x80, 0x42, 0x40, 0x42, 0x60, 0x42, 0x80, 0x4A, 0xA0, - 0x42, 0x80, 0x31, 0xC0, 0x52, 0x82, 0x6B, 0x63, 0x6B, 0x62, 0x63, 0x60, 0x6B, 0x80, 0x5B, 0x20, - 0x42, 0x80, 0x18, 0xA0, 0x28, 0xA1, 0x59, 0xA2, 0x8B, 0x07, 0x3A, 0x20, 0x31, 0xE0, 0x31, 0xE0, - 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x31, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0x80, 0x21, 0x60, - 0x21, 0x40, 0x19, 0x00, 0x18, 0xE0, 0x18, 0xE0, 0x18, 0xC0, 0x10, 0x80, 0x10, 0x80, 0x10, 0x60, - 0x08, 0x60, 0x08, 0x40, 0x08, 0x60, 0x10, 0xA0, 0x3A, 0x20, 0x4A, 0x81, 0x4A, 0xA0, 0x53, 0x00, - 0x5A, 0xE2, 0x63, 0x41, 0x52, 0xA1, 0x52, 0x81, 0x4A, 0x61, 0x18, 0xE0, 0x10, 0xC0, 0x10, 0xE0, - 0x31, 0xA0, 0x4A, 0xA0, 0x4A, 0xA0, 0x42, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, - 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, - 0x21, 0xA0, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x31, 0xE0, 0x32, 0x00, - 0x32, 0x00, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x32, 0x20, 0x3A, 0x20, 0x32, 0x20, 0x32, 0x00, - 0x19, 0x00, 0x31, 0xC0, 0x4A, 0x80, 0x4A, 0x80, 0x42, 0x60, 0x42, 0x60, 0x42, 0x40, 0x42, 0x20, - 0x42, 0x60, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, - 0x42, 0x60, 0x4A, 0xC0, 0x4A, 0xC0, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x40, - 0x19, 0x20, 0x08, 0x80, 0x10, 0xA0, 0x31, 0xA0, 0x42, 0x40, 0x42, 0x60, 0x42, 0x80, 0x4A, 0xA0, - 0x4A, 0xA0, 0x4A, 0x80, 0x5B, 0x00, 0x63, 0x40, 0x63, 0x61, 0x63, 0x40, 0x5B, 0x00, 0x42, 0x40, - 0x29, 0xE0, 0x29, 0x40, 0x10, 0x40, 0x39, 0x00, 0x82, 0x86, 0x52, 0x01, 0x32, 0x00, 0x32, 0x00, - 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x31, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0x80, - 0x21, 0x40, 0x21, 0x60, 0x31, 0xA1, 0x4A, 0x41, 0x63, 0x02, 0x73, 0x62, 0x6B, 0x22, 0x5A, 0xA2, - 0x42, 0x42, 0x18, 0xC0, 0x08, 0x60, 0x19, 0x00, 0x4A, 0xE1, 0x42, 0x80, 0x42, 0xA1, 0x4A, 0xC0, - 0x52, 0xC0, 0x6B, 0x83, 0x7C, 0x05, 0x4A, 0x40, 0x5A, 0xE2, 0x52, 0xE2, 0x21, 0x40, 0x10, 0xE0, - 0x19, 0x20, 0x4A, 0x80, 0x4A, 0xA0, 0x53, 0x00, 0x31, 0xC0, 0x21, 0x80, 0x29, 0xC0, 0x29, 0xA0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, - 0x32, 0x00, 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x00, 0x3A, 0x20, 0x32, 0x00, 0x32, 0x00, - 0x18, 0xE0, 0x29, 0x80, 0x4A, 0x60, 0x4A, 0x80, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0x60, 0x4A, 0x20, - 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x60, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, - 0x42, 0x60, 0x4B, 0x00, 0x4A, 0xC0, 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x40, - 0x21, 0x20, 0x08, 0x80, 0x10, 0xA0, 0x31, 0xA0, 0x42, 0x40, 0x42, 0x60, 0x42, 0x80, 0x42, 0x80, - 0x4A, 0xC1, 0x52, 0xE0, 0x5B, 0x20, 0x63, 0x40, 0x5B, 0x20, 0x52, 0xC0, 0x32, 0x00, 0x29, 0xA0, - 0x21, 0xA1, 0x31, 0xA0, 0x10, 0x60, 0x30, 0xC0, 0x72, 0x45, 0x7A, 0x85, 0x32, 0x20, 0x32, 0x00, - 0x32, 0x00, 0x32, 0x00, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xC0, 0x29, 0xA0, - 0x42, 0x00, 0x5A, 0xA1, 0x73, 0x62, 0x7B, 0xA2, 0x7B, 0x82, 0x7B, 0x83, 0x7B, 0xA3, 0x7B, 0xA3, - 0x7B, 0xA3, 0x6B, 0x23, 0x39, 0xC1, 0x4A, 0x81, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x4A, 0xA0, - 0x5B, 0x00, 0x63, 0x60, 0x7B, 0xE4, 0x4A, 0x60, 0x52, 0xA0, 0x63, 0x41, 0x52, 0xC1, 0x19, 0x00, - 0x19, 0x20, 0x42, 0x41, 0x4A, 0x80, 0x5B, 0x60, 0x42, 0x41, 0x29, 0xA0, 0x21, 0xC0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, - 0x31, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xE0, - 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x3A, 0x20, 0x3A, 0x21, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, - 0x19, 0x00, 0x21, 0x60, 0x42, 0x60, 0x4A, 0xA0, 0x42, 0x60, 0x42, 0x60, 0x4A, 0x60, 0x4A, 0x40, - 0x42, 0x20, 0x42, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, - 0x3A, 0x60, 0x42, 0x80, 0x42, 0x80, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x40, - 0x21, 0x61, 0x08, 0x60, 0x18, 0xE0, 0x29, 0xA0, 0x3A, 0x40, 0x42, 0x60, 0x42, 0x60, 0x4A, 0xA0, - 0x52, 0xC0, 0x53, 0x00, 0x5B, 0x00, 0x52, 0xC0, 0x42, 0x40, 0x29, 0xA0, 0x21, 0x60, 0x21, 0x60, - 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x00, 0x18, 0x60, 0x51, 0x42, 0x8B, 0x08, 0x42, 0x20, 0x3A, 0x00, - 0x3A, 0x00, 0x3A, 0x01, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x31, 0xC0, 0x39, 0xE0, 0x52, 0x80, - 0x73, 0x61, 0x73, 0xA2, 0x7B, 0xC2, 0x7B, 0xC3, 0x7B, 0xC4, 0x7B, 0xC4, 0x7B, 0xC3, 0x7B, 0xC3, - 0x7B, 0xC2, 0x73, 0x83, 0x5A, 0xE1, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x42, 0x60, 0x52, 0xC0, - 0x63, 0x00, 0x63, 0x60, 0x63, 0x63, 0x42, 0x40, 0x5A, 0xA0, 0x63, 0x00, 0x73, 0xA2, 0x4A, 0x60, - 0x21, 0x20, 0x3A, 0x21, 0x53, 0x42, 0xA5, 0xD3, 0x4B, 0x01, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, - 0x31, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, - 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x80, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, - 0x19, 0x00, 0x21, 0x40, 0x42, 0x40, 0x4A, 0xA0, 0x42, 0x60, 0x42, 0x80, 0x4A, 0x80, 0x4A, 0x60, - 0x4A, 0x20, 0x42, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, - 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x60, - 0x21, 0x60, 0x10, 0x80, 0x21, 0x00, 0x31, 0xC0, 0x3A, 0x20, 0x3A, 0x40, 0x42, 0x60, 0x4A, 0xA0, - 0x4A, 0xA0, 0x4A, 0x80, 0x42, 0x40, 0x31, 0xC0, 0x29, 0x60, 0x21, 0x40, 0x21, 0x60, 0x21, 0x80, - 0x21, 0x80, 0x31, 0xE1, 0x29, 0x80, 0x10, 0x40, 0x38, 0xA0, 0x8A, 0xE8, 0x5A, 0x22, 0x3A, 0x20, - 0x3A, 0x00, 0x31, 0xE0, 0x3A, 0x20, 0x32, 0x00, 0x3A, 0x20, 0x42, 0x40, 0x5B, 0x21, 0x73, 0x82, - 0x7B, 0xC3, 0x7B, 0xC3, 0x7B, 0xE4, 0x7B, 0xE4, 0x7B, 0xE4, 0x7B, 0xC3, 0x7B, 0xC2, 0x7B, 0xA1, - 0x73, 0xA2, 0x5B, 0x01, 0x4A, 0x80, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x40, 0x42, 0x80, 0x52, 0xE0, - 0x63, 0x00, 0x73, 0xC2, 0x4A, 0xC0, 0x4A, 0x60, 0x52, 0xC0, 0x63, 0x20, 0x73, 0x82, 0x73, 0xA4, - 0x21, 0xA0, 0x31, 0xC0, 0xA5, 0x2D, 0xDF, 0x3B, 0x53, 0x68, 0x21, 0xA0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, - 0x31, 0xE0, 0x31, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, - 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, - 0x19, 0x20, 0x21, 0x40, 0x42, 0x20, 0x4A, 0xA0, 0x42, 0x60, 0x42, 0x60, 0x4A, 0x60, 0x4A, 0x80, - 0x4A, 0x40, 0x42, 0x40, 0x42, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, - 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, - 0x31, 0xC0, 0x18, 0xE0, 0x29, 0x60, 0x39, 0xE0, 0x3A, 0x00, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x40, - 0x3A, 0x20, 0x31, 0xC0, 0x21, 0x60, 0x19, 0x00, 0x18, 0xE0, 0x19, 0x00, 0x19, 0x40, 0x21, 0x80, - 0x21, 0x60, 0x29, 0xA0, 0x29, 0xC0, 0x10, 0xC0, 0x18, 0x40, 0x69, 0xE4, 0x82, 0xC6, 0x3A, 0x00, - 0x32, 0x00, 0x3A, 0x40, 0x32, 0x00, 0x3A, 0x00, 0x4A, 0x80, 0x63, 0x41, 0x6B, 0x80, 0x6B, 0x60, - 0x7C, 0x04, 0x7C, 0x04, 0x7B, 0xE4, 0x7B, 0xE4, 0x7B, 0xC3, 0x7B, 0xC2, 0x7B, 0xC2, 0x7B, 0xC1, - 0x6B, 0x81, 0x4A, 0x80, 0x42, 0x60, 0x42, 0x80, 0x42, 0x80, 0x42, 0x40, 0x4A, 0x80, 0x4A, 0xA0, - 0x5B, 0x00, 0x6B, 0x81, 0x42, 0x40, 0x4A, 0x80, 0x5A, 0xE0, 0x63, 0x00, 0x6B, 0x62, 0x7C, 0x05, - 0x52, 0xC1, 0x21, 0x60, 0x42, 0xA6, 0x2A, 0x43, 0x21, 0xA1, 0x29, 0x60, 0x29, 0xC1, 0x21, 0xE0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, - 0x31, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, - 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, - 0x21, 0x40, 0x21, 0x40, 0x42, 0x20, 0x4A, 0xA0, 0x4A, 0x80, 0x42, 0x80, 0x42, 0x60, 0x4A, 0x80, - 0x4A, 0x80, 0x4A, 0x60, 0x42, 0x40, 0x42, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, - 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x80, 0x42, 0x80, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, - 0x42, 0x40, 0x21, 0x40, 0x31, 0x80, 0x3A, 0x20, 0x3A, 0x20, 0x31, 0xE0, 0x29, 0xC0, 0x29, 0x80, - 0x21, 0x40, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x20, 0x21, 0x40, 0x21, 0x60, - 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0x60, 0x10, 0x21, 0x40, 0xE0, 0x92, 0xE8, 0x52, 0x01, - 0x3A, 0x00, 0x32, 0x20, 0x3A, 0x40, 0x4A, 0x60, 0x63, 0x21, 0x63, 0x40, 0x6B, 0x80, 0x73, 0xC1, - 0x7C, 0x02, 0x7C, 0x03, 0x7B, 0xE3, 0x7B, 0xC2, 0x7B, 0xA2, 0x7B, 0xE2, 0x7B, 0xC2, 0x7B, 0xA2, - 0x63, 0x41, 0x42, 0x60, 0x42, 0x60, 0x42, 0x40, 0x42, 0x40, 0x3A, 0x20, 0x4A, 0x60, 0x4A, 0x60, - 0x5B, 0x00, 0x5B, 0x00, 0x4A, 0x60, 0x4A, 0x80, 0x52, 0xC0, 0x5A, 0xA0, 0x73, 0x84, 0x84, 0x05, - 0x6B, 0xA4, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0xA0, 0x19, 0xC0, 0x21, 0xA0, 0x29, 0xA0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xC0, 0x31, 0xE0, - 0x21, 0x60, 0x21, 0x40, 0x42, 0x20, 0x52, 0xA0, 0x4A, 0xA0, 0x4A, 0x80, 0x42, 0x60, 0x4A, 0x80, - 0x4A, 0x80, 0x4A, 0x80, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, - 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x42, 0x80, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, - 0x42, 0x80, 0x29, 0x80, 0x31, 0xC0, 0x42, 0x40, 0x3A, 0x20, 0x29, 0x80, 0x21, 0x40, 0x19, 0x00, - 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x19, 0x00, 0x19, 0x20, 0x19, 0x40, 0x21, 0x40, 0x21, 0x60, - 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x10, 0x40, 0x28, 0xA0, 0x72, 0x04, 0x72, 0x64, - 0x39, 0xE0, 0x32, 0x20, 0x42, 0x60, 0x63, 0x21, 0x63, 0x40, 0x6B, 0xA1, 0x6B, 0xA1, 0x7B, 0xE3, - 0x7B, 0xE2, 0x7C, 0x03, 0x7B, 0xE2, 0x7B, 0xC1, 0x7B, 0xA0, 0x7B, 0xC2, 0x7B, 0xC2, 0x73, 0x82, - 0x52, 0xC0, 0x42, 0x60, 0x42, 0x81, 0x42, 0x40, 0x42, 0x40, 0x42, 0x20, 0x42, 0x40, 0x4A, 0x60, - 0x5B, 0x00, 0x5B, 0x01, 0x4A, 0x60, 0x4A, 0x80, 0x5A, 0xE1, 0x6B, 0x03, 0x73, 0x84, 0x8C, 0x05, - 0x8C, 0x68, 0x42, 0x42, 0x21, 0x80, 0x21, 0xA1, 0x21, 0x80, 0x29, 0x80, 0x29, 0xA0, 0x21, 0xC1, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x31, 0xC0, - 0x21, 0x60, 0x21, 0x40, 0x42, 0x20, 0x52, 0xC0, 0x4A, 0xA0, 0x4A, 0x80, 0x42, 0x60, 0x42, 0x60, - 0x4A, 0x80, 0x4A, 0x80, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x60, 0x42, 0x60, - 0x3A, 0x40, 0x3A, 0x60, 0x3A, 0x60, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xC0, - 0x42, 0x60, 0x29, 0x80, 0x31, 0xE0, 0x42, 0x20, 0x31, 0xC0, 0x19, 0x20, 0x19, 0x00, 0x18, 0xE0, - 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x19, 0x20, 0x19, 0x20, 0x19, 0x40, 0x21, 0x60, 0x21, 0x60, - 0x21, 0x80, 0x29, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x00, 0x18, 0x60, 0x41, 0x41, 0x8A, 0xA7, - 0x42, 0x00, 0x4A, 0x80, 0x52, 0xE0, 0x5A, 0xE0, 0x6B, 0x81, 0x73, 0xC3, 0x73, 0xC3, 0x6B, 0x81, - 0x84, 0x04, 0x84, 0x03, 0x7B, 0xE2, 0x73, 0xA0, 0x7B, 0xC1, 0x7B, 0xC2, 0x7B, 0xC2, 0x7B, 0x82, - 0x4A, 0xA0, 0x42, 0x40, 0x42, 0x60, 0x3A, 0x40, 0x42, 0x60, 0x42, 0x40, 0x42, 0x40, 0x4A, 0x80, - 0x52, 0xC0, 0x52, 0xC0, 0x4A, 0x60, 0x5A, 0xA1, 0x73, 0x63, 0x7B, 0xC6, 0x8C, 0x07, 0x9C, 0x88, - 0x9C, 0xC9, 0x4A, 0x63, 0x21, 0xA0, 0x21, 0x81, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, - 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, - 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, - 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x31, 0xC0, - 0x19, 0x60, 0x21, 0x40, 0x42, 0x40, 0x52, 0xE0, 0x4A, 0xA0, 0x42, 0x60, 0x42, 0x40, 0x3A, 0x60, - 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x80, 0x42, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x42, 0x60, 0x42, 0x60, - 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0xA0, 0x42, 0xC0, 0x42, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, - 0x42, 0x80, 0x29, 0xA0, 0x29, 0x80, 0x31, 0xA0, 0x29, 0x60, 0x19, 0x00, 0x19, 0x00, 0x19, 0x20, - 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x40, 0x21, 0x60, 0x21, 0x60, - 0x21, 0x80, 0x21, 0x60, 0x29, 0x80, 0x29, 0xA0, 0x29, 0x80, 0x10, 0x60, 0x28, 0xC0, 0x69, 0xE4, - 0x62, 0x63, 0x62, 0xE1, 0x5B, 0x00, 0x5B, 0x00, 0x73, 0x82, 0x73, 0xC2, 0x73, 0xC2, 0x7B, 0xE2, - 0x84, 0x24, 0x84, 0x03, 0x83, 0xE2, 0x73, 0x81, 0x83, 0xE3, 0x7B, 0xA3, 0x73, 0x62, 0x73, 0x41, - 0x52, 0x80, 0x42, 0x20, 0x42, 0x00, 0x39, 0xE0, 0x42, 0x00, 0x42, 0x20, 0x42, 0x40, 0x4A, 0xA0, - 0x5A, 0xE0, 0x5B, 0x00, 0x5A, 0xE1, 0x62, 0xE2, 0x73, 0x63, 0x7B, 0x85, 0x8C, 0x07, 0x9C, 0x67, - 0xA4, 0xC9, 0x5B, 0x04, 0x29, 0xC0, 0x29, 0x80, 0x21, 0x60, 0x21, 0xC0, 0x21, 0xA0, 0x29, 0xA0, - 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, - 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xC0, 0x31, 0xE0, - 0x21, 0x80, 0x29, 0x81, 0x4A, 0x61, 0x5B, 0x01, 0x52, 0xC0, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x40, - 0x42, 0x80, 0x4A, 0x80, 0x4A, 0x80, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x60, 0x42, 0x60, 0x42, 0x60, - 0x4A, 0xA0, 0x42, 0xA0, 0x42, 0xA0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xE0, - 0x4A, 0xC0, 0x31, 0xA0, 0x21, 0x20, 0x21, 0x20, 0x21, 0x20, 0x19, 0x20, 0x19, 0x40, 0x19, 0x40, - 0x21, 0x20, 0x21, 0x40, 0x21, 0x40, 0x19, 0x40, 0x19, 0x40, 0x21, 0x40, 0x21, 0x60, 0x21, 0x60, - 0x21, 0x60, 0x21, 0xA1, 0x29, 0x81, 0x21, 0xA0, 0x29, 0xA0, 0x18, 0xC0, 0x10, 0x20, 0x38, 0xC0, - 0x72, 0x65, 0x62, 0xA0, 0x63, 0x40, 0x63, 0x20, 0x73, 0xC2, 0x73, 0xA1, 0x7B, 0xE2, 0x7B, 0xA1, - 0x7B, 0xE1, 0x7B, 0xC0, 0x7B, 0xA1, 0x73, 0x61, 0x83, 0xC4, 0x73, 0x23, 0x5A, 0xA1, 0x52, 0x60, - 0x52, 0x20, 0x4A, 0x00, 0x52, 0x21, 0x4A, 0x00, 0x4A, 0x00, 0x4A, 0x20, 0x4A, 0x40, 0x52, 0x80, - 0x52, 0xC0, 0x6B, 0x41, 0x62, 0xE1, 0x73, 0x63, 0x83, 0xC5, 0x8C, 0x07, 0x94, 0x27, 0x9C, 0x27, - 0x9C, 0x88, 0x52, 0xA3, 0x21, 0xA0, 0x29, 0xC0, 0x29, 0xC1, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, - 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, - 0x21, 0x60, 0x29, 0x80, 0x52, 0xA1, 0x63, 0x21, 0x52, 0xC1, 0x42, 0x60, 0x42, 0x60, 0x42, 0x80, - 0x42, 0x80, 0x4A, 0x80, 0x4A, 0x60, 0x42, 0x20, 0x3A, 0x40, 0x42, 0x60, 0x42, 0x80, 0x42, 0xA0, - 0x42, 0xC0, 0x42, 0xC0, 0x42, 0xC0, 0x42, 0xC0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, - 0x4A, 0xE0, 0x31, 0xE0, 0x21, 0x40, 0x19, 0x20, 0x19, 0x40, 0x19, 0x40, 0x21, 0x60, 0x21, 0x40, - 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x19, 0x40, 0x19, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, - 0x21, 0x60, 0x29, 0x80, 0x29, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x21, 0x60, 0x08, 0x20, 0x20, 0x61, - 0x51, 0x22, 0x62, 0x62, 0x6B, 0x01, 0x6B, 0x61, 0x73, 0xE3, 0x7B, 0xE3, 0x7B, 0xC2, 0x7C, 0x02, - 0x83, 0xE2, 0x8B, 0xC2, 0x73, 0x21, 0x62, 0xC1, 0x5A, 0x61, 0x62, 0x41, 0x6A, 0xA2, 0x4A, 0x40, - 0x42, 0x20, 0x4A, 0x40, 0x52, 0xA0, 0x5A, 0xE0, 0x5B, 0x00, 0x5B, 0x00, 0x5A, 0xC0, 0x5A, 0x60, - 0x5A, 0xE0, 0x7B, 0xE4, 0x63, 0x23, 0x73, 0x84, 0x84, 0x06, 0x8C, 0x07, 0x8C, 0x06, 0x9C, 0x69, - 0x84, 0x09, 0x3A, 0x00, 0x31, 0xE0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, - 0x21, 0x60, 0x29, 0x80, 0x4A, 0x80, 0x5B, 0x20, 0x52, 0xC0, 0x42, 0x60, 0x42, 0x60, 0x42, 0x80, - 0x42, 0x80, 0x4A, 0x80, 0x4A, 0x60, 0x42, 0x40, 0x42, 0x60, 0x42, 0x80, 0x42, 0x80, 0x42, 0xA0, - 0x42, 0xA0, 0x42, 0xA0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, - 0x4A, 0xC0, 0x29, 0xC0, 0x19, 0x20, 0x19, 0x20, 0x19, 0x40, 0x19, 0x40, 0x21, 0x60, 0x21, 0x60, - 0x21, 0x40, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, - 0x21, 0x80, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x10, 0x80, 0x18, 0x20, - 0x20, 0x60, 0x59, 0xC2, 0x51, 0xC1, 0x73, 0x43, 0x84, 0x05, 0x83, 0xC4, 0x7B, 0xA0, 0x72, 0xA2, - 0x62, 0x01, 0x62, 0x40, 0x72, 0xE1, 0x7B, 0x63, 0x8B, 0xE5, 0x83, 0xE5, 0x52, 0xA1, 0x3A, 0x01, - 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x4A, 0x60, 0x5A, 0xC0, 0x63, 0x00, - 0x63, 0x00, 0x7B, 0xC3, 0x94, 0xAA, 0x7B, 0xE7, 0x84, 0x07, 0x8C, 0x07, 0x94, 0x28, 0x94, 0x09, - 0x4A, 0xA2, 0x31, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x2A, 0x00, 0x29, 0xE0, 0x31, 0xE0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, - 0x21, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, - 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, - 0x21, 0x80, 0x29, 0x80, 0x4A, 0x60, 0x5B, 0x00, 0x4A, 0xA0, 0x42, 0x80, 0x42, 0x60, 0x42, 0x80, - 0x42, 0x80, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x80, 0x42, 0x80, 0x4A, 0xA0, - 0x42, 0xA0, 0x42, 0xA0, 0x4A, 0xA0, 0x4A, 0xC0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x52, 0xE0, - 0x4A, 0xE0, 0x29, 0xC0, 0x21, 0x40, 0x19, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x60, 0x21, 0x60, - 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, - 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, 0x21, 0xA0, 0x21, 0x80, 0x29, 0x80, 0x29, 0x20, 0x10, 0x00, - 0x18, 0x60, 0x10, 0x62, 0x20, 0x41, 0x51, 0xA3, 0x6A, 0xC3, 0x7A, 0xA4, 0x69, 0x82, 0x6A, 0x21, - 0x83, 0x40, 0x83, 0xE2, 0x7B, 0xC3, 0x7B, 0x43, 0x83, 0x63, 0x6B, 0x42, 0x42, 0x40, 0x3A, 0x00, - 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x20, 0x4A, 0x60, 0x52, 0xA0, - 0x5A, 0xC0, 0x63, 0x21, 0x84, 0x26, 0x84, 0x45, 0x7B, 0xE4, 0x8C, 0x26, 0x8C, 0x06, 0x8B, 0xE7, - 0x5B, 0x01, 0x4A, 0xC0, 0x42, 0x80, 0x32, 0x20, 0x32, 0x20, 0x32, 0x00, 0x31, 0xE0, 0x32, 0x00, - 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, - 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, - 0x21, 0x80, 0x29, 0x80, 0x42, 0x60, 0x52, 0xE0, 0x4A, 0xC0, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, - 0x42, 0x60, 0x42, 0x60, 0x42, 0x40, 0x42, 0x60, 0x4A, 0x80, 0x42, 0x80, 0x42, 0x80, 0x4A, 0xA0, - 0x42, 0xA0, 0x42, 0xA0, 0x4A, 0xC0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x52, 0xE0, - 0x4A, 0xE0, 0x29, 0xC0, 0x21, 0x40, 0x21, 0x40, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, - 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, - 0x21, 0x60, 0x21, 0x80, 0x21, 0x60, 0x29, 0xA0, 0x21, 0x80, 0x29, 0xA0, 0x39, 0xE0, 0x10, 0x40, - 0x18, 0x00, 0x28, 0x80, 0x10, 0x20, 0x18, 0x80, 0x49, 0x01, 0x61, 0xA1, 0x72, 0xE0, 0x83, 0xA3, - 0x73, 0x60, 0x73, 0x62, 0x73, 0x43, 0x83, 0x63, 0x73, 0x42, 0x4A, 0x80, 0x3A, 0x20, 0x4A, 0x20, - 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x20, 0x42, 0x20, - 0x41, 0xE0, 0x52, 0x80, 0x5B, 0x00, 0x63, 0x60, 0x63, 0x20, 0x63, 0x40, 0x6B, 0x60, 0x6B, 0x40, - 0x73, 0x60, 0x7B, 0xC0, 0x73, 0xC2, 0x42, 0x40, 0x3A, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x01, - 0x32, 0x00, 0x32, 0x00, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, - 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, - 0x21, 0x80, 0x29, 0x80, 0x3A, 0x40, 0x52, 0xE0, 0x4A, 0xE0, 0x4A, 0xA0, 0x42, 0x80, 0x42, 0x80, - 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0xA0, - 0x42, 0xA0, 0x42, 0xC0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, - 0x4A, 0xE0, 0x29, 0xC0, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x29, 0x80, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0x80, 0x29, 0x80, 0x21, 0x80, - 0x21, 0x80, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x31, 0xE0, 0x42, 0x20, 0x18, 0xC0, - 0x18, 0x20, 0x18, 0x40, 0x30, 0xE2, 0x41, 0xC1, 0x63, 0x20, 0x73, 0x80, 0x7B, 0x60, 0x7B, 0xC2, - 0x73, 0x62, 0x5A, 0x60, 0x7B, 0x23, 0x73, 0x42, 0x52, 0xC0, 0x3A, 0x40, 0x3A, 0x20, 0x42, 0x20, - 0x42, 0x40, 0x3A, 0x20, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x20, 0x42, 0x20, 0x42, 0x20, - 0x39, 0xE0, 0x42, 0x00, 0x52, 0xA0, 0x5A, 0xE0, 0x63, 0x21, 0x63, 0x20, 0x63, 0x40, 0x63, 0x40, - 0x73, 0x60, 0x73, 0x80, 0x73, 0xA1, 0x42, 0x40, 0x3A, 0x21, 0x3A, 0x40, 0x3A, 0x60, 0x32, 0x20, - 0x32, 0x20, 0x32, 0x20, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x31, 0xE0, - 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, - 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, - 0x21, 0x80, 0x21, 0x60, 0x3A, 0x00, 0x4A, 0xC0, 0x52, 0xE0, 0x4A, 0xC0, 0x42, 0xA0, 0x42, 0x80, - 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0xA0, - 0x4A, 0xA0, 0x4A, 0xC0, 0x4A, 0xE0, 0x4B, 0x00, 0x4B, 0x00, 0x4B, 0x00, 0x4A, 0xE0, 0x4A, 0xE0, - 0x42, 0xA0, 0x29, 0xA0, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x29, 0xA0, 0x29, 0x80, 0x29, 0xA0, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, 0x31, 0xC0, 0x3A, 0x20, 0x3A, 0x00, 0x21, 0x20, - 0x08, 0x20, 0x18, 0x61, 0x29, 0x00, 0x4A, 0x60, 0x63, 0x21, 0x6B, 0x41, 0x7B, 0x60, 0x7B, 0x40, - 0x73, 0x41, 0x73, 0x20, 0x8B, 0xC3, 0x62, 0xE0, 0x42, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, - 0x42, 0x20, 0x42, 0x20, 0x42, 0x20, 0x42, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x20, 0x42, 0x20, - 0x39, 0xE0, 0x39, 0xC0, 0x42, 0x20, 0x4A, 0x60, 0x52, 0xA0, 0x52, 0xE0, 0x63, 0x41, 0x6B, 0x61, - 0x5B, 0x20, 0x4A, 0xE0, 0x42, 0x80, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, - 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x32, 0x20, 0x32, 0x20, 0x32, 0x00, 0x32, 0x00, 0x31, 0xE0, - 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, - 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, - 0x21, 0x80, 0x21, 0x60, 0x31, 0xC0, 0x4A, 0x80, 0x52, 0xE0, 0x4A, 0xE0, 0x4A, 0xC0, 0x42, 0xA0, - 0x42, 0x60, 0x42, 0x60, 0x3A, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x80, - 0x4A, 0xA0, 0x4A, 0xC0, 0x4A, 0xE0, 0x53, 0x00, 0x53, 0x00, 0x52, 0xE0, 0x52, 0xE0, 0x4A, 0xE0, - 0x3A, 0x60, 0x29, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xC0, 0x29, 0xA0, - 0x21, 0xA0, 0x21, 0x60, 0x21, 0x80, 0x29, 0x80, 0x3A, 0x00, 0x42, 0x60, 0x3A, 0x00, 0x31, 0xA0, - 0x10, 0x01, 0x20, 0x60, 0x30, 0xE0, 0x52, 0x62, 0x63, 0x00, 0x63, 0x20, 0x7B, 0xC1, 0x6B, 0x40, - 0x6A, 0xE1, 0x73, 0x21, 0x6B, 0x21, 0x4A, 0x60, 0x42, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x20, - 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x40, 0x42, 0x20, 0x42, 0x20, - 0x42, 0x00, 0x42, 0x00, 0x4A, 0x40, 0x4A, 0x60, 0x5B, 0x00, 0x63, 0x40, 0x63, 0x42, 0x42, 0x40, - 0x3A, 0x60, 0x42, 0x80, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x40, - 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, 0x32, 0x20, 0x32, 0x00, 0x32, 0x00, - 0x31, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, - 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, - 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, - 0x21, 0x80, 0x21, 0x40, 0x29, 0x80, 0x42, 0x60, 0x4A, 0xC0, 0x4A, 0xE0, 0x4A, 0xC0, 0x4A, 0xA0, - 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x42, 0x60, 0x42, 0x40, 0x42, 0x40, 0x42, 0x40, 0x42, 0x60, - 0x42, 0x60, 0x4A, 0x80, 0x4A, 0xC0, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x4A, 0xC0, 0x4A, 0xA0, - 0x3A, 0x20, 0x21, 0x60, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xC0, - 0x29, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x32, 0x00, 0x31, 0xE0, 0x29, 0xC0, - 0x29, 0xA0, 0x29, 0xA1, 0x21, 0x80, 0x31, 0xE1, 0x42, 0x40, 0x42, 0x40, 0x42, 0x21, 0x31, 0xC0, - 0x18, 0xA0, 0x18, 0x40, 0x30, 0xA0, 0x51, 0xE1, 0x5A, 0xA0, 0x6B, 0x40, 0x83, 0xC2, 0x7B, 0x64, - 0x7B, 0x42, 0x6B, 0x01, 0x52, 0xC0, 0x3A, 0x20, 0x3A, 0x00, 0x42, 0x00, 0x42, 0x20, 0x3A, 0x20, - 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x41, 0x42, 0x20, 0x39, 0xE0, - 0x39, 0xE0, 0x42, 0x00, 0x42, 0x20, 0x42, 0x40, 0x52, 0xC0, 0x5B, 0x00, 0x52, 0xE1, 0x42, 0x60, - 0x42, 0x60, 0x42, 0x60, 0x42, 0x80, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x40, 0x42, 0x60, - 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, 0x32, 0x20, 0x32, 0x20, - 0x31, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, - 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, - 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, - 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x31, 0xE0, 0x42, 0xA0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, - 0x4A, 0xC0, 0x4A, 0xA0, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x40, 0x42, 0x40, 0x42, 0x60, 0x42, 0x60, - 0x42, 0x40, 0x42, 0x60, 0x42, 0x80, 0x4A, 0x80, 0x52, 0x60, 0x4A, 0x20, 0x42, 0x00, 0x32, 0x00, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x31, 0xC0, - 0x31, 0xE0, 0x3A, 0x00, 0x3A, 0x40, 0x42, 0x40, 0x42, 0x40, 0x3A, 0x20, 0x31, 0xE0, 0x29, 0xC0, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0x80, 0x3A, 0x00, 0x3A, 0x00, 0x42, 0x40, 0x3A, 0x00, 0x39, 0xC0, - 0x21, 0x00, 0x10, 0x01, 0x28, 0xA0, 0x49, 0x80, 0x5A, 0xA1, 0x62, 0xE1, 0x73, 0x61, 0x7B, 0x42, - 0x83, 0xA2, 0x63, 0x01, 0x42, 0x40, 0x31, 0xE0, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x20, - 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x42, 0x40, 0x41, 0xE0, - 0x39, 0xC0, 0x42, 0x20, 0x42, 0x40, 0x42, 0x40, 0x52, 0xA0, 0x5B, 0x00, 0x6B, 0x85, 0x4A, 0xA0, - 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0xA0, 0x42, 0x80, 0x3A, 0x80, 0x42, 0x80, 0x3A, 0x60, - 0x3A, 0x80, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x32, 0x21, - 0x32, 0x00, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xA0, 0x21, 0xA0, 0x29, 0xC0, - 0x29, 0xA0, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x21, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xE0, 0x29, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, - 0x19, 0x60, 0x21, 0x60, 0x21, 0x60, 0x29, 0xA0, 0x42, 0x60, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, - 0x4A, 0xC0, 0x4A, 0xA0, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x42, 0x60, 0x42, 0x60, - 0x42, 0x60, 0x3A, 0x60, 0x42, 0x80, 0x4A, 0x80, 0x4A, 0x40, 0x39, 0xA0, 0x29, 0x80, 0x21, 0xA0, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x31, 0xE0, 0x31, 0xE0, - 0x32, 0x00, 0x3A, 0x20, 0x42, 0x61, 0x42, 0x61, 0x42, 0x61, 0x3A, 0x40, 0x32, 0x00, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x3A, 0x20, 0x42, 0x20, 0x42, 0x40, 0x42, 0x20, 0x39, 0xE0, - 0x39, 0xC0, 0x10, 0x40, 0x28, 0x60, 0x51, 0x82, 0x62, 0xA1, 0x63, 0x00, 0x6A, 0xE1, 0x8B, 0xC4, - 0x73, 0x83, 0x4A, 0x60, 0x31, 0xE0, 0x32, 0x00, 0x31, 0xE0, 0x39, 0xE0, 0x3A, 0x00, 0x32, 0x00, - 0x3A, 0x00, 0x3A, 0x00, 0x42, 0x20, 0x3A, 0x00, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x00, 0x39, 0xC0, - 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x20, 0x42, 0x60, 0x42, 0x60, 0x63, 0x41, 0x7B, 0xE8, 0x4A, 0xC0, - 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, 0x42, 0x80, - 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x60, 0x3A, 0x60, 0x3A, 0x40, 0x32, 0x20, 0x32, 0x20, - 0x3A, 0x20, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x21, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0x60, - 0x21, 0x80, 0x29, 0xA0, 0x29, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, - 0x19, 0x40, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x32, 0x00, 0x4A, 0xA0, 0x4A, 0xE0, 0x4A, 0xC0, - 0x4A, 0xC0, 0x42, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x42, 0x40, 0x42, 0x60, 0x42, 0x40, - 0x3A, 0x40, 0x3A, 0x40, 0x42, 0x80, 0x42, 0x80, 0x4A, 0x40, 0x39, 0xA0, 0x29, 0x80, 0x21, 0xA1, - 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, - 0x32, 0x00, 0x3A, 0x40, 0x42, 0x81, 0x4A, 0xA2, 0x4A, 0x82, 0x42, 0x61, 0x3A, 0x00, 0x31, 0xE0, - 0x29, 0xC0, 0x29, 0xC0, 0x31, 0xE0, 0x3A, 0x00, 0x42, 0x40, 0x42, 0x40, 0x42, 0x40, 0x39, 0xE0, - 0x4A, 0x20, 0x10, 0x60, 0x18, 0x00, 0x49, 0x62, 0x72, 0x83, 0x6B, 0x20, 0x62, 0xC0, 0x73, 0x81, - 0x4A, 0x81, 0x31, 0xC0, 0x29, 0xC0, 0x32, 0x01, 0x31, 0xC0, 0x31, 0xE0, 0x3A, 0x00, 0x31, 0xE0, - 0x32, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x20, 0x3A, 0x20, 0x31, 0xC0, 0x31, 0xA0, - 0x31, 0xC0, 0x31, 0xE0, 0x3A, 0x00, 0x42, 0x60, 0x42, 0x60, 0x73, 0xC5, 0x7C, 0x2B, 0x63, 0x64, - 0x4A, 0xA0, 0x42, 0xA0, 0x42, 0x80, 0x4A, 0xA0, 0x4A, 0xA0, 0x42, 0xA0, 0x42, 0x80, 0x42, 0xA0, - 0x42, 0x80, 0x42, 0x60, 0x3A, 0x60, 0x3A, 0x80, 0x3A, 0x60, 0x3A, 0x60, 0x42, 0x40, 0x3A, 0x20, - 0x32, 0x20, 0x32, 0x00, 0x31, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x20, - 0x19, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x29, 0xC0, 0x3A, 0x40, 0x4A, 0xC0, 0x52, 0xE0, - 0x4A, 0xE1, 0x4A, 0xC0, 0x4A, 0xA0, 0x4A, 0xC0, 0x42, 0x80, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x20, - 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x42, 0x40, 0x4A, 0x60, 0x39, 0xE0, 0x29, 0xA0, 0x21, 0xA0, - 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, - 0x32, 0x00, 0x3A, 0x40, 0x4A, 0x81, 0x4A, 0xA3, 0x4A, 0xA3, 0x42, 0x61, 0x3A, 0x20, 0x31, 0xE0, - 0x29, 0xC0, 0x29, 0xC0, 0x31, 0xE0, 0x3A, 0x00, 0x42, 0x40, 0x4A, 0x60, 0x4A, 0x60, 0x42, 0x20, - 0x52, 0x40, 0x29, 0x21, 0x18, 0x60, 0x30, 0xA0, 0x61, 0x84, 0x6A, 0xA1, 0x63, 0x20, 0x4A, 0x81, - 0x29, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x31, 0xC0, 0x31, 0xC0, 0x31, 0xC0, 0x31, 0xE0, 0x31, 0xE0, - 0x31, 0xE0, 0x31, 0xE0, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x20, 0x31, 0xA0, 0x39, 0xC0, - 0x39, 0xE0, 0x3A, 0x01, 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x40, 0x7C, 0x28, 0x73, 0xC9, 0x73, 0xE6, - 0x4A, 0xA0, 0x42, 0xA0, 0x42, 0x80, 0x4A, 0xA0, 0x4A, 0xA0, 0x42, 0x80, 0x42, 0xA0, 0x42, 0xA0, - 0x42, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x42, 0x60, 0x42, 0x60, 0x52, 0xC0, 0x63, 0x60, 0x73, 0xA2, - 0x73, 0xA1, 0x73, 0xC2, 0x52, 0xE1, 0x3A, 0x40, 0x3A, 0x21, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0x80, - 0x21, 0x80, 0x21, 0x60, 0x21, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x32, 0x20, - 0x19, 0x60, 0x19, 0x40, 0x21, 0x60, 0x21, 0x60, 0x29, 0x80, 0x31, 0xE0, 0x42, 0x80, 0x53, 0x00, - 0x53, 0x00, 0x4A, 0xC0, 0x4A, 0xA0, 0x4A, 0xA0, 0x42, 0x60, 0x42, 0x60, 0x42, 0x80, 0x42, 0x60, - 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x42, 0x40, 0x4A, 0x60, 0x3A, 0x00, 0x29, 0xA0, 0x21, 0xA0, - 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, - 0x31, 0xE0, 0x3A, 0x40, 0x42, 0x82, 0x4A, 0xA3, 0x4A, 0xA3, 0x42, 0x62, 0x3A, 0x20, 0x31, 0xE0, - 0x29, 0xC0, 0x31, 0xC0, 0x31, 0xE0, 0x3A, 0x20, 0x42, 0x20, 0x4A, 0x60, 0x52, 0x80, 0x52, 0x60, - 0x52, 0x60, 0x31, 0x40, 0x10, 0x61, 0x20, 0x40, 0x61, 0xA5, 0x6A, 0x62, 0x52, 0xC0, 0x29, 0x81, - 0x29, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x31, 0xC0, 0x31, 0xC0, 0x29, 0xA0, 0x31, 0xE0, - 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x3A, 0x00, 0x39, 0xE0, 0x29, 0x80, 0x31, 0xC0, - 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x20, 0x3A, 0x20, 0x52, 0xC1, 0x84, 0x4A, 0x7B, 0xE9, 0x74, 0x07, - 0x4A, 0xE1, 0x42, 0xA0, 0x4A, 0xC0, 0x4A, 0xA0, 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xA0, 0x42, 0xA0, - 0x3A, 0x80, 0x42, 0xA0, 0x52, 0xE0, 0x6B, 0x81, 0x7C, 0x03, 0x8C, 0x64, 0x94, 0xA5, 0x8C, 0x85, - 0x8C, 0x66, 0x9C, 0xC7, 0x9C, 0xC7, 0x9C, 0xA6, 0x94, 0xA6, 0x84, 0x25, 0x6B, 0xA5, 0x3A, 0x40, - 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0xC0, - 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, 0x32, 0x00, - 0x19, 0x60, 0x19, 0x40, 0x19, 0x40, 0x21, 0x60, 0x21, 0x80, 0x29, 0x80, 0x3A, 0x00, 0x4A, 0xA0, - 0x53, 0x00, 0x53, 0x00, 0x4A, 0xC0, 0x42, 0x80, 0x42, 0x60, 0x42, 0x40, 0x42, 0x60, 0x42, 0x80, - 0x3A, 0x20, 0x3A, 0x40, 0x42, 0x60, 0x42, 0x60, 0x4A, 0x61, 0x39, 0xE0, 0x29, 0xA0, 0x29, 0xA0, - 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, - 0x31, 0xE0, 0x3A, 0x20, 0x42, 0x82, 0x4A, 0xA3, 0x4A, 0xA3, 0x42, 0x62, 0x3A, 0x20, 0x31, 0xE0, - 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xC0, 0x3A, 0x00, 0x3A, 0x00, 0x4A, 0x60, 0x52, 0x80, 0x52, 0x80, - 0x52, 0x61, 0x49, 0xC1, 0x08, 0x40, 0x18, 0x40, 0x38, 0xC0, 0x6A, 0x44, 0x39, 0xC0, 0x29, 0x60, - 0x29, 0x80, 0x29, 0x80, 0x29, 0x80, 0x29, 0xA0, 0x31, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, - 0x31, 0xC0, 0x31, 0xC0, 0x31, 0xE0, 0x31, 0xE0, 0x39, 0xE0, 0x31, 0xC0, 0x29, 0x80, 0x39, 0xE0, - 0x3A, 0x00, 0x3A, 0x00, 0x31, 0xE0, 0x3A, 0x40, 0x73, 0xC6, 0x8C, 0x4B, 0x84, 0x49, 0x7C, 0x28, - 0x53, 0x02, 0x42, 0x60, 0x42, 0xA0, 0x42, 0xA0, 0x42, 0xA0, 0x4A, 0xC0, 0x42, 0x80, 0x4A, 0xA0, - 0x52, 0xE1, 0x63, 0x40, 0x73, 0xC0, 0x84, 0x41, 0x8C, 0x63, 0x84, 0x45, 0x84, 0x65, 0x7C, 0x44, - 0x8C, 0x46, 0x94, 0x66, 0x94, 0xA8, 0x9C, 0xC8, 0xA5, 0x09, 0xB5, 0x4A, 0xC5, 0xCD, 0xA4, 0xA8, - 0x6B, 0x24, 0x39, 0xE0, 0x29, 0x80, 0x21, 0x80, 0x19, 0xA0, 0x19, 0x80, 0x21, 0xC0, 0x21, 0x80, - 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xE0, 0x32, 0x00, - 0x19, 0x40, 0x19, 0x60, 0x19, 0x40, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x29, 0xC0, 0x3A, 0x20, - 0x4A, 0xC0, 0x53, 0x00, 0x53, 0x00, 0x4A, 0xC0, 0x4A, 0x80, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, - 0x42, 0x60, 0x42, 0x80, 0x42, 0xA0, 0x42, 0x60, 0x3A, 0x20, 0x29, 0xA0, 0x21, 0x80, 0x29, 0xA0, - 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, - 0x29, 0xC0, 0x32, 0x00, 0x42, 0x61, 0x4A, 0x83, 0x4A, 0xA3, 0x42, 0x61, 0x3A, 0x20, 0x31, 0xE0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x3A, 0x00, 0x3A, 0x00, 0x4A, 0x40, 0x52, 0x60, 0x52, 0x80, - 0x52, 0x60, 0x5A, 0x81, 0x4A, 0x42, 0x18, 0x60, 0x28, 0x80, 0x61, 0xC5, 0x51, 0xC4, 0x29, 0x80, - 0x21, 0x60, 0x29, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xA0, - 0x29, 0xA0, 0x29, 0xC0, 0x31, 0xC0, 0x31, 0xE0, 0x39, 0xE0, 0x31, 0xA0, 0x31, 0xA0, 0x39, 0xE0, - 0x3A, 0x00, 0x3A, 0x20, 0x32, 0x00, 0x4A, 0xA3, 0x7B, 0xE8, 0x7B, 0xE9, 0x7C, 0x09, 0x84, 0x29, - 0x5B, 0x21, 0x4A, 0xC0, 0x42, 0x80, 0x42, 0x80, 0x4A, 0xC0, 0x4A, 0xA0, 0x4A, 0x80, 0x52, 0xE0, - 0x63, 0x40, 0x6B, 0xA0, 0x73, 0xC0, 0x7C, 0x02, 0x7C, 0x23, 0x7C, 0x04, 0x7C, 0x24, 0x74, 0x21, - 0x84, 0x25, 0x84, 0x46, 0x94, 0x67, 0x94, 0x48, 0x9C, 0x88, 0xAC, 0xEA, 0xB5, 0x4B, 0xB5, 0x4B, - 0xC5, 0xAC, 0xC5, 0xCD, 0x8C, 0x69, 0x3A, 0x01, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x60, 0x29, 0x80, - 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, - 0x19, 0x40, 0x21, 0x60, 0x19, 0x60, 0x19, 0x40, 0x21, 0x61, 0x21, 0x80, 0x21, 0x80, 0x29, 0xC0, - 0x32, 0x00, 0x4A, 0xA0, 0x53, 0x00, 0x5B, 0x20, 0x53, 0x00, 0x52, 0xC0, 0x4A, 0xA0, 0x4A, 0xA0, - 0x42, 0x60, 0x42, 0x80, 0x42, 0xA0, 0x32, 0x20, 0x29, 0xC0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, - 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, - 0x29, 0xC0, 0x32, 0x00, 0x42, 0x41, 0x4A, 0x83, 0x4A, 0x82, 0x42, 0x61, 0x3A, 0x20, 0x29, 0xE0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x32, 0x00, 0x3A, 0x00, 0x4A, 0x40, 0x52, 0x80, 0x5A, 0xA0, - 0x62, 0xA0, 0x4A, 0x20, 0x5A, 0x60, 0x18, 0x81, 0x18, 0x40, 0x49, 0x81, 0x61, 0xE4, 0x29, 0xC0, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, - 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x31, 0xC0, 0x31, 0xC0, 0x31, 0x60, 0x31, 0x80, 0x39, 0xE0, - 0x39, 0xE0, 0x3A, 0x00, 0x4A, 0xA1, 0x73, 0xC8, 0x7C, 0x09, 0x7B, 0xE9, 0x7B, 0xE8, 0x7C, 0x08, - 0x63, 0x82, 0x73, 0xC3, 0x53, 0x01, 0x42, 0x80, 0x42, 0xA0, 0x4A, 0xA0, 0x63, 0x21, 0x6B, 0x81, - 0x63, 0x60, 0x6B, 0xC0, 0x6B, 0xC0, 0x73, 0xE1, 0x7C, 0x02, 0x7C, 0x03, 0x7C, 0x24, 0x84, 0x06, - 0x84, 0x26, 0x84, 0x26, 0x94, 0x87, 0x94, 0x87, 0x94, 0x86, 0xA4, 0xE8, 0x9C, 0xC7, 0xAD, 0x29, - 0xBD, 0xAC, 0xCE, 0x0E, 0xD6, 0x2E, 0xB5, 0x2B, 0x9C, 0x89, 0x52, 0x83, 0x21, 0x80, 0x19, 0x81, - 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, - 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, - 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, - 0x29, 0xA0, 0x32, 0x00, 0x4A, 0xA0, 0x63, 0x60, 0x6B, 0xA0, 0x5B, 0x40, 0x4A, 0xC0, 0x4A, 0xA0, - 0x4A, 0xA0, 0x42, 0xA0, 0x3A, 0x20, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x21, 0xA0, 0x29, 0xA0, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, - 0x29, 0xA0, 0x31, 0xE0, 0x42, 0x41, 0x4A, 0x82, 0x4A, 0x63, 0x42, 0x61, 0x3A, 0x20, 0x29, 0xE0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x31, 0xC0, 0x3A, 0x00, 0x42, 0x00, 0x4A, 0x40, 0x62, 0xC0, - 0x5A, 0xA0, 0x5A, 0x20, 0x41, 0xC0, 0x29, 0x20, 0x18, 0x20, 0x31, 0x01, 0x6A, 0x45, 0x5A, 0x03, - 0x21, 0x80, 0x21, 0x80, 0x29, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0x80, 0x31, 0x80, 0x21, 0xA0, - 0x21, 0xA0, 0x29, 0xA0, 0x31, 0xC0, 0x29, 0xC0, 0x39, 0xA0, 0x39, 0x60, 0x31, 0xC0, 0x39, 0xE0, - 0x39, 0xE0, 0x3A, 0x21, 0x63, 0x66, 0x73, 0xE9, 0x7C, 0x0A, 0x7C, 0x09, 0x7C, 0x08, 0x4A, 0xC2, - 0x5B, 0x00, 0x73, 0xC2, 0x63, 0x81, 0x63, 0x82, 0x5B, 0x20, 0x6B, 0x62, 0x73, 0xC2, 0x6B, 0x81, - 0x73, 0xA0, 0x6B, 0x80, 0x73, 0xC0, 0x7B, 0xE0, 0x73, 0xC1, 0x84, 0x04, 0x7B, 0xE4, 0x7C, 0x04, - 0x7B, 0xE2, 0x7B, 0xE2, 0x7B, 0xE2, 0x84, 0x03, 0x84, 0x44, 0x94, 0x85, 0x94, 0x86, 0x9C, 0xA7, - 0xAD, 0x29, 0xBD, 0x6A, 0xC5, 0x8B, 0xCD, 0xED, 0xDE, 0x72, 0xC5, 0xEF, 0x9C, 0xC9, 0x52, 0xA1, - 0x21, 0x80, 0x19, 0x61, 0x19, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, - 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, - 0x21, 0x80, 0x29, 0xA0, 0x32, 0x00, 0x4A, 0xA0, 0x52, 0xE1, 0x4A, 0xC0, 0x3A, 0x40, 0x3A, 0x20, - 0x3A, 0x40, 0x3A, 0x40, 0x32, 0x00, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, - 0x21, 0xA0, 0x31, 0xE0, 0x3A, 0x41, 0x42, 0x62, 0x42, 0x62, 0x42, 0x41, 0x32, 0x00, 0x29, 0xC0, - 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x31, 0x80, 0x42, 0x00, 0x5A, 0x80, - 0x5A, 0xA1, 0x41, 0xC0, 0x31, 0x81, 0x29, 0x41, 0x10, 0x40, 0x20, 0x60, 0x51, 0x41, 0x6A, 0x64, - 0x39, 0xA1, 0x29, 0xA0, 0x29, 0x60, 0x21, 0x40, 0x21, 0xA0, 0x21, 0x60, 0x29, 0xA0, 0x21, 0xA0, - 0x29, 0xA1, 0x19, 0x80, 0x29, 0xA0, 0x31, 0xA0, 0x52, 0x21, 0x32, 0x00, 0x31, 0xC0, 0x3A, 0x41, - 0x4A, 0x82, 0x5B, 0x04, 0x63, 0x25, 0x7B, 0xC7, 0x84, 0x07, 0x94, 0x68, 0x9C, 0xEA, 0x84, 0x28, - 0x6B, 0x83, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xE0, 0x52, 0xE0, 0x63, 0x82, 0x6B, 0xA1, - 0x6B, 0xA0, 0x6B, 0x80, 0x73, 0xC0, 0x7C, 0x02, 0x73, 0xC1, 0x6B, 0xA0, 0x6B, 0xA0, 0x6B, 0xA0, - 0x6B, 0xC0, 0x6B, 0xC0, 0x6B, 0xA0, 0x6B, 0xC1, 0x74, 0x02, 0x84, 0x44, 0x84, 0x65, 0x8C, 0xA7, - 0x94, 0x86, 0x9C, 0xC6, 0xA4, 0xE6, 0xBD, 0x6B, 0xD6, 0x32, 0xD6, 0x32, 0xDE, 0x71, 0xD6, 0x51, - 0x7B, 0xC5, 0x42, 0x41, 0x29, 0x80, 0x21, 0xA0, 0x29, 0xC0, 0x29, 0xA0, 0x21, 0xA0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, - 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, - 0x29, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x32, 0x00, 0x31, 0xE0, 0x29, 0xC0, 0x29, 0xC0, - 0x31, 0xE0, 0x31, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, - 0x29, 0xA0, 0x31, 0xE0, 0x3A, 0x21, 0x42, 0x62, 0x42, 0x62, 0x3A, 0x41, 0x32, 0x00, 0x29, 0xC0, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0x81, 0x21, 0x81, 0x29, 0x80, 0x39, 0xE0, 0x52, 0x81, - 0x5A, 0x61, 0x4A, 0x21, 0x29, 0x80, 0x21, 0x60, 0x10, 0x60, 0x18, 0x40, 0x40, 0xC0, 0x59, 0xA2, - 0x62, 0x66, 0x39, 0xE2, 0x29, 0x80, 0x29, 0x80, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, - 0x21, 0x80, 0x29, 0xC0, 0x29, 0xA0, 0x52, 0x20, 0x42, 0x20, 0x29, 0xC0, 0x31, 0xE0, 0x29, 0xC0, - 0x32, 0x00, 0x42, 0x60, 0x73, 0xC4, 0x8C, 0x26, 0x9C, 0x87, 0xA4, 0xC9, 0xA4, 0xEA, 0x9C, 0xC9, - 0x7C, 0x06, 0x4A, 0x80, 0x4A, 0xA0, 0x42, 0xA0, 0x42, 0x80, 0x42, 0x80, 0x4A, 0xC0, 0x52, 0xE0, - 0x6B, 0xC1, 0x7C, 0x01, 0x6B, 0x80, 0x6B, 0x60, 0x6B, 0x80, 0x6B, 0xA0, 0x6B, 0xA0, 0x6B, 0x60, - 0x6B, 0x80, 0x6B, 0xA0, 0x6B, 0xA0, 0x73, 0xC0, 0x73, 0xE1, 0x7C, 0x23, 0x7C, 0x03, 0x84, 0x24, - 0x8C, 0x65, 0x8C, 0x64, 0x94, 0x64, 0xA4, 0xE8, 0xC5, 0xEE, 0xC5, 0xED, 0xC5, 0xEC, 0xCD, 0xEE, - 0xC5, 0xCC, 0xBD, 0xAB, 0x84, 0x07, 0x42, 0x61, 0x21, 0x80, 0x29, 0xC0, 0x29, 0xE0, 0x21, 0x80, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, - 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, - 0x21, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, - 0x29, 0xA0, 0x31, 0xE0, 0x3A, 0x21, 0x42, 0x42, 0x42, 0x62, 0x3A, 0x41, 0x31, 0xE0, 0x29, 0xA0, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x29, 0x80, 0x31, 0xE0, - 0x5A, 0x20, 0x52, 0x41, 0x21, 0x60, 0x21, 0x80, 0x10, 0xA1, 0x10, 0x20, 0x20, 0x80, 0x30, 0xC0, - 0x30, 0xC0, 0x39, 0xC2, 0x21, 0x80, 0x29, 0xA0, 0x29, 0x80, 0x29, 0x80, 0x29, 0x80, 0x29, 0xA1, - 0x21, 0xA0, 0x29, 0x80, 0x52, 0x20, 0x52, 0xC2, 0x21, 0xC0, 0x29, 0xE0, 0x29, 0xA0, 0x32, 0x00, - 0x32, 0x00, 0x52, 0xC2, 0x6B, 0x84, 0x6B, 0x42, 0x7B, 0xA3, 0x7B, 0xC4, 0x84, 0x26, 0x8C, 0x27, - 0x5B, 0x02, 0x52, 0xA1, 0x42, 0x60, 0x4A, 0x80, 0x42, 0x60, 0x4A, 0xA1, 0x42, 0x80, 0x4A, 0xA0, - 0x52, 0xC0, 0x73, 0xA2, 0x6B, 0x40, 0x6B, 0x80, 0x63, 0x60, 0x63, 0x60, 0x63, 0x60, 0x6B, 0x60, - 0x6B, 0x80, 0x6B, 0x80, 0x6B, 0xA0, 0x6B, 0xA0, 0x6B, 0xC1, 0x74, 0x02, 0x7C, 0x03, 0x7C, 0x24, - 0x8C, 0x45, 0x94, 0x65, 0x94, 0x85, 0x94, 0xA6, 0xAD, 0x49, 0xB5, 0x8A, 0xB5, 0x8A, 0xBD, 0x8B, - 0xC5, 0xCC, 0xC5, 0xEB, 0xC6, 0x0D, 0xC5, 0xEE, 0x73, 0xE6, 0x29, 0xC0, 0x21, 0x80, 0x29, 0xC1, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, - 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0xA0, - 0x21, 0x80, 0x31, 0xC0, 0x3A, 0x20, 0x42, 0x42, 0x42, 0x42, 0x3A, 0x21, 0x31, 0xE0, 0x21, 0xA0, - 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x19, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, - 0x51, 0xE0, 0x39, 0xA0, 0x21, 0x40, 0x21, 0x60, 0x08, 0x60, 0x08, 0x00, 0x08, 0x00, 0x18, 0x61, - 0x41, 0x22, 0x49, 0x62, 0x29, 0xC0, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x29, 0x80, 0x21, 0xA0, - 0x29, 0xA0, 0x39, 0xA0, 0x5A, 0x80, 0x29, 0xE0, 0x21, 0xC1, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xC0, - 0x42, 0x20, 0x42, 0x61, 0x52, 0xC2, 0x52, 0xC1, 0x42, 0x80, 0x5B, 0x22, 0x63, 0x43, 0x63, 0x23, - 0x4A, 0x80, 0x52, 0x80, 0x4A, 0x40, 0x4A, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x60, 0x42, 0x80, - 0x52, 0xA0, 0x63, 0x00, 0x7B, 0xC1, 0x73, 0x80, 0x6B, 0x60, 0x6B, 0x81, 0x6B, 0x81, 0x6B, 0x80, - 0x6B, 0x60, 0x6B, 0x60, 0x6B, 0x80, 0x6B, 0x80, 0x73, 0xA1, 0x73, 0xC1, 0x7B, 0xE2, 0x7C, 0x03, - 0x84, 0x25, 0x84, 0x45, 0x8C, 0x86, 0x8C, 0x85, 0x9C, 0xE7, 0xAD, 0x2A, 0xAD, 0x4B, 0xB5, 0x4A, - 0xB5, 0x8A, 0xB5, 0x8A, 0xC5, 0xCC, 0xCE, 0x2F, 0xD6, 0x6F, 0x7B, 0xE5, 0x29, 0xA0, 0x21, 0x81, - 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, - 0x21, 0x80, 0x29, 0xC0, 0x3A, 0x00, 0x42, 0x22, 0x42, 0x42, 0x3A, 0x21, 0x31, 0xC0, 0x21, 0x80, - 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x60, 0x21, 0x40, 0x21, 0x40, - 0x62, 0x62, 0x39, 0xC1, 0x29, 0x80, 0x21, 0x60, 0x10, 0x60, 0x10, 0x20, 0x18, 0x40, 0x30, 0xC1, - 0x40, 0xE1, 0x49, 0x01, 0x39, 0xC1, 0x21, 0xA0, 0x21, 0x80, 0x21, 0xE0, 0x29, 0xA0, 0x29, 0xE0, - 0x39, 0xA0, 0x62, 0xA1, 0x2A, 0x00, 0x29, 0xC1, 0x29, 0xC0, 0x29, 0xA0, 0x31, 0xE0, 0x31, 0xE0, - 0x39, 0xE0, 0x39, 0xE0, 0x31, 0xE0, 0x3A, 0x20, 0x32, 0x20, 0x32, 0x20, 0x42, 0x40, 0x4A, 0x60, - 0x4A, 0x60, 0x4A, 0x40, 0x52, 0x80, 0x52, 0x80, 0x52, 0x80, 0x52, 0x80, 0x52, 0x80, 0x52, 0xA0, - 0x5A, 0xA0, 0x62, 0xE0, 0x73, 0x82, 0x7B, 0xC1, 0x7B, 0x82, 0x9C, 0x87, 0x7B, 0xC2, 0x73, 0xA0, - 0x7B, 0xA0, 0x7B, 0xA0, 0x7B, 0xC1, 0x7B, 0xE2, 0x84, 0x03, 0x84, 0x04, 0x83, 0xE4, 0x8C, 0x05, - 0x8C, 0x66, 0x84, 0x46, 0x8C, 0x66, 0x84, 0x64, 0x8C, 0xA4, 0xA5, 0x28, 0xAD, 0x2A, 0xAD, 0x49, - 0xAD, 0x6A, 0xAD, 0x6A, 0xBD, 0xCC, 0xCE, 0x0F, 0xDE, 0x90, 0xA5, 0x09, 0x31, 0xC0, 0x21, 0x80, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, - 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, - 0x31, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, - 0x21, 0x80, 0x29, 0xC0, 0x31, 0xE0, 0x3A, 0x22, 0x42, 0x42, 0x3A, 0x22, 0x29, 0xC0, 0x21, 0x60, - 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x21, 0x20, - 0x72, 0xC3, 0x39, 0xE1, 0x19, 0x40, 0x21, 0x60, 0x18, 0xA0, 0x18, 0x00, 0x28, 0x80, 0x41, 0x00, - 0x51, 0x21, 0x6A, 0x45, 0x49, 0xC2, 0x29, 0x80, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x31, 0xA0, - 0x5A, 0x61, 0x42, 0x40, 0x29, 0xC0, 0x32, 0x00, 0x4A, 0x61, 0x29, 0xC0, 0x31, 0xC0, 0x29, 0xE0, - 0x3A, 0x00, 0x31, 0xA0, 0x42, 0x21, 0x39, 0xE0, 0x32, 0x00, 0x3A, 0x40, 0x42, 0x40, 0x42, 0x40, - 0x4A, 0x40, 0x4A, 0x40, 0x5A, 0x80, 0x5A, 0xA0, 0x52, 0x60, 0x5A, 0x80, 0x5A, 0x80, 0x5A, 0x80, - 0x5A, 0xA0, 0x62, 0xC1, 0x5A, 0xC0, 0x6B, 0x20, 0x7B, 0x83, 0x73, 0x41, 0x73, 0x82, 0x63, 0x40, - 0x63, 0x40, 0x5B, 0x20, 0x63, 0x40, 0x5B, 0x20, 0x63, 0x60, 0x6B, 0x81, 0x73, 0xA1, 0x7B, 0xE2, - 0x7B, 0xC2, 0x84, 0x04, 0x8C, 0x86, 0x84, 0x63, 0x84, 0x41, 0x8C, 0xA3, 0x9C, 0xE7, 0xA5, 0x28, - 0xB5, 0x4A, 0xB5, 0x8A, 0xBD, 0xEB, 0xC6, 0x0E, 0xD6, 0x50, 0xDE, 0x70, 0x7B, 0xE6, 0x21, 0x80, - 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xA0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x31, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, - 0x21, 0x80, 0x29, 0xA0, 0x31, 0xE0, 0x3A, 0x22, 0x42, 0x22, 0x3A, 0x02, 0x29, 0xC0, 0x21, 0x60, - 0x19, 0x20, 0x19, 0x00, 0x11, 0x00, 0x11, 0x00, 0x10, 0xE0, 0x10, 0xE0, 0x19, 0x00, 0x19, 0x20, - 0x7A, 0xA2, 0x4A, 0x01, 0x21, 0x40, 0x21, 0x60, 0x18, 0xA1, 0x18, 0x20, 0x30, 0xC1, 0x49, 0x00, - 0x61, 0xC3, 0x51, 0xC3, 0x5A, 0x24, 0x31, 0xA0, 0x29, 0xA0, 0x29, 0x80, 0x31, 0xC0, 0x62, 0x42, - 0x52, 0x60, 0x3A, 0x00, 0x63, 0x02, 0x63, 0x02, 0x3A, 0x01, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, - 0x3A, 0x00, 0x42, 0x20, 0x41, 0xE0, 0x4A, 0x20, 0x42, 0x20, 0x42, 0x20, 0x42, 0x40, 0x4A, 0x40, - 0x4A, 0x60, 0x52, 0x60, 0x52, 0x80, 0x5A, 0x80, 0x5A, 0x80, 0x5A, 0x60, 0x5A, 0x81, 0x5A, 0x60, - 0x5A, 0x60, 0x5A, 0xA0, 0x5A, 0xE0, 0x73, 0x81, 0x7B, 0xA0, 0x83, 0xA0, 0x73, 0x80, 0x6B, 0x60, - 0x63, 0x60, 0x63, 0x20, 0x63, 0x40, 0x5B, 0x20, 0x63, 0x40, 0x63, 0x40, 0x63, 0x60, 0x6B, 0xA0, - 0x63, 0x80, 0x63, 0x60, 0x6B, 0x80, 0x73, 0xC0, 0x7C, 0x01, 0x8C, 0x44, 0x94, 0x47, 0x9C, 0x88, - 0x9C, 0x46, 0xB5, 0x6A, 0xB5, 0xCC, 0xBE, 0x0D, 0xD6, 0x2F, 0xDE, 0x6F, 0xBD, 0xCC, 0x39, 0xE1, - 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, - 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, - 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x60, - 0x21, 0x60, 0x21, 0xA0, 0x31, 0xE0, 0x3A, 0x22, 0x3A, 0x22, 0x3A, 0x02, 0x29, 0xA1, 0x21, 0x40, - 0x19, 0x00, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xE0, 0x11, 0x00, - 0x62, 0x40, 0x52, 0x20, 0x21, 0x21, 0x19, 0x40, 0x18, 0xC0, 0x20, 0x61, 0x28, 0x60, 0x41, 0x41, - 0x59, 0xE3, 0x49, 0x62, 0x41, 0xA2, 0x5A, 0x45, 0x41, 0xE3, 0x49, 0xC2, 0x71, 0xE3, 0x6A, 0x63, - 0x4A, 0x60, 0x52, 0x81, 0x31, 0xC1, 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xE0, 0x31, 0xE1, - 0x42, 0x00, 0x4A, 0x40, 0x42, 0x20, 0x42, 0x20, 0x42, 0x21, 0x4A, 0x00, 0x52, 0x60, 0x42, 0x60, - 0x4A, 0x41, 0x4A, 0x20, 0x52, 0x60, 0x5A, 0x61, 0x62, 0x80, 0x6A, 0xC0, 0x5A, 0x80, 0x5A, 0x81, - 0x5A, 0xA0, 0x5A, 0xA0, 0x63, 0x20, 0x73, 0x80, 0x6B, 0x40, 0x73, 0x40, 0x7B, 0x60, 0x7B, 0x60, - 0x6B, 0x60, 0x63, 0x40, 0x63, 0x40, 0x63, 0x20, 0x63, 0x40, 0x5B, 0x40, 0x5B, 0x60, 0x63, 0x80, - 0x6B, 0x80, 0x6B, 0x80, 0x6B, 0x80, 0x6B, 0xA0, 0x63, 0x80, 0x6B, 0x80, 0x73, 0xC1, 0x7C, 0x02, - 0x8B, 0xE1, 0xAD, 0x07, 0xBD, 0xAC, 0xBD, 0xED, 0xCE, 0x4E, 0xDE, 0x91, 0xDE, 0x92, 0x8C, 0x47, - 0x21, 0x80, 0x29, 0x60, 0x21, 0x60, 0x21, 0xC0, 0x29, 0xA0, 0x29, 0xC0, 0x32, 0x00, 0x31, 0xE0, - 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, - 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, - 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x60, - 0x21, 0x60, 0x21, 0x80, 0x31, 0xC0, 0x3A, 0x02, 0x3A, 0x02, 0x31, 0xE2, 0x29, 0xA1, 0x19, 0x20, - 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xC0, 0x08, 0xC0, 0x08, 0xC0, 0x08, 0xC0, 0x10, 0xC0, 0x10, 0xE0, - 0x49, 0xA0, 0x5A, 0x01, 0x19, 0x20, 0x19, 0x40, 0x10, 0xA0, 0x20, 0xA0, 0x41, 0x62, 0x62, 0x44, - 0x51, 0xC3, 0x30, 0xC0, 0x30, 0xC0, 0x39, 0x02, 0x59, 0x84, 0x61, 0xC2, 0x49, 0xC0, 0x4A, 0x20, - 0x31, 0xE0, 0x31, 0xC0, 0x21, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xE0, 0x31, 0xE0, 0x32, 0x00, - 0x39, 0xA0, 0x41, 0xA0, 0x49, 0xE0, 0x42, 0x00, 0x39, 0xE0, 0x39, 0xE0, 0x4A, 0x00, 0x49, 0xE0, - 0x5A, 0x40, 0x5A, 0x60, 0x62, 0x60, 0x62, 0x80, 0x62, 0x80, 0x62, 0xC0, 0x5A, 0xA0, 0x5A, 0xC0, - 0x5A, 0xC0, 0x5A, 0xE0, 0x63, 0x40, 0x6B, 0x80, 0x6B, 0x60, 0x6B, 0x40, 0x6B, 0x20, 0x6B, 0x40, - 0x6B, 0x40, 0x6B, 0x40, 0x63, 0x40, 0x5B, 0x20, 0x5B, 0x20, 0x63, 0x40, 0x63, 0x40, 0x5B, 0x60, - 0x6B, 0xA0, 0x6B, 0x80, 0x6B, 0xA0, 0x6B, 0xC0, 0x6B, 0xA0, 0x6B, 0xA0, 0x6B, 0x80, 0x6B, 0x80, - 0x73, 0x61, 0x84, 0x43, 0x94, 0xC7, 0xAD, 0x69, 0xCE, 0x4E, 0xDE, 0x71, 0xDE, 0x6F, 0xC5, 0xCC, - 0x3A, 0x41, 0x29, 0x81, 0x21, 0x60, 0x21, 0xA0, 0x29, 0xC0, 0x31, 0xE0, 0x29, 0xE0, 0x29, 0xE0, - 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0xA0, - 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, - 0x21, 0x60, 0x21, 0x80, 0x31, 0xC0, 0x39, 0xE2, 0x39, 0xE2, 0x31, 0xC2, 0x29, 0x81, 0x19, 0x00, - 0x10, 0xC0, 0x08, 0xC0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xA0, 0x10, 0xC0, - 0x31, 0x60, 0x72, 0x42, 0x21, 0x60, 0x11, 0x00, 0x10, 0xA0, 0x18, 0x20, 0x28, 0xA0, 0x51, 0xA2, - 0x31, 0x00, 0x30, 0xE1, 0x20, 0x80, 0x28, 0xA1, 0x31, 0x41, 0x29, 0xC0, 0x29, 0xA0, 0x31, 0xA0, - 0x29, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x29, 0xE0, 0x3A, 0x00, 0x3A, 0x41, 0x42, 0x20, 0x4A, 0x00, - 0x51, 0xE0, 0x51, 0xE0, 0x5A, 0x00, 0x5A, 0x20, 0x52, 0x00, 0x5A, 0x40, 0x5A, 0x41, 0x6A, 0x41, - 0x62, 0x80, 0x62, 0x60, 0x62, 0x60, 0x62, 0x80, 0x5A, 0x80, 0x62, 0xE0, 0x6B, 0x21, 0x5A, 0xC0, - 0x52, 0xC0, 0x63, 0x20, 0x6B, 0x60, 0x6B, 0x80, 0x6B, 0x80, 0x63, 0x60, 0x63, 0x40, 0x63, 0x40, - 0x6B, 0x60, 0x73, 0x60, 0x73, 0x60, 0x63, 0x60, 0x5B, 0x60, 0x63, 0x60, 0x6B, 0x60, 0x63, 0x80, - 0x6B, 0x80, 0x6B, 0x80, 0x6B, 0xA0, 0x6B, 0xC0, 0x6B, 0xA0, 0x6B, 0xA0, 0x6B, 0x80, 0x6B, 0x60, - 0x6B, 0x60, 0x7C, 0x41, 0x8C, 0xA4, 0x94, 0xC5, 0xB5, 0x6A, 0xDE, 0x51, 0xDE, 0x4F, 0xD6, 0x0D, - 0x63, 0x44, 0x21, 0x60, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xE0, 0x2A, 0x00, - 0x21, 0x80, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, - 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, - 0x21, 0x60, 0x21, 0x80, 0x29, 0xA0, 0x39, 0xE2, 0x39, 0xE2, 0x31, 0xC2, 0x29, 0x61, 0x19, 0x00, - 0x08, 0xC0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xC0, - 0x10, 0xC0, 0x59, 0xC0, 0x49, 0xE2, 0x19, 0x20, 0x18, 0xE1, 0x10, 0x20, 0x20, 0x80, 0x49, 0x61, - 0x38, 0xE0, 0x28, 0xC1, 0x08, 0x00, 0x28, 0x40, 0x51, 0xA3, 0x31, 0xC0, 0x29, 0xA0, 0x21, 0xC1, - 0x29, 0xC0, 0x32, 0x00, 0x4A, 0x80, 0x6B, 0x02, 0x7B, 0x22, 0x6A, 0xC0, 0x72, 0xA0, 0x62, 0x80, - 0x92, 0xC3, 0x82, 0xE2, 0x5A, 0x60, 0x5A, 0x20, 0x62, 0x01, 0x52, 0x20, 0x4A, 0x20, 0x52, 0x40, - 0x5A, 0xA0, 0x62, 0xC1, 0x62, 0xA0, 0x62, 0xC0, 0x62, 0xE0, 0x5A, 0xC0, 0x5A, 0xA0, 0x52, 0xA0, - 0x4A, 0x61, 0x4A, 0xA0, 0x63, 0x40, 0x6B, 0xA0, 0x6B, 0x80, 0x63, 0x60, 0x6B, 0x80, 0x63, 0x60, - 0x63, 0x20, 0x6B, 0x40, 0x73, 0x40, 0x6B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x63, 0x40, - 0x63, 0x60, 0x63, 0x80, 0x6B, 0xA0, 0x6B, 0xA0, 0x63, 0x80, 0x63, 0xA0, 0x6B, 0xA0, 0x6B, 0xA0, - 0x7B, 0xE0, 0x7C, 0x20, 0x84, 0x63, 0x8C, 0xA5, 0xA5, 0x27, 0xC5, 0xED, 0xD6, 0x50, 0xDE, 0x71, - 0xB5, 0x4B, 0x31, 0xE0, 0x21, 0x80, 0x29, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x31, 0xC0, 0x2A, 0x00, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, - 0x21, 0x60, 0x21, 0x60, 0x31, 0xA0, 0x39, 0xE2, 0x39, 0xE3, 0x39, 0xC2, 0x29, 0x61, 0x18, 0xE0, - 0x08, 0xA0, 0x08, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0xC0, - 0x10, 0xA0, 0x49, 0xC2, 0x6A, 0x44, 0x19, 0x00, 0x10, 0xC0, 0x10, 0x40, 0x20, 0x80, 0x49, 0x60, - 0x41, 0x20, 0x30, 0xC1, 0x18, 0x21, 0x10, 0x00, 0x59, 0x64, 0x51, 0xA3, 0x29, 0xA0, 0x31, 0xE0, - 0x62, 0x81, 0x8B, 0x65, 0x8B, 0x85, 0x7A, 0xC3, 0x52, 0xA2, 0x42, 0x20, 0x32, 0x40, 0x82, 0x65, - 0xDB, 0xCD, 0xAB, 0xE8, 0x6B, 0x40, 0x62, 0xE0, 0x6A, 0xC0, 0x62, 0xC0, 0x5A, 0xA0, 0x5A, 0xA0, - 0x5A, 0xA1, 0x5A, 0x80, 0x63, 0x00, 0x6B, 0x60, 0x5B, 0x01, 0x42, 0x41, 0x31, 0xE0, 0x31, 0xE0, - 0x31, 0xC0, 0x31, 0xC0, 0x4A, 0xA0, 0x63, 0x60, 0x6B, 0x80, 0x63, 0x60, 0x6B, 0x80, 0x63, 0x60, - 0x5B, 0x60, 0x63, 0x40, 0x6B, 0x40, 0x73, 0x40, 0x6B, 0x40, 0x5B, 0x40, 0x53, 0x20, 0x63, 0x40, - 0x5B, 0x40, 0x63, 0x60, 0x6B, 0xA0, 0x6B, 0xA0, 0x63, 0x80, 0x63, 0x80, 0x63, 0xA0, 0x6B, 0xA0, - 0x73, 0xE0, 0x7C, 0x22, 0x84, 0x43, 0x8C, 0x85, 0x9C, 0xE6, 0xB5, 0xA9, 0xD6, 0x70, 0xDE, 0x71, - 0xDE, 0x6F, 0x5B, 0x44, 0x21, 0x80, 0x29, 0x80, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, - 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, - 0x21, 0x40, 0x21, 0x60, 0x29, 0xA0, 0x39, 0xE2, 0x39, 0xE3, 0x39, 0xC2, 0x29, 0x61, 0x18, 0xE0, - 0x08, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0xA0, 0x08, 0xA0, - 0x10, 0xC0, 0x21, 0x00, 0x69, 0xE5, 0x49, 0xE4, 0x20, 0xC0, 0x10, 0x00, 0x30, 0xA0, 0x49, 0x41, - 0x30, 0xE2, 0x38, 0xA1, 0x38, 0x81, 0x10, 0x00, 0x28, 0x80, 0x61, 0xA3, 0x6A, 0x02, 0x82, 0x83, - 0x73, 0x03, 0x52, 0x60, 0x3A, 0x00, 0x2A, 0x00, 0x31, 0xE0, 0x32, 0x00, 0x5A, 0x42, 0xC2, 0xE9, - 0xB4, 0x47, 0x84, 0x02, 0x5B, 0xC0, 0x5B, 0x40, 0x5B, 0x00, 0x63, 0x41, 0x5B, 0x20, 0x6B, 0x40, - 0x63, 0x20, 0x63, 0x40, 0x63, 0x60, 0x6B, 0x80, 0x6B, 0xC0, 0x5B, 0x40, 0x3A, 0x60, 0x29, 0xE0, - 0x29, 0xA0, 0x29, 0xA0, 0x31, 0xC0, 0x42, 0x60, 0x5B, 0x20, 0x6B, 0x80, 0x6B, 0x80, 0x6B, 0x40, - 0x63, 0x60, 0x5B, 0x40, 0x5B, 0x20, 0x6B, 0x40, 0x73, 0x40, 0x63, 0x40, 0x5B, 0x20, 0x5B, 0x40, - 0x5B, 0x40, 0x63, 0x40, 0x63, 0x60, 0x63, 0x60, 0x63, 0x60, 0x63, 0x60, 0x63, 0x80, 0x63, 0x80, - 0x6B, 0xE0, 0x73, 0xE1, 0x74, 0x21, 0x8C, 0xA5, 0x9C, 0xE6, 0xAD, 0x28, 0xDE, 0x50, 0xDE, 0x50, - 0xD6, 0x2E, 0x94, 0xA8, 0x29, 0x80, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, - 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, - 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, - 0x19, 0x40, 0x21, 0x60, 0x29, 0xA0, 0x39, 0xC1, 0x41, 0xE2, 0x39, 0xC2, 0x29, 0x61, 0x18, 0xE0, - 0x08, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x80, 0x08, 0xA0, - 0x08, 0xA0, 0x10, 0xA0, 0x30, 0xA0, 0x20, 0x80, 0x20, 0x60, 0x30, 0x80, 0x40, 0xE1, 0x30, 0x60, - 0x20, 0x40, 0x30, 0x00, 0x60, 0xA2, 0x78, 0xA2, 0x81, 0x43, 0x81, 0xC3, 0x7A, 0x22, 0x52, 0x21, - 0x31, 0xC0, 0x29, 0xA0, 0x29, 0xE0, 0x31, 0xC0, 0x39, 0xC0, 0x4A, 0x21, 0xB2, 0x47, 0xCB, 0xEB, - 0x8C, 0x03, 0x6B, 0x80, 0x63, 0x80, 0x63, 0x40, 0x5B, 0x00, 0x5B, 0x40, 0x53, 0x40, 0x5B, 0x40, - 0x5B, 0x60, 0x5B, 0x40, 0x5B, 0x60, 0x63, 0x60, 0x6B, 0xC0, 0x6B, 0xE0, 0x63, 0x61, 0x3A, 0x20, - 0x29, 0xE0, 0x29, 0xC0, 0x21, 0x80, 0x29, 0xA0, 0x3A, 0x40, 0x5B, 0x00, 0x6B, 0x60, 0x6B, 0x40, - 0x6B, 0x40, 0x63, 0x60, 0x5B, 0x40, 0x63, 0x20, 0x6B, 0x40, 0x73, 0x40, 0x6B, 0x40, 0x5B, 0x40, - 0x63, 0x40, 0x5B, 0x40, 0x63, 0x20, 0x63, 0x40, 0x5B, 0x40, 0x5B, 0x60, 0x63, 0x60, 0x63, 0x80, - 0x63, 0xA0, 0x63, 0xA0, 0x74, 0x00, 0x8C, 0x85, 0x94, 0xC6, 0xAD, 0x28, 0xD6, 0x50, 0xDE, 0x70, - 0xDE, 0x70, 0xC5, 0xCC, 0x42, 0x21, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xC0, - 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, - 0x29, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xC0, - 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xE0, - 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, 0x21, 0x40, - 0x19, 0x40, 0x21, 0x60, 0x29, 0xA0, 0x39, 0xC1, 0x39, 0xE2, 0x39, 0xC2, 0x29, 0x61, 0x18, 0xE0, - 0x10, 0xA0, 0x08, 0xA0, 0x08, 0x80, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x80, 0x08, 0x80, - 0x08, 0xA0, 0x10, 0xC0, 0x20, 0xC0, 0x30, 0xC0, 0x49, 0x21, 0x51, 0x60, 0x59, 0xA0, 0x49, 0x40, - 0x20, 0xC0, 0x19, 0x00, 0x30, 0xC1, 0x41, 0x00, 0x61, 0x80, 0x79, 0xC1, 0x7A, 0x43, 0x82, 0xA5, - 0x7A, 0xE2, 0x6A, 0x81, 0x51, 0xE0, 0x3A, 0x00, 0x3A, 0x01, 0x89, 0xC4, 0xBB, 0xA8, 0x8C, 0x04, - 0x73, 0xA0, 0x63, 0x80, 0x5B, 0x80, 0x63, 0x60, 0x63, 0x60, 0x5B, 0x20, 0x53, 0x20, 0x5B, 0x21, - 0x5B, 0x40, 0x5B, 0x40, 0x63, 0x80, 0x63, 0x80, 0x63, 0x80, 0x63, 0xA0, 0x6B, 0xA1, 0x4A, 0xA0, - 0x29, 0xE0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x60, 0x3A, 0x20, 0x5B, 0x00, 0x6B, 0x80, - 0x63, 0x60, 0x6B, 0x60, 0x63, 0x40, 0x5B, 0x20, 0x63, 0x20, 0x73, 0x40, 0x73, 0x40, 0x63, 0x40, - 0x63, 0x40, 0x63, 0x40, 0x63, 0x40, 0x63, 0x40, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x40, 0x63, 0x60, - 0x63, 0x61, 0x6B, 0xC1, 0x73, 0xE1, 0x7C, 0x23, 0x94, 0xA5, 0x9C, 0xE6, 0xB5, 0x8A, 0xD6, 0x2E, - 0xDE, 0x70, 0xD6, 0x0D, 0x6B, 0x24, 0x21, 0xA1, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x31, 0xC0, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x21, 0xA0, - 0x29, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xC0, - 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, - 0x29, 0xA0, 0x31, 0xE0, 0x29, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x60, 0x21, 0x40, 0x21, 0x40, - 0x21, 0x20, 0x21, 0x40, 0x29, 0x80, 0x31, 0xE1, 0x39, 0xC1, 0x39, 0xE2, 0x29, 0x41, 0x21, 0x00, - 0x10, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x60, 0x08, 0x80, 0x08, 0x80, 0x08, 0xA0, - 0x10, 0xA0, 0x18, 0xC0, 0x31, 0x21, 0x20, 0xA0, 0x38, 0xE0, 0x69, 0x61, 0x82, 0x20, 0x61, 0x80, - 0x21, 0x20, 0x18, 0xE0, 0x19, 0x20, 0x19, 0x00, 0x21, 0x21, 0x29, 0x01, 0x38, 0x81, 0x48, 0x41, - 0x60, 0xC0, 0x79, 0xA0, 0x82, 0x41, 0x7A, 0xA1, 0x8B, 0x44, 0xB3, 0x47, 0xB4, 0x07, 0x6B, 0xA0, - 0x6B, 0xA0, 0x6B, 0x80, 0x63, 0x80, 0x63, 0x60, 0x63, 0x60, 0x5B, 0x20, 0x63, 0x40, 0x63, 0x20, - 0x5B, 0x20, 0x5B, 0x40, 0x63, 0x80, 0x5B, 0x80, 0x63, 0x80, 0x6B, 0x80, 0x73, 0xC1, 0x63, 0x60, - 0x3A, 0x20, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x60, 0x21, 0x60, 0x3A, 0x00, 0x5B, 0x20, - 0x6B, 0x80, 0x63, 0x40, 0x5B, 0x40, 0x63, 0x40, 0x63, 0x41, 0x63, 0x20, 0x6B, 0x60, 0x63, 0x00, - 0x5B, 0x00, 0x63, 0x60, 0x6B, 0x60, 0x6B, 0x60, 0x6B, 0x60, 0x63, 0x60, 0x63, 0x60, 0x5B, 0x21, - 0x63, 0x80, 0x63, 0x81, 0x73, 0xC2, 0x84, 0x43, 0x84, 0x63, 0x8C, 0x63, 0xB5, 0x49, 0xCD, 0xEC, - 0xD6, 0x52, 0xE6, 0x71, 0xAC, 0xEB, 0x31, 0xC0, 0x21, 0x80, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, - 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x21, 0xA0, - 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, - 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, - 0x29, 0xC0, 0x29, 0x80, 0x29, 0xA0, 0x21, 0x80, 0x21, 0xA0, 0x19, 0x60, 0x21, 0x60, 0x21, 0x40, - 0x21, 0x20, 0x21, 0x20, 0x29, 0x60, 0x39, 0x81, 0x41, 0xC2, 0x39, 0xA2, 0x29, 0x61, 0x21, 0x00, - 0x10, 0xC0, 0x10, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, - 0x08, 0x80, 0x18, 0xA0, 0x18, 0xC0, 0x10, 0xA0, 0x18, 0xA0, 0x49, 0x00, 0x69, 0x80, 0x51, 0x41, - 0x18, 0xE0, 0x18, 0xC0, 0x18, 0xE0, 0x19, 0x20, 0x19, 0x00, 0x21, 0x00, 0x18, 0x60, 0x18, 0x20, - 0x30, 0x60, 0x51, 0x02, 0x7A, 0x47, 0x92, 0x67, 0x9A, 0x84, 0x92, 0xE3, 0xA3, 0x62, 0x9B, 0xA2, - 0x9C, 0x41, 0x8C, 0x01, 0x73, 0xA0, 0x63, 0x60, 0x63, 0x60, 0x5B, 0x60, 0x5B, 0x60, 0x5B, 0x60, - 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x20, 0x6B, 0x60, 0x63, 0x60, 0x5B, 0xA0, 0x63, 0xA0, 0x73, 0xA0, - 0x42, 0x80, 0x31, 0xC0, 0x29, 0xA0, 0x21, 0x80, 0x21, 0x60, 0x21, 0x40, 0x21, 0x40, 0x3A, 0x00, - 0x5B, 0x00, 0x6B, 0x81, 0x6B, 0x60, 0x63, 0x60, 0x5B, 0x20, 0x63, 0x60, 0x6B, 0x60, 0x6B, 0x60, - 0x53, 0x20, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x00, 0x5B, 0x00, 0x63, 0x20, 0x6B, 0x80, 0x6B, 0x80, - 0x6B, 0x80, 0x73, 0xC1, 0x84, 0x23, 0x7C, 0x02, 0x84, 0x43, 0x9C, 0xC6, 0xAD, 0x09, 0xBD, 0x6C, - 0xCE, 0x0E, 0xDE, 0x70, 0xD6, 0x4F, 0x73, 0x86, 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xC0, - 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, - 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, - 0x21, 0x80, 0x21, 0x80, 0x21, 0xA0, 0x21, 0xA0, 0x29, 0xA0, 0x29, 0xA0, 0x21, 0xA0, 0x29, 0xA0, - 0x21, 0xA0, 0x21, 0x60, 0x29, 0xA0, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x20, 0x18, 0xE0, - 0x19, 0x00, 0x21, 0x00, 0x29, 0x40, 0x39, 0x80, 0x41, 0xC1, 0x39, 0x81, 0x31, 0x41, 0x20, 0xE0, - 0x10, 0x80, 0x10, 0x80, 0x08, 0x80, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x10, 0x61, - 0x10, 0x81, 0x10, 0x60, 0x10, 0x80, 0x18, 0xA0, 0x20, 0x60, 0x50, 0xA0, 0x60, 0xE0, 0x29, 0x01, - 0x18, 0xC0, 0x18, 0xE0, 0x19, 0x01, 0x19, 0x00, 0x19, 0x20, 0x21, 0x20, 0x28, 0xC0, 0x20, 0x20, - 0x28, 0x20, 0x40, 0xA0, 0x48, 0xE1, 0x71, 0x84, 0x92, 0x67, 0x62, 0xC4, 0x62, 0xA0, 0x7B, 0x20, - 0x8B, 0x21, 0x9B, 0xA2, 0xAC, 0x63, 0xAC, 0xA3, 0x94, 0x62, 0x74, 0x01, 0x5B, 0x60, 0x5B, 0x60, - 0x5B, 0x40, 0x63, 0x80, 0x5B, 0x40, 0x5B, 0x80, 0x5B, 0x80, 0x6B, 0xA0, 0x6B, 0xA0, 0x63, 0xA0, - 0x53, 0x00, 0x39, 0xE0, 0x29, 0xA0, 0x21, 0x60, 0x21, 0x80, 0x21, 0x60, 0x19, 0x00, 0x21, 0x60, - 0x3A, 0x20, 0x5B, 0x00, 0x63, 0x40, 0x6B, 0x60, 0x63, 0x60, 0x5B, 0x40, 0x5B, 0x20, 0x73, 0x80, - 0x5B, 0x20, 0x5B, 0x00, 0x53, 0x00, 0x53, 0x20, 0x53, 0x00, 0x4A, 0xC0, 0x52, 0xE0, 0x52, 0xE0, - 0x5B, 0x00, 0x5A, 0xE0, 0x6B, 0x82, 0x8C, 0x85, 0x8C, 0x84, 0x8C, 0x85, 0xA5, 0x08, 0xBD, 0x8C, - 0xCD, 0xEE, 0xD6, 0x71, 0xE6, 0xD3, 0xBD, 0xAF, 0x31, 0xE1, 0x21, 0x80, 0x29, 0x80, 0x21, 0xA0, - 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, - 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, - 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, - 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x19, 0x20, 0x21, 0x20, 0x28, 0xE0, - 0x18, 0xE0, 0x19, 0x00, 0x29, 0x00, 0x39, 0x60, 0x41, 0x81, 0x41, 0x81, 0x31, 0x41, 0x18, 0xE0, - 0x10, 0xC0, 0x10, 0x80, 0x10, 0x60, 0x10, 0x60, 0x10, 0x60, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, - 0x08, 0x40, 0x10, 0xA0, 0x08, 0x60, 0x10, 0x80, 0x30, 0xA0, 0x60, 0xE0, 0x61, 0x41, 0x18, 0xA0, - 0x18, 0xC0, 0x18, 0xC0, 0x18, 0xE0, 0x18, 0xE0, 0x19, 0x00, 0x21, 0x00, 0x29, 0x20, 0x20, 0xA0, - 0x20, 0x00, 0x30, 0x60, 0x40, 0xC0, 0x51, 0xE2, 0x52, 0x02, 0x42, 0x41, 0x5B, 0x00, 0x6B, 0x61, - 0x6B, 0x81, 0x63, 0x20, 0x73, 0x20, 0x8B, 0x60, 0xA3, 0xA1, 0xBC, 0xA4, 0xAC, 0x84, 0x94, 0x23, - 0x6B, 0xA0, 0x63, 0x80, 0x63, 0x40, 0x63, 0x40, 0x63, 0x80, 0x63, 0xA0, 0x63, 0xA0, 0x6B, 0xA0, - 0x63, 0x60, 0x52, 0xE0, 0x52, 0xC1, 0x4A, 0xA0, 0x42, 0x80, 0x3A, 0x40, 0x31, 0xE0, 0x3A, 0x20, - 0x4A, 0xA0, 0x73, 0xC0, 0x84, 0x00, 0x6B, 0x80, 0x6B, 0x60, 0x63, 0x41, 0x63, 0x20, 0x63, 0x40, - 0x73, 0x61, 0x63, 0x00, 0x52, 0xE0, 0x53, 0x00, 0x4A, 0xE0, 0x42, 0xC0, 0x4A, 0xE0, 0x53, 0x00, - 0x4A, 0xE0, 0x4B, 0x00, 0x53, 0x20, 0x63, 0x80, 0x7C, 0x43, 0x9D, 0x07, 0xAD, 0x29, 0xB5, 0x4B, - 0xCD, 0x8E, 0xDE, 0x72, 0xDE, 0x72, 0xDE, 0x92, 0x7B, 0xC8, 0x21, 0x80, 0x21, 0x60, 0x21, 0x80, - 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x80, - 0x21, 0x80, 0x21, 0xA0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, - 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, - 0x21, 0x40, 0x21, 0x40, 0x19, 0x40, 0x21, 0x40, 0x21, 0x20, 0x21, 0x20, 0x18, 0xE0, 0x11, 0x00, - 0x18, 0xE1, 0x18, 0xE0, 0x21, 0x00, 0x31, 0x40, 0x39, 0x61, 0x39, 0x62, 0x31, 0x21, 0x28, 0xC0, - 0x10, 0xA0, 0x10, 0x60, 0x10, 0x60, 0x10, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x40, 0x10, 0x60, - 0x10, 0x60, 0x10, 0x80, 0x10, 0x81, 0x10, 0x80, 0x48, 0xC0, 0x81, 0x20, 0x49, 0x01, 0x10, 0xC0, - 0x19, 0x00, 0x18, 0xE0, 0x18, 0xC0, 0x21, 0x01, 0x18, 0xE0, 0x20, 0xE0, 0x21, 0x00, 0x29, 0x20, - 0x28, 0x60, 0x30, 0x00, 0x40, 0x80, 0x49, 0x80, 0x31, 0xA0, 0x4A, 0x60, 0x6B, 0x40, 0x6B, 0x60, - 0x6B, 0x80, 0x6B, 0xA0, 0x6B, 0x80, 0x63, 0x60, 0x63, 0x40, 0x6B, 0x20, 0x83, 0x40, 0xB4, 0x44, - 0xC5, 0x47, 0xA4, 0xC4, 0x84, 0x22, 0x73, 0xA0, 0x63, 0x40, 0x63, 0x60, 0x63, 0x80, 0x63, 0x60, - 0x63, 0x40, 0x5A, 0xE0, 0x52, 0xE0, 0x5B, 0x20, 0x63, 0x60, 0x63, 0x60, 0x63, 0x60, 0x63, 0x60, - 0x6B, 0x81, 0x73, 0xE0, 0x7C, 0x20, 0x84, 0x40, 0x8C, 0x60, 0x7C, 0x00, 0x63, 0x60, 0x5B, 0x20, - 0x6B, 0x40, 0x63, 0x20, 0x52, 0xE0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xA0, 0x52, 0xE0, - 0x4A, 0xE0, 0x53, 0x00, 0x5B, 0x20, 0x63, 0x80, 0x6B, 0xA0, 0x73, 0xC1, 0x9C, 0xC7, 0xBD, 0x6B, - 0xC5, 0x8C, 0xD6, 0x0F, 0xDE, 0x91, 0xDE, 0x91, 0xBD, 0xAD, 0x3A, 0x21, 0x19, 0x60, 0x21, 0x60, - 0x19, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x19, 0x60, - 0x21, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x21, 0x40, 0x19, 0x40, 0x19, 0x40, - 0x19, 0x40, 0x19, 0x20, 0x21, 0x20, 0x19, 0x00, 0x18, 0xE0, 0x21, 0x00, 0x18, 0xE0, 0x21, 0x00, - 0x10, 0xE0, 0x10, 0xA0, 0x21, 0x00, 0x31, 0x00, 0x41, 0x82, 0x41, 0x61, 0x39, 0x21, 0x28, 0xC0, - 0x18, 0xA0, 0x18, 0x60, 0x18, 0x60, 0x18, 0x60, 0x10, 0x60, 0x10, 0x80, 0x18, 0x60, 0x18, 0x60, - 0x18, 0x60, 0x18, 0xA0, 0x18, 0x60, 0x18, 0x80, 0x61, 0x00, 0x89, 0x40, 0x28, 0x80, 0x10, 0xA0, - 0x10, 0xA0, 0x18, 0xC0, 0x20, 0xE0, 0x20, 0xE0, 0x20, 0xC0, 0x20, 0xE0, 0x21, 0x00, 0x21, 0x20, - 0x28, 0xE0, 0x40, 0x80, 0x38, 0x40, 0x50, 0xC0, 0x41, 0xC0, 0x4A, 0xA1, 0x6B, 0x40, 0x6B, 0xA0, - 0x6B, 0xA0, 0x63, 0x80, 0x63, 0xA0, 0x63, 0xA0, 0x63, 0x60, 0x6B, 0x60, 0x63, 0x40, 0x63, 0x40, - 0x83, 0x81, 0xAC, 0x25, 0xC4, 0xC8, 0xAC, 0x86, 0x6B, 0x41, 0x5A, 0xE0, 0x52, 0xA0, 0x5A, 0xC0, - 0x52, 0xE0, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x20, 0x63, 0x61, 0x6B, 0x80, - 0x6B, 0x60, 0x6B, 0xA0, 0x73, 0xE0, 0x7C, 0x01, 0x73, 0xA0, 0x7C, 0x00, 0x7B, 0xE0, 0x74, 0x00, - 0x6B, 0x20, 0x6B, 0x40, 0x63, 0x40, 0x52, 0xC0, 0x4A, 0xA0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xE0, - 0x4A, 0xC0, 0x4A, 0xC0, 0x5B, 0x40, 0x5B, 0x40, 0x63, 0x80, 0x63, 0x80, 0x73, 0xC2, 0x9C, 0xE7, - 0xBD, 0xAC, 0xCE, 0x0E, 0xDE, 0x92, 0xDE, 0x91, 0xD6, 0x4F, 0x7B, 0xE7, 0x21, 0x80, 0x21, 0x40, - 0x19, 0x40, 0x19, 0x40, 0x19, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, - 0x21, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x19, 0x40, - 0x19, 0x40, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, - 0x19, 0x20, 0x21, 0x00, 0x20, 0xE0, 0x10, 0xC0, 0x11, 0x00, 0x20, 0xE0, 0x93, 0x2A, 0xCB, 0x8E, - 0xBB, 0x0B, 0xB2, 0x8A, 0xBA, 0xAA, 0xAA, 0x28, 0x9A, 0x28, 0x79, 0xA5, 0x51, 0x42, 0x39, 0x00, - 0x60, 0xE2, 0x81, 0x44, 0xA9, 0xE8, 0xC2, 0x0A, 0xC1, 0xE9, 0xC1, 0xE9, 0xC1, 0xE9, 0xC1, 0xC9, - 0xD2, 0x6D, 0xD2, 0xCD, 0xBA, 0x29, 0x91, 0xC7, 0x78, 0xC0, 0x89, 0x01, 0x8A, 0x06, 0x79, 0x65, - 0x79, 0x44, 0x71, 0x85, 0x59, 0xA4, 0x31, 0x00, 0x21, 0x00, 0x21, 0x00, 0x20, 0xE0, 0x20, 0xE0, - 0x21, 0x00, 0x30, 0xC0, 0x28, 0x20, 0x48, 0x41, 0x51, 0x40, 0x52, 0x60, 0x73, 0x60, 0x73, 0xA0, - 0x6B, 0xA0, 0x73, 0xA0, 0x7B, 0xC0, 0x7B, 0xC0, 0x6B, 0xA0, 0x63, 0xA0, 0x63, 0x80, 0x63, 0x80, - 0x6B, 0x40, 0x73, 0x60, 0x7B, 0x60, 0x93, 0x62, 0x82, 0xC0, 0x72, 0xE1, 0x5A, 0xA0, 0x52, 0xC0, - 0x5B, 0x00, 0x5B, 0x20, 0x63, 0x40, 0x63, 0x40, 0x63, 0x40, 0x63, 0x40, 0x63, 0x20, 0x63, 0x20, - 0x6B, 0x81, 0x63, 0x60, 0x63, 0x60, 0x6B, 0xA0, 0x63, 0x60, 0x6B, 0xA1, 0x6B, 0x80, 0x73, 0xC1, - 0x8C, 0x40, 0x84, 0x00, 0x7B, 0xE0, 0x6B, 0x40, 0x52, 0xA0, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0xE0, - 0x4A, 0xE0, 0x52, 0xE0, 0x5B, 0x60, 0x5B, 0x60, 0x63, 0x80, 0x6B, 0xE1, 0x73, 0xE2, 0x7C, 0x43, - 0xAD, 0x49, 0xCE, 0x0E, 0xCE, 0x30, 0xD6, 0x72, 0xDE, 0x92, 0xC5, 0xEF, 0x42, 0x21, 0x19, 0x40, - 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, - 0x21, 0x60, 0x21, 0x60, 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x19, 0x60, 0x19, 0x40, - 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x00, - 0x18, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x20, 0xE0, 0x40, 0xE1, 0x92, 0x68, 0xDB, 0xAF, 0xE3, 0x8F, - 0xE3, 0x2F, 0xD2, 0xCD, 0xDB, 0x2F, 0xDB, 0x4F, 0xE3, 0x50, 0xE3, 0x2F, 0xDA, 0xCE, 0xE2, 0xEE, - 0xE2, 0xEE, 0xDA, 0x4C, 0xD9, 0xEC, 0xD1, 0xCB, 0xC9, 0xCA, 0xD2, 0x0B, 0xC9, 0xCA, 0xB9, 0x08, - 0xD2, 0x2B, 0xB9, 0xE9, 0xA1, 0x64, 0x80, 0xC2, 0x81, 0x01, 0x99, 0x42, 0x99, 0x85, 0xA1, 0x86, - 0xA9, 0xC6, 0xBA, 0x29, 0xC2, 0x8C, 0xBA, 0x6B, 0xA2, 0x49, 0x79, 0xE5, 0x41, 0x21, 0x29, 0x20, - 0x31, 0x01, 0x28, 0xE0, 0x28, 0x40, 0x30, 0x00, 0x58, 0xC0, 0x62, 0x40, 0x63, 0x20, 0x7B, 0xA0, - 0x73, 0xA0, 0x73, 0xC0, 0x73, 0xE0, 0x73, 0xE0, 0x74, 0x00, 0x73, 0xC0, 0x73, 0xA0, 0x73, 0x80, - 0x6B, 0x80, 0x63, 0xA0, 0x5B, 0x80, 0x63, 0x40, 0x73, 0x00, 0x82, 0xE0, 0x72, 0x80, 0x62, 0xA0, - 0x5A, 0xE0, 0x5B, 0x00, 0x63, 0x20, 0x5B, 0x20, 0x63, 0x40, 0x63, 0x60, 0x63, 0x40, 0x63, 0x60, - 0x5B, 0x80, 0x5B, 0x40, 0x63, 0x40, 0x63, 0x40, 0x53, 0x20, 0x5B, 0x60, 0x63, 0x60, 0x6B, 0x80, - 0x6B, 0xC0, 0x6B, 0x80, 0x7B, 0xE0, 0x7C, 0x00, 0x6B, 0x60, 0x5A, 0xE0, 0x52, 0xA0, 0x4A, 0xA0, - 0x4A, 0xC0, 0x5B, 0x00, 0x63, 0x60, 0x73, 0xC0, 0x7C, 0x20, 0x84, 0x60, 0x8C, 0x60, 0x9C, 0xC1, - 0x9D, 0x04, 0xAD, 0x48, 0xCE, 0x2F, 0xDE, 0x72, 0xDE, 0xB3, 0xDE, 0xB2, 0x7B, 0xA7, 0x11, 0x20, - 0x19, 0x20, 0x19, 0x20, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, - 0x21, 0x40, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x19, 0x40, 0x19, 0x20, - 0x19, 0x21, 0x11, 0x20, 0x11, 0x00, 0x11, 0x00, 0x19, 0x01, 0x10, 0xE0, 0x11, 0x00, 0x18, 0xC0, - 0x18, 0xE0, 0x20, 0xC0, 0x8A, 0xC9, 0xC3, 0x4D, 0xC2, 0xEC, 0xC2, 0x8B, 0xDA, 0xCD, 0xE2, 0xCE, - 0xDA, 0x4C, 0xDA, 0x4C, 0xDA, 0x4C, 0xE2, 0x6D, 0xE2, 0x4D, 0xE2, 0x4D, 0xDA, 0x2C, 0xEA, 0xCF, - 0xE3, 0x0E, 0xC1, 0xEA, 0xC1, 0xA9, 0xC1, 0xEA, 0xB9, 0xE9, 0xA9, 0x86, 0x99, 0x24, 0x91, 0x02, - 0x70, 0xE1, 0x79, 0x01, 0x81, 0x22, 0x80, 0xE1, 0x78, 0x40, 0x89, 0x03, 0xB2, 0x48, 0x89, 0x63, - 0x79, 0x40, 0x79, 0x21, 0x81, 0x22, 0x91, 0x64, 0xA9, 0xE7, 0xBA, 0x49, 0xBA, 0x8A, 0xB2, 0x49, - 0x81, 0xC5, 0x51, 0x61, 0x51, 0x22, 0x28, 0x40, 0x38, 0x20, 0x61, 0x20, 0x6A, 0xC0, 0x73, 0x80, - 0x73, 0xA0, 0x7B, 0xA0, 0x73, 0xE0, 0x73, 0xE0, 0x7B, 0xE0, 0x73, 0xC0, 0x6B, 0xC0, 0x6B, 0xC0, - 0x6B, 0xA0, 0x6B, 0xA0, 0x6B, 0x80, 0x63, 0x80, 0x63, 0x40, 0x6B, 0x20, 0x73, 0x00, 0x7B, 0x01, - 0x93, 0x62, 0x6B, 0x21, 0x5B, 0x00, 0x63, 0x60, 0x5B, 0x20, 0x5B, 0x40, 0x63, 0x40, 0x63, 0x20, - 0x63, 0x40, 0x5B, 0x20, 0x5B, 0x00, 0x5B, 0x20, 0x5B, 0x00, 0x5B, 0x00, 0x63, 0x40, 0x63, 0x60, - 0x63, 0x60, 0x63, 0x60, 0x73, 0xC1, 0x7C, 0x00, 0x8C, 0x80, 0x94, 0xA0, 0x73, 0xA0, 0x5A, 0xC0, - 0x5A, 0xC0, 0x63, 0x60, 0x6C, 0x00, 0x63, 0xC0, 0x6B, 0xE0, 0x74, 0x00, 0x74, 0x00, 0x74, 0x20, - 0x8C, 0x81, 0x9D, 0x21, 0xBD, 0xC7, 0xD6, 0x51, 0xDE, 0x95, 0xD6, 0x92, 0x9C, 0xEB, 0x21, 0x40, - 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, - 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x20, 0x19, 0x20, - 0x19, 0x00, 0x21, 0x00, 0x11, 0x00, 0x18, 0xC0, 0x18, 0xE0, 0x18, 0xC0, 0x18, 0xC0, 0x10, 0xC0, - 0x18, 0xA0, 0x7A, 0x47, 0xDC, 0x71, 0xBA, 0xEC, 0xCA, 0xEC, 0xCA, 0x2B, 0xD2, 0x4B, 0xD1, 0xEA, - 0xD1, 0xEA, 0xE2, 0x4C, 0xE2, 0x0C, 0xE9, 0xEC, 0xE1, 0xCB, 0xD9, 0x4A, 0xE1, 0x6B, 0xE9, 0xAC, - 0xEA, 0x8F, 0xD9, 0xEB, 0xD1, 0xC9, 0xB1, 0x66, 0x91, 0x43, 0x79, 0x01, 0x60, 0xE0, 0x69, 0x00, - 0xCB, 0x8D, 0xA2, 0xA8, 0xA2, 0x26, 0x81, 0x02, 0x60, 0x80, 0x81, 0x63, 0x99, 0xC4, 0x89, 0xC3, - 0x89, 0x64, 0x89, 0x64, 0x91, 0x64, 0xA1, 0xA6, 0xB9, 0xC8, 0xCA, 0x4B, 0xDA, 0xAD, 0xDA, 0x8E, - 0xDA, 0x8C, 0xDA, 0xEC, 0xEC, 0x10, 0xEC, 0xB3, 0x8A, 0x29, 0x50, 0x40, 0x71, 0xC0, 0x73, 0x20, - 0x73, 0x80, 0x7B, 0xC0, 0x73, 0xA0, 0x73, 0xA0, 0x73, 0xC0, 0x7B, 0xC0, 0x83, 0xE0, 0x6B, 0x80, - 0x6B, 0xC0, 0x6B, 0xA0, 0x6B, 0xA0, 0x63, 0x80, 0x63, 0x60, 0x63, 0x60, 0x6B, 0x40, 0x6B, 0x20, - 0x7B, 0x61, 0x8B, 0x21, 0x73, 0x21, 0x5B, 0x00, 0x5A, 0xE0, 0x63, 0x40, 0x53, 0x00, 0x63, 0x00, - 0x63, 0x40, 0x63, 0x40, 0x63, 0x40, 0x63, 0x40, 0x63, 0x40, 0x63, 0x40, 0x63, 0x80, 0x63, 0x80, - 0x63, 0xA0, 0x6B, 0x80, 0x73, 0xC0, 0x7C, 0x20, 0x7C, 0x00, 0x7C, 0x20, 0x8C, 0x82, 0x63, 0x20, - 0x6B, 0xA0, 0x63, 0x80, 0x63, 0xA0, 0x63, 0xE0, 0x63, 0xC0, 0x63, 0xA0, 0x6B, 0xE0, 0x74, 0x00, - 0x84, 0x40, 0x8C, 0x80, 0x94, 0x80, 0xA5, 0x02, 0xAD, 0x24, 0xBD, 0xA8, 0xBD, 0xCA, 0x73, 0x82, - 0x11, 0x00, 0x11, 0x00, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, - 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, - 0x11, 0x20, 0x10, 0xE0, 0x18, 0xA0, 0x11, 0x00, 0x10, 0xE0, 0x10, 0xC0, 0x18, 0x80, 0x10, 0xC0, - 0x59, 0x83, 0xBA, 0xCB, 0xCA, 0xEC, 0xC2, 0xCC, 0xC2, 0x0A, 0xD1, 0xEA, 0xD2, 0x0A, 0xD1, 0xEA, - 0xD2, 0x4B, 0xD9, 0xEA, 0xD1, 0x49, 0xD9, 0x6A, 0xE9, 0x4B, 0xE1, 0x2A, 0xD9, 0x0A, 0xE0, 0xEA, - 0xE0, 0xCB, 0xE1, 0x0B, 0xE1, 0x4C, 0xE1, 0x6C, 0xD9, 0x4A, 0xD9, 0xAA, 0xB9, 0x47, 0xB1, 0x66, - 0xA9, 0x28, 0xB1, 0x68, 0xA9, 0x26, 0xA9, 0x26, 0xA9, 0x06, 0xB1, 0x26, 0xC1, 0x67, 0xC1, 0x67, - 0xD1, 0x8A, 0xD1, 0xAA, 0xE2, 0x4C, 0xD1, 0xA9, 0xD9, 0xEB, 0xE2, 0x2C, 0xD1, 0xCA, 0xF2, 0xAE, - 0xF3, 0x50, 0xF3, 0xD1, 0xE3, 0x6F, 0xE3, 0xF0, 0xF5, 0x15, 0x92, 0x09, 0x58, 0x80, 0x6A, 0x80, - 0x6B, 0x80, 0x73, 0x60, 0x7B, 0x80, 0x73, 0xA0, 0x73, 0x80, 0x73, 0xA0, 0x73, 0x80, 0x7B, 0x81, - 0x6B, 0x60, 0x6B, 0x60, 0x6B, 0x40, 0x63, 0x20, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x00, 0x62, 0xE0, - 0x5A, 0xA0, 0x62, 0xA0, 0x8B, 0x02, 0x83, 0x42, 0x5B, 0x20, 0x63, 0x00, 0x63, 0x20, 0x5B, 0x20, - 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x60, 0x5B, 0x60, - 0x63, 0x60, 0x63, 0x80, 0x6B, 0xA0, 0x73, 0xE0, 0x73, 0xE0, 0x73, 0xE0, 0x6B, 0xA0, 0x84, 0x61, - 0x84, 0x61, 0x6B, 0xC0, 0x63, 0xA0, 0x63, 0xA0, 0x63, 0xC0, 0x63, 0xA0, 0x6B, 0xE0, 0x6C, 0x00, - 0x74, 0x20, 0x7C, 0x40, 0x84, 0x80, 0x84, 0x60, 0x8C, 0x80, 0x8C, 0x80, 0x8C, 0x81, 0x8C, 0x80, - 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, - 0x11, 0x00, 0x19, 0x00, 0x11, 0x00, 0x11, 0x00, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x00, - 0x19, 0x20, 0x11, 0x00, 0x11, 0x00, 0x18, 0xC0, 0x10, 0xC0, 0x08, 0xA0, 0x10, 0xA0, 0x69, 0x84, - 0xBB, 0x0C, 0xDB, 0x2D, 0xC2, 0x8B, 0xBA, 0x2A, 0xC1, 0x48, 0xD1, 0xAA, 0xE2, 0x4C, 0xC9, 0x89, - 0xD1, 0x89, 0xE9, 0xEB, 0xD0, 0x88, 0xD8, 0x89, 0xD8, 0xC9, 0xE0, 0xCA, 0xE0, 0x89, 0xD0, 0x28, - 0xD8, 0x29, 0xE0, 0x6A, 0xE0, 0x8A, 0xD0, 0x09, 0xD8, 0x49, 0xD8, 0x69, 0xD8, 0x89, 0xD8, 0xEA, - 0xE8, 0xAA, 0xE1, 0x0A, 0xE1, 0x2B, 0xE9, 0x0B, 0xD8, 0xA9, 0xD8, 0x89, 0xE0, 0xCA, 0xD9, 0x2B, - 0xE9, 0xCB, 0xE1, 0x6A, 0xE1, 0x8B, 0xE9, 0xCC, 0xF1, 0xED, 0xE9, 0xAC, 0xF2, 0x2D, 0xE1, 0xAB, - 0xEA, 0xAD, 0xEB, 0x0F, 0xE2, 0x8E, 0xF3, 0x50, 0xF3, 0xD1, 0xF3, 0xD2, 0xDB, 0x6E, 0x99, 0x63, - 0x72, 0x80, 0x6B, 0x20, 0x73, 0x60, 0x73, 0x20, 0x6B, 0x40, 0x5B, 0x20, 0x5A, 0xE0, 0x5A, 0xE0, - 0x5A, 0xA0, 0x52, 0xA0, 0x52, 0x80, 0x4A, 0x60, 0x4A, 0x60, 0x4A, 0x60, 0x4A, 0x60, 0x42, 0x40, - 0x4A, 0x41, 0x42, 0x21, 0x4A, 0x00, 0x82, 0xE2, 0x8B, 0x63, 0x6B, 0x40, 0x63, 0x40, 0x5B, 0x20, - 0x5B, 0x00, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x60, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x20, - 0x63, 0x60, 0x5B, 0x40, 0x63, 0x80, 0x63, 0x80, 0x6B, 0x80, 0x6B, 0xA0, 0x6B, 0xC0, 0x6B, 0xE0, - 0x73, 0xE0, 0x7C, 0x20, 0x63, 0x80, 0x63, 0x80, 0x5B, 0x80, 0x63, 0xA0, 0x63, 0xE0, 0x6B, 0xE0, - 0x74, 0x01, 0x7C, 0x20, 0x7C, 0x20, 0x7C, 0x40, 0x7C, 0x20, 0x7C, 0x40, 0x84, 0x80, 0x84, 0x80, - 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x10, 0xE0, 0x10, 0xE0, - 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x11, 0x00, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, - 0x10, 0xC0, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xA0, 0x10, 0x80, 0x18, 0xC0, 0x69, 0x64, 0xB2, 0xA9, - 0xD3, 0x2E, 0xCB, 0x0E, 0xC2, 0x8B, 0xC1, 0xC8, 0xB8, 0xE6, 0xC9, 0x27, 0xC9, 0x08, 0xC9, 0x08, - 0xD1, 0x08, 0xD0, 0x88, 0xD0, 0x48, 0xE0, 0x89, 0xD8, 0x49, 0xE0, 0xCA, 0xD8, 0x69, 0xD8, 0x29, - 0xD8, 0x08, 0xE0, 0x89, 0xE0, 0x69, 0xE0, 0x48, 0xE0, 0x08, 0xE0, 0x09, 0xE0, 0x29, 0xE8, 0x6B, - 0xE8, 0x49, 0xE0, 0xCA, 0xE0, 0xCA, 0xE8, 0xAA, 0xE8, 0xAA, 0xF0, 0xAA, 0xE8, 0x6A, 0xE0, 0xCB, - 0xE8, 0x8A, 0xE0, 0x8A, 0xE8, 0xCA, 0xE9, 0x0B, 0xF1, 0x6C, 0xE1, 0x8B, 0xEA, 0x0C, 0xEA, 0x8D, - 0xEA, 0x0C, 0xF2, 0x4E, 0xEA, 0x8F, 0xFB, 0xD2, 0xF3, 0xF1, 0xF3, 0xF1, 0xF3, 0xB0, 0xEB, 0x8F, - 0x99, 0xE4, 0x7A, 0xA2, 0x62, 0xE0, 0x62, 0xC0, 0x52, 0x80, 0x4A, 0x40, 0x42, 0x00, 0x3A, 0x20, - 0x3A, 0x00, 0x3A, 0x00, 0x31, 0xE0, 0x31, 0xC0, 0x31, 0xC0, 0x31, 0xE0, 0x31, 0xE0, 0x29, 0xE0, - 0x31, 0x80, 0x29, 0x80, 0x29, 0xA0, 0x39, 0xC0, 0x72, 0x80, 0x8B, 0x22, 0x6B, 0x41, 0x63, 0x20, - 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x20, 0x5B, 0x60, 0x63, 0x60, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x00, - 0x52, 0xC0, 0x5B, 0x20, 0x5B, 0x00, 0x5B, 0x20, 0x63, 0x60, 0x63, 0x80, 0x6B, 0xC0, 0x5B, 0x60, - 0x6B, 0xA0, 0x73, 0xE0, 0x74, 0x00, 0x63, 0x80, 0x63, 0xA0, 0x63, 0xA0, 0x63, 0xA0, 0x63, 0xC0, - 0x6B, 0xA0, 0x6B, 0xE0, 0x74, 0x20, 0x74, 0x20, 0x6B, 0xE0, 0x6B, 0xE0, 0x74, 0x20, 0x7C, 0x20, - 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x10, 0xE0, 0x11, 0x00, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, - 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xC0, - 0x10, 0xC0, 0x18, 0xA0, 0x10, 0x80, 0x08, 0x80, 0x10, 0x80, 0x8A, 0x47, 0xB2, 0x27, 0xD3, 0x6D, - 0xDB, 0xF1, 0xD3, 0x6F, 0xCA, 0x4A, 0xB9, 0x47, 0xB9, 0x47, 0xC0, 0xE7, 0xC0, 0x26, 0xC0, 0x47, - 0xC0, 0x67, 0xD0, 0xC9, 0xD0, 0x28, 0xD0, 0x07, 0xD8, 0x89, 0xE0, 0xA9, 0xD8, 0x08, 0xD0, 0x08, - 0xD0, 0x27, 0xD0, 0x27, 0xD0, 0x28, 0xD0, 0x08, 0xE0, 0x4A, 0xE0, 0x08, 0xE0, 0x49, 0xE0, 0x48, - 0xE8, 0x08, 0xF0, 0x49, 0xE8, 0x29, 0xF0, 0xAA, 0xE8, 0xEA, 0xE8, 0xEA, 0xF0, 0xEA, 0xE0, 0x28, - 0xE8, 0x28, 0xE8, 0x49, 0xE8, 0x29, 0xE8, 0x6A, 0xF0, 0xAB, 0xE9, 0x0B, 0xE1, 0x4B, 0xF2, 0x0D, - 0xF2, 0x2D, 0xF2, 0x6E, 0xF2, 0xCE, 0xF3, 0x50, 0xFB, 0xF2, 0xEB, 0x8F, 0xFB, 0xF1, 0xF3, 0xD1, - 0xEB, 0xF0, 0x91, 0xE4, 0x72, 0x20, 0x4A, 0x00, 0x39, 0xE0, 0x31, 0xE0, 0x31, 0xA0, 0x31, 0x80, - 0x29, 0xA0, 0x29, 0xC0, 0x29, 0xC0, 0x29, 0xA0, 0x29, 0x80, 0x29, 0x80, 0x29, 0x80, 0x21, 0x80, - 0x21, 0x80, 0x29, 0x80, 0x21, 0x80, 0x21, 0x60, 0x31, 0xA0, 0x72, 0xC2, 0xA3, 0xE6, 0x73, 0x62, - 0x5A, 0xE0, 0x5A, 0xE0, 0x53, 0x00, 0x5B, 0x41, 0x63, 0x60, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x00, - 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x20, 0x63, 0x60, 0x5B, 0x60, 0x63, 0x80, 0x5B, 0x40, 0x63, 0xA1, - 0x63, 0x60, 0x6B, 0x80, 0x63, 0x80, 0x6B, 0xC0, 0x63, 0x80, 0x5B, 0x80, 0x63, 0xA0, 0x63, 0xA0, - 0x6B, 0xE0, 0x63, 0xA0, 0x63, 0xC0, 0x63, 0xA0, 0x6B, 0xC0, 0x73, 0xE1, 0x6B, 0xA0, 0x7C, 0x00, - 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, - 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xE0, 0x10, 0xC0, 0x08, 0xC0, 0x10, 0xC0, 0x08, 0xA0, 0x08, 0xA0, - 0x08, 0xA0, 0x10, 0xA0, 0x10, 0x80, 0x10, 0x80, 0x61, 0x63, 0xB2, 0xA9, 0xA2, 0x48, 0xC2, 0x8A, - 0xCB, 0x6D, 0xC2, 0x8B, 0xA8, 0xE5, 0xB0, 0xA5, 0xB1, 0x06, 0xB8, 0x66, 0xC8, 0x26, 0xC0, 0x06, - 0xC0, 0x06, 0xC8, 0x06, 0xC8, 0x07, 0xC8, 0x06, 0xD8, 0x27, 0xD8, 0x27, 0xC8, 0x06, 0xD8, 0x27, - 0xD0, 0x27, 0xD0, 0x07, 0xD8, 0x07, 0xE0, 0x28, 0xD8, 0x07, 0xD8, 0x07, 0xD8, 0x27, 0xE0, 0x07, - 0xE0, 0x29, 0xE8, 0x6A, 0xE8, 0x29, 0xE8, 0x28, 0xE0, 0xA9, 0xE8, 0xA9, 0xF0, 0x29, 0xE8, 0x09, - 0xE8, 0x49, 0xE8, 0x4A, 0xE8, 0x4A, 0xE8, 0x4A, 0xE8, 0x6A, 0xF0, 0xCA, 0xE8, 0xE9, 0xF1, 0x6B, - 0xF1, 0xCD, 0xF1, 0xEC, 0xFA, 0x4D, 0xFA, 0xCF, 0xFB, 0x30, 0xF2, 0xCE, 0xFB, 0x90, 0xF4, 0x32, - 0xF4, 0x53, 0xEB, 0xCF, 0x91, 0xA3, 0x69, 0xA1, 0x39, 0xA0, 0x29, 0x60, 0x31, 0x80, 0x29, 0x80, - 0x29, 0x80, 0x29, 0x80, 0x29, 0xA0, 0x29, 0x80, 0x29, 0x80, 0x29, 0x60, 0x29, 0x60, 0x21, 0x60, - 0x21, 0x60, 0x19, 0x60, 0x21, 0x40, 0x21, 0x20, 0x19, 0x20, 0x31, 0xA0, 0x73, 0x43, 0xA3, 0xC5, - 0x6B, 0x21, 0x62, 0xE0, 0x52, 0xA0, 0x5A, 0xE0, 0x5B, 0x00, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, - 0x53, 0x00, 0x52, 0xE0, 0x52, 0xE0, 0x53, 0x00, 0x5B, 0x60, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, - 0x63, 0x80, 0x5B, 0x20, 0x63, 0x60, 0x5B, 0x40, 0x5B, 0x60, 0x63, 0x81, 0x63, 0xA1, 0x63, 0xA0, - 0x6B, 0xA0, 0x73, 0xC0, 0x73, 0xC0, 0x73, 0xE1, 0x6B, 0x80, 0x73, 0xA0, 0x7C, 0x00, 0x73, 0xC0, - 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, - 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x08, 0xC0, 0x08, 0xA0, 0x08, 0xA0, 0x08, 0x80, 0x08, 0x80, - 0x10, 0x80, 0x00, 0x60, 0x20, 0xC0, 0x7A, 0x25, 0xA2, 0x88, 0xAA, 0x49, 0xA1, 0x86, 0x99, 0x65, - 0xA1, 0x85, 0xA9, 0x86, 0xA8, 0xC4, 0xB0, 0xA5, 0xA8, 0x65, 0xB0, 0x04, 0xC0, 0x06, 0xB8, 0x06, - 0xC8, 0x46, 0xC0, 0x05, 0xC0, 0x26, 0xC8, 0x67, 0xC0, 0x25, 0xC8, 0x66, 0xC8, 0x66, 0xC0, 0x25, - 0xC8, 0x46, 0xC8, 0x06, 0xD0, 0x27, 0xD8, 0x28, 0xD0, 0x07, 0xD8, 0x07, 0xE0, 0x07, 0xE0, 0x07, - 0xD8, 0x27, 0xE0, 0x28, 0xF0, 0x29, 0xE8, 0x08, 0xF0, 0x69, 0xF0, 0x69, 0xF0, 0x29, 0xE8, 0x0A, - 0xF0, 0x0A, 0xF0, 0x4A, 0xF8, 0x8A, 0xE8, 0x07, 0xE8, 0x07, 0xE8, 0x07, 0xF0, 0x28, 0xF0, 0x49, - 0xF1, 0x2B, 0xF8, 0xCB, 0xF9, 0xCD, 0xF2, 0x6E, 0xF3, 0x10, 0xFB, 0x0F, 0xFB, 0x30, 0xFD, 0xB6, - 0xF4, 0x53, 0xEB, 0xB0, 0xE3, 0xCE, 0x81, 0x84, 0x69, 0x82, 0x49, 0xA0, 0x29, 0xA0, 0x29, 0x80, - 0x29, 0x60, 0x29, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x19, 0x60, - 0x19, 0x41, 0x21, 0x40, 0x21, 0x20, 0x19, 0x20, 0x21, 0x41, 0x21, 0x40, 0x52, 0x20, 0x7B, 0x41, - 0x8B, 0xE4, 0x73, 0x42, 0x52, 0xA0, 0x52, 0xC0, 0x5B, 0x00, 0x53, 0x00, 0x52, 0xE0, 0x4A, 0xA0, - 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x5B, 0x20, 0x53, 0x20, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x20, - 0x5B, 0x40, 0x63, 0x60, 0x5B, 0x00, 0x52, 0xA0, 0x52, 0xE0, 0x5B, 0x60, 0x63, 0x60, 0x63, 0x60, - 0x63, 0x80, 0x63, 0x80, 0x63, 0x80, 0x63, 0xA0, 0x63, 0xA0, 0x63, 0xA0, 0x63, 0xA0, 0x6B, 0xE0, - 0x19, 0x00, 0x19, 0x00, 0x11, 0x00, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, - 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x08, 0xC0, 0x08, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, - 0x08, 0x60, 0x08, 0x80, 0x61, 0x22, 0x9A, 0x46, 0xA2, 0x48, 0x99, 0xE6, 0xA1, 0x46, 0xA1, 0x86, - 0xB1, 0x87, 0xB1, 0x46, 0xA8, 0xC5, 0xA0, 0x44, 0xA0, 0x03, 0xB8, 0x65, 0xC0, 0xC7, 0xB0, 0x04, - 0xC0, 0x04, 0xB8, 0x24, 0xC8, 0xA6, 0xD0, 0xA7, 0xC8, 0x87, 0xD0, 0x87, 0xD0, 0x87, 0xC9, 0x26, - 0xD0, 0xA8, 0xC8, 0x05, 0xC8, 0x05, 0xD0, 0x27, 0xD8, 0x07, 0xD8, 0x06, 0xD0, 0x05, 0xD0, 0x04, - 0xD8, 0x04, 0xE0, 0x26, 0xE8, 0x48, 0xE8, 0x48, 0xE8, 0x69, 0xE8, 0x69, 0xF0, 0x6A, 0xE8, 0x09, - 0xE8, 0x09, 0xF0, 0xAA, 0xF1, 0x0B, 0xF0, 0x48, 0xF8, 0x27, 0xE8, 0x06, 0xF0, 0xAA, 0xF9, 0x2B, - 0xF9, 0x4C, 0xF1, 0x4B, 0xFA, 0x4E, 0xFA, 0x6E, 0xF2, 0xCE, 0xFB, 0x70, 0xFB, 0xB1, 0xFC, 0x53, - 0xFB, 0xD2, 0xF3, 0x4F, 0xF3, 0xAE, 0xCB, 0x29, 0x40, 0x81, 0x69, 0x41, 0x62, 0x02, 0x39, 0x60, - 0x29, 0x60, 0x21, 0x80, 0x21, 0x60, 0x29, 0x80, 0x29, 0x60, 0x21, 0x40, 0x21, 0x60, 0x21, 0x60, - 0x21, 0x60, 0x39, 0xC1, 0x49, 0xE1, 0x4A, 0x20, 0x5A, 0x40, 0x5A, 0x40, 0x52, 0x20, 0x62, 0xA0, - 0x83, 0x62, 0x9C, 0x06, 0x5A, 0xC1, 0x52, 0xC0, 0x52, 0xE0, 0x5A, 0xE0, 0x52, 0xC0, 0x4A, 0xC1, - 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x53, 0x00, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x00, 0x5B, 0x20, - 0x5B, 0x40, 0x5B, 0x40, 0x63, 0x41, 0x52, 0xE0, 0x52, 0xC0, 0x52, 0xE0, 0x63, 0x40, 0x63, 0x60, - 0x5B, 0x80, 0x5B, 0x80, 0x63, 0xA0, 0x5B, 0x80, 0x63, 0xA0, 0x6B, 0xC0, 0x63, 0xC0, 0x6B, 0xC0, - 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, 0x11, 0x00, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, - 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x08, 0xC0, 0x08, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x08, 0x60, - 0x08, 0x40, 0x00, 0x40, 0x7A, 0x26, 0x9A, 0x47, 0x9A, 0x07, 0x99, 0xE6, 0xA1, 0xA6, 0xA9, 0xA6, - 0xA9, 0x65, 0x98, 0xC4, 0x98, 0x23, 0x98, 0x03, 0xA8, 0x44, 0xC9, 0x28, 0xD1, 0x49, 0xB0, 0x24, - 0xB0, 0x25, 0xB0, 0x04, 0xD0, 0x46, 0xD0, 0x06, 0xD0, 0x47, 0xD0, 0x68, 0xD8, 0xA8, 0xC8, 0xA6, - 0xC8, 0x87, 0xC8, 0x26, 0xC8, 0x06, 0xD0, 0x47, 0xD8, 0x07, 0xD8, 0x27, 0xD0, 0x26, 0xD8, 0x05, - 0xD8, 0x03, 0xD8, 0x05, 0xE0, 0x05, 0xE8, 0x26, 0xF0, 0x87, 0xE8, 0x46, 0xF0, 0x48, 0xF0, 0x08, - 0xF0, 0x29, 0xF0, 0x29, 0xF0, 0x6A, 0xF0, 0x48, 0xF0, 0x68, 0xE8, 0x48, 0xF0, 0xAA, 0xF9, 0x2B, - 0xF1, 0xAC, 0xF1, 0xED, 0xFA, 0x6E, 0xFA, 0xAF, 0xFA, 0xEF, 0xFB, 0x70, 0xFB, 0xB1, 0xFB, 0xD1, - 0xFC, 0x11, 0xFB, 0x0F, 0xFA, 0x8D, 0xE3, 0x2C, 0x50, 0xC2, 0x30, 0x20, 0x50, 0xC1, 0x7A, 0x24, - 0x51, 0xE3, 0x29, 0x40, 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x29, 0xA1, 0x41, 0xC2, 0x62, 0x02, - 0x6A, 0x61, 0x62, 0x20, 0x5A, 0x00, 0x52, 0x00, 0x52, 0x00, 0x4A, 0x01, 0x62, 0xA3, 0x83, 0x86, - 0x6A, 0xE2, 0x7B, 0x62, 0x93, 0xE5, 0x52, 0x80, 0x4A, 0x80, 0x5A, 0xA0, 0x52, 0xE0, 0x4A, 0xA0, - 0x52, 0xC0, 0x52, 0xE0, 0x52, 0xE0, 0x53, 0x00, 0x53, 0x00, 0x52, 0xE0, 0x52, 0xE0, 0x5A, 0xE0, - 0x5B, 0x20, 0x5B, 0x00, 0x5B, 0x20, 0x5B, 0x00, 0x5B, 0x01, 0x52, 0xE0, 0x5B, 0x40, 0x5B, 0x60, - 0x6B, 0x41, 0x63, 0x60, 0x63, 0x80, 0x63, 0xA0, 0x63, 0xA0, 0x63, 0xC0, 0x6B, 0xC0, 0x6B, 0xC0, - 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xE0, - 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x08, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x08, 0x60, - 0x08, 0x61, 0x00, 0x60, 0x71, 0xE5, 0x9A, 0x47, 0xA2, 0x47, 0xA2, 0x26, 0x99, 0xA4, 0xA9, 0x64, - 0xA9, 0xA6, 0xA9, 0x45, 0x90, 0x42, 0x98, 0x02, 0xA0, 0x43, 0xA0, 0x23, 0xA8, 0x24, 0xC0, 0xC7, - 0xA8, 0x65, 0xA8, 0x03, 0xC8, 0x25, 0xD8, 0x07, 0xE0, 0xC9, 0xD8, 0xA8, 0xD0, 0x68, 0xB8, 0x04, - 0xC0, 0x05, 0xC8, 0x05, 0xC0, 0x05, 0xC8, 0x26, 0xD0, 0x06, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x05, - 0xD8, 0x05, 0xD8, 0x05, 0xE0, 0x06, 0xE8, 0x06, 0xE8, 0x26, 0xF0, 0x47, 0xF0, 0x28, 0xE8, 0x08, - 0xE8, 0x08, 0xF0, 0x2A, 0xF8, 0x8B, 0xE8, 0x49, 0xF0, 0x8A, 0xF0, 0x48, 0xF0, 0x68, 0xF8, 0xCA, - 0xF2, 0x0D, 0xFA, 0x0D, 0xFA, 0x4E, 0xF2, 0x2D, 0xF2, 0x2D, 0xFA, 0x2D, 0xFB, 0x50, 0xF3, 0xD1, - 0xFB, 0xB1, 0xFC, 0x11, 0xF2, 0x6C, 0xEB, 0x4D, 0x79, 0xE5, 0x38, 0xA1, 0x20, 0x20, 0x40, 0xA0, - 0x71, 0xA4, 0x6A, 0x05, 0x41, 0xA2, 0x39, 0x81, 0x62, 0x05, 0x79, 0xA5, 0x79, 0xA3, 0x69, 0xE1, - 0x51, 0x81, 0x39, 0x60, 0x29, 0x60, 0x21, 0x20, 0x19, 0x40, 0x21, 0x60, 0x62, 0xE3, 0x73, 0x26, - 0x4A, 0x42, 0x62, 0xA0, 0x7B, 0x62, 0x8B, 0xC5, 0x52, 0x81, 0x4A, 0x80, 0x52, 0xE0, 0x5B, 0x00, - 0x5B, 0x00, 0x5B, 0x00, 0x53, 0x00, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x5A, 0xE0, 0x5B, 0x00, - 0x52, 0xE0, 0x52, 0xE0, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x20, 0x5B, 0x00, 0x5B, 0x01, 0x4A, 0xA0, - 0x5A, 0xC0, 0x63, 0x20, 0x63, 0x40, 0x63, 0x60, 0x63, 0x60, 0x6B, 0xA0, 0x6B, 0xA0, 0x6B, 0xC0, - 0x19, 0x40, 0x19, 0x40, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, 0x18, 0xE0, - 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x08, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x08, 0x60, - 0x00, 0x40, 0x08, 0x40, 0x82, 0x05, 0xA2, 0x67, 0x9A, 0x26, 0x91, 0x83, 0x91, 0xC3, 0xA1, 0x63, - 0x99, 0x23, 0x99, 0x04, 0x90, 0x42, 0x98, 0x63, 0xA0, 0x64, 0xA0, 0x23, 0xA8, 0x44, 0xC9, 0x28, - 0xB0, 0x44, 0xA0, 0x02, 0xB0, 0x03, 0xC0, 0x25, 0xC8, 0x86, 0xC8, 0x66, 0xC0, 0x05, 0xB8, 0x03, - 0xC0, 0x05, 0xC8, 0x25, 0xC0, 0x04, 0xC8, 0x25, 0xD0, 0x05, 0xD0, 0x06, 0xD0, 0x26, 0xD8, 0x05, - 0xD8, 0x06, 0xE0, 0x27, 0xE0, 0x07, 0xE8, 0x48, 0xF0, 0x68, 0xE8, 0x07, 0xE8, 0x08, 0xF0, 0x2A, - 0xF8, 0x49, 0xF0, 0x09, 0xF0, 0x09, 0xF8, 0x6A, 0xF0, 0x09, 0xF8, 0x89, 0xE8, 0xE8, 0xF1, 0xAB, - 0xFA, 0xAE, 0xFA, 0x2D, 0xFA, 0x6E, 0xFA, 0xCF, 0xF9, 0x2B, 0xF9, 0xAC, 0xFB, 0x50, 0xFB, 0x90, - 0xFB, 0xB1, 0xFB, 0x4E, 0xFB, 0x2E, 0xF2, 0x8A, 0xAA, 0xA8, 0x61, 0xA0, 0x38, 0xE0, 0x20, 0x40, - 0x30, 0x40, 0x48, 0x81, 0x71, 0x25, 0x78, 0xE3, 0x70, 0x82, 0x58, 0x61, 0x41, 0x01, 0x31, 0x80, - 0x21, 0x40, 0x19, 0x40, 0x19, 0x60, 0x19, 0x20, 0x21, 0x40, 0x29, 0x80, 0x73, 0x85, 0x52, 0x84, - 0x19, 0x20, 0x52, 0x61, 0x5A, 0x80, 0x7B, 0x43, 0x73, 0x23, 0x4A, 0x60, 0x4A, 0x40, 0x4A, 0xA0, - 0x4A, 0x80, 0x52, 0xA0, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x5A, 0xE0, 0x5B, 0x00, - 0x53, 0x00, 0x53, 0x00, 0x5B, 0x01, 0x5B, 0x00, 0x5B, 0x00, 0x52, 0xC0, 0x4A, 0xA0, 0x3A, 0x00, - 0x29, 0xE0, 0x42, 0x60, 0x52, 0xC0, 0x62, 0xE0, 0x6B, 0x20, 0x6B, 0x40, 0x63, 0x60, 0x63, 0x80, - 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, - 0x19, 0x00, 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xA0, 0x08, 0x80, 0x08, 0x60, 0x08, 0x60, - 0x08, 0x40, 0x38, 0xC0, 0x8A, 0x05, 0x92, 0x05, 0x91, 0xE4, 0x99, 0xA4, 0x89, 0xA3, 0x91, 0x63, - 0x99, 0x23, 0x99, 0x03, 0x90, 0x82, 0xA0, 0xA3, 0x98, 0x42, 0xA0, 0x43, 0xA0, 0x23, 0xA8, 0x03, - 0xA8, 0x02, 0xA8, 0x63, 0xA8, 0x23, 0xA8, 0x03, 0xA8, 0x03, 0xB8, 0x03, 0xB8, 0x03, 0xB8, 0x23, - 0xC0, 0x04, 0xC0, 0x24, 0xB8, 0x02, 0xC0, 0x03, 0xC8, 0x04, 0xC8, 0x04, 0xC8, 0x05, 0xD0, 0x04, - 0xD8, 0x05, 0xD8, 0x26, 0xE8, 0x88, 0xE8, 0x47, 0xE8, 0x07, 0xF0, 0x69, 0xF0, 0x29, 0xE8, 0x08, - 0xF0, 0x28, 0xE8, 0x69, 0xF0, 0xAA, 0xF0, 0x8A, 0xF8, 0x8A, 0xF0, 0x68, 0xE8, 0x46, 0xF0, 0x88, - 0xE9, 0x6A, 0xF9, 0xEC, 0xFA, 0xEF, 0xFA, 0x4E, 0xF9, 0xED, 0xF9, 0xED, 0xFB, 0x91, 0xF4, 0x52, - 0xFB, 0x90, 0xFB, 0x8E, 0xF3, 0xAF, 0xFA, 0x4B, 0xEB, 0x2D, 0x69, 0xC0, 0x49, 0x80, 0x39, 0x00, - 0x28, 0xC0, 0x30, 0x40, 0x48, 0x60, 0x50, 0xC0, 0x49, 0x40, 0x31, 0x40, 0x21, 0x40, 0x21, 0x60, - 0x21, 0x40, 0x21, 0x40, 0x19, 0x40, 0x19, 0x60, 0x19, 0x60, 0x4A, 0x21, 0x7B, 0x66, 0x39, 0xE2, - 0x19, 0x20, 0x21, 0x40, 0x52, 0x61, 0x62, 0xA0, 0x83, 0xC5, 0x62, 0xA2, 0x42, 0x40, 0x42, 0x60, - 0x42, 0x60, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0x80, 0x4A, 0xA0, 0x52, 0xC0, 0x5B, 0x00, - 0x5B, 0x21, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x00, 0x52, 0xC0, 0x4A, 0xA0, 0x52, 0xC0, 0x52, 0xC1, - 0x3A, 0x20, 0x32, 0x00, 0x32, 0x01, 0x32, 0x20, 0x42, 0x80, 0x52, 0xC0, 0x63, 0x20, 0x6B, 0x40, - 0x19, 0x40, 0x19, 0x40, 0x19, 0x40, 0x21, 0x40, 0x19, 0x20, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, - 0x19, 0x00, 0x18, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xA0, 0x10, 0x80, 0x08, 0x60, 0x08, 0x60, - 0x10, 0x60, 0x71, 0xE4, 0x92, 0x25, 0x89, 0xC4, 0x89, 0xA2, 0x99, 0xC3, 0x89, 0xA2, 0x99, 0x83, - 0x99, 0x43, 0x99, 0x23, 0x90, 0xA2, 0x98, 0xC2, 0x98, 0x82, 0xA0, 0x62, 0xA0, 0x42, 0xA8, 0x23, - 0xA8, 0x02, 0xB0, 0x63, 0xB0, 0x44, 0xA8, 0x03, 0xB0, 0x03, 0xB8, 0x24, 0xB0, 0x04, 0xB8, 0x24, - 0xB8, 0x03, 0xC0, 0x23, 0xB8, 0x02, 0xB8, 0x03, 0xC8, 0x04, 0xC8, 0x04, 0xC8, 0x04, 0xC8, 0x04, - 0xD8, 0x04, 0xE0, 0x65, 0xD8, 0x46, 0xE0, 0x46, 0xE0, 0x27, 0xE8, 0x27, 0xE8, 0x28, 0xE8, 0x28, - 0xE8, 0x27, 0xF0, 0x69, 0xF8, 0xCA, 0xF8, 0xAA, 0xF8, 0xAA, 0xF9, 0x2A, 0xF9, 0x09, 0xF8, 0x88, - 0xF1, 0x6B, 0xFA, 0xCE, 0xF2, 0x8D, 0xFA, 0xAE, 0xFA, 0x6E, 0xFA, 0x4E, 0xF9, 0xEC, 0xFB, 0xF1, - 0xFB, 0x90, 0xF3, 0xAF, 0xFC, 0x10, 0xEB, 0x0D, 0xEB, 0x2D, 0x89, 0xE4, 0x51, 0x80, 0x49, 0xA0, - 0x29, 0x40, 0x30, 0xE1, 0x30, 0xA1, 0x28, 0xE0, 0x29, 0x40, 0x21, 0x20, 0x29, 0x61, 0x19, 0x40, - 0x19, 0x40, 0x21, 0x60, 0x21, 0x60, 0x19, 0x80, 0x21, 0x60, 0x62, 0xC3, 0x62, 0xC5, 0x21, 0x81, - 0x10, 0xE0, 0x10, 0xE0, 0x29, 0xA0, 0x52, 0x80, 0x62, 0xA0, 0x83, 0xC6, 0x52, 0x81, 0x42, 0x60, - 0x42, 0x80, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0x80, 0x4A, 0x80, - 0x4A, 0xA0, 0x52, 0xC0, 0x5B, 0x01, 0x63, 0x22, 0x5B, 0x01, 0x5A, 0xE0, 0x52, 0xE0, 0x53, 0x00, - 0x32, 0x60, 0x29, 0xE0, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x3A, 0x40, 0x42, 0x61, 0x31, 0xC0, - 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, - 0x19, 0x00, 0x18, 0xE0, 0x10, 0xC0, 0x10, 0xA0, 0x10, 0xA0, 0x10, 0x80, 0x08, 0x60, 0x08, 0x60, - 0x20, 0xA1, 0x82, 0x24, 0x8A, 0x24, 0x89, 0xC3, 0x89, 0xA2, 0x81, 0x81, 0x89, 0xE2, 0x91, 0x83, - 0x99, 0x63, 0x91, 0x22, 0x90, 0xE2, 0x98, 0xE2, 0x98, 0xA2, 0xA0, 0x82, 0xA0, 0x83, 0x98, 0x02, - 0xA0, 0x22, 0xA8, 0x22, 0xA8, 0x03, 0xA8, 0x03, 0xB0, 0x23, 0xB0, 0x03, 0xB0, 0x04, 0xB0, 0x03, - 0xB8, 0x03, 0xB8, 0x03, 0xB0, 0x02, 0xB8, 0x03, 0xC8, 0x04, 0xD0, 0x05, 0xC8, 0x04, 0xC8, 0x03, - 0xD8, 0x05, 0xD8, 0x25, 0xE0, 0x86, 0xD8, 0x66, 0xD0, 0x05, 0xE8, 0x47, 0xF0, 0x48, 0xF0, 0x28, - 0xF8, 0x28, 0xF0, 0x07, 0xF0, 0x28, 0xE8, 0x68, 0xF9, 0x4A, 0xF1, 0x4A, 0xF9, 0x2A, 0xF8, 0xC9, - 0xF9, 0x8C, 0xFA, 0x8D, 0xF2, 0x8D, 0xFA, 0x4D, 0xF2, 0x4D, 0xFA, 0xCF, 0xFA, 0x6D, 0xF2, 0x2C, - 0xFB, 0xD1, 0xFB, 0xD0, 0xFB, 0xCF, 0xF2, 0xCB, 0xF3, 0x0B, 0x8A, 0x05, 0x41, 0x20, 0x59, 0x80, - 0x49, 0x80, 0x28, 0xE0, 0x28, 0xC0, 0x30, 0xC0, 0x38, 0xE0, 0x31, 0x40, 0x21, 0x40, 0x21, 0x60, - 0x29, 0xA0, 0x31, 0xE0, 0x32, 0x00, 0x21, 0xA0, 0x39, 0xE1, 0x72, 0xE5, 0x49, 0xE2, 0x21, 0x20, - 0x11, 0x00, 0x19, 0x01, 0x11, 0x00, 0x4A, 0x20, 0x5A, 0x80, 0x5A, 0xC0, 0x83, 0xC6, 0x4A, 0x40, - 0x42, 0x60, 0x4A, 0x80, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x80, - 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xC0, 0x4A, 0xA0, 0x52, 0xC0, 0x52, 0xE0, 0x4A, 0xC0, 0x52, 0xE0, - 0x3A, 0x40, 0x29, 0xE0, 0x32, 0x00, 0x32, 0x01, 0x31, 0xE0, 0x3A, 0x01, 0x31, 0xC1, 0x21, 0x60, - 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, - 0x19, 0x00, 0x18, 0xE0, 0x10, 0xC0, 0x10, 0xA0, 0x10, 0xA0, 0x10, 0x80, 0x08, 0x60, 0x08, 0x60, - 0x20, 0x80, 0x82, 0x03, 0x82, 0x03, 0x89, 0xA2, 0x89, 0xA1, 0x81, 0xA1, 0x79, 0x60, 0x99, 0x82, - 0xA1, 0xE5, 0x91, 0x43, 0x88, 0xE1, 0x99, 0x02, 0x98, 0xC2, 0x98, 0x81, 0xA0, 0x62, 0xA0, 0x22, - 0xA0, 0x22, 0xA0, 0x22, 0xA0, 0x22, 0xA8, 0x23, 0xA8, 0x02, 0xA8, 0x02, 0xB0, 0x03, 0xB0, 0x03, - 0xB8, 0x03, 0xB0, 0x03, 0xB0, 0x02, 0xB8, 0x03, 0xC0, 0x04, 0xC8, 0x04, 0xC0, 0x04, 0xC8, 0x03, - 0xD8, 0x05, 0xD8, 0x25, 0xE0, 0xC6, 0xE8, 0xC6, 0xD8, 0x24, 0xE0, 0x05, 0xE8, 0x06, 0xE8, 0x27, - 0xE8, 0x48, 0xF0, 0x47, 0xF0, 0x48, 0xF8, 0xCA, 0xF0, 0xA8, 0xF8, 0xA9, 0xF0, 0xA9, 0xF0, 0xC9, - 0xF9, 0x8C, 0xF2, 0x0C, 0xFA, 0x2C, 0xFA, 0x2C, 0xFA, 0x8E, 0xFA, 0xEF, 0xFB, 0x50, 0xFA, 0xAD, - 0xFB, 0x6F, 0xF3, 0x4C, 0xFB, 0x6F, 0xFA, 0xEB, 0xF2, 0xCA, 0xC2, 0xC8, 0x31, 0x61, 0x49, 0x60, - 0x51, 0xC0, 0x41, 0xA0, 0x29, 0x40, 0x31, 0x20, 0x41, 0x21, 0x41, 0x21, 0x31, 0x60, 0x31, 0xE0, - 0x3A, 0x20, 0x39, 0xE0, 0x29, 0xC0, 0x19, 0x40, 0x52, 0x42, 0x62, 0xA5, 0x29, 0x80, 0x19, 0x20, - 0x18, 0xE0, 0x11, 0x00, 0x19, 0x00, 0x31, 0x80, 0x5A, 0x80, 0x52, 0x40, 0x62, 0xE2, 0x73, 0x23, - 0x3A, 0x00, 0x42, 0x40, 0x4A, 0x60, 0x42, 0x60, 0x42, 0x40, 0x42, 0x40, 0x42, 0x60, 0x4A, 0xA0, - 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xC1, 0x4A, 0x80, 0x53, 0x01, - 0x53, 0x01, 0x42, 0x60, 0x32, 0x00, 0x32, 0x20, 0x3A, 0x40, 0x42, 0x80, 0x4A, 0x60, 0x6B, 0x40, - 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x19, 0x00, - 0x19, 0x00, 0x10, 0xE0, 0x10, 0xA0, 0x10, 0xA0, 0x10, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x60, - 0x20, 0xC0, 0x82, 0x02, 0x81, 0xE2, 0x79, 0xE0, 0x81, 0xA1, 0x81, 0x81, 0x91, 0xE1, 0xA1, 0xA3, - 0xA9, 0xA5, 0x91, 0x22, 0x89, 0x01, 0x88, 0xE1, 0x98, 0xC2, 0x98, 0x62, 0x98, 0x42, 0x98, 0x42, - 0x98, 0x02, 0x98, 0x02, 0xA0, 0x02, 0xA0, 0x02, 0xA8, 0x02, 0xA8, 0x02, 0xA8, 0x02, 0xA8, 0x02, - 0xB0, 0x02, 0xB0, 0x03, 0xB0, 0x02, 0xA8, 0x01, 0xB8, 0x22, 0xC0, 0x03, 0xC0, 0x24, 0xB8, 0x03, - 0xE0, 0x26, 0xE8, 0x28, 0xE8, 0xC8, 0xE1, 0x68, 0xF1, 0x8A, 0xE0, 0x25, 0xE8, 0x27, 0xE8, 0x27, - 0xE8, 0x08, 0xE8, 0x47, 0xE8, 0xA8, 0xF8, 0xC9, 0xF8, 0xC9, 0xF1, 0x2A, 0xF9, 0xAB, 0xF1, 0x2A, - 0xF9, 0x0B, 0xF9, 0xAC, 0xFA, 0x0D, 0xFA, 0x2D, 0xFA, 0x0C, 0xFA, 0x2D, 0xFA, 0xAE, 0xF2, 0xCD, - 0xFA, 0xAB, 0xF2, 0x8A, 0xF4, 0x92, 0xF3, 0x8C, 0xF2, 0xCA, 0xDB, 0x0A, 0x59, 0x81, 0x28, 0xE0, - 0x41, 0x80, 0x51, 0xE0, 0x41, 0xA0, 0x29, 0x60, 0x39, 0x40, 0x51, 0x61, 0x51, 0xC2, 0x41, 0xA0, - 0x31, 0xE0, 0x31, 0xC1, 0x19, 0x40, 0x29, 0xA0, 0x62, 0xA4, 0x49, 0xE2, 0x21, 0x20, 0x11, 0x40, - 0x19, 0x01, 0x11, 0x00, 0x11, 0x00, 0x21, 0x01, 0x4A, 0x60, 0x4A, 0x61, 0x52, 0x60, 0x73, 0x44, - 0x6B, 0x23, 0x42, 0x21, 0x42, 0x40, 0x4A, 0x81, 0x42, 0x80, 0x42, 0x20, 0x4A, 0x40, 0x42, 0x80, - 0x4A, 0xA0, 0x4A, 0x80, 0x4A, 0x80, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xC0, 0x4A, 0xA0, 0x52, 0xE0, - 0x53, 0x00, 0x4A, 0xC0, 0x32, 0x20, 0x32, 0x60, 0x3A, 0x80, 0x5B, 0x20, 0x6B, 0x80, 0x63, 0x80, - 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x21, 0x40, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, - 0x10, 0xE0, 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xA0, 0x10, 0x80, 0x08, 0x80, 0x08, 0x80, 0x10, 0x60, - 0x39, 0x00, 0x82, 0x02, 0x81, 0xE2, 0x79, 0xE0, 0x81, 0x81, 0x79, 0x61, 0x81, 0x80, 0x91, 0x82, - 0xA1, 0xC5, 0x89, 0x22, 0x80, 0xE1, 0x80, 0xC0, 0x90, 0xC2, 0x98, 0x62, 0x98, 0x22, 0x98, 0x01, - 0x98, 0x02, 0x98, 0x02, 0xA0, 0x02, 0xA0, 0x02, 0xA0, 0x02, 0xA0, 0x02, 0xA0, 0x02, 0xA8, 0x02, - 0xB0, 0x02, 0xB0, 0x23, 0xA8, 0x02, 0xA0, 0x00, 0xB0, 0x02, 0xC0, 0x04, 0xC0, 0x24, 0xB8, 0x03, - 0xE0, 0xE6, 0xF1, 0x4A, 0xE8, 0xE8, 0xE0, 0x67, 0xD8, 0x47, 0xE0, 0x05, 0xE0, 0x05, 0xE0, 0x46, - 0xD8, 0x87, 0xE8, 0x06, 0xE8, 0x27, 0xF0, 0xE9, 0xF1, 0x0A, 0xF0, 0xEA, 0xF1, 0xAA, 0xF9, 0xAB, - 0xF9, 0x0A, 0xF9, 0x4A, 0xF9, 0xEC, 0xF1, 0xAB, 0xF0, 0x67, 0xF2, 0x0C, 0xFA, 0x8D, 0xFA, 0x4C, - 0xF1, 0x69, 0xFA, 0xEC, 0xFD, 0x36, 0xF3, 0xAE, 0xF3, 0x4D, 0xE3, 0x2C, 0x8A, 0x25, 0x19, 0x00, - 0x29, 0x00, 0x41, 0xA0, 0x51, 0xE0, 0x41, 0x80, 0x31, 0x60, 0x31, 0x41, 0x41, 0x62, 0x49, 0xA1, - 0x39, 0x20, 0x21, 0x60, 0x21, 0x40, 0x49, 0x61, 0x61, 0xE3, 0x31, 0x60, 0x11, 0x00, 0x19, 0x01, - 0x19, 0x00, 0x11, 0x00, 0x10, 0xE0, 0x18, 0xE0, 0x39, 0xC0, 0x4A, 0x60, 0x42, 0x00, 0x52, 0x60, - 0x73, 0x43, 0x39, 0xA0, 0x39, 0xE0, 0x31, 0xC0, 0x3A, 0x01, 0x42, 0x40, 0x42, 0x41, 0x4A, 0xA1, - 0x52, 0xA0, 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xC0, 0x52, 0xE0, 0x53, 0x00, 0x52, 0xE0, 0x53, 0x00, - 0x52, 0xA0, 0x52, 0xE0, 0x42, 0x40, 0x42, 0x41, 0x52, 0x80, 0x5A, 0xE0, 0x63, 0x40, 0x5B, 0x60, - 0x19, 0x40, 0x19, 0x40, 0x21, 0x40, 0x21, 0x40, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, 0x19, 0x00, - 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0x80, 0x08, 0x80, 0x10, 0x80, 0x08, 0x60, 0x10, 0x60, - 0x51, 0x80, 0x79, 0xE2, 0x79, 0xC1, 0x79, 0xA0, 0x79, 0x80, 0x71, 0x60, 0x71, 0x40, 0x79, 0x41, - 0x79, 0x01, 0x70, 0xC0, 0x78, 0xE0, 0x80, 0xA0, 0x88, 0x60, 0x88, 0x01, 0x90, 0x01, 0x98, 0x02, - 0x90, 0x01, 0x98, 0x02, 0x98, 0x02, 0x98, 0x02, 0x98, 0x02, 0x98, 0x02, 0xA0, 0x02, 0xA8, 0x02, - 0xA8, 0x02, 0xA0, 0x02, 0xA0, 0x01, 0xA0, 0x21, 0xA0, 0x02, 0xB8, 0x03, 0xB8, 0x03, 0xC0, 0x03, - 0xC8, 0x63, 0xE9, 0x69, 0xF9, 0x6A, 0xE8, 0x88, 0xD8, 0x07, 0xE0, 0x26, 0xE0, 0x25, 0xE0, 0x26, - 0xE8, 0xA8, 0xE8, 0x25, 0xF0, 0x47, 0xF0, 0x29, 0xF0, 0x8A, 0xF8, 0xEA, 0xF1, 0x28, 0xF9, 0x6B, - 0xF1, 0x8B, 0xF1, 0x09, 0xF9, 0xAB, 0xF9, 0x6A, 0xF8, 0xE9, 0xF1, 0xEB, 0xF1, 0xCB, 0xFA, 0x8D, - 0xF1, 0xC8, 0xF2, 0x49, 0xFC, 0x71, 0xFA, 0xCA, 0xF3, 0x0B, 0xEB, 0x6C, 0xC2, 0xC8, 0x21, 0x00, - 0x21, 0x00, 0x31, 0x40, 0x49, 0xC0, 0x51, 0xE0, 0x39, 0xA0, 0x29, 0x41, 0x31, 0x20, 0x39, 0x61, - 0x41, 0x01, 0x31, 0x20, 0x39, 0x41, 0x51, 0x63, 0x49, 0xA3, 0x21, 0x40, 0x11, 0x20, 0x19, 0x00, - 0x21, 0x20, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, 0x21, 0x20, 0x4A, 0x60, 0x42, 0x00, 0x42, 0x20, - 0x52, 0x60, 0x6A, 0xE3, 0x39, 0xA0, 0x31, 0xA0, 0x42, 0x01, 0x3A, 0x00, 0x31, 0xC0, 0x42, 0x40, - 0x42, 0x60, 0x52, 0xC0, 0x4A, 0xC0, 0x42, 0x60, 0x42, 0x60, 0x52, 0xE1, 0x52, 0xC0, 0x4A, 0x60, - 0x42, 0x60, 0x5A, 0xE1, 0x72, 0xE3, 0x62, 0x61, 0x5A, 0x80, 0x5B, 0x40, 0x5B, 0x61, 0x5B, 0x20, - 0x19, 0x60, 0x21, 0x40, 0x19, 0x40, 0x21, 0x40, 0x21, 0x40, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, - 0x18, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x08, 0x80, 0x08, 0x80, 0x10, 0x80, 0x10, 0x60, 0x18, 0xA0, - 0x72, 0x22, 0x79, 0xE2, 0x71, 0xC1, 0x71, 0x60, 0x79, 0x80, 0x71, 0x60, 0x71, 0x00, 0x71, 0x20, - 0x70, 0xE0, 0x70, 0xE0, 0x78, 0xE0, 0x78, 0xC0, 0x80, 0x81, 0x88, 0x21, 0x90, 0x01, 0x90, 0x02, - 0x90, 0x01, 0x90, 0x02, 0x98, 0x02, 0x90, 0x02, 0x88, 0x02, 0x90, 0x01, 0x98, 0x02, 0xA8, 0x02, - 0xA0, 0x02, 0x98, 0x01, 0x98, 0x00, 0xA0, 0x21, 0xA0, 0x22, 0xB0, 0x02, 0xB8, 0x02, 0xC0, 0x03, - 0xB8, 0x02, 0xC0, 0x03, 0xC0, 0x03, 0xD0, 0x25, 0xD8, 0x05, 0xE0, 0x25, 0xE0, 0x05, 0xE8, 0x07, - 0xE0, 0x05, 0xD8, 0x05, 0xE0, 0x07, 0xF0, 0x28, 0xF0, 0x68, 0xF1, 0x0A, 0xF9, 0x4A, 0xF9, 0x4B, - 0xF9, 0x8B, 0xF0, 0xC9, 0xF8, 0xC9, 0xF9, 0x09, 0xF9, 0x8B, 0xF1, 0x6A, 0xFA, 0x4C, 0xF2, 0x4C, - 0xF3, 0x4E, 0xF3, 0x0D, 0xFB, 0x4E, 0xF2, 0xAA, 0xF3, 0x2A, 0xEB, 0x2A, 0xAA, 0xC8, 0x21, 0x00, - 0x21, 0x20, 0x20, 0xE0, 0x31, 0x40, 0x49, 0xC0, 0x51, 0xC1, 0x49, 0xA1, 0x39, 0x80, 0x29, 0x20, - 0x29, 0x00, 0x30, 0xE1, 0x51, 0x43, 0x51, 0xA3, 0x31, 0xA2, 0x11, 0x20, 0x11, 0x00, 0x19, 0x20, - 0x19, 0x40, 0x19, 0x20, 0x19, 0x00, 0x19, 0x20, 0x19, 0x00, 0x42, 0x20, 0x4A, 0x20, 0x42, 0x00, - 0x42, 0x00, 0x62, 0xA1, 0x52, 0x61, 0x39, 0xE0, 0x42, 0x00, 0x29, 0xA0, 0x31, 0xE0, 0x4A, 0x41, - 0x42, 0x60, 0x4A, 0x80, 0x4A, 0xA1, 0x4A, 0x80, 0x4A, 0x80, 0x52, 0xC0, 0x52, 0xC0, 0x52, 0xA0, - 0x4A, 0x80, 0x5A, 0xA0, 0x7B, 0x44, 0x72, 0x83, 0x62, 0xA0, 0x5B, 0x20, 0x53, 0x00, 0x53, 0x00, - 0x21, 0x60, 0x21, 0x60, 0x21, 0x60, 0x21, 0x40, 0x21, 0x40, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, - 0x18, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x10, 0x60, 0x28, 0xE1, - 0x7A, 0x42, 0x71, 0xE1, 0x71, 0xA0, 0x71, 0x40, 0x71, 0x60, 0x69, 0x40, 0x69, 0x00, 0x69, 0x00, - 0x71, 0x00, 0x70, 0xE0, 0x70, 0xC0, 0x78, 0x80, 0x78, 0x60, 0x80, 0x21, 0x88, 0x01, 0x88, 0x01, - 0x88, 0x01, 0x90, 0x01, 0x90, 0x02, 0x90, 0x02, 0x88, 0x02, 0x88, 0x21, 0x98, 0x02, 0xA0, 0x02, - 0x98, 0x01, 0x98, 0x01, 0xA0, 0x01, 0xA0, 0x21, 0x90, 0x01, 0xA8, 0x02, 0xB0, 0x02, 0xB8, 0x03, - 0xC0, 0x03, 0xC8, 0x04, 0xC0, 0x03, 0xC8, 0x04, 0xD8, 0x25, 0xD8, 0x03, 0xD8, 0x05, 0xE0, 0x07, - 0xD8, 0x25, 0xD0, 0x04, 0xE0, 0x05, 0xE0, 0x66, 0xF0, 0xA7, 0xF1, 0x69, 0xF1, 0x27, 0xF8, 0xE8, - 0xF9, 0x2A, 0xF8, 0xCA, 0xF0, 0xE8, 0xF0, 0xA8, 0xF9, 0xCC, 0xFA, 0x4D, 0xF2, 0xAD, 0xFA, 0x4D, - 0xFC, 0x11, 0xF3, 0x8F, 0xF3, 0x4D, 0xFB, 0xAE, 0xEB, 0x2B, 0xF3, 0x2B, 0x8A, 0x05, 0x21, 0x00, - 0x21, 0x00, 0x29, 0x00, 0x21, 0x20, 0x29, 0x60, 0x41, 0x60, 0x59, 0xA0, 0x49, 0xC0, 0x29, 0x20, - 0x18, 0xA0, 0x20, 0xA0, 0x39, 0x21, 0x41, 0xA1, 0x31, 0xC0, 0x19, 0x60, 0x19, 0x40, 0x21, 0x21, - 0x19, 0x60, 0x19, 0x20, 0x19, 0x00, 0x11, 0x20, 0x19, 0x00, 0x31, 0xA0, 0x4A, 0x40, 0x42, 0x00, - 0x4A, 0x00, 0x4A, 0x00, 0x62, 0xC1, 0x4A, 0x20, 0x31, 0xC0, 0x29, 0x80, 0x39, 0xE0, 0x39, 0xE0, - 0x42, 0x40, 0x42, 0x40, 0x42, 0x60, 0x42, 0x40, 0x4A, 0x60, 0x52, 0xE0, 0x5A, 0xE0, 0x5B, 0x01, - 0x42, 0x00, 0x5A, 0xA0, 0x6A, 0xE2, 0x6A, 0xA1, 0x63, 0x00, 0x5B, 0x20, 0x53, 0x00, 0x5B, 0x21, - 0x19, 0x60, 0x19, 0x40, 0x19, 0x40, 0x21, 0x40, 0x21, 0x40, 0x19, 0x20, 0x19, 0x20, 0x19, 0x00, - 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xA0, 0x10, 0x80, 0x08, 0x60, 0x10, 0x60, 0x20, 0xC0, - 0x69, 0xE1, 0x69, 0xA0, 0x69, 0xA0, 0x69, 0x40, 0x69, 0x20, 0x69, 0x20, 0x71, 0x00, 0x71, 0x21, - 0x68, 0xE0, 0x70, 0xE0, 0x70, 0xC0, 0x78, 0x80, 0x78, 0x61, 0x78, 0x41, 0x80, 0x21, 0x88, 0x22, - 0x88, 0x01, 0x88, 0x01, 0x90, 0x01, 0x90, 0x01, 0x88, 0x02, 0x88, 0x01, 0x90, 0x01, 0x98, 0x01, - 0x98, 0x01, 0x98, 0x01, 0xA8, 0x01, 0xA0, 0x02, 0x90, 0x01, 0xA0, 0x01, 0xB0, 0x02, 0xB8, 0x03, - 0xB8, 0x03, 0xC0, 0x04, 0xC8, 0x04, 0xC8, 0x04, 0xD0, 0x03, 0xD8, 0x02, 0xE0, 0x06, 0xD8, 0x06, - 0xE0, 0x06, 0xE0, 0xC6, 0xE0, 0x87, 0xE0, 0x67, 0xE8, 0x46, 0xE1, 0x06, 0xF1, 0x27, 0xE0, 0x26, - 0xF0, 0xC8, 0xF0, 0xE9, 0xF1, 0x49, 0xF9, 0x29, 0xF9, 0xEB, 0xF3, 0x2E, 0xF2, 0x8D, 0xFA, 0x8D, - 0xF1, 0xE8, 0xF2, 0x29, 0xF2, 0xAB, 0xFB, 0x6D, 0xF3, 0xCD, 0xEB, 0x8D, 0xB3, 0x09, 0x29, 0x20, - 0x28, 0xE0, 0x29, 0x20, 0x21, 0x20, 0x21, 0x40, 0x29, 0x60, 0x51, 0xC1, 0x6A, 0x42, 0x5A, 0x22, - 0x42, 0x01, 0x49, 0xE0, 0x42, 0x20, 0x42, 0x20, 0x4A, 0x40, 0x4A, 0x40, 0x31, 0xE0, 0x29, 0x60, - 0x19, 0x40, 0x19, 0x20, 0x19, 0x41, 0x19, 0x20, 0x19, 0x20, 0x29, 0x40, 0x4A, 0x40, 0x4A, 0x00, - 0x41, 0xE0, 0x4A, 0x40, 0x41, 0xE0, 0x4A, 0x00, 0x29, 0x40, 0x39, 0xC1, 0x42, 0x00, 0x39, 0xE0, - 0x3A, 0x00, 0x3A, 0x20, 0x42, 0x40, 0x3A, 0x00, 0x42, 0x40, 0x52, 0xC0, 0x52, 0xA0, 0x4A, 0x80, - 0x52, 0xE1, 0x63, 0x21, 0x6B, 0x02, 0x62, 0xC2, 0x63, 0x20, 0x5B, 0x60, 0x5B, 0x20, 0x5B, 0x00, - 0x21, 0x60, 0x21, 0x60, 0x21, 0x40, 0x21, 0x40, 0x19, 0x20, 0x19, 0x20, 0x19, 0x00, 0x19, 0x00, - 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xA0, 0x10, 0x80, 0x08, 0x80, 0x08, 0x60, 0x08, 0x60, 0x10, 0x60, - 0x51, 0x60, 0x69, 0xA0, 0x69, 0xA0, 0x69, 0x60, 0x69, 0x21, 0x69, 0x01, 0x81, 0x41, 0x79, 0x22, - 0x69, 0x00, 0x70, 0xE0, 0x68, 0x80, 0x70, 0x80, 0x78, 0x81, 0x78, 0x40, 0x78, 0x00, 0x78, 0x00, - 0x80, 0x01, 0x80, 0x01, 0x88, 0x01, 0x90, 0x01, 0x90, 0x01, 0x90, 0x01, 0x90, 0x01, 0x90, 0x01, - 0xA0, 0x22, 0x98, 0x01, 0xB0, 0x01, 0xB0, 0x02, 0x98, 0x22, 0xA0, 0x01, 0xA8, 0x02, 0xA8, 0x02, - 0xC0, 0x04, 0xB8, 0x04, 0xC0, 0x05, 0xE0, 0x87, 0xD0, 0x03, 0xD8, 0x23, 0xD8, 0x05, 0xD8, 0x05, - 0xE0, 0x05, 0xF1, 0x6A, 0xF1, 0x4C, 0xE8, 0x06, 0xE8, 0x26, 0xE0, 0x46, 0xE0, 0x65, 0xE8, 0xC8, - 0xE8, 0xC8, 0xF9, 0x8A, 0xF1, 0x08, 0xF0, 0xA7, 0xFA, 0x0B, 0xF2, 0x8C, 0xFA, 0x4D, 0xFA, 0x8D, - 0xFA, 0x6B, 0xF2, 0xAB, 0xF2, 0x09, 0xFB, 0x8E, 0xF3, 0xED, 0xEB, 0x8D, 0xC3, 0x49, 0x6A, 0x03, - 0x29, 0x00, 0x21, 0x00, 0x21, 0x00, 0x19, 0x20, 0x19, 0x40, 0x31, 0x60, 0x5A, 0x01, 0x6A, 0x61, - 0x4A, 0x01, 0x4A, 0x00, 0x42, 0x20, 0x39, 0xE0, 0x39, 0xC0, 0x42, 0x00, 0x42, 0x00, 0x31, 0xE0, - 0x21, 0x60, 0x21, 0x20, 0x19, 0x40, 0x19, 0x20, 0x19, 0x20, 0x19, 0x20, 0x39, 0xE0, 0x4A, 0x20, - 0x4A, 0x01, 0x42, 0x20, 0x41, 0xC0, 0x4A, 0x21, 0x41, 0xE1, 0x41, 0xC0, 0x39, 0xC0, 0x29, 0x60, - 0x18, 0xE0, 0x18, 0xE0, 0x29, 0x80, 0x31, 0xE0, 0x42, 0x60, 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xE0, - 0x73, 0x84, 0x5B, 0x22, 0x4A, 0xC0, 0x52, 0xC0, 0x63, 0x00, 0x7B, 0x81, 0x6B, 0x40, 0x5B, 0x20, - 0x29, 0xA0, 0x29, 0xA0, 0x21, 0x60, 0x21, 0x40, 0x19, 0x20, 0x19, 0x20, 0x19, 0x00, 0x18, 0xE0, - 0x10, 0xE0, 0x10, 0xC0, 0x10, 0xA0, 0x10, 0x80, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, - 0x41, 0x41, 0x69, 0xA0, 0x69, 0x80, 0x61, 0x40, 0x61, 0x20, 0x68, 0xC1, 0x81, 0x21, 0x79, 0x02, - 0x61, 0x00, 0x68, 0xE0, 0x68, 0x60, 0x68, 0x60, 0x70, 0x60, 0x78, 0x40, 0x78, 0x00, 0x80, 0x01, - 0x80, 0x01, 0x80, 0x01, 0x88, 0x01, 0x90, 0x01, 0x90, 0x01, 0x90, 0x01, 0x90, 0x01, 0x90, 0x01, - 0x98, 0x01, 0xA0, 0x21, 0xC8, 0x63, 0xB8, 0x23, 0x98, 0x02, 0x98, 0x01, 0xA0, 0x01, 0xA8, 0x02, - 0xC8, 0x04, 0xC0, 0x05, 0xC8, 0x66, 0xC8, 0x04, 0xD0, 0x02, 0xD0, 0x23, 0xD8, 0x26, 0xE0, 0x05, - 0xC8, 0x24, 0xC8, 0x03, 0xD8, 0x87, 0xE8, 0x07, 0xE0, 0x67, 0xE0, 0x05, 0xF1, 0x47, 0xF1, 0x8A, - 0xF1, 0xEB, 0xE9, 0x27, 0xF1, 0x68, 0xE8, 0xA6, 0xF2, 0x2A, 0xFA, 0x2B, 0xFA, 0x6C, 0xFA, 0x8C, - 0xF2, 0x6A, 0xFA, 0x8C, 0xE9, 0xE7, 0xFB, 0x0C, 0xFB, 0xCD, 0xE3, 0x8C, 0xCC, 0x0E, 0x49, 0x82, - 0x21, 0x20, 0x20, 0xE0, 0x29, 0x00, 0x21, 0x20, 0x21, 0x00, 0x21, 0x20, 0x41, 0xC1, 0x6A, 0x61, - 0x52, 0x21, 0x39, 0xE0, 0x42, 0x00, 0x42, 0x00, 0x39, 0xE0, 0x31, 0xE0, 0x31, 0xC0, 0x3A, 0x00, - 0x31, 0xC0, 0x21, 0x61, 0x19, 0x20, 0x21, 0x40, 0x19, 0x20, 0x19, 0x20, 0x31, 0xA1, 0x4A, 0x40, - 0x42, 0x00, 0x4A, 0x20, 0x39, 0xE0, 0x39, 0xC0, 0x5A, 0xA1, 0x4A, 0x00, 0x42, 0x20, 0x29, 0x40, - 0x18, 0xC0, 0x18, 0xC0, 0x31, 0x81, 0x3A, 0x00, 0x4A, 0x60, 0x4A, 0xA0, 0x52, 0xC0, 0x5B, 0x21, - 0x63, 0x62, 0x6B, 0xC4, 0x4A, 0xA0, 0x4A, 0xA0, 0x62, 0xE0, 0x7B, 0x60, 0x7B, 0x80, 0x63, 0x60, - 0x4A, 0xA0, 0x42, 0x80, 0x3A, 0x20, 0x31, 0xE0, 0x29, 0x80, 0x19, 0x20, 0x19, 0x00, 0x18, 0xE0, - 0x18, 0xC0, 0x10, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x41, - 0x41, 0x00, 0x61, 0xA0, 0x61, 0x80, 0x69, 0x40, 0x68, 0xE0, 0x60, 0xC0, 0x79, 0x03, 0x81, 0x22, - 0x71, 0x00, 0x68, 0xC0, 0x68, 0x80, 0x68, 0x60, 0x70, 0x60, 0x78, 0x60, 0x70, 0x00, 0x78, 0x01, - 0x78, 0x01, 0x80, 0x01, 0x80, 0x01, 0x88, 0x01, 0x88, 0x22, 0x88, 0x01, 0x88, 0x01, 0x90, 0x01, - 0x90, 0x02, 0x98, 0x22, 0xA8, 0x02, 0xB0, 0x02, 0xA0, 0x02, 0x90, 0x00, 0xA0, 0x01, 0xC8, 0x04, - 0xD8, 0x07, 0xC0, 0x04, 0xB8, 0x04, 0xC0, 0x05, 0xC8, 0x03, 0xD0, 0x03, 0xD0, 0x04, 0xD8, 0x06, - 0xD0, 0x03, 0xD0, 0x05, 0xE0, 0x06, 0xE0, 0x67, 0xE8, 0x06, 0xE0, 0x46, 0xF3, 0x0E, 0xFB, 0x70, - 0xE9, 0x89, 0xE9, 0x68, 0xE9, 0xC8, 0xF0, 0x26, 0xE9, 0xA8, 0xFA, 0x0B, 0xF1, 0xEB, 0xFA, 0x8D, - 0xFA, 0xAC, 0xF2, 0x0A, 0xF3, 0x0C, 0xEA, 0x69, 0xFB, 0xAC, 0xE3, 0x8B, 0x7A, 0x46, 0x21, 0x00, - 0x21, 0x00, 0x28, 0xE0, 0x29, 0x00, 0x21, 0x00, 0x19, 0x20, 0x21, 0x20, 0x31, 0x40, 0x52, 0x01, - 0x62, 0x41, 0x41, 0xE0, 0x39, 0xC0, 0x39, 0xC0, 0x39, 0xE0, 0x42, 0x00, 0x39, 0xE0, 0x3A, 0x00, - 0x42, 0x20, 0x42, 0x20, 0x29, 0xA0, 0x21, 0x60, 0x21, 0x40, 0x29, 0x61, 0x41, 0xE1, 0x4A, 0x21, - 0x4A, 0x20, 0x4A, 0x20, 0x42, 0x20, 0x31, 0xE0, 0x52, 0x41, 0x4A, 0x20, 0x39, 0xE0, 0x39, 0xE0, - 0x31, 0xA0, 0x31, 0x80, 0x42, 0x20, 0x4A, 0x60, 0x4A, 0x60, 0x52, 0xA0, 0x52, 0xE0, 0x63, 0x41, - 0x6B, 0xC3, 0x6B, 0xA3, 0x4A, 0xC0, 0x42, 0x40, 0x42, 0x40, 0x5A, 0xC0, 0x63, 0x20, 0x73, 0x60, - 0x5B, 0x40, 0x5B, 0x20, 0x53, 0x00, 0x4A, 0xC0, 0x42, 0x60, 0x31, 0xE0, 0x21, 0x40, 0x18, 0xE0, - 0x10, 0xA0, 0x08, 0x80, 0x08, 0xA0, 0x08, 0x80, 0x08, 0x60, 0x08, 0x40, 0x08, 0x60, 0x08, 0x60, - 0x30, 0xC0, 0x61, 0x80, 0x61, 0x60, 0x61, 0x40, 0x69, 0x00, 0x60, 0xE0, 0x68, 0xE2, 0x70, 0xE0, - 0x71, 0x00, 0x68, 0xC0, 0x68, 0x80, 0x60, 0x60, 0x68, 0x80, 0x70, 0x60, 0x70, 0x00, 0x78, 0x01, - 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x88, 0x01, 0x88, 0x21, 0x88, 0x01, 0x88, 0x01, 0x90, 0x01, - 0x90, 0x02, 0x90, 0x01, 0xA0, 0x01, 0xA0, 0x02, 0x98, 0x01, 0x90, 0x00, 0xA0, 0x01, 0xC8, 0x04, - 0xD0, 0x47, 0xC8, 0x25, 0xB8, 0x03, 0xC0, 0x03, 0xC8, 0x04, 0xD0, 0x45, 0xD0, 0x04, 0xD0, 0x05, - 0xD0, 0x03, 0xC8, 0x24, 0xD8, 0x26, 0xE0, 0x06, 0xE0, 0x05, 0xE0, 0x05, 0xD8, 0xE7, 0xF2, 0x4C, - 0xD8, 0xC6, 0xF1, 0x68, 0xFA, 0x0A, 0xF0, 0xA7, 0xF1, 0x68, 0xF2, 0x0A, 0xFA, 0x4C, 0xF2, 0x6B, - 0xFA, 0xEC, 0xF2, 0x29, 0xFB, 0x8D, 0xE2, 0x69, 0xF3, 0x4B, 0xDB, 0x4B, 0x59, 0x62, 0x20, 0xE0, - 0x21, 0x00, 0x20, 0xE0, 0x29, 0x00, 0x21, 0x00, 0x21, 0x20, 0x21, 0x20, 0x29, 0x20, 0x41, 0xC1, - 0x62, 0x62, 0x4A, 0x20, 0x39, 0xC0, 0x31, 0xA0, 0x31, 0xA0, 0x39, 0xC0, 0x42, 0x00, 0x4A, 0x40, - 0x42, 0x20, 0x42, 0x40, 0x42, 0x40, 0x42, 0x21, 0x41, 0xE2, 0x49, 0xC3, 0x51, 0xE3, 0x51, 0xA2, - 0x4A, 0x00, 0x4A, 0x00, 0x42, 0x20, 0x39, 0xC0, 0x41, 0xE0, 0x62, 0xA3, 0x39, 0xC0, 0x42, 0x40, - 0x4A, 0x60, 0x4A, 0x80, 0x4A, 0x60, 0x52, 0xC0, 0x5A, 0xE1, 0x52, 0xA0, 0x5B, 0x00, 0x5B, 0x40, - 0x7C, 0x07, 0x7C, 0x05, 0x5B, 0x21, 0x31, 0xE0, 0x29, 0x80, 0x39, 0xE0, 0x52, 0xA0, 0x63, 0x20, - 0x5B, 0x40, 0x5B, 0x60, 0x5B, 0x60, 0x5B, 0x40, 0x5B, 0x20, 0x52, 0xC0, 0x42, 0x20, 0x31, 0xA0, - 0x19, 0x00, 0x08, 0xA0, 0x08, 0x80, 0x08, 0x80, 0x08, 0x60, 0x08, 0x40, 0x08, 0x40, 0x08, 0x40, - 0x18, 0x80, 0x59, 0x80, 0x59, 0x60, 0x59, 0x60, 0x61, 0x20, 0x61, 0x00, 0x60, 0xE0, 0x68, 0xE0, - 0x68, 0xC0, 0x60, 0xA0, 0x60, 0xA0, 0x60, 0x80, 0x60, 0x80, 0x68, 0x60, 0x70, 0x00, 0x78, 0x01, - 0x78, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x88, 0x01, 0x88, 0x01, 0x88, 0x01, 0x88, 0x01, - 0x90, 0x01, 0x90, 0x01, 0xA0, 0x01, 0xA8, 0x02, 0xA0, 0x01, 0x90, 0x00, 0x90, 0x00, 0x98, 0x02, - 0xB0, 0x03, 0xB8, 0x03, 0xC0, 0x02, 0xC8, 0x03, 0xC8, 0x25, 0xD8, 0xA6, 0xC8, 0x03, 0xD0, 0x05, - 0xD0, 0x43, 0xC8, 0x03, 0xD8, 0x05, 0xE0, 0x06, 0xD8, 0x05, 0xE0, 0x25, 0xD8, 0x25, 0xD8, 0x66, - 0xF1, 0x88, 0xF9, 0xA9, 0xE9, 0x87, 0xE9, 0x07, 0xE8, 0xE6, 0xF2, 0x2B, 0xFA, 0x4B, 0xF2, 0x4A, - 0xF2, 0xCB, 0xFB, 0x0C, 0xEB, 0x4C, 0xF3, 0x4B, 0xE3, 0x0A, 0xD3, 0x4A, 0x62, 0x24, 0x28, 0xE0, - 0x20, 0xE0, 0x20, 0xE0, 0x21, 0x20, 0x21, 0x20, 0x21, 0x20, 0x21, 0x20, 0x21, 0x20, 0x31, 0x60, - 0x62, 0x42, 0x5A, 0x60, 0x39, 0xE0, 0x29, 0xA0, 0x29, 0x80, 0x31, 0xA0, 0x39, 0xE0, 0x42, 0x20, - 0x4A, 0x40, 0x4A, 0x60, 0x42, 0x40, 0x4A, 0x40, 0x52, 0x21, 0x49, 0xC2, 0x49, 0x62, 0x40, 0xC1, - 0x39, 0x80, 0x42, 0x00, 0x42, 0x20, 0x42, 0x00, 0x39, 0xC0, 0x5A, 0xA3, 0x4A, 0x41, 0x42, 0x40, - 0x42, 0x61, 0x42, 0x40, 0x4A, 0x80, 0x4A, 0x60, 0x52, 0xA0, 0x52, 0xC0, 0x5B, 0x00, 0x6B, 0x81, - 0x73, 0xA5, 0x7C, 0x06, 0x63, 0x43, 0x29, 0x80, 0x31, 0xA1, 0x31, 0xA0, 0x3A, 0x00, 0x4A, 0x80, - 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x20, 0x52, 0xE0, 0x4A, 0x80, - 0x39, 0xE0, 0x21, 0x40, 0x10, 0xA0, 0x08, 0x60, 0x08, 0x60, 0x08, 0x60, 0x08, 0x40, 0x00, 0x20, - 0x10, 0x60, 0x59, 0x80, 0x59, 0x80, 0x51, 0x60, 0x59, 0x00, 0x61, 0x00, 0x59, 0x00, 0x61, 0x00, - 0x60, 0xA0, 0x60, 0xA0, 0x60, 0x80, 0x58, 0x60, 0x60, 0x60, 0x60, 0x40, 0x68, 0x00, 0x70, 0x01, - 0x78, 0x01, 0x78, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x88, 0x01, 0x88, 0x01, - 0x90, 0x01, 0x90, 0x01, 0x90, 0x01, 0x98, 0x02, 0x98, 0x02, 0x90, 0x00, 0x90, 0x00, 0x98, 0x01, - 0xB0, 0x22, 0xB8, 0x23, 0xC0, 0x03, 0xC0, 0x03, 0xB8, 0x03, 0xC0, 0x24, 0xC0, 0x03, 0xD0, 0x04, - 0xD0, 0x02, 0xD0, 0xA5, 0xD8, 0x05, 0xE0, 0x05, 0xD0, 0x04, 0xD8, 0x04, 0xE0, 0xA6, 0xE9, 0x07, - 0xE9, 0x87, 0xFA, 0x29, 0xF2, 0x09, 0xF1, 0xEA, 0xE8, 0xA5, 0xF1, 0xEA, 0xF1, 0xC9, 0xF2, 0x29, - 0xF2, 0xAB, 0xF3, 0x0C, 0xF3, 0x4C, 0xF3, 0x8C, 0xEB, 0x6B, 0xBB, 0x0A, 0x39, 0x40, 0x28, 0xE0, - 0x29, 0x00, 0x21, 0x00, 0x21, 0x20, 0x21, 0x20, 0x21, 0x20, 0x21, 0x20, 0x21, 0x40, 0x21, 0x60, - 0x51, 0xE1, 0x62, 0x81, 0x42, 0x00, 0x31, 0xC0, 0x31, 0xA0, 0x31, 0xA0, 0x39, 0xC0, 0x39, 0xE0, - 0x42, 0x00, 0x4A, 0x60, 0x42, 0x60, 0x42, 0x40, 0x42, 0x20, 0x39, 0xC0, 0x39, 0x60, 0x31, 0x40, - 0x31, 0x60, 0x31, 0xA0, 0x42, 0x20, 0x42, 0x20, 0x39, 0xE0, 0x42, 0x00, 0x52, 0x40, 0x31, 0xA0, - 0x42, 0x20, 0x42, 0x20, 0x4A, 0xA0, 0x4A, 0x80, 0x4A, 0x60, 0x52, 0xA1, 0x63, 0x43, 0x6B, 0x63, - 0x73, 0xA3, 0x84, 0x47, 0x52, 0xC2, 0x31, 0xC0, 0x31, 0xE0, 0x3A, 0x00, 0x39, 0xE0, 0x3A, 0x00, - 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x21, 0x53, 0x20, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x20, - 0x5A, 0xE0, 0x4A, 0x40, 0x31, 0x60, 0x10, 0xA0, 0x08, 0x40, 0x00, 0x40, 0x08, 0x40, 0x00, 0x40, - 0x08, 0x40, 0x49, 0x40, 0x59, 0x60, 0x51, 0x60, 0x59, 0x40, 0x61, 0x00, 0x59, 0x00, 0x58, 0xE0, - 0x58, 0xE0, 0x58, 0xA0, 0x58, 0x80, 0x58, 0x40, 0x58, 0x20, 0x60, 0x20, 0x68, 0x20, 0x70, 0x20, - 0x70, 0x00, 0x78, 0x00, 0x78, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x88, 0x01, 0x88, 0x01, - 0x88, 0x01, 0x88, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x01, 0x98, 0x00, 0x98, 0x00, 0xA0, 0x22, - 0xA8, 0x01, 0xB0, 0x02, 0xB8, 0x03, 0xC0, 0x04, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x02, - 0xB8, 0x22, 0xC8, 0xE5, 0xD0, 0x25, 0xD0, 0x04, 0xD8, 0x04, 0xE0, 0x24, 0xD8, 0x24, 0xE0, 0x65, - 0xF1, 0xA8, 0xEA, 0x08, 0xEA, 0x09, 0xF2, 0x0A, 0xF1, 0x67, 0xE9, 0x88, 0xE9, 0x88, 0xFA, 0x6A, - 0xF2, 0x8A, 0xF3, 0x0C, 0xF3, 0x4C, 0xF3, 0xAD, 0xF3, 0xCD, 0x92, 0x87, 0x29, 0x00, 0x29, 0x00, - 0x29, 0x00, 0x21, 0x00, 0x21, 0x20, 0x21, 0x20, 0x21, 0x20, 0x29, 0x20, 0x21, 0x40, 0x21, 0x60, - 0x39, 0xA1, 0x6A, 0x82, 0x4A, 0x20, 0x39, 0xE0, 0x39, 0xA0, 0x31, 0xA0, 0x39, 0xC0, 0x31, 0xC0, - 0x39, 0xE0, 0x42, 0x00, 0x42, 0x40, 0x42, 0x60, 0x42, 0x40, 0x3A, 0x20, 0x3A, 0x01, 0x39, 0xC0, - 0x31, 0xA0, 0x31, 0xC1, 0x31, 0xC0, 0x42, 0x20, 0x42, 0x41, 0x39, 0xE0, 0x52, 0x61, 0x39, 0xA0, - 0x31, 0xE0, 0x42, 0x20, 0x42, 0x60, 0x4A, 0xA0, 0x4A, 0x80, 0x4A, 0x80, 0x63, 0x42, 0x63, 0x41, - 0x73, 0xE5, 0x7C, 0x05, 0x63, 0x42, 0x3A, 0x00, 0x31, 0xE0, 0x3A, 0x00, 0x3A, 0x20, 0x42, 0x20, - 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x40, - 0x63, 0x40, 0x63, 0x20, 0x52, 0x80, 0x31, 0x60, 0x10, 0x60, 0x00, 0x20, 0x00, 0x40, 0x00, 0x40, - 0x00, 0x20, 0x30, 0xE0, 0x59, 0x80, 0x51, 0x40, 0x59, 0x40, 0x61, 0x00, 0x59, 0x00, 0x58, 0xE0, - 0x58, 0xC0, 0x58, 0xA0, 0x58, 0x80, 0x60, 0x60, 0x60, 0x20, 0x60, 0x00, 0x68, 0x20, 0x68, 0x00, - 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, - 0x80, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x02, 0x98, 0x01, 0x98, 0x00, 0x90, 0x00, 0x90, 0x01, - 0xA8, 0x03, 0xA8, 0x02, 0xB0, 0x02, 0xB8, 0x03, 0xC0, 0x23, 0xC0, 0x03, 0xC8, 0x03, 0xB0, 0x00, - 0xB8, 0x02, 0xD8, 0x04, 0xD0, 0x04, 0xD8, 0x04, 0xD8, 0x04, 0xD8, 0x84, 0xD8, 0xA5, 0xE0, 0xE6, - 0xE1, 0x06, 0xE9, 0xE7, 0xE9, 0xE8, 0xF1, 0xE8, 0xE9, 0xE9, 0xE9, 0xA7, 0xF1, 0xC8, 0xEA, 0x48, - 0xEA, 0x29, 0xEA, 0xEA, 0xEB, 0x2B, 0xEB, 0x6C, 0xDB, 0x8C, 0x61, 0xE3, 0x31, 0x40, 0x29, 0x20, - 0x29, 0x20, 0x29, 0x20, 0x29, 0x40, 0x29, 0x40, 0x29, 0x20, 0x29, 0x40, 0x29, 0x40, 0x21, 0x40, - 0x31, 0xA1, 0x6A, 0x82, 0x52, 0x40, 0x42, 0x00, 0x41, 0xE0, 0x39, 0xC0, 0x39, 0xC0, 0x31, 0xC0, - 0x39, 0xE0, 0x39, 0xE0, 0x3A, 0x00, 0x42, 0x20, 0x42, 0x40, 0x42, 0x40, 0x42, 0x20, 0x39, 0xE0, - 0x32, 0x00, 0x29, 0xC0, 0x31, 0xE0, 0x39, 0xE0, 0x3A, 0x20, 0x4A, 0x60, 0x4A, 0x00, 0x52, 0x61, - 0x39, 0xC0, 0x3A, 0x00, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xC0, 0x52, 0xE0, 0x73, 0xA2, - 0x73, 0xC5, 0x7C, 0x06, 0x6B, 0xA3, 0x42, 0x20, 0x3A, 0x01, 0x42, 0x20, 0x42, 0x20, 0x4A, 0x60, - 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x60, 0x5B, 0x60, 0x5B, 0x40, 0x53, 0x20, 0x53, 0x20, 0x5B, 0x20, - 0x63, 0x40, 0x6B, 0x60, 0x63, 0x20, 0x4A, 0x40, 0x21, 0x20, 0x08, 0x60, 0x08, 0x40, 0x00, 0x40, - 0x00, 0x20, 0x18, 0x80, 0x51, 0x80, 0x59, 0x40, 0x51, 0x20, 0x59, 0x00, 0x59, 0x00, 0x59, 0x00, - 0x50, 0xC0, 0x58, 0xA0, 0x58, 0x80, 0x60, 0x80, 0x60, 0x40, 0x58, 0x20, 0x60, 0x20, 0x60, 0x00, - 0x68, 0x00, 0x70, 0x20, 0x70, 0x00, 0x70, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x01, 0x80, 0x01, - 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x88, 0x01, 0x88, 0x01, 0x90, 0x00, 0x98, 0x01, 0xA0, 0x02, - 0xA8, 0x02, 0xA8, 0x02, 0xA8, 0x02, 0xB0, 0x02, 0xC0, 0x03, 0xC8, 0x04, 0xC8, 0x03, 0xB8, 0x00, - 0xC8, 0x03, 0xD0, 0x04, 0xC8, 0x04, 0xD0, 0x04, 0xD0, 0x03, 0xD8, 0x64, 0xE0, 0xA5, 0xD9, 0x26, - 0xE9, 0x46, 0xE1, 0xC6, 0xE1, 0x87, 0xF2, 0x08, 0xEA, 0x09, 0xE9, 0xC7, 0xE9, 0x88, 0xEA, 0x48, - 0xEA, 0x28, 0xEB, 0x0A, 0xEB, 0x0A, 0xE3, 0x2A, 0xCB, 0x8B, 0x39, 0x40, 0x29, 0x00, 0x31, 0x20, - 0x29, 0x40, 0x31, 0x40, 0x29, 0x60, 0x29, 0x60, 0x29, 0x60, 0x29, 0x60, 0x29, 0x60, 0x29, 0x60, - 0x31, 0xA0, 0x6A, 0x42, 0x52, 0x20, 0x4A, 0x20, 0x4A, 0x20, 0x3A, 0x00, 0x41, 0xE0, 0x3A, 0x00, - 0x39, 0xE0, 0x42, 0x00, 0x42, 0x00, 0x3A, 0x00, 0x42, 0x20, 0x42, 0x20, 0x3A, 0x00, 0x42, 0x40, - 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x42, 0x40, 0x42, 0x20, 0x52, 0x60, - 0x39, 0xE0, 0x42, 0x20, 0x4A, 0x60, 0x4A, 0xA0, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x80, 0x6B, 0x84, - 0x7B, 0xE5, 0x94, 0x88, 0x63, 0x02, 0x4A, 0x40, 0x4A, 0x60, 0x4A, 0x80, 0x4A, 0x60, 0x4A, 0x60, - 0x63, 0x60, 0x5B, 0x60, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, - 0x5B, 0x40, 0x63, 0x40, 0x6B, 0x60, 0x63, 0x00, 0x42, 0x00, 0x18, 0xE0, 0x08, 0x40, 0x08, 0x40, - 0x00, 0x20, 0x08, 0x41, 0x49, 0x60, 0x51, 0x20, 0x51, 0x40, 0x59, 0x20, 0x51, 0x00, 0x50, 0xE0, - 0x58, 0xE0, 0x58, 0xA0, 0x50, 0x80, 0x58, 0x80, 0x58, 0x60, 0x58, 0x20, 0x60, 0x40, 0x68, 0x20, - 0x68, 0x20, 0x70, 0x40, 0x70, 0x20, 0x70, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x80, 0x01, - 0x80, 0x01, 0x80, 0x00, 0x88, 0x01, 0x88, 0x01, 0x88, 0x01, 0x90, 0x01, 0x90, 0x01, 0x98, 0x02, - 0xA0, 0x01, 0xB0, 0x03, 0xB0, 0x02, 0xB0, 0x01, 0xB8, 0x03, 0xC8, 0x04, 0xC0, 0x02, 0xC0, 0x22, - 0xC8, 0x04, 0xC8, 0x24, 0xC8, 0x45, 0xC8, 0x44, 0xC8, 0x43, 0xD8, 0x84, 0xD8, 0xC5, 0xE1, 0x06, - 0xE9, 0x87, 0xE1, 0xC6, 0xE9, 0xA7, 0xEA, 0x08, 0xE9, 0xE8, 0xE9, 0xE7, 0xE1, 0x67, 0xEA, 0x08, - 0xEA, 0x27, 0xE3, 0x09, 0xE2, 0xC8, 0xDB, 0x09, 0xAA, 0x86, 0x31, 0x80, 0x39, 0x40, 0x39, 0x40, - 0x31, 0x60, 0x31, 0x60, 0x31, 0x60, 0x31, 0x60, 0x29, 0x80, 0x29, 0x80, 0x29, 0x80, 0x31, 0x80, - 0x31, 0xC0, 0x6A, 0x22, 0x52, 0x20, 0x42, 0x20, 0x4A, 0x60, 0x3A, 0x00, 0x41, 0xE0, 0x42, 0x00, - 0x42, 0x20, 0x42, 0x00, 0x42, 0x20, 0x42, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, - 0x3A, 0x20, 0x42, 0x20, 0x42, 0x40, 0x42, 0x60, 0x4A, 0x60, 0x4A, 0x40, 0x5A, 0xE2, 0x52, 0x40, - 0x39, 0xE0, 0x42, 0x00, 0x42, 0x60, 0x4A, 0xC0, 0x4A, 0xA0, 0x52, 0xC0, 0x4A, 0x80, 0x63, 0x22, - 0x73, 0xA4, 0x84, 0x26, 0x7C, 0x05, 0x4A, 0x60, 0x52, 0xA1, 0x4A, 0x80, 0x52, 0xA0, 0x52, 0xC1, - 0x5B, 0x40, 0x63, 0x40, 0x63, 0x40, 0x5B, 0x40, 0x5B, 0x60, 0x63, 0x60, 0x5B, 0x60, 0x5B, 0x60, - 0x63, 0x40, 0x63, 0x40, 0x63, 0x40, 0x63, 0x20, 0x5A, 0xA0, 0x39, 0xC0, 0x21, 0x00, 0x08, 0x40, - 0x00, 0x40, 0x10, 0x60, 0x30, 0xC0, 0x49, 0x40, 0x51, 0x40, 0x51, 0x20, 0x51, 0x00, 0x59, 0x00, - 0x50, 0xE0, 0x58, 0xE0, 0x58, 0xC0, 0x50, 0x80, 0x58, 0x60, 0x58, 0x40, 0x60, 0x40, 0x68, 0x40, - 0x60, 0x40, 0x68, 0x40, 0x68, 0x40, 0x70, 0x20, 0x70, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, - 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0x80, 0x00, 0x88, 0x01, 0x90, 0x01, 0x90, 0x01, 0x98, 0x01, - 0x98, 0x01, 0xA0, 0x02, 0xA8, 0x02, 0xB0, 0x02, 0xB8, 0x03, 0xC0, 0x04, 0xC0, 0x03, 0xC0, 0x02, - 0xC0, 0x03, 0xC0, 0x43, 0xC8, 0x84, 0xC0, 0x03, 0xC8, 0x24, 0xD0, 0x84, 0xD0, 0xA5, 0xD8, 0xA5, - 0xD9, 0x26, 0xE1, 0xA7, 0xE1, 0xC7, 0xEA, 0x07, 0xEA, 0x08, 0xE9, 0xE8, 0xEA, 0x08, 0xEA, 0x48, - 0xE2, 0x68, 0xE2, 0xC8, 0xDB, 0x09, 0xD3, 0x09, 0x61, 0xC1, 0x39, 0x60, 0x41, 0x60, 0x39, 0x80, - 0x39, 0x80, 0x39, 0x80, 0x31, 0x80, 0x31, 0x80, 0x31, 0x80, 0x31, 0xA0, 0x31, 0xA0, 0x31, 0xA0, - 0x41, 0xC0, 0x62, 0xA1, 0x4A, 0x20, 0x39, 0xC0, 0x4A, 0x41, 0x4A, 0x60, 0x39, 0xE0, 0x39, 0xE0, - 0x39, 0xE0, 0x42, 0x20, 0x4A, 0x40, 0x4A, 0x40, 0x42, 0x40, 0x42, 0x40, 0x42, 0x40, 0x3A, 0x40, - 0x42, 0x40, 0x42, 0x40, 0x42, 0x40, 0x4A, 0x60, 0x4A, 0x80, 0x52, 0xE3, 0x5B, 0x23, 0x4A, 0xC0, - 0x4A, 0x60, 0x31, 0xC0, 0x3A, 0x00, 0x42, 0x40, 0x5A, 0xE1, 0x53, 0x00, 0x52, 0xC0, 0x62, 0xE0, - 0x63, 0x22, 0x8C, 0x47, 0x84, 0x47, 0x52, 0xC1, 0x52, 0xA0, 0x5A, 0xE0, 0x52, 0xC0, 0x5A, 0xE0, - 0x52, 0xC0, 0x5B, 0x00, 0x5B, 0x40, 0x63, 0x60, 0x63, 0x60, 0x63, 0x60, 0x63, 0x60, 0x63, 0x60, - 0x63, 0x60, 0x5B, 0x40, 0x5B, 0x20, 0x63, 0x40, 0x63, 0x20, 0x5A, 0xA0, 0x41, 0xE1, 0x20, 0xE0, - 0x08, 0x40, 0x08, 0x40, 0x18, 0x60, 0x51, 0x81, 0x49, 0x20, 0x49, 0x20, 0x49, 0x00, 0x51, 0x00, - 0x50, 0xE0, 0x50, 0xE0, 0x50, 0xC0, 0x50, 0xA0, 0x58, 0x60, 0x58, 0x40, 0x60, 0x40, 0x60, 0x40, - 0x60, 0x40, 0x60, 0x40, 0x68, 0x40, 0x68, 0x20, 0x70, 0x20, 0x70, 0x00, 0x78, 0x01, 0x78, 0x01, - 0x78, 0x00, 0x80, 0x00, 0x80, 0x01, 0x80, 0x01, 0x88, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x21, - 0x98, 0x22, 0xA0, 0x02, 0xA8, 0x02, 0xB0, 0x02, 0xB0, 0x03, 0xB8, 0x03, 0xB8, 0x03, 0xC0, 0x02, - 0xC8, 0x03, 0xC8, 0x64, 0xD0, 0xE5, 0xC8, 0x44, 0xD0, 0x85, 0xD0, 0xA4, 0xD0, 0xC4, 0xD0, 0xA5, - 0xD9, 0x26, 0xE1, 0x86, 0xD9, 0xA6, 0xE1, 0xE7, 0xE1, 0xC7, 0xE1, 0xC7, 0xE2, 0x28, 0xEA, 0x89, - 0xE2, 0x68, 0xDA, 0xC9, 0xDA, 0xE9, 0xAA, 0xC7, 0x51, 0x80, 0x41, 0x80, 0x41, 0x80, 0x41, 0xA0, - 0x39, 0xA0, 0x39, 0xC0, 0x39, 0xC0, 0x39, 0xA0, 0x39, 0xC0, 0x39, 0xC0, 0x39, 0xC0, 0x39, 0xC0, - 0x41, 0xE0, 0x62, 0xA1, 0x52, 0x40, 0x39, 0xC0, 0x39, 0xE0, 0x4A, 0x60, 0x4A, 0x40, 0x42, 0x00, - 0x3A, 0x00, 0x3A, 0x00, 0x42, 0x20, 0x42, 0x40, 0x42, 0x40, 0x4A, 0x60, 0x42, 0x60, 0x42, 0x60, - 0x42, 0x40, 0x42, 0x40, 0x42, 0x60, 0x5A, 0xC0, 0x5A, 0xC1, 0x63, 0x25, 0x5B, 0x04, 0x4A, 0xC0, - 0x52, 0xA0, 0x39, 0xC0, 0x3A, 0x00, 0x42, 0x20, 0x42, 0x60, 0x52, 0xE0, 0x5A, 0xE0, 0x5A, 0xC0, - 0x63, 0x21, 0x73, 0xC4, 0x7B, 0xC4, 0x5A, 0xE1, 0x52, 0xC0, 0x5B, 0x01, 0x5B, 0x01, 0x5B, 0x21, - 0x39, 0xE0, 0x42, 0x40, 0x52, 0xA0, 0x5B, 0x00, 0x63, 0x40, 0x63, 0x60, 0x63, 0x60, 0x63, 0x60, - 0x63, 0x80, 0x5B, 0x60, 0x5B, 0x40, 0x63, 0x40, 0x63, 0x40, 0x6B, 0x20, 0x5A, 0xA0, 0x39, 0xC0, - 0x18, 0xC0, 0x00, 0x40, 0x08, 0x40, 0x39, 0x00, 0x51, 0x40, 0x49, 0x20, 0x49, 0x20, 0x48, 0xE0, - 0x51, 0x00, 0x50, 0xE0, 0x50, 0xC0, 0x50, 0xA0, 0x50, 0x80, 0x58, 0x60, 0x58, 0x60, 0x60, 0x40, - 0x58, 0x20, 0x58, 0x20, 0x60, 0x20, 0x60, 0x20, 0x68, 0x20, 0x70, 0x20, 0x70, 0x00, 0x70, 0x01, - 0x78, 0x00, 0x80, 0x00, 0x78, 0x00, 0x80, 0x01, 0x80, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x41, - 0xA0, 0x22, 0x98, 0x01, 0xA0, 0x02, 0xA8, 0x02, 0xB0, 0x03, 0xB0, 0x03, 0xB8, 0x03, 0xB8, 0x02, - 0xB8, 0x03, 0xC8, 0xA4, 0xD0, 0xE5, 0xC8, 0x64, 0xC8, 0x64, 0xC8, 0x84, 0xC8, 0xA4, 0xD8, 0xE5, - 0xD9, 0x45, 0xD9, 0x66, 0xD9, 0xA7, 0xE1, 0xC7, 0xE1, 0xC7, 0xE2, 0x08, 0xE2, 0x48, 0xE2, 0xC9, - 0xE2, 0xAA, 0xDA, 0xE9, 0xD3, 0x2A, 0x72, 0x23, 0x49, 0x80, 0x49, 0xC0, 0x41, 0x80, 0x41, 0xE0, - 0x41, 0xE0, 0x41, 0xE0, 0x41, 0xE0, 0x39, 0xE0, 0x39, 0xE0, 0x39, 0xE0, 0x39, 0xE0, 0x39, 0xE0, - 0x4A, 0x21, 0x62, 0xA1, 0x52, 0x60, 0x39, 0xE0, 0x39, 0xC0, 0x42, 0x00, 0x4A, 0x61, 0x4A, 0x60, - 0x42, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x20, 0x42, 0x20, 0x4A, 0x60, 0x4A, 0x80, 0x4A, 0x40, - 0x4A, 0x40, 0x42, 0x60, 0x4A, 0x80, 0x63, 0x21, 0x6B, 0x23, 0x7B, 0x67, 0x62, 0xE5, 0x4A, 0xC0, - 0x52, 0xE0, 0x4A, 0x60, 0x39, 0xE0, 0x3A, 0x00, 0x3A, 0x20, 0x4A, 0x80, 0x5B, 0x01, 0x5B, 0x00, - 0x63, 0x21, 0x63, 0x41, 0x6B, 0x82, 0x63, 0x21, 0x63, 0x21, 0x63, 0x21, 0x63, 0x41, 0x63, 0x21, - 0x29, 0x60, 0x31, 0x80, 0x39, 0xC0, 0x42, 0x20, 0x52, 0xC0, 0x63, 0x40, 0x6B, 0x60, 0x6B, 0x80, - 0x63, 0x80, 0x63, 0x80, 0x63, 0x60, 0x63, 0x60, 0x63, 0x40, 0x63, 0x40, 0x63, 0x00, 0x52, 0x60, - 0x31, 0x40, 0x10, 0xA0, 0x08, 0x61, 0x18, 0x60, 0x49, 0x40, 0x49, 0x20, 0x49, 0x20, 0x49, 0x00, - 0x49, 0x00, 0x50, 0xE0, 0x50, 0xE0, 0x50, 0xC0, 0x50, 0xA0, 0x50, 0x80, 0x58, 0x60, 0x58, 0x60, - 0x60, 0x20, 0x60, 0x40, 0x60, 0x40, 0x60, 0x40, 0x68, 0x60, 0x68, 0x40, 0x70, 0x20, 0x70, 0x01, - 0x78, 0x20, 0x78, 0x20, 0x78, 0x00, 0x78, 0x00, 0x80, 0x01, 0x80, 0x01, 0x88, 0x01, 0x90, 0x21, - 0x98, 0x42, 0x98, 0x01, 0xA0, 0x02, 0xA8, 0x02, 0xA8, 0x02, 0xB0, 0x02, 0xB8, 0x02, 0xB8, 0x02, - 0xC0, 0x23, 0xC8, 0xA4, 0xC8, 0xA4, 0xC8, 0xA4, 0xD0, 0xC5, 0xD0, 0xC5, 0xC0, 0x63, 0xC8, 0xC4, - 0xD9, 0x86, 0xD9, 0x86, 0xD9, 0xA7, 0xE1, 0xC8, 0xE2, 0x08, 0xE2, 0x49, 0xDA, 0x68, 0xDA, 0xA8, - 0xDA, 0xCA, 0xDB, 0x0A, 0xA2, 0xE7, 0x49, 0xC0, 0x49, 0xC0, 0x49, 0xE0, 0x49, 0xC0, 0x42, 0x00, - 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, - 0x52, 0x41, 0x62, 0xA1, 0x4A, 0x40, 0x3A, 0x00, 0x39, 0xE0, 0x39, 0xE0, 0x42, 0x00, 0x52, 0xA1, - 0x4A, 0x60, 0x42, 0x40, 0x42, 0x40, 0x42, 0x20, 0x3A, 0x20, 0x42, 0x40, 0x4A, 0x60, 0x4A, 0x60, - 0x4A, 0x60, 0x4A, 0x80, 0x52, 0xA0, 0x5B, 0x00, 0x73, 0x42, 0x83, 0x87, 0x6B, 0x25, 0x53, 0x01, - 0x5B, 0x00, 0x5A, 0xE0, 0x39, 0xE0, 0x3A, 0x20, 0x42, 0x40, 0x42, 0x20, 0x52, 0xC0, 0x52, 0xE0, - 0x63, 0x21, 0x63, 0x00, 0x6B, 0x61, 0x63, 0x41, 0x63, 0x41, 0x63, 0x41, 0x63, 0x62, 0x63, 0x41, - 0x29, 0x60, 0x29, 0x40, 0x29, 0x60, 0x39, 0xC0, 0x4A, 0x60, 0x63, 0x00, 0x6B, 0x80, 0x73, 0xA0, - 0x73, 0xC0, 0x73, 0xA0, 0x6B, 0xA0, 0x6B, 0x80, 0x63, 0x60, 0x6B, 0x40, 0x6B, 0x20, 0x62, 0xE0, - 0x4A, 0x00, 0x29, 0x20, 0x10, 0x80, 0x08, 0x60, 0x29, 0x00, 0x49, 0x60, 0x49, 0x20, 0x49, 0x20, - 0x49, 0x00, 0x49, 0x00, 0x50, 0xE0, 0x50, 0xC0, 0x50, 0xC0, 0x50, 0xA0, 0x58, 0x80, 0x58, 0x80, - 0x60, 0x60, 0x60, 0x60, 0x60, 0x80, 0x68, 0x80, 0x68, 0x80, 0x68, 0x60, 0x68, 0x40, 0x70, 0x20, - 0x68, 0x40, 0x70, 0x60, 0x78, 0x80, 0x80, 0x60, 0x80, 0x40, 0x80, 0x00, 0x88, 0x00, 0x90, 0x01, - 0x98, 0x21, 0x98, 0x01, 0x98, 0x02, 0xA0, 0x02, 0xA8, 0x02, 0xA8, 0x22, 0xB0, 0x22, 0xB8, 0x42, - 0xB8, 0x42, 0xC8, 0xA4, 0xC8, 0xA4, 0xC8, 0xC5, 0xC8, 0xA5, 0xD0, 0xC5, 0xC8, 0x84, 0xD1, 0x25, - 0xDA, 0x07, 0xD9, 0xA6, 0xD9, 0x87, 0xE1, 0xA7, 0xDA, 0x08, 0xDA, 0x89, 0xDA, 0x88, 0xDA, 0xA9, - 0xDA, 0xEA, 0xC3, 0x09, 0x62, 0x02, 0x51, 0xE0, 0x49, 0xE0, 0x51, 0xE0, 0x52, 0x00, 0x4A, 0x20, - 0x4A, 0x20, 0x4A, 0x20, 0x4A, 0x20, 0x4A, 0x40, 0x4A, 0x40, 0x4A, 0x40, 0x4A, 0x20, 0x4A, 0x20, - 0x52, 0x41, 0x6A, 0xC2, 0x4A, 0x40, 0x39, 0xE0, 0x3A, 0x00, 0x39, 0xE0, 0x39, 0xE0, 0x4A, 0x60, - 0x52, 0xA1, 0x42, 0x40, 0x42, 0x20, 0x42, 0x60, 0x42, 0x40, 0x3A, 0x20, 0x42, 0x40, 0x4A, 0x80, - 0x4A, 0x80, 0x4A, 0x80, 0x52, 0xA0, 0x52, 0xA0, 0x6B, 0x00, 0x7B, 0x43, 0x73, 0x23, 0x5B, 0x41, - 0x5B, 0x20, 0x52, 0xE0, 0x42, 0x20, 0x3A, 0x00, 0x3A, 0x40, 0x42, 0x20, 0x52, 0xC1, 0x4A, 0xC0, - 0x63, 0x21, 0x6B, 0x61, 0x6B, 0x81, 0x63, 0x61, 0x63, 0x61, 0x6B, 0x62, 0x6B, 0x82, 0x6B, 0x82, - 0x29, 0x80, 0x29, 0x60, 0x29, 0x60, 0x39, 0xA0, 0x4A, 0x40, 0x5B, 0x00, 0x6B, 0x80, 0x73, 0xE0, - 0x7B, 0xE0, 0x7C, 0x00, 0x7B, 0xE0, 0x73, 0xC0, 0x6B, 0xA0, 0x6B, 0x60, 0x6B, 0x40, 0x63, 0x20, - 0x62, 0xC0, 0x52, 0x00, 0x31, 0x41, 0x18, 0xC1, 0x18, 0x80, 0x41, 0x40, 0x49, 0x40, 0x41, 0x00, - 0x49, 0x00, 0x49, 0x00, 0x49, 0x00, 0x50, 0xE0, 0x50, 0xC0, 0x50, 0xC0, 0x50, 0xC0, 0x50, 0xA0, - 0x58, 0x80, 0x60, 0x80, 0x60, 0x80, 0x60, 0xA0, 0x60, 0x80, 0x60, 0x80, 0x68, 0x60, 0x68, 0x40, - 0x68, 0x60, 0x70, 0x80, 0x78, 0xA0, 0x78, 0xA0, 0x80, 0x80, 0x80, 0x40, 0x88, 0x40, 0x90, 0x41, - 0x90, 0x41, 0x90, 0x21, 0x98, 0x01, 0xA0, 0x22, 0xA8, 0x42, 0xA8, 0x82, 0xB0, 0xA2, 0xB8, 0xC2, - 0xC0, 0xE3, 0xC0, 0xC4, 0xC0, 0xA4, 0xC0, 0xC4, 0xC8, 0xC4, 0xC8, 0xC5, 0xC8, 0xE5, 0xD1, 0x46, - 0xD2, 0x07, 0xD1, 0xA6, 0xD9, 0xA7, 0xD9, 0xC8, 0xD2, 0x08, 0xDA, 0x89, 0xDA, 0xC9, 0xDA, 0xEA, - 0xD3, 0x0A, 0x82, 0xA4, 0x51, 0xE0, 0x5A, 0x00, 0x4A, 0x20, 0x5A, 0x00, 0x52, 0x20, 0x4A, 0x40, - 0x52, 0x40, 0x52, 0x40, 0x52, 0x60, 0x52, 0x60, 0x52, 0x60, 0x52, 0x60, 0x4A, 0x60, 0x4A, 0x60, - 0x52, 0x61, 0x6A, 0xA1, 0x4A, 0x40, 0x3A, 0x00, 0x39, 0xE0, 0x3A, 0x00, 0x39, 0xE0, 0x3A, 0x20, - 0x5A, 0xC1, 0x4A, 0x60, 0x42, 0x40, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x40, 0x3A, 0x40, 0x42, 0x60, - 0x52, 0xC0, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x80, 0x63, 0x00, 0x73, 0x20, 0x6A, 0xE1, 0x5A, 0xE0, - 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xA0, 0x39, 0xE0, 0x3A, 0x00, 0x42, 0x40, 0x4A, 0x80, 0x52, 0xA0, - 0x5B, 0x01, 0x6B, 0x82, 0x73, 0xA2, 0x6B, 0x81, 0x6B, 0x82, 0x6B, 0xA2, 0x6B, 0x82, 0x6B, 0xA2, - 0x31, 0xA0, 0x31, 0x80, 0x31, 0x80, 0x39, 0xC0, 0x4A, 0x40, 0x5A, 0xE0, 0x6B, 0x60, 0x73, 0xC0, - 0x7C, 0x00, 0x84, 0x20, 0x84, 0x20, 0x84, 0x20, 0x7C, 0x00, 0x73, 0xE0, 0x73, 0xA0, 0x73, 0x60, - 0x6B, 0x40, 0x73, 0x02, 0x72, 0xA5, 0x49, 0xE4, 0x29, 0x01, 0x30, 0xE0, 0x49, 0x40, 0x49, 0x40, - 0x41, 0x20, 0x49, 0x20, 0x49, 0x00, 0x51, 0x00, 0x50, 0xE0, 0x50, 0xE0, 0x50, 0xC0, 0x50, 0xA0, - 0x50, 0xA0, 0x58, 0xA0, 0x60, 0xA0, 0x60, 0xA0, 0x60, 0xA0, 0x60, 0xA0, 0x60, 0x80, 0x68, 0x80, - 0x68, 0x80, 0x68, 0xA0, 0x70, 0x80, 0x70, 0x80, 0x78, 0x80, 0x80, 0x80, 0x88, 0x80, 0x88, 0xA1, - 0x90, 0x80, 0x90, 0x41, 0x90, 0x21, 0xA0, 0x41, 0xA8, 0xA2, 0xA8, 0xC2, 0xB1, 0x02, 0xB9, 0x63, - 0xC1, 0x63, 0xC1, 0x24, 0xC1, 0x24, 0xC9, 0x45, 0xC1, 0x25, 0xC0, 0xC4, 0xC9, 0x05, 0xC9, 0x85, - 0xC9, 0xA6, 0xD1, 0xA6, 0xD1, 0xC7, 0xD2, 0x08, 0xD2, 0x48, 0xD2, 0xA9, 0xD2, 0xEA, 0xCA, 0xEA, - 0xA2, 0xE6, 0x62, 0x21, 0x5A, 0x20, 0x62, 0x20, 0x52, 0x60, 0x5A, 0x60, 0x5A, 0x40, 0x52, 0x60, - 0x52, 0x80, 0x52, 0x80, 0x52, 0x80, 0x52, 0x81, 0x52, 0x81, 0x52, 0x81, 0x52, 0x81, 0x52, 0x80, - 0x5A, 0xA1, 0x6A, 0xA1, 0x4A, 0x40, 0x42, 0x20, 0x3A, 0x00, 0x39, 0xE0, 0x39, 0xE0, 0x3A, 0x00, - 0x4A, 0x60, 0x52, 0xA1, 0x4A, 0x80, 0x42, 0x40, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x40, - 0x4A, 0xA0, 0x4A, 0x60, 0x4A, 0x60, 0x4A, 0xA0, 0x63, 0x20, 0x73, 0x40, 0x73, 0x20, 0x5A, 0xC0, - 0x4A, 0x80, 0x4A, 0xC0, 0x52, 0xE0, 0x3A, 0x20, 0x39, 0xE0, 0x42, 0x20, 0x42, 0x20, 0x42, 0x40, - 0x4A, 0x80, 0x5B, 0x00, 0x63, 0x60, 0x6B, 0x81, 0x73, 0xA2, 0x73, 0xC2, 0x73, 0xC2, 0x73, 0xC2, - 0x31, 0xC0, 0x31, 0xA0, 0x31, 0xA0, 0x39, 0xC0, 0x4A, 0x40, 0x52, 0xE0, 0x63, 0x40, 0x6B, 0x80, - 0x73, 0xE0, 0x84, 0x40, 0x84, 0x40, 0x8C, 0x60, 0x8C, 0x80, 0x8C, 0x80, 0x84, 0x20, 0x83, 0xE0, - 0x7B, 0xC0, 0x83, 0x83, 0x8B, 0x46, 0x83, 0x27, 0x5A, 0x65, 0x31, 0x21, 0x39, 0x20, 0x49, 0x40, - 0x49, 0x20, 0x49, 0x20, 0x51, 0x20, 0x51, 0x00, 0x50, 0xE0, 0x50, 0xE0, 0x50, 0xE0, 0x50, 0xC0, - 0x50, 0xC0, 0x58, 0xC0, 0x58, 0xA0, 0x58, 0xA0, 0x58, 0xA0, 0x58, 0xA0, 0x60, 0xA0, 0x60, 0x80, - 0x68, 0x80, 0x70, 0xA0, 0x70, 0xA0, 0x70, 0xA0, 0x70, 0x80, 0x78, 0x80, 0x80, 0xA0, 0x88, 0xE0, - 0x88, 0xA0, 0x88, 0x61, 0x90, 0x20, 0x98, 0x41, 0xA8, 0xC2, 0xA9, 0x01, 0xB1, 0x42, 0xB9, 0xC3, - 0xB9, 0xA3, 0xB9, 0x43, 0xB9, 0x23, 0xC1, 0x85, 0xC1, 0x44, 0xC9, 0x25, 0xC9, 0x66, 0xC9, 0xC5, - 0xD1, 0xA6, 0xD1, 0xC7, 0xC9, 0xE7, 0xD2, 0x28, 0xD2, 0x48, 0xD2, 0xA9, 0xCA, 0xEA, 0xBA, 0xE9, - 0x72, 0x42, 0x62, 0x20, 0x62, 0x40, 0x62, 0x60, 0x62, 0x60, 0x52, 0xC0, 0x5A, 0xA1, 0x5A, 0xA1, - 0x5A, 0xA1, 0x5A, 0xA1, 0x5A, 0xA1, 0x5A, 0xC1, 0x5A, 0xC1, 0x5A, 0xC1, 0x5A, 0xC1, 0x5A, 0xC1, - 0x5A, 0xC1, 0x6A, 0xC2, 0x4A, 0x40, 0x39, 0xE0, 0x39, 0xE0, 0x32, 0x00, 0x39, 0xE0, 0x32, 0x00, - 0x42, 0x20, 0x52, 0xA1, 0x52, 0xA1, 0x42, 0x60, 0x42, 0x60, 0x4A, 0x80, 0x42, 0x80, 0x42, 0x80, - 0x42, 0x80, 0x52, 0xA0, 0x52, 0x80, 0x4A, 0xA0, 0x5B, 0x00, 0x73, 0x61, 0x7B, 0x61, 0x63, 0x00, - 0x52, 0xC1, 0x42, 0x60, 0x42, 0x60, 0x42, 0x20, 0x39, 0xC0, 0x3A, 0x20, 0x4A, 0x81, 0x4A, 0x40, - 0x52, 0x80, 0x5A, 0xE0, 0x5B, 0x20, 0x63, 0x60, 0x6B, 0xA1, 0x73, 0xE2, 0x7B, 0xE2, 0x7B, 0xE2, - 0x32, 0x00, 0x39, 0xE0, 0x39, 0xC1, 0x41, 0xE1, 0x4A, 0x40, 0x52, 0xE0, 0x63, 0x40, 0x6B, 0xA0, - 0x73, 0xC0, 0x7C, 0x20, 0x84, 0x60, 0x84, 0x80, 0x8C, 0xA0, 0x94, 0xA0, 0x94, 0xA0, 0x94, 0x60, - 0x8B, 0xE0, 0x83, 0xA1, 0x83, 0x83, 0x8B, 0x85, 0x7B, 0x06, 0x5A, 0x04, 0x39, 0x00, 0x41, 0x60, - 0x49, 0x40, 0x49, 0x20, 0x49, 0x20, 0x49, 0x00, 0x51, 0x00, 0x51, 0x00, 0x50, 0xE0, 0x50, 0xE0, - 0x50, 0xC0, 0x58, 0xC0, 0x58, 0xC0, 0x58, 0xC0, 0x58, 0xC0, 0x58, 0xA0, 0x58, 0xA0, 0x60, 0xC0, - 0x60, 0xA0, 0x60, 0xA0, 0x68, 0xA0, 0x68, 0xA0, 0x70, 0xA0, 0x78, 0xA0, 0x78, 0x80, 0x80, 0x80, - 0x88, 0xC0, 0x88, 0xA0, 0x88, 0x60, 0x98, 0xC1, 0x98, 0xE0, 0xA9, 0x42, 0xA9, 0x42, 0xB1, 0x63, - 0xB9, 0x83, 0xB9, 0x64, 0xB9, 0x44, 0xC1, 0x45, 0xC9, 0x65, 0xC9, 0x85, 0xC9, 0xA6, 0xC9, 0xA6, - 0xC9, 0xE6, 0xC9, 0xE7, 0xCA, 0x28, 0xC2, 0x48, 0xC2, 0x48, 0xC2, 0x69, 0xB2, 0xC8, 0x7A, 0x62, - 0x62, 0x60, 0x62, 0x60, 0x62, 0x80, 0x62, 0xA0, 0x62, 0xC0, 0x62, 0xC1, 0x62, 0xC1, 0x62, 0xE1, - 0x62, 0xE1, 0x62, 0xE1, 0x62, 0xE1, 0x62, 0xE1, 0x62, 0xE1, 0x62, 0xE1, 0x62, 0xE1, 0x62, 0xE1, - 0x62, 0xE1, 0x72, 0xE2, 0x4A, 0x40, 0x3A, 0x20, 0x3A, 0x00, 0x32, 0x00, 0x39, 0xE0, 0x3A, 0x00, - 0x3A, 0x21, 0x42, 0x60, 0x5B, 0x01, 0x4A, 0x80, 0x4A, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0xA0, - 0x4A, 0xA0, 0x52, 0xA0, 0x52, 0xE0, 0x4A, 0xC0, 0x52, 0xE0, 0x73, 0xA1, 0x7B, 0x82, 0x73, 0x41, - 0x5A, 0xC0, 0x4A, 0x80, 0x42, 0x80, 0x42, 0x80, 0x31, 0xE0, 0x42, 0x20, 0x4A, 0x60, 0x4A, 0x60, - 0x52, 0xC0, 0x5B, 0x20, 0x5B, 0x00, 0x53, 0x00, 0x6B, 0xA1, 0x7C, 0x01, 0x7C, 0x01, 0x84, 0x02, - 0x6B, 0x04, 0x4A, 0x41, 0x39, 0xE0, 0x42, 0x20, 0x4A, 0x80, 0x5A, 0xE0, 0x6B, 0x60, 0x73, 0xC0, - 0x7B, 0xE0, 0x84, 0x40, 0x84, 0x60, 0x8C, 0x80, 0x94, 0xA0, 0x9C, 0xC0, 0x9C, 0xC0, 0x9C, 0xA0, - 0x8C, 0x21, 0x7B, 0x80, 0x7B, 0x41, 0x93, 0xA6, 0x9B, 0xE9, 0x7B, 0x07, 0x49, 0xA1, 0x41, 0x40, - 0x49, 0x60, 0x41, 0x40, 0x41, 0x20, 0x49, 0x20, 0x51, 0x20, 0x51, 0x00, 0x50, 0xE0, 0x48, 0xE0, - 0x59, 0x00, 0x58, 0xE0, 0x50, 0xA0, 0x50, 0xA0, 0x58, 0xC0, 0x58, 0xC0, 0x58, 0xC0, 0x60, 0xC0, - 0x60, 0xC0, 0x60, 0xC0, 0x60, 0xC0, 0x68, 0xC0, 0x68, 0xC0, 0x70, 0xC0, 0x78, 0xC0, 0x78, 0xA0, - 0x80, 0xC0, 0x88, 0xC0, 0x88, 0xC0, 0x99, 0x22, 0x99, 0x21, 0xA9, 0x82, 0xA9, 0x82, 0xB1, 0x83, - 0xB1, 0xA3, 0xB9, 0x84, 0xB9, 0x84, 0xB9, 0xA5, 0xC1, 0xA5, 0xC1, 0xC5, 0xC1, 0xC6, 0xC1, 0xE6, - 0xCA, 0x07, 0xC2, 0x27, 0xC2, 0x47, 0xC2, 0x09, 0xB9, 0xA7, 0xB2, 0xA7, 0x82, 0xA3, 0x6A, 0x60, - 0x6A, 0x80, 0x6A, 0xA0, 0x6A, 0xC0, 0x62, 0xC0, 0x62, 0xE1, 0x6A, 0xE1, 0x63, 0x01, 0x63, 0x01, - 0x63, 0x01, 0x63, 0x02, 0x63, 0x02, 0x6B, 0x02, 0x6B, 0x22, 0x63, 0x22, 0x63, 0x22, 0x63, 0x22, - 0x63, 0x02, 0x73, 0x03, 0x52, 0x80, 0x42, 0x20, 0x3A, 0x00, 0x32, 0x00, 0x3A, 0x00, 0x31, 0xE0, - 0x3A, 0x20, 0x42, 0x20, 0x4A, 0xA0, 0x5A, 0xE1, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0xA0, - 0x4A, 0x80, 0x52, 0xA0, 0x52, 0xE0, 0x52, 0xE0, 0x5B, 0x00, 0x7B, 0xA2, 0x83, 0xC3, 0x7B, 0x82, - 0x6B, 0x20, 0x52, 0xA0, 0x4A, 0xA0, 0x4A, 0xA0, 0x42, 0x40, 0x42, 0x20, 0x4A, 0x60, 0x4A, 0x60, - 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x40, 0x6B, 0xA0, 0x7C, 0x21, 0x84, 0x22, - 0x9B, 0xE8, 0x73, 0x04, 0x52, 0x82, 0x4A, 0x80, 0x5A, 0xE0, 0x73, 0x81, 0x8C, 0x22, 0x8C, 0x62, - 0x9C, 0xC2, 0x9D, 0x03, 0xA5, 0x03, 0xA5, 0x03, 0xA5, 0x02, 0xA5, 0x01, 0xA4, 0xE0, 0x9C, 0xC0, - 0x8C, 0x40, 0x7B, 0x80, 0x83, 0x63, 0xAC, 0x4B, 0xC4, 0xD0, 0xAC, 0x4D, 0x72, 0xC4, 0x51, 0xC0, - 0x49, 0x80, 0x49, 0x60, 0x49, 0x60, 0x49, 0x40, 0x49, 0x20, 0x49, 0x20, 0x49, 0x00, 0x48, 0xE0, - 0x51, 0x00, 0x50, 0xE0, 0x50, 0xC0, 0x50, 0xC0, 0x58, 0xE0, 0x58, 0xE0, 0x58, 0xE0, 0x58, 0xE0, - 0x58, 0xE0, 0x58, 0xE0, 0x60, 0xE0, 0x60, 0xE0, 0x68, 0xE0, 0x68, 0xE0, 0x70, 0xE0, 0x78, 0xE0, - 0x78, 0xE0, 0x81, 0x00, 0x88, 0xE0, 0x91, 0x21, 0x91, 0x20, 0xA1, 0x61, 0xA1, 0x82, 0xA9, 0xA2, - 0xB1, 0x83, 0xB1, 0x83, 0xB9, 0xA4, 0xB9, 0xA5, 0xB9, 0xA5, 0xB9, 0xC5, 0xB9, 0xE5, 0xC2, 0x07, - 0xC2, 0x07, 0xBA, 0x67, 0xBA, 0x48, 0xB1, 0xE8, 0xB2, 0xA8, 0x82, 0x82, 0x6A, 0x80, 0x62, 0xA0, - 0x6A, 0xC0, 0x6A, 0xE0, 0x6A, 0xE0, 0x6B, 0x01, 0x6B, 0x01, 0x6B, 0x21, 0x6B, 0x21, 0x6B, 0x21, - 0x6B, 0x22, 0x6B, 0x42, 0x6B, 0x22, 0x6B, 0x42, 0x6B, 0x42, 0x6B, 0x42, 0x6B, 0x42, 0x6B, 0x42, - 0x6B, 0x43, 0x73, 0x23, 0x52, 0x80, 0x42, 0x40, 0x42, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, - 0x3A, 0x20, 0x3A, 0x00, 0x42, 0x40, 0x52, 0xC0, 0x4A, 0xA0, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0xA0, - 0x4A, 0xC0, 0x52, 0xA0, 0x52, 0xC0, 0x52, 0xC0, 0x5B, 0x00, 0x7B, 0xC2, 0x83, 0xE3, 0x83, 0xC3, - 0x6B, 0x20, 0x5A, 0xE0, 0x5A, 0xE0, 0x4A, 0xC0, 0x4A, 0x80, 0x52, 0xA0, 0x5A, 0xE0, 0x4A, 0xA0, - 0x5B, 0x20, 0x53, 0x00, 0x53, 0x20, 0x5B, 0x20, 0x53, 0x00, 0x63, 0x40, 0x7C, 0x01, 0x84, 0x41, - 0xC4, 0xCC, 0x9B, 0xE8, 0x7B, 0x45, 0x6B, 0x23, 0x73, 0x62, 0x8C, 0x04, 0x9C, 0xA5, 0xA4, 0xE6, - 0xAD, 0x48, 0xB5, 0x69, 0xB5, 0x69, 0xB5, 0x69, 0xB5, 0x48, 0xAD, 0x25, 0xA4, 0xE3, 0x9C, 0x80, - 0x84, 0x00, 0x83, 0xC0, 0x9B, 0xE7, 0xBC, 0xAD, 0xD5, 0x31, 0xC4, 0xCF, 0x93, 0xA5, 0x6A, 0x80, - 0x51, 0xC0, 0x51, 0xA0, 0x49, 0x80, 0x49, 0x60, 0x49, 0x40, 0x49, 0x40, 0x49, 0x20, 0x49, 0x20, - 0x49, 0x00, 0x51, 0x00, 0x50, 0xE0, 0x51, 0x00, 0x59, 0x00, 0x59, 0x00, 0x58, 0xE0, 0x58, 0xE0, - 0x58, 0xE0, 0x58, 0xE0, 0x58, 0xE0, 0x60, 0xE0, 0x60, 0xE0, 0x68, 0xE0, 0x70, 0xE0, 0x70, 0xE0, - 0x79, 0x00, 0x81, 0x21, 0x81, 0x00, 0x89, 0x20, 0x89, 0x00, 0x91, 0x61, 0x99, 0x81, 0xA1, 0xC2, - 0xA9, 0x63, 0xA9, 0x63, 0xA9, 0x84, 0xB1, 0xA4, 0xB1, 0xA4, 0xB1, 0xA5, 0xB9, 0xE6, 0xBA, 0x27, - 0xBA, 0x47, 0xBA, 0x48, 0xB2, 0x27, 0xAA, 0xC7, 0x82, 0xA2, 0x72, 0xA0, 0x6A, 0xC0, 0x6A, 0xE0, - 0x72, 0xE0, 0x6B, 0x00, 0x6B, 0x21, 0x6B, 0x21, 0x6B, 0x21, 0x6B, 0x41, 0x6B, 0x41, 0x6B, 0x41, - 0x6B, 0x41, 0x6B, 0x62, 0x6B, 0x62, 0x6B, 0x62, 0x6B, 0x62, 0x6B, 0x62, 0x73, 0x62, 0x73, 0x63, - 0x73, 0x83, 0x73, 0x23, 0x52, 0x60, 0x4A, 0x40, 0x4A, 0x40, 0x3A, 0x20, 0x3A, 0x00, 0x3A, 0x20, - 0x42, 0x40, 0x42, 0x40, 0x42, 0x40, 0x42, 0x60, 0x52, 0xC0, 0x4A, 0xA0, 0x52, 0xC0, 0x52, 0xC0, - 0x52, 0xE0, 0x52, 0xC0, 0x52, 0xC0, 0x52, 0xC0, 0x5B, 0x00, 0x83, 0xE2, 0x8C, 0x04, 0x8C, 0x03, - 0x7B, 0x83, 0x5A, 0xC0, 0x52, 0xC0, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xC0, 0x5B, 0x00, 0x5B, 0x00, - 0x53, 0x00, 0x53, 0x00, 0x53, 0x00, 0x53, 0x20, 0x5B, 0x20, 0x5B, 0x20, 0x6B, 0x80, 0x7C, 0x40, - 0xCD, 0x8F, 0xB4, 0xAB, 0x93, 0xC7, 0x83, 0x84, 0x83, 0xC4, 0x8C, 0x44, 0x94, 0xA6, 0xAD, 0x29, - 0xAD, 0x49, 0xB5, 0x6B, 0xB5, 0x6B, 0xB5, 0x6B, 0xB5, 0x4A, 0xA5, 0x07, 0x9C, 0xA3, 0x8C, 0x40, - 0x83, 0xC0, 0x8B, 0xE1, 0xA4, 0x27, 0xC4, 0xAB, 0xD5, 0x0D, 0xC4, 0xAB, 0xA3, 0xE3, 0x83, 0x00, - 0x6A, 0x60, 0x5A, 0x00, 0x51, 0xA0, 0x49, 0xA0, 0x49, 0x80, 0x49, 0x40, 0x49, 0x40, 0x51, 0x40, - 0x51, 0x40, 0x51, 0x20, 0x51, 0x00, 0x51, 0x00, 0x51, 0x20, 0x59, 0x20, 0x59, 0x00, 0x59, 0x00, - 0x59, 0x00, 0x59, 0x00, 0x58, 0xE0, 0x60, 0xE0, 0x61, 0x00, 0x61, 0x00, 0x69, 0x00, 0x71, 0x00, - 0x71, 0x00, 0x79, 0x20, 0x81, 0x20, 0x81, 0x20, 0x89, 0x20, 0x91, 0x61, 0x99, 0x82, 0x99, 0xA2, - 0x99, 0x83, 0x99, 0x83, 0x99, 0xA3, 0xA1, 0xC4, 0xA9, 0xC5, 0xA9, 0xE5, 0xB2, 0x06, 0xB2, 0x47, - 0xB2, 0x87, 0xAA, 0x47, 0xA2, 0xA6, 0x7A, 0xC2, 0x6A, 0xA0, 0x72, 0xC0, 0x73, 0x00, 0x73, 0x00, - 0x73, 0x20, 0x73, 0x41, 0x73, 0x41, 0x73, 0x61, 0x73, 0x62, 0x73, 0x62, 0x73, 0x62, 0x73, 0x82, - 0x73, 0x62, 0x73, 0x82, 0x73, 0x82, 0x73, 0x82, 0x73, 0x82, 0x73, 0x82, 0x73, 0x82, 0x7B, 0xA3, - 0x73, 0xA3, 0x73, 0x23, 0x4A, 0x40, 0x42, 0x40, 0x4A, 0x60, 0x42, 0x40, 0x42, 0x20, 0x3A, 0x40, - 0x42, 0x40, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x20, 0x4A, 0x80, 0x52, 0xC0, 0x52, 0xE0, 0x52, 0xC0, - 0x52, 0xC0, 0x52, 0xC0, 0x52, 0xE0, 0x53, 0x00, 0x63, 0x20, 0x84, 0x23, 0x94, 0x24, 0x8C, 0x04, - 0x7B, 0xA3, 0x5A, 0xE0, 0x52, 0xC0, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0x80, 0x52, 0xC1, 0x52, 0xA1, - 0x53, 0x00, 0x53, 0x00, 0x53, 0x00, 0x53, 0x20, 0x5B, 0x41, 0x5B, 0x20, 0x5B, 0x40, 0x73, 0xE0, - 0xD6, 0x10, 0xC5, 0x6D, 0xA4, 0x48, 0x8B, 0xA4, 0x8B, 0xC3, 0x8C, 0x23, 0x8C, 0x44, 0x94, 0xA6, - 0xA4, 0xE9, 0xAD, 0x0A, 0xAD, 0x2B, 0xAD, 0x0B, 0x9C, 0xC9, 0x94, 0x66, 0x84, 0x03, 0x73, 0xC0, - 0x73, 0x81, 0x83, 0xC0, 0x9C, 0x26, 0xBC, 0xAA, 0xCD, 0x0A, 0xC4, 0xA6, 0xAC, 0x21, 0x93, 0x80, - 0x83, 0x00, 0x6A, 0x60, 0x51, 0xE0, 0x49, 0xC0, 0x49, 0xA0, 0x49, 0x80, 0x49, 0x60, 0x49, 0x40, - 0x51, 0x40, 0x51, 0x40, 0x51, 0x20, 0x51, 0x00, 0x51, 0x20, 0x51, 0x20, 0x51, 0x20, 0x59, 0x20, - 0x59, 0x00, 0x59, 0x00, 0x59, 0x00, 0x59, 0x00, 0x59, 0x00, 0x61, 0x00, 0x69, 0x00, 0x69, 0x00, - 0x69, 0x00, 0x71, 0x20, 0x79, 0x20, 0x79, 0x40, 0x81, 0x40, 0x81, 0x61, 0x89, 0x82, 0x91, 0x82, - 0x91, 0x83, 0x91, 0xA3, 0x99, 0xC3, 0xA1, 0xE4, 0xA2, 0x05, 0xAA, 0x05, 0xAA, 0x45, 0xAA, 0x65, - 0xA2, 0x85, 0x9A, 0xC4, 0x82, 0xE1, 0x72, 0xC0, 0x72, 0xE0, 0x7A, 0xE0, 0x73, 0x00, 0x73, 0x60, - 0x73, 0x41, 0x73, 0x61, 0x73, 0x81, 0x73, 0x82, 0x73, 0x82, 0x73, 0x82, 0x73, 0x82, 0x73, 0x82, - 0x73, 0x82, 0x73, 0xA2, 0x7B, 0xA2, 0x7B, 0xA2, 0x7B, 0xA2, 0x7B, 0xA2, 0x7B, 0xA3, 0x7B, 0xC3, - 0x73, 0xA3, 0x73, 0x43, 0x4A, 0x40, 0x3A, 0x20, 0x4A, 0x40, 0x4A, 0x80, 0x4A, 0x40, 0x42, 0x40, - 0x42, 0x40, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x40, 0x52, 0xC0, 0x5A, 0xE0, 0x52, 0xC0, - 0x4A, 0xC0, 0x52, 0xE0, 0x5B, 0x00, 0x5B, 0x00, 0x5B, 0x00, 0x84, 0x02, 0x94, 0x44, 0x8C, 0x24, - 0x73, 0xA1, 0x63, 0x20, 0x52, 0xC0, 0x4A, 0xC0, 0x5B, 0x20, 0x52, 0xA0, 0x4A, 0xA0, 0x52, 0xC0, - 0x5B, 0x20, 0x53, 0x00, 0x53, 0x00, 0x53, 0x20, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x40, 0x63, 0xA0, - 0xD6, 0x10, 0xCD, 0xCF, 0xB4, 0xEA, 0x93, 0xC4, 0x83, 0x81, 0x83, 0xA1, 0x7B, 0xA1, 0x73, 0xC2, - 0x84, 0x24, 0x8C, 0x45, 0x8C, 0x45, 0x8C, 0x45, 0x7C, 0x04, 0x73, 0xA2, 0x6B, 0x80, 0x63, 0x40, - 0x63, 0x40, 0x73, 0x80, 0x8C, 0x03, 0xAC, 0x87, 0xBC, 0xE7, 0xB4, 0xA3, 0xAC, 0x60, 0xA4, 0x00, - 0x93, 0x80, 0x7B, 0x00, 0x62, 0x60, 0x52, 0x00, 0x49, 0xE0, 0x51, 0xE0, 0x51, 0xC0, 0x49, 0x80, - 0x49, 0x60, 0x49, 0x60, 0x51, 0x40, 0x51, 0x40, 0x51, 0x20, 0x51, 0x20, 0x51, 0x20, 0x59, 0x40, - 0x51, 0x20, 0x59, 0x20, 0x59, 0x20, 0x59, 0x20, 0x59, 0x40, 0x59, 0x40, 0x61, 0x20, 0x61, 0x20, - 0x69, 0x40, 0x71, 0x60, 0x71, 0x60, 0x79, 0x60, 0x79, 0x40, 0x79, 0x61, 0x81, 0x81, 0x89, 0x81, - 0x91, 0x82, 0x91, 0xA2, 0x91, 0xC3, 0x99, 0xE3, 0x9A, 0x04, 0xA2, 0x44, 0x9A, 0x83, 0x92, 0xA3, - 0x8A, 0xC2, 0x7B, 0x00, 0x6A, 0xE0, 0x7B, 0x20, 0x73, 0x20, 0x73, 0x00, 0x7B, 0x40, 0x73, 0x60, - 0x7B, 0x81, 0x73, 0x81, 0x7B, 0xA2, 0x73, 0xA2, 0x7B, 0xA2, 0x7B, 0xA2, 0x7B, 0xC2, 0x73, 0xA2, - 0x7B, 0xC2, 0x7B, 0xC2, 0x7B, 0xC2, 0x7B, 0xC3, 0x7B, 0xC3, 0x7B, 0xC3, 0x7B, 0xC3, 0x7B, 0xC3, - 0x7B, 0xC3, 0x73, 0x23, 0x4A, 0x40, 0x3A, 0x00, 0x42, 0x20, 0x4A, 0x60, 0x52, 0x80, 0x42, 0x60, - 0x42, 0x60, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0xA0, 0x42, 0x40, 0x4A, 0xA0, 0x5B, 0x01, 0x5A, 0xE0, - 0x52, 0xC0, 0x52, 0xE0, 0x52, 0xE0, 0x5A, 0xE0, 0x5B, 0x00, 0x84, 0x02, 0x94, 0x44, 0x94, 0x64, - 0x84, 0x01, 0x63, 0x40, 0x5B, 0x00, 0x4A, 0xC0, 0x4A, 0xA0, 0x63, 0x64, 0x84, 0x49, 0x73, 0xE7, - 0x5B, 0x40, 0x53, 0x20, 0x53, 0x20, 0x53, 0x20, 0x53, 0x20, 0x53, 0x40, 0x5B, 0x60, 0x63, 0x60, - 0xCD, 0xD1, 0xC5, 0xAF, 0xB5, 0x2B, 0x94, 0x25, 0x83, 0x61, 0x7B, 0x40, 0x73, 0x60, 0x6B, 0x60, - 0x6B, 0x80, 0x73, 0xA1, 0x73, 0xA1, 0x73, 0x81, 0x6B, 0x60, 0x63, 0x20, 0x5B, 0x20, 0x5B, 0x20, - 0x5B, 0x20, 0x63, 0x60, 0x7B, 0xC0, 0x8C, 0x21, 0xA4, 0x81, 0xAC, 0xA0, 0xAC, 0x80, 0xA4, 0x40, - 0x9B, 0xC0, 0x83, 0x60, 0x6A, 0xC0, 0x5A, 0x60, 0x52, 0x00, 0x52, 0x00, 0x52, 0x00, 0x51, 0xE0, - 0x51, 0xA0, 0x51, 0xA0, 0x51, 0x60, 0x51, 0x60, 0x51, 0x60, 0x51, 0x40, 0x51, 0x20, 0x51, 0x20, - 0x51, 0x40, 0x51, 0x40, 0x51, 0x40, 0x59, 0x40, 0x59, 0x40, 0x59, 0x60, 0x61, 0x40, 0x61, 0x40, - 0x61, 0x40, 0x69, 0x60, 0x71, 0x80, 0x71, 0x80, 0x71, 0x60, 0x71, 0x61, 0x79, 0x61, 0x79, 0x61, - 0x81, 0xA1, 0x89, 0xC2, 0x8A, 0x02, 0x8A, 0x02, 0x8A, 0x23, 0x92, 0x63, 0x8A, 0xA2, 0x82, 0xE2, - 0x73, 0x20, 0x7B, 0x00, 0x7B, 0x20, 0x73, 0x40, 0x73, 0x60, 0x73, 0x80, 0x73, 0x60, 0x7B, 0x82, - 0x7B, 0xA1, 0x7B, 0xC2, 0x7B, 0xC2, 0x7B, 0xE2, 0x7B, 0xC2, 0x7B, 0xC2, 0x7B, 0xC2, 0x7B, 0xE2, - 0x7B, 0xE2, 0x7B, 0xE3, 0x83, 0xE3, 0x83, 0xE3, 0x83, 0xE3, 0x83, 0xE3, 0x83, 0xE3, 0x83, 0xE3, - 0x83, 0xE4, 0x73, 0x22, 0x4A, 0x40, 0x3A, 0x20, 0x3A, 0x00, 0x4A, 0x40, 0x52, 0xA1, 0x4A, 0x80, - 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x42, 0x80, 0x42, 0x60, 0x3A, 0x20, 0x52, 0xC1, 0x5B, 0x00, - 0x52, 0xE0, 0x52, 0xC0, 0x52, 0xC0, 0x5B, 0x00, 0x63, 0x40, 0x8C, 0x43, 0x94, 0x64, 0x94, 0x84, - 0x84, 0x21, 0x73, 0xA0, 0x5B, 0x20, 0x52, 0xE0, 0x53, 0x00, 0x52, 0xE0, 0x4A, 0xE0, 0x4B, 0x00, - 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x40, 0x53, 0x20, 0x53, 0x20, 0x53, 0x40, 0x5B, 0x40, 0x5B, 0x41, - 0xC5, 0x6E, 0xBD, 0x4E, 0xAC, 0xEB, 0x9C, 0x66, 0x8B, 0xA1, 0x7B, 0x40, 0x73, 0x40, 0x63, 0x00, - 0x5B, 0x20, 0x5B, 0x40, 0x53, 0x20, 0x53, 0x20, 0x5B, 0x00, 0x5A, 0xE0, 0x52, 0xE0, 0x53, 0x00, - 0x5B, 0x00, 0x63, 0x20, 0x6B, 0x80, 0x7B, 0xE0, 0x8C, 0x60, 0x9C, 0x80, 0x9C, 0x80, 0x9C, 0x60, - 0x94, 0x00, 0x83, 0xA0, 0x73, 0x00, 0x62, 0xA0, 0x52, 0x60, 0x52, 0x40, 0x52, 0x40, 0x5A, 0x20, - 0x5A, 0x20, 0x5A, 0x20, 0x59, 0xC0, 0x51, 0x80, 0x51, 0x80, 0x51, 0x60, 0x51, 0x60, 0x51, 0x60, - 0x51, 0x40, 0x51, 0x40, 0x51, 0x40, 0x51, 0x60, 0x59, 0x60, 0x59, 0x60, 0x59, 0x60, 0x61, 0x60, - 0x61, 0x60, 0x69, 0x60, 0x69, 0x80, 0x69, 0x60, 0x69, 0x60, 0x71, 0x80, 0x79, 0xA0, 0x79, 0xA0, - 0x79, 0xE1, 0x79, 0xC0, 0x81, 0xE0, 0x8A, 0x61, 0x92, 0xE2, 0x93, 0x63, 0x83, 0x61, 0x7B, 0x40, - 0x7B, 0x40, 0x7B, 0x60, 0x7B, 0x60, 0x7B, 0x60, 0x7B, 0x80, 0x73, 0x81, 0x7B, 0xA1, 0x7B, 0xC1, - 0x7B, 0xE2, 0x7B, 0xE2, 0x7B, 0xE2, 0x83, 0xE2, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, - 0x84, 0x03, 0x84, 0x03, 0x84, 0x03, 0x84, 0x03, 0x84, 0x03, 0x84, 0x03, 0x84, 0x03, 0x84, 0x03, - 0x83, 0xE4, 0x73, 0x43, 0x42, 0x20, 0x3A, 0x00, 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x40, 0x5A, 0xC1, - 0x4A, 0x80, 0x42, 0x60, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0x80, 0x42, 0x20, 0x4A, 0x60, 0x5B, 0x01, - 0x5A, 0xE1, 0x5A, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x5B, 0x00, 0x84, 0x42, 0x94, 0xA4, 0x94, 0x85, - 0x94, 0x84, 0x7B, 0xC0, 0x63, 0x40, 0x5B, 0x20, 0x52, 0xE0, 0x53, 0x00, 0x53, 0x20, 0x53, 0x00, - 0x53, 0x00, 0x53, 0x20, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x40, - 0xAC, 0xEB, 0xAD, 0x0B, 0xA4, 0xCA, 0x94, 0x46, 0x83, 0xC2, 0x7B, 0x80, 0x73, 0x61, 0x6B, 0x00, - 0x5B, 0x00, 0x53, 0x00, 0x53, 0x20, 0x53, 0x00, 0x52, 0xE0, 0x5A, 0xE0, 0x5B, 0x00, 0x53, 0x00, - 0x5B, 0x20, 0x63, 0x40, 0x6B, 0x60, 0x73, 0xC0, 0x84, 0x20, 0x94, 0x60, 0x9C, 0x80, 0x9C, 0x80, - 0x94, 0x20, 0x8B, 0xC0, 0x73, 0x40, 0x62, 0xC0, 0x5A, 0xA0, 0x5A, 0x80, 0x5A, 0x80, 0x5A, 0x60, - 0x62, 0x80, 0x62, 0x80, 0x62, 0x60, 0x62, 0x40, 0x62, 0x40, 0x59, 0xE0, 0x59, 0xA0, 0x51, 0x80, - 0x51, 0x80, 0x51, 0x80, 0x51, 0x80, 0x51, 0x80, 0x51, 0x80, 0x59, 0x80, 0x59, 0x80, 0x59, 0x80, - 0x59, 0x80, 0x61, 0xA0, 0x61, 0xA0, 0x61, 0x80, 0x61, 0x80, 0x69, 0xA0, 0x71, 0xC0, 0x71, 0xE0, - 0x82, 0x20, 0x92, 0xC2, 0xAB, 0x84, 0xAB, 0xE4, 0xA3, 0xC3, 0x93, 0xA1, 0x83, 0x80, 0x7B, 0x80, - 0x7B, 0x80, 0x7B, 0x80, 0x7B, 0x80, 0x7B, 0xA0, 0x7B, 0xA1, 0x7B, 0xA1, 0x7B, 0xC1, 0x7B, 0xE2, - 0x83, 0xE2, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, 0x84, 0x02, - 0x84, 0x23, 0x84, 0x23, 0x84, 0x23, 0x84, 0x23, 0x8C, 0x23, 0x8C, 0x23, 0x8C, 0x23, 0x8C, 0x24, - 0x84, 0x04, 0x73, 0x43, 0x42, 0x20, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x42, 0x00, 0x52, 0x80, - 0x5A, 0xE1, 0x4A, 0x60, 0x4A, 0x80, 0x52, 0xC0, 0x52, 0xC0, 0x4A, 0x80, 0x4A, 0x60, 0x5B, 0x01, - 0x63, 0x01, 0x5B, 0x01, 0x53, 0x00, 0x5B, 0x01, 0x5B, 0x00, 0x84, 0x42, 0x9C, 0xA4, 0x9C, 0xA5, - 0x94, 0xA5, 0x84, 0x22, 0x6B, 0x80, 0x63, 0x40, 0x53, 0x00, 0x53, 0x00, 0x53, 0x20, 0x53, 0x20, - 0x53, 0x00, 0x53, 0x20, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, - 0x94, 0x48, 0x9C, 0xA9, 0x9C, 0xA9, 0x94, 0x66, 0x8C, 0x04, 0x8C, 0x03, 0x83, 0xE4, 0x7B, 0x83, - 0x63, 0x20, 0x52, 0xE0, 0x52, 0xE0, 0x53, 0x00, 0x52, 0xE0, 0x52, 0xE0, 0x5B, 0x00, 0x53, 0x00, - 0x5B, 0x00, 0x63, 0x20, 0x63, 0x60, 0x73, 0xA0, 0x84, 0x00, 0x94, 0x60, 0x9C, 0xA0, 0x9C, 0xA0, - 0x94, 0x40, 0x83, 0xE0, 0x73, 0x40, 0x63, 0x00, 0x62, 0xE0, 0x5A, 0xC0, 0x5A, 0xC0, 0x62, 0xC0, - 0x62, 0xA0, 0x62, 0xC0, 0x6A, 0xC0, 0x6A, 0xE0, 0x6A, 0xE0, 0x6A, 0xC0, 0x72, 0xA1, 0x7A, 0xC2, - 0x7A, 0x83, 0x7A, 0x63, 0x72, 0x42, 0x69, 0xE1, 0x61, 0xC0, 0x61, 0xA0, 0x59, 0xA0, 0x59, 0x80, - 0x61, 0x80, 0x61, 0xA0, 0x69, 0xC0, 0x72, 0x01, 0x82, 0x63, 0x9B, 0x05, 0xB3, 0xC7, 0xBC, 0x28, - 0xCC, 0x89, 0xC4, 0x88, 0xBC, 0x66, 0xA4, 0x04, 0x93, 0xC2, 0x8B, 0xA0, 0x83, 0xA0, 0x83, 0xA0, - 0x83, 0xA0, 0x83, 0xC0, 0x83, 0xC0, 0x83, 0xE0, 0x7B, 0xE1, 0x7B, 0xE1, 0x7B, 0xE1, 0x84, 0x02, - 0x84, 0x22, 0x84, 0x23, 0x84, 0x23, 0x84, 0x43, 0x84, 0x43, 0x84, 0x43, 0x84, 0x23, 0x84, 0x23, - 0x8C, 0x43, 0x8C, 0x43, 0x8C, 0x43, 0x8C, 0x43, 0x8C, 0x44, 0x8C, 0x44, 0x8C, 0x44, 0x8C, 0x44, - 0x8C, 0x24, 0x6B, 0x42, 0x4A, 0x40, 0x3A, 0x00, 0x32, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x42, 0x40, - 0x5B, 0x02, 0x52, 0xC1, 0x52, 0xC0, 0x52, 0xC0, 0x52, 0xC1, 0x52, 0xE1, 0x4A, 0xA0, 0x52, 0xC0, - 0x63, 0x42, 0x5B, 0x01, 0x5B, 0x01, 0x53, 0x00, 0x5B, 0x00, 0x84, 0x42, 0x9C, 0xA4, 0x9C, 0xC5, - 0x9C, 0xC5, 0x8C, 0x43, 0x6B, 0xA0, 0x63, 0x40, 0x5B, 0x00, 0x53, 0x00, 0x53, 0x20, 0x53, 0x20, - 0x53, 0x20, 0x53, 0x20, 0x53, 0x20, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, - 0x8C, 0x05, 0x9C, 0x88, 0x9C, 0xA9, 0x9C, 0xA8, 0x9C, 0x87, 0x9C, 0x87, 0x9C, 0x88, 0x94, 0x27, - 0x7B, 0xC3, 0x63, 0x41, 0x52, 0xE0, 0x52, 0xE0, 0x53, 0x00, 0x52, 0xE0, 0x53, 0x00, 0x5B, 0x20, - 0x5B, 0x00, 0x5B, 0x40, 0x63, 0x60, 0x73, 0xA0, 0x84, 0x01, 0x94, 0x82, 0x9C, 0xC2, 0xA4, 0xC2, - 0x9C, 0x80, 0x8C, 0x00, 0x73, 0x60, 0x6B, 0x20, 0x63, 0x00, 0x63, 0x00, 0x63, 0x00, 0x63, 0x00, - 0x63, 0x00, 0x63, 0x00, 0x6B, 0x00, 0x6B, 0x20, 0x73, 0x20, 0x7B, 0x22, 0x93, 0x64, 0xA3, 0xC7, - 0xC4, 0x2A, 0xD4, 0x8C, 0xDC, 0xEE, 0xDD, 0x0F, 0xDD, 0x0F, 0xDC, 0xEE, 0xD4, 0xAC, 0xCC, 0x8B, - 0xCC, 0x8C, 0xD4, 0xAC, 0xD4, 0xCC, 0xDC, 0xED, 0xDC, 0xEC, 0xDC, 0xEC, 0xDC, 0xEC, 0xDC, 0xEB, - 0xCC, 0xAA, 0xBC, 0x88, 0xAC, 0x25, 0x93, 0xE3, 0x8B, 0xE1, 0x83, 0xC0, 0x83, 0xC0, 0x83, 0xC0, - 0x83, 0xE0, 0x83, 0xE0, 0x83, 0xE1, 0x84, 0x01, 0x84, 0x01, 0x84, 0x01, 0x84, 0x22, 0x84, 0x22, - 0x84, 0x23, 0x84, 0x43, 0x8C, 0x43, 0x8C, 0x63, 0x8C, 0x63, 0x8C, 0x43, 0x8C, 0x43, 0x8C, 0x43, - 0x8C, 0x63, 0x8C, 0x63, 0x8C, 0x63, 0x8C, 0x64, 0x8C, 0x64, 0x94, 0x64, 0x94, 0x64, 0x94, 0x64, - 0x8C, 0x24, 0x6B, 0x22, 0x4A, 0x40, 0x42, 0x20, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x20, 0x3A, 0x20, - 0x52, 0x81, 0x5A, 0xE1, 0x52, 0xC0, 0x52, 0xC0, 0x52, 0xE1, 0x52, 0xE1, 0x52, 0xE0, 0x4A, 0xA0, - 0x5B, 0x01, 0x5B, 0x01, 0x5B, 0x02, 0x5B, 0x21, 0x6B, 0x81, 0x94, 0xA4, 0x9C, 0xC4, 0x9C, 0xE5, - 0x9C, 0xC5, 0x8C, 0x83, 0x73, 0xC1, 0x63, 0x60, 0x5B, 0x20, 0x5B, 0x20, 0x53, 0x00, 0x5B, 0x20, - 0x5B, 0x20, 0x53, 0x20, 0x53, 0x20, 0x5B, 0x40, 0x5B, 0x60, 0x5B, 0x60, 0x5B, 0x40, 0x5B, 0x40, - 0x8C, 0x05, 0x9C, 0x88, 0xAC, 0xEA, 0xA4, 0xEA, 0xA4, 0xEA, 0xAC, 0xEA, 0xB5, 0x0B, 0xB4, 0xEB, - 0x9C, 0xA8, 0x83, 0xE5, 0x5B, 0x20, 0x4A, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x5B, 0x20, - 0x5B, 0x00, 0x63, 0x40, 0x63, 0x40, 0x6B, 0x80, 0x7B, 0xE1, 0x94, 0x63, 0xA4, 0xC5, 0xA4, 0xE6, - 0x9C, 0xC3, 0x8C, 0x21, 0x73, 0xA0, 0x6B, 0x40, 0x63, 0x20, 0x63, 0x20, 0x6B, 0x20, 0x6B, 0x40, - 0x6B, 0x60, 0x6B, 0x40, 0x73, 0x40, 0x73, 0x61, 0x83, 0x62, 0x93, 0xA4, 0xAC, 0x08, 0xC4, 0x6B, - 0xD4, 0xED, 0xDD, 0x4F, 0xE5, 0x90, 0xE5, 0xB1, 0xE5, 0xD1, 0xE5, 0xD1, 0xE5, 0xB0, 0xDD, 0x8F, - 0xDD, 0x4F, 0xDD, 0x4E, 0xDD, 0x4E, 0xDD, 0x2D, 0xDD, 0x2D, 0xD5, 0x0C, 0xCD, 0x0B, 0xCC, 0xEA, - 0xBC, 0xC8, 0xB4, 0x86, 0xA4, 0x44, 0x8C, 0x22, 0x83, 0xE0, 0x83, 0xE0, 0x84, 0x00, 0x8C, 0x00, - 0x84, 0x01, 0x84, 0x01, 0x84, 0x21, 0x84, 0x21, 0x84, 0x22, 0x84, 0x22, 0x84, 0x22, 0x84, 0x42, - 0x8C, 0x43, 0x8C, 0x63, 0x8C, 0x63, 0x8C, 0x83, 0x8C, 0x83, 0x8C, 0x83, 0x8C, 0x83, 0x8C, 0x83, - 0x8C, 0x63, 0x8C, 0x63, 0x94, 0x84, 0x94, 0x84, 0x94, 0x84, 0x94, 0x84, 0x94, 0x84, 0x94, 0x84, - 0x94, 0x45, 0x6B, 0x02, 0x4A, 0x40, 0x42, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, - 0x42, 0x40, 0x52, 0xC0, 0x52, 0xC0, 0x52, 0xC0, 0x52, 0xE1, 0x52, 0xC0, 0x52, 0xE0, 0x4A, 0xA0, - 0x5B, 0x01, 0x63, 0x22, 0x5B, 0x02, 0x63, 0x21, 0x7B, 0xC2, 0x9C, 0xC5, 0x9C, 0xE5, 0xA5, 0x05, - 0x9C, 0xE5, 0x94, 0xA4, 0x7B, 0xE1, 0x63, 0x60, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x20, - 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x63, 0x60, 0x63, 0x60, 0x63, 0x60, - 0x8C, 0x26, 0xA4, 0xA9, 0xB5, 0x0B, 0xB5, 0x4C, 0xB5, 0x4C, 0xB5, 0x4C, 0xBD, 0x6D, 0xC5, 0x6E, - 0xBD, 0x4C, 0xA4, 0xA9, 0x7B, 0xA3, 0x52, 0xE0, 0x52, 0xC0, 0x52, 0xE0, 0x52, 0xE0, 0x53, 0x00, - 0x5B, 0x00, 0x63, 0x20, 0x6B, 0x60, 0x73, 0x80, 0x83, 0xE2, 0x94, 0x65, 0xA4, 0xC7, 0xA4, 0xE8, - 0xA4, 0xE5, 0x94, 0x64, 0x7B, 0xE2, 0x73, 0x81, 0x6B, 0x61, 0x6B, 0x60, 0x6B, 0x60, 0x73, 0x60, - 0x6B, 0x80, 0x73, 0x60, 0x7B, 0x81, 0x8B, 0xA3, 0x9B, 0xE5, 0xAC, 0x48, 0xC4, 0xAC, 0xD5, 0x0E, - 0xDD, 0x70, 0xE5, 0xB1, 0xED, 0xD2, 0xE5, 0xD2, 0xE5, 0xD2, 0xE5, 0xB1, 0xDD, 0x90, 0xDD, 0x6F, - 0xDD, 0x6E, 0xD5, 0x4E, 0xD5, 0x2D, 0xD5, 0x2C, 0xCD, 0x0C, 0xCD, 0x0B, 0xBC, 0xE9, 0xBC, 0xC8, - 0xB4, 0xC5, 0xA4, 0x64, 0x94, 0x22, 0x8C, 0x00, 0x84, 0x00, 0x84, 0x20, 0x8C, 0x20, 0x8C, 0x20, - 0x8C, 0x21, 0x8C, 0x21, 0x8C, 0x21, 0x8C, 0x42, 0x8C, 0x42, 0x8C, 0x42, 0x84, 0x42, 0x8C, 0x43, - 0x8C, 0x63, 0x8C, 0x63, 0x8C, 0x83, 0x8C, 0x83, 0x8C, 0x83, 0x8C, 0x83, 0x8C, 0x83, 0x8C, 0x83, - 0x8C, 0x83, 0x94, 0x84, 0x94, 0x84, 0x94, 0x84, 0x94, 0x84, 0x94, 0x84, 0x9C, 0x84, 0x9C, 0x85, - 0x94, 0x45, 0x62, 0xE1, 0x42, 0x40, 0x42, 0x40, 0x42, 0x20, 0x3A, 0x00, 0x3A, 0x20, 0x3A, 0x20, - 0x42, 0x20, 0x4A, 0x80, 0x5B, 0x01, 0x52, 0xA0, 0x52, 0xC0, 0x5A, 0xE1, 0x52, 0xC0, 0x4A, 0xA0, - 0x63, 0x21, 0x63, 0x43, 0x5B, 0x02, 0x63, 0x41, 0x84, 0x03, 0x9C, 0xC5, 0x9C, 0xE5, 0xA5, 0x05, - 0xA5, 0x05, 0x9C, 0xC5, 0x7C, 0x03, 0x6B, 0x80, 0x5B, 0x40, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x40, - 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x63, 0x60, 0x63, 0x80, 0x63, 0x80, - 0x8C, 0x06, 0xA4, 0xA9, 0xB5, 0x2B, 0xC5, 0x8D, 0xC5, 0x8D, 0xBD, 0x6D, 0xC5, 0x8D, 0xCD, 0xAE, - 0xCD, 0x8F, 0xBD, 0x2C, 0x94, 0x47, 0x6B, 0x42, 0x52, 0xC0, 0x52, 0xC0, 0x52, 0xE0, 0x52, 0xC0, - 0x52, 0xC0, 0x5B, 0x00, 0x6B, 0x40, 0x73, 0xA1, 0x84, 0x03, 0x94, 0x65, 0x9C, 0xA7, 0xA4, 0xC8, - 0xA4, 0xE7, 0x9C, 0x86, 0x84, 0x24, 0x7B, 0xC2, 0x73, 0xA1, 0x73, 0x81, 0x73, 0x81, 0x73, 0xA1, - 0x7B, 0xA1, 0x83, 0xC2, 0x93, 0xE5, 0xA4, 0x27, 0xB4, 0x8A, 0xC4, 0xED, 0xD5, 0x4F, 0xDD, 0x91, - 0xDD, 0xD2, 0xE5, 0xF3, 0xE6, 0x13, 0xE5, 0xF2, 0xE5, 0xF2, 0xDD, 0xD0, 0xDD, 0xAF, 0xDD, 0x8F, - 0xD5, 0x4D, 0xCD, 0x2D, 0xCD, 0x0C, 0xC5, 0x0B, 0xC5, 0x0A, 0xBD, 0x09, 0xB4, 0xE7, 0xB4, 0xC6, - 0x9C, 0xA4, 0x9C, 0x62, 0x94, 0x22, 0x8C, 0x21, 0x8C, 0x21, 0x8C, 0x21, 0x8C, 0x21, 0x8C, 0x41, - 0x8C, 0x41, 0x8C, 0x41, 0x8C, 0x41, 0x8C, 0x62, 0x8C, 0x62, 0x8C, 0x62, 0x8C, 0x62, 0x8C, 0x63, - 0x8C, 0x63, 0x8C, 0x83, 0x94, 0x83, 0x94, 0x83, 0x94, 0x83, 0x94, 0x83, 0x94, 0x83, 0x94, 0xA3, - 0x94, 0xA3, 0x94, 0xA4, 0x94, 0xA4, 0x94, 0xA4, 0x9C, 0xA4, 0x9C, 0xA4, 0x9C, 0xA5, 0x9C, 0xA5, - 0x8C, 0x25, 0x5A, 0xA0, 0x42, 0x00, 0x42, 0x40, 0x42, 0x40, 0x42, 0x00, 0x3A, 0x00, 0x3A, 0x20, - 0x3A, 0x00, 0x42, 0x40, 0x52, 0xE1, 0x52, 0xA0, 0x52, 0xA0, 0x63, 0x02, 0x5B, 0x01, 0x52, 0xC0, - 0x52, 0xE0, 0x5A, 0xE1, 0x63, 0x22, 0x7C, 0x03, 0x9C, 0xC5, 0xA5, 0x06, 0xA5, 0x06, 0xA5, 0x05, - 0xA5, 0x05, 0x9C, 0xC6, 0x84, 0x24, 0x73, 0xC2, 0x63, 0x40, 0x5B, 0x20, 0x53, 0x20, 0x5B, 0x40, - 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x63, 0x60, 0x63, 0x80, 0x63, 0xA0, - 0x7B, 0xA5, 0x94, 0x68, 0xB5, 0x0B, 0xC5, 0x8D, 0xC5, 0xAD, 0xBD, 0x8D, 0xC5, 0x8D, 0xC5, 0x8D, - 0xCD, 0x8F, 0xBD, 0x4D, 0xA4, 0xA9, 0x7B, 0xA4, 0x5A, 0xE0, 0x4A, 0xA0, 0x4A, 0xC0, 0x4A, 0x80, - 0x52, 0xA0, 0x5A, 0xE0, 0x63, 0x20, 0x73, 0x81, 0x83, 0xE3, 0x94, 0x45, 0x9C, 0xA7, 0xA4, 0xC8, - 0xA4, 0xC8, 0x9C, 0xA7, 0x8C, 0x45, 0x84, 0x03, 0x7B, 0xC2, 0x73, 0xA1, 0x7B, 0xA2, 0x7B, 0xC2, - 0x83, 0xE4, 0x9C, 0x26, 0xAC, 0x89, 0xC4, 0xCC, 0xCD, 0x2E, 0xDD, 0x70, 0xDD, 0xB2, 0xE5, 0xF3, - 0xE6, 0x14, 0xE6, 0x34, 0xE6, 0x13, 0xDD, 0xF2, 0xDD, 0xF1, 0xDD, 0xB0, 0xD5, 0x8F, 0xD5, 0x6E, - 0xCD, 0x6D, 0xCD, 0x4C, 0xC5, 0x2B, 0xBD, 0x0A, 0xBC, 0xE9, 0xB4, 0xE7, 0xA4, 0xC5, 0x9C, 0xA3, - 0x94, 0x82, 0x94, 0x61, 0x94, 0x41, 0x94, 0x41, 0x94, 0x41, 0x94, 0x41, 0x94, 0x41, 0x94, 0x61, - 0x94, 0x62, 0x94, 0x62, 0x8C, 0x62, 0x94, 0x62, 0x94, 0x83, 0x8C, 0x62, 0x8C, 0x63, 0x8C, 0x63, - 0x94, 0x83, 0x94, 0x83, 0x94, 0x83, 0x94, 0xA3, 0x94, 0xA3, 0x94, 0xA3, 0x94, 0xA4, 0x94, 0xA4, - 0x94, 0xA4, 0x94, 0xA4, 0x94, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC5, 0x9C, 0xA5, 0x9C, 0xA5, - 0x8C, 0x25, 0x52, 0x80, 0x39, 0xE0, 0x42, 0x40, 0x4A, 0x60, 0x42, 0x20, 0x3A, 0x00, 0x3A, 0x20, - 0x3A, 0x20, 0x3A, 0x20, 0x4A, 0x80, 0x52, 0xE0, 0x52, 0xA0, 0x5A, 0xE1, 0x5A, 0xE1, 0x52, 0xC0, - 0x5B, 0x00, 0x5B, 0x01, 0x63, 0x42, 0x8C, 0x64, 0xA5, 0x05, 0xA5, 0x05, 0xAD, 0x26, 0xA5, 0x25, - 0xAD, 0x05, 0xA4, 0xE6, 0x8C, 0x65, 0x7C, 0x03, 0x63, 0x60, 0x5B, 0x20, 0x53, 0x20, 0x5B, 0x40, - 0x5B, 0x60, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x60, 0x5B, 0x60, 0x63, 0x80, 0x6B, 0xA0, - 0x73, 0x63, 0x8C, 0x06, 0xA4, 0xC9, 0xBD, 0x4C, 0xC5, 0x8D, 0xBD, 0x6D, 0xBD, 0x6B, 0xBD, 0x6B, - 0xC5, 0x6B, 0xBD, 0x4C, 0xAC, 0xAA, 0x83, 0xC5, 0x63, 0x01, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0xA0, - 0x52, 0xA0, 0x52, 0xC0, 0x5B, 0x20, 0x6B, 0x60, 0x7B, 0xC1, 0x8C, 0x24, 0x9C, 0x66, 0x9C, 0xA7, - 0x9C, 0x87, 0x9C, 0xA7, 0x94, 0x85, 0x84, 0x44, 0x84, 0x03, 0x83, 0xC3, 0x8B, 0xE5, 0x94, 0x26, - 0xAC, 0x48, 0xBC, 0xAA, 0xCD, 0x0D, 0xD5, 0x6F, 0xDD, 0xD1, 0xE5, 0xF3, 0xE6, 0x13, 0xE6, 0x34, - 0xE6, 0x34, 0xE6, 0x34, 0xE6, 0x13, 0xDD, 0xF2, 0xDD, 0xD1, 0xDD, 0xB0, 0xDD, 0x8F, 0xD5, 0x8E, - 0xCD, 0x6D, 0xC5, 0x4C, 0xBD, 0x29, 0xB5, 0x08, 0xAC, 0xE6, 0xA4, 0xC4, 0xA4, 0xA3, 0x9C, 0x82, - 0x94, 0x62, 0x94, 0x62, 0x94, 0x62, 0x94, 0x62, 0x94, 0x62, 0x94, 0x82, 0x94, 0x62, 0x94, 0x62, - 0x94, 0x82, 0x94, 0x83, 0x94, 0x83, 0x94, 0x83, 0x94, 0x83, 0x94, 0x83, 0x94, 0x83, 0x94, 0x83, - 0x94, 0x84, 0x94, 0x84, 0x94, 0xA3, 0x94, 0xA3, 0x94, 0xA3, 0x94, 0xA3, 0x94, 0xA4, 0x9C, 0xC4, - 0x94, 0xC4, 0x9C, 0xE4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC5, 0xA4, 0xC6, - 0x84, 0x04, 0x4A, 0x60, 0x3A, 0x00, 0x3A, 0x00, 0x4A, 0x60, 0x4A, 0x40, 0x3A, 0x00, 0x3A, 0x20, - 0x3A, 0x20, 0x3A, 0x40, 0x42, 0x40, 0x52, 0xC1, 0x52, 0xA0, 0x52, 0xA0, 0x52, 0xC0, 0x5A, 0xE0, - 0x63, 0x62, 0x63, 0x21, 0x83, 0xE3, 0x9C, 0xC5, 0xA5, 0x25, 0xA5, 0x05, 0xA5, 0x25, 0xAD, 0x26, - 0xAD, 0x25, 0xA5, 0x25, 0x9C, 0xA6, 0x84, 0x03, 0x63, 0x60, 0x5B, 0x20, 0x53, 0x20, 0x53, 0x20, - 0x5B, 0x20, 0x5B, 0x20, 0x63, 0x60, 0x73, 0xA0, 0x73, 0xA0, 0x73, 0x60, 0x6B, 0x60, 0x63, 0xA0, - 0x6B, 0x22, 0x7B, 0xA4, 0x9C, 0x68, 0xB5, 0x2B, 0xC5, 0x8D, 0xC5, 0x8D, 0xBD, 0x6C, 0xBD, 0x2A, - 0xB5, 0x0A, 0xB4, 0xEA, 0xA4, 0x88, 0x7B, 0xC4, 0x63, 0x00, 0x52, 0xC0, 0x4A, 0xA0, 0x4A, 0xA0, - 0x4A, 0xC0, 0x52, 0xC0, 0x53, 0x00, 0x63, 0x20, 0x6B, 0x61, 0x7B, 0xA2, 0x8C, 0x24, 0x94, 0x66, - 0x9C, 0x86, 0x9C, 0x86, 0x94, 0x85, 0x94, 0x65, 0x94, 0x45, 0x9C, 0x46, 0xAC, 0x68, 0xB4, 0xA9, - 0xC4, 0xCC, 0xCD, 0x2E, 0xD5, 0x91, 0xDD, 0xD2, 0xE5, 0xF4, 0xE6, 0x35, 0xE6, 0x35, 0xE6, 0x35, - 0xE6, 0x14, 0xE6, 0x14, 0xE5, 0xF3, 0xDD, 0xD2, 0xDD, 0xD1, 0xDD, 0xB0, 0xD5, 0x8F, 0xD5, 0x6E, - 0xC5, 0x6C, 0xC5, 0x2A, 0xB5, 0x08, 0xAC, 0xE6, 0xAC, 0xC5, 0xA4, 0xC4, 0x9C, 0xA3, 0x9C, 0x82, - 0x9C, 0x82, 0x9C, 0x82, 0x9C, 0x82, 0x9C, 0x82, 0x9C, 0x83, 0x9C, 0x83, 0x9C, 0x82, 0x9C, 0x82, - 0x94, 0x83, 0x9C, 0x83, 0x9C, 0x83, 0x94, 0xA3, 0x94, 0x83, 0x94, 0xA3, 0x94, 0xA3, 0x94, 0x83, - 0x94, 0xA4, 0x94, 0xA4, 0x94, 0xA4, 0x94, 0xA4, 0x94, 0xA3, 0x94, 0xA4, 0x94, 0xC4, 0x9C, 0xC4, - 0x94, 0xC4, 0x9C, 0xE4, 0x9C, 0xC5, 0x9C, 0xC4, 0x9C, 0xE5, 0x9C, 0xC5, 0x9C, 0xC5, 0x9C, 0xC5, - 0x83, 0xE3, 0x4A, 0x60, 0x3A, 0x00, 0x3A, 0x20, 0x42, 0x40, 0x4A, 0x60, 0x3A, 0x20, 0x3A, 0x20, - 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x40, 0x52, 0xC1, 0x52, 0xC0, 0x52, 0xC0, 0x52, 0xC0, 0x52, 0xC0, - 0x5B, 0x01, 0x5B, 0x00, 0x8C, 0x44, 0xA5, 0x05, 0xAD, 0x25, 0xA5, 0x25, 0xAD, 0x26, 0xAD, 0x46, - 0xAD, 0x45, 0xAD, 0x26, 0x9C, 0xA6, 0x84, 0x03, 0x63, 0x80, 0x5B, 0x40, 0x5B, 0x40, 0x53, 0x20, - 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x40, 0x6B, 0x60, 0x73, 0x80, 0x73, 0x60, 0x6B, 0x60, 0x6B, 0xA0, - 0x6B, 0x42, 0x7B, 0xA4, 0x9C, 0x68, 0xB5, 0x0B, 0xC5, 0x8E, 0xCD, 0xCE, 0xC5, 0x8D, 0xBD, 0x2B, - 0xAD, 0x09, 0xA4, 0xA8, 0x94, 0x25, 0x7B, 0xC1, 0x6B, 0x40, 0x5A, 0xE0, 0x52, 0xC0, 0x4A, 0xC0, - 0x4A, 0xC0, 0x4A, 0xC0, 0x52, 0xE0, 0x53, 0x00, 0x5B, 0x20, 0x63, 0x40, 0x73, 0xA2, 0x84, 0x03, - 0x8C, 0x43, 0x8C, 0x64, 0x94, 0x65, 0x9C, 0x66, 0xA4, 0x67, 0xB4, 0x69, 0xC4, 0xAB, 0xCD, 0x0D, - 0xD5, 0x4F, 0xDD, 0x90, 0xE5, 0xD2, 0xE6, 0x13, 0xE6, 0x34, 0xE6, 0x34, 0xE6, 0x34, 0xE6, 0x14, - 0xE6, 0x14, 0xE6, 0x13, 0xDD, 0xF2, 0xDD, 0xD1, 0xDD, 0xB1, 0xD5, 0xB0, 0xD5, 0x8E, 0xCD, 0x6D, - 0xBD, 0x49, 0xB5, 0x28, 0xAC, 0xE6, 0xA4, 0xC4, 0xA4, 0xC3, 0x9C, 0xA3, 0x9C, 0xA3, 0x9C, 0xA3, - 0x9C, 0x83, 0x9C, 0x83, 0x9C, 0x83, 0x9C, 0x83, 0x9C, 0xA3, 0x9C, 0xA3, 0x9C, 0xA3, 0x9C, 0xA3, - 0x9C, 0xA3, 0x9C, 0xA3, 0x9C, 0xA3, 0x9C, 0xA4, 0x9C, 0xA4, 0x9C, 0xA4, 0x94, 0xA4, 0x94, 0xA4, - 0x94, 0xA4, 0x94, 0xA4, 0x94, 0xA4, 0x94, 0xA4, 0x94, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, - 0x9C, 0xC4, 0x9C, 0xE5, 0x9C, 0xC5, 0x9C, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0x9C, 0xC5, - 0x7B, 0xC3, 0x4A, 0x40, 0x3A, 0x00, 0x3A, 0x20, 0x42, 0x20, 0x4A, 0x60, 0x42, 0x40, 0x3A, 0x20, - 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x4A, 0xA0, 0x52, 0xC0, 0x52, 0xA0, 0x52, 0xC0, 0x52, 0xE0, - 0x52, 0xE1, 0x63, 0x20, 0x94, 0xA4, 0xA5, 0x05, 0xAD, 0x25, 0xAD, 0x25, 0xAD, 0x26, 0xAD, 0x46, - 0xAD, 0x45, 0xAD, 0x25, 0x9C, 0xA6, 0x7B, 0xE2, 0x63, 0x60, 0x5B, 0x40, 0x5B, 0x40, 0x5B, 0x20, - 0x53, 0x20, 0x53, 0x20, 0x5B, 0x40, 0x63, 0x40, 0x6B, 0x60, 0x73, 0x60, 0x6B, 0x60, 0x73, 0xE0, - 0x6B, 0x21, 0x7B, 0xA4, 0x9C, 0x68, 0xBD, 0x2C, 0xC5, 0xAE, 0xCD, 0xEF, 0xCD, 0xCE, 0xBD, 0x6C, - 0xA5, 0x08, 0x9C, 0x86, 0x8C, 0x03, 0x8B, 0xE1, 0x83, 0xC0, 0x73, 0x60, 0x63, 0x20, 0x52, 0xE0, - 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xE0, 0x52, 0xE0, 0x52, 0xE0, 0x5A, 0xE0, 0x63, 0x40, 0x6B, 0x81, - 0x73, 0xC1, 0x7C, 0x02, 0x8C, 0x23, 0x9C, 0x45, 0xAC, 0x47, 0xBC, 0x8A, 0xCC, 0xAC, 0xDD, 0x0E, - 0xDD, 0x91, 0xE5, 0xD2, 0xE5, 0xF3, 0xE6, 0x13, 0xE6, 0x33, 0xE6, 0x33, 0xDE, 0x12, 0xDD, 0xF2, - 0xDD, 0xD2, 0xD5, 0xD1, 0xD5, 0x90, 0xCD, 0x6F, 0xCD, 0x6E, 0xC5, 0x6D, 0xBD, 0x4C, 0xBD, 0x4A, - 0xB5, 0x27, 0xAC, 0xE6, 0xA4, 0xC4, 0xA4, 0xA3, 0x9C, 0xA3, 0x9C, 0xA3, 0x9C, 0xA3, 0x9C, 0xA3, - 0x9C, 0x83, 0x9C, 0x83, 0x9C, 0xA3, 0x9C, 0xA3, 0x9C, 0xA3, 0x9C, 0xA3, 0x9C, 0xA3, 0x9C, 0xC3, - 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, - 0x94, 0xC4, 0x94, 0xC4, 0x94, 0xC4, 0x94, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xE4, - 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0x9C, 0xC5, - 0x73, 0xA3, 0x4A, 0x40, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x00, 0x42, 0x60, 0x42, 0x60, 0x3A, 0x20, - 0x3A, 0x40, 0x42, 0x40, 0x42, 0x40, 0x42, 0x40, 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xC0, 0x5A, 0xE1, - 0x5B, 0x01, 0x7B, 0xC2, 0x9C, 0xE4, 0xA5, 0x25, 0xAD, 0x26, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, - 0xAD, 0x45, 0xA5, 0x25, 0x94, 0x85, 0x7B, 0xC2, 0x63, 0x60, 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x20, - 0x53, 0x40, 0x53, 0x20, 0x5B, 0x40, 0x5B, 0x20, 0x63, 0x60, 0x6B, 0x80, 0x6B, 0x80, 0x7C, 0x20, - 0x6B, 0x21, 0x83, 0xA4, 0xA4, 0x88, 0xC5, 0x4D, 0xCD, 0xCF, 0xCD, 0xEF, 0xC5, 0xCE, 0xBD, 0x6C, - 0xA4, 0xE7, 0x9C, 0x86, 0x9C, 0x45, 0xA4, 0x65, 0xA4, 0x65, 0x94, 0x04, 0x7B, 0x82, 0x63, 0x00, - 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xE0, 0x52, 0xE0, 0x52, 0xC0, 0x52, 0xE0, 0x5B, 0x00, 0x5B, 0x20, - 0x6B, 0x80, 0x6B, 0xA0, 0x7B, 0xC1, 0x8C, 0x03, 0xA4, 0x66, 0xBC, 0x89, 0xC4, 0xCC, 0xCC, 0xEE, - 0xDD, 0x70, 0xDD, 0xB1, 0xDD, 0xD2, 0xDD, 0xD1, 0xD5, 0xD1, 0xD5, 0xD0, 0xD5, 0xAF, 0xD5, 0x8F, - 0xCD, 0x8F, 0xC5, 0x6E, 0xC5, 0x2D, 0xBD, 0x0C, 0xB5, 0x0B, 0xB5, 0x0A, 0xAD, 0x09, 0xAD, 0x08, - 0xA4, 0xE6, 0xA4, 0xC4, 0xA4, 0xA3, 0xA4, 0xA3, 0xA4, 0xA3, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, - 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xC4, 0xA4, 0xC4, 0xA4, 0xC4, 0xA4, 0xC4, - 0xA4, 0xC4, 0xA4, 0xC4, 0xA4, 0xC4, 0x9C, 0xE4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, - 0x9C, 0xC5, 0x9C, 0xC5, 0x9C, 0xC5, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xC4, 0x9C, 0xE4, 0x9C, 0xE5, - 0x9C, 0xE5, 0x9C, 0xE5, 0xA4, 0xE5, 0xA5, 0x05, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0x9C, 0xC5, - 0x73, 0x83, 0x4A, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x20, 0x42, 0x60, 0x3A, 0x20, - 0x3A, 0x20, 0x42, 0x40, 0x42, 0x40, 0x42, 0x40, 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xC0, 0x52, 0xC0, - 0x5A, 0xE0, 0x8C, 0x63, 0xA5, 0x24, 0xAD, 0x45, 0xAD, 0x26, 0xAD, 0x26, 0xAD, 0x45, 0xAD, 0x46, - 0xAD, 0x46, 0xA5, 0x05, 0x94, 0x65, 0x73, 0xC2, 0x63, 0x60, 0x5B, 0x20, 0x53, 0x20, 0x5B, 0x40, - 0x5B, 0x20, 0x5B, 0x20, 0x63, 0x40, 0x63, 0x40, 0x6B, 0x60, 0x6B, 0x80, 0x73, 0xC0, 0x84, 0x81, - 0x6B, 0x22, 0x83, 0xA4, 0xAC, 0x68, 0xC5, 0x4C, 0xCD, 0xAE, 0xCD, 0xCE, 0xC5, 0x8D, 0xBD, 0x2C, - 0xB4, 0xC9, 0xAC, 0xA9, 0xB4, 0xA9, 0xBC, 0xCA, 0xBC, 0xA9, 0xB4, 0x48, 0x93, 0xC4, 0x73, 0x40, - 0x52, 0xC0, 0x52, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x52, 0xC0, 0x5A, 0xE0, 0x5B, 0x00, 0x5B, 0x20, - 0x63, 0x40, 0x6B, 0x80, 0x73, 0xA0, 0x7B, 0xE1, 0x94, 0x23, 0xA4, 0x66, 0xB4, 0xA9, 0xBC, 0xEB, - 0xC5, 0x2D, 0xCD, 0x4E, 0xC5, 0x6E, 0xC5, 0x6E, 0xC5, 0x4D, 0xBD, 0x4C, 0xBD, 0x2B, 0xBD, 0x2B, - 0xB5, 0x0C, 0xB5, 0x0B, 0xAC, 0xCA, 0xA4, 0xC9, 0xA4, 0xA9, 0x9C, 0xC8, 0x9C, 0xC6, 0x9C, 0xC6, - 0xA4, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, - 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xC4, 0xA4, 0xC4, 0xA4, 0xC4, 0xA4, 0xC4, 0xA4, 0xC4, 0xA4, 0xE4, - 0xA4, 0xE4, 0xA4, 0xE4, 0xA4, 0xE4, 0x9C, 0xE4, 0x9C, 0xE4, 0x9C, 0xE4, 0x9C, 0xE5, 0x9C, 0xE5, - 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE4, 0x9C, 0xE4, 0x9C, 0xE5, 0x9C, 0xE5, - 0x9C, 0xE5, 0x9D, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0x9C, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0x9C, 0xA5, - 0x6B, 0x43, 0x42, 0x40, 0x3A, 0x20, 0x3A, 0x00, 0x3A, 0x20, 0x3A, 0x00, 0x42, 0x40, 0x42, 0x40, - 0x3A, 0x20, 0x42, 0x40, 0x42, 0x60, 0x42, 0x40, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xC0, - 0x6B, 0x60, 0x9C, 0xE4, 0xA5, 0x04, 0xAD, 0x25, 0xAD, 0x26, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x25, - 0xAD, 0x46, 0xA5, 0x25, 0x8C, 0x65, 0x73, 0xC2, 0x63, 0x60, 0x53, 0x20, 0x53, 0x20, 0x53, 0x40, - 0x63, 0x00, 0x63, 0x20, 0x6B, 0x20, 0x6B, 0x40, 0x6B, 0x60, 0x73, 0xA0, 0x7C, 0x00, 0x94, 0xC2, - 0x73, 0x22, 0x8B, 0x84, 0xA4, 0x27, 0xB4, 0x89, 0xBD, 0x0B, 0xC5, 0x4C, 0xBD, 0x0C, 0xBC, 0xCB, - 0xBC, 0x8A, 0xBC, 0xAA, 0xC4, 0xCB, 0xCC, 0xCB, 0xC4, 0xAB, 0xBC, 0x6A, 0x9C, 0x06, 0x7B, 0x81, - 0x52, 0xE0, 0x52, 0xC0, 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xC0, 0x52, 0xC0, 0x5B, 0x00, 0x5B, 0x20, - 0x63, 0x20, 0x63, 0x60, 0x6B, 0x80, 0x73, 0xC0, 0x7B, 0xE1, 0x84, 0x02, 0x94, 0x44, 0x94, 0x86, - 0xA4, 0xA8, 0xAC, 0xC9, 0xAC, 0xEA, 0xAC, 0xCA, 0xA4, 0xC9, 0xA4, 0xC9, 0xA4, 0xC9, 0xA4, 0xC9, - 0x94, 0xA8, 0x94, 0x88, 0x8C, 0x87, 0x8C, 0x67, 0x8C, 0x66, 0x94, 0x86, 0x94, 0x85, 0x9C, 0x84, - 0xA4, 0xA5, 0xA4, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA5, 0xA4, 0xA5, 0xA4, 0xA5, 0xA4, 0xC4, - 0xA4, 0xC4, 0xA4, 0xC4, 0xA4, 0xC4, 0xA4, 0xC4, 0xA4, 0xC4, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, - 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, - 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, - 0x9D, 0x05, 0x9D, 0x05, 0x9C, 0xE5, 0xA5, 0x05, 0x9D, 0x05, 0xA5, 0x05, 0x9C, 0xE5, 0x94, 0xA4, - 0x63, 0x22, 0x42, 0x40, 0x3A, 0x20, 0x3A, 0x00, 0x3A, 0x00, 0x39, 0xE0, 0x3A, 0x00, 0x42, 0x40, - 0x3A, 0x40, 0x42, 0x40, 0x42, 0x60, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0xA0, 0x52, 0xC0, - 0x84, 0x21, 0xA5, 0x05, 0xA5, 0x05, 0xAD, 0x25, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x45, - 0xAD, 0x46, 0xA5, 0x25, 0x94, 0x65, 0x73, 0xC2, 0x63, 0x80, 0x5B, 0x20, 0x53, 0x00, 0x53, 0x20, - 0x63, 0x20, 0x63, 0x20, 0x6B, 0x40, 0x6B, 0x40, 0x6B, 0x80, 0x73, 0xC0, 0x8C, 0x61, 0x9D, 0x03, - 0x73, 0x63, 0x8B, 0xA5, 0xA3, 0xE6, 0xA3, 0xE7, 0xA4, 0x28, 0xAC, 0x69, 0xAC, 0x49, 0xAC, 0x29, - 0xBC, 0x49, 0xC4, 0x6A, 0xCC, 0xCB, 0xCC, 0xCB, 0xCC, 0xAB, 0xC4, 0xAA, 0xA4, 0x47, 0x7B, 0x81, - 0x5B, 0x00, 0x52, 0xC0, 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xC0, 0x52, 0xC0, 0x5A, 0xE0, 0x5B, 0x20, - 0x63, 0x40, 0x6B, 0x60, 0x6B, 0x80, 0x73, 0xA0, 0x73, 0xA0, 0x73, 0xC0, 0x73, 0xC0, 0x73, 0xE1, - 0x7B, 0xE1, 0x84, 0x23, 0x8C, 0x44, 0x8C, 0x44, 0x8C, 0x24, 0x84, 0x45, 0x84, 0x45, 0x84, 0x46, - 0x84, 0x46, 0x84, 0x46, 0x84, 0x46, 0x84, 0x66, 0x8C, 0x66, 0x94, 0x86, 0x9C, 0xA5, 0xA4, 0xC5, - 0xA4, 0xC5, 0xA4, 0xC5, 0xA4, 0xA5, 0xA4, 0xA5, 0xA4, 0xA5, 0xA4, 0xA5, 0xA4, 0xC5, 0xAC, 0xC5, - 0xAC, 0xC5, 0xAC, 0xC5, 0xAC, 0xE5, 0xAC, 0xE4, 0xAC, 0xE4, 0xAC, 0xE5, 0xAC, 0xE5, 0xA5, 0x05, - 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, - 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9D, 0x05, - 0xA5, 0x05, 0x9D, 0x05, 0x9C, 0xE5, 0xA5, 0x05, 0x9D, 0x05, 0xA5, 0x05, 0x9C, 0xE5, 0x94, 0x84, - 0x5A, 0xE1, 0x4A, 0x60, 0x3A, 0x00, 0x32, 0x00, 0x32, 0x00, 0x31, 0xE0, 0x39, 0xE0, 0x42, 0x60, - 0x42, 0x40, 0x42, 0x40, 0x42, 0x60, 0x42, 0x80, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0xC0, - 0x8C, 0x82, 0x9C, 0xE5, 0xA5, 0x26, 0xAD, 0x26, 0xAD, 0x26, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x45, - 0xAD, 0x46, 0xA5, 0x26, 0x94, 0x85, 0x73, 0xC2, 0x63, 0x60, 0x5B, 0x40, 0x53, 0x20, 0x53, 0x20, - 0x5B, 0x40, 0x63, 0x60, 0x63, 0x60, 0x63, 0x60, 0x63, 0x80, 0x74, 0x00, 0x8C, 0xC2, 0xA5, 0x44, - 0x8B, 0xA5, 0x93, 0xA5, 0x9B, 0xE7, 0x9B, 0x86, 0x93, 0x86, 0x9B, 0x86, 0xA3, 0xA6, 0xAB, 0xC7, - 0xBC, 0x09, 0xCC, 0x8C, 0xCC, 0xAC, 0xC4, 0xAB, 0xBC, 0xAA, 0xAC, 0xA9, 0x94, 0x45, 0x7B, 0xC1, - 0x63, 0x60, 0x53, 0x00, 0x4A, 0xC1, 0x4A, 0xA0, 0x4A, 0xC0, 0x4A, 0xA0, 0x52, 0xC0, 0x5A, 0xE0, - 0x5B, 0x20, 0x63, 0x40, 0x6B, 0x80, 0x6B, 0xA0, 0x73, 0xA0, 0x73, 0xC0, 0x73, 0xC0, 0x73, 0xE0, - 0x6B, 0xE0, 0x6B, 0xC0, 0x6B, 0xA0, 0x6B, 0xC0, 0x73, 0xE0, 0x73, 0xE2, 0x74, 0x03, 0x7C, 0x23, - 0x7C, 0x45, 0x84, 0x45, 0x8C, 0x66, 0x94, 0x86, 0x9C, 0xA6, 0x9C, 0xA6, 0xA4, 0xC6, 0xA4, 0xC5, - 0xA4, 0xC5, 0xA4, 0xC5, 0xA4, 0xC5, 0xA4, 0xC5, 0xA4, 0xC5, 0xA4, 0xC5, 0xAC, 0xC5, 0xAC, 0xC5, - 0xAC, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, - 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0x9D, 0x05, 0xA4, 0xE5, - 0x9D, 0x05, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, - 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x04, 0x9C, 0xE5, 0x84, 0x03, - 0x52, 0xA0, 0x4A, 0x60, 0x42, 0x20, 0x3A, 0x00, 0x3A, 0x00, 0x31, 0xE0, 0x31, 0xE0, 0x42, 0x40, - 0x42, 0x80, 0x42, 0x40, 0x4A, 0x60, 0x4A, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x80, 0x63, 0x80, - 0x9C, 0xC4, 0xA4, 0xE4, 0xA5, 0x25, 0xA5, 0x25, 0xAD, 0x26, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, - 0xA5, 0x65, 0xAD, 0x46, 0x94, 0x65, 0x73, 0xC2, 0x63, 0x41, 0x5B, 0x20, 0x53, 0x20, 0x53, 0x00, - 0x53, 0x20, 0x63, 0x60, 0x6B, 0x80, 0x63, 0x80, 0x73, 0xC0, 0x8C, 0x81, 0x9D, 0x04, 0xA5, 0x25, - 0x9C, 0x46, 0x9C, 0x26, 0xA4, 0x27, 0x93, 0xC7, 0x8B, 0x45, 0x83, 0x04, 0x93, 0x45, 0xAB, 0xC8, - 0xC4, 0x09, 0xC4, 0x6B, 0xC4, 0x6B, 0xB4, 0x89, 0xAC, 0xA8, 0x9C, 0x87, 0x8C, 0x44, 0x7C, 0x02, - 0x6B, 0xA0, 0x5B, 0x20, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xC0, - 0x5A, 0xE0, 0x5B, 0x20, 0x63, 0x60, 0x6B, 0x80, 0x6B, 0xA0, 0x73, 0xC0, 0x74, 0x00, 0x7C, 0x20, - 0x74, 0x00, 0x6C, 0x00, 0x6B, 0xE0, 0x73, 0xE0, 0x74, 0x00, 0x7C, 0x22, 0x7C, 0x23, 0x84, 0x44, - 0x84, 0x65, 0x8C, 0x86, 0x94, 0xA6, 0x9C, 0xA6, 0x9C, 0xC6, 0xA4, 0xC6, 0xA4, 0xE6, 0xA4, 0xE6, - 0xA4, 0xC5, 0xA4, 0xC5, 0xA4, 0xC5, 0xA4, 0xC5, 0xA4, 0xC5, 0xAC, 0xC5, 0xAC, 0xC5, 0xAC, 0xC5, - 0xAC, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, - 0xAD, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, - 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, - 0x9C, 0xE5, 0x9D, 0x05, 0x9C, 0xE5, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x04, 0x9C, 0xC5, 0x7B, 0xA2, - 0x4A, 0x60, 0x4A, 0x60, 0x42, 0x20, 0x3A, 0x00, 0x32, 0x00, 0x31, 0xE0, 0x32, 0x00, 0x42, 0x40, - 0x42, 0x60, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0x80, 0x73, 0xE1, - 0x9C, 0xE4, 0xA5, 0x05, 0xA5, 0x25, 0xA5, 0x26, 0xA5, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, - 0xAD, 0x46, 0xA5, 0x26, 0x94, 0x84, 0x73, 0xA1, 0x5B, 0x40, 0x53, 0x20, 0x53, 0x20, 0x53, 0x20, - 0x5B, 0x40, 0x63, 0x60, 0x63, 0x80, 0x6B, 0xC0, 0x84, 0x41, 0x94, 0xE3, 0x9D, 0x25, 0xA5, 0x45, - 0xAC, 0xE8, 0xAC, 0xC8, 0xA4, 0x88, 0x9C, 0x07, 0x83, 0x45, 0x72, 0x82, 0x8A, 0xE4, 0xAB, 0xC8, - 0xBC, 0x29, 0xBC, 0x6A, 0xB4, 0x8A, 0xAC, 0xA8, 0x9C, 0xA6, 0x8C, 0x65, 0x84, 0x44, 0x7C, 0x22, - 0x73, 0xE0, 0x6B, 0x80, 0x5B, 0x00, 0x4A, 0xE0, 0x4A, 0xC0, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0xA0, - 0x52, 0xC0, 0x5B, 0x00, 0x63, 0x40, 0x6B, 0x60, 0x6B, 0x80, 0x73, 0xC0, 0x7C, 0x20, 0x84, 0x61, - 0x84, 0x62, 0x7C, 0x60, 0x7C, 0x40, 0x7C, 0x20, 0x7C, 0x41, 0x84, 0x62, 0x84, 0x63, 0x8C, 0x83, - 0x8C, 0x84, 0x94, 0xC5, 0x9C, 0xC5, 0x9C, 0xC5, 0xA4, 0xC5, 0xA4, 0xC5, 0xAC, 0xE5, 0xAC, 0xE5, - 0xAC, 0xE6, 0xAC, 0xE6, 0xAC, 0xC6, 0xAC, 0xC6, 0xAC, 0xC5, 0xAC, 0xC5, 0xAC, 0xE5, 0xAC, 0xE5, - 0xAC, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, - 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x05, 0xA5, 0x05, - 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9D, 0x05, 0x9D, 0x05, - 0x9C, 0xE5, 0x9D, 0x05, 0x9C, 0xE5, 0x9D, 0x05, 0x9D, 0x05, 0x9C, 0xE4, 0x94, 0xC5, 0x6B, 0x61, - 0x42, 0x40, 0x42, 0x60, 0x42, 0x40, 0x3A, 0x20, 0x32, 0x00, 0x32, 0x00, 0x3A, 0x00, 0x42, 0x40, - 0x42, 0x40, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0x80, 0x52, 0xA0, 0x7C, 0x21, - 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x25, 0xA5, 0x26, 0xA5, 0x26, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, - 0xAD, 0x46, 0xA5, 0x26, 0x8C, 0x84, 0x6B, 0xA0, 0x5B, 0x40, 0x53, 0x40, 0x53, 0x20, 0x53, 0x20, - 0x53, 0x20, 0x5B, 0x60, 0x6B, 0xC0, 0x7C, 0x40, 0x94, 0xE2, 0x9D, 0x44, 0xA5, 0x45, 0xA5, 0x45, - 0xB5, 0x29, 0xB5, 0x2A, 0xAC, 0xA9, 0x94, 0x27, 0x7B, 0x64, 0x6A, 0x81, 0x8A, 0xE3, 0xB3, 0xC7, - 0xBC, 0x28, 0xB4, 0x69, 0xAC, 0x89, 0x9C, 0xA7, 0x8C, 0x84, 0x84, 0x63, 0x84, 0x43, 0x84, 0x43, - 0x7C, 0x22, 0x73, 0xC0, 0x63, 0x40, 0x53, 0x00, 0x4A, 0xE0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xA0, - 0x52, 0xC0, 0x52, 0xE0, 0x5B, 0x20, 0x63, 0x40, 0x6B, 0x60, 0x73, 0xC0, 0x7C, 0x20, 0x8C, 0x81, - 0x8C, 0xC4, 0x8C, 0xA1, 0x84, 0x80, 0x84, 0x60, 0x84, 0x60, 0x8C, 0x81, 0x8C, 0xA1, 0x8C, 0xA1, - 0x94, 0xA2, 0x94, 0xC3, 0x9C, 0xE3, 0x9C, 0xE3, 0x9C, 0xC3, 0xA4, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, - 0xAC, 0xE6, 0xAC, 0xE6, 0xAC, 0xE6, 0xAC, 0xE5, 0xAC, 0xC5, 0xAC, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, - 0xAC, 0xE5, 0xAC, 0xE5, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, - 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x05, 0x9D, 0x05, - 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE5, 0x9C, 0xE4, 0x9C, 0xE4, - 0x9D, 0x05, 0x9D, 0x05, 0x94, 0xE4, 0x9D, 0x05, 0x9D, 0x04, 0x9D, 0x04, 0x94, 0xC5, 0x63, 0x41, - 0x42, 0x40, 0x42, 0x40, 0x42, 0x61, 0x3A, 0x20, 0x32, 0x00, 0x32, 0x00, 0x3A, 0x00, 0x42, 0x40, - 0x4A, 0x60, 0x42, 0x60, 0x42, 0x60, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0x80, 0x5B, 0x00, 0x84, 0x61, - 0x9D, 0x05, 0xA5, 0x05, 0xA5, 0x25, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x46, 0xA5, 0x46, 0xAD, 0x46, - 0xAD, 0x46, 0xA5, 0x26, 0x8C, 0x84, 0x63, 0x80, 0x53, 0x00, 0x53, 0x00, 0x53, 0x00, 0x5B, 0x20, - 0x63, 0x60, 0x6B, 0xC0, 0x7C, 0x41, 0x94, 0xE2, 0x9D, 0x24, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, - 0xB5, 0x08, 0xB5, 0x49, 0xAC, 0xE9, 0x94, 0x47, 0x7B, 0x63, 0x6A, 0xA1, 0x8B, 0x23, 0xB3, 0xC7, - 0xBC, 0x28, 0xBC, 0x89, 0xAC, 0x88, 0x94, 0x64, 0x84, 0x42, 0x84, 0x42, 0x84, 0x63, 0x8C, 0x43, - 0x84, 0x43, 0x7C, 0x01, 0x6B, 0xA0, 0x63, 0x20, 0x52, 0xE0, 0x4A, 0xC0, 0x4A, 0xC0, 0x52, 0xC0, - 0x52, 0xE0, 0x53, 0x00, 0x5B, 0x20, 0x5B, 0x20, 0x63, 0x40, 0x6B, 0xA0, 0x84, 0x21, 0x94, 0xA2, - 0x94, 0xC5, 0x8C, 0xA2, 0x8C, 0x80, 0x84, 0x60, 0x8C, 0x60, 0x8C, 0x80, 0x8C, 0x80, 0x8C, 0xA0, - 0x94, 0xC0, 0x94, 0xE0, 0x9C, 0xE1, 0x9C, 0xE1, 0x9C, 0xE3, 0xA5, 0x04, 0xAD, 0x06, 0xAC, 0xE7, - 0xAD, 0x07, 0xAC, 0xE6, 0xAC, 0xE6, 0xAC, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, - 0xAC, 0xE5, 0xAC, 0xE5, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, - 0xA5, 0x25, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x05, 0x9D, 0x05, 0x9D, 0x05, - 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x94, 0xE5, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xE4, - 0x94, 0xE5, 0x9D, 0x04, 0x94, 0xE4, 0x9D, 0x05, 0x94, 0xE4, 0x94, 0xE4, 0x8C, 0xA5, 0x63, 0x21, - 0x42, 0x40, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x00, 0x3A, 0x20, 0x42, 0x60, - 0x4A, 0x80, 0x4A, 0x60, 0x42, 0x60, 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0xA0, 0x73, 0xC1, 0x94, 0xC3, - 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, - 0xAD, 0x46, 0xA5, 0x26, 0x8C, 0x63, 0x63, 0x60, 0x53, 0x00, 0x5B, 0x40, 0x63, 0x60, 0x6B, 0xC0, - 0x84, 0x41, 0x8C, 0xA2, 0x95, 0x03, 0x9D, 0x45, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, - 0xA4, 0xE6, 0xB5, 0x28, 0xA4, 0xE7, 0x8C, 0x45, 0x7B, 0x63, 0x72, 0xC1, 0x93, 0x45, 0xB3, 0xC8, - 0xBC, 0x28, 0xBC, 0x69, 0xB4, 0x87, 0x94, 0x23, 0x84, 0x21, 0x84, 0x62, 0x84, 0x63, 0x84, 0x63, - 0x84, 0x64, 0x84, 0x43, 0x7B, 0xC1, 0x6B, 0x60, 0x5B, 0x00, 0x52, 0xE0, 0x52, 0xC0, 0x52, 0xE0, - 0x52, 0xE0, 0x53, 0x00, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x20, 0x6B, 0x60, 0x7C, 0x01, 0x94, 0x82, - 0x94, 0xC3, 0x8C, 0xA1, 0x8C, 0x60, 0x84, 0x60, 0x84, 0x60, 0x84, 0x80, 0x8C, 0x80, 0x8C, 0x80, - 0x8C, 0xA0, 0x8C, 0xC0, 0x94, 0xC0, 0x94, 0xC0, 0x9C, 0xE2, 0xA5, 0x05, 0xAD, 0x27, 0xAD, 0x08, - 0xAD, 0x07, 0xAD, 0x07, 0xAC, 0xE6, 0xAC, 0xE5, 0xA4, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, - 0xAC, 0xE5, 0xAC, 0xE5, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x25, - 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, 0x9D, 0x25, 0x9D, 0x05, 0x9D, 0x05, - 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xE4, - 0x94, 0xE5, 0x95, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x94, 0xE4, 0x94, 0xE4, 0x84, 0x64, 0x5A, 0xE1, - 0x42, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x60, - 0x4A, 0x60, 0x4A, 0x81, 0x4A, 0x80, 0x4A, 0xA0, 0x4A, 0xA0, 0x5B, 0x00, 0x8C, 0x62, 0xA5, 0x05, - 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, - 0xAD, 0x46, 0x9D, 0x05, 0x84, 0x22, 0x63, 0x60, 0x6B, 0xA0, 0x74, 0x21, 0x7C, 0x61, 0x8C, 0xC2, - 0x9D, 0x04, 0x9D, 0x24, 0xA5, 0x45, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x47, 0xA5, 0x46, 0xA5, 0x46, - 0x9C, 0xC5, 0xA4, 0xE6, 0x9C, 0xC6, 0x8C, 0x25, 0x7B, 0x83, 0x73, 0x02, 0x93, 0x45, 0xAB, 0xA7, - 0xB3, 0xC7, 0xB4, 0x27, 0xAC, 0x45, 0x94, 0x22, 0x8C, 0x21, 0x8C, 0x62, 0x8C, 0x63, 0x8C, 0x63, - 0x8C, 0x84, 0x8C, 0x44, 0x84, 0x03, 0x73, 0xA1, 0x63, 0x40, 0x52, 0xE0, 0x4A, 0xE0, 0x52, 0xC0, - 0x52, 0xE0, 0x53, 0x00, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x00, 0x63, 0x40, 0x73, 0xC0, 0x8C, 0x60, - 0x8C, 0xA0, 0x8C, 0x80, 0x84, 0x40, 0x84, 0x40, 0x7C, 0x40, 0x84, 0x60, 0x84, 0x60, 0x84, 0x80, - 0x84, 0x60, 0x84, 0x80, 0x84, 0x80, 0x8C, 0xA0, 0x94, 0xC1, 0x9D, 0x04, 0xA5, 0x06, 0xAD, 0x27, - 0xAD, 0x27, 0xAD, 0x07, 0xAC, 0xE6, 0xA4, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, 0xAC, 0xE5, - 0xAC, 0xE5, 0xAC, 0xE5, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xA5, 0x25, 0xA5, 0x25, - 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, - 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x04, 0x9D, 0x04, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xE4, - 0x94, 0xE5, 0x94, 0xE4, 0x9D, 0x05, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xC4, 0x7C, 0x03, 0x52, 0xA0, - 0x42, 0x60, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x42, 0x40, - 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0xA0, 0x5B, 0x20, 0x73, 0xC1, 0x94, 0xC2, 0xA4, 0xE5, - 0x9C, 0xE5, 0x9D, 0x05, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x46, 0xA5, 0x46, - 0xA5, 0x46, 0x9C, 0xE5, 0x7C, 0x02, 0x73, 0xC0, 0x84, 0x82, 0x95, 0x04, 0x9D, 0x24, 0x9D, 0x44, - 0xA5, 0x45, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x66, 0xA5, 0x67, 0xA5, 0x67, - 0x9C, 0xA6, 0x94, 0x86, 0x94, 0x66, 0x84, 0x24, 0x7B, 0xA3, 0x7B, 0x42, 0x93, 0x65, 0xA3, 0x66, - 0xA3, 0xA6, 0xA3, 0xC6, 0xA4, 0x04, 0x94, 0x01, 0x8C, 0x00, 0x8C, 0x22, 0x8C, 0x43, 0x94, 0x64, - 0x8C, 0x84, 0x94, 0x65, 0x94, 0x45, 0x84, 0x02, 0x6B, 0x80, 0x53, 0x20, 0x4A, 0xE0, 0x4A, 0xC0, - 0x52, 0xE0, 0x52, 0xE0, 0x53, 0x00, 0x53, 0x00, 0x5B, 0x00, 0x5B, 0x20, 0x73, 0xC0, 0x84, 0x40, - 0x8C, 0x60, 0x84, 0x40, 0x7C, 0x20, 0x7C, 0x20, 0x74, 0x20, 0x74, 0x40, 0x74, 0x40, 0x7C, 0x60, - 0x7C, 0x40, 0x7C, 0x40, 0x7C, 0x40, 0x84, 0x60, 0x8C, 0xA1, 0x9C, 0xC3, 0xA5, 0x05, 0xA5, 0x07, - 0xAD, 0x28, 0xAD, 0x07, 0xAC, 0xE6, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, - 0xAC, 0xE5, 0xAC, 0xE5, 0xAD, 0x05, 0xAD, 0x05, 0xAD, 0x05, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, - 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, - 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x04, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xE4, - 0x94, 0xE5, 0x94, 0xE4, 0x9D, 0x04, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xC4, 0x73, 0xE3, 0x4A, 0x80, - 0x42, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x42, 0x60, - 0x4A, 0xA0, 0x4A, 0xA0, 0x4A, 0x80, 0x52, 0xC0, 0x6B, 0xA0, 0x8C, 0xA3, 0x9D, 0x03, 0x9C, 0xE4, - 0xA5, 0x05, 0x9D, 0x05, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x46, - 0x9D, 0x46, 0x9D, 0x06, 0x84, 0x43, 0x84, 0x42, 0x9D, 0x04, 0xA5, 0x66, 0xA5, 0x47, 0xA5, 0x27, - 0xA5, 0x46, 0xA5, 0x47, 0xA5, 0x47, 0xA5, 0x66, 0xA5, 0x66, 0xA5, 0x65, 0xA5, 0x46, 0xA5, 0x47, - 0x9C, 0x27, 0x94, 0x47, 0x94, 0x65, 0x84, 0x44, 0x84, 0x03, 0x83, 0xC3, 0x8B, 0x84, 0x93, 0x85, - 0x93, 0x64, 0x93, 0x83, 0x93, 0xA1, 0x93, 0xE0, 0x94, 0x20, 0x8C, 0x21, 0x8C, 0x22, 0x94, 0x44, - 0x94, 0x44, 0x9C, 0x66, 0x9C, 0x66, 0x94, 0x24, 0x7B, 0xC1, 0x63, 0x40, 0x52, 0xE0, 0x4A, 0xC0, - 0x4A, 0xC0, 0x4A, 0xC0, 0x52, 0xE0, 0x5A, 0xE0, 0x5A, 0xE0, 0x5B, 0x20, 0x73, 0xA0, 0x84, 0x20, - 0x84, 0x60, 0x7C, 0x20, 0x7C, 0x20, 0x74, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x74, 0x20, - 0x6C, 0x20, 0x74, 0x20, 0x74, 0x20, 0x74, 0x20, 0x84, 0x60, 0x8C, 0xA2, 0x9C, 0xC4, 0xA4, 0xE6, - 0xAD, 0x08, 0xAD, 0x07, 0xAD, 0x05, 0xA4, 0xE4, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, - 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, - 0xA5, 0x25, 0xA5, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, - 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x04, 0x9D, 0x05, 0x94, 0xE5, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xE4, - 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xE4, 0x8C, 0xA4, 0x6B, 0x82, 0x4A, 0x80, - 0x3A, 0x40, 0x42, 0x40, 0x3A, 0x00, 0x3A, 0x40, 0x42, 0x60, 0x42, 0x60, 0x42, 0x40, 0x42, 0x60, - 0x4A, 0x80, 0x4A, 0xA0, 0x52, 0xA0, 0x5A, 0xE0, 0x7C, 0x02, 0x94, 0xE3, 0x94, 0xE3, 0x9D, 0x05, - 0x9D, 0x05, 0x9D, 0x05, 0xA5, 0x05, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, - 0xA5, 0x46, 0x9D, 0x05, 0x94, 0xC4, 0x94, 0xC4, 0x9D, 0x05, 0xA5, 0x46, 0xA5, 0x66, 0xA5, 0x46, - 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, - 0x93, 0xE7, 0x94, 0x27, 0x94, 0x66, 0x8C, 0x85, 0x8C, 0x64, 0x8C, 0x23, 0x8B, 0xC3, 0x83, 0xA3, - 0x83, 0x62, 0x83, 0x62, 0x8B, 0x80, 0x8B, 0xC0, 0x94, 0x20, 0x94, 0x41, 0x94, 0x42, 0x94, 0x44, - 0x9C, 0x44, 0x9C, 0x45, 0x9C, 0x66, 0x9C, 0x25, 0x8B, 0xE2, 0x73, 0x80, 0x5B, 0x00, 0x4A, 0xC0, - 0x4A, 0xA0, 0x4A, 0xA0, 0x52, 0xC0, 0x52, 0xC0, 0x52, 0xE0, 0x5B, 0x20, 0x73, 0xC0, 0x7C, 0x20, - 0x7C, 0x40, 0x74, 0x00, 0x6B, 0xE0, 0x6B, 0xC0, 0x63, 0xC0, 0x6B, 0xE0, 0x6B, 0xE0, 0x6C, 0x00, - 0x6C, 0x00, 0x6C, 0x00, 0x6B, 0xE0, 0x6C, 0x00, 0x74, 0x20, 0x84, 0x41, 0x94, 0x82, 0x9C, 0xC4, - 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE6, 0xAC, 0xE5, 0xA4, 0xE5, 0xA4, 0xE5, 0xA4, 0xE4, 0xA4, 0xE5, - 0xA4, 0xE4, 0xA4, 0xE4, 0xA4, 0xE4, 0xA5, 0x04, 0xA5, 0x05, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x05, - 0xA5, 0x25, 0xA5, 0x25, 0x9D, 0x25, 0x9D, 0x24, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, - 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x04, 0x9D, 0x04, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE4, 0x94, 0xE4, - 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xE5, 0x94, 0xE4, 0x94, 0xE4, 0x84, 0x84, 0x63, 0x41, 0x4A, 0x60, - 0x3A, 0x40, 0x3A, 0x20, 0x3A, 0x20, 0x3A, 0x40, 0x42, 0x40, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x80, - 0x4A, 0x80, 0x4A, 0xA0, 0x63, 0x40, 0x7C, 0x02, 0x94, 0xA3, 0x9C, 0xE4, 0x9C, 0xE4, 0x9D, 0x06, - 0x9D, 0x05, 0xA5, 0x05, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, - 0xA5, 0x46, 0x9D, 0x26, 0x9D, 0x06, 0x9D, 0x26, 0x9D, 0x26, 0xA5, 0x46, 0xA5, 0x46, 0x9D, 0x46, - 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, - 0x94, 0x06, 0x94, 0x46, 0x94, 0x86, 0x94, 0xA5, 0x94, 0xA5, 0x8C, 0x84, 0x84, 0x23, 0x83, 0xE2, - 0x7B, 0x81, 0x7B, 0x60, 0x7B, 0x60, 0x83, 0xA0, 0x8C, 0x00, 0x94, 0x41, 0x9C, 0x62, 0x94, 0x43, - 0x9C, 0x45, 0xA4, 0x45, 0xA4, 0x45, 0xA4, 0x26, 0x94, 0x04, 0x7B, 0xA1, 0x63, 0x20, 0x52, 0xC0, - 0x4A, 0xC0, 0x4A, 0xA0, 0x4A, 0xC0, 0x52, 0xC0, 0x52, 0xE0, 0x5B, 0x20, 0x6B, 0xA0, 0x7B, 0xE0, - 0x74, 0x00, 0x6B, 0xC0, 0x63, 0x80, 0x5B, 0x60, 0x5B, 0x60, 0x5B, 0x80, 0x63, 0xA0, 0x6B, 0xE0, - 0x6B, 0xE0, 0x6B, 0xE0, 0x6B, 0xE0, 0x6B, 0xC0, 0x6B, 0xE0, 0x74, 0x00, 0x84, 0x40, 0x8C, 0x81, - 0x9C, 0xA2, 0x9C, 0xC3, 0xA4, 0xE5, 0xA4, 0xE6, 0xA4, 0xE5, 0xA5, 0x05, 0xA4, 0xE4, 0xA4, 0xE4, - 0xA4, 0xE4, 0xA4, 0xE4, 0xA4, 0xE4, 0xA5, 0x04, 0xA5, 0x04, 0xA5, 0x04, 0x9D, 0x04, 0x9D, 0x04, - 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, - 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x04, 0x9D, 0x05, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, - 0x94, 0xE4, 0x94, 0xE4, 0x9D, 0x04, 0x94, 0xE4, 0x94, 0xE5, 0x7C, 0x23, 0x52, 0xE0, 0x42, 0x40, - 0x42, 0x40, 0x3A, 0x40, 0x42, 0x40, 0x42, 0x40, 0x3A, 0x20, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0xA0, - 0x52, 0x80, 0x5B, 0x00, 0x84, 0x21, 0x9C, 0xE3, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x06, 0xA5, 0x06, - 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, - 0x9D, 0x26, 0x9D, 0x26, 0xA5, 0x47, 0xA5, 0x47, 0x9D, 0x27, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, - 0x9D, 0x46, 0x9D, 0x46, 0x9D, 0x46, 0x9D, 0x46, 0x9D, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x47, - 0x94, 0x45, 0x94, 0x85, 0x94, 0xA5, 0x94, 0xC5, 0x94, 0xC5, 0x94, 0xC5, 0x8C, 0x84, 0x84, 0x43, - 0x7B, 0xE2, 0x7B, 0xA0, 0x7B, 0x80, 0x83, 0xA0, 0x8B, 0xE0, 0x94, 0x41, 0x9C, 0x63, 0x9C, 0x43, - 0xA4, 0x46, 0xA4, 0x45, 0xAC, 0x45, 0xA4, 0x26, 0x9C, 0x04, 0x83, 0xC1, 0x6B, 0x40, 0x5B, 0x00, - 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x52, 0xC0, 0x52, 0xE0, 0x5B, 0x20, 0x6B, 0x80, 0x6B, 0xC0, - 0x6B, 0xC0, 0x5B, 0x60, 0x53, 0x20, 0x4B, 0x00, 0x4A, 0xE0, 0x53, 0x00, 0x53, 0x40, 0x5B, 0x80, - 0x63, 0xC0, 0x6B, 0xE0, 0x6C, 0x00, 0x6B, 0xE0, 0x6B, 0xE0, 0x6B, 0xE0, 0x74, 0x00, 0x84, 0x40, - 0x8C, 0x80, 0x94, 0xC2, 0x9C, 0xE4, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA4, 0xE5, 0xA4, 0xE5, - 0xA4, 0xE4, 0x9C, 0xE4, 0x9C, 0xE4, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, - 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, - 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, - 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xE4, 0x94, 0xC5, 0x73, 0xE3, 0x4A, 0x80, 0x42, 0x60, - 0x42, 0x40, 0x3A, 0x20, 0x42, 0x60, 0x42, 0x60, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0xA0, 0x52, 0xC0, - 0x63, 0x40, 0x73, 0xC0, 0x94, 0xC3, 0x9D, 0x04, 0x9C, 0xE5, 0xA5, 0x06, 0xA5, 0x25, 0xA5, 0x05, - 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x46, 0xA5, 0x27, 0xA5, 0x27, 0xA5, 0x26, 0xA5, 0x26, - 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x27, 0x9D, 0x27, 0x9D, 0x26, 0x9D, 0x26, - 0x9D, 0x46, 0x9D, 0x46, 0x9D, 0x46, 0x9D, 0x26, 0x9D, 0x46, 0x9D, 0x46, 0xA5, 0x47, 0xA5, 0x47, - 0x94, 0xC4, 0x94, 0xC5, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xC5, 0x8C, 0xA4, - 0x84, 0x43, 0x83, 0xE2, 0x7B, 0xA1, 0x7B, 0xA0, 0x83, 0xC0, 0x8C, 0x02, 0x9C, 0x63, 0x9C, 0x64, - 0xAC, 0x46, 0xAC, 0x46, 0xAC, 0x46, 0xA4, 0x26, 0x9C, 0x05, 0x83, 0xE1, 0x73, 0x80, 0x63, 0x20, - 0x52, 0xE0, 0x4A, 0xC0, 0x4A, 0xC0, 0x4A, 0xC0, 0x52, 0xE0, 0x5B, 0x20, 0x63, 0x60, 0x63, 0x80, - 0x5B, 0x60, 0x52, 0xE0, 0x42, 0xA0, 0x3A, 0x60, 0x3A, 0x40, 0x3A, 0x60, 0x4A, 0xC0, 0x53, 0x20, - 0x5B, 0x60, 0x63, 0xC0, 0x6B, 0xE0, 0x6C, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7C, 0x20, - 0x84, 0x60, 0x8C, 0x80, 0x94, 0xC1, 0x9C, 0xE3, 0xA4, 0xE4, 0xA5, 0x05, 0xA4, 0xE6, 0x9C, 0xE5, - 0xA5, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, - 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x95, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, - 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, - 0x94, 0xE4, 0x9C, 0xE4, 0x9C, 0xE4, 0x94, 0xE5, 0x8C, 0xA5, 0x6B, 0xA2, 0x42, 0x60, 0x42, 0x40, - 0x42, 0x40, 0x42, 0x40, 0x42, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x52, 0xA0, 0x4A, 0xA0, 0x5B, 0x20, - 0x84, 0x62, 0x94, 0xA3, 0x9D, 0x04, 0xA5, 0x25, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x05, 0xA5, 0x25, - 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x27, 0xA5, 0x27, 0xA5, 0x27, 0xA5, 0x27, 0xA5, 0x47, - 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, - 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x46, 0x9D, 0x47, 0xA5, 0x47, - 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE4, - 0x8C, 0x84, 0x84, 0x23, 0x7B, 0xE2, 0x7B, 0xA1, 0x7B, 0xA1, 0x83, 0xC2, 0x94, 0x04, 0xA4, 0x46, - 0xAC, 0x47, 0xAC, 0x46, 0xAC, 0x46, 0xA4, 0x46, 0x9C, 0x45, 0x8C, 0x22, 0x7B, 0xC0, 0x63, 0x40, - 0x52, 0xE0, 0x4A, 0xC0, 0x4A, 0xA0, 0x4A, 0xC0, 0x52, 0xE0, 0x5B, 0x20, 0x5B, 0x40, 0x63, 0x40, - 0x53, 0x00, 0x42, 0xA0, 0x3A, 0x40, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xE0, 0x3A, 0x40, 0x4A, 0xC0, - 0x53, 0x20, 0x63, 0x80, 0x6B, 0xE0, 0x74, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x74, 0x20, - 0x7C, 0x40, 0x84, 0x60, 0x8C, 0xA0, 0x94, 0xC1, 0x9C, 0xE3, 0x9C, 0xE4, 0xA5, 0x05, 0x9C, 0xE5, - 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9C, 0xE4, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, - 0x9D, 0x04, 0x9D, 0x04, 0x95, 0x04, 0x95, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, - 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, - 0x9D, 0x05, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, 0x8C, 0x85, 0x63, 0x62, 0x42, 0x60, 0x42, 0x40, - 0x4A, 0x60, 0x4A, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x4A, 0x80, 0x52, 0xA0, 0x5B, 0x00, 0x73, 0xC1, - 0x94, 0xE3, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x05, 0xA5, 0x26, - 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x27, 0xA5, 0x27, 0xA5, 0x27, 0xA5, 0x27, 0xA5, 0x27, - 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x06, 0x9D, 0x06, 0x9D, 0x26, - 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0xA5, 0x47, - 0x94, 0xE6, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, 0x94, 0xE5, - 0x94, 0xC4, 0x8C, 0x84, 0x84, 0x02, 0x7B, 0xC2, 0x7B, 0x82, 0x83, 0x62, 0x93, 0xA4, 0xA3, 0xE6, - 0xAC, 0x27, 0xAC, 0x47, 0xAC, 0x66, 0xA4, 0x66, 0x9C, 0x85, 0x94, 0x63, 0x84, 0x21, 0x73, 0xA0, - 0x5B, 0x20, 0x52, 0xE0, 0x4A, 0xC0, 0x4A, 0xC0, 0x53, 0x00, 0x5B, 0x20, 0x5B, 0x40, 0x5B, 0x40, - 0x4A, 0xE0, 0x3A, 0x60, 0x32, 0x00, 0x21, 0xC0, 0x21, 0x80, 0x21, 0x80, 0x29, 0xC0, 0x3A, 0x40, - 0x4A, 0xE0, 0x5B, 0x40, 0x6B, 0xA0, 0x73, 0xE0, 0x74, 0x20, 0x74, 0x20, 0x74, 0x20, 0x74, 0x20, - 0x74, 0x20, 0x7C, 0x40, 0x84, 0x60, 0x8C, 0xA0, 0x94, 0xC0, 0x9C, 0xE2, 0x9C, 0xE3, 0x9C, 0xE4, - 0x9C, 0xE4, 0x9C, 0xE4, 0x9C, 0xE4, 0x9D, 0x04, 0x9C, 0xE4, 0x95, 0x04, 0x9D, 0x04, 0x9D, 0x04, - 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x95, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, - 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, - 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9C, 0xE5, 0x84, 0x44, 0x5B, 0x01, 0x42, 0x60, 0x42, 0x40, - 0x4A, 0x60, 0x4A, 0x80, 0x4A, 0x80, 0x52, 0xA0, 0x52, 0xC0, 0x63, 0x60, 0x7C, 0x01, 0x94, 0xC3, - 0x9C, 0xE4, 0xA5, 0x25, 0xA5, 0x25, 0x9D, 0x05, 0xA5, 0x25, 0xA5, 0x45, 0xA5, 0x26, 0xA5, 0x26, - 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xAD, 0x47, 0xAD, 0x47, 0xA5, 0x27, 0xA5, 0x27, 0xA5, 0x27, - 0xA5, 0x27, 0xA5, 0x27, 0x9D, 0x27, 0x9D, 0x27, 0x9D, 0x06, 0x9D, 0x06, 0x9D, 0x06, 0x9D, 0x06, - 0x9D, 0x06, 0x9D, 0x06, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, - 0x9C, 0xE6, 0x9C, 0xE5, 0x94, 0xE5, 0x94, 0xE5, 0x95, 0x05, 0x94, 0xE5, 0x95, 0x05, 0x9D, 0x06, - 0x95, 0x04, 0x94, 0xC4, 0x84, 0x43, 0x83, 0xE2, 0x7B, 0xA2, 0x7B, 0x42, 0x8B, 0x44, 0xA3, 0x87, - 0xA4, 0x06, 0xAC, 0x47, 0xAC, 0x87, 0xA4, 0x86, 0x9C, 0xA4, 0x94, 0x83, 0x8C, 0x62, 0x84, 0x00, - 0x63, 0x80, 0x53, 0x00, 0x4A, 0xC0, 0x52, 0xC0, 0x5B, 0x00, 0x5B, 0x20, 0x5B, 0x20, 0x5B, 0x20, - 0x4A, 0xC0, 0x3A, 0x60, 0x32, 0x00, 0x21, 0xA0, 0x19, 0x60, 0x19, 0x40, 0x21, 0x80, 0x31, 0xE0, - 0x42, 0x80, 0x53, 0x00, 0x6B, 0x80, 0x73, 0xE0, 0x7C, 0x20, 0x7C, 0x40, 0x74, 0x40, 0x74, 0x40, - 0x74, 0x20, 0x7C, 0x40, 0x7C, 0x60, 0x84, 0x60, 0x8C, 0xA0, 0x94, 0xC0, 0x94, 0xE1, 0x9C, 0xE2, - 0x9C, 0xE4, 0x9C, 0xE4, 0x9C, 0xE4, 0x9C, 0xE4, 0x95, 0x04, 0x95, 0x04, 0x95, 0x04, 0x9D, 0x04, - 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x95, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, - 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, - 0x9D, 0x25, 0x9D, 0x25, 0x9C, 0xE5, 0x94, 0xC5, 0x7B, 0xE3, 0x52, 0xC0, 0x4A, 0x60, 0x42, 0x60, - 0x4A, 0x80, 0x4A, 0x80, 0x52, 0xA0, 0x5B, 0x00, 0x6B, 0x60, 0x84, 0x42, 0x94, 0xE4, 0x9D, 0x05, - 0x9D, 0x05, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, - 0xA5, 0x26, 0xA5, 0x26, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x27, 0xA5, 0x27, 0xA5, 0x27, - 0xA5, 0x27, 0xA5, 0x27, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x06, 0x9D, 0x06, - 0x9C, 0xE6, 0x9D, 0x06, 0x9D, 0x06, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x27, 0x9D, 0x27, - 0x94, 0xE5, 0x94, 0xE5, 0x9D, 0x05, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9C, 0xE5, - 0x9D, 0x05, 0x94, 0xE5, 0x94, 0xA4, 0x84, 0x02, 0x7B, 0x82, 0x83, 0x43, 0x8B, 0x24, 0x93, 0x66, - 0xA3, 0xE6, 0xAC, 0x47, 0xA4, 0xA6, 0x9C, 0xC5, 0x9C, 0xE5, 0x94, 0xC5, 0x94, 0xA3, 0x8C, 0x62, - 0x73, 0xC0, 0x63, 0x40, 0x53, 0x00, 0x52, 0xE0, 0x5B, 0x20, 0x63, 0x20, 0x63, 0x20, 0x53, 0x00, - 0x4A, 0xC0, 0x42, 0x60, 0x32, 0x00, 0x29, 0xC0, 0x21, 0x80, 0x19, 0x60, 0x19, 0x60, 0x21, 0x80, - 0x3A, 0x40, 0x4A, 0xC0, 0x63, 0x60, 0x73, 0xC0, 0x7C, 0x20, 0x7C, 0x40, 0x7C, 0x60, 0x7C, 0x40, - 0x7C, 0x40, 0x7C, 0x40, 0x7C, 0x40, 0x84, 0x60, 0x84, 0x80, 0x8C, 0x80, 0x8C, 0xA0, 0x94, 0xC0, - 0x94, 0xE2, 0x94, 0xE3, 0x9C, 0xE4, 0x9D, 0x04, 0x9D, 0x04, 0x95, 0x04, 0x95, 0x04, 0x95, 0x04, - 0x95, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, - 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, - 0x9D, 0x45, 0x9D, 0x05, 0x9D, 0x06, 0x9C, 0xC5, 0x6B, 0x81, 0x4A, 0x80, 0x4A, 0x61, 0x4A, 0xA0, - 0x4A, 0x80, 0x5A, 0xE0, 0x5B, 0x00, 0x7C, 0x22, 0x94, 0xC4, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x25, - 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x45, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xAD, 0x26, - 0xA5, 0x26, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x27, 0xAD, 0x27, 0xAD, 0x27, - 0xA5, 0x27, 0xA5, 0x27, 0x9D, 0x27, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9C, 0xE7, - 0x9D, 0x06, 0x9D, 0x06, 0x9D, 0x06, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x27, 0x9D, 0x27, - 0x94, 0xE5, 0x9C, 0xE5, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, - 0x9D, 0x05, 0x9D, 0x05, 0x94, 0xC4, 0x8C, 0x43, 0x7B, 0xA2, 0x7B, 0x42, 0x83, 0x03, 0x8B, 0x45, - 0x9B, 0xC6, 0xA4, 0x66, 0xA4, 0xC6, 0x9C, 0xE6, 0x9C, 0xE6, 0x9C, 0xE5, 0x94, 0xC4, 0x94, 0xA3, - 0x7C, 0x00, 0x6B, 0x80, 0x5B, 0x20, 0x53, 0x00, 0x63, 0x20, 0x63, 0x20, 0x63, 0x20, 0x5B, 0x00, - 0x4A, 0xC0, 0x42, 0x60, 0x32, 0x20, 0x29, 0xE0, 0x21, 0xA0, 0x21, 0x80, 0x21, 0xA0, 0x29, 0xA0, - 0x32, 0x20, 0x42, 0xA0, 0x5B, 0x40, 0x6B, 0xC0, 0x74, 0x00, 0x7C, 0x40, 0x84, 0x60, 0x7C, 0x60, - 0x7C, 0x60, 0x7C, 0x60, 0x7C, 0x60, 0x84, 0x60, 0x84, 0x80, 0x84, 0xA0, 0x8C, 0xA0, 0x8C, 0xC0, - 0x94, 0xC1, 0x94, 0xE2, 0x94, 0xE3, 0x94, 0xE4, 0x94, 0xE4, 0x95, 0x04, 0x95, 0x04, 0x95, 0x04, - 0x95, 0x03, 0x95, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, - 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, - 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x06, 0x8C, 0x84, 0x5B, 0x20, 0x4A, 0x60, 0x4A, 0x81, 0x52, 0xC0, - 0x63, 0x41, 0x7C, 0x03, 0x84, 0x63, 0x9C, 0xE5, 0x9D, 0x05, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, - 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x25, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xAD, 0x26, 0xAD, 0x26, - 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x27, 0xAD, 0x27, - 0xA5, 0x27, 0xA5, 0x27, 0xA5, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, - 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x27, 0x9D, 0x27, - 0x9C, 0xE7, 0x9D, 0x06, 0x9D, 0x06, 0x9D, 0x06, 0x9D, 0x06, 0x9D, 0x26, 0x9D, 0x25, 0x9D, 0x25, - 0x9D, 0x05, 0x9D, 0x05, 0x9C, 0xE5, 0x8C, 0x64, 0x7B, 0xC2, 0x7B, 0x42, 0x7B, 0x22, 0x83, 0x44, - 0x93, 0xE5, 0x9C, 0x66, 0xA4, 0xC6, 0x9D, 0x06, 0x9D, 0x06, 0x9D, 0x06, 0x9C, 0xE5, 0x94, 0xC4, - 0x8C, 0x81, 0x73, 0xE0, 0x63, 0x60, 0x63, 0x40, 0x63, 0x40, 0x63, 0x40, 0x63, 0x20, 0x5B, 0x20, - 0x52, 0xE0, 0x42, 0xA0, 0x3A, 0x40, 0x32, 0x20, 0x29, 0xE0, 0x29, 0xE0, 0x29, 0xC0, 0x29, 0xC0, - 0x32, 0x00, 0x42, 0x80, 0x53, 0x00, 0x6B, 0x80, 0x74, 0x00, 0x84, 0x40, 0x84, 0x80, 0x84, 0x80, - 0x84, 0x80, 0x84, 0x80, 0x84, 0x60, 0x84, 0x60, 0x84, 0x80, 0x84, 0x80, 0x84, 0xA0, 0x84, 0xA0, - 0x8C, 0xA0, 0x94, 0xC0, 0x94, 0xE1, 0x94, 0xE3, 0x94, 0xE4, 0x94, 0xE5, 0x95, 0x04, 0x94, 0xE3, - 0x95, 0x04, 0x95, 0x04, 0x95, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x04, - 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x26, - 0x9D, 0x26, 0x9D, 0x26, 0x9D, 0x26, 0x84, 0x44, 0x52, 0xC0, 0x4A, 0x60, 0x5A, 0xE0, 0x5B, 0x00, - 0x84, 0x42, 0x9C, 0xE5, 0xA5, 0x26, 0xA5, 0x46, 0x9D, 0x25, 0xA5, 0x45, 0x9D, 0x25, 0x9D, 0x25, - 0xA5, 0x25, 0xA5, 0x45, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xAD, 0x26, 0xAD, 0x26, 0xAD, 0x26, - 0xAD, 0x27, 0xAD, 0x27, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, - 0xAD, 0x27, 0xA5, 0x27, 0xA5, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, - 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x27, 0xA5, 0x27, 0xA5, 0x27, - 0x9C, 0xE8, 0x9D, 0x08, 0xA5, 0x28, 0xA5, 0x28, 0xA5, 0x48, 0xA5, 0x27, 0x9D, 0x26, 0x9D, 0x26, - 0x9D, 0x05, 0x9D, 0x05, 0x9C, 0xE4, 0x8C, 0x64, 0x83, 0xC2, 0x7B, 0x62, 0x7B, 0x42, 0x83, 0x84, - 0x94, 0x24, 0x9C, 0xA6, 0xA4, 0xE6, 0x9D, 0x06, 0x9D, 0x06, 0x9C, 0xE6, 0x9D, 0x05, 0x9C, 0xE5, - 0x94, 0xC3, 0x84, 0x42, 0x73, 0xE1, 0x73, 0xC2, 0x6B, 0x80, 0x63, 0x20, 0x5B, 0x00, 0x5B, 0x00, - 0x52, 0xE0, 0x4A, 0xC0, 0x42, 0x80, 0x3A, 0x40, 0x32, 0x20, 0x32, 0x00, 0x32, 0x20, 0x32, 0x20, - 0x32, 0x20, 0x42, 0x80, 0x52, 0xE0, 0x63, 0x80, 0x73, 0xE0, 0x7C, 0x40, 0x84, 0x80, 0x8C, 0x80, - 0x8C, 0x80, 0x8C, 0x80, 0x84, 0x80, 0x84, 0x60, 0x84, 0x60, 0x84, 0x60, 0x84, 0x80, 0x84, 0xA0, - 0x8C, 0xA0, 0x8C, 0xC0, 0x8C, 0xC0, 0x94, 0xC1, 0x94, 0xE3, 0x95, 0x04, 0x95, 0x04, 0x94, 0xE4, - 0x95, 0x04, 0x95, 0x04, 0x95, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, - 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, - 0xA5, 0x26, 0x9D, 0x26, 0x9D, 0x05, 0x73, 0xE2, 0x4A, 0x60, 0x52, 0xA0, 0x73, 0xC2, 0x8C, 0x64, - 0x9D, 0x05, 0xA5, 0x46, 0xA5, 0x25, 0xA5, 0x46, 0xA5, 0x26, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, - 0xA5, 0x26, 0xA5, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x26, 0xAD, 0x26, - 0xAD, 0x27, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, - 0xAD, 0x28, 0xA5, 0x28, 0xA5, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, - 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0xA5, 0x27, 0xA5, 0x27, 0xA5, 0x47, - 0xA5, 0x0A, 0xA5, 0x2A, 0xAD, 0x2A, 0xAD, 0x4A, 0xAD, 0x4A, 0xA5, 0x49, 0xA5, 0x48, 0xA5, 0x27, - 0xA5, 0x06, 0x9C, 0xE5, 0x9C, 0xA5, 0x8C, 0x44, 0x83, 0xE3, 0x7B, 0xA3, 0x7B, 0xA3, 0x8B, 0xE4, - 0x94, 0x65, 0x9C, 0xC6, 0xA5, 0x06, 0xA5, 0x26, 0xA5, 0x06, 0xA5, 0x06, 0xA5, 0x06, 0x9C, 0xE5, - 0x9D, 0x05, 0x94, 0xC5, 0x94, 0xE7, 0x94, 0x87, 0x84, 0x25, 0x6B, 0x81, 0x63, 0x40, 0x5B, 0x20, - 0x52, 0xE0, 0x52, 0xE0, 0x4A, 0xC0, 0x42, 0x80, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, 0x3A, 0x40, - 0x3A, 0x60, 0x42, 0x80, 0x53, 0x00, 0x63, 0x60, 0x73, 0xE0, 0x7C, 0x40, 0x84, 0x80, 0x8C, 0xA0, - 0x8C, 0xA0, 0x8C, 0xA0, 0x8C, 0xA0, 0x8C, 0x80, 0x8C, 0x80, 0x84, 0x80, 0x84, 0x80, 0x84, 0x80, - 0x84, 0x80, 0x8C, 0xA0, 0x8C, 0xC0, 0x8C, 0xC0, 0x94, 0xE2, 0x94, 0xE4, 0x95, 0x05, 0x94, 0xE5, - 0x94, 0xE4, 0x95, 0x04, 0x95, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x04, - 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, - 0xA5, 0x25, 0xA5, 0x26, 0x9D, 0x04, 0x6B, 0x81, 0x4A, 0x80, 0x63, 0x40, 0x94, 0xA4, 0xAD, 0x47, - 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xAD, 0x67, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x45, 0xA5, 0x46, - 0xA5, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x26, 0xAD, 0x26, 0xAD, 0x27, - 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x48, - 0xAD, 0x28, 0xA5, 0x28, 0xA5, 0x27, 0xA5, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, - 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x27, 0xA5, 0x27, 0xA5, 0x27, 0xA5, 0x27, - 0xA5, 0x0B, 0xAD, 0x2C, 0xAD, 0x4C, 0xB5, 0x6D, 0xB5, 0x6C, 0xAD, 0x6B, 0xAD, 0x49, 0xA5, 0x28, - 0xA4, 0xE6, 0x9C, 0xC5, 0x9C, 0x85, 0x94, 0x64, 0x8C, 0x24, 0x83, 0xE3, 0x83, 0xE3, 0x8C, 0x24, - 0x9C, 0xA5, 0xA4, 0xE6, 0xA5, 0x06, 0xA5, 0x26, 0xA5, 0x06, 0xA5, 0x06, 0xA5, 0x06, 0xA5, 0x06, - 0x9D, 0x06, 0x9D, 0x07, 0xAD, 0x4B, 0xA5, 0x0C, 0x94, 0xAA, 0x73, 0xC3, 0x63, 0x60, 0x5B, 0x00, - 0x53, 0x00, 0x52, 0xE0, 0x4A, 0xC0, 0x4A, 0xA0, 0x42, 0x80, 0x3A, 0x80, 0x42, 0x80, 0x42, 0x80, - 0x42, 0xA0, 0x4A, 0xC0, 0x53, 0x00, 0x63, 0x60, 0x73, 0xE0, 0x7C, 0x40, 0x8C, 0x80, 0x8C, 0xA1, - 0x94, 0xA0, 0x94, 0xA0, 0x94, 0xA0, 0x8C, 0xA0, 0x8C, 0x80, 0x8C, 0x80, 0x84, 0x80, 0x84, 0x60, - 0x84, 0x80, 0x84, 0x80, 0x8C, 0xA0, 0x8C, 0xC0, 0x94, 0xE0, 0x95, 0x02, 0x9D, 0x04, 0x9D, 0x05, - 0x95, 0x04, 0x95, 0x04, 0x95, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, - 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x04, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x45, - 0x9D, 0x25, 0xA5, 0x46, 0x94, 0xC4, 0x63, 0x60, 0x63, 0x20, 0x84, 0x43, 0xA5, 0x25, 0xAD, 0x46, - 0xA5, 0x46, 0xA5, 0x47, 0xA5, 0x47, 0xAD, 0x67, 0xAD, 0x47, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x45, - 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x47, - 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x48, 0xAD, 0x48, - 0xAD, 0x28, 0xAD, 0x28, 0xA5, 0x27, 0xA5, 0x07, 0xA5, 0x07, 0xA5, 0x07, 0x9D, 0x07, 0x9D, 0x07, - 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0xA5, 0x27, 0xA5, 0x27, 0xAD, 0x27, 0xAD, 0x27, - 0xA4, 0xEC, 0xAD, 0x2C, 0xAD, 0x4D, 0xB5, 0x6E, 0xB5, 0x6D, 0xB5, 0x4C, 0xAD, 0x2A, 0xA5, 0x09, - 0xA4, 0xE6, 0x9C, 0xC6, 0x9C, 0xA5, 0x9C, 0x85, 0x94, 0x64, 0x8C, 0x44, 0x8C, 0x64, 0x94, 0xA4, - 0x9C, 0xC5, 0xA5, 0x06, 0xA5, 0x06, 0xA5, 0x06, 0xA5, 0x26, 0xA5, 0x06, 0xA5, 0x26, 0x9D, 0x26, - 0x9D, 0x06, 0xA5, 0x27, 0xAD, 0x6A, 0xAD, 0x4C, 0x9C, 0xE9, 0x7C, 0x23, 0x6B, 0xA0, 0x63, 0x40, - 0x5B, 0x00, 0x53, 0x00, 0x52, 0xE0, 0x4A, 0xC0, 0x4A, 0xC0, 0x42, 0xA0, 0x42, 0xC0, 0x42, 0xC0, - 0x4A, 0xE0, 0x4A, 0xE0, 0x53, 0x20, 0x63, 0x80, 0x73, 0xE0, 0x7C, 0x40, 0x8C, 0x81, 0x94, 0xC3, - 0x94, 0xC3, 0x94, 0xC2, 0x94, 0xA1, 0x94, 0xA0, 0x94, 0xA0, 0x8C, 0xA0, 0x8C, 0x80, 0x84, 0x80, - 0x84, 0x80, 0x84, 0x80, 0x8C, 0xA0, 0x8C, 0xC0, 0x94, 0xE0, 0x94, 0xE1, 0x95, 0x03, 0x9D, 0x05, - 0x9D, 0x05, 0x9D, 0x05, 0x95, 0x04, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, - 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x45, - 0xA5, 0x46, 0xA5, 0x26, 0x8C, 0x64, 0x6B, 0x40, 0x7B, 0xE1, 0x9D, 0x25, 0xAD, 0x67, 0xAD, 0x47, - 0xAD, 0x67, 0xAD, 0x47, 0xAD, 0x67, 0xAD, 0x47, 0xAD, 0x46, 0xAD, 0x67, 0xAD, 0x66, 0xA5, 0x46, - 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x46, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, - 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x48, 0xAD, 0x48, 0xAD, 0x48, 0xAD, 0x48, - 0xAD, 0x48, 0xAD, 0x28, 0xA5, 0x28, 0xA5, 0x28, 0xA5, 0x28, 0xA5, 0x27, 0x9D, 0x27, 0x9D, 0x07, - 0x9D, 0x07, 0x9D, 0x07, 0x9D, 0x07, 0xA5, 0x27, 0xA5, 0x27, 0xA5, 0x27, 0xAD, 0x28, 0xAD, 0x28, - 0xA4, 0xEB, 0xAD, 0x0C, 0xAD, 0x2D, 0xB5, 0x4E, 0xB5, 0x4E, 0xB5, 0x2C, 0xAD, 0x0A, 0xA4, 0xE9, - 0xA4, 0xE6, 0x9C, 0xC6, 0x9C, 0xA5, 0x9C, 0xA5, 0x9C, 0xA5, 0x9C, 0xA5, 0x94, 0xC4, 0x9D, 0x05, - 0xA5, 0x06, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0xA5, 0x26, 0x9D, 0x26, 0x9D, 0x26, - 0x9D, 0x26, 0x9D, 0x26, 0xA5, 0x27, 0xA5, 0x28, 0x94, 0xC6, 0x84, 0x42, 0x73, 0xC0, 0x63, 0x60, - 0x5B, 0x20, 0x5B, 0x00, 0x53, 0x00, 0x53, 0x00, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, 0x4A, 0xE0, - 0x53, 0x00, 0x53, 0x00, 0x53, 0x20, 0x63, 0x80, 0x73, 0xE0, 0x84, 0x40, 0x8C, 0xA2, 0x9C, 0xE4, - 0x9C, 0xE5, 0x94, 0xE4, 0x94, 0xC2, 0x94, 0xC1, 0x94, 0xC0, 0x8C, 0xA0, 0x8C, 0xA0, 0x8C, 0x80, - 0x84, 0x80, 0x84, 0x80, 0x8C, 0xA0, 0x8C, 0xC0, 0x94, 0xE0, 0x94, 0xE0, 0x95, 0x02, 0x9D, 0x04, - 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x05, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, - 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x05, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x25, 0x9D, 0x45, - 0x9D, 0x26, 0xA5, 0x26, 0x94, 0x85, 0x7B, 0xC2, 0x8C, 0x83, 0xA5, 0x66, 0xAD, 0x67, 0xAD, 0x47, - 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x67, 0xAD, 0x67, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x46, - 0xAD, 0x66, 0xAD, 0x46, 0xAD, 0x66, 0xAD, 0x66, 0xAD, 0x46, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, - 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x47, 0xAD, 0x48, 0xAD, 0x48, 0xAD, 0x48, 0xAD, 0x48, - 0xAD, 0x48, 0xA5, 0x48, 0xA5, 0x28, 0xA5, 0x28, 0xA5, 0x28, 0xA5, 0x28, 0xA5, 0x27, 0x9D, 0x27, - 0x9D, 0x27, 0x9D, 0x07, 0x9D, 0x07, 0xA5, 0x27, 0xA5, 0x28, 0xAD, 0x28, 0xAD, 0x48, 0xAD, 0x48, -}; -// clang-format on diff --git a/keyboards/fpb/rp2040_tft/graphics/Apple-Orchard-128x160.qgf.h b/keyboards/fpb/rp2040_tft/graphics/Apple-Orchard-128x160.qgf.h deleted file mode 100644 index c468ae98d214..000000000000 --- a/keyboards/fpb/rp2040_tft/graphics/Apple-Orchard-128x160.qgf.h +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2024 QMK -- generated source code only, image retains original copyright -// SPDX-License-Identifier: GPL-2.0-or-later - -// This file was auto-generated by `qmk painter-convert-graphics -i Apple-Orchard-128x160.jpg -f rgb565` - -#pragma once - -#include - -extern const uint32_t gfx_Apple_Orchard_128x160_length; -extern const uint8_t gfx_Apple_Orchard_128x160[41008]; diff --git a/keyboards/fpb/rp2040_tft/halconf.h b/keyboards/fpb/rp2040_tft/halconf.h index 5807c53501ae..b9328c793bbd 100644 --- a/keyboards/fpb/rp2040_tft/halconf.h +++ b/keyboards/fpb/rp2040_tft/halconf.h @@ -1,11 +1,11 @@ -// Copyright 2022 Stefan Kerkmann +// Copyright 2024 Fernando Birra // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #define HAL_USE_I2C TRUE #define HAL_USE_PWM TRUE -#define HAL_USE_ADC TRUE +//#define HAL_USE_ADC TRUE #define HAL_USE_SPI TRUE //#define SPI_USE_WAIT TRUE diff --git a/keyboards/fpb/rp2040_tft/info.json b/keyboards/fpb/rp2040_tft/info.json index c0ef285a5069..0ca180c521b7 100644 --- a/keyboards/fpb/rp2040_tft/info.json +++ b/keyboards/fpb/rp2040_tft/info.json @@ -8,7 +8,7 @@ }, "backlight": { "pin": "GP13", - "levels": 8, + "levels": 5, }, "rgblight": { "led_count": 1 diff --git a/keyboards/fpb/rp2040_tft/keymaps/default/onekey.json b/keyboards/fpb/rp2040_tft/keymaps/default/onekey.json index 0723e169df4d..4fa4cb75854c 100644 --- a/keyboards/fpb/rp2040_tft/keymaps/default/onekey.json +++ b/keyboards/fpb/rp2040_tft/keymaps/default/onekey.json @@ -3,6 +3,7 @@ "vendorId": "0x0c45", "productId": "0x6465", "menus": [ + "qmk_backlight" ], "keycodes": ["qmk_lighting"], "customKeycodes": [ diff --git a/keyboards/fpb/rp2040_tft/mcuconf.h b/keyboards/fpb/rp2040_tft/mcuconf.h index 7e0b89b80527..4b5398455858 100644 --- a/keyboards/fpb/rp2040_tft/mcuconf.h +++ b/keyboards/fpb/rp2040_tft/mcuconf.h @@ -1,16 +1,10 @@ -// Copyright 2022 Stefan Kerkmann +// Copyright 2024 Fernando Birra // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include_next -#undef RP_PWM_USE_PWM0 -#define RP_PWM_USE_PWM0 TRUE - -#undef RP_PWM_USE_PWM4 -#define RP_PWM_USE_PWM4 TRUE - #undef RP_PWM_USE_PWM6 #define RP_PWM_USE_PWM6 TRUE diff --git a/keyboards/fpb/rp2040_tft/readme.md b/keyboards/fpb/rp2040_tft/readme.md index 5e0853d5be4d..fd6bd1b65e8c 100644 --- a/keyboards/fpb/rp2040_tft/readme.md +++ b/keyboards/fpb/rp2040_tft/readme.md @@ -1,13 +1,12 @@ # Raspberry Pi 2040 onekey +A simple keyboard to test the GC9107 driver + To trigger keypress, short together pins *GP4* and *GP5*. Double-tap reset to enter bootloader mode. Copy the built uf2 file to the device by dragging the file to the new USB disk. ## Supported Hardware -* Raspberry Pi Pico -* SparkFun Pro Micro - RP2040 -* Adafruit KB2040 - RP2040 Kee Boar -* ...and many more RP2040 based development boards +* Raspberry Pi Pico AliExpress board with builtin ws2812 LED diff --git a/keyboards/fpb/rp2040_tft/rp2040_tft.c b/keyboards/fpb/rp2040_tft/rp2040_tft.c index ff7c644389ce..231904ef3450 100644 --- a/keyboards/fpb/rp2040_tft/rp2040_tft.c +++ b/keyboards/fpb/rp2040_tft/rp2040_tft.c @@ -1,19 +1,16 @@ +// Copyright 2024 Fernando Birra +// SPDX-License-Identifier: GPL-2.0-or-later + #include "rp2040_tft.h" #include -//#include - -//#include - -#include "graphics/Apple-Orchard-128x160.qgf.h" #include "graphics/qmklogo.qgf.h" static painter_device_t qp_display; static painter_image_handle_t qp_image; void keyboard_post_init_kb(void) { - //qp_display = qp_st7735_make_spi_device( qp_display = qp_gc9107_make_spi_device( PANEL_WIDTH, PANEL_HEIGHT, @@ -26,28 +23,9 @@ void keyboard_post_init_kb(void) { qp_init(qp_display, QP_ROTATION_180); // Initialise the display qp_rect(qp_display, 0, 0, PANEL_WIDTH, PANEL_HEIGHT, 128, 255, 255, true); - // if (qp_lvgl_attach(display)) { // Attach LVGL to the display - // //...Your code to draw // Run LVGL specific code to draw - // } qp_image = qp_load_image_mem(gfx_qmklogo); qp_drawimage(qp_display, 0, 0, qp_image); - // if (qp_lvgl_attach(qp_display)) { // Attach LVGL to the display - // lv_obj_t * label1 = lv_label_create(lv_display_get_screen_active()); - // lv_label_set_long_mode(label1, LV_LABEL_LONG_WRAP); /*Break the long lines*/ - // lv_label_set_text(label1, "Recolor is not supported for v9 now."); - // lv_obj_set_width(label1, 150); /*Set smaller width to make the lines wrap*/ - // lv_obj_set_style_text_align(label1, LV_TEXT_ALIGN_CENTER, 0); - // lv_obj_align(label1, LV_ALIGN_CENTER, 0, -40); - - // lv_obj_t * label2 = lv_label_create(lv_screen_active()); - // lv_label_set_long_mode(label2, LV_LABEL_LONG_SCROLL_CIRCULAR); /*Circular scroll*/ - // lv_obj_set_width(label2, 150); - // lv_label_set_text(label2, "It is a circularly scrolling text. "); - // lv_obj_align(label2, LV_ALIGN_CENTER, 0, 40); - // } - - return keyboard_post_init_user(); } diff --git a/keyboards/fpb/rp2040_tft/rp2040_tft.h b/keyboards/fpb/rp2040_tft/rp2040_tft.h index 5bf719419ae0..af535b9816e9 100644 --- a/keyboards/fpb/rp2040_tft/rp2040_tft.h +++ b/keyboards/fpb/rp2040_tft/rp2040_tft.h @@ -1,7 +1,9 @@ +// Copyright 2024 Fernando Birra +// SPDX-License-Identifier: GPL-2.0-or-later + #pragma once #define PANEL_WIDTH 128 -//#define PANEL_HEIGHT 160 #define PANEL_HEIGHT 128 #define PANEL_DC 8 diff --git a/keyboards/fpb/rp2040_tft/rules.mk b/keyboards/fpb/rp2040_tft/rules.mk index 8205abc3fe77..dd87a4e1a5a5 100644 --- a/keyboards/fpb/rp2040_tft/rules.mk +++ b/keyboards/fpb/rp2040_tft/rules.mk @@ -2,14 +2,6 @@ WS2812_DRIVER = vendor RGBLIGHT_ENABLE = yes QUANTUM_PAINTER_ENABLE = yes -#QUANTUM_PAINTER_DRIVERS += st7735_spi QUANTUM_PAINTER_DRIVERS += gc9107_spi -#QUANTUM_PAINTER_DRIVERS += gc9a01_spi -QUANTUM_PAINTER_LVGL_INTEGRATION = yes -#SPI_DRIVER_REQUIRED = yes - -#SRC += rp2040_tft.c -SRC += graphics/Apple-Orchard-128x160.qgf.c graphics/qmklogo.qgf.c - -#CONSOLE_ENABLE = yes \ No newline at end of file +SRC += graphics/qmklogo.qgf.c \ No newline at end of file From fec18bbb65432bc8b1a05a41cf7f3c7d1db992c6 Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Sun, 4 Feb 2024 09:57:05 +0000 Subject: [PATCH 08/35] Code formatting issues --- drivers/painter/gc9107/qp_gc9107.c | 3 +-- drivers/painter/gc9107/qp_gc9107.h | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/painter/gc9107/qp_gc9107.c b/drivers/painter/gc9107/qp_gc9107.c index 92e2a77afdd5..f4217eda5e3a 100644 --- a/drivers/painter/gc9107/qp_gc9107.c +++ b/drivers/painter/gc9107/qp_gc9107.c @@ -1,6 +1,5 @@ -// Copyright 2024 Fernando Birra +// Copyright 2024 Fernando Birra // SPDX-License-Identifier: GPL-2.0-or-later - #include "qp_internal.h" #include "qp_comms.h" #include "qp_gc9107.h" diff --git a/drivers/painter/gc9107/qp_gc9107.h b/drivers/painter/gc9107/qp_gc9107.h index 3b1e978157b9..29b2426ab6d0 100644 --- a/drivers/painter/gc9107/qp_gc9107.h +++ b/drivers/painter/gc9107/qp_gc9107.h @@ -1,6 +1,5 @@ // Copyright 2024 Fernando Birra (@gr1mr3aver) // SPDX-License-Identifier: GPL-2.0-or-later - #pragma once #include "gpio.h" From 8e99981effb505215287f13a86f033462ba9731d Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Sun, 4 Feb 2024 10:05:51 +0000 Subject: [PATCH 09/35] Removed test keyboard --- keyboards/fpb/rp2040_tft/config.h | 52 -- .../fpb/rp2040_tft/graphics/qmklogo.qgf.c | 682 ------------------ .../fpb/rp2040_tft/graphics/qmklogo.qgf.h | 11 - keyboards/fpb/rp2040_tft/halconf.h | 15 - keyboards/fpb/rp2040_tft/info.json | 54 -- .../fpb/rp2040_tft/keymaps/default/keymap.c | 15 - .../rp2040_tft/keymaps/default/onekey.json | 25 - .../fpb/rp2040_tft/keymaps/default/rules.mk | 1 - keyboards/fpb/rp2040_tft/mcuconf.h | 12 - keyboards/fpb/rp2040_tft/readme.md | 12 - keyboards/fpb/rp2040_tft/rp2040_tft.c | 43 -- keyboards/fpb/rp2040_tft/rp2040_tft.h | 14 - keyboards/fpb/rp2040_tft/rules.mk | 7 - 13 files changed, 943 deletions(-) delete mode 100644 keyboards/fpb/rp2040_tft/config.h delete mode 100644 keyboards/fpb/rp2040_tft/graphics/qmklogo.qgf.c delete mode 100644 keyboards/fpb/rp2040_tft/graphics/qmklogo.qgf.h delete mode 100644 keyboards/fpb/rp2040_tft/halconf.h delete mode 100644 keyboards/fpb/rp2040_tft/info.json delete mode 100644 keyboards/fpb/rp2040_tft/keymaps/default/keymap.c delete mode 100644 keyboards/fpb/rp2040_tft/keymaps/default/onekey.json delete mode 100644 keyboards/fpb/rp2040_tft/keymaps/default/rules.mk delete mode 100644 keyboards/fpb/rp2040_tft/mcuconf.h delete mode 100644 keyboards/fpb/rp2040_tft/readme.md delete mode 100644 keyboards/fpb/rp2040_tft/rp2040_tft.c delete mode 100644 keyboards/fpb/rp2040_tft/rp2040_tft.h delete mode 100644 keyboards/fpb/rp2040_tft/rules.mk diff --git a/keyboards/fpb/rp2040_tft/config.h b/keyboards/fpb/rp2040_tft/config.h deleted file mode 100644 index 9771fd8d0d97..000000000000 --- a/keyboards/fpb/rp2040_tft/config.h +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2024 Fernando Birra -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - - -#define DEBUG_MATRIX_SCAN_RATE - -#define QMK_WAITING_TEST_BUSY_PIN GP8 -#define QMK_WAITING_TEST_YIELD_PIN GP9 - -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP25 -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U - -#define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_B -#define BACKLIGHT_PWM_DRIVER PWMD6 - -#define ADC_PIN GP26 - - -//#define WS2812_DI_PIN GP23 -//#ifdef WS2812_DI_PIN -//# define RGBLED_NUM 1 -# define RGBLIGHT_HUE_STEP 8 -# define RGBLIGHT_SAT_STEP 8 -# define RGBLIGHT_VAL_STEP 8 -# define RGBLIGHT_LIMIT_VAL 255 -# define RGBLIGHT_SLEEP -/*== all animations enable ==*/ -# define RGBLIGHT_ANIMATIONS -//#endif - -#define RGBLIGHT_EFFECT_BREATHING -#define RGBLIGHT_EFFECT_RAINBOW_MOOD -#define RGBLIGHT_EFFECT_RAINBOW_SWIRL -#define RGBLIGHT_EFFECT_SNAKE -#define RGBLIGHT_EFFECT_KNIGHT -#define RGBLIGHT_EFFECT_CHRISTMAS -#define RGBLIGHT_EFFECT_STATIC_GRADIENT -#define RGBLIGHT_EFFECT_RGB_TEST -#define RGBLIGHT_EFFECT_ALTERNATING -#define RGBLIGHT_EFFECT_TWINKLE -#define RGBLIGHT_EFFECT_CYCLE_ALL - -#define SPI_DRIVER SPID1 -#define SPI_SCK_PIN GP10 -#define SPI_MOSI_PIN GP11 -//#define SPI_MISO_PIN GP12 - -#define QUANTUM_PAINTER_DISPLAY_TIMEOUT 0 -#define QUANTUM_PAINTER_SUPPORTS_NATIVE_COLORS TRUE diff --git a/keyboards/fpb/rp2040_tft/graphics/qmklogo.qgf.c b/keyboards/fpb/rp2040_tft/graphics/qmklogo.qgf.c deleted file mode 100644 index 6994be0b2f3a..000000000000 --- a/keyboards/fpb/rp2040_tft/graphics/qmklogo.qgf.c +++ /dev/null @@ -1,682 +0,0 @@ -// Copyright 2024 QMK -- generated source code only, image retains original copyright -// SPDX-License-Identifier: GPL-2.0-or-later - -// This file was auto-generated by `qmk painter-convert-graphics -i qmklogo.png -f rgb565` - -#include - -const uint32_t gfx_qmklogo_length = 10700; - -// clang-format off -const uint8_t gfx_qmklogo[10700] = { - 0x00, 0xFF, 0x12, 0x00, 0x00, 0x51, 0x47, 0x46, 0x01, 0xCC, 0x29, 0x00, 0x00, 0x33, 0xD6, 0xFF, - 0xFF, 0x80, 0x00, 0x80, 0x00, 0x01, 0x00, 0x01, 0xFE, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x02, 0xFD, 0x06, 0x00, 0x00, 0x08, 0x00, 0x01, 0xFF, 0xE8, 0x03, 0x05, 0xFA, 0x9C, 0x29, 0x00, - 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, - 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, - 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, - 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, - 0x7F, 0xFF, 0x7F, 0xFF, 0x38, 0xFF, 0x83, 0xF7, 0xBE, 0xF7, 0xBE, 0x02, 0xFF, 0x83, 0xF7, 0x9E, - 0xFF, 0xDF, 0x02, 0xFF, 0x81, 0xF7, 0x9E, 0x02, 0xFF, 0x83, 0xF7, 0xBE, 0xF7, 0xBE, 0x02, 0xFF, - 0x83, 0xF7, 0x9E, 0xFF, 0xDF, 0x7F, 0xFF, 0x67, 0xFF, 0x83, 0xCE, 0x79, 0xCE, 0x79, 0x02, 0xFF, - 0x87, 0xBD, 0xD7, 0xEF, 0x5D, 0xF7, 0x9E, 0xBD, 0xD7, 0x02, 0xFF, 0x83, 0xDE, 0xDB, 0xC6, 0x38, - 0x02, 0xFF, 0x83, 0xC6, 0x18, 0xDE, 0xFB, 0x7F, 0xFF, 0x65, 0xFF, 0x9D, 0xF7, 0xBE, 0xAD, 0x55, - 0xAD, 0x75, 0xF7, 0xBE, 0x8C, 0x71, 0xD6, 0x9A, 0xDE, 0xFB, 0x8C, 0x51, 0xF7, 0x9E, 0xBD, 0xD7, - 0x9C, 0xF3, 0xF7, 0xBE, 0x94, 0xB2, 0xC6, 0x18, 0xFF, 0xDF, 0x16, 0xFF, 0x89, 0xF7, 0x9E, 0xE7, - 0x1C, 0xDE, 0xFB, 0xE7, 0x3C, 0xF7, 0xBE, 0x06, 0xFF, 0x85, 0xF7, 0x9E, 0xE7, 0x3C, 0xF7, 0xBE, - 0x0A, 0xFF, 0x85, 0xF7, 0x9E, 0xE7, 0x3C, 0xFF, 0xDF, 0x03, 0xFF, 0x82, 0xDF, 0xE7, 0x3C, 0x06, - 0xFF, 0x83, 0xEF, 0x5D, 0xF7, 0x9E, 0x09, 0xFF, 0x8A, 0xDF, 0xE7, 0x3C, 0xE7, 0x3C, 0xE7, 0x3C, - 0xE7, 0x1C, 0xF7, 0xBE, 0x02, 0xFF, 0x83, 0xE7, 0x1C, 0xF7, 0x9E, 0x79, 0xFF, 0xA2, 0xDF, 0xDE, - 0xDB, 0xB5, 0xB6, 0x7B, 0xEF, 0x84, 0x10, 0xAD, 0x75, 0x6B, 0x6D, 0x9C, 0xD3, 0xA5, 0x14, 0x6B, - 0x6D, 0xAD, 0x55, 0x8C, 0x51, 0x7B, 0xCF, 0xAD, 0x75, 0x73, 0xAE, 0x8C, 0x71, 0xBD, 0xD7, 0xE7, - 0x1C, 0x12, 0xFF, 0x8D, 0xE7, 0x1C, 0xA5, 0x14, 0x84, 0x30, 0x84, 0x10, 0x8C, 0x51, 0xBD, 0xD7, - 0xF7, 0x9E, 0x04, 0xFF, 0x85, 0xBD, 0xF7, 0x7B, 0xCF, 0xB5, 0xB6, 0x0A, 0xFF, 0x85, 0xAD, 0x55, - 0x7B, 0xCF, 0xD6, 0xBA, 0x02, 0xFF, 0x85, 0xE7, 0x3C, 0x84, 0x30, 0xF7, 0x9E, 0x02, 0xFF, 0x85, - 0xEF, 0x5D, 0x8C, 0x71, 0xC6, 0x38, 0x08, 0xFF, 0x8B, 0xDE, 0xDB, 0x7B, 0xEF, 0x8C, 0x71, 0x8C, - 0x71, 0x8C, 0x51, 0xD6, 0x9A, 0x02, 0xFF, 0x83, 0x7B, 0xEF, 0xC6, 0x18, 0x78, 0xFF, 0xA5, 0xCE, - 0x79, 0x5A, 0xCB, 0x31, 0xA6, 0x31, 0x86, 0x31, 0xA6, 0x31, 0xA6, 0x31, 0x86, 0x31, 0xA6, 0x31, - 0xA6, 0x31, 0x86, 0x31, 0xA6, 0x31, 0xA6, 0x31, 0x86, 0x31, 0xA6, 0x31, 0x86, 0x31, 0x86, 0x31, - 0xA6, 0x6B, 0x4D, 0xE7, 0x1C, 0x0E, 0xFF, 0x8F, 0xEF, 0x7D, 0x73, 0x8E, 0x6B, 0x4D, 0xAD, 0x55, - 0xBD, 0xD7, 0x94, 0x92, 0x4A, 0x69, 0xAD, 0x55, 0x04, 0xFF, 0x87, 0x84, 0x30, 0x31, 0xA6, 0x52, - 0xAA, 0xEF, 0x7D, 0x06, 0xFF, 0x87, 0xE7, 0x1C, 0x52, 0x8A, 0x31, 0x86, 0xAD, 0x75, 0x02, 0xFF, - 0x8D, 0xD6, 0x9A, 0x39, 0xC7, 0xEF, 0x5D, 0xF7, 0xBE, 0x94, 0x92, 0x5A, 0xEB, 0xDE, 0xFB, 0x08, - 0xFF, 0x8B, 0xB5, 0x96, 0x39, 0xC7, 0xAD, 0x55, 0xAD, 0x55, 0xA5, 0x34, 0xDE, 0xDB, 0x02, 0xFF, - 0x83, 0xA5, 0x34, 0xD6, 0x9A, 0x03, 0xFF, 0x80, 0xDF, 0x03, 0xFF, 0x82, 0xDF, 0xF7, 0xBE, 0x05, - 0xFF, 0x80, 0xDF, 0x02, 0xFF, 0x83, 0xF7, 0x9E, 0xFF, 0xDF, 0x04, 0xFF, 0x83, 0xF7, 0xBE, 0xF7, - 0xBE, 0x05, 0xFF, 0x82, 0xDF, 0xFF, 0xDF, 0x07, 0xFF, 0x80, 0xDF, 0x07, 0xFF, 0x80, 0xDF, 0x05, - 0xFF, 0x84, 0xDF, 0xF7, 0x9E, 0xF7, 0xBE, 0x07, 0xFF, 0x80, 0xDF, 0x03, 0xFF, 0x82, 0xDF, 0xF7, - 0xBE, 0x05, 0xFF, 0x84, 0xDF, 0xF7, 0x9E, 0xF7, 0xBE, 0x20, 0xFF, 0xA5, 0x73, 0x8E, 0x29, 0x45, - 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, - 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x21, 0x24, - 0x94, 0xB2, 0x0E, 0xFF, 0x85, 0xA5, 0x34, 0x4A, 0x49, 0xE7, 0x3C, 0x06, 0xFF, 0x85, 0x9C, 0xF3, - 0x4A, 0x49, 0xEF, 0x7D, 0x02, 0xFF, 0x87, 0x84, 0x10, 0x6B, 0x6D, 0x5A, 0xEB, 0xB5, 0x96, 0x06, - 0xFF, 0x87, 0x9C, 0xD3, 0x73, 0xAE, 0x5A, 0xCB, 0xAD, 0x75, 0x02, 0xFF, 0x8B, 0xD6, 0xBA, 0x42, - 0x08, 0xEF, 0x5D, 0xB5, 0x96, 0x52, 0xAA, 0xD6, 0x9A, 0x0A, 0xFF, 0x83, 0xB5, 0x96, 0x52, 0x8A, - 0x0A, 0xFF, 0x83, 0xCE, 0x59, 0xEF, 0x5D, 0x02, 0xFF, 0x9D, 0xDE, 0xDB, 0xD6, 0x9A, 0xCE, 0x79, - 0xAD, 0x75, 0xF7, 0x9E, 0xE7, 0x1C, 0xCE, 0x79, 0xDE, 0xDB, 0xB5, 0x96, 0xBD, 0xF7, 0xEF, 0x5D, - 0xDE, 0xFB, 0xB5, 0xB6, 0xB5, 0xB6, 0xEF, 0x5D, 0x02, 0xFF, 0x83, 0xD6, 0xBA, 0xCE, 0x79, 0x04, - 0xFF, 0x83, 0xDE, 0xDB, 0xC6, 0x38, 0x04, 0xFF, 0x83, 0xEF, 0x7D, 0xC6, 0x18, 0x02, 0xFF, 0x89, - 0xE7, 0x1C, 0xC6, 0x18, 0xB5, 0x96, 0xBD, 0xD7, 0xE7, 0x3C, 0x04, 0xFF, 0x87, 0xCE, 0x59, 0xDE, - 0xFB, 0xBD, 0xF7, 0xBD, 0xF7, 0x02, 0xFF, 0x89, 0xF7, 0x9E, 0xCE, 0x59, 0xB5, 0xB6, 0xBD, 0xD7, - 0xE7, 0x1C, 0x18, 0xFF, 0xAF, 0xF7, 0xBE, 0xE7, 0x1C, 0xDE, 0xFB, 0x4A, 0x69, 0x29, 0x65, 0x31, - 0x86, 0x31, 0xA6, 0x42, 0x08, 0x39, 0xE7, 0x31, 0x86, 0x31, 0x86, 0x39, 0xC7, 0x42, 0x08, 0x31, - 0xA6, 0x31, 0x86, 0x31, 0x86, 0x42, 0x08, 0x39, 0xE7, 0x31, 0x86, 0x31, 0x86, 0x29, 0x65, 0x6B, - 0x4D, 0xE7, 0x1C, 0xE7, 0x1C, 0x0A, 0xFF, 0x83, 0x63, 0x2C, 0x84, 0x30, 0x08, 0xFF, 0x85, 0xE7, - 0x3C, 0x39, 0xC7, 0xCE, 0x79, 0x02, 0xFF, 0x89, 0x84, 0x10, 0x7B, 0xEF, 0x9C, 0xF3, 0x63, 0x2C, - 0xFF, 0xDF, 0x02, 0xFF, 0x89, 0xF7, 0x9E, 0x5A, 0xCB, 0xC6, 0x18, 0x5A, 0xCB, 0xAD, 0x75, 0x02, - 0xFF, 0x89, 0xD6, 0xBA, 0x42, 0x08, 0xB5, 0xB6, 0x5A, 0xCB, 0xBD, 0xF7, 0x0C, 0xFF, 0x8B, 0xB5, - 0xB6, 0x4A, 0x69, 0xEF, 0x5D, 0xEF, 0x5D, 0xEF, 0x5D, 0xFF, 0xDF, 0x02, 0xFF, 0x83, 0x5A, 0xCB, - 0xB5, 0xB6, 0x02, 0xFF, 0x9D, 0x9C, 0xD3, 0x5A, 0xEB, 0x73, 0xAE, 0x73, 0x8E, 0xE7, 0x1C, 0xAD, - 0x55, 0x5A, 0xCB, 0x84, 0x30, 0x84, 0x10, 0x52, 0xAA, 0x8C, 0x71, 0x84, 0x30, 0x84, 0x10, 0x5A, - 0xCB, 0x8C, 0x71, 0x02, 0xFF, 0x85, 0x9C, 0xF3, 0x63, 0x2C, 0xFF, 0xDF, 0x02, 0xFF, 0x85, 0x84, - 0x30, 0x4A, 0x49, 0xF7, 0x9E, 0x02, 0xFF, 0x83, 0xAD, 0x75, 0x63, 0x0C, 0x02, 0xFF, 0x8B, 0x9C, - 0xF3, 0x84, 0x10, 0x8C, 0x71, 0x6B, 0x4D, 0x7B, 0xEF, 0xFF, 0xDF, 0x02, 0xFF, 0x95, 0x6B, 0x4D, - 0x6B, 0x6D, 0x73, 0x8E, 0x84, 0x30, 0xFF, 0xDF, 0xA5, 0x34, 0x6B, 0x6D, 0x94, 0x92, 0x7B, 0xEF, - 0x73, 0x8E, 0xEF, 0x5D, 0x16, 0xFF, 0xB1, 0xE7, 0x3C, 0xA5, 0x34, 0xA5, 0x14, 0x42, 0x08, 0x31, - 0x86, 0x31, 0x86, 0x39, 0xC7, 0xA5, 0x34, 0x7B, 0xEF, 0x29, 0x65, 0x29, 0x65, 0x5A, 0xEB, 0xAD, - 0x75, 0x4A, 0x49, 0x31, 0x86, 0x31, 0x86, 0x94, 0xB2, 0x8C, 0x71, 0x31, 0x86, 0x31, 0x86, 0x29, - 0x65, 0x52, 0xAA, 0xA5, 0x34, 0xAD, 0x55, 0xF7, 0x9E, 0x08, 0xFF, 0x83, 0x52, 0x8A, 0x9C, 0xF3, - 0x08, 0xFF, 0x85, 0xF7, 0x9E, 0x42, 0x08, 0xBD, 0xF7, 0x02, 0xFF, 0x89, 0x84, 0x10, 0x7B, 0xCF, - 0xE7, 0x3C, 0x42, 0x28, 0xD6, 0xBA, 0x02, 0xFF, 0x89, 0xBD, 0xD7, 0x5A, 0xEB, 0xF7, 0xBE, 0x52, - 0xAA, 0xAD, 0x75, 0x02, 0xFF, 0x89, 0xD6, 0xBA, 0x42, 0x08, 0x5A, 0xCB, 0x73, 0x8E, 0xFF, 0xDF, - 0x0C, 0xFF, 0x8B, 0xB5, 0xB6, 0x39, 0xE7, 0x9C, 0xF3, 0x9C, 0xF3, 0x9C, 0xF3, 0xE7, 0x3C, 0x02, - 0xFF, 0x83, 0x52, 0xAA, 0xB5, 0x96, 0x02, 0xFF, 0x87, 0x9C, 0xD3, 0x39, 0xE7, 0xCE, 0x79, 0xFF, - 0xDF, 0x02, 0xFF, 0x85, 0xA5, 0x34, 0x39, 0xE7, 0xD6, 0x9A, 0x02, 0xFF, 0x85, 0x9C, 0xF3, 0x31, - 0xA6, 0xC6, 0x18, 0x02, 0xFF, 0x93, 0xBD, 0xD7, 0x42, 0x28, 0xF7, 0xBE, 0xDE, 0xDB, 0x42, 0x28, - 0xE7, 0x3C, 0xFF, 0xDF, 0x5A, 0xEB, 0x39, 0xE7, 0xCE, 0x59, 0x02, 0xFF, 0x83, 0x73, 0x8E, 0x94, - 0x92, 0x02, 0xFF, 0x8B, 0xDE, 0xFB, 0xF7, 0x9E, 0xEF, 0x7D, 0xC6, 0x38, 0x39, 0xE7, 0xEF, 0x5D, - 0x02, 0xFF, 0x95, 0x63, 0x0C, 0x5A, 0xEB, 0xE7, 0x3C, 0xFF, 0xDF, 0xE7, 0x3C, 0x4A, 0x49, 0xC6, - 0x18, 0xEF, 0x5D, 0xEF, 0x5D, 0x4A, 0x69, 0xAD, 0x75, 0x16, 0xFF, 0x97, 0xF7, 0xBE, 0xDE, 0xFB, - 0xD6, 0xBA, 0x4A, 0x49, 0x31, 0x86, 0x31, 0x86, 0x39, 0xE7, 0xF7, 0xBE, 0xB5, 0xB6, 0x29, 0x45, - 0x29, 0x45, 0x84, 0x10, 0x02, 0xFF, 0x97, 0x5A, 0xEB, 0x29, 0x65, 0x31, 0x86, 0xDE, 0xDB, 0xD6, - 0x9A, 0x29, 0x65, 0x31, 0x86, 0x29, 0x65, 0x63, 0x2C, 0xDE, 0xFB, 0xDE, 0xFB, 0xFF, 0xDF, 0x08, - 0xFF, 0x83, 0x52, 0xAA, 0x9C, 0xD3, 0x08, 0xFF, 0x85, 0xEF, 0x7D, 0x42, 0x08, 0xC6, 0x38, 0x02, - 0xFF, 0x83, 0x84, 0x10, 0x73, 0xAE, 0x02, 0xFF, 0x89, 0x6B, 0x6D, 0x8C, 0x71, 0xFF, 0xDF, 0x6B, - 0x6D, 0xA5, 0x14, 0x02, 0xFF, 0x83, 0x52, 0xAA, 0xAD, 0x75, 0x02, 0xFF, 0x89, 0xD6, 0xBA, 0x42, - 0x08, 0x9C, 0xD3, 0x52, 0xAA, 0xCE, 0x79, 0x0C, 0xFF, 0x8B, 0xB5, 0xB6, 0x39, 0xE7, 0x9C, 0xD3, - 0x9C, 0xD3, 0x9C, 0xD3, 0xE7, 0x3C, 0x02, 0xFF, 0x83, 0x52, 0xAA, 0xB5, 0x96, 0x02, 0xFF, 0x83, - 0x94, 0xB2, 0x6B, 0x4D, 0x06, 0xFF, 0x83, 0xA5, 0x14, 0x63, 0x0C, 0x04, 0xFF, 0x83, 0xC6, 0x18, - 0x4A, 0x69, 0x04, 0xFF, 0x99, 0xDE, 0xDB, 0x42, 0x08, 0xEF, 0x5D, 0xFF, 0xDF, 0x52, 0xAA, 0xB5, - 0xB6, 0xDE, 0xDB, 0x63, 0x2C, 0x7B, 0xCF, 0x94, 0x92, 0xF7, 0xBE, 0x4A, 0x69, 0xD6, 0x9A, 0x02, - 0xFF, 0x8B, 0xE7, 0x1C, 0xBD, 0xF7, 0xAD, 0x75, 0x9C, 0xF3, 0x42, 0x08, 0xE7, 0x1C, 0x02, 0xFF, - 0x83, 0x5A, 0xEB, 0xA5, 0x34, 0x04, 0xFF, 0x8D, 0xC6, 0x38, 0x39, 0xE7, 0xA5, 0x34, 0xA5, 0x34, - 0xAD, 0x55, 0x63, 0x0C, 0x9C, 0xF3, 0x16, 0xFF, 0x97, 0xF7, 0x9E, 0xD6, 0x9A, 0xCE, 0x59, 0x4A, - 0x49, 0x31, 0x86, 0x31, 0x86, 0x39, 0xE7, 0xEF, 0x7D, 0xB5, 0x96, 0x29, 0x45, 0x29, 0x45, 0x7B, - 0xEF, 0x02, 0xFF, 0x97, 0x5A, 0xEB, 0x29, 0x65, 0x31, 0x86, 0xD6, 0xBA, 0xCE, 0x79, 0x29, 0x65, - 0x31, 0x86, 0x29, 0x65, 0x63, 0x0C, 0xD6, 0x9A, 0xD6, 0x9A, 0xFF, 0xDF, 0x08, 0xFF, 0x85, 0x73, - 0x8E, 0x73, 0xAE, 0xFF, 0xDF, 0x06, 0xFF, 0x85, 0xCE, 0x59, 0x42, 0x08, 0xE7, 0x1C, 0x02, 0xFF, - 0x83, 0x84, 0x10, 0x73, 0xAE, 0x02, 0xFF, 0x89, 0xBD, 0xD7, 0x52, 0x8A, 0xC6, 0x18, 0x52, 0x8A, - 0xE7, 0x3C, 0x02, 0xFF, 0x83, 0x52, 0xAA, 0xAD, 0x75, 0x02, 0xFF, 0x8B, 0xD6, 0xBA, 0x42, 0x08, - 0xEF, 0x5D, 0x8C, 0x51, 0x63, 0x0C, 0xE7, 0x3C, 0x0A, 0xFF, 0x83, 0xB5, 0x96, 0x52, 0x8A, 0x0A, - 0xFF, 0x83, 0x52, 0xAA, 0xB5, 0x96, 0x02, 0xFF, 0x83, 0x94, 0xB2, 0x6B, 0x6D, 0x06, 0xFF, 0x83, - 0xA5, 0x14, 0x63, 0x0C, 0x04, 0xFF, 0x85, 0xC6, 0x18, 0x4A, 0x69, 0xFF, 0xDF, 0x02, 0xFF, 0x85, - 0xDE, 0xDB, 0x42, 0x28, 0xEF, 0x5D, 0x02, 0xFF, 0x9C, 0x8C, 0x71, 0x7B, 0xCF, 0xA5, 0x34, 0x8C, - 0x51, 0xC6, 0x18, 0x63, 0x0C, 0xC6, 0x18, 0x5A, 0xCB, 0xF7, 0xBE, 0xF7, 0xBE, 0x7B, 0xCF, 0x7B, - 0xCF, 0xA5, 0x14, 0x9C, 0xD3, 0x39, 0x02, 0xE7, 0x80, 0x3C, 0x02, 0xFF, 0x83, 0x5A, 0xEB, 0xAD, - 0x55, 0x04, 0xFF, 0x8D, 0xC6, 0x18, 0x39, 0xE7, 0xAD, 0x55, 0xAD, 0x75, 0xAD, 0x75, 0xB5, 0x96, - 0xDE, 0xFB, 0x16, 0xFF, 0x97, 0xEF, 0x5D, 0xAD, 0x75, 0xAD, 0x55, 0x42, 0x28, 0x31, 0x86, 0x31, - 0x86, 0x39, 0xE7, 0xEF, 0x7D, 0xB5, 0x96, 0x29, 0x45, 0x29, 0x45, 0x7B, 0xEF, 0x02, 0xFF, 0x97, - 0x5A, 0xEB, 0x29, 0x65, 0x31, 0x86, 0xD6, 0xBA, 0xCE, 0x79, 0x29, 0x65, 0x31, 0x86, 0x29, 0x65, - 0x5A, 0xCB, 0xB5, 0x96, 0xB5, 0x96, 0xF7, 0xBE, 0x08, 0xFF, 0x91, 0xB5, 0xB6, 0x4A, 0x49, 0xC6, - 0x18, 0xE7, 0x3C, 0xE7, 0x3C, 0xDE, 0xDB, 0x6B, 0x6D, 0x6B, 0x6D, 0xFF, 0xDF, 0x02, 0xFF, 0x83, - 0x84, 0x10, 0x73, 0xAE, 0x02, 0xFF, 0x87, 0xF7, 0x9E, 0x5A, 0xCB, 0x52, 0x8A, 0x8C, 0x51, 0x04, - 0xFF, 0x83, 0x52, 0xAA, 0xAD, 0x75, 0x02, 0xFF, 0x8A, 0xD6, 0xBA, 0x39, 0xE7, 0xEF, 0x7D, 0xF7, - 0x9E, 0x6B, 0x4D, 0x7B, 0x02, 0xEF, 0x80, 0x7D, 0x08, 0xFF, 0x83, 0xB5, 0x96, 0x4A, 0x69, 0x0A, - 0xFF, 0x83, 0x52, 0xAA, 0xB5, 0x96, 0x02, 0xFF, 0x83, 0x94, 0xB2, 0x6B, 0x6D, 0x06, 0xFF, 0x83, - 0xA5, 0x14, 0x63, 0x0C, 0x04, 0xFF, 0x85, 0xC6, 0x18, 0x4A, 0x69, 0xFF, 0xDF, 0x02, 0xFF, 0x85, - 0xDE, 0xDB, 0x42, 0x08, 0xEF, 0x5D, 0x02, 0xFF, 0x86, 0xCE, 0x79, 0x52, 0x8A, 0x63, 0x0C, 0xBD, - 0x02, 0xF7, 0x86, 0x9E, 0x5A, 0xCB, 0x63, 0x2C, 0x8C, 0x71, 0x02, 0xFF, 0x8D, 0xE7, 0x1C, 0x39, - 0xE7, 0xCE, 0x59, 0xEF, 0x7D, 0xCE, 0x59, 0x42, 0x08, 0xE7, 0x1C, 0x02, 0xFF, 0x83, 0x5A, 0xEB, - 0xAD, 0x55, 0x04, 0xFF, 0x8D, 0xE7, 0x1C, 0x4A, 0x69, 0xCE, 0x59, 0xEF, 0x5D, 0xEF, 0x5D, 0xDE, - 0xFB, 0xF7, 0xBE, 0x17, 0xFF, 0x96, 0xDF, 0xE7, 0x3C, 0xE7, 0x1C, 0x4A, 0x69, 0x31, 0x86, 0x31, - 0x86, 0x39, 0xE7, 0xEF, 0x7D, 0xB5, 0xB6, 0x29, 0x45, 0x29, 0x45, 0x7B, 0xEF, 0x02, 0xFF, 0x95, - 0x5A, 0xEB, 0x29, 0x65, 0x31, 0x86, 0xD6, 0xBA, 0xCE, 0x59, 0x29, 0x65, 0x31, 0x86, 0x29, 0x65, - 0x6B, 0x4D, 0xE7, 0x3C, 0xEF, 0x5D, 0x0A, 0xFF, 0x97, 0xF7, 0xBE, 0x8C, 0x51, 0x6B, 0x4D, 0x94, - 0xB2, 0x9C, 0xF3, 0x84, 0x10, 0x4A, 0x49, 0x8C, 0x51, 0xDE, 0xFB, 0xFF, 0xDF, 0x8C, 0x71, 0x84, - 0x10, 0x04, 0xFF, 0x85, 0x9C, 0xD3, 0x39, 0xE7, 0xD6, 0x9A, 0x04, 0xFF, 0x83, 0x63, 0x2C, 0xB5, - 0xB6, 0x02, 0xFF, 0x85, 0xDE, 0xDB, 0x52, 0x8A, 0xEF, 0x5D, 0x02, 0xFF, 0x85, 0xD6, 0xBA, 0x52, - 0xAA, 0xBD, 0xD7, 0x08, 0xFF, 0x83, 0xBD, 0xD7, 0x63, 0x0C, 0x0A, 0xFF, 0x83, 0x63, 0x2C, 0xBD, - 0xD7, 0x02, 0xFF, 0x83, 0x9C, 0xF3, 0x7B, 0xEF, 0x06, 0xFF, 0x83, 0xAD, 0x55, 0x73, 0x8E, 0x04, - 0xFF, 0x85, 0xC6, 0x38, 0x63, 0x0C, 0xFF, 0xDF, 0x02, 0xFF, 0x85, 0xDE, 0xFB, 0x52, 0xAA, 0xEF, - 0x7D, 0x02, 0xFF, 0x87, 0xF7, 0xBE, 0x63, 0x0C, 0x52, 0x8A, 0xEF, 0x5D, 0x02, 0xFF, 0x85, 0x7B, - 0xEF, 0x42, 0x08, 0xCE, 0x79, 0x02, 0xFF, 0x8D, 0xF7, 0x9E, 0x6B, 0x4D, 0x8C, 0x71, 0xAD, 0x75, - 0x84, 0x30, 0x52, 0xAA, 0xE7, 0x3C, 0x02, 0xFF, 0x83, 0x6B, 0x6D, 0xB5, 0x96, 0x06, 0xFF, 0x8B, - 0x94, 0xB2, 0x73, 0x8E, 0xAD, 0x55, 0xAD, 0x55, 0x94, 0x92, 0xE7, 0x1C, 0x16, 0xFF, 0x97, 0xEF, - 0x5D, 0xB5, 0xB6, 0xB5, 0x96, 0x42, 0x28, 0x31, 0x86, 0x31, 0x86, 0x31, 0xA6, 0xE7, 0x1C, 0xC6, - 0x38, 0x31, 0x86, 0x29, 0x45, 0x7B, 0xEF, 0x02, 0xFF, 0x84, 0x5A, 0xEB, 0x29, 0x65, 0x39, 0x02, - 0xE7, 0x90, 0x3C, 0xBD, 0xD7, 0x29, 0x65, 0x31, 0x86, 0x29, 0x65, 0x5A, 0xCB, 0xBD, 0xD7, 0xBD, - 0xD7, 0xF7, 0xBE, 0x0A, 0xFF, 0x95, 0xF7, 0xBE, 0xBD, 0xD7, 0x9C, 0xD3, 0x94, 0xB2, 0xB5, 0xB6, - 0xBD, 0xF7, 0x6B, 0x6D, 0x7B, 0xEF, 0xDE, 0xDB, 0xCE, 0x59, 0xC6, 0x38, 0x04, 0xFF, 0x85, 0xE7, - 0x1C, 0xAD, 0x75, 0xFF, 0xDF, 0x04, 0xFF, 0x83, 0xBD, 0xD7, 0xDE, 0xFB, 0x02, 0xFF, 0x85, 0xEF, - 0x7D, 0xAD, 0x75, 0xF7, 0xBE, 0x04, 0xFF, 0x83, 0xC6, 0x38, 0xBD, 0xF7, 0x08, 0xFF, 0x83, 0xE7, - 0x1C, 0xB5, 0xB6, 0x0A, 0xFF, 0x83, 0xBD, 0xD7, 0xDE, 0xFB, 0x02, 0xFF, 0x83, 0xD6, 0x9A, 0xC6, - 0x18, 0x06, 0xFF, 0x83, 0xDE, 0xDB, 0xBD, 0xF7, 0x04, 0xFF, 0x83, 0xE7, 0x3C, 0xB5, 0xB6, 0x04, - 0xFF, 0x85, 0xF7, 0x9E, 0xB5, 0x96, 0xF7, 0xBE, 0x04, 0xFF, 0x83, 0xC6, 0x18, 0xB5, 0xB6, 0x04, - 0xFF, 0x85, 0xD6, 0x9A, 0xAD, 0x55, 0xF7, 0xBE, 0x04, 0xFF, 0x8B, 0xDE, 0xDB, 0x9C, 0xF3, 0x9C, - 0xF3, 0xD6, 0x9A, 0xBD, 0xD7, 0xF7, 0xBE, 0x02, 0xFF, 0x83, 0xBD, 0xD7, 0xDE, 0xDB, 0x06, 0xFF, - 0x8B, 0xF7, 0xBE, 0xB5, 0xB6, 0x9C, 0xD3, 0x9C, 0xD3, 0xB5, 0xB6, 0xF7, 0xBE, 0x16, 0xFF, 0x97, - 0xEF, 0x7D, 0xC6, 0x18, 0xBD, 0xF7, 0x4A, 0x49, 0x29, 0x65, 0x31, 0x86, 0x29, 0x65, 0xB5, 0x96, - 0xEF, 0x5D, 0x5A, 0xEB, 0x31, 0x86, 0x84, 0x10, 0x02, 0xFF, 0x97, 0x63, 0x0C, 0x31, 0xA6, 0x73, - 0xAE, 0xF7, 0xBE, 0x84, 0x30, 0x29, 0x65, 0x31, 0x86, 0x29, 0x65, 0x5A, 0xEB, 0xC6, 0x18, 0xC6, - 0x38, 0xF7, 0xBE, 0x16, 0xFF, 0x85, 0xE7, 0x1C, 0x94, 0xB2, 0xCE, 0x59, 0x7F, 0xFF, 0x34, 0xFF, - 0x96, 0xDF, 0xE7, 0x1C, 0xDE, 0xFB, 0x4A, 0x69, 0x31, 0x86, 0x31, 0x86, 0x29, 0x65, 0x63, 0x0C, - 0xDE, 0xFB, 0xC6, 0x38, 0x73, 0xAE, 0xA5, 0x14, 0x02, 0xFF, 0x95, 0x8C, 0x51, 0x84, 0x10, 0xD6, - 0x9A, 0xC6, 0x38, 0x42, 0x08, 0x31, 0x86, 0x31, 0x86, 0x29, 0x65, 0x6B, 0x4D, 0xE7, 0x1C, 0xE7, - 0x3C, 0x7F, 0xFF, 0x51, 0xFF, 0x97, 0xE7, 0x3C, 0xAD, 0x55, 0xA5, 0x34, 0x42, 0x28, 0x31, 0x86, - 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x6B, 0x6D, 0xBD, 0xF7, 0xD6, 0x9A, 0xDE, 0xFB, 0x02, 0xFF, - 0x97, 0xDE, 0xDB, 0xCE, 0x79, 0xAD, 0x75, 0x52, 0x8A, 0x29, 0x65, 0x31, 0x86, 0x31, 0x86, 0x29, - 0x65, 0x52, 0xAA, 0xAD, 0x75, 0xAD, 0x75, 0xF7, 0xBE, 0x0C, 0xFF, 0x83, 0xF7, 0xBE, 0xF7, 0xBE, - 0x40, 0xFF, 0x81, 0xF7, 0xBE, 0x17, 0xFF, 0x84, 0xDF, 0xF7, 0x9E, 0xFF, 0xDF, 0x46, 0xFF, 0x83, - 0xEF, 0x7D, 0xFF, 0xDF, 0x16, 0xFF, 0x97, 0xF7, 0xBE, 0xDE, 0xDB, 0xD6, 0xBA, 0x4A, 0x49, 0x29, - 0x65, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x29, 0x65, 0x39, 0xE7, 0x52, 0xAA, 0xA5, 0x14, 0x02, - 0xFF, 0x97, 0x8C, 0x51, 0x52, 0x8A, 0x31, 0xA6, 0x29, 0x65, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, - 0x29, 0x65, 0x63, 0x2C, 0xDE, 0xDB, 0xDE, 0xDB, 0xFF, 0xDF, 0x0A, 0xFF, 0x87, 0xDE, 0xFB, 0xC6, - 0x38, 0xC6, 0x38, 0xE7, 0x3C, 0x3D, 0xFF, 0x82, 0xDF, 0xCE, 0x59, 0x02, 0xFF, 0x83, 0xEF, 0x5D, - 0xF7, 0xBE, 0x0E, 0xFF, 0x87, 0xF7, 0xBE, 0xCE, 0x79, 0xC6, 0x18, 0xD6, 0xBA, 0x31, 0xFF, 0x82, - 0xDF, 0xEF, 0x5D, 0x12, 0xFF, 0x83, 0xAD, 0x75, 0xE7, 0x3C, 0x16, 0xFF, 0xB1, 0xF7, 0x9E, 0xCE, - 0x79, 0xCE, 0x59, 0x4A, 0x49, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, - 0x86, 0x21, 0x24, 0x73, 0xAE, 0xEF, 0x5D, 0x52, 0xAA, 0x29, 0x45, 0x31, 0x86, 0x31, 0x86, 0x31, - 0x86, 0x31, 0x86, 0x31, 0x86, 0x29, 0x65, 0x63, 0x0C, 0xD6, 0x9A, 0xD6, 0x9A, 0xFF, 0xDF, 0x08, - 0xFF, 0x89, 0xE7, 0x3C, 0x8C, 0x51, 0xA5, 0x34, 0xAD, 0x55, 0xBD, 0xD7, 0x02, 0xFF, 0x85, 0xEF, - 0x5D, 0xE7, 0x1C, 0xEF, 0x5D, 0x03, 0xFF, 0x8C, 0xDF, 0xEF, 0x5D, 0xE7, 0x3C, 0xEF, 0x5D, 0xF7, - 0x9E, 0xE7, 0x1C, 0xEF, 0x7D, 0x02, 0xFF, 0x8D, 0xEF, 0x7D, 0xEF, 0x5D, 0xE7, 0x1C, 0xF7, 0x9E, - 0xEF, 0x5D, 0xE7, 0x1C, 0xFF, 0xDF, 0x02, 0xFF, 0x81, 0xEF, 0x5D, 0x03, 0xFF, 0x82, 0xDF, 0xEF, - 0x7D, 0x02, 0xFF, 0x95, 0xEF, 0x5D, 0xEF, 0x5D, 0xE7, 0x1C, 0xFF, 0xDF, 0xF7, 0x9E, 0xAD, 0x55, - 0xFF, 0xDF, 0xA5, 0x14, 0xCE, 0x59, 0xF7, 0x9E, 0xEF, 0x5D, 0x04, 0xFF, 0x81, 0xEF, 0x5D, 0x04, - 0xFF, 0x8B, 0xDE, 0xDB, 0x73, 0xAE, 0xAD, 0x75, 0xB5, 0x96, 0xFF, 0xDF, 0xEF, 0x5D, 0x04, 0xFF, - 0x81, 0xEF, 0x5D, 0x02, 0xFF, 0x87, 0xEF, 0x7D, 0xEF, 0x7D, 0xE7, 0x1C, 0xF7, 0x9E, 0x02, 0xFF, - 0x87, 0xEF, 0x7D, 0xEF, 0x7D, 0xE7, 0x1C, 0xEF, 0x7D, 0x03, 0xFF, 0x86, 0xDF, 0xE7, 0x3C, 0xE7, - 0x1C, 0xF7, 0x9E, 0x02, 0xFF, 0x8B, 0xEF, 0x7D, 0xEF, 0x5D, 0xE7, 0x3C, 0xD6, 0xBA, 0x9C, 0xF3, - 0xEF, 0x5D, 0x02, 0xFF, 0x85, 0xEF, 0x7D, 0xE7, 0x1C, 0xEF, 0x5D, 0x04, 0xFF, 0x87, 0xE7, 0x3C, - 0xE7, 0x3C, 0x7B, 0xEF, 0xD6, 0xBA, 0x16, 0xFF, 0xB1, 0xE7, 0x3C, 0xAD, 0x75, 0xAD, 0x55, 0x42, - 0x28, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x52, - 0xAA, 0x94, 0xB2, 0x42, 0x28, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, - 0x86, 0x29, 0x65, 0x5A, 0xCB, 0xAD, 0x75, 0xB5, 0x96, 0xF7, 0xBE, 0x08, 0xFF, 0x83, 0xA5, 0x34, - 0x94, 0xB2, 0x04, 0xFF, 0x99, 0xF7, 0xBE, 0xEF, 0x7D, 0xAD, 0x75, 0xA5, 0x34, 0xA5, 0x34, 0xE7, - 0x3C, 0xDE, 0xFB, 0xA5, 0x14, 0xAD, 0x75, 0x9C, 0xF3, 0xC6, 0x18, 0xA5, 0x14, 0xB5, 0x96, 0x02, - 0xFF, 0x91, 0xB5, 0xB6, 0xAD, 0x75, 0xA5, 0x14, 0xAD, 0x75, 0xBD, 0xD7, 0x9C, 0xD3, 0xD6, 0xBA, - 0xF7, 0xBE, 0xAD, 0x55, 0x02, 0xFF, 0xA1, 0xE7, 0x1C, 0xB5, 0x96, 0xFF, 0xDF, 0xA5, 0x14, 0xB5, - 0xB6, 0x9C, 0xD3, 0xD6, 0xBA, 0xFF, 0xDF, 0xAD, 0x75, 0xE7, 0x3C, 0x63, 0x0C, 0x8C, 0x71, 0xD6, - 0xBA, 0xA5, 0x34, 0xFF, 0xDF, 0xEF, 0x5D, 0xAD, 0x75, 0x04, 0xFF, 0x87, 0xCE, 0x59, 0x7B, 0xEF, - 0xDE, 0xDB, 0xF7, 0xBE, 0x02, 0xFF, 0x87, 0xAD, 0x55, 0xEF, 0x7D, 0xFF, 0xDF, 0xA5, 0x34, 0x02, - 0xFF, 0x87, 0xAD, 0x75, 0xB5, 0x96, 0xA5, 0x14, 0xB5, 0x96, 0x02, 0xFF, 0xB3, 0xB5, 0x96, 0xB5, - 0x96, 0xA5, 0x14, 0xB5, 0x96, 0xFF, 0xDF, 0xD6, 0x9A, 0xA5, 0x34, 0xA5, 0x34, 0xB5, 0xB6, 0xFF, - 0xDF, 0xB5, 0x96, 0xA5, 0x34, 0xB5, 0xB6, 0xA5, 0x34, 0x5A, 0xEB, 0xBD, 0xF7, 0xEF, 0x7D, 0xAD, - 0x75, 0xAD, 0x55, 0xAD, 0x55, 0xF7, 0x9E, 0xDE, 0xFB, 0x9C, 0xF3, 0xAD, 0x75, 0x6B, 0x4D, 0xDE, - 0xDB, 0x18, 0xFF, 0xAD, 0xF7, 0xBE, 0xF7, 0x9E, 0x5A, 0xCB, 0x29, 0x65, 0x31, 0x86, 0x31, 0x86, - 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x29, 0x65, 0x31, 0x86, 0x31, 0x86, - 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0x86, 0x29, 0x45, 0x7B, 0xCF, 0xF7, 0xBE, - 0xF7, 0xBE, 0x0A, 0xFF, 0x83, 0x84, 0x30, 0xBD, 0xF7, 0x06, 0xFF, 0xAB, 0xB5, 0x96, 0x94, 0x92, - 0xE7, 0x1C, 0x9C, 0xD3, 0xA5, 0x34, 0xCE, 0x79, 0x6B, 0x4D, 0xDE, 0xDB, 0x73, 0xAE, 0x94, 0xB2, - 0xD6, 0xBA, 0x6B, 0x6D, 0xFF, 0xDF, 0x84, 0x10, 0xA5, 0x14, 0xD6, 0x9A, 0x5A, 0xCB, 0xCE, 0x79, - 0xAD, 0x55, 0x94, 0x92, 0xEF, 0x7D, 0x73, 0x8E, 0x02, 0xFF, 0xA1, 0xD6, 0x9A, 0x84, 0x30, 0xF7, - 0xBE, 0x5A, 0xEB, 0xD6, 0x9A, 0xAD, 0x75, 0x8C, 0x71, 0xF7, 0xBE, 0x73, 0x8E, 0xF7, 0xBE, 0x7B, - 0xEF, 0xB5, 0xB6, 0xEF, 0x7D, 0x7B, 0xCF, 0xDE, 0xFB, 0xBD, 0xF7, 0x94, 0xB2, 0x04, 0xFF, 0xD1, - 0xF7, 0x9E, 0x9C, 0xD3, 0x8C, 0x71, 0xBD, 0xD7, 0xFF, 0xDF, 0x73, 0xAE, 0xE7, 0x1C, 0xFF, 0xDF, - 0x6B, 0x6D, 0xFF, 0xDF, 0x73, 0xAE, 0xAD, 0x55, 0xDE, 0xDB, 0x6B, 0x6D, 0xEF, 0x5D, 0x7B, 0xCF, - 0xAD, 0x55, 0xDE, 0xDB, 0x6B, 0x6D, 0xE7, 0x1C, 0x7B, 0xEF, 0xC6, 0x38, 0xDE, 0xFB, 0x73, 0x8E, - 0xE7, 0x3C, 0x84, 0x10, 0x9C, 0xD3, 0xE7, 0x1C, 0xC6, 0x38, 0x73, 0xAE, 0xE7, 0x3C, 0xBD, 0xF7, - 0x7B, 0xEF, 0xCE, 0x59, 0x7B, 0xEF, 0xCE, 0x79, 0x94, 0xB2, 0xAD, 0x55, 0xDE, 0xDB, 0x63, 0x2C, - 0xDE, 0xDB, 0x1C, 0xFF, 0xA5, 0x94, 0xB2, 0x39, 0xC7, 0x31, 0x86, 0x31, 0xA6, 0x31, 0xA6, 0x31, - 0x86, 0x31, 0xA6, 0x31, 0x86, 0x31, 0x86, 0x31, 0xA6, 0x31, 0x86, 0x31, 0xA6, 0x31, 0xA6, 0x31, - 0x86, 0x31, 0x86, 0x31, 0x86, 0x31, 0xA6, 0x39, 0xE7, 0xB5, 0x96, 0x0E, 0xFF, 0x85, 0x94, 0x92, - 0xAD, 0x55, 0xFF, 0xDF, 0x02, 0xFF, 0x85, 0xF7, 0xBE, 0x94, 0x92, 0xBD, 0xD7, 0x02, 0xFF, 0x87, - 0xC6, 0x38, 0x8C, 0x71, 0xCE, 0x79, 0x94, 0x92, 0x02, 0xFF, 0x83, 0x94, 0xB2, 0xC6, 0x18, 0x02, - 0xFF, 0x87, 0x73, 0xAE, 0xF7, 0x9E, 0x8C, 0x51, 0xD6, 0xBA, 0x02, 0xFF, 0x81, 0x73, 0x8E, 0x02, - 0xFF, 0x87, 0xD6, 0x9A, 0x8C, 0x51, 0xF7, 0x9E, 0x73, 0xAE, 0x02, 0xFF, 0x87, 0xCE, 0x59, 0x84, - 0x30, 0xF7, 0xBE, 0x73, 0xAE, 0x02, 0xFF, 0x87, 0xDE, 0xDB, 0x84, 0x10, 0xF7, 0xBE, 0x73, 0xAE, - 0x02, 0xFF, 0x83, 0x8C, 0x71, 0xCE, 0x79, 0x02, 0xFF, 0x87, 0xB5, 0x96, 0x9C, 0xF3, 0x8C, 0x71, - 0xD6, 0xBA, 0x05, 0xFF, 0x96, 0xDF, 0xFF, 0xDF, 0xC6, 0x38, 0x63, 0x2C, 0xE7, 0x1C, 0x7B, 0xEF, - 0xE7, 0x1C, 0xF7, 0xBE, 0x73, 0x8E, 0xFF, 0xDF, 0x7B, 0xEF, 0xDE, 0xDB, 0x02, 0xFF, 0x87, 0x7B, - 0xCF, 0xDE, 0xFB, 0x84, 0x10, 0xDE, 0xDB, 0x02, 0xFF, 0x87, 0x7B, 0xEF, 0xCE, 0x59, 0x73, 0x8E, - 0xF7, 0xBE, 0x02, 0xFF, 0x87, 0x84, 0x10, 0xD6, 0x9A, 0x8C, 0x51, 0xD6, 0xBA, 0x02, 0xFF, 0x83, - 0xDE, 0xDB, 0x84, 0x10, 0x02, 0xFF, 0x8D, 0xA5, 0x14, 0x7B, 0xCF, 0xB5, 0xB6, 0x9C, 0xF3, 0xD6, - 0xBA, 0x84, 0x10, 0xD6, 0xBA, 0x02, 0xFF, 0x83, 0x7B, 0xEF, 0xD6, 0xBA, 0x1C, 0xFF, 0xA5, 0xEF, - 0x5D, 0x84, 0x30, 0x5A, 0xEB, 0x4A, 0x49, 0x4A, 0x49, 0x5A, 0xCB, 0x42, 0x28, 0x52, 0x8A, 0x52, - 0xAA, 0x42, 0x28, 0x5A, 0xCB, 0x4A, 0x69, 0x4A, 0x49, 0x5A, 0xCB, 0x42, 0x28, 0x4A, 0x69, 0x5A, - 0xEB, 0x94, 0xB2, 0xF7, 0xBE, 0x0E, 0xFF, 0x97, 0xCE, 0x59, 0x84, 0x10, 0xD6, 0xBA, 0xDE, 0xDB, - 0xD6, 0xBA, 0xB5, 0x96, 0x9C, 0xD3, 0xDE, 0xFB, 0xA5, 0x14, 0xB5, 0x96, 0xCE, 0x79, 0x94, 0xB2, - 0x02, 0xFF, 0x83, 0x9C, 0xD3, 0xC6, 0x18, 0x02, 0xFF, 0x9F, 0x7B, 0xEF, 0xF7, 0x9E, 0x8C, 0x71, - 0xD6, 0xBA, 0xFF, 0xDF, 0x7B, 0xCF, 0xFF, 0xDF, 0xD6, 0x9A, 0x8C, 0x71, 0xF7, 0xBE, 0x7B, 0xCF, - 0xDE, 0xDB, 0xAD, 0x55, 0x8C, 0x51, 0xF7, 0xBE, 0x7B, 0xEF, 0x02, 0xFF, 0x87, 0xDE, 0xDB, 0x8C, - 0x51, 0xF7, 0xBE, 0x7B, 0xCF, 0x02, 0xFF, 0x8D, 0x94, 0xB2, 0xB5, 0x96, 0xF7, 0x9E, 0xEF, 0x5D, - 0x6B, 0x6D, 0x84, 0x10, 0xFF, 0xDF, 0x04, 0xFF, 0x91, 0xE7, 0x1C, 0xD6, 0xBA, 0xDE, 0xDB, 0x7B, - 0xCF, 0xDE, 0xFB, 0x94, 0x92, 0xBD, 0xF7, 0xCE, 0x79, 0x6B, 0x6D, 0x02, 0xFF, 0x86, 0x7B, 0xCF, - 0xB5, 0x96, 0xDE, 0xDB, 0x7B, 0x02, 0xEF, 0x98, 0x7D, 0x7B, 0xEF, 0xAD, 0x75, 0xDE, 0xDB, 0x7B, - 0xEF, 0xE7, 0x3C, 0x84, 0x30, 0xCE, 0x59, 0xDE, 0xFB, 0x84, 0x10, 0xEF, 0x5D, 0x8C, 0x71, 0xD6, - 0xBA, 0x02, 0xFF, 0x99, 0xE7, 0x1C, 0x7B, 0xCF, 0xE7, 0x3C, 0xBD, 0xF7, 0x94, 0x92, 0xDE, 0xDB, - 0xDE, 0xDB, 0xFF, 0xDF, 0x9C, 0xD3, 0xB5, 0x96, 0xDE, 0xFB, 0x73, 0x8E, 0xDE, 0xDB, 0x1F, 0xFF, - 0x9E, 0xDF, 0xDE, 0xDB, 0x94, 0xB2, 0x9C, 0xD3, 0xD6, 0xBA, 0x84, 0x10, 0xBD, 0xD7, 0xC6, 0x18, - 0x7B, 0xEF, 0xD6, 0x9A, 0xA5, 0x34, 0x8C, 0x71, 0xD6, 0xBA, 0x8C, 0x51, 0xAD, 0x55, 0xDE, 0xFB, - 0x14, 0xFF, 0x95, 0xB5, 0x96, 0x9C, 0xD3, 0x9C, 0xF3, 0xC6, 0x38, 0xF7, 0x9E, 0xA5, 0x14, 0xA5, - 0x14, 0xA5, 0x34, 0xF7, 0x9E, 0xDE, 0xFB, 0xBD, 0xD7, 0x02, 0xFF, 0x83, 0xBD, 0xF7, 0xDE, 0xDB, - 0x02, 0xFF, 0x87, 0xAD, 0x55, 0xF7, 0xBE, 0xB5, 0xB6, 0xE7, 0x1C, 0x02, 0xFF, 0x81, 0xAD, 0x55, - 0x02, 0xFF, 0x83, 0xE7, 0x1C, 0xB5, 0xB6, 0x02, 0xFF, 0x8B, 0xB5, 0x96, 0x9C, 0xD3, 0xA5, 0x34, - 0xBD, 0xD7, 0xFF, 0xDF, 0xAD, 0x55, 0x02, 0xFF, 0x87, 0xE7, 0x3C, 0xB5, 0x96, 0xFF, 0xDF, 0xAD, - 0x55, 0x02, 0xFF, 0x85, 0xCE, 0x79, 0x94, 0x92, 0xDE, 0xFB, 0x02, 0xFF, 0x83, 0x73, 0x8E, 0xAD, - 0x55, 0x06, 0xFF, 0x87, 0xD6, 0xBA, 0x9C, 0xF3, 0x9C, 0xF3, 0xB5, 0x96, 0x02, 0xFF, 0x87, 0xCE, - 0x79, 0x94, 0xB2, 0xAD, 0x75, 0xA5, 0x14, 0x02, 0xFF, 0x87, 0x7B, 0xEF, 0x94, 0xB2, 0x9C, 0xF3, - 0xBD, 0xD7, 0x02, 0xFF, 0x87, 0x7B, 0xEF, 0x94, 0x92, 0x9C, 0xF3, 0xB5, 0xB6, 0x02, 0xFF, 0x87, - 0xCE, 0x79, 0x9C, 0xD3, 0xA5, 0x14, 0xBD, 0xF7, 0x02, 0xFF, 0x83, 0xB5, 0x96, 0xE7, 0x3C, 0x02, - 0xFF, 0x99, 0xF7, 0xBE, 0x9C, 0xD3, 0xB5, 0xB6, 0xF7, 0x9E, 0xA5, 0x34, 0xA5, 0x34, 0xAD, 0x75, - 0xF7, 0x9E, 0xDE, 0xFB, 0x94, 0xB2, 0xAD, 0x75, 0x9C, 0xF3, 0xEF, 0x5D, 0x22, 0xFF, 0x83, 0xBD, - 0xD7, 0xBD, 0xF7, 0x02, 0xFF, 0x87, 0xA5, 0x14, 0xE7, 0x1C, 0xEF, 0x7D, 0x9C, 0xF3, 0x02, 0xFF, - 0x83, 0xCE, 0x59, 0xAD, 0x75, 0x02, 0xFF, 0x83, 0xAD, 0x55, 0xD6, 0x9A, 0x18, 0xFF, 0x83, 0xF7, - 0xBE, 0xF7, 0xBE, 0x06, 0xFF, 0x81, 0xF7, 0x9E, 0x11, 0xFF, 0x80, 0xDF, 0x09, 0xFF, 0x80, 0xDF, - 0x0A, 0xFF, 0x81, 0xF7, 0x9E, 0x07, 0xFF, 0x80, 0xDF, 0x09, 0xFF, 0x80, 0xDF, 0x04, 0xFF, 0x89, - 0xF7, 0xBE, 0xFF, 0xDF, 0xFF, 0xDF, 0x84, 0x30, 0xE7, 0x1C, 0x08, 0xFF, 0x83, 0xF7, 0xBE, 0xF7, - 0x9E, 0x06, 0xFF, 0x83, 0xF7, 0xBE, 0xFF, 0xDF, 0x04, 0xFF, 0x85, 0x8C, 0x71, 0xE7, 0x1C, 0xF7, - 0x9E, 0x04, 0xFF, 0x85, 0x8C, 0x71, 0xDE, 0xFB, 0xF7, 0x9E, 0x06, 0xFF, 0x83, 0xF7, 0xBE, 0xF7, - 0xBE, 0x0D, 0xFF, 0x82, 0xDF, 0xF7, 0xBE, 0x04, 0xFF, 0x83, 0xF7, 0x9E, 0xF7, 0xBE, 0x04, 0xFF, - 0x83, 0xF7, 0xBE, 0xF7, 0xBE, 0x26, 0xFF, 0x83, 0xDE, 0xFB, 0xDE, 0xFB, 0x02, 0xFF, 0x87, 0xD6, - 0x9A, 0xEF, 0x7D, 0xF7, 0xBE, 0xCE, 0x79, 0x02, 0xFF, 0x83, 0xE7, 0x3C, 0xD6, 0xBA, 0x02, 0xFF, - 0x83, 0xD6, 0xBA, 0xE7, 0x3C, 0x66, 0xFF, 0x83, 0xF7, 0xBE, 0xC6, 0x38, 0x1C, 0xFF, 0x83, 0xCE, - 0x59, 0xF7, 0x9E, 0x06, 0xFF, 0x83, 0xCE, 0x59, 0xF7, 0x9E, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, - 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, - 0x7F, 0xFF, 0x7F, 0xFF, 0x13, 0xFF, 0x85, 0xF7, 0x9E, 0xFF, 0xDF, 0xF7, 0xBE, 0x24, 0xFF, 0x83, - 0xF7, 0xBE, 0xFF, 0xDF, 0x16, 0xFF, 0x81, 0xF7, 0x9E, 0x10, 0xFF, 0x81, 0xF7, 0xBE, 0x7A, 0xFF, - 0x89, 0xD6, 0x9A, 0x6B, 0x4D, 0x4A, 0x69, 0x7B, 0xEF, 0xF7, 0xBE, 0x0A, 0xFF, 0x89, 0xCE, 0x79, - 0x6B, 0x6D, 0x5A, 0xCB, 0x8C, 0x71, 0xF7, 0x9E, 0x04, 0xFF, 0x91, 0x63, 0x2C, 0x52, 0x8A, 0x52, - 0x8A, 0x52, 0x8A, 0xB5, 0xB6, 0xE7, 0x1C, 0x39, 0xC7, 0xBD, 0xF7, 0x63, 0x0C, 0x08, 0xFF, 0x83, - 0xDE, 0xDB, 0x4A, 0x49, 0x02, 0xFF, 0x8D, 0xF7, 0x9E, 0x31, 0xA6, 0x31, 0xA6, 0x31, 0xA6, 0x39, - 0xE7, 0x52, 0xAA, 0xAD, 0x55, 0x04, 0xFF, 0x8B, 0xD6, 0xBA, 0x5A, 0xCB, 0x42, 0x08, 0x39, 0xE7, - 0x63, 0x2C, 0xE7, 0x1C, 0x0C, 0xFF, 0x8B, 0xDE, 0xDB, 0x73, 0x8E, 0x4A, 0x69, 0x4A, 0x69, 0x4A, - 0x49, 0xAD, 0x55, 0x06, 0xFF, 0x8B, 0xEF, 0x7D, 0x7B, 0xEF, 0x4A, 0x69, 0x4A, 0x49, 0x6B, 0x4D, - 0xBD, 0xD7, 0x04, 0xFF, 0x89, 0xE7, 0x3C, 0x8C, 0x71, 0x52, 0xAA, 0x6B, 0x6D, 0xDE, 0xFB, 0x08, - 0xFF, 0x83, 0x84, 0x30, 0xA5, 0x34, 0x06, 0xFF, 0x87, 0xA5, 0x34, 0x5A, 0xCB, 0x52, 0x8A, 0xAD, - 0x55, 0x02, 0xFF, 0x8D, 0xEF, 0x7D, 0x52, 0x8A, 0x52, 0x8A, 0x52, 0x8A, 0x52, 0x8A, 0x52, 0x8A, - 0xB5, 0x96, 0x3C, 0xFF, 0x8B, 0xF7, 0x9E, 0x42, 0x08, 0xB5, 0x96, 0xD6, 0x9A, 0x6B, 0x6D, 0x8C, - 0x51, 0x09, 0xFF, 0x8A, 0xDF, 0x42, 0x08, 0xBD, 0xD7, 0xDE, 0xDB, 0x73, 0xAE, 0x94, 0x92, 0x02, - 0xFF, 0x93, 0xF7, 0x9E, 0x10, 0xA2, 0xC6, 0x18, 0xC6, 0x18, 0xC6, 0x18, 0xE7, 0x1C, 0xF7, 0xBE, - 0x52, 0xAA, 0xE7, 0x1C, 0x6B, 0x4D, 0x08, 0xFF, 0x83, 0xCE, 0x79, 0x10, 0x82, 0x02, 0xFF, 0x81, - 0xEF, 0x7D, 0x02, 0x00, 0x99, 0xC6, 0x38, 0xD6, 0x9A, 0xCE, 0x79, 0xAD, 0x75, 0x29, 0x45, 0xD6, - 0x9A, 0xFF, 0xDF, 0x39, 0xE7, 0x9C, 0xF3, 0xD6, 0x9A, 0xCE, 0x79, 0x7B, 0xEF, 0x52, 0x8A, 0x0A, - 0xFF, 0x8F, 0xD6, 0xBA, 0x42, 0x28, 0xA5, 0x34, 0xD6, 0xBA, 0xDE, 0xDB, 0xBD, 0xF7, 0x4A, 0x69, - 0xB5, 0x96, 0x02, 0xFF, 0x8F, 0xEF, 0x7D, 0x52, 0x8A, 0x84, 0x10, 0xCE, 0x79, 0xD6, 0xBA, 0xB5, - 0xB6, 0x31, 0x86, 0xD6, 0x9A, 0x02, 0xFF, 0x8B, 0x73, 0xAE, 0x84, 0x30, 0xD6, 0xBA, 0xB5, 0xB6, - 0x42, 0x08, 0xF7, 0x9E, 0x02, 0xFF, 0x87, 0xDE, 0xFB, 0x73, 0xAE, 0x18, 0xE3, 0x94, 0x92, 0x04, - 0xFF, 0x99, 0xC6, 0x18, 0x4A, 0x69, 0xCE, 0x59, 0xC6, 0x18, 0x42, 0x28, 0xCE, 0x79, 0xFF, 0xDF, - 0xC6, 0x18, 0xC6, 0x18, 0xC6, 0x18, 0x9C, 0xF3, 0x10, 0xA2, 0xDE, 0xDB, 0x3C, 0xFF, 0x85, 0xCE, - 0x59, 0x39, 0xE7, 0xF7, 0xBE, 0x02, 0xFF, 0x83, 0xCE, 0x59, 0x21, 0x04, 0x08, 0xFF, 0x85, 0xF7, - 0xBE, 0x00, 0x20, 0xE7, 0x1C, 0x02, 0xFF, 0x83, 0x8C, 0x51, 0x63, 0x2C, 0x02, 0xFF, 0x89, 0xCE, - 0x79, 0x39, 0xE7, 0xF7, 0x9E, 0xDE, 0xDB, 0xFF, 0xDF, 0x02, 0xFF, 0x87, 0xF7, 0x9E, 0xC6, 0x18, - 0xDE, 0xFB, 0xD6, 0xBA, 0x08, 0xFF, 0x83, 0xCE, 0x79, 0x10, 0x82, 0x02, 0xFF, 0x81, 0xEF, 0x7D, - 0x02, 0x00, 0x81, 0xF7, 0x9E, 0x04, 0xFF, 0x8B, 0xF7, 0xBE, 0x31, 0x86, 0xAD, 0x55, 0xFF, 0xDF, - 0x00, 0x20, 0xC6, 0x38, 0x04, 0xFF, 0x83, 0xE7, 0x3C, 0xA5, 0x34, 0x0A, 0xFF, 0x85, 0x7B, 0xCF, - 0x7B, 0xCF, 0xF7, 0x9E, 0x05, 0xFF, 0x84, 0xDF, 0xBD, 0xD7, 0xC6, 0x18, 0x02, 0xFF, 0x85, 0xB5, - 0xB6, 0x42, 0x08, 0xEF, 0x5D, 0x04, 0xFF, 0x8B, 0xF7, 0xBE, 0xAD, 0x55, 0xD6, 0xBA, 0xF7, 0x9E, - 0x10, 0xA2, 0xE7, 0x1C, 0x02, 0xFF, 0x85, 0xF7, 0xBE, 0x31, 0xA6, 0xBD, 0xD7, 0x02, 0xFF, 0x87, - 0x8C, 0x51, 0x9C, 0xF3, 0x63, 0x0C, 0x94, 0x92, 0x04, 0xFF, 0x8B, 0x7B, 0xCF, 0x8C, 0x71, 0xFF, - 0xDF, 0xFF, 0xDF, 0x7B, 0xEF, 0x7B, 0xEF, 0x03, 0xFF, 0x8A, 0xDF, 0xFF, 0xDF, 0xF7, 0xBE, 0x4A, - 0x69, 0x9C, 0xD3, 0xFF, 0xDF, 0x3C, 0xFF, 0x83, 0xAD, 0x55, 0x5A, 0xEB, 0x04, 0xFF, 0x81, 0xF7, - 0x9E, 0x02, 0x00, 0x81, 0xFF, 0xDF, 0x08, 0xFF, 0x89, 0x84, 0x30, 0x4A, 0x69, 0x84, 0x10, 0x42, - 0x08, 0xC6, 0x18, 0x02, 0xFF, 0x8B, 0x9C, 0xF3, 0x21, 0x24, 0x52, 0xAA, 0x31, 0x86, 0x63, 0x2C, - 0xF7, 0xBE, 0x03, 0xFF, 0x84, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0x08, 0xFF, 0x83, 0xCE, 0x79, 0x10, - 0x82, 0x02, 0xFF, 0x81, 0xEF, 0x7D, 0x02, 0x00, 0x81, 0xF7, 0x9E, 0x03, 0xFF, 0x86, 0xDF, 0xC6, - 0x38, 0x08, 0x41, 0xDE, 0xFB, 0x02, 0xFF, 0x8B, 0x73, 0x8E, 0x29, 0x65, 0x73, 0xAE, 0xB5, 0x96, - 0xEF, 0x5D, 0xF7, 0x9E, 0x0A, 0xFF, 0x83, 0x31, 0xA6, 0xB5, 0xB6, 0x08, 0xFF, 0x83, 0xF7, 0xBE, - 0xF7, 0xBE, 0x02, 0xFF, 0x83, 0x7B, 0xEF, 0x73, 0xAE, 0x08, 0xFF, 0x89, 0xF7, 0xBE, 0xFF, 0xDF, - 0xFF, 0xDF, 0x10, 0x82, 0xDE, 0xFB, 0x04, 0xFF, 0x83, 0x18, 0xC3, 0x9C, 0xF3, 0x02, 0xFF, 0x87, - 0xE7, 0x3C, 0xF7, 0x9E, 0x73, 0x8E, 0x94, 0x92, 0x04, 0xFF, 0x83, 0x52, 0x8A, 0xB5, 0x96, 0x04, - 0xFF, 0x83, 0xA5, 0x34, 0x5A, 0xEB, 0x06, 0xFF, 0x85, 0xA5, 0x34, 0x4A, 0x69, 0xF7, 0x9E, 0x3E, - 0xFF, 0x83, 0x94, 0x92, 0x6B, 0x6D, 0x06, 0xFF, 0x02, 0x00, 0x81, 0xF7, 0x9E, 0x07, 0xFF, 0x8A, - 0xDF, 0x6B, 0x6D, 0x39, 0xC7, 0x73, 0xAE, 0x21, 0x24, 0xBD, 0xD7, 0x02, 0xFF, 0x8B, 0xA5, 0x34, - 0x73, 0xAE, 0xDE, 0xDB, 0xC6, 0x18, 0x39, 0xE7, 0xB5, 0xB6, 0x10, 0xFF, 0x83, 0xCE, 0x79, 0x10, - 0x82, 0x02, 0xFF, 0x81, 0xEF, 0x7D, 0x02, 0x00, 0x8B, 0x42, 0x28, 0x4A, 0x49, 0x39, 0xE7, 0x21, - 0x24, 0x6B, 0x6D, 0xFF, 0xDF, 0x02, 0xFF, 0x8B, 0xEF, 0x5D, 0xA5, 0x34, 0x6B, 0x4D, 0x31, 0xA6, - 0x31, 0xA6, 0xB5, 0x96, 0x0A, 0xFF, 0x83, 0x08, 0x41, 0xCE, 0x79, 0x04, 0xFF, 0x87, 0x94, 0xB2, - 0x6B, 0x4D, 0x6B, 0x4D, 0x73, 0xAE, 0x02, 0xFF, 0x83, 0x5A, 0xEB, 0x8C, 0x51, 0x0E, 0xFF, 0x8B, - 0x63, 0x0C, 0x63, 0x2C, 0xC6, 0x38, 0x8C, 0x51, 0x10, 0x82, 0x9C, 0xD3, 0x06, 0xFF, 0x83, 0x73, - 0x8E, 0x94, 0x92, 0x04, 0xFF, 0x83, 0x39, 0xC7, 0xC6, 0x18, 0x04, 0xFF, 0x83, 0xB5, 0x96, 0x4A, - 0x69, 0x06, 0xFF, 0x83, 0x42, 0x08, 0xA5, 0x14, 0x40, 0xFF, 0x83, 0x9C, 0xF3, 0x63, 0x2C, 0x04, - 0xFF, 0x81, 0xF7, 0xBE, 0x02, 0x00, 0x81, 0xFF, 0xDF, 0x06, 0xFF, 0x8B, 0xCE, 0x59, 0x31, 0x86, - 0xDE, 0xFB, 0xE7, 0x3C, 0xAD, 0x55, 0x39, 0xC7, 0x02, 0xFF, 0x83, 0xEF, 0x7D, 0xEF, 0x5D, 0x03, - 0xFF, 0x84, 0xDF, 0x8C, 0x71, 0x5A, 0xEB, 0x10, 0xFF, 0x83, 0xCE, 0x79, 0x10, 0x82, 0x02, 0xFF, - 0x81, 0xEF, 0x7D, 0x02, 0x00, 0x89, 0xA5, 0x14, 0xAD, 0x75, 0xB5, 0x96, 0xCE, 0x59, 0xEF, 0x5D, - 0x05, 0xFF, 0x8C, 0xDF, 0xF7, 0xBE, 0xE7, 0x3C, 0xD6, 0xBA, 0x94, 0x92, 0x21, 0x24, 0xE7, 0x3C, - 0x08, 0xFF, 0x83, 0x29, 0x65, 0xB5, 0x96, 0x04, 0xFF, 0x87, 0xB5, 0xB6, 0x9C, 0xD3, 0x7B, 0xEF, - 0x21, 0x04, 0x02, 0xFF, 0x83, 0x7B, 0xEF, 0x73, 0x8E, 0x08, 0xFF, 0x83, 0xF7, 0x9E, 0xF7, 0xBE, - 0x02, 0xFF, 0x8B, 0xD6, 0xBA, 0x63, 0x0C, 0x52, 0xAA, 0x8C, 0x51, 0x52, 0xAA, 0xB5, 0x96, 0x06, - 0xFF, 0x83, 0x73, 0x8E, 0x94, 0x92, 0x04, 0xFF, 0x83, 0x42, 0x28, 0xBD, 0xD7, 0x04, 0xFF, 0x83, - 0xA5, 0x34, 0x63, 0x0C, 0x04, 0xFF, 0x85, 0xDE, 0xFB, 0x10, 0xA2, 0xEF, 0x5D, 0x40, 0xFF, 0x83, - 0xB5, 0xB6, 0x4A, 0x49, 0x04, 0xFF, 0x83, 0xDE, 0xFB, 0x18, 0xE3, 0x08, 0xFF, 0x83, 0xA5, 0x34, - 0x5A, 0xCB, 0x04, 0xFF, 0x89, 0xEF, 0x7D, 0x00, 0x20, 0xF7, 0xBE, 0xC6, 0x38, 0xDE, 0xFB, 0x04, - 0xFF, 0x83, 0x9C, 0xF3, 0x5A, 0xCB, 0x10, 0xFF, 0x83, 0xCE, 0x79, 0x10, 0x82, 0x02, 0xFF, 0x81, - 0xEF, 0x7D, 0x02, 0x00, 0x85, 0xEF, 0x5D, 0xF7, 0xBE, 0xF7, 0xBE, 0x06, 0xFF, 0x83, 0xC6, 0x18, - 0x63, 0x2C, 0x06, 0xFF, 0x85, 0xF7, 0x9E, 0x31, 0x86, 0xC6, 0x18, 0x08, 0xFF, 0x83, 0x6B, 0x4D, - 0x6B, 0x6D, 0x04, 0xFF, 0x87, 0xF7, 0xBE, 0xEF, 0x7D, 0xC6, 0x38, 0x10, 0xA2, 0x02, 0xFF, 0x85, - 0xAD, 0x55, 0x31, 0xA6, 0xFF, 0xDF, 0x06, 0xFF, 0x83, 0x84, 0x10, 0x7B, 0xCF, 0x02, 0xFF, 0x8B, - 0xE7, 0x1C, 0xE7, 0x1C, 0xDE, 0xFB, 0xEF, 0x5D, 0x39, 0xE7, 0xCE, 0x79, 0x06, 0xFF, 0x83, 0x73, - 0x8E, 0x94, 0x92, 0x04, 0xFF, 0x83, 0x63, 0x0C, 0xA5, 0x14, 0x04, 0xFF, 0x83, 0x8C, 0x71, 0x7B, - 0xEF, 0x04, 0xFF, 0x83, 0x9C, 0xD3, 0x5A, 0xCB, 0x42, 0xFF, 0x85, 0xEF, 0x7D, 0x18, 0xE3, 0xD6, - 0xBA, 0x02, 0xFF, 0x83, 0x84, 0x30, 0x6B, 0x6D, 0x02, 0xFF, 0x83, 0xF7, 0xBE, 0xDE, 0xDB, 0x02, - 0xFF, 0x85, 0xDE, 0xFB, 0x31, 0x86, 0xF7, 0x9E, 0x02, 0xFF, 0x83, 0xB5, 0xB6, 0x42, 0x08, 0x02, - 0xFF, 0x83, 0x9C, 0xF3, 0x6B, 0x6D, 0x02, 0xFF, 0x85, 0xF7, 0xBE, 0x52, 0xAA, 0x9C, 0xF3, 0x10, - 0xFF, 0x83, 0xCE, 0x79, 0x10, 0x82, 0x02, 0xFF, 0x81, 0xEF, 0x7D, 0x02, 0x00, 0x81, 0xF7, 0x9E, - 0x0A, 0xFF, 0x87, 0xE7, 0x3C, 0x10, 0x82, 0xB5, 0x96, 0xFF, 0xDF, 0x02, 0xFF, 0x85, 0xD6, 0x9A, - 0x10, 0x82, 0xE7, 0x1C, 0x08, 0xFF, 0x87, 0xD6, 0x9A, 0x31, 0x86, 0x9C, 0xF3, 0xF7, 0x9E, 0x02, - 0xFF, 0x85, 0xE7, 0x3C, 0x73, 0xAE, 0x18, 0xE3, 0x02, 0xFF, 0x87, 0xEF, 0x7D, 0x39, 0xE7, 0x8C, - 0x71, 0xF7, 0xBE, 0x02, 0xFF, 0x85, 0xC6, 0x38, 0x10, 0xA2, 0xAD, 0x75, 0x02, 0xFF, 0x83, 0x6B, - 0x4D, 0xC6, 0x38, 0x02, 0xFF, 0x85, 0xD6, 0x9A, 0x31, 0xA6, 0xF7, 0xBE, 0x06, 0xFF, 0x83, 0x73, - 0x8E, 0x94, 0x92, 0x04, 0xFF, 0x8B, 0xAD, 0x55, 0x4A, 0x69, 0xF7, 0x9E, 0xEF, 0x7D, 0x42, 0x08, - 0xBD, 0xF7, 0x04, 0xFF, 0x83, 0x63, 0x2C, 0x94, 0x92, 0x44, 0xFF, 0x89, 0x94, 0x92, 0x31, 0xA6, - 0x52, 0xAA, 0x52, 0x8A, 0xDE, 0xFB, 0x02, 0xFF, 0x83, 0xD6, 0x9A, 0x31, 0xA6, 0x03, 0xFF, 0x8A, - 0xDF, 0x8C, 0x51, 0x63, 0x2C, 0x63, 0x0C, 0x63, 0x0C, 0xBD, 0xD7, 0x02, 0xFF, 0x8B, 0xE7, 0x1C, - 0x5A, 0xEB, 0x5A, 0xEB, 0x42, 0x28, 0x5A, 0xEB, 0xEF, 0x5D, 0x10, 0xFF, 0x83, 0xCE, 0x79, 0x10, - 0x82, 0x02, 0xFF, 0x81, 0xEF, 0x7D, 0x02, 0x00, 0x81, 0xF7, 0x9E, 0x0C, 0xFF, 0x8D, 0xAD, 0x55, - 0x42, 0x28, 0x39, 0xE7, 0x42, 0x28, 0x42, 0x28, 0x9C, 0xF3, 0xFF, 0xDF, 0x09, 0xFF, 0x8E, 0xDF, - 0xBD, 0xF7, 0x5A, 0xEB, 0x42, 0x08, 0x42, 0x28, 0x39, 0xE7, 0x63, 0x2C, 0xC6, 0x38, 0x04, 0xFF, - 0x8D, 0xCE, 0x59, 0x5A, 0xCB, 0x4A, 0x49, 0x4A, 0x49, 0x5A, 0xEB, 0x8C, 0x71, 0xF7, 0x9E, 0x02, - 0xFF, 0x89, 0xB5, 0x96, 0x52, 0x8A, 0x63, 0x2C, 0x5A, 0xCB, 0xBD, 0xD7, 0x08, 0xFF, 0x83, 0x73, - 0x8E, 0x94, 0x92, 0x04, 0xFF, 0x8B, 0xF7, 0x9E, 0x5A, 0xEB, 0x42, 0x28, 0x4A, 0x49, 0x73, 0xAE, - 0xF7, 0xBE, 0x04, 0xFF, 0x83, 0x39, 0xC7, 0xBD, 0xD7, 0x44, 0xFF, 0x87, 0xF7, 0x9E, 0xD6, 0x9A, - 0xCE, 0x79, 0xDE, 0xFB, 0x04, 0xFF, 0x83, 0xF7, 0xBE, 0xD6, 0xBA, 0x04, 0xFF, 0x89, 0xEF, 0x7D, - 0xDE, 0xFB, 0xD6, 0x9A, 0xDE, 0xFB, 0xF7, 0xBE, 0x04, 0xFF, 0x87, 0xE7, 0x1C, 0xD6, 0x9A, 0xCE, - 0x79, 0xE7, 0x1C, 0x12, 0xFF, 0x83, 0xF7, 0xBE, 0xD6, 0xBA, 0x04, 0xFF, 0x81, 0xD6, 0x9A, 0x0E, - 0xFF, 0x8B, 0xF7, 0xBE, 0xDE, 0xDB, 0xCE, 0x79, 0xC6, 0x38, 0xDE, 0xDB, 0xF7, 0x9E, 0x0D, 0xFF, - 0x8C, 0xDF, 0xE7, 0x1C, 0xD6, 0xBA, 0xC6, 0x38, 0xD6, 0xBA, 0xE7, 0x3C, 0xFF, 0xDF, 0x05, 0xFF, - 0x8A, 0xDF, 0xE7, 0x1C, 0xD6, 0xBA, 0xCE, 0x59, 0xDE, 0xFB, 0xEF, 0x7D, 0x04, 0xFF, 0x89, 0xF7, - 0xBE, 0xDE, 0xDB, 0xD6, 0x9A, 0xDE, 0xFB, 0xF7, 0xBE, 0x08, 0xFF, 0x83, 0xE7, 0x3C, 0xEF, 0x5D, - 0x06, 0xFF, 0x87, 0xE7, 0x1C, 0xCE, 0x79, 0xD6, 0x9A, 0xEF, 0x5D, 0x06, 0xFF, 0x83, 0xDE, 0xDB, - 0xF7, 0x9E, 0x7F, 0xFF, 0x38, 0xFF, 0x80, 0xDF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, - 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, - 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x70, 0xFF, 0xA6, 0xDF, 0xFF, 0x9E, - 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, - 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x9E, - 0xFF, 0xBE, 0xFF, 0xDF, 0x7F, 0xFF, 0x56, 0xFF, 0xAE, 0x7E, 0xF5, 0xD9, 0xEC, 0x13, 0xE3, 0x51, - 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, - 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, 0xE3, 0x51, - 0xE3, 0x92, 0xEC, 0xB5, 0xF6, 0x7B, 0xFF, 0xBF, 0x7F, 0xFF, 0x50, 0xFF, 0xB0, 0x9E, 0xF5, 0xD8, - 0xE3, 0x10, 0xD9, 0x8B, 0xD9, 0x4B, 0xD9, 0x4B, 0xD9, 0x4A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x0A, - 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x4A, 0xD1, 0x4A, 0xD1, 0x2A, 0xD1, 0x0A, 0xD1, 0x0A, 0xD1, 0x2A, - 0xD1, 0x2A, 0xD9, 0x4B, 0xD9, 0x4B, 0xD9, 0x4B, 0xD9, 0xED, 0xE3, 0xF3, 0xF6, 0xBB, 0x7F, 0xFF, - 0x50, 0xFF, 0xB2, 0x1D, 0xEC, 0x54, 0xD9, 0xCC, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD9, 0x4B, - 0xDA, 0x0D, 0xE3, 0x30, 0xE3, 0x92, 0xE3, 0x51, 0xDA, 0x4E, 0xD9, 0x6B, 0xD9, 0x8C, 0xE2, 0xAF, - 0xE3, 0x71, 0xE3, 0x92, 0xE2, 0xCF, 0xD9, 0xCC, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, - 0xDA, 0x6E, 0xF5, 0x78, 0xFF, 0xBE, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xF3, 0xD9, - 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD9, 0xCC, 0xE3, 0x92, 0xED, 0x16, 0xED, 0x37, 0xEC, 0xF6, 0xED, - 0x16, 0xED, 0x16, 0xEC, 0x95, 0xEC, 0xB5, 0xED, 0x37, 0xEC, 0xF6, 0xEC, 0xF6, 0xED, 0x37, 0xEC, - 0xB5, 0xE2, 0xF0, 0xD9, 0x6B, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xED, 0x16, 0xFF, 0x7E, 0x7F, - 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x6B, 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x4E, - 0xEC, 0x95, 0xEC, 0x95, 0xE3, 0x31, 0xE2, 0xF0, 0xE2, 0xF0, 0xE3, 0xD2, 0xF5, 0x57, 0xEC, 0xF6, - 0xE3, 0x51, 0xE2, 0xF0, 0xE2, 0xF0, 0xE3, 0xB2, 0xEC, 0xF6, 0xE3, 0xF3, 0xD9, 0xAC, 0xD1, 0x0A, - 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, - 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x2D, 0xEC, 0x54, 0xEC, 0x13, 0xDA, 0x0D, 0xDA, - 0x0D, 0xE2, 0xCF, 0xE3, 0x51, 0xEC, 0x54, 0xEC, 0x13, 0xE3, 0x10, 0xE2, 0xAF, 0xD9, 0xCC, 0xDA, - 0x8F, 0xEC, 0x95, 0xE3, 0xB2, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, - 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, - 0xD9, 0xAC, 0xE3, 0xB2, 0xEC, 0x95, 0xE2, 0xAF, 0xD9, 0x6B, 0xDA, 0x4E, 0xEC, 0x54, 0xF6, 0x19, - 0xF5, 0x98, 0xE3, 0x92, 0xD9, 0xCC, 0xD9, 0x8C, 0xE3, 0x71, 0xEC, 0xB5, 0xE2, 0xF0, 0xD9, 0x2A, - 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, - 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD9, 0x4A, 0xDA, 0x4E, 0xEC, 0x54, 0xEC, - 0xD5, 0xE3, 0x92, 0xE3, 0xB2, 0xF5, 0xF9, 0xFF, 0x9E, 0xFF, 0x1D, 0xED, 0x16, 0xE3, 0x51, 0xE3, - 0xF3, 0xEC, 0xD6, 0xE3, 0xB2, 0xD9, 0xAC, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, - 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, - 0xD1, 0x2A, 0xD1, 0x2A, 0xD9, 0x8B, 0xE3, 0x71, 0xED, 0x57, 0xEC, 0xF6, 0xEC, 0xD6, 0xED, 0x57, - 0xEC, 0xB5, 0xEC, 0xD6, 0xED, 0x57, 0xEC, 0xD5, 0xED, 0x16, 0xEC, 0xF6, 0xDA, 0x8F, 0xD1, 0x2A, - 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, - 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD9, 0xED, 0xE3, - 0xD2, 0xEC, 0x74, 0xEC, 0x33, 0xEC, 0xF6, 0xEC, 0x54, 0xDA, 0x8F, 0xE3, 0x10, 0xEC, 0xD6, 0xEC, - 0xD5, 0xEC, 0x13, 0xEC, 0x74, 0xE3, 0x30, 0xD9, 0x6B, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, - 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, - 0xD1, 0x0A, 0xD1, 0x2A, 0xD9, 0x4B, 0xE2, 0xF0, 0xF5, 0x57, 0xF5, 0xD9, 0xED, 0x37, 0xED, 0x16, - 0xED, 0x16, 0xED, 0x57, 0xED, 0x57, 0xED, 0x16, 0xED, 0x16, 0xF5, 0x57, 0xF5, 0xD9, 0xEC, 0x95, - 0xDA, 0x0D, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, - 0x4D, 0xFF, 0xA0, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, - 0x54, 0xF6, 0x3A, 0xF6, 0x3A, 0xEC, 0x34, 0xDA, 0x6E, 0xE3, 0x71, 0xF5, 0x78, 0xEC, 0xF6, 0xE2, - 0xAF, 0xE2, 0xCF, 0xEC, 0x02, 0xF6, 0x90, 0x7B, 0xF5, 0xB8, 0xE3, 0x51, 0xD9, 0x8B, 0xD1, 0x2A, - 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, - 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD9, 0x4B, 0xE2, 0xCF, 0xEC, 0x74, 0xEC, 0xD5, 0xEC, 0x95, 0xE2, - 0xF0, 0xD1, 0x2A, 0xDA, 0x8E, 0xEC, 0xF6, 0xEC, 0x54, 0xD9, 0xAC, 0xD9, 0x8B, 0xE3, 0x92, 0xEC, - 0xD6, 0xEC, 0xB5, 0xE3, 0xF3, 0xDA, 0x2D, 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, - 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD9, 0x6B, - 0xE3, 0x10, 0xEC, 0x74, 0xEC, 0x74, 0xEC, 0xD5, 0xE3, 0xB2, 0xDA, 0x2E, 0xE3, 0xD3, 0xF6, 0x19, - 0xF5, 0x78, 0xE3, 0x10, 0xDA, 0x6E, 0xEC, 0x34, 0xEC, 0xD6, 0xEC, 0x54, 0xEC, 0x13, 0xDA, 0x6E, - 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0x8C, 0xFE, - 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD9, 0x4B, 0xE2, 0x8F, 0xEC, 0x02, 0xF6, 0xA4, 0x1A, - 0xF6, 0x9B, 0xF6, 0x7B, 0xF5, 0x98, 0xEC, 0xD6, 0xEC, 0x33, 0xEC, 0x54, 0xED, 0x37, 0xF5, 0xF9, - 0xF6, 0x9B, 0xF6, 0x9B, 0xF5, 0xB8, 0xEC, 0x13, 0xD9, 0xED, 0xD1, 0x0A, 0xD1, 0x2A, 0xDA, 0x0D, - 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0x8A, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, - 0x0A, 0xD1, 0x2A, 0xD9, 0x02, 0xEC, 0xA6, 0x34, 0xF5, 0xB8, 0xEC, 0xF6, 0xF5, 0x78, 0xF5, 0xF9, - 0xE3, 0xB2, 0xD9, 0xAC, 0xDA, 0x2D, 0xEC, 0xB5, 0xF6, 0x19, 0xED, 0x37, 0xED, 0x37, 0xF5, 0x78, - 0xE3, 0x51, 0xD9, 0x6B, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, - 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD9, 0x6B, 0xE3, - 0x10, 0xEC, 0x95, 0xE3, 0x71, 0xE3, 0x10, 0xEC, 0xB5, 0xEB, 0xF3, 0xDA, 0x0D, 0xE2, 0x8F, 0xEC, - 0x75, 0xEC, 0x34, 0xE2, 0xCF, 0xE3, 0xF3, 0xEC, 0x54, 0xDA, 0x4E, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, - 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, - 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xE4, 0x13, 0xEC, 0x54, 0xE3, 0x92, - 0xEC, 0xF6, 0xF5, 0xD9, 0xED, 0x37, 0xF5, 0x77, 0xF5, 0xD9, 0xEC, 0x54, 0xE3, 0xB2, 0xEC, 0x75, - 0xE3, 0x71, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, - 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, - 0x2A, 0xD9, 0x6B, 0xDA, 0x6E, 0xEC, 0x34, 0xF5, 0x98, 0xF6, 0x3A, 0xED, 0x57, 0xE3, 0xD2, 0xEC, - 0x33, 0xF5, 0xF9, 0xF6, 0x3A, 0xED, 0x16, 0xE3, 0x92, 0xD9, 0xED, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, - 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xEC, 0xF6, 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, - 0xE3, 0xD3, 0xD9, 0x8B, 0xD1, 0x0A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD9, 0x4B, 0xD9, 0xED, - 0xE3, 0x71, 0xEC, 0xF6, 0xED, 0x37, 0xEC, 0x74, 0xEC, 0x95, 0xED, 0x57, 0xEC, 0x95, 0xE2, 0xCF, - 0xD9, 0xAC, 0xD9, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x0D, 0xED, 0x16, - 0xFF, 0x7E, 0x7F, 0xFF, 0x4D, 0xFF, 0xB3, 0xFE, 0xFC, 0xEC, 0x13, 0xD9, 0x8C, 0xD1, 0x0A, 0xD1, - 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD9, 0x6B, 0xDA, 0x4E, 0xE3, 0x71, 0xEC, - 0x33, 0xE3, 0xF3, 0xE3, 0x10, 0xD9, 0xEC, 0xD1, 0x4B, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xD1, - 0x2A, 0xD1, 0x2A, 0xD1, 0x2A, 0xDA, 0x4E, 0xED, 0x37, 0xFF, 0x9E, 0x7F, 0xFF, 0x4E, 0xFF, 0xB2, - 0x5D, 0xED, 0x16, 0xDA, 0x4E, 0xD1, 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, - 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x8B, 0xD9, 0xCC, 0xD9, 0xAC, 0xD9, 0x6B, 0xD1, 0x2A, 0xD9, - 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x2A, 0xD9, 0x6B, 0xE3, 0x10, 0xF6, - 0x19, 0xFF, 0xDF, 0x7F, 0xFF, 0x4E, 0xFF, 0xB0, 0xDF, 0xFE, 0xDC, 0xEC, 0x95, 0xDA, 0x8F, 0xD9, - 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xEC, 0xD9, 0xEC, 0xD9, - 0xCC, 0xD9, 0xCC, 0xD9, 0xEC, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, 0xED, 0xD9, - 0xED, 0xDA, 0x0D, 0xE3, 0x30, 0xF5, 0x57, 0xFF, 0x5D, 0x7F, 0xFF, 0x52, 0xFF, 0xAC, 0xDF, 0xFF, - 0x3D, 0xF6, 0x7A, 0xF5, 0xF9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, - 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF5, - 0xD9, 0xF5, 0xD9, 0xF5, 0xD9, 0xF6, 0x19, 0xF6, 0xBB, 0xFF, 0x7E, 0x7F, 0xFF, 0x5A, 0xFF, 0xA2, - 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, - 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, - 0xDF, 0xFF, 0xDF, 0x7F, 0xFF, 0x7F, 0xFF, 0x25, 0xFF, 0xC0, 0xBF, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, - 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, - 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, - 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, - 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x7E, 0xFF, 0x9E, 0xFF, 0xDF, 0x7F, 0xFF, 0x3E, 0xFF, 0xC4, - 0x5D, 0xF6, 0x5A, 0xF5, 0x78, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, - 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, - 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, - 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xF5, 0x57, 0xED, 0x57, 0xF5, - 0x98, 0xF6, 0x7B, 0xFF, 0x9E, 0x7F, 0xFF, 0x3A, 0xFF, 0xC8, 0x9E, 0xF5, 0xF9, 0xEC, 0x74, 0xEC, - 0x95, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, - 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, - 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, - 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0xF6, 0xEC, 0x74, 0xEC, 0x95, 0xF6, - 0x5A, 0xFF, 0xBF, 0x0E, 0xFF, 0x8B, 0xF7, 0xBE, 0xF7, 0x9E, 0xF7, 0x9E, 0xF7, 0x9E, 0xF7, 0xBE, - 0xFF, 0xDF, 0x32, 0xFF, 0x87, 0xF7, 0x9E, 0xE7, 0x3C, 0xE7, 0x3C, 0xF7, 0xBE, 0x45, 0xFF, 0x8A, - 0xDF, 0xF7, 0xBE, 0xF7, 0x9E, 0xF7, 0x9E, 0xF7, 0xBE, 0xFF, 0xDE, 0x06, 0xFF, 0x85, 0xF7, 0x9E, - 0xEF, 0x7D, 0xF7, 0xBE, 0x07, 0xFF, 0x83, 0x1D, 0xED, 0x37, 0xEC, 0x02, 0xF6, 0xC2, 0x7B, 0xFF, - 0x1D, 0xF6, 0xFC, 0xF6, 0xDC, 0xEE, 0xDB, 0xEE, 0xDB, 0xEE, 0xDB, 0xF6, 0xFC, 0xF7, 0x1C, 0xFF, - 0x3D, 0xFF, 0x1D, 0xF6, 0xFC, 0xF6, 0xFC, 0xF7, 0x1C, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, - 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, - 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x3D, 0xFF, 0x1D, 0xF6, 0x3A, 0xEC, 0xB5, 0xF5, 0x77, 0xFF, - 0x7E, 0x0C, 0xFF, 0x91, 0xEF, 0x7D, 0xCE, 0x59, 0xAD, 0x55, 0xAD, 0x55, 0xAD, 0x55, 0xB5, 0x96, - 0xC6, 0x18, 0xE7, 0x1C, 0xF7, 0xBE, 0x2C, 0xFF, 0x89, 0xF7, 0xBE, 0xCE, 0x59, 0x8C, 0x51, 0x94, - 0x92, 0xDE, 0xDB, 0x42, 0xFF, 0x9B, 0xF7, 0x9E, 0xD6, 0x9A, 0xB5, 0x96, 0xAD, 0x55, 0xAD, 0x55, - 0xAD, 0x75, 0xBD, 0xF7, 0xDE, 0xDB, 0xF7, 0x9E, 0xEF, 0x7D, 0xBD, 0xD7, 0x9C, 0xD3, 0xC6, 0x38, - 0xF7, 0xBE, 0x04, 0xFF, 0xA1, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xFF, 0xDF, 0xDE, - 0xFB, 0xBD, 0xF7, 0xB5, 0x96, 0xB5, 0xB6, 0xB5, 0xB6, 0xC6, 0x18, 0xDE, 0xFB, 0xF7, 0xBE, 0xF7, - 0x9E, 0xD6, 0xBA, 0xCE, 0x59, 0xEF, 0x5D, 0x21, 0xFF, 0x86, 0x1D, 0xED, 0x16, 0xED, 0x37, 0xFF, - 0x5D, 0x0B, 0xFF, 0x94, 0xDF, 0xDE, 0xDB, 0x84, 0x10, 0x42, 0x08, 0x52, 0xAA, 0x63, 0x2C, 0x5A, - 0xEB, 0x5A, 0xCB, 0x7B, 0xCE, 0xC6, 0x18, 0xF7, 0xBE, 0x2A, 0xFF, 0x89, 0xF7, 0x9E, 0xB5, 0x96, - 0x52, 0xAA, 0x63, 0x2C, 0xCE, 0x79, 0x42, 0xFF, 0x9B, 0xE7, 0x1C, 0x94, 0x92, 0x4A, 0x69, 0x52, - 0x89, 0x63, 0x0C, 0x63, 0x0C, 0x5A, 0xEB, 0x6B, 0x6D, 0xAD, 0x75, 0xD6, 0x9A, 0xA5, 0x34, 0x84, - 0x10, 0xB5, 0xB6, 0xF7, 0x9E, 0x04, 0xFF, 0xA1, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, - 0xEF, 0x7D, 0xB5, 0x96, 0x73, 0xAE, 0x84, 0x10, 0x9C, 0xF3, 0x9C, 0xF3, 0x8C, 0x71, 0x8C, 0x51, - 0xB5, 0xB6, 0xDE, 0xFB, 0xCE, 0x59, 0xBD, 0xD7, 0xE7, 0x1C, 0x21, 0xFF, 0x86, 0x3D, 0xED, 0x17, - 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, 0xA0, 0xDF, 0xD6, 0x9A, 0x6B, 0x6D, 0x31, 0x85, 0x73, 0x8E, - 0xAD, 0x55, 0x94, 0xB2, 0x5A, 0xEB, 0x39, 0xE7, 0x84, 0x30, 0xE7, 0x3C, 0xF7, 0xBE, 0xDE, 0xFB, - 0xC6, 0x38, 0xC6, 0x38, 0xD6, 0xBA, 0xEF, 0x7D, 0x03, 0xFF, 0xAC, 0xDF, 0xE7, 0x1C, 0xCE, 0x59, - 0xC6, 0x18, 0xD6, 0x9A, 0xEF, 0x5D, 0xF7, 0xBE, 0xEF, 0x7D, 0xDE, 0xDB, 0xD6, 0xBA, 0xD6, 0x9A, - 0xCE, 0x59, 0xD6, 0x9A, 0xEF, 0x5D, 0xEF, 0x7D, 0xB5, 0x95, 0x52, 0x8A, 0x52, 0xAA, 0xAD, 0x55, - 0xCE, 0x59, 0xCE, 0x79, 0xEF, 0x5D, 0xFF, 0xDF, 0x02, 0xFF, 0xB3, 0xF7, 0xBE, 0xE7, 0x1C, 0xCE, - 0x59, 0xC6, 0x38, 0xD6, 0xBA, 0xF7, 0x9E, 0xFF, 0xDF, 0xEF, 0x5D, 0xD6, 0xBA, 0xD6, 0xBA, 0xD6, - 0xBA, 0xD6, 0xBA, 0xDE, 0xFB, 0xDE, 0xDB, 0xD6, 0xBA, 0xD6, 0xBA, 0xD6, 0x9A, 0xDE, 0xDB, 0xD6, - 0xBA, 0xDE, 0xDB, 0xF7, 0x9E, 0xFF, 0xDF, 0xE7, 0x3C, 0xD6, 0xBA, 0xDE, 0xFB, 0xF7, 0xBE, 0x04, - 0xFF, 0x9B, 0xDE, 0xFB, 0x7B, 0xEF, 0x39, 0xC7, 0x63, 0x0C, 0x9C, 0xF3, 0xA5, 0x13, 0x73, 0xAE, - 0x42, 0x28, 0x63, 0x2C, 0xBD, 0xD7, 0xBD, 0xD7, 0xA5, 0x14, 0xCE, 0x59, 0xF7, 0xBE, 0x04, 0xFF, - 0xA1, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xEF, 0x5D, 0xA5, 0x34, 0x73, 0x8E, 0xAD, - 0x54, 0xE7, 0x1C, 0xDE, 0xFB, 0xBD, 0xF7, 0x84, 0x10, 0x84, 0x10, 0xC6, 0x38, 0xD6, 0xBA, 0xCE, - 0x79, 0xEF, 0x5D, 0x02, 0xFF, 0x89, 0xEF, 0x7D, 0xD6, 0x9A, 0xC6, 0x38, 0xCE, 0x79, 0xEF, 0x5D, - 0x05, 0xFF, 0x8A, 0xDF, 0xE7, 0x3C, 0xCE, 0x79, 0xC6, 0x38, 0xD6, 0xBA, 0xF7, 0x9E, 0x05, 0xFF, - 0x86, 0x3D, 0xED, 0x17, 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, 0xFF, 0xDF, 0xD6, 0x9A, 0x6B, 0x6D, - 0x39, 0xE7, 0x9C, 0xF3, 0xEF, 0x7D, 0xDE, 0xFB, 0x8C, 0x71, 0x39, 0xC7, 0x6B, 0x6D, 0xCE, 0x79, - 0xC6, 0x18, 0x84, 0x10, 0x63, 0x2C, 0x63, 0x2C, 0x73, 0xAE, 0xAD, 0x75, 0xE7, 0x3C, 0xD6, 0xBA, - 0x94, 0x92, 0x6B, 0x6D, 0x6B, 0x4C, 0x73, 0x8E, 0x9C, 0xF3, 0xD6, 0x9A, 0xC6, 0x18, 0x84, 0x30, - 0x73, 0x8E, 0x73, 0xAE, 0x63, 0x2C, 0x6B, 0x6D, 0xA5, 0x34, 0xD6, 0xBA, 0xAD, 0x75, 0x52, 0x89, - 0x39, 0xE7, 0x63, 0x0C, 0x63, 0x2C, 0x6B, 0x6D, 0xA5, 0x13, 0xE7, 0x1C, 0xF7, 0x9E, 0xCE, 0x59, - 0x8C, 0x51, 0x63, 0x2C, 0x63, 0x0C, 0x7B, 0xCF, 0xB5, 0xB6, 0xDE, 0xFB, 0xBD, 0xF7, 0x84, 0x0F, - 0x73, 0x8E, 0x73, 0x8E, 0x84, 0x10, 0x9C, 0xF3, 0x84, 0x30, 0x73, 0x8E, 0x73, 0x8E, 0x7B, 0xEF, - 0x94, 0xB2, 0x84, 0x30, 0x8C, 0x51, 0xD6, 0x9A, 0xEF, 0x5D, 0xAD, 0x86, 0x55, 0x7B, 0xEF, 0xAD, - 0x55, 0xEF, 0x5D, 0x04, 0xFF, 0x9B, 0xDE, 0xFB, 0x7B, 0xEF, 0x42, 0x08, 0x84, 0x30, 0xDE, 0xDB, - 0xEF, 0x5D, 0xB5, 0xB6, 0x52, 0xAA, 0x4A, 0x69, 0x9C, 0xF3, 0x9C, 0xF3, 0x7B, 0xEF, 0xB5, 0x96, - 0xF7, 0x9E, 0x04, 0xFF, 0x8F, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xEF, 0x5D, 0xA5, - 0x34, 0x7B, 0xCF, 0xBD, 0xF7, 0x04, 0xFF, 0xAB, 0xE7, 0x3C, 0x9C, 0xD3, 0x73, 0xAE, 0xB5, 0x96, - 0xBD, 0xD7, 0xAD, 0x55, 0xDE, 0xDB, 0xEF, 0x7D, 0xBD, 0xD7, 0x8C, 0x51, 0x84, 0x30, 0x84, 0x30, - 0xA5, 0x34, 0xE7, 0x1B, 0xF7, 0xBE, 0xD6, 0xBA, 0x9C, 0xF3, 0x84, 0x30, 0x84, 0x30, 0x8C, 0x71, - 0xBD, 0xD6, 0xEF, 0x7D, 0x03, 0xFF, 0x86, 0x3D, 0xED, 0x17, 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, - 0xFF, 0xDF, 0xD6, 0x9A, 0x6B, 0x6D, 0x39, 0xC6, 0x8C, 0x71, 0xD6, 0xBA, 0xC6, 0x18, 0x7B, 0xCF, - 0x39, 0xC7, 0x7B, 0xCF, 0xC6, 0x38, 0x94, 0xB2, 0x5A, 0xEB, 0x6B, 0x6D, 0x73, 0xAE, 0x4A, 0x69, - 0x63, 0x2C, 0xBD, 0xD7, 0xAD, 0x55, 0x52, 0x8A, 0x63, 0x0C, 0x7B, 0xCF, 0x63, 0x2C, 0x6B, 0x6D, - 0xAD, 0x75, 0xA5, 0x34, 0x52, 0x8A, 0x42, 0x07, 0x6B, 0x4D, 0x6B, 0x4D, 0x4A, 0x48, 0x5A, 0xEB, - 0xAD, 0x75, 0xAD, 0x55, 0x4A, 0x69, 0x31, 0xA6, 0x63, 0x0C, 0x6B, 0x6D, 0x4A, 0x49, 0x5A, 0xCB, - 0xAD, 0x75, 0xCE, 0x59, 0x84, 0x30, 0x52, 0x89, 0x63, 0x2C, 0x6B, 0x6D, 0x52, 0xAA, 0x6B, 0x6D, - 0xB5, 0x96, 0x9C, 0xF3, 0x4A, 0x49, 0x31, 0xA6, 0x52, 0xAA, 0x7B, 0xEF, 0x8C, 0x51, 0x52, 0x8A, - 0x31, 0xA6, 0x52, 0x89, 0x7B, 0xCF, 0x94, 0xB2, 0x6B, 0x4D, 0x52, 0x8A, 0xAD, 0x55, 0xCE, 0x59, - 0x7B, 0x86, 0xCE, 0x4A, 0x69, 0x9C, 0xF3, 0xEF, 0x7D, 0x04, 0xFF, 0x9B, 0xDE, 0xFB, 0x7B, 0xEF, - 0x42, 0x07, 0x7B, 0xEF, 0xCE, 0x79, 0xDE, 0xDB, 0xA5, 0x34, 0x4A, 0x69, 0x4A, 0x69, 0x94, 0xB2, - 0x7B, 0xEF, 0x52, 0x89, 0x94, 0xB2, 0xEF, 0x5D, 0x04, 0xFF, 0xC9, 0xFE, 0xFC, 0xED, 0x16, 0xF5, - 0x98, 0xFF, 0x7E, 0xEF, 0x5D, 0xA5, 0x34, 0x73, 0xAE, 0xB5, 0xB6, 0xF7, 0x9E, 0xEF, 0x7D, 0xCE, - 0x79, 0x8C, 0x50, 0x7B, 0xCE, 0xB5, 0x95, 0xA5, 0x13, 0x84, 0x30, 0xC6, 0x38, 0xCE, 0x59, 0x8C, - 0x71, 0x94, 0x92, 0xAD, 0x75, 0x94, 0xB2, 0x7B, 0xCF, 0xB5, 0x96, 0xD6, 0xBA, 0x9C, 0xD3, 0x7B, - 0xCF, 0x9C, 0xF3, 0xAD, 0x75, 0x8C, 0x50, 0x7B, 0xEF, 0xC6, 0x18, 0xF7, 0xBE, 0xFF, 0x3D, 0xED, - 0x17, 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, 0xFF, 0xDF, 0xD6, 0x9A, 0x6B, 0x6D, 0x29, 0x45, 0x4A, - 0x69, 0x73, 0x8D, 0x63, 0x2C, 0x4A, 0x48, 0x5A, 0xCB, 0xAD, 0x75, 0xDE, 0xFB, 0xB5, 0x96, 0x8C, - 0x71, 0x9C, 0xD3, 0x94, 0x92, 0x52, 0x8A, 0x42, 0x28, 0x9C, 0xF3, 0x9C, 0xD3, 0x42, 0x08, 0x6B, - 0x4C, 0x9C, 0xF3, 0x9C, 0xD3, 0x9C, 0xF3, 0xBD, 0xF7, 0xA5, 0x14, 0x4A, 0x69, 0x52, 0xAA, 0xAD, - 0x75, 0xBD, 0xF7, 0x6B, 0x6D, 0x4A, 0x48, 0x8C, 0x50, 0x9C, 0xF3, 0x52, 0x8A, 0x4A, 0x69, 0xAD, - 0x54, 0xC6, 0x18, 0x73, 0xAE, 0x42, 0x28, 0x7B, 0xEF, 0x9C, 0xF3, 0x52, 0xAA, 0x4A, 0x49, 0x8C, - 0x51, 0x9C, 0xD3, 0x5A, 0xEB, 0x4A, 0x49, 0x8C, 0x71, 0x94, 0x92, 0x42, 0x28, 0x4A, 0x69, 0x9C, - 0xD3, 0xC6, 0x38, 0xA5, 0x14, 0x4A, 0x69, 0x42, 0x28, 0x8C, 0x71, 0xCE, 0x59, 0xCE, 0x79, 0x84, - 0x30, 0x4A, 0x49, 0x84, 0x10, 0xA5, 0x34, 0x5A, 0x86, 0xEB, 0x5A, 0xCA, 0xBD, 0xD7, 0xFF, 0xDF, - 0x04, 0xFF, 0x9B, 0xDE, 0xFB, 0x7B, 0xEF, 0x31, 0xA6, 0x4A, 0x69, 0x73, 0xAE, 0x7B, 0xCF, 0x5A, - 0xCB, 0x42, 0x08, 0x73, 0xAE, 0xB5, 0x96, 0x7B, 0xEF, 0x4A, 0x48, 0x94, 0x92, 0xEF, 0x5D, 0x04, - 0xFF, 0xC9, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xEF, 0x5D, 0xA5, 0x14, 0x63, 0x0C, - 0x7B, 0xEF, 0xA5, 0x34, 0xA5, 0x14, 0x8C, 0x51, 0x73, 0xAE, 0x9C, 0xD3, 0xCE, 0x58, 0x9C, 0xD3, - 0x7B, 0xEF, 0xB5, 0xB6, 0xAD, 0x55, 0x8C, 0x51, 0xCE, 0x59, 0xEF, 0x7D, 0xD6, 0xBA, 0xAD, 0x55, - 0xBD, 0xD7, 0xB5, 0xB6, 0x73, 0xAE, 0x94, 0xB2, 0xDE, 0xFB, 0xEF, 0x7D, 0xBD, 0xF7, 0x73, 0xAE, - 0x9C, 0xD2, 0xEF, 0x5D, 0xFF, 0x3D, 0xED, 0x17, 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, 0xFF, 0xDF, - 0xD6, 0x9A, 0x6B, 0x6D, 0x21, 0x24, 0x42, 0x28, 0x52, 0xAA, 0x39, 0xC7, 0x39, 0xC7, 0x8C, 0x51, - 0xE7, 0x1C, 0xEF, 0x5D, 0xB5, 0x96, 0x7B, 0xEF, 0x73, 0xAE, 0x73, 0x8D, 0x42, 0x28, 0x42, 0x07, - 0x9C, 0xF3, 0xBD, 0xD7, 0x63, 0x2C, 0x52, 0x8A, 0x63, 0x2C, 0x7B, 0xEF, 0xA5, 0x34, 0xCE, 0x79, - 0xA5, 0x34, 0x52, 0x8A, 0x63, 0x2C, 0xCE, 0x79, 0xE7, 0x1C, 0x8C, 0x71, 0x4A, 0x49, 0x73, 0xAE, - 0x94, 0xB2, 0x52, 0xAA, 0x5A, 0xEB, 0xCE, 0x58, 0xEF, 0x5C, 0x9C, 0xD2, 0x4A, 0x69, 0x63, 0x2C, - 0x7B, 0xEF, 0x42, 0x28, 0x39, 0xC7, 0x63, 0x2C, 0x73, 0x8D, 0x4A, 0x69, 0x4A, 0x49, 0x84, 0x30, - 0x8C, 0x51, 0x4A, 0x69, 0x6B, 0x4C, 0xCE, 0x59, 0xEF, 0x7D, 0xAD, 0x75, 0x52, 0x8A, 0x5A, 0xEB, - 0xC6, 0x18, 0xF7, 0xBE, 0xEF, 0x7D, 0xAD, 0x75, 0x52, 0xAA, 0x5A, 0xCB, 0x73, 0x8D, 0x52, 0x84, - 0x89, 0x73, 0xAE, 0xD6, 0xBA, 0x06, 0xFF, 0x9B, 0xDE, 0xFB, 0x7B, 0xEF, 0x31, 0x86, 0x39, 0xC6, - 0x52, 0xAA, 0x5A, 0xCB, 0x63, 0x0C, 0x84, 0x0F, 0xBD, 0xF7, 0xCE, 0x79, 0x7B, 0xEF, 0x4A, 0x48, - 0x94, 0x92, 0xEF, 0x5D, 0x04, 0xFF, 0xA7, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xEF, - 0x7D, 0xA5, 0x14, 0x5A, 0xEB, 0x6B, 0x4D, 0x8C, 0x71, 0x8C, 0x71, 0x94, 0x92, 0xAD, 0x55, 0xDE, - 0xDA, 0xDE, 0xFB, 0x9C, 0xD3, 0x7B, 0xEF, 0xAD, 0x75, 0x9C, 0xD3, 0x94, 0x92, 0xE7, 0x1C, 0x03, - 0xFF, 0x8C, 0xDF, 0xEF, 0x5D, 0xE7, 0x3C, 0xAD, 0x75, 0x6B, 0x6D, 0xB5, 0x96, 0xF7, 0x9E, 0x02, - 0xFF, 0x8F, 0xDE, 0xDB, 0x84, 0x30, 0x84, 0x30, 0xE7, 0x1C, 0xFF, 0x3D, 0xED, 0x17, 0xED, 0x37, - 0xFF, 0x5D, 0x0B, 0xFF, 0xF2, 0xDF, 0xD6, 0x9A, 0x6B, 0x6D, 0x31, 0xA6, 0x7B, 0xCF, 0xA5, 0x34, - 0x6B, 0x4C, 0x39, 0xC7, 0x84, 0x10, 0xDE, 0xFB, 0xCE, 0x79, 0x73, 0xAE, 0x4A, 0x69, 0x7B, 0xEF, - 0x8C, 0x71, 0x52, 0xAA, 0x42, 0x07, 0x9C, 0xF3, 0xD6, 0xBA, 0xA5, 0x14, 0x84, 0x30, 0x6B, 0x6D, - 0x52, 0x8A, 0x63, 0x2C, 0xAD, 0x54, 0xA5, 0x14, 0x52, 0x8A, 0x6B, 0x4C, 0xD6, 0x99, 0xE7, 0x3C, - 0x8C, 0x71, 0x4A, 0x49, 0x73, 0xAE, 0x94, 0xB2, 0x52, 0xAA, 0x63, 0x0B, 0xCE, 0x59, 0xEF, 0x5D, - 0x9C, 0xD2, 0x4A, 0x69, 0x63, 0x2C, 0x7B, 0xEF, 0x42, 0x28, 0x39, 0xE7, 0x73, 0xAE, 0x8C, 0x51, - 0x84, 0x10, 0x8C, 0x51, 0xAD, 0x55, 0x94, 0x92, 0x4A, 0x69, 0x6B, 0x6D, 0xD6, 0xBA, 0xF7, 0x9E, - 0xB5, 0x96, 0x52, 0x8A, 0x63, 0x0C, 0xCE, 0x59, 0x03, 0xFF, 0x8E, 0xDF, 0xCE, 0x79, 0x6B, 0x6D, - 0x39, 0xE7, 0x39, 0xE7, 0x4A, 0x69, 0x9C, 0xF3, 0xEF, 0x7D, 0x06, 0xFF, 0x9B, 0xDE, 0xFB, 0x7B, - 0xEF, 0x39, 0xC7, 0x63, 0x0C, 0x9C, 0xF3, 0xB5, 0x96, 0xC6, 0x18, 0xDE, 0xDB, 0xF7, 0x9E, 0xDE, - 0xFB, 0x7B, 0xEF, 0x4A, 0x48, 0x94, 0x92, 0xEF, 0x5D, 0x04, 0xFF, 0xA7, 0xFE, 0xFC, 0xED, 0x16, - 0xF5, 0x98, 0xFF, 0x7E, 0xEF, 0x7D, 0xA5, 0x34, 0x6B, 0x6D, 0x9C, 0xF3, 0xD6, 0xBA, 0xDE, 0xDB, - 0xDE, 0xFB, 0xEF, 0x7D, 0xFF, 0xDF, 0xE7, 0x3C, 0x9C, 0xD3, 0x7B, 0xEF, 0xAD, 0x75, 0x9C, 0xD2, - 0x94, 0x92, 0xE7, 0x3C, 0x03, 0xFF, 0x8C, 0xDF, 0xEF, 0x7D, 0xEF, 0x5D, 0xAD, 0x75, 0x6B, 0x6D, - 0xB5, 0xB6, 0xF7, 0xBE, 0x02, 0xFF, 0x8F, 0xDE, 0xDB, 0x84, 0x30, 0x84, 0x30, 0xE7, 0x1C, 0xFF, - 0x3D, 0xED, 0x17, 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, 0xF2, 0xDF, 0xD6, 0x9A, 0x6B, 0x6D, 0x39, - 0xC7, 0x9C, 0xF3, 0xE7, 0x3C, 0xA5, 0x34, 0x4A, 0x49, 0x52, 0xAA, 0xB5, 0x96, 0xB5, 0xB6, 0x52, - 0x8A, 0x42, 0x28, 0x94, 0xB2, 0xA5, 0x14, 0x5A, 0xCB, 0x39, 0xE7, 0x94, 0xB2, 0xB5, 0xB6, 0x8C, - 0x71, 0xA5, 0x34, 0xA5, 0x14, 0x63, 0x0B, 0x42, 0x28, 0x8C, 0x51, 0x9C, 0xD3, 0x52, 0x89, 0x52, - 0x8A, 0xA5, 0x34, 0xB5, 0xB6, 0x6B, 0x4D, 0x42, 0x28, 0x8C, 0x51, 0x9C, 0xF3, 0x52, 0x89, 0x4A, - 0x49, 0xA5, 0x14, 0xBD, 0xD7, 0x73, 0x8E, 0x42, 0x28, 0x84, 0x0F, 0x9C, 0xF3, 0x52, 0xAA, 0x42, - 0x28, 0x8C, 0x50, 0xAD, 0x75, 0xA5, 0x34, 0xAD, 0x55, 0xC6, 0x18, 0x9C, 0xD3, 0x4A, 0x49, 0x6B, - 0x6D, 0xD6, 0xBA, 0xF7, 0x9E, 0xB5, 0x95, 0x52, 0x8A, 0x63, 0x0C, 0xCE, 0x59, 0x04, 0xFF, 0x8D, - 0xE7, 0x1C, 0x8C, 0x71, 0x39, 0xC6, 0x21, 0x24, 0x5A, 0xEB, 0xBD, 0xF7, 0xFF, 0xDF, 0x06, 0xFF, - 0x8D, 0xDE, 0xFB, 0x7B, 0xEF, 0x42, 0x08, 0x84, 0x10, 0xDE, 0xDB, 0xF7, 0x9E, 0xF7, 0xBE, 0x04, - 0xFF, 0x89, 0xDE, 0xFB, 0x7B, 0xEF, 0x42, 0x28, 0x94, 0x92, 0xEF, 0x5D, 0x04, 0xFF, 0x91, 0xFE, - 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xEF, 0x5D, 0xA5, 0x34, 0x73, 0xAE, 0xBD, 0xD7, 0xFF, - 0xDF, 0x08, 0xFF, 0xAF, 0xE7, 0x3C, 0x9C, 0xD3, 0x7B, 0xEF, 0xB5, 0xB6, 0xAD, 0x55, 0x8C, 0x51, - 0xCE, 0x79, 0xF7, 0xBE, 0xDE, 0xFB, 0xB5, 0xB6, 0xC6, 0x18, 0xBD, 0xD6, 0x73, 0xAE, 0x94, 0xB2, - 0xE7, 0x1C, 0xF7, 0x9E, 0xBD, 0xF7, 0x73, 0xAE, 0x94, 0xB2, 0xEF, 0x5D, 0xFF, 0x3D, 0xED, 0x17, - 0xED, 0x37, 0xFF, 0x5D, 0x0B, 0xFF, 0xF2, 0xDF, 0xD6, 0xBA, 0x73, 0xAE, 0x42, 0x28, 0xA5, 0x34, - 0xF7, 0xBE, 0xDE, 0xDB, 0x84, 0x10, 0x42, 0x28, 0x7B, 0xEF, 0xB5, 0x96, 0x7B, 0xCE, 0x39, 0xE7, - 0x52, 0x8A, 0x63, 0x0C, 0x4A, 0x48, 0x42, 0x28, 0x94, 0xB2, 0xB5, 0x96, 0x6B, 0x4D, 0x5A, 0xEB, - 0x5A, 0xEB, 0x4A, 0x69, 0x63, 0x2C, 0xAD, 0x55, 0xA5, 0x14, 0x4A, 0x69, 0x31, 0xA6, 0x52, 0xAA, - 0x52, 0xAA, 0x42, 0x28, 0x73, 0x8E, 0xBD, 0xF7, 0xAD, 0x75, 0x52, 0xAA, 0x42, 0x07, 0x5A, 0xEB, - 0x5A, 0xCA, 0x42, 0x28, 0x6B, 0x4C, 0xBD, 0xD7, 0xD6, 0xBA, 0x9C, 0xD3, 0x5A, 0xCB, 0x4A, 0x69, - 0x5A, 0xCB, 0x63, 0x0B, 0x8C, 0x51, 0xC6, 0x18, 0xA5, 0x13, 0x52, 0x8A, 0x73, 0xAE, 0xD6, 0xBA, - 0xF7, 0x9E, 0xB5, 0xB6, 0x5A, 0xCB, 0x63, 0x2C, 0xCE, 0x79, 0x04, 0xFF, 0x8B, 0xF7, 0xBE, 0xBD, - 0xD7, 0x52, 0x8A, 0x31, 0x86, 0x84, 0x10, 0xDE, 0xFB, 0x08, 0xFF, 0x89, 0xDE, 0xFB, 0x84, 0x10, - 0x4A, 0x49, 0x8C, 0x71, 0xE7, 0x3C, 0x08, 0xFF, 0x89, 0xE7, 0x1C, 0x84, 0x10, 0x4A, 0x69, 0x94, - 0xB2, 0xEF, 0x5D, 0x04, 0xFF, 0x8F, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, 0x7E, 0xEF, 0x7D, - 0xA5, 0x34, 0x7B, 0xCF, 0xBD, 0xF7, 0x0A, 0xFF, 0xAF, 0xE7, 0x3C, 0x9C, 0xF3, 0x84, 0x10, 0xC6, - 0x38, 0xD6, 0x9A, 0x94, 0xB2, 0x7B, 0xEF, 0x8C, 0x71, 0x84, 0x10, 0x8C, 0x51, 0xC6, 0x38, 0xDE, - 0xFB, 0xA5, 0x34, 0x7B, 0xCF, 0x84, 0x30, 0x8C, 0x51, 0x7B, 0xCF, 0x8C, 0x50, 0xCE, 0x79, 0xF7, - 0xBE, 0xFF, 0x3D, 0xED, 0x17, 0xED, 0x37, 0xFF, 0x5D, 0x0C, 0xFF, 0x87, 0xEF, 0x5D, 0xBD, 0xD6, - 0xA5, 0x13, 0xD6, 0x9A, 0x02, 0xFF, 0xE7, 0xF7, 0xBE, 0xCE, 0x79, 0xA5, 0x13, 0xAD, 0x75, 0xDE, - 0xDA, 0xCE, 0x59, 0x9C, 0xD2, 0x8C, 0x51, 0x9C, 0xF3, 0xA5, 0x14, 0x9C, 0xF3, 0xC6, 0x38, 0xDE, - 0xFB, 0xB5, 0xB6, 0x94, 0x92, 0x8C, 0x51, 0x9C, 0xD3, 0xBD, 0xF7, 0xDE, 0xDB, 0xAD, 0x55, 0x4A, - 0x69, 0x4A, 0x69, 0x84, 0x10, 0x8C, 0x71, 0x9C, 0xD2, 0xC6, 0x38, 0xEF, 0x5D, 0xDE, 0xDB, 0xAD, - 0x55, 0x9C, 0xF3, 0x9C, 0xF3, 0x8C, 0x71, 0x94, 0xB2, 0xBD, 0xF7, 0xEF, 0x7D, 0xFF, 0xDF, 0xDE, - 0xFB, 0xB5, 0x96, 0x94, 0x92, 0x8C, 0x50, 0x9C, 0xD2, 0xC6, 0x17, 0xE7, 0x1C, 0xCE, 0x79, 0xA5, - 0x34, 0xBD, 0xD7, 0xEF, 0x5D, 0xFF, 0xDF, 0xDE, 0xDB, 0xAD, 0x55, 0xB5, 0x96, 0xE7, 0x3C, 0x06, - 0xFF, 0x89, 0xCE, 0x79, 0x63, 0x2C, 0x4A, 0x69, 0xAD, 0x55, 0xF7, 0x9E, 0x08, 0xFF, 0x89, 0xEF, - 0x7D, 0xBD, 0xF7, 0xA5, 0x14, 0xC6, 0x38, 0xF7, 0x9E, 0x08, 0xFF, 0x89, 0xEF, 0x7D, 0xC6, 0x17, - 0xA5, 0x34, 0xCE, 0x59, 0xF7, 0xBE, 0x04, 0xFF, 0x8F, 0xFE, 0xFC, 0xED, 0x16, 0xF5, 0x98, 0xFF, - 0x7E, 0xF7, 0xBE, 0xD6, 0x9A, 0xBD, 0xD7, 0xDE, 0xFB, 0x0A, 0xFF, 0xA5, 0xF7, 0x9E, 0xCE, 0x79, - 0xBD, 0xF7, 0xE7, 0x1C, 0xF7, 0xBE, 0xCE, 0x79, 0xA5, 0x34, 0x9C, 0xD3, 0xA5, 0x14, 0xC6, 0x18, - 0xEF, 0x5D, 0xFF, 0xDF, 0xE7, 0x1C, 0xBD, 0xD6, 0x9C, 0xF3, 0x9C, 0xD3, 0xA5, 0x34, 0xCE, 0x79, - 0xF7, 0x9E, 0x03, 0xFF, 0x86, 0x3D, 0xED, 0x37, 0xED, 0x37, 0xFF, 0x5D, 0x0D, 0xFF, 0x86, 0xDF, - 0xF7, 0x9E, 0xEF, 0x5D, 0xF7, 0xBE, 0x04, 0xFF, 0xB1, 0xF7, 0xBE, 0xEF, 0x7D, 0xEF, 0x7D, 0xF7, - 0xBE, 0xF7, 0xBE, 0xEF, 0x5D, 0xE7, 0x1C, 0xEF, 0x5D, 0xEF, 0x7D, 0xEF, 0x5D, 0xF7, 0x9E, 0xFF, - 0xDF, 0xF7, 0x9E, 0xE7, 0x3C, 0xE7, 0x1C, 0xEF, 0x5D, 0xF7, 0xBE, 0xEF, 0x7D, 0xAD, 0x55, 0x52, - 0x89, 0x63, 0x0C, 0xC6, 0x17, 0xE7, 0x3C, 0xEF, 0x5D, 0xF7, 0xBE, 0x02, 0xFF, 0x8D, 0xF7, 0xBE, - 0xEF, 0x7D, 0xEF, 0x7D, 0xEF, 0x7D, 0xE7, 0x3C, 0xE7, 0x3C, 0xF7, 0x9E, 0x05, 0xFF, 0x94, 0xDF, - 0xF7, 0x9E, 0xE7, 0x3C, 0xE7, 0x1C, 0xEF, 0x5D, 0xF7, 0xBE, 0xFF, 0xDF, 0xF7, 0xBE, 0xEF, 0x7D, - 0xF7, 0x9E, 0xFF, 0xDF, 0x02, 0xFF, 0x87, 0xF7, 0xBE, 0xEF, 0x7D, 0xEF, 0x7D, 0xFF, 0xDF, 0x02, - 0xFF, 0x8B, 0xF7, 0xBE, 0xD6, 0xBA, 0x94, 0x92, 0x52, 0x89, 0x6B, 0x4D, 0xCE, 0x59, 0x0B, 0xFF, - 0x86, 0xDF, 0xF7, 0x9E, 0xEF, 0x7D, 0xF7, 0x9E, 0x0B, 0xFF, 0x86, 0xDF, 0xF7, 0x9E, 0xEF, 0x7D, - 0xF7, 0xBE, 0x07, 0xFF, 0x8E, 0x1C, 0xED, 0x16, 0xED, 0x37, 0xFF, 0x1D, 0xFF, 0xDF, 0xF7, 0x9E, - 0xEF, 0x7D, 0xF7, 0xBE, 0x0B, 0xFF, 0x94, 0xDF, 0xF7, 0x9E, 0xF7, 0x7D, 0xFF, 0xBE, 0xFF, 0xDF, - 0xF7, 0xBE, 0xEF, 0x5D, 0xE7, 0x1C, 0xE7, 0x3C, 0xF7, 0x9E, 0xFF, 0xDF, 0x03, 0xFF, 0x8A, 0xDF, - 0xF7, 0x7E, 0xE7, 0x3C, 0xE7, 0x1C, 0xEF, 0x5D, 0xF7, 0xBE, 0x04, 0xFF, 0x87, 0xFE, 0xDC, 0xEC, - 0xD6, 0xED, 0x37, 0xFF, 0x7E, 0x3A, 0xFF, 0x89, 0xF7, 0x9E, 0xAD, 0x75, 0x5A, 0xCB, 0x73, 0x8D, - 0xD6, 0x9A, 0x3C, 0xFF, 0x8B, 0xEF, 0x5D, 0xA5, 0x14, 0x52, 0xAA, 0x52, 0x8A, 0x9C, 0xF3, 0xEF, - 0x5D, 0x2B, 0xFF, 0xC8, 0x7E, 0xF5, 0xB8, 0xEC, 0x54, 0xEC, 0x95, 0xED, 0x16, 0xED, 0x16, 0xED, - 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, - 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, - 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, 0x16, 0xED, - 0x16, 0xED, 0x16, 0xED, 0x16, 0xEC, 0x75, 0xEC, 0x54, 0xF6, 0x19, 0xFF, 0xBE, 0x3B, 0xFF, 0x88, - 0xDF, 0xDE, 0xDA, 0xAD, 0x75, 0xBD, 0xD7, 0xEF, 0x5D, 0x3C, 0xFF, 0x8B, 0xF7, 0x9E, 0xC6, 0x18, - 0x9C, 0xD3, 0xAD, 0x75, 0xDE, 0xFB, 0xFF, 0xDF, 0x2B, 0xFF, 0xC6, 0xDF, 0xFF, 0x1D, 0xF5, 0xD9, - 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, - 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, - 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, - 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xED, 0x37, 0xF6, 0x19, - 0xFF, 0x5D, 0x3F, 0xFF, 0x86, 0xDF, 0xEF, 0x7D, 0xF7, 0x9E, 0xFF, 0xDF, 0x3D, 0xFF, 0x88, 0xDF, - 0xF7, 0x9E, 0xEF, 0x5D, 0xEF, 0x7D, 0xFF, 0xDF, 0x2F, 0xFF, 0xC2, 0xDF, 0xFF, 0x9E, 0xFF, 0x3D, - 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, - 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, - 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, - 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x1D, 0xFF, 0x3D, 0xFF, 0x9E, 0x7F, 0xFF, - 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, - 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, - 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, - 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x26, 0xFF, -}; -// clang-format on diff --git a/keyboards/fpb/rp2040_tft/graphics/qmklogo.qgf.h b/keyboards/fpb/rp2040_tft/graphics/qmklogo.qgf.h deleted file mode 100644 index 41a467de3c92..000000000000 --- a/keyboards/fpb/rp2040_tft/graphics/qmklogo.qgf.h +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2024 QMK -- generated source code only, image retains original copyright -// SPDX-License-Identifier: GPL-2.0-or-later - -// This file was auto-generated by `qmk painter-convert-graphics -i qmklogo.png -f rgb565` - -#pragma once - -#include - -extern const uint32_t gfx_qmklogo_length; -extern const uint8_t gfx_qmklogo[10700]; diff --git a/keyboards/fpb/rp2040_tft/halconf.h b/keyboards/fpb/rp2040_tft/halconf.h deleted file mode 100644 index b9328c793bbd..000000000000 --- a/keyboards/fpb/rp2040_tft/halconf.h +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2024 Fernando Birra -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#define HAL_USE_I2C TRUE -#define HAL_USE_PWM TRUE -//#define HAL_USE_ADC TRUE - -#define HAL_USE_SPI TRUE -//#define SPI_USE_WAIT TRUE -//#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD - -#include_next - diff --git a/keyboards/fpb/rp2040_tft/info.json b/keyboards/fpb/rp2040_tft/info.json deleted file mode 100644 index 0ca180c521b7..000000000000 --- a/keyboards/fpb/rp2040_tft/info.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "keyboard_name": "Onekey RP2040", - "processor": "RP2040", - "bootloader": "rp2040", - "matrix_pins": { - "cols": ["GP4"], - "rows": ["GP5"] - }, - "backlight": { - "pin": "GP13", - "levels": 5, - }, - "rgblight": { - "led_count": 1 - }, - "ws2812": { - "pin": "GP23" - }, - "indicators": { - "caps_lock": "GP25" - }, - "manufacturer": "QMK", - "url": "", - "maintainer": "qmk", - "usb": { - "vid": "0x0C45", - "pid": "0x6465", - "device_version": "0.0.1" - }, - "tapping": { - "term": 500 - }, - "diode_direction": "COL2ROW", - "features": { - "bootmagic": false, - "mousekey": false, - "extrakey": true, - "console": true, - "command": false, - "nkro": false, - "backlight": true, - "rgblight": true, - "audio": false - }, - "community_layouts": ["ortho_1x1"], - "layouts": { - "LAYOUT_ortho_1x1": { - "layout": [ - {"x": 0, "y": 0, "matrix": [0, 0]} - ] - } - } -} - diff --git a/keyboards/fpb/rp2040_tft/keymaps/default/keymap.c b/keyboards/fpb/rp2040_tft/keymaps/default/keymap.c deleted file mode 100644 index acef06b3d3d1..000000000000 --- a/keyboards/fpb/rp2040_tft/keymaps/default/keymap.c +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2020 QMK -// SPDX-License-Identifier: GPL-2.0-or-later -#include QMK_KEYBOARD_H - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - LAYOUT_ortho_1x1(QK_BACKLIGHT_STEP) -}; - -// https://github.com/qmk/qmk_firmware/blob/master/docs/feature_rgblight.md -void keyboard_post_init_user(void) { - rgblight_enable_noeeprom(); - rgblight_sethsv_noeeprom(HSV_CYAN); - // rgblight_mode_noeeprom(RGBLIGHT_MODE_RAINBOW_SWIRL); - rgblight_mode_noeeprom(RGBLIGHT_MODE_RAINBOW_SWIRL); -} \ No newline at end of file diff --git a/keyboards/fpb/rp2040_tft/keymaps/default/onekey.json b/keyboards/fpb/rp2040_tft/keymaps/default/onekey.json deleted file mode 100644 index 4fa4cb75854c..000000000000 --- a/keyboards/fpb/rp2040_tft/keymaps/default/onekey.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "Royal Kludge RK61 RGB", - "vendorId": "0x0c45", - "productId": "0x6465", - "menus": [ - "qmk_backlight" - ], - "keycodes": ["qmk_lighting"], - "customKeycodes": [ - {"name": "Windows Mode", "title": "Windows Mode", "shortName": "WIN"}, - {"name": "Mac Mode", "title": "Mac Mode", "shortName": "MAC"}, - {"name": "Bluetooth Host 1", "title": "Bluetooth Host 1", "shortName": "BT1"}, - {"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BT2"}, - {"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BT3"}, - {"name": "Bluetooth Pairing", "title": "Bluetooth Pairing", "shortName": "BT_PAIR"}, - {"name": "Bluetooth Toggle", "title": "Bluetooth Toggle", "shortName": "BT_TOG"}, - {"name": "Bluetooth Reset", "title": "Bluetooth Reset", "shortName": "BT_RST"} - ], - "matrix": {"rows": 5, "cols": 14}, - "layouts": { - "keymap": [ - [ "0,0" ] - ] - } -} \ No newline at end of file diff --git a/keyboards/fpb/rp2040_tft/keymaps/default/rules.mk b/keyboards/fpb/rp2040_tft/keymaps/default/rules.mk deleted file mode 100644 index 036bd6d1c3ec..000000000000 --- a/keyboards/fpb/rp2040_tft/keymaps/default/rules.mk +++ /dev/null @@ -1 +0,0 @@ -VIA_ENABLE = yes \ No newline at end of file diff --git a/keyboards/fpb/rp2040_tft/mcuconf.h b/keyboards/fpb/rp2040_tft/mcuconf.h deleted file mode 100644 index 4b5398455858..000000000000 --- a/keyboards/fpb/rp2040_tft/mcuconf.h +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2024 Fernando Birra -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#include_next - -#undef RP_PWM_USE_PWM6 -#define RP_PWM_USE_PWM6 TRUE - -#undef RP_SPI_USE_SPI1 -#define RP_SPI_USE_SPI1 TRUE \ No newline at end of file diff --git a/keyboards/fpb/rp2040_tft/readme.md b/keyboards/fpb/rp2040_tft/readme.md deleted file mode 100644 index fd6bd1b65e8c..000000000000 --- a/keyboards/fpb/rp2040_tft/readme.md +++ /dev/null @@ -1,12 +0,0 @@ -# Raspberry Pi 2040 onekey - -A simple keyboard to test the GC9107 driver - -To trigger keypress, short together pins *GP4* and *GP5*. - -Double-tap reset to enter bootloader mode. Copy the built uf2 file to the device by dragging the file to the new USB disk. - -## Supported Hardware - -* Raspberry Pi Pico AliExpress board with builtin ws2812 LED - diff --git a/keyboards/fpb/rp2040_tft/rp2040_tft.c b/keyboards/fpb/rp2040_tft/rp2040_tft.c deleted file mode 100644 index 231904ef3450..000000000000 --- a/keyboards/fpb/rp2040_tft/rp2040_tft.c +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2024 Fernando Birra -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "rp2040_tft.h" - -#include - -#include "graphics/qmklogo.qgf.h" - -static painter_device_t qp_display; -static painter_image_handle_t qp_image; - -void keyboard_post_init_kb(void) { - qp_display = qp_gc9107_make_spi_device( - PANEL_WIDTH, - PANEL_HEIGHT, - PANEL_CS, - PANEL_DC, - PANEL_RST, - 8, //spi_divisor, - 0 //spi_mode - ); // Create the display - qp_init(qp_display, QP_ROTATION_180); // Initialise the display - qp_rect(qp_display, 0, 0, PANEL_WIDTH, PANEL_HEIGHT, 128, 255, 255, true); - - qp_image = qp_load_image_mem(gfx_qmklogo); - qp_drawimage(qp_display, 0, 0, qp_image); - - return keyboard_post_init_user(); -} - -void housekeeping_task_kb(void) { - static uint32_t last_draw = 0; - if (timer_elapsed32(last_draw) > 33) { // Throttle to 30fps - last_draw = timer_read32(); - // Draw 8px-wide rainbow down the left side of the display - for (int i = 0; i < PANEL_WIDTH; ++i) { - qp_line(qp_display, i, 0, i, 7, i, 255, 255); - } - qp_flush(qp_display); - } -} - diff --git a/keyboards/fpb/rp2040_tft/rp2040_tft.h b/keyboards/fpb/rp2040_tft/rp2040_tft.h deleted file mode 100644 index af535b9816e9..000000000000 --- a/keyboards/fpb/rp2040_tft/rp2040_tft.h +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2024 Fernando Birra -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#define PANEL_WIDTH 128 -#define PANEL_HEIGHT 128 - -#define PANEL_DC 8 -#define PANEL_CS 9 -#define PANEL_CLK 10 -#define PANEL_MOSI 11 -#define PANEL_RST 12 -#define PANEL_BLK 13 \ No newline at end of file diff --git a/keyboards/fpb/rp2040_tft/rules.mk b/keyboards/fpb/rp2040_tft/rules.mk deleted file mode 100644 index dd87a4e1a5a5..000000000000 --- a/keyboards/fpb/rp2040_tft/rules.mk +++ /dev/null @@ -1,7 +0,0 @@ -WS2812_DRIVER = vendor -RGBLIGHT_ENABLE = yes - -QUANTUM_PAINTER_ENABLE = yes -QUANTUM_PAINTER_DRIVERS += gc9107_spi - -SRC += graphics/qmklogo.qgf.c \ No newline at end of file From ebd394c3974c4f5abcdfcbd30294103516b55bcc Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Sun, 4 Feb 2024 10:19:23 +0000 Subject: [PATCH 10/35] code formatting issues again --- drivers/painter/gc9107/qp_gc9107_opcodes.h | 272 ++++++++++----------- 1 file changed, 136 insertions(+), 136 deletions(-) diff --git a/drivers/painter/gc9107/qp_gc9107_opcodes.h b/drivers/painter/gc9107/qp_gc9107_opcodes.h index e1a2b01c614b..0061b9ef429a 100644 --- a/drivers/painter/gc9107/qp_gc9107_opcodes.h +++ b/drivers/painter/gc9107/qp_gc9107_opcodes.h @@ -1,161 +1,161 @@ // Copyright 2024 Fernando Birra - +// SPDX-License-Identifier: GPL-2.0-or-later #pragma once //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Quantum Painter GC9107 command opcodes //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#define GC9107_GET_ID_INFO 0x04 // Get ID information -#define GC9107_GET_STATUS 0x09 // Get status -#define GC9107_GET_POWER_MODE 0x0A // Get power mode -#define GC9107_GET_MADCTL 0x0B // Get MADCTL -#define GC9107_GET_PIXEL_FMT 0x0C // Get pixel format -#define GC9107_GET_IMAGE_FMT 0x0D // Get image format -#define GC9107_GET_SIGNAL_MODE 0x0E // Get signal mode -#define GC9107_GET_DIAG_RESULT 0x0F // Get self-diagnostic results -#define GC9107_CMD_SLEEP_ON 0x10 // Enter sleep mode -#define GC9107_CMD_SLEEP_OFF 0x11 // Exit sleep mode -#define GC9107_CMD_PARTIAL_ON 0x12 // Enter partial mode -#define GC9107_CMD_PARTIAL_OFF 0x13 // Exit partial mode -#define GC9107_CMD_INVERT_OFF 0x20 // Exit inverted mode -#define GC9107_CMD_INVERT_ON 0x21 // Enter inverted mode -#define GC9107_CMD_DISPLAY_OFF 0x28 // Disable display -#define GC9107_CMD_DISPLAY_ON 0x29 // Enable display -#define GC9107_SET_COL_ADDR 0x2A // Set column address -#define GC9107_SET_COL_ADDR 0x2A // Set column address (MSB(StartCol),LSB(StartCol),MSB(EndCol),LSB(EndCol) -#define GC9107_SET_ROW_ADDR 0x2B // Set row address (MSB(StartRow),LSB(StartRow),MSB(EndRow),LSB(EndRow) -#define GC9107_SET_MEM 0x2C // Set (write) memory -#define GC9107_SET_PARTIAL_AREA 0x30 // Set partial area (MSB(StartRow),LSB(StartRow),MSB(EndRow),LSB(EndRow) -#define GC9107_SET_VSCROLL 0x33 // Set vertical scroll MSB(TFA),LSB(TFA),MSB(VSA),LSB(VSA),MSB(BFA),LSB(BFA) -#define GC9107_CMD_TEARING_OFF 0x34 // Tearing line OFF -#define GC9107_CMD_TEARING_ON 0x35 // Tearing line ON -#define GC9107_SET_MEM_ACS_CTL 0x36 // Set mem access ctl -#define GC9107_SET_VSCROLL_ADDR 0x37 // Set vscroll start addr -#define GC9107_CMD_IDLE_OFF 0x38 // Exit idle mode -#define GC9107_CMD_IDLE_ON 0x39 // Enter idle mode -#define GC9107_SET_PIXEL_FORMAT 0x3A // Set pixel format -// Parameter values for +#define GC9107_GET_ID_INFO 0x04 // Get ID information +#define GC9107_GET_STATUS 0x09 // Get status +#define GC9107_GET_POWER_MODE 0x0A // Get power mode +#define GC9107_GET_MADCTL 0x0B // Get MADCTL +#define GC9107_GET_PIXEL_FMT 0x0C // Get pixel format +#define GC9107_GET_IMAGE_FMT 0x0D // Get image format +#define GC9107_GET_SIGNAL_MODE 0x0E // Get signal mode +#define GC9107_GET_DIAG_RESULT 0x0F // Get self-diagnostic results +#define GC9107_CMD_SLEEP_ON 0x10 // Enter sleep mode +#define GC9107_CMD_SLEEP_OFF 0x11 // Exit sleep mode +#define GC9107_CMD_PARTIAL_ON 0x12 // Enter partial mode +#define GC9107_CMD_PARTIAL_OFF 0x13 // Exit partial mode +#define GC9107_CMD_INVERT_OFF 0x20 // Exit inverted mode +#define GC9107_CMD_INVERT_ON 0x21 // Enter inverted mode +#define GC9107_CMD_DISPLAY_OFF 0x28 // Disable display +#define GC9107_CMD_DISPLAY_ON 0x29 // Enable display +#define GC9107_SET_COL_ADDR 0x2A // Set column address +#define GC9107_SET_COL_ADDR 0x2A // Set column address (MSB(StartCol),LSB(StartCol),MSB(EndCol),LSB(EndCol) +#define GC9107_SET_ROW_ADDR 0x2B // Set row address (MSB(StartRow),LSB(StartRow),MSB(EndRow),LSB(EndRow) +#define GC9107_SET_MEM 0x2C // Set (write) memory +#define GC9107_SET_PARTIAL_AREA 0x30 // Set partial area (MSB(StartRow),LSB(StartRow),MSB(EndRow),LSB(EndRow) +#define GC9107_SET_VSCROLL 0x33 // Set vertical scroll MSB(TFA),LSB(TFA),MSB(VSA),LSB(VSA),MSB(BFA),LSB(BFA) +#define GC9107_CMD_TEARING_OFF 0x34 // Tearing line OFF +#define GC9107_CMD_TEARING_ON 0x35 // Tearing line ON +#define GC9107_SET_MEM_ACS_CTL 0x36 // Set mem access ctl +#define GC9107_SET_VSCROLL_ADDR 0x37 // Set vscroll start addr +#define GC9107_CMD_IDLE_OFF 0x38 // Exit idle mode +#define GC9107_CMD_IDLE_ON 0x39 // Enter idle mode +#define GC9107_SET_PIXEL_FORMAT 0x3A // Set pixel format +// Parameter values for // GC9107_SET_PIXEL_FORMAT -# define PIXEL_FORMAT_12_BPP 0x01 // 12 bits per pixel -# define PIXEL_FORMAT_16_BPP 0x05 // 16 bits per pixel -# define PIXEL_FORMAT_18_BPP 0x06 // 18 bits per pixel -#define GC9107_SET_TEAR_SCANLINE 0x44 // Set tearing scanline (ScanLine[7:0]) -#define GC9107_GET_TEAR_SCANLINE 0x45 // Get tearing scanline (ScanLine[7:0]) -#define GC9107_SET_COMPLEMENT_RGB 0xAC // Set complement Principle RGB -// Parameter values for +#define PIXEL_FORMAT_12_BPP 0x01 // 12 bits per pixel +#define PIXEL_FORMAT_16_BPP 0x05 // 16 bits per pixel +#define PIXEL_FORMAT_18_BPP 0x06 // 18 bits per pixel +#define GC9107_SET_TEAR_SCANLINE 0x44 // Set tearing scanline (ScanLine[7:0]) +#define GC9107_GET_TEAR_SCANLINE 0x45 // Get tearing scanline (ScanLine[7:0]) +#define GC9107_SET_COMPLEMENT_RGB 0xAC // Set complement Principle RGB +// Parameter values for // GC9107_SET_COMPLEMENT_RGB -# define COMPLEMENT_WITH_0 0x00 // R0 <- B0 <- 0, except if data is FFh -# define COMPLEMENT_WITH_1 0x40 // R0 <- B0 <- 1, except if data is 00h -# define COMPLEMENT_WITH_MSB 0x80 // R0 <- R5, B0 <- B5 -# define COMPLEMENT_WITH_LSB 0xC0 // R0 <- B0 <- G0 -#define GC9107_SET_BLANK_PORCH 0xAD // Set blank porch control, 0;front_porch[6:0],0;back_porch[6:0] -#define GC9107_SET_FUNCTION_CTL1 0xB1 // Set access to AVDD_VCL_CLK and VGH_VGL_CLK commands +#define COMPLEMENT_WITH_0 0x00 // R0 <- B0 <- 0, except if data is FFh +#define COMPLEMENT_WITH_1 0x40 // R0 <- B0 <- 1, except if data is 00h +#define COMPLEMENT_WITH_MSB 0x80 // R0 <- R5, B0 <- B5 +#define COMPLEMENT_WITH_LSB 0xC0 // R0 <- B0 <- G0 +#define GC9107_SET_BLANK_PORCH 0xAD // Set blank porch control, 0;front_porch[6:0],0;back_porch[6:0] +#define GC9107_SET_FUNCTION_CTL1 0xB1 // Set access to AVDD_VCL_CLK and VGH_VGL_CLK commands // Parameter masks for // GC9107_SET_FUNCTION_CTL1 -# define ALLOW_AVDD_VCL_CLK 0b00001000 // Allow AVDD_VCL_CLK command -#define GC9107_SET_FUNCTION_CTL2 0xB2 // Set access to VGH, VGH control commands -// Parameter masks for +#define ALLOW_AVDD_VCL_CLK 0b00001000 // Allow AVDD_VCL_CLK command +#define GC9107_SET_FUNCTION_CTL2 0xB2 // Set access to VGH, VGH control commands +// Parameter masks for // GC9107_SET_FUNCTION_CTL2 -# define ALLOW_SET_VGH 0b00000001 // Allow GC9107_SET_VGH -# define ALLOW_SET_VGL 0b00000010 // Allow GC9107_SET_VGL -# define ALLOW_SET_VGH_VGL_CLK 0b00000100 // Alloq GC9107_SET_VGH_VGL_CLK -#define GC9107_SET_FUNCTION_CTL3 0xB3 // Set access to Gamma control commands -// Parameter masks for +#define ALLOW_SET_VGH 0b00000001 // Allow GC9107_SET_VGH +#define ALLOW_SET_VGL 0b00000010 // Allow GC9107_SET_VGL +#define ALLOW_SET_VGH_VGL_CLK 0b00000100 // Alloq GC9107_SET_VGH_VGL_CLK +#define GC9107_SET_FUNCTION_CTL3 0xB3 // Set access to Gamma control commands +// Parameter masks for // GC9107_SET_FUNCTION_CTL3 -# define ALLOW_SET_GAMMA1 0b00000001 // Allow GC9107_SET_GAMMA1 -# define ALLOW_SET_GAMMA2 0b00000010 // Allow GC9107_SET_GAMMA2 -#define GC9107_SET_FUNCTION_CTL6 0xB6 // Set access to commands SET_FRAME_RATE, SET_COMPLEMENT_RGB and SET_BLANK_PORCH +#define ALLOW_SET_GAMMA1 0b00000001 // Allow GC9107_SET_GAMMA1 +#define ALLOW_SET_GAMMA2 0b00000010 // Allow GC9107_SET_GAMMA2 +#define GC9107_SET_FUNCTION_CTL6 0xB6 // Set access to commands SET_FRAME_RATE, SET_COMPLEMENT_RGB and SET_BLANK_PORCH // Parameter mask for // GC9107_SET_FUNCTION_CTL6 -# define ALLOW_SET_FRAMERATE 0b000000001 // Allow GC9107_SET_FRAME_RATE -# define ALLOW_SET_COMPLEMENT_RGB 0b000010000 // Allow GC9107_SET_COMPLEMENT_RGB -# define ALLOW_SET_BLANK_PORCH 0b000100000 // Allow GFC9107_SET_BLANK_PORCH -#define GC9107_SET_DISPLAY_INVERSION 0xCB // Set Display Inversion control -#define GC9107_SET_CUSTOM_ID_INFO 0xD3 // Set customize display id information -#define GC9107_GET_ID1 0xDA // Get ID1 -#define GC9107_GET_ID2 0xDB // Get ID2 -#define GC9107_GET_ID3 0xDC // Get ID3 -#define GC9107_AVDD_VCL_CLK 0xE3 // AVDD_CLK +#define ALLOW_SET_FRAMERATE 0b000000001 // Allow GC9107_SET_FRAME_RATE +#define ALLOW_SET_COMPLEMENT_RGB 0b000010000 // Allow GC9107_SET_COMPLEMENT_RGB +#define ALLOW_SET_BLANK_PORCH 0b000100000 // Allow GFC9107_SET_BLANK_PORCH +#define GC9107_SET_DISPLAY_INVERSION 0xCB // Set Display Inversion control +#define GC9107_SET_CUSTOM_ID_INFO 0xD3 // Set customize display id information +#define GC9107_GET_ID1 0xDA // Get ID1 +#define GC9107_GET_ID2 0xDB // Get ID2 +#define GC9107_GET_ID3 0xDC // Get ID3 +#define GC9107_AVDD_VCL_CLK 0xE3 // AVDD_CLK // Parameter values for AVDD_CLK_AD part (Most significant nibble) -# define AVDD_CLK_AD_2T 0x00 -# define AVDD_CLK_AD_3T 0x10 -# define AVDD_CLK_AD_4T 0x20 -# define AVDD_CLK_AD_5T 0x30 -# define AVDD_CLK_AD_6T 0x40 -# define AVDD_CLK_AD_7T 0x50 -# define AVDD_CLK_AD_8T 0x60 -# define AVDD_CLK_AD_9T 0x70 +#define AVDD_CLK_AD_2T 0x00 +#define AVDD_CLK_AD_3T 0x10 +#define AVDD_CLK_AD_4T 0x20 +#define AVDD_CLK_AD_5T 0x30 +#define AVDD_CLK_AD_6T 0x40 +#define AVDD_CLK_AD_7T 0x50 +#define AVDD_CLK_AD_8T 0x60 +#define AVDD_CLK_AD_9T 0x70 // Parameter values for VCL_CLK_AD part (Least significant nibble) -# define VCL_CLK_AD_2T 0x00 -# define VCL_CLK_AD_3T 0x01 -# define VCL_CLK_AD_4T 0x02 -# define VCL_CLK_AD_5T 0x03 -# define VCL_CLK_AD_6T 0x04 -# define VCL_CLK_AD_7T 0x05 -# define VCL_CLK_AD_8T 0x06 -# define VCL_CLK_AD_9T 0x07 -#define GC9107_SET_VGH 0xE8 // Set VGH -// Parameter values for +#define VCL_CLK_AD_2T 0x00 +#define VCL_CLK_AD_3T 0x01 +#define VCL_CLK_AD_4T 0x02 +#define VCL_CLK_AD_5T 0x03 +#define VCL_CLK_AD_6T 0x04 +#define VCL_CLK_AD_7T 0x05 +#define VCL_CLK_AD_8T 0x06 +#define VCL_CLK_AD_9T 0x07 +#define GC9107_SET_VGH 0xE8 // Set VGH +// Parameter values for // GC9107_SET_VGH -# define VGH_P100 0x20 // +10 V -# define VGH_P110 0x21 // +11 V -# define VGH_P120 0x22 // +12 V -# define VGH_P130 0x23 // +13 V -# define VGH_P140 0x24 // +14 V -# define VGH_P150 0x25 // +15 V -#define GC9107_SET_VGL 0xE9 // Set VGL +#define VGH_P100 0x20 // +10 V +#define VGH_P110 0x21 // +11 V +#define VGH_P120 0x22 // +12 V +#define VGH_P130 0x23 // +13 V +#define VGH_P140 0x24 // +14 V +#define VGH_P150 0x25 // +15 V +#define GC9107_SET_VGL 0xE9 // Set VGL // Parameter values for // GC9107_SET_VGL -# define VGL_N_075 0x40 // -7.5 V -# define VGL_N_085 0x41 // -8.5 V -# define VGL_N_095 0x42 // -9.5 V -# define VGL_N_100 0x43 // -10.0 V -# define VGL_N_105 0x44 // -10.5 V -# define VGL_N_110 0x45 // -11.0 V -# define VGL_N_120 0x46 // -12.0 V -# define VGL_N_130 0x47 // -13.0 V -#define GC9107_SET_VGH_VGL_CLK 0xEA // Set VGH and VGL clock divisors -// Parameter masks for +#define VGL_N_075 0x40 // -7.5 V +#define VGL_N_085 0x41 // -8.5 V +#define VGL_N_095 0x42 // -9.5 V +#define VGL_N_100 0x43 // -10.0 V +#define VGL_N_105 0x44 // -10.5 V +#define VGL_N_110 0x45 // -11.0 V +#define VGL_N_120 0x46 // -12.0 V +#define VGL_N_130 0x47 // -13.0 V +#define GC9107_SET_VGH_VGL_CLK 0xEA // Set VGH and VGL clock divisors +// Parameter masks for // GC9107_SET_VGH_VGL_CLK (VGH Divisor) -# define VGH_CLK_DIV_2 0x00 // Clock divisor = 2 -> 6.0 Mhz -# define VGH_CLK_DIV_3 0x10 // Clock divisor = 3 -> 4.0 Mhz -# define VGH_CLK_DIV_4 0x20 // Clock divisor = 4 -> 3.0 Mhz -# define VGH_CLK_DIV_5 0x30 // Clock divisor = 5 -> 2.4 Mhz -# define VGH_CLK_DIV_6 0x40 // Clock divisor = 6 -> 2.0 Mhz -# define VGH_CLK_DIV_7 0x50 // Clock divisor = 7 -> 1.7 Mhz -# define VGH_CLK_DIV_8 0x60 // Clock divisor = 8 -> 1.5 Mhz -# define VGH_CLK_DIV_9 0x70 // Clock divisor = 9 -> 1.3 Mhz -# define VGH_CLK_DIV_10 0x80 // Clock divisor = 10 -> 1.2 Mhz -# define VGH_CLK_DIV_12 0x90 // Clock divisor = 12 -> 1.0 Mhz -# define VGH_CLK_DIV_15 0xA0 // Clock divisor = 15 -> 0.8 Mhz -# define VGH_CLK_DIV_20 0xB0 // Clock divisor = 20 -> 0.6 Mhz -# define VGH_CLK_DIV_24 0xC0 // Clock divisor = 24 -> 0.5 Mhz -# define VGH_CLK_DIV_30 0xD0 // Clock divisor = 30 -> 0.4 Mhz -# define VGH_CLK_DIV_40 0xE0 // Clock divisor = 40 -> 0.3 Mhz -# define VGH_CLK_DIV_60 0xE0 // Clock divisor = 40 -> 0.2 Mhz -// Parameter masks for +#define VGH_CLK_DIV_2 0x00 // Clock divisor = 2 -> 6.0 Mhz +#define VGH_CLK_DIV_3 0x10 // Clock divisor = 3 -> 4.0 Mhz +#define VGH_CLK_DIV_4 0x20 // Clock divisor = 4 -> 3.0 Mhz +#define VGH_CLK_DIV_5 0x30 // Clock divisor = 5 -> 2.4 Mhz +#define VGH_CLK_DIV_6 0x40 // Clock divisor = 6 -> 2.0 Mhz +#define VGH_CLK_DIV_7 0x50 // Clock divisor = 7 -> 1.7 Mhz +#define VGH_CLK_DIV_8 0x60 // Clock divisor = 8 -> 1.5 Mhz +#define VGH_CLK_DIV_9 0x70 // Clock divisor = 9 -> 1.3 Mhz +#define VGH_CLK_DIV_10 0x80 // Clock divisor = 10 -> 1.2 Mhz +#define VGH_CLK_DIV_12 0x90 // Clock divisor = 12 -> 1.0 Mhz +#define VGH_CLK_DIV_15 0xA0 // Clock divisor = 15 -> 0.8 Mhz +#define VGH_CLK_DIV_20 0xB0 // Clock divisor = 20 -> 0.6 Mhz +#define VGH_CLK_DIV_24 0xC0 // Clock divisor = 24 -> 0.5 Mhz +#define VGH_CLK_DIV_30 0xD0 // Clock divisor = 30 -> 0.4 Mhz +#define VGH_CLK_DIV_40 0xE0 // Clock divisor = 40 -> 0.3 Mhz +#define VGH_CLK_DIV_60 0xE0 // Clock divisor = 40 -> 0.2 Mhz +// Parameter masks for // GC9107_SET_VGH_VGL_CLK (VGL Divisor) -# define VGL_CLK_DIV_2 0x00 // Clock divisor = 2 -> 6.0 Mhz -# define VGL_CLK_DIV_3 0x01 // Clock divisor = 3 -> 4.0 Mhz -# define VGL_CLK_DIV_4 0x02 // Clock divisor = 4 -> 3.0 Mhz -# define VGL_CLK_DIV_5 0x03 // Clock divisor = 5 -> 2.4 Mhz -# define VGL_CLK_DIV_6 0x04 // Clock divisor = 6 -> 2.0 Mhz -# define VGL_CLK_DIV_7 0x05 // Clock divisor = 7 -> 1.7 Mhz -# define VGL_CLK_DIV_8 0x06 // Clock divisor = 8 -> 1.5 Mhz -# define VGL_CLK_DIV_9 0x07 // Clock divisor = 9 -> 1.3 Mhz -# define VGL_CLK_DIV_10 0x08 // Clock divisor = 10 -> 1.2 Mhz -# define VGL_CLK_DIV_12 0x09 // Clock divisor = 12 -> 1.0 Mhz -# define VGL_CLK_DIV_15 0x0A // Clock divisor = 15 -> 0.8 Mhz -# define VGL_CLK_DIV_20 0x0B // Clock divisor = 20 -> 0.6 Mhz -# define VGL_CLK_DIV_24 0x0C // Clock divisor = 24 -> 0.5 Mhz -# define VGL_CLK_DIV_30 0x0D // Clock divisor = 30 -> 0.4 Mhz -# define VGL_CLK_DIV_40 0x0E // Clock divisor = 40 -> 0.3 Mhz -# define VGL_CLK_DIV_60 0x0E // Clock divisor = 40 -> 0.2 Mhz -#define GC9107_SET_GAMMA1 0xF0 // Set gamma 1 -#define GC9107_SET_GAMMA2 0xF1 // Set gamma 2 -#define GC9107_SET_INTER_REG_ENABLE1 0xFE // Enable Inter Register 1 -#define GC9107_SET_INTER_REG_ENABLE2 0xEF // Enable Inter Register 2 +#define VGL_CLK_DIV_2 0x00 // Clock divisor = 2 -> 6.0 Mhz +#define VGL_CLK_DIV_3 0x01 // Clock divisor = 3 -> 4.0 Mhz +#define VGL_CLK_DIV_4 0x02 // Clock divisor = 4 -> 3.0 Mhz +#define VGL_CLK_DIV_5 0x03 // Clock divisor = 5 -> 2.4 Mhz +#define VGL_CLK_DIV_6 0x04 // Clock divisor = 6 -> 2.0 Mhz +#define VGL_CLK_DIV_7 0x05 // Clock divisor = 7 -> 1.7 Mhz +#define VGL_CLK_DIV_8 0x06 // Clock divisor = 8 -> 1.5 Mhz +#define VGL_CLK_DIV_9 0x07 // Clock divisor = 9 -> 1.3 Mhz +#define VGL_CLK_DIV_10 0x08 // Clock divisor = 10 -> 1.2 Mhz +#define VGL_CLK_DIV_12 0x09 // Clock divisor = 12 -> 1.0 Mhz +#define VGL_CLK_DIV_15 0x0A // Clock divisor = 15 -> 0.8 Mhz +#define VGL_CLK_DIV_20 0x0B // Clock divisor = 20 -> 0.6 Mhz +#define VGL_CLK_DIV_24 0x0C // Clock divisor = 24 -> 0.5 Mhz +#define VGL_CLK_DIV_30 0x0D // Clock divisor = 30 -> 0.4 Mhz +#define VGL_CLK_DIV_40 0x0E // Clock divisor = 40 -> 0.3 Mhz +#define VGL_CLK_DIV_60 0x0E // Clock divisor = 40 -> 0.2 Mhz +#define GC9107_SET_GAMMA1 0xF0 // Set gamma 1 +#define GC9107_SET_GAMMA2 0xF1 // Set gamma 2 +#define GC9107_SET_INTER_REG_ENABLE1 0xFE // Enable Inter Register 1 +#define GC9107_SET_INTER_REG_ENABLE2 0xEF // Enable Inter Register 2 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // MADCTL Flags From 6f4cf79e940177ece2156c6dffa6448c3fbe8c6d Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Sun, 4 Feb 2024 11:07:00 +0000 Subject: [PATCH 11/35] Revert "updated chibios-contrib" This reverts commit 4e8fa18cdc056c5aa7dd4d55a1ae5596471caff4. --- lib/chibios-contrib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/chibios-contrib b/lib/chibios-contrib index da78eb3759b8..9d7a7f904ed1 160000 --- a/lib/chibios-contrib +++ b/lib/chibios-contrib @@ -1 +1 @@ -Subproject commit da78eb3759b8d1779b237657c7667baa4aa95ca1 +Subproject commit 9d7a7f904ed135e3459cf6d602db56a26872df6b From 6cc49ed1e2b1f7f71d0be2545a9418d1c4969545 Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Mon, 5 Feb 2024 17:40:09 +0000 Subject: [PATCH 12/35] Setup for gc9xxx family --- drivers/painter/gc9107/qp_gc9107_opcodes.h | 168 ------------------ .../painter/{gc9107 => gc9xxx}/qp_gc9107.c | 33 ++-- .../painter/{gc9107 => gc9xxx}/qp_gc9107.h | 0 drivers/painter/gc9xxx/qp_gc9107_opcodes.h | 130 ++++++++++++++ .../painter/{gc9a01 => gc9xxx}/qp_gc9a01.c | 41 ++--- .../painter/{gc9a01 => gc9xxx}/qp_gc9a01.h | 0 .../{gc9a01 => gc9xxx}/qp_gc9a01_opcodes.h | 43 +---- drivers/painter/gc9xxx/qp_gc9xxx_opcodes.h | 51 ++++++ quantum/painter/rules.mk | 8 +- 9 files changed, 231 insertions(+), 243 deletions(-) delete mode 100644 drivers/painter/gc9107/qp_gc9107_opcodes.h rename drivers/painter/{gc9107 => gc9xxx}/qp_gc9107.c (85%) rename drivers/painter/{gc9107 => gc9xxx}/qp_gc9107.h (100%) create mode 100644 drivers/painter/gc9xxx/qp_gc9107_opcodes.h rename drivers/painter/{gc9a01 => gc9xxx}/qp_gc9a01.c (85%) rename drivers/painter/{gc9a01 => gc9xxx}/qp_gc9a01.h (100%) rename drivers/painter/{gc9a01 => gc9xxx}/qp_gc9a01_opcodes.h (53%) create mode 100644 drivers/painter/gc9xxx/qp_gc9xxx_opcodes.h diff --git a/drivers/painter/gc9107/qp_gc9107_opcodes.h b/drivers/painter/gc9107/qp_gc9107_opcodes.h deleted file mode 100644 index 0061b9ef429a..000000000000 --- a/drivers/painter/gc9107/qp_gc9107_opcodes.h +++ /dev/null @@ -1,168 +0,0 @@ -// Copyright 2024 Fernando Birra -// SPDX-License-Identifier: GPL-2.0-or-later -#pragma once - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Quantum Painter GC9107 command opcodes -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -#define GC9107_GET_ID_INFO 0x04 // Get ID information -#define GC9107_GET_STATUS 0x09 // Get status -#define GC9107_GET_POWER_MODE 0x0A // Get power mode -#define GC9107_GET_MADCTL 0x0B // Get MADCTL -#define GC9107_GET_PIXEL_FMT 0x0C // Get pixel format -#define GC9107_GET_IMAGE_FMT 0x0D // Get image format -#define GC9107_GET_SIGNAL_MODE 0x0E // Get signal mode -#define GC9107_GET_DIAG_RESULT 0x0F // Get self-diagnostic results -#define GC9107_CMD_SLEEP_ON 0x10 // Enter sleep mode -#define GC9107_CMD_SLEEP_OFF 0x11 // Exit sleep mode -#define GC9107_CMD_PARTIAL_ON 0x12 // Enter partial mode -#define GC9107_CMD_PARTIAL_OFF 0x13 // Exit partial mode -#define GC9107_CMD_INVERT_OFF 0x20 // Exit inverted mode -#define GC9107_CMD_INVERT_ON 0x21 // Enter inverted mode -#define GC9107_CMD_DISPLAY_OFF 0x28 // Disable display -#define GC9107_CMD_DISPLAY_ON 0x29 // Enable display -#define GC9107_SET_COL_ADDR 0x2A // Set column address -#define GC9107_SET_COL_ADDR 0x2A // Set column address (MSB(StartCol),LSB(StartCol),MSB(EndCol),LSB(EndCol) -#define GC9107_SET_ROW_ADDR 0x2B // Set row address (MSB(StartRow),LSB(StartRow),MSB(EndRow),LSB(EndRow) -#define GC9107_SET_MEM 0x2C // Set (write) memory -#define GC9107_SET_PARTIAL_AREA 0x30 // Set partial area (MSB(StartRow),LSB(StartRow),MSB(EndRow),LSB(EndRow) -#define GC9107_SET_VSCROLL 0x33 // Set vertical scroll MSB(TFA),LSB(TFA),MSB(VSA),LSB(VSA),MSB(BFA),LSB(BFA) -#define GC9107_CMD_TEARING_OFF 0x34 // Tearing line OFF -#define GC9107_CMD_TEARING_ON 0x35 // Tearing line ON -#define GC9107_SET_MEM_ACS_CTL 0x36 // Set mem access ctl -#define GC9107_SET_VSCROLL_ADDR 0x37 // Set vscroll start addr -#define GC9107_CMD_IDLE_OFF 0x38 // Exit idle mode -#define GC9107_CMD_IDLE_ON 0x39 // Enter idle mode -#define GC9107_SET_PIXEL_FORMAT 0x3A // Set pixel format -// Parameter values for -// GC9107_SET_PIXEL_FORMAT -#define PIXEL_FORMAT_12_BPP 0x01 // 12 bits per pixel -#define PIXEL_FORMAT_16_BPP 0x05 // 16 bits per pixel -#define PIXEL_FORMAT_18_BPP 0x06 // 18 bits per pixel -#define GC9107_SET_TEAR_SCANLINE 0x44 // Set tearing scanline (ScanLine[7:0]) -#define GC9107_GET_TEAR_SCANLINE 0x45 // Get tearing scanline (ScanLine[7:0]) -#define GC9107_SET_COMPLEMENT_RGB 0xAC // Set complement Principle RGB -// Parameter values for -// GC9107_SET_COMPLEMENT_RGB -#define COMPLEMENT_WITH_0 0x00 // R0 <- B0 <- 0, except if data is FFh -#define COMPLEMENT_WITH_1 0x40 // R0 <- B0 <- 1, except if data is 00h -#define COMPLEMENT_WITH_MSB 0x80 // R0 <- R5, B0 <- B5 -#define COMPLEMENT_WITH_LSB 0xC0 // R0 <- B0 <- G0 -#define GC9107_SET_BLANK_PORCH 0xAD // Set blank porch control, 0;front_porch[6:0],0;back_porch[6:0] -#define GC9107_SET_FUNCTION_CTL1 0xB1 // Set access to AVDD_VCL_CLK and VGH_VGL_CLK commands -// Parameter masks for -// GC9107_SET_FUNCTION_CTL1 -#define ALLOW_AVDD_VCL_CLK 0b00001000 // Allow AVDD_VCL_CLK command -#define GC9107_SET_FUNCTION_CTL2 0xB2 // Set access to VGH, VGH control commands -// Parameter masks for -// GC9107_SET_FUNCTION_CTL2 -#define ALLOW_SET_VGH 0b00000001 // Allow GC9107_SET_VGH -#define ALLOW_SET_VGL 0b00000010 // Allow GC9107_SET_VGL -#define ALLOW_SET_VGH_VGL_CLK 0b00000100 // Alloq GC9107_SET_VGH_VGL_CLK -#define GC9107_SET_FUNCTION_CTL3 0xB3 // Set access to Gamma control commands -// Parameter masks for -// GC9107_SET_FUNCTION_CTL3 -#define ALLOW_SET_GAMMA1 0b00000001 // Allow GC9107_SET_GAMMA1 -#define ALLOW_SET_GAMMA2 0b00000010 // Allow GC9107_SET_GAMMA2 -#define GC9107_SET_FUNCTION_CTL6 0xB6 // Set access to commands SET_FRAME_RATE, SET_COMPLEMENT_RGB and SET_BLANK_PORCH -// Parameter mask for -// GC9107_SET_FUNCTION_CTL6 -#define ALLOW_SET_FRAMERATE 0b000000001 // Allow GC9107_SET_FRAME_RATE -#define ALLOW_SET_COMPLEMENT_RGB 0b000010000 // Allow GC9107_SET_COMPLEMENT_RGB -#define ALLOW_SET_BLANK_PORCH 0b000100000 // Allow GFC9107_SET_BLANK_PORCH -#define GC9107_SET_DISPLAY_INVERSION 0xCB // Set Display Inversion control -#define GC9107_SET_CUSTOM_ID_INFO 0xD3 // Set customize display id information -#define GC9107_GET_ID1 0xDA // Get ID1 -#define GC9107_GET_ID2 0xDB // Get ID2 -#define GC9107_GET_ID3 0xDC // Get ID3 -#define GC9107_AVDD_VCL_CLK 0xE3 // AVDD_CLK -// Parameter values for AVDD_CLK_AD part (Most significant nibble) -#define AVDD_CLK_AD_2T 0x00 -#define AVDD_CLK_AD_3T 0x10 -#define AVDD_CLK_AD_4T 0x20 -#define AVDD_CLK_AD_5T 0x30 -#define AVDD_CLK_AD_6T 0x40 -#define AVDD_CLK_AD_7T 0x50 -#define AVDD_CLK_AD_8T 0x60 -#define AVDD_CLK_AD_9T 0x70 -// Parameter values for VCL_CLK_AD part (Least significant nibble) -#define VCL_CLK_AD_2T 0x00 -#define VCL_CLK_AD_3T 0x01 -#define VCL_CLK_AD_4T 0x02 -#define VCL_CLK_AD_5T 0x03 -#define VCL_CLK_AD_6T 0x04 -#define VCL_CLK_AD_7T 0x05 -#define VCL_CLK_AD_8T 0x06 -#define VCL_CLK_AD_9T 0x07 -#define GC9107_SET_VGH 0xE8 // Set VGH -// Parameter values for -// GC9107_SET_VGH -#define VGH_P100 0x20 // +10 V -#define VGH_P110 0x21 // +11 V -#define VGH_P120 0x22 // +12 V -#define VGH_P130 0x23 // +13 V -#define VGH_P140 0x24 // +14 V -#define VGH_P150 0x25 // +15 V -#define GC9107_SET_VGL 0xE9 // Set VGL -// Parameter values for -// GC9107_SET_VGL -#define VGL_N_075 0x40 // -7.5 V -#define VGL_N_085 0x41 // -8.5 V -#define VGL_N_095 0x42 // -9.5 V -#define VGL_N_100 0x43 // -10.0 V -#define VGL_N_105 0x44 // -10.5 V -#define VGL_N_110 0x45 // -11.0 V -#define VGL_N_120 0x46 // -12.0 V -#define VGL_N_130 0x47 // -13.0 V -#define GC9107_SET_VGH_VGL_CLK 0xEA // Set VGH and VGL clock divisors -// Parameter masks for -// GC9107_SET_VGH_VGL_CLK (VGH Divisor) -#define VGH_CLK_DIV_2 0x00 // Clock divisor = 2 -> 6.0 Mhz -#define VGH_CLK_DIV_3 0x10 // Clock divisor = 3 -> 4.0 Mhz -#define VGH_CLK_DIV_4 0x20 // Clock divisor = 4 -> 3.0 Mhz -#define VGH_CLK_DIV_5 0x30 // Clock divisor = 5 -> 2.4 Mhz -#define VGH_CLK_DIV_6 0x40 // Clock divisor = 6 -> 2.0 Mhz -#define VGH_CLK_DIV_7 0x50 // Clock divisor = 7 -> 1.7 Mhz -#define VGH_CLK_DIV_8 0x60 // Clock divisor = 8 -> 1.5 Mhz -#define VGH_CLK_DIV_9 0x70 // Clock divisor = 9 -> 1.3 Mhz -#define VGH_CLK_DIV_10 0x80 // Clock divisor = 10 -> 1.2 Mhz -#define VGH_CLK_DIV_12 0x90 // Clock divisor = 12 -> 1.0 Mhz -#define VGH_CLK_DIV_15 0xA0 // Clock divisor = 15 -> 0.8 Mhz -#define VGH_CLK_DIV_20 0xB0 // Clock divisor = 20 -> 0.6 Mhz -#define VGH_CLK_DIV_24 0xC0 // Clock divisor = 24 -> 0.5 Mhz -#define VGH_CLK_DIV_30 0xD0 // Clock divisor = 30 -> 0.4 Mhz -#define VGH_CLK_DIV_40 0xE0 // Clock divisor = 40 -> 0.3 Mhz -#define VGH_CLK_DIV_60 0xE0 // Clock divisor = 40 -> 0.2 Mhz -// Parameter masks for -// GC9107_SET_VGH_VGL_CLK (VGL Divisor) -#define VGL_CLK_DIV_2 0x00 // Clock divisor = 2 -> 6.0 Mhz -#define VGL_CLK_DIV_3 0x01 // Clock divisor = 3 -> 4.0 Mhz -#define VGL_CLK_DIV_4 0x02 // Clock divisor = 4 -> 3.0 Mhz -#define VGL_CLK_DIV_5 0x03 // Clock divisor = 5 -> 2.4 Mhz -#define VGL_CLK_DIV_6 0x04 // Clock divisor = 6 -> 2.0 Mhz -#define VGL_CLK_DIV_7 0x05 // Clock divisor = 7 -> 1.7 Mhz -#define VGL_CLK_DIV_8 0x06 // Clock divisor = 8 -> 1.5 Mhz -#define VGL_CLK_DIV_9 0x07 // Clock divisor = 9 -> 1.3 Mhz -#define VGL_CLK_DIV_10 0x08 // Clock divisor = 10 -> 1.2 Mhz -#define VGL_CLK_DIV_12 0x09 // Clock divisor = 12 -> 1.0 Mhz -#define VGL_CLK_DIV_15 0x0A // Clock divisor = 15 -> 0.8 Mhz -#define VGL_CLK_DIV_20 0x0B // Clock divisor = 20 -> 0.6 Mhz -#define VGL_CLK_DIV_24 0x0C // Clock divisor = 24 -> 0.5 Mhz -#define VGL_CLK_DIV_30 0x0D // Clock divisor = 30 -> 0.4 Mhz -#define VGL_CLK_DIV_40 0x0E // Clock divisor = 40 -> 0.3 Mhz -#define VGL_CLK_DIV_60 0x0E // Clock divisor = 40 -> 0.2 Mhz -#define GC9107_SET_GAMMA1 0xF0 // Set gamma 1 -#define GC9107_SET_GAMMA2 0xF1 // Set gamma 2 -#define GC9107_SET_INTER_REG_ENABLE1 0xFE // Enable Inter Register 1 -#define GC9107_SET_INTER_REG_ENABLE2 0xEF // Enable Inter Register 2 - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// MADCTL Flags -#define GC9107_MADCTL_MY 0b10000000 -#define GC9107_MADCTL_MX 0b01000000 -#define GC9107_MADCTL_MV 0b00100000 -#define GC9107_MADCTL_ML 0b00010000 -#define GC9107_MADCTL_RGB 0b00000000 -#define GC9107_MADCTL_BGR 0b00001000 -#define GC9107_MADCTL_MH 0b00000100 diff --git a/drivers/painter/gc9107/qp_gc9107.c b/drivers/painter/gc9xxx/qp_gc9107.c similarity index 85% rename from drivers/painter/gc9107/qp_gc9107.c rename to drivers/painter/gc9xxx/qp_gc9107.c index f4217eda5e3a..b7beb57b55e1 100644 --- a/drivers/painter/gc9107/qp_gc9107.c +++ b/drivers/painter/gc9xxx/qp_gc9107.c @@ -3,6 +3,7 @@ #include "qp_internal.h" #include "qp_comms.h" #include "qp_gc9107.h" +#include "qp_gc9xxx_opcodes.h" #include "qp_gc9107_opcodes.h" #include "qp_tft_panel.h" @@ -22,8 +23,8 @@ __attribute__((weak)) bool qp_gc9107_init(painter_device_t device, painter_rotat const uint8_t gc9107_init_sequence[] = { // Command, Delay, N, Data[N] // The following commands are not really needed since the functionality isn't being used - GC9107_SET_INTER_REG_ENABLE1, 5, 0, - GC9107_SET_INTER_REG_ENABLE2, 5, 0, + GC9XXX_SET_INTER_REG_ENABLE1, 5, 0, + GC9XXX_SET_INTER_REG_ENABLE2, 5, 0, GC9107_SET_FUNCTION_CTL1, 0, 1, ALLOW_AVDD_VCL_CLK, GC9107_SET_FUNCTION_CTL2, 0, 1, ALLOW_SET_VGH | ALLOW_SET_VGL | ALLOW_SET_VGH_VGL_CLK, GC9107_SET_FUNCTION_CTL3, 0, 1, ALLOW_SET_GAMMA1 | ALLOW_SET_GAMMA2, @@ -37,10 +38,10 @@ __attribute__((weak)) bool qp_gc9107_init(painter_device_t device, painter_rotat // GC9107_SET_GAMMA1, 0, 14, 0x1F, 0x28, 0x04, 0x3E, 0x2A, 0x2E, 0x20, 0x00, 0x0C, 0x06, 0x00, 0x1C, 0x1F, 0x0F, // GC9107_SET_GAMMA2, 0, 14, 0x00, 0x2D, 0x2F, 0x3F, 0x6F, 0x1C, 0x0B, 0x00, 0x00, 0x00, 0x07, 0x0D, 0x11, 0x0F, - GC9107_SET_PIXEL_FORMAT, 0, 1, PIXEL_FORMAT_16_BPP, - GC9107_CMD_INVERT_ON, 0, 0, - GC9107_CMD_SLEEP_OFF, 120, 0, - GC9107_CMD_DISPLAY_ON, 20, 0 + GC9XXX_SET_PIXEL_FORMAT, 0, 1, PIXEL_FORMAT_16_BPP, + GC9XXX_CMD_INVERT_ON, 0, 0, + GC9XXX_CMD_SLEEP_OFF, 120, 0, + GC9XXX_CMD_DISPLAY_ON, 20, 0 }; // clang-format on @@ -48,12 +49,12 @@ __attribute__((weak)) bool qp_gc9107_init(painter_device_t device, painter_rotat // Configure the rotation (i.e. the ordering and direction of memory writes in GRAM) const uint8_t madctl[] = { - [QP_ROTATION_0] = GC9107_MADCTL_BGR, - [QP_ROTATION_90] = GC9107_MADCTL_BGR | GC9107_MADCTL_MX | GC9107_MADCTL_MV, - [QP_ROTATION_180] = GC9107_MADCTL_BGR | GC9107_MADCTL_MX | GC9107_MADCTL_MY, - [QP_ROTATION_270] = GC9107_MADCTL_BGR | GC9107_MADCTL_MV | GC9107_MADCTL_MY, + [QP_ROTATION_0] = GC9XXX_MADCTL_BGR, + [QP_ROTATION_90] = GC9XXX_MADCTL_BGR | GC9XXX_MADCTL_MX | GC9XXX_MADCTL_MV, + [QP_ROTATION_180] = GC9XXX_MADCTL_BGR | GC9XXX_MADCTL_MX | GC9XXX_MADCTL_MY, + [QP_ROTATION_270] = GC9XXX_MADCTL_BGR | GC9XXX_MADCTL_MV | GC9XXX_MADCTL_MY, }; - qp_comms_command_databyte(device, GC9107_SET_MEM_ACS_CTL, madctl[rotation]); + qp_comms_command_databyte(device, GC9XXX_SET_MEM_ACS_CTL, madctl[rotation]); return true; } @@ -79,11 +80,11 @@ const tft_panel_dc_reset_painter_driver_vtable_t gc9107_driver_vtable = { .swap_window_coords = false, .opcodes = { - .display_on = GC9107_CMD_DISPLAY_ON, - .display_off = GC9107_CMD_DISPLAY_OFF, - .set_column_address = GC9107_SET_COL_ADDR, - .set_row_address = GC9107_SET_ROW_ADDR, - .enable_writes = GC9107_SET_MEM, + .display_on = GC9XXX_CMD_DISPLAY_ON, + .display_off = GC9XXX_CMD_DISPLAY_OFF, + .set_column_address = GC9XXX_SET_COL_ADDR, + .set_row_address = GC9XXX_SET_ROW_ADDR, + .enable_writes = GC9XXX_SET_MEM, }, }; diff --git a/drivers/painter/gc9107/qp_gc9107.h b/drivers/painter/gc9xxx/qp_gc9107.h similarity index 100% rename from drivers/painter/gc9107/qp_gc9107.h rename to drivers/painter/gc9xxx/qp_gc9107.h diff --git a/drivers/painter/gc9xxx/qp_gc9107_opcodes.h b/drivers/painter/gc9xxx/qp_gc9107_opcodes.h new file mode 100644 index 000000000000..73d160f62960 --- /dev/null +++ b/drivers/painter/gc9xxx/qp_gc9107_opcodes.h @@ -0,0 +1,130 @@ +// Copyright 2024 Fernando Birra +// SPDX-License-Identifier: GPL-2.0-or-later +#pragma once + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Quantum Painter GC9107 command opcodes +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +#define GC9107_GET_POWER_MODE 0x0A // Get power mode +#define GC9107_GET_MADCTL 0x0B // Get MADCTL +#define GC9107_GET_PIXEL_FMT 0x0C // Get pixel format +#define GC9107_GET_IMAGE_FMT 0x0D // Get image format +#define GC9107_GET_SIGNAL_MODE 0x0E // Get signal mode +#define GC9107_GET_DIAG_RESULT 0x0F // Get self-diagnostic results +#define GC9107_SET_COMPLEMENT_RGB 0xAC // Set complement Principle RGB +#define GC9107_SET_BLANK_PORCH 0xAD // Set blank porch control, 0;front_porch[6:0],0;back_porch[6:0] +#define GC9107_SET_FUNCTION_CTL1 0xB1 // Set access to AVDD_VCL_CLK and VGH_VGL_CLK commands +#define GC9107_SET_FUNCTION_CTL2 0xB2 // Set access to VGH, VGH control commands +#define GC9107_SET_FUNCTION_CTL3 0xB3 // Set access to Gamma control commands +#define GC9107_SET_FUNCTION_CTL6 0xB6 // Set access to commands SET_FRAME_RATE, SET_COMPLEMENT_RGB and SET_BLANK_PORCH +#define GC9107_SET_DISPLAY_INVERSION 0xCB // Set Display Inversion control +#define GC9107_SET_CUSTOM_ID_INFO 0xD3 // Set customized display id information +#define GC9107_AVDD_VCL_CLK 0xE3 // AVDD_CLK +#define GC9107_SET_VGH 0xE8 // Set VGH +#define GC9107_SET_VGL 0xE9 // Set VGL +#define GC9107_SET_VGH_VGL_CLK 0xEA // Set VGH and VGL clock divisors + +// Parameter values for +// GC9107_SET_PIXEL_FORMAT +#define PIXEL_FORMAT_12_BPP 0x01 // 12 bits per pixel +#define PIXEL_FORMAT_16_BPP 0x05 // 16 bits per pixel +#define PIXEL_FORMAT_18_BPP 0x06 // 18 bits per pixel +// Parameter values for +// GC9107_SET_COMPLEMENT_RGB +#define COMPLEMENT_WITH_0 0x00 // R0 <- B0 <- 0, except if data is FFh +#define COMPLEMENT_WITH_1 0x40 // R0 <- B0 <- 1, except if data is 00h +#define COMPLEMENT_WITH_MSB 0x80 // R0 <- R5, B0 <- B5 +#define COMPLEMENT_WITH_LSB 0xC0 // R0 <- B0 <- G0 +// Parameter masks for +// GC9107_SET_FUNCTION_CTL1 +#define ALLOW_AVDD_VCL_CLK 0b00001000 // Allow AVDD_VCL_CLK command +// Parameter masks for +// GC9107_SET_FUNCTION_CTL2 +#define ALLOW_SET_VGH 0b00000001 // Allow GC9107_SET_VGH +#define ALLOW_SET_VGL 0b00000010 // Allow GC9107_SET_VGL +#define ALLOW_SET_VGH_VGL_CLK 0b00000100 // Alloq GC9107_SET_VGH_VGL_CLK +// Parameter masks for +// GC9107_SET_FUNCTION_CTL3 +#define ALLOW_SET_GAMMA1 0b00000001 // Allow GC9107_SET_GAMMA1 +#define ALLOW_SET_GAMMA2 0b00000010 // Allow GC9107_SET_GAMMA2 +// Parameter mask for +// GC9107_SET_FUNCTION_CTL6 +#define ALLOW_SET_FRAMERATE 0b000000001 // Allow GC9107_SET_FRAME_RATE +#define ALLOW_SET_COMPLEMENT_RGB 0b000010000 // Allow GC9107_SET_COMPLEMENT_RGB +#define ALLOW_SET_BLANK_PORCH 0b000100000 // Allow GFC9107_SET_BLANK_PORCH +// Parameter values for +// AVDD_CLK_AD part (Most significant nibble) +#define AVDD_CLK_AD_2T 0x00 +#define AVDD_CLK_AD_3T 0x10 +#define AVDD_CLK_AD_4T 0x20 +#define AVDD_CLK_AD_5T 0x30 +#define AVDD_CLK_AD_6T 0x40 +#define AVDD_CLK_AD_7T 0x50 +#define AVDD_CLK_AD_8T 0x60 +#define AVDD_CLK_AD_9T 0x70 +// Parameter values for +// VCL_CLK_AD part (Least significant nibble) +#define VCL_CLK_AD_2T 0x00 +#define VCL_CLK_AD_3T 0x01 +#define VCL_CLK_AD_4T 0x02 +#define VCL_CLK_AD_5T 0x03 +#define VCL_CLK_AD_6T 0x04 +#define VCL_CLK_AD_7T 0x05 +#define VCL_CLK_AD_8T 0x06 +#define VCL_CLK_AD_9T 0x07 +// Parameter values for +// GC9107_SET_VGH +#define VGH_P100 0x20 // +10 V +#define VGH_P110 0x21 // +11 V +#define VGH_P120 0x22 // +12 V +#define VGH_P130 0x23 // +13 V +#define VGH_P140 0x24 // +14 V +#define VGH_P150 0x25 // +15 V +// Parameter values for +// GC9107_SET_VGL +#define VGL_N_075 0x40 // -7.5 V +#define VGL_N_085 0x41 // -8.5 V +#define VGL_N_095 0x42 // -9.5 V +#define VGL_N_100 0x43 // -10.0 V +#define VGL_N_105 0x44 // -10.5 V +#define VGL_N_110 0x45 // -11.0 V +#define VGL_N_120 0x46 // -12.0 V +#define VGL_N_130 0x47 // -13.0 V +// Parameter masks for +// GC9107_SET_VGH_VGL_CLK (VGH Divisor) +#define VGH_CLK_DIV_2 0x00 // Clock divisor = 2 -> 6.0 Mhz +#define VGH_CLK_DIV_3 0x10 // Clock divisor = 3 -> 4.0 Mhz +#define VGH_CLK_DIV_4 0x20 // Clock divisor = 4 -> 3.0 Mhz +#define VGH_CLK_DIV_5 0x30 // Clock divisor = 5 -> 2.4 Mhz +#define VGH_CLK_DIV_6 0x40 // Clock divisor = 6 -> 2.0 Mhz +#define VGH_CLK_DIV_7 0x50 // Clock divisor = 7 -> 1.7 Mhz +#define VGH_CLK_DIV_8 0x60 // Clock divisor = 8 -> 1.5 Mhz +#define VGH_CLK_DIV_9 0x70 // Clock divisor = 9 -> 1.3 Mhz +#define VGH_CLK_DIV_10 0x80 // Clock divisor = 10 -> 1.2 Mhz +#define VGH_CLK_DIV_12 0x90 // Clock divisor = 12 -> 1.0 Mhz +#define VGH_CLK_DIV_15 0xA0 // Clock divisor = 15 -> 0.8 Mhz +#define VGH_CLK_DIV_20 0xB0 // Clock divisor = 20 -> 0.6 Mhz +#define VGH_CLK_DIV_24 0xC0 // Clock divisor = 24 -> 0.5 Mhz +#define VGH_CLK_DIV_30 0xD0 // Clock divisor = 30 -> 0.4 Mhz +#define VGH_CLK_DIV_40 0xE0 // Clock divisor = 40 -> 0.3 Mhz +#define VGH_CLK_DIV_60 0xE0 // Clock divisor = 40 -> 0.2 Mhz +// Parameter masks for +// GC9107_SET_VGH_VGL_CLK (VGL Divisor) +#define VGL_CLK_DIV_2 0x00 // Clock divisor = 2 -> 6.0 Mhz +#define VGL_CLK_DIV_3 0x01 // Clock divisor = 3 -> 4.0 Mhz +#define VGL_CLK_DIV_4 0x02 // Clock divisor = 4 -> 3.0 Mhz +#define VGL_CLK_DIV_5 0x03 // Clock divisor = 5 -> 2.4 Mhz +#define VGL_CLK_DIV_6 0x04 // Clock divisor = 6 -> 2.0 Mhz +#define VGL_CLK_DIV_7 0x05 // Clock divisor = 7 -> 1.7 Mhz +#define VGL_CLK_DIV_8 0x06 // Clock divisor = 8 -> 1.5 Mhz +#define VGL_CLK_DIV_9 0x07 // Clock divisor = 9 -> 1.3 Mhz +#define VGL_CLK_DIV_10 0x08 // Clock divisor = 10 -> 1.2 Mhz +#define VGL_CLK_DIV_12 0x09 // Clock divisor = 12 -> 1.0 Mhz +#define VGL_CLK_DIV_15 0x0A // Clock divisor = 15 -> 0.8 Mhz +#define VGL_CLK_DIV_20 0x0B // Clock divisor = 20 -> 0.6 Mhz +#define VGL_CLK_DIV_24 0x0C // Clock divisor = 24 -> 0.5 Mhz +#define VGL_CLK_DIV_30 0x0D // Clock divisor = 30 -> 0.4 Mhz +#define VGL_CLK_DIV_40 0x0E // Clock divisor = 40 -> 0.3 Mhz +#define VGL_CLK_DIV_60 0x0E // Clock divisor = 40 -> 0.2 Mhz + diff --git a/drivers/painter/gc9a01/qp_gc9a01.c b/drivers/painter/gc9xxx/qp_gc9a01.c similarity index 85% rename from drivers/painter/gc9a01/qp_gc9a01.c rename to drivers/painter/gc9xxx/qp_gc9a01.c index fe6fa7a9d024..8130942b2be1 100644 --- a/drivers/painter/gc9a01/qp_gc9a01.c +++ b/drivers/painter/gc9xxx/qp_gc9a01.c @@ -5,6 +5,7 @@ #include "qp_internal.h" #include "qp_comms.h" #include "qp_gc9a01.h" +#include "qp_gc9xxx_opcodes.h" #include "qp_gc9a01_opcodes.h" #include "qp_tft_panel.h" @@ -22,10 +23,10 @@ __attribute__((weak)) bool qp_gc9a01_init(painter_device_t device, painter_rotat // clang-format off const uint8_t gc9a01_init_sequence[] = { // Command, Delay, N, Data[N] - GC9A01_SET_INTER_REG_ENABLE2, 0, 0, + GC9XXX_SET_INTER_REG_ENABLE2, 0, 0, 0xEB, 0, 1, 0x14, - GC9A01_SET_INTER_REG_ENABLE1, 0, 0, - GC9A01_SET_INTER_REG_ENABLE2, 0, 0, + GC9XXX_SET_INTER_REG_ENABLE1, 0, 0, + GC9XXX_SET_INTER_REG_ENABLE2, 0, 0, 0xEB, 0, 1, 0x14, 0x84, 0, 1, 0x40, 0x85, 0, 1, 0xFF, @@ -40,7 +41,7 @@ __attribute__((weak)) bool qp_gc9a01_init(painter_device_t device, painter_rotat 0x8e, 0, 1, 0xFF, 0x8f, 0, 1, 0xFF, GC9A01_SET_FUNCTION_CTL, 0, 2, 0x00, 0x20, - GC9A01_SET_PIX_FMT, 0, 1, 0x55, + GC9XXX_SET_PIXEL_FORMAT, 0, 1, 0x55, 0x90, 0, 4, 0x08, 0x08, 0x08, 0x08, 0xBD, 0, 1, 0x06, 0xBC, 0, 1, 0x00, @@ -51,8 +52,8 @@ __attribute__((weak)) bool qp_gc9a01_init(painter_device_t device, painter_rotat 0xBE, 0, 1, 0x11, 0xE1, 0, 2, 0x10, 0x0E, 0xDF, 0, 3, 0x21, 0x0C, 0x02, - GC9A01_SET_GAMMA1, 0, 6, 0x45, 0x09, 0x08, 0x08, 0x26, 0x2A, - GC9A01_SET_GAMMA2, 0, 6, 0x43, 0x70, 0x72, 0x36, 0x37, 0x6F, + GC9XXX_SET_GAMMA1, 0, 6, 0x45, 0x09, 0x08, 0x08, 0x26, 0x2A, + GC9XXX_SET_GAMMA2, 0, 6, 0x43, 0x70, 0x72, 0x36, 0x37, 0x6F, GC9A01_SET_GAMMA3, 0, 6, 0x45, 0x09, 0x08, 0x08, 0x26, 0x2A, GC9A01_SET_GAMMA4, 0, 6, 0x43, 0x70, 0x72, 0x36, 0x37, 0x6F, 0xED, 0, 2, 0x1B, 0x0B, @@ -67,10 +68,10 @@ __attribute__((weak)) bool qp_gc9a01_init(painter_device_t device, painter_rotat 0x67, 0, 10, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x54, 0x10, 0x32, 0x98, 0x74, 0, 7, 0x10, 0x85, 0x80, 0x00, 0x00, 0x4E, 0x00, 0x98, 0, 2, 0x3E, 0x07, - GC9A01_CMD_TEARING_OFF, 0, 0, - GC9A01_CMD_INVERT_OFF, 0, 0, - GC9A01_CMD_SLEEP_OFF, 120, 0, - GC9A01_CMD_DISPLAY_ON, 20, 0 + GC9XXX_CMD_TEARING_ON, 0, 0, + GC9XXX_CMD_INVERT_OFF, 0, 0, + GC9XXX_CMD_SLEEP_OFF, 120, 0, + GC9XXX_CMD_DISPLAY_ON, 20, 0 }; // clang-format on @@ -79,12 +80,12 @@ __attribute__((weak)) bool qp_gc9a01_init(painter_device_t device, painter_rotat // Configure the rotation (i.e. the ordering and direction of memory writes in GRAM) const uint8_t madctl[] = { - [QP_ROTATION_0] = GC9A01_MADCTL_BGR, - [QP_ROTATION_90] = GC9A01_MADCTL_BGR | GC9A01_MADCTL_MX | GC9A01_MADCTL_MV, - [QP_ROTATION_180] = GC9A01_MADCTL_BGR | GC9A01_MADCTL_MX | GC9A01_MADCTL_MY, - [QP_ROTATION_270] = GC9A01_MADCTL_BGR | GC9A01_MADCTL_MV | GC9A01_MADCTL_MY, + [QP_ROTATION_0] = GC9XXX_MADCTL_BGR, + [QP_ROTATION_90] = GC9XXX_MADCTL_BGR | GC9XXX_MADCTL_MX | GC9XXX_MADCTL_MV, + [QP_ROTATION_180] = GC9XXX_MADCTL_BGR | GC9XXX_MADCTL_MX | GC9XXX_MADCTL_MY, + [QP_ROTATION_270] = GC9XXX_MADCTL_BGR | GC9XXX_MADCTL_MV | GC9XXX_MADCTL_MY, }; - qp_comms_command_databyte(device, GC9A01_SET_MEM_ACS_CTL, madctl[rotation]); + qp_comms_command_databyte(device, GC9XXX_SET_MEM_ACS_CTL, madctl[rotation]); return true; } @@ -110,11 +111,11 @@ const tft_panel_dc_reset_painter_driver_vtable_t gc9a01_driver_vtable = { .swap_window_coords = false, .opcodes = { - .display_on = GC9A01_CMD_DISPLAY_ON, - .display_off = GC9A01_CMD_DISPLAY_OFF, - .set_column_address = GC9A01_SET_COL_ADDR, - .set_row_address = GC9A01_SET_PAGE_ADDR, - .enable_writes = GC9A01_SET_MEM, + .display_on = GC9XXX_CMD_DISPLAY_ON, + .display_off = GC9XXX_CMD_DISPLAY_OFF, + .set_column_address = GC9XXX_SET_COL_ADDR, + .set_row_address = GC9XXX_SET_ROW_ADDR, + .enable_writes = GC9XXX_SET_MEM, }, }; diff --git a/drivers/painter/gc9a01/qp_gc9a01.h b/drivers/painter/gc9xxx/qp_gc9a01.h similarity index 100% rename from drivers/painter/gc9a01/qp_gc9a01.h rename to drivers/painter/gc9xxx/qp_gc9a01.h diff --git a/drivers/painter/gc9a01/qp_gc9a01_opcodes.h b/drivers/painter/gc9xxx/qp_gc9a01_opcodes.h similarity index 53% rename from drivers/painter/gc9a01/qp_gc9a01_opcodes.h rename to drivers/painter/gc9xxx/qp_gc9a01_opcodes.h index 828e42752b0c..0faac126dade 100644 --- a/drivers/painter/gc9a01/qp_gc9a01_opcodes.h +++ b/drivers/painter/gc9xxx/qp_gc9a01_opcodes.h @@ -1,4 +1,5 @@ // Copyright 2021 Paul Cotter (@gr1mr3aver) +// Copyright 2024 Fernando Birra // SPDX-License-Identifier: GPL-2.0-or-later #pragma once @@ -9,36 +10,9 @@ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Level 1 command opcodes -#define GC9A01_GET_ID_INFO 0x04 // Get ID information -#define GC9A01_GET_STATUS 0x09 // Get status -#define GC9A01_CMD_SLEEP_ON 0x10 // Enter sleep mode -#define GC9A01_CMD_SLEEP_OFF 0x11 // Exit sleep mode -#define GC9A01_CMD_PARTIAL_ON 0x12 // Enter partial mode -#define GC9A01_CMD_PARTIAL_OFF 0x13 // Exit partial mode -#define GC9A01_CMD_INVERT_ON 0x20 // Enter inverted mode -#define GC9A01_CMD_INVERT_OFF 0x21 // Exit inverted mode -#define GC9A01_CMD_DISPLAY_OFF 0x28 // Disable display -#define GC9A01_CMD_DISPLAY_ON 0x29 // Enable display -#define GC9A01_SET_COL_ADDR 0x2A // Set column address -#define GC9A01_SET_PAGE_ADDR 0x2B // Set page address -#define GC9A01_SET_MEM 0x2C // Set memory -#define GC9A01_SET_PARTIAL_AREA 0x30 // Set partial area -#define GC9A01_SET_VSCROLL 0x33 // Set vertical scroll def -#define GC9A01_CMD_TEARING_ON 0x34 // Tearing line enabled -#define GC9A01_CMD_TEARING_OFF 0x35 // Tearing line disabled -#define GC9A01_SET_MEM_ACS_CTL 0x36 // Set mem access ctl -#define GC9A01_SET_VSCROLL_ADDR 0x37 // Set vscroll start addr -#define GC9A01_CMD_IDLE_OFF 0x38 // Exit idle mode -#define GC9A01_CMD_IDLE_ON 0x39 // Enter idle mode -#define GC9A01_SET_PIX_FMT 0x3A // Set pixel format #define GC9A01_SET_MEM_CONT 0x3C // Set memory continue -#define GC9A01_SET_TEAR_SCANLINE 0x44 // Set tearing scanline -#define GC9A01_GET_TEAR_SCANLINE 0x45 // Get tearing scanline #define GC9A01_SET_BRIGHTNESS 0x51 // Set brightness #define GC9A01_SET_DISPLAY_CTL 0x53 // Set display ctl -#define GC9A01_GET_ID1 0xDA // Get ID1 -#define GC9A01_GET_ID2 0xDB // Get ID2 -#define GC9A01_GET_ID3 0xDC // Get ID3 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Level 2 command opcodes @@ -46,23 +20,22 @@ #define GC9A01_SET_RGB_IF_SIG_CTL 0xB0 // RGB IF signal ctl #define GC9A01_SET_BLANKING_PORCH_CTL 0xB5 // Set blanking porch ctl #define GC9A01_SET_FUNCTION_CTL 0xB6 // Set function ctl -#define GC9A01_SET_TEARING_EFFECT 0xBA // Set backlight ctl 3 +#define GC9A01_SET_TEARING_EFFECT 0xBA // Set tering effect control #define GC9A01_SET_IF_CTL 0xF6 // Set interface control //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Level 3 command opcodes -#define GC9A01_SET_FRAME_RATE 0xE8 // Set frame rate -#define GC9A01_SET_SPI_2DATA 0xE9 // Set frame rate +#define GC9A01_SET_POWER_CTL_7 0xA7 // Set power ctl 7 + #define GC9A01_SET_POWER_CTL_1 0xC1 // Set power ctl 1 #define GC9A01_SET_POWER_CTL_2 0xC3 // Set power ctl 2 #define GC9A01_SET_POWER_CTL_3 0xC4 // Set power ctl 3 #define GC9A01_SET_POWER_CTL_4 0xC9 // Set power ctl 4 -#define GC9A01_SET_POWER_CTL_7 0xA7 // Set power ctl 7 -#define GC9A01_SET_INTER_REG_ENABLE1 0xFE // Enable Inter Register 1 -#define GC9A01_SET_INTER_REG_ENABLE2 0xEF // Enable Inter Register 2 -#define GC9A01_SET_GAMMA1 0xF0 // -#define GC9A01_SET_GAMMA2 0xF1 + +#define GC9A01_SET_FRAME_RATE 0xE8 // Set frame rate +#define GC9A01_SET_SPI_2DATA 0xE9 // Set frame rate + #define GC9A01_SET_GAMMA3 0xF2 #define GC9A01_SET_GAMMA4 0xF3 diff --git a/drivers/painter/gc9xxx/qp_gc9xxx_opcodes.h b/drivers/painter/gc9xxx/qp_gc9xxx_opcodes.h new file mode 100644 index 000000000000..3c56d8399711 --- /dev/null +++ b/drivers/painter/gc9xxx/qp_gc9xxx_opcodes.h @@ -0,0 +1,51 @@ +// Copyright 2021 Paul Cotter (@gr1mr3aver) +// Copyright 2024 Fernando Birra +// SPDX-License-Identifier: GPL-2.0-or-later +#pragma once + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Quantum Painter GC9xxx command opcodes +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +#define GC9XXX_GET_ID_INFO 0x04 // Get ID information +#define GC9XXX_GET_STATUS 0x09 // Get status + +#define GC9XXX_CMD_SLEEP_ON 0x10 // Enter sleep mode +#define GC9XXX_CMD_SLEEP_OFF 0x11 // Exit sleep mode +#define GC9XXX_CMD_PARTIAL_ON 0x12 // Enter partial mode +#define GC9XXX_CMD_PARTIAL_OFF 0x13 // Exit partial mode +#define GC9XXX_CMD_INVERT_OFF 0x20 // Exit inverted mode +#define GC9XXX_CMD_INVERT_ON 0x21 // Enter inverted mode +#define GC9XXX_CMD_DISPLAY_OFF 0x28 // Disable display +#define GC9XXX_CMD_DISPLAY_ON 0x29 // Enable display +#define GC9XXX_SET_COL_ADDR 0x2A // Set column address (MSB(StartCol),LSB(StartCol),MSB(EndCol),LSB(EndCol) +#define GC9XXX_SET_ROW_ADDR 0x2B // Set row address (MSB(StartRow),LSB(StartRow),MSB(EndRow),LSB(EndRow) +#define GC9XXX_SET_MEM 0x2C // Set (write) memory +#define GC9XXX_SET_PARTIAL_AREA 0x30 // Set partial area (MSB(StartRow),LSB(StartRow),MSB(EndRow),LSB(EndRow) +#define GC9XXX_SET_VSCROLL 0x33 // Set vertical scroll MSB(TFA),LSB(TFA),MSB(VSA),LSB(VSA),MSB(BFA),LSB(BFA) +#define GC9XXX_CMD_TEARING_OFF 0x34 // Tearing effect line OFF +#define GC9XXX_CMD_TEARING_ON 0x35 // Tearing effect line ON +#define GC9XXX_SET_MEM_ACS_CTL 0x36 // Set mem access ctl +#define GC9XXX_SET_VSCROLL_ADDR 0x37 // Set vscroll start addr +#define GC9XXX_CMD_IDLE_OFF 0x38 // Exit idle mode +#define GC9XXX_CMD_IDLE_ON 0x39 // Enter idle mode +#define GC9XXX_SET_PIXEL_FORMAT 0x3A // Set pixel format +#define GC9XXX_SET_TEAR_SCANLINE 0x44 // Set tearing scanline (ScanLine[7:0]) +#define GC9XXX_GET_TEAR_SCANLINE 0x45 // Get tearing scanline (ScanLine[7:0]) +#define GC9XXX_GET_ID1 0xDA // Get ID1 +#define GC9XXX_GET_ID2 0xDB // Get ID2 +#define GC9XXX_GET_ID3 0xDC // Get ID3 +#define GC9XXX_SET_INTER_REG_ENABLE1 0xFE // Enable Inter Register 1 +#define GC9XXX_SET_INTER_REG_ENABLE2 0xEF // Enable Inter Register 2 +#define GC9XXX_SET_GAMMA1 0xF0 // Set gamma 1 +#define GC9XXX_SET_GAMMA2 0xF1 // Set gamma 2 + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// MADCTL Flags +#define GC9XXX_MADCTL_MY 0b10000000 +#define GC9XXX_MADCTL_MX 0b01000000 +#define GC9XXX_MADCTL_MV 0b00100000 +#define GC9XXX_MADCTL_ML 0b00010000 +#define GC9XXX_MADCTL_RGB 0b00000000 +#define GC9XXX_MADCTL_BGR 0b00001000 +#define GC9XXX_MADCTL_MH 0b00000100 diff --git a/quantum/painter/rules.mk b/quantum/painter/rules.mk index f17ce882f408..7b2ab702ee11 100644 --- a/quantum/painter/rules.mk +++ b/quantum/painter/rules.mk @@ -132,10 +132,10 @@ define handle_quantum_painter_driver OPT_DEFS += -DQUANTUM_PAINTER_GC9A01_ENABLE -DQUANTUM_PAINTER_GC9A01_SPI_ENABLE COMMON_VPATH += \ $(DRIVER_PATH)/painter/tft_panel \ - $(DRIVER_PATH)/painter/gc9a01 + $(DRIVER_PATH)/painter/gc9xxx SRC += \ $(DRIVER_PATH)/painter/tft_panel/qp_tft_panel.c \ - $(DRIVER_PATH)/painter/gc9a01/qp_gc9a01.c + $(DRIVER_PATH)/painter/gc9xxx/qp_gc9a01.c else ifeq ($$(strip $$(CURRENT_PAINTER_DRIVER)),gc9107_spi) QUANTUM_PAINTER_NEEDS_COMMS_SPI := yes @@ -143,10 +143,10 @@ define handle_quantum_painter_driver OPT_DEFS += -DQUANTUM_PAINTER_GC9107_ENABLE -DQUANTUM_PAINTER_GC9107_SPI_ENABLE COMMON_VPATH += \ $(DRIVER_PATH)/painter/tft_panel \ - $(DRIVER_PATH)/painter/gc9107 + $(DRIVER_PATH)/painter/gc9xxx SRC += \ $(DRIVER_PATH)/painter/tft_panel/qp_tft_panel.c \ - $(DRIVER_PATH)/painter/gc9107/qp_gc9107.c + $(DRIVER_PATH)/painter/gc9xxx/qp_gc9107.c else ifeq ($$(strip $$(CURRENT_PAINTER_DRIVER)),ssd1351_spi) QUANTUM_PAINTER_NEEDS_COMMS_SPI := yes From 91619438ec2ca9852bfe24c97d6b503749f71d8a Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Mon, 5 Feb 2024 18:11:50 +0000 Subject: [PATCH 13/35] Added prefix to gc9107 defined values --- drivers/painter/gc9xxx/qp_gc9107.h | 2 - drivers/painter/gc9xxx/qp_gc9107_opcodes.h | 140 ++++++++++----------- 2 files changed, 70 insertions(+), 72 deletions(-) diff --git a/drivers/painter/gc9xxx/qp_gc9107.h b/drivers/painter/gc9xxx/qp_gc9107.h index 29b2426ab6d0..b0b08f76654a 100644 --- a/drivers/painter/gc9xxx/qp_gc9107.h +++ b/drivers/painter/gc9xxx/qp_gc9107.h @@ -34,6 +34,4 @@ */ painter_device_t qp_gc9107_make_spi_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode); -void qp_gc9107_set_backlight_level(uint16_t level); - #endif // QUANTUM_PAINTER_GC9107_SPI_ENABLE diff --git a/drivers/painter/gc9xxx/qp_gc9107_opcodes.h b/drivers/painter/gc9xxx/qp_gc9107_opcodes.h index 73d160f62960..80153435eef4 100644 --- a/drivers/painter/gc9xxx/qp_gc9107_opcodes.h +++ b/drivers/painter/gc9xxx/qp_gc9107_opcodes.h @@ -27,60 +27,60 @@ // Parameter values for // GC9107_SET_PIXEL_FORMAT -#define PIXEL_FORMAT_12_BPP 0x01 // 12 bits per pixel -#define PIXEL_FORMAT_16_BPP 0x05 // 16 bits per pixel -#define PIXEL_FORMAT_18_BPP 0x06 // 18 bits per pixel +#define GC9107_PIXEL_FORMAT_12_BPP 0x01 // 12 bits per pixel +#define GC9107_PIXEL_FORMAT_16_BPP 0x05 // 16 bits per pixel +#define GC9107_PIXEL_FORMAT_18_BPP 0x06 // 18 bits per pixel // Parameter values for // GC9107_SET_COMPLEMENT_RGB -#define COMPLEMENT_WITH_0 0x00 // R0 <- B0 <- 0, except if data is FFh -#define COMPLEMENT_WITH_1 0x40 // R0 <- B0 <- 1, except if data is 00h -#define COMPLEMENT_WITH_MSB 0x80 // R0 <- R5, B0 <- B5 -#define COMPLEMENT_WITH_LSB 0xC0 // R0 <- B0 <- G0 +#define GC9107_COMPLEMENT_WITH_0 0x00 // R0 <- B0 <- 0, except if data is FFh +#define GC9107_COMPLEMENT_WITH_1 0x40 // R0 <- B0 <- 1, except if data is 00h +#define GC9107_COMPLEMENT_WITH_MSB 0x80 // R0 <- R5, B0 <- B5 +#define GC9107_COMPLEMENT_WITH_LSB 0xC0 // R0 <- B0 <- G0 // Parameter masks for // GC9107_SET_FUNCTION_CTL1 -#define ALLOW_AVDD_VCL_CLK 0b00001000 // Allow AVDD_VCL_CLK command +#define GC9107_ALLOW_AVDD_VCL_CLK 0b00001000 // Allow AVDD_VCL_CLK command // Parameter masks for // GC9107_SET_FUNCTION_CTL2 -#define ALLOW_SET_VGH 0b00000001 // Allow GC9107_SET_VGH -#define ALLOW_SET_VGL 0b00000010 // Allow GC9107_SET_VGL -#define ALLOW_SET_VGH_VGL_CLK 0b00000100 // Alloq GC9107_SET_VGH_VGL_CLK +#define GC9107_ALLOW_SET_VGH 0b00000001 // Allow GC9107_SET_VGH +#define GC9107_ALLOW_SET_VGL 0b00000010 // Allow GC9107_SET_VGL +#define GC9107_ALLOW_SET_VGH_VGL_CLK 0b00000100 // Alloq GC9107_SET_VGH_VGL_CLK // Parameter masks for // GC9107_SET_FUNCTION_CTL3 -#define ALLOW_SET_GAMMA1 0b00000001 // Allow GC9107_SET_GAMMA1 -#define ALLOW_SET_GAMMA2 0b00000010 // Allow GC9107_SET_GAMMA2 +#define GC9107_ALLOW_SET_GAMMA1 0b00000001 // Allow GC9107_SET_GAMMA1 +#define GC9107_ALLOW_SET_GAMMA2 0b00000010 // Allow GC9107_SET_GAMMA2 // Parameter mask for // GC9107_SET_FUNCTION_CTL6 -#define ALLOW_SET_FRAMERATE 0b000000001 // Allow GC9107_SET_FRAME_RATE -#define ALLOW_SET_COMPLEMENT_RGB 0b000010000 // Allow GC9107_SET_COMPLEMENT_RGB -#define ALLOW_SET_BLANK_PORCH 0b000100000 // Allow GFC9107_SET_BLANK_PORCH +#define GC9107_ALLOW_SET_FRAMERATE 0b000000001 // Allow GC9107_SET_FRAME_RATE +#define GC9107_ALLOW_SET_COMPLEMENT_RGB 0b000010000 // Allow GC9107_SET_COMPLEMENT_RGB +#define GC9107_ALLOW_SET_BLANK_PORCH 0b000100000 // Allow GFC9107_SET_BLANK_PORCH // Parameter values for // AVDD_CLK_AD part (Most significant nibble) -#define AVDD_CLK_AD_2T 0x00 -#define AVDD_CLK_AD_3T 0x10 -#define AVDD_CLK_AD_4T 0x20 -#define AVDD_CLK_AD_5T 0x30 -#define AVDD_CLK_AD_6T 0x40 -#define AVDD_CLK_AD_7T 0x50 -#define AVDD_CLK_AD_8T 0x60 -#define AVDD_CLK_AD_9T 0x70 +#define GC9107_AVDD_CLK_AD_2T 0x00 +#define GC9107_AVDD_CLK_AD_3T 0x10 +#define GC9107_AVDD_CLK_AD_4T 0x20 +#define GC9107_AVDD_CLK_AD_5T 0x30 +#define GC9107_AVDD_CLK_AD_6T 0x40 +#define GC9107_AVDD_CLK_AD_7T 0x50 +#define GC9107_AVDD_CLK_AD_8T 0x60 +#define GC9107_AVDD_CLK_AD_9T 0x70 // Parameter values for // VCL_CLK_AD part (Least significant nibble) -#define VCL_CLK_AD_2T 0x00 -#define VCL_CLK_AD_3T 0x01 -#define VCL_CLK_AD_4T 0x02 -#define VCL_CLK_AD_5T 0x03 -#define VCL_CLK_AD_6T 0x04 -#define VCL_CLK_AD_7T 0x05 -#define VCL_CLK_AD_8T 0x06 -#define VCL_CLK_AD_9T 0x07 +#define GC9107_VCL_CLK_AD_2T 0x00 +#define GC9107_VCL_CLK_AD_3T 0x01 +#define GC9107_VCL_CLK_AD_4T 0x02 +#define GC9107_VCL_CLK_AD_5T 0x03 +#define GC9107_VCL_CLK_AD_6T 0x04 +#define GC9107_VCL_CLK_AD_7T 0x05 +#define GC9107_VCL_CLK_AD_8T 0x06 +#define GC9107_VCL_CLK_AD_9T 0x07 // Parameter values for // GC9107_SET_VGH -#define VGH_P100 0x20 // +10 V -#define VGH_P110 0x21 // +11 V -#define VGH_P120 0x22 // +12 V -#define VGH_P130 0x23 // +13 V -#define VGH_P140 0x24 // +14 V -#define VGH_P150 0x25 // +15 V +#define GC9107_VGH_P100 0x20 // +10 V +#define GC9107_VGH_P110 0x21 // +11 V +#define GC9107_VGH_P120 0x22 // +12 V +#define GC9107_VGH_P130 0x23 // +13 V +#define GC9107_VGH_P140 0x24 // +14 V +#define GC9107_VGH_P150 0x25 // +15 V // Parameter values for // GC9107_SET_VGL #define VGL_N_075 0x40 // -7.5 V @@ -93,38 +93,38 @@ #define VGL_N_130 0x47 // -13.0 V // Parameter masks for // GC9107_SET_VGH_VGL_CLK (VGH Divisor) -#define VGH_CLK_DIV_2 0x00 // Clock divisor = 2 -> 6.0 Mhz -#define VGH_CLK_DIV_3 0x10 // Clock divisor = 3 -> 4.0 Mhz -#define VGH_CLK_DIV_4 0x20 // Clock divisor = 4 -> 3.0 Mhz -#define VGH_CLK_DIV_5 0x30 // Clock divisor = 5 -> 2.4 Mhz -#define VGH_CLK_DIV_6 0x40 // Clock divisor = 6 -> 2.0 Mhz -#define VGH_CLK_DIV_7 0x50 // Clock divisor = 7 -> 1.7 Mhz -#define VGH_CLK_DIV_8 0x60 // Clock divisor = 8 -> 1.5 Mhz -#define VGH_CLK_DIV_9 0x70 // Clock divisor = 9 -> 1.3 Mhz -#define VGH_CLK_DIV_10 0x80 // Clock divisor = 10 -> 1.2 Mhz -#define VGH_CLK_DIV_12 0x90 // Clock divisor = 12 -> 1.0 Mhz -#define VGH_CLK_DIV_15 0xA0 // Clock divisor = 15 -> 0.8 Mhz -#define VGH_CLK_DIV_20 0xB0 // Clock divisor = 20 -> 0.6 Mhz -#define VGH_CLK_DIV_24 0xC0 // Clock divisor = 24 -> 0.5 Mhz -#define VGH_CLK_DIV_30 0xD0 // Clock divisor = 30 -> 0.4 Mhz -#define VGH_CLK_DIV_40 0xE0 // Clock divisor = 40 -> 0.3 Mhz -#define VGH_CLK_DIV_60 0xE0 // Clock divisor = 40 -> 0.2 Mhz +#define GC9107_VGH_CLK_DIV_2 0x00 // Clock divisor = 2 -> 6.0 Mhz +#define GC9107_VGH_CLK_DIV_3 0x10 // Clock divisor = 3 -> 4.0 Mhz +#define GC9107_VGH_CLK_DIV_4 0x20 // Clock divisor = 4 -> 3.0 Mhz +#define GC9107_VGH_CLK_DIV_5 0x30 // Clock divisor = 5 -> 2.4 Mhz +#define GC9107_VGH_CLK_DIV_6 0x40 // Clock divisor = 6 -> 2.0 Mhz +#define GC9107_VGH_CLK_DIV_7 0x50 // Clock divisor = 7 -> 1.7 Mhz +#define GC9107_VGH_CLK_DIV_8 0x60 // Clock divisor = 8 -> 1.5 Mhz +#define GC9107_VGH_CLK_DIV_9 0x70 // Clock divisor = 9 -> 1.3 Mhz +#define GC9107_VGH_CLK_DIV_10 0x80 // Clock divisor = 10 -> 1.2 Mhz +#define GC9107_VGH_CLK_DIV_12 0x90 // Clock divisor = 12 -> 1.0 Mhz +#define GC9107_VGH_CLK_DIV_15 0xA0 // Clock divisor = 15 -> 0.8 Mhz +#define GC9107_VGH_CLK_DIV_20 0xB0 // Clock divisor = 20 -> 0.6 Mhz +#define GC9107_VGH_CLK_DIV_24 0xC0 // Clock divisor = 24 -> 0.5 Mhz +#define GC9107_VGH_CLK_DIV_30 0xD0 // Clock divisor = 30 -> 0.4 Mhz +#define GC9107_VGH_CLK_DIV_40 0xE0 // Clock divisor = 40 -> 0.3 Mhz +#define GC9107_VGH_CLK_DIV_60 0xE0 // Clock divisor = 40 -> 0.2 Mhz // Parameter masks for // GC9107_SET_VGH_VGL_CLK (VGL Divisor) -#define VGL_CLK_DIV_2 0x00 // Clock divisor = 2 -> 6.0 Mhz -#define VGL_CLK_DIV_3 0x01 // Clock divisor = 3 -> 4.0 Mhz -#define VGL_CLK_DIV_4 0x02 // Clock divisor = 4 -> 3.0 Mhz -#define VGL_CLK_DIV_5 0x03 // Clock divisor = 5 -> 2.4 Mhz -#define VGL_CLK_DIV_6 0x04 // Clock divisor = 6 -> 2.0 Mhz -#define VGL_CLK_DIV_7 0x05 // Clock divisor = 7 -> 1.7 Mhz -#define VGL_CLK_DIV_8 0x06 // Clock divisor = 8 -> 1.5 Mhz -#define VGL_CLK_DIV_9 0x07 // Clock divisor = 9 -> 1.3 Mhz -#define VGL_CLK_DIV_10 0x08 // Clock divisor = 10 -> 1.2 Mhz -#define VGL_CLK_DIV_12 0x09 // Clock divisor = 12 -> 1.0 Mhz -#define VGL_CLK_DIV_15 0x0A // Clock divisor = 15 -> 0.8 Mhz -#define VGL_CLK_DIV_20 0x0B // Clock divisor = 20 -> 0.6 Mhz -#define VGL_CLK_DIV_24 0x0C // Clock divisor = 24 -> 0.5 Mhz -#define VGL_CLK_DIV_30 0x0D // Clock divisor = 30 -> 0.4 Mhz -#define VGL_CLK_DIV_40 0x0E // Clock divisor = 40 -> 0.3 Mhz -#define VGL_CLK_DIV_60 0x0E // Clock divisor = 40 -> 0.2 Mhz +#define GC9107_VGL_CLK_DIV_2 0x00 // Clock divisor = 2 -> 6.0 Mhz +#define GC9107_VGL_CLK_DIV_3 0x01 // Clock divisor = 3 -> 4.0 Mhz +#define GC9107_VGL_CLK_DIV_4 0x02 // Clock divisor = 4 -> 3.0 Mhz +#define GC9107_VGL_CLK_DIV_5 0x03 // Clock divisor = 5 -> 2.4 Mhz +#define GC9107_VGL_CLK_DIV_6 0x04 // Clock divisor = 6 -> 2.0 Mhz +#define GC9107_VGL_CLK_DIV_7 0x05 // Clock divisor = 7 -> 1.7 Mhz +#define GC9107_VGL_CLK_DIV_8 0x06 // Clock divisor = 8 -> 1.5 Mhz +#define GC9107_VGL_CLK_DIV_9 0x07 // Clock divisor = 9 -> 1.3 Mhz +#define GC9107_VGL_CLK_DIV_10 0x08 // Clock divisor = 10 -> 1.2 Mhz +#define GC9107_VGL_CLK_DIV_12 0x09 // Clock divisor = 12 -> 1.0 Mhz +#define GC9107_VGL_CLK_DIV_15 0x0A // Clock divisor = 15 -> 0.8 Mhz +#define GC9107_VGL_CLK_DIV_20 0x0B // Clock divisor = 20 -> 0.6 Mhz +#define GC9107_VGL_CLK_DIV_24 0x0C // Clock divisor = 24 -> 0.5 Mhz +#define GC9107_VGL_CLK_DIV_30 0x0D // Clock divisor = 30 -> 0.4 Mhz +#define GC9107_VGL_CLK_DIV_40 0x0E // Clock divisor = 40 -> 0.3 Mhz +#define GC9107_VGL_CLK_DIV_60 0x0E // Clock divisor = 40 -> 0.2 Mhz From 32dc1dc313246e03b012eeaffb228a09c3a5046f Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Fri, 16 Feb 2024 00:39:37 +0000 Subject: [PATCH 14/35] Driver familiy GC9XXX (supports GC9A01 and GC9107) --- drivers/painter/gc9xxx/qp_gc9107.c | 17 ++----- drivers/painter/gc9xxx/qp_gc9a01.c | 50 +++----------------- drivers/painter/gc9xxx/qp_gc9a01_opcodes.h | 54 ++++++++++++++++++---- 3 files changed, 54 insertions(+), 67 deletions(-) diff --git a/drivers/painter/gc9xxx/qp_gc9107.c b/drivers/painter/gc9xxx/qp_gc9107.c index b7beb57b55e1..c2bb58cb3755 100644 --- a/drivers/painter/gc9xxx/qp_gc9107.c +++ b/drivers/painter/gc9xxx/qp_gc9107.c @@ -20,25 +20,14 @@ __attribute__((weak)) bool qp_gc9107_init(painter_device_t device, painter_rotat // A lot of these "unknown" opcodes are sourced from other OSS projects and are seemingly required for this display to function. // clang-format off + const uint8_t gc9107_init_sequence[] = { // Command, Delay, N, Data[N] // The following commands are not really needed since the functionality isn't being used GC9XXX_SET_INTER_REG_ENABLE1, 5, 0, GC9XXX_SET_INTER_REG_ENABLE2, 5, 0, - GC9107_SET_FUNCTION_CTL1, 0, 1, ALLOW_AVDD_VCL_CLK, - GC9107_SET_FUNCTION_CTL2, 0, 1, ALLOW_SET_VGH | ALLOW_SET_VGL | ALLOW_SET_VGH_VGL_CLK, - GC9107_SET_FUNCTION_CTL3, 0, 1, ALLOW_SET_GAMMA1 | ALLOW_SET_GAMMA2, - GC9107_SET_FUNCTION_CTL6, 0, 1, ALLOW_SET_FRAMERATE | ALLOW_SET_COMPLEMENT_RGB | ALLOW_SET_BLANK_PORCH, - - // The following commands were found on LovyanGFX (https://github.com/lovyan03/LovyanGFX) but they are not required - // GC9107_CMD_TEARING_OFF, 0, 0, - // GC9107_SET_VGH, 0, 1, 0x24, - // GC9107_SET_VGL, 0, 1, 0x48, - // GC9107_SET_VGH_VGL_CLK, 0, 1, VGH_CLK_DIV_4 | VGL_CLK_DIV_4, - // GC9107_SET_GAMMA1, 0, 14, 0x1F, 0x28, 0x04, 0x3E, 0x2A, 0x2E, 0x20, 0x00, 0x0C, 0x06, 0x00, 0x1C, 0x1F, 0x0F, - // GC9107_SET_GAMMA2, 0, 14, 0x00, 0x2D, 0x2F, 0x3F, 0x6F, 0x1C, 0x0B, 0x00, 0x00, 0x00, 0x07, 0x0D, 0x11, 0x0F, - - GC9XXX_SET_PIXEL_FORMAT, 0, 1, PIXEL_FORMAT_16_BPP, + + GC9XXX_SET_PIXEL_FORMAT, 0, 1, GC9107_PIXEL_FORMAT_16_BPP, GC9XXX_CMD_INVERT_ON, 0, 0, GC9XXX_CMD_SLEEP_OFF, 120, 0, GC9XXX_CMD_DISPLAY_ON, 20, 0 diff --git a/drivers/painter/gc9xxx/qp_gc9a01.c b/drivers/painter/gc9xxx/qp_gc9a01.c index 8130942b2be1..ac1b91fef503 100644 --- a/drivers/painter/gc9xxx/qp_gc9a01.c +++ b/drivers/painter/gc9xxx/qp_gc9a01.c @@ -21,61 +21,23 @@ tft_panel_dc_reset_painter_device_t gc9a01_drivers[GC9A01_NUM_DEVICES] = {0}; __attribute__((weak)) bool qp_gc9a01_init(painter_device_t device, painter_rotation_t rotation) { // A lot of these "unknown" opcodes are sourced from other OSS projects and are seemingly required for this display to function. // clang-format off + const uint8_t gc9a01_init_sequence[] = { // Command, Delay, N, Data[N] - GC9XXX_SET_INTER_REG_ENABLE2, 0, 0, - 0xEB, 0, 1, 0x14, GC9XXX_SET_INTER_REG_ENABLE1, 0, 0, GC9XXX_SET_INTER_REG_ENABLE2, 0, 0, - 0xEB, 0, 1, 0x14, 0x84, 0, 1, 0x40, - 0x85, 0, 1, 0xFF, - 0x86, 0, 1, 0xFF, - 0x87, 0, 1, 0xFF, - 0x88, 0, 1, 0x0A, - 0x89, 0, 1, 0x21, - 0x8a, 0, 1, 0x00, - 0x8b, 0, 1, 0x80, - 0x8c, 0, 1, 0x01, - 0x8d, 0, 1, 0x01, - 0x8e, 0, 1, 0xFF, - 0x8f, 0, 1, 0xFF, - GC9A01_SET_FUNCTION_CTL, 0, 2, 0x00, 0x20, - GC9XXX_SET_PIXEL_FORMAT, 0, 1, 0x55, - 0x90, 0, 4, 0x08, 0x08, 0x08, 0x08, - 0xBD, 0, 1, 0x06, - 0xBC, 0, 1, 0x00, - 0xFF, 0, 3, 0x60, 0x01, 0x04, - GC9A01_SET_POWER_CTL_2, 0, 1, 0x13, - GC9A01_SET_POWER_CTL_3, 0, 1, 0x13, - GC9A01_SET_POWER_CTL_4, 0, 1, 0x22, - 0xBE, 0, 1, 0x11, - 0xE1, 0, 2, 0x10, 0x0E, - 0xDF, 0, 3, 0x21, 0x0C, 0x02, - GC9XXX_SET_GAMMA1, 0, 6, 0x45, 0x09, 0x08, 0x08, 0x26, 0x2A, - GC9XXX_SET_GAMMA2, 0, 6, 0x43, 0x70, 0x72, 0x36, 0x37, 0x6F, - GC9A01_SET_GAMMA3, 0, 6, 0x45, 0x09, 0x08, 0x08, 0x26, 0x2A, - GC9A01_SET_GAMMA4, 0, 6, 0x43, 0x70, 0x72, 0x36, 0x37, 0x6F, - 0xED, 0, 2, 0x1B, 0x0B, - 0xAE, 0, 1, 0x77, - 0xCD, 0, 1, 0x63, - 0x70, 0, 9, 0x07, 0x07, 0x04, 0x0E, 0x0F, 0x09, 0x07, 0x08, 0x03, - GC9A01_SET_FRAME_RATE, 0, 1, 0x34, - 0x62, 0, 12, 0x18, 0x0D, 0x71, 0xED, 0x70, 0x70, 0x18, 0x0F, 0x71, 0xEF, 0x70, 0x70, - 0x63, 0, 12, 0x18, 0x11, 0x71, 0xF1, 0x70, 0x70, 0x18, 0x13, 0x71, 0xF3, 0x70, 0x70, - 0x64, 0, 7, 0x28, 0x29, 0xF1, 0x01, 0xF1, 0x00, 0x07, + GC9A01_SET_FUNCTION_CTL, 0, 3, 0x00, GC9A01_SOURCE_OUTPUT_SCAN_DIRECTION_S360_TO_S1 | GC9A01_GATE_OUTPUT_SCAN_DIRECTION_G1_TO_G32, GC9A01_LCD_DRIVE_LINE_240, // Only works if the previous command is present (undocumented) 0x66, 0, 10, 0x3C, 0x00, 0xCD, 0x67, 0x45, 0x45, 0x10, 0x00, 0x00, 0x00, 0x67, 0, 10, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x54, 0x10, 0x32, 0x98, - 0x74, 0, 7, 0x10, 0x85, 0x80, 0x00, 0x00, 0x4E, 0x00, - 0x98, 0, 2, 0x3E, 0x07, GC9XXX_CMD_TEARING_ON, 0, 0, - GC9XXX_CMD_INVERT_OFF, 0, 0, - GC9XXX_CMD_SLEEP_OFF, 120, 0, - GC9XXX_CMD_DISPLAY_ON, 20, 0 + GC9XXX_SET_PIXEL_FORMAT, 0, 1, GC9A01_PIXEL_FORMAT_16_BPP_MCUIF, + GC9XXX_CMD_INVERT_ON, 0, 0, + GC9XXX_CMD_SLEEP_OFF, 120, 0, + GC9XXX_CMD_DISPLAY_ON, 20, 0 }; // clang-format on - // clang-format on qp_comms_bulk_command_sequence(device, gc9a01_init_sequence, sizeof(gc9a01_init_sequence)); // Configure the rotation (i.e. the ordering and direction of memory writes in GRAM) diff --git a/drivers/painter/gc9xxx/qp_gc9a01_opcodes.h b/drivers/painter/gc9xxx/qp_gc9a01_opcodes.h index 0faac126dade..c384f85a28c4 100644 --- a/drivers/painter/gc9xxx/qp_gc9a01_opcodes.h +++ b/drivers/painter/gc9xxx/qp_gc9a01_opcodes.h @@ -39,12 +39,48 @@ #define GC9A01_SET_GAMMA3 0xF2 #define GC9A01_SET_GAMMA4 0xF3 -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// MADCTL Flags -#define GC9A01_MADCTL_MY 0b10000000 -#define GC9A01_MADCTL_MX 0b01000000 -#define GC9A01_MADCTL_MV 0b00100000 -#define GC9A01_MADCTL_ML 0b00010000 -#define GC9A01_MADCTL_RGB 0b00000000 -#define GC9A01_MADCTL_BGR 0b00001000 -#define GC9A01_MADCTL_MH 0b00000100 +#define GC9A01_PIXEL_FORMAT_12_BPP_MCUIF 0x03 // 12 bits/pixel MCU interface format +#define GC9A01_PIXEL_FORMAT_16_BPP_MCUIF 0x05 // 16 bits/pixel MCU interface format +#define GC9A01_PIXEL_FORMAT_18_BPP_MCUIF 0x06 // 18 bits/pixel MCU interface format +#define GC9A01_PIXEL_FORMAT_16_BPP_RGBIF 0x05 // 16 bits/pixel MCU interface format +#define GC9A01_PIXEL_FORMAT_18_BPP_RGBIF 0x06 // 18 bits/pixel MCU interface format + +#define GC9A01_SOURCE_OUTPUT_SCAN_DIRECTION_S1_TO_S360 0b00000000 +#define GC9A01_SOURCE_OUTPUT_SCAN_DIRECTION_S360_TO_S1 0b00100000 +#define GC9A01_GATE_OUTPUT_SCAN_DIRECTION_G1_TO_G32 0b00000000 +#define GC9A01_GATE_OUTPUT_SCAN_DIRECTION_G32_TO_G1 0b01000000 +#define GC9A01_SCAN_MODE_INTER 0x10 + +#define GC9A01_LCD_DRIVE_LINE_16 0x01 +#define GC9A01_LCD_DRIVE_LINE_24 0x02 +#define GC9A01_LCD_DRIVE_LINE_32 0x03 +#define GC9A01_LCD_DRIVE_LINE_40 0x04 +#define GC9A01_LCD_DRIVE_LINE_48 0x05 +#define GC9A01_LCD_DRIVE_LINE_56 0x06 +#define GC9A01_LCD_DRIVE_LINE_64 0x07 +#define GC9A01_LCD_DRIVE_LINE_72 0x08 +#define GC9A01_LCD_DRIVE_LINE_80 0x09 +#define GC9A01_LCD_DRIVE_LINE_88 0x0A +#define GC9A01_LCD_DRIVE_LINE_96 0x0B +#define GC9A01_LCD_DRIVE_LINE_104 0x0C +#define GC9A01_LCD_DRIVE_LINE_112 0x0D +#define GC9A01_LCD_DRIVE_LINE_120 0x0E +#define GC9A01_LCD_DRIVE_LINE_128 0x0F +#define GC9A01_LCD_DRIVE_LINE_136 0x10 +#define GC9A01_LCD_DRIVE_LINE_144 0x11 +#define GC9A01_LCD_DRIVE_LINE_152 0x12 +#define GC9A01_LCD_DRIVE_LINE_160 0x13 +#define GC9A01_LCD_DRIVE_LINE_168 0x14 +#define GC9A01_LCD_DRIVE_LINE_176 0x15 +#define GC9A01_LCD_DRIVE_LINE_184 0x16 +#define GC9A01_LCD_DRIVE_LINE_192 0x17 +#define GC9A01_LCD_DRIVE_LINE_200 0x18 +#define GC9A01_LCD_DRIVE_LINE_208 0x19 +#define GC9A01_LCD_DRIVE_LINE_216 0x1A +#define GC9A01_LCD_DRIVE_LINE_224 0x1B +#define GC9A01_LCD_DRIVE_LINE_232 0x1C +#define GC9A01_LCD_DRIVE_LINE_240 0x1D + + + + From 641d79037bdf9165c6920421772aff9364f770a8 Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Fri, 16 Feb 2024 17:15:43 +0000 Subject: [PATCH 15/35] Added gamma calls to improve colors --- drivers/painter/gc9xxx/qp_gc9a01.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/painter/gc9xxx/qp_gc9a01.c b/drivers/painter/gc9xxx/qp_gc9a01.c index ac1b91fef503..b4df99c555ed 100644 --- a/drivers/painter/gc9xxx/qp_gc9a01.c +++ b/drivers/painter/gc9xxx/qp_gc9a01.c @@ -28,6 +28,10 @@ __attribute__((weak)) bool qp_gc9a01_init(painter_device_t device, painter_rotat GC9XXX_SET_INTER_REG_ENABLE2, 0, 0, 0x84, 0, 1, 0x40, GC9A01_SET_FUNCTION_CTL, 0, 3, 0x00, GC9A01_SOURCE_OUTPUT_SCAN_DIRECTION_S360_TO_S1 | GC9A01_GATE_OUTPUT_SCAN_DIRECTION_G1_TO_G32, GC9A01_LCD_DRIVE_LINE_240, // Only works if the previous command is present (undocumented) + GC9XXX_SET_GAMMA1, 0, 6, 0x45, 0x09, 0x08, 0x08, 0x26, 0x2A, + GC9XXX_SET_GAMMA2, 0, 6, 0x43, 0x70, 0x72, 0x36, 0x37, 0x6F, + GC9A01_SET_GAMMA3, 0, 6, 0x45, 0x09, 0x08, 0x08, 0x26, 0x2A, + GC9A01_SET_GAMMA4, 0, 6, 0x43, 0x70, 0x72, 0x36, 0x37, 0x6F, 0x66, 0, 10, 0x3C, 0x00, 0xCD, 0x67, 0x45, 0x45, 0x10, 0x00, 0x00, 0x00, 0x67, 0, 10, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x54, 0x10, 0x32, 0x98, GC9XXX_CMD_TEARING_ON, 0, 0, From 1de28e2c8acd2a079d0e0c1a7184c810267d80b0 Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Fri, 16 Feb 2024 17:28:46 +0000 Subject: [PATCH 16/35] Added power control calls to improve colors. Code formated --- drivers/painter/gc9xxx/qp_gc9107_opcodes.h | 165 ++++++++++----------- drivers/painter/gc9xxx/qp_gc9a01.c | 3 + drivers/painter/gc9xxx/qp_gc9a01_opcodes.h | 24 ++- drivers/painter/gc9xxx/qp_gc9xxx_opcodes.h | 62 ++++---- 4 files changed, 126 insertions(+), 128 deletions(-) diff --git a/drivers/painter/gc9xxx/qp_gc9107_opcodes.h b/drivers/painter/gc9xxx/qp_gc9107_opcodes.h index 80153435eef4..107186b024f5 100644 --- a/drivers/painter/gc9xxx/qp_gc9107_opcodes.h +++ b/drivers/painter/gc9xxx/qp_gc9107_opcodes.h @@ -6,54 +6,54 @@ // Quantum Painter GC9107 command opcodes //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#define GC9107_GET_POWER_MODE 0x0A // Get power mode -#define GC9107_GET_MADCTL 0x0B // Get MADCTL -#define GC9107_GET_PIXEL_FMT 0x0C // Get pixel format -#define GC9107_GET_IMAGE_FMT 0x0D // Get image format -#define GC9107_GET_SIGNAL_MODE 0x0E // Get signal mode -#define GC9107_GET_DIAG_RESULT 0x0F // Get self-diagnostic results -#define GC9107_SET_COMPLEMENT_RGB 0xAC // Set complement Principle RGB -#define GC9107_SET_BLANK_PORCH 0xAD // Set blank porch control, 0;front_porch[6:0],0;back_porch[6:0] -#define GC9107_SET_FUNCTION_CTL1 0xB1 // Set access to AVDD_VCL_CLK and VGH_VGL_CLK commands -#define GC9107_SET_FUNCTION_CTL2 0xB2 // Set access to VGH, VGH control commands -#define GC9107_SET_FUNCTION_CTL3 0xB3 // Set access to Gamma control commands -#define GC9107_SET_FUNCTION_CTL6 0xB6 // Set access to commands SET_FRAME_RATE, SET_COMPLEMENT_RGB and SET_BLANK_PORCH -#define GC9107_SET_DISPLAY_INVERSION 0xCB // Set Display Inversion control -#define GC9107_SET_CUSTOM_ID_INFO 0xD3 // Set customized display id information -#define GC9107_AVDD_VCL_CLK 0xE3 // AVDD_CLK -#define GC9107_SET_VGH 0xE8 // Set VGH -#define GC9107_SET_VGL 0xE9 // Set VGL -#define GC9107_SET_VGH_VGL_CLK 0xEA // Set VGH and VGL clock divisors +#define GC9107_GET_POWER_MODE 0x0A // Get power mode +#define GC9107_GET_MADCTL 0x0B // Get MADCTL +#define GC9107_GET_PIXEL_FMT 0x0C // Get pixel format +#define GC9107_GET_IMAGE_FMT 0x0D // Get image format +#define GC9107_GET_SIGNAL_MODE 0x0E // Get signal mode +#define GC9107_GET_DIAG_RESULT 0x0F // Get self-diagnostic results +#define GC9107_SET_COMPLEMENT_RGB 0xAC // Set complement Principle RGB +#define GC9107_SET_BLANK_PORCH 0xAD // Set blank porch control, 0;front_porch[6:0],0;back_porch[6:0] +#define GC9107_SET_FUNCTION_CTL1 0xB1 // Set access to AVDD_VCL_CLK and VGH_VGL_CLK commands +#define GC9107_SET_FUNCTION_CTL2 0xB2 // Set access to VGH, VGH control commands +#define GC9107_SET_FUNCTION_CTL3 0xB3 // Set access to Gamma control commands +#define GC9107_SET_FUNCTION_CTL6 0xB6 // Set access to commands SET_FRAME_RATE, SET_COMPLEMENT_RGB and SET_BLANK_PORCH +#define GC9107_SET_DISPLAY_INVERSION 0xCB // Set Display Inversion control +#define GC9107_SET_CUSTOM_ID_INFO 0xD3 // Set customized display id information +#define GC9107_AVDD_VCL_CLK 0xE3 // AVDD_CLK +#define GC9107_SET_VGH 0xE8 // Set VGH +#define GC9107_SET_VGL 0xE9 // Set VGL +#define GC9107_SET_VGH_VGL_CLK 0xEA // Set VGH and VGL clock divisors // Parameter values for // GC9107_SET_PIXEL_FORMAT -#define GC9107_PIXEL_FORMAT_12_BPP 0x01 // 12 bits per pixel -#define GC9107_PIXEL_FORMAT_16_BPP 0x05 // 16 bits per pixel -#define GC9107_PIXEL_FORMAT_18_BPP 0x06 // 18 bits per pixel +#define GC9107_PIXEL_FORMAT_12_BPP 0x01 // 12 bits per pixel +#define GC9107_PIXEL_FORMAT_16_BPP 0x05 // 16 bits per pixel +#define GC9107_PIXEL_FORMAT_18_BPP 0x06 // 18 bits per pixel // Parameter values for // GC9107_SET_COMPLEMENT_RGB -#define GC9107_COMPLEMENT_WITH_0 0x00 // R0 <- B0 <- 0, except if data is FFh -#define GC9107_COMPLEMENT_WITH_1 0x40 // R0 <- B0 <- 1, except if data is 00h -#define GC9107_COMPLEMENT_WITH_MSB 0x80 // R0 <- R5, B0 <- B5 -#define GC9107_COMPLEMENT_WITH_LSB 0xC0 // R0 <- B0 <- G0 +#define GC9107_COMPLEMENT_WITH_0 0x00 // R0 <- B0 <- 0, except if data is FFh +#define GC9107_COMPLEMENT_WITH_1 0x40 // R0 <- B0 <- 1, except if data is 00h +#define GC9107_COMPLEMENT_WITH_MSB 0x80 // R0 <- R5, B0 <- B5 +#define GC9107_COMPLEMENT_WITH_LSB 0xC0 // R0 <- B0 <- G0 // Parameter masks for // GC9107_SET_FUNCTION_CTL1 -#define GC9107_ALLOW_AVDD_VCL_CLK 0b00001000 // Allow AVDD_VCL_CLK command +#define GC9107_ALLOW_AVDD_VCL_CLK 0b00001000 // Allow AVDD_VCL_CLK command // Parameter masks for // GC9107_SET_FUNCTION_CTL2 -#define GC9107_ALLOW_SET_VGH 0b00000001 // Allow GC9107_SET_VGH -#define GC9107_ALLOW_SET_VGL 0b00000010 // Allow GC9107_SET_VGL -#define GC9107_ALLOW_SET_VGH_VGL_CLK 0b00000100 // Alloq GC9107_SET_VGH_VGL_CLK +#define GC9107_ALLOW_SET_VGH 0b00000001 // Allow GC9107_SET_VGH +#define GC9107_ALLOW_SET_VGL 0b00000010 // Allow GC9107_SET_VGL +#define GC9107_ALLOW_SET_VGH_VGL_CLK 0b00000100 // Alloq GC9107_SET_VGH_VGL_CLK // Parameter masks for // GC9107_SET_FUNCTION_CTL3 -#define GC9107_ALLOW_SET_GAMMA1 0b00000001 // Allow GC9107_SET_GAMMA1 -#define GC9107_ALLOW_SET_GAMMA2 0b00000010 // Allow GC9107_SET_GAMMA2 +#define GC9107_ALLOW_SET_GAMMA1 0b00000001 // Allow GC9107_SET_GAMMA1 +#define GC9107_ALLOW_SET_GAMMA2 0b00000010 // Allow GC9107_SET_GAMMA2 // Parameter mask for // GC9107_SET_FUNCTION_CTL6 -#define GC9107_ALLOW_SET_FRAMERATE 0b000000001 // Allow GC9107_SET_FRAME_RATE -#define GC9107_ALLOW_SET_COMPLEMENT_RGB 0b000010000 // Allow GC9107_SET_COMPLEMENT_RGB -#define GC9107_ALLOW_SET_BLANK_PORCH 0b000100000 // Allow GFC9107_SET_BLANK_PORCH -// Parameter values for +#define GC9107_ALLOW_SET_FRAMERATE 0b000000001 // Allow GC9107_SET_FRAME_RATE +#define GC9107_ALLOW_SET_COMPLEMENT_RGB 0b000010000 // Allow GC9107_SET_COMPLEMENT_RGB +#define GC9107_ALLOW_SET_BLANK_PORCH 0b000100000 // Allow GFC9107_SET_BLANK_PORCH +// Parameter values for // AVDD_CLK_AD part (Most significant nibble) #define GC9107_AVDD_CLK_AD_2T 0x00 #define GC9107_AVDD_CLK_AD_3T 0x10 @@ -63,7 +63,7 @@ #define GC9107_AVDD_CLK_AD_7T 0x50 #define GC9107_AVDD_CLK_AD_8T 0x60 #define GC9107_AVDD_CLK_AD_9T 0x70 -// Parameter values for +// Parameter values for // VCL_CLK_AD part (Least significant nibble) #define GC9107_VCL_CLK_AD_2T 0x00 #define GC9107_VCL_CLK_AD_3T 0x01 @@ -75,56 +75,55 @@ #define GC9107_VCL_CLK_AD_9T 0x07 // Parameter values for // GC9107_SET_VGH -#define GC9107_VGH_P100 0x20 // +10 V -#define GC9107_VGH_P110 0x21 // +11 V -#define GC9107_VGH_P120 0x22 // +12 V -#define GC9107_VGH_P130 0x23 // +13 V -#define GC9107_VGH_P140 0x24 // +14 V -#define GC9107_VGH_P150 0x25 // +15 V +#define GC9107_VGH_P100 0x20 // +10 V +#define GC9107_VGH_P110 0x21 // +11 V +#define GC9107_VGH_P120 0x22 // +12 V +#define GC9107_VGH_P130 0x23 // +13 V +#define GC9107_VGH_P140 0x24 // +14 V +#define GC9107_VGH_P150 0x25 // +15 V // Parameter values for // GC9107_SET_VGL -#define VGL_N_075 0x40 // -7.5 V -#define VGL_N_085 0x41 // -8.5 V -#define VGL_N_095 0x42 // -9.5 V -#define VGL_N_100 0x43 // -10.0 V -#define VGL_N_105 0x44 // -10.5 V -#define VGL_N_110 0x45 // -11.0 V -#define VGL_N_120 0x46 // -12.0 V -#define VGL_N_130 0x47 // -13.0 V +#define VGL_N_075 0x40 // -7.5 V +#define VGL_N_085 0x41 // -8.5 V +#define VGL_N_095 0x42 // -9.5 V +#define VGL_N_100 0x43 // -10.0 V +#define VGL_N_105 0x44 // -10.5 V +#define VGL_N_110 0x45 // -11.0 V +#define VGL_N_120 0x46 // -12.0 V +#define VGL_N_130 0x47 // -13.0 V // Parameter masks for // GC9107_SET_VGH_VGL_CLK (VGH Divisor) -#define GC9107_VGH_CLK_DIV_2 0x00 // Clock divisor = 2 -> 6.0 Mhz -#define GC9107_VGH_CLK_DIV_3 0x10 // Clock divisor = 3 -> 4.0 Mhz -#define GC9107_VGH_CLK_DIV_4 0x20 // Clock divisor = 4 -> 3.0 Mhz -#define GC9107_VGH_CLK_DIV_5 0x30 // Clock divisor = 5 -> 2.4 Mhz -#define GC9107_VGH_CLK_DIV_6 0x40 // Clock divisor = 6 -> 2.0 Mhz -#define GC9107_VGH_CLK_DIV_7 0x50 // Clock divisor = 7 -> 1.7 Mhz -#define GC9107_VGH_CLK_DIV_8 0x60 // Clock divisor = 8 -> 1.5 Mhz -#define GC9107_VGH_CLK_DIV_9 0x70 // Clock divisor = 9 -> 1.3 Mhz -#define GC9107_VGH_CLK_DIV_10 0x80 // Clock divisor = 10 -> 1.2 Mhz -#define GC9107_VGH_CLK_DIV_12 0x90 // Clock divisor = 12 -> 1.0 Mhz -#define GC9107_VGH_CLK_DIV_15 0xA0 // Clock divisor = 15 -> 0.8 Mhz -#define GC9107_VGH_CLK_DIV_20 0xB0 // Clock divisor = 20 -> 0.6 Mhz -#define GC9107_VGH_CLK_DIV_24 0xC0 // Clock divisor = 24 -> 0.5 Mhz -#define GC9107_VGH_CLK_DIV_30 0xD0 // Clock divisor = 30 -> 0.4 Mhz -#define GC9107_VGH_CLK_DIV_40 0xE0 // Clock divisor = 40 -> 0.3 Mhz -#define GC9107_VGH_CLK_DIV_60 0xE0 // Clock divisor = 40 -> 0.2 Mhz +#define GC9107_VGH_CLK_DIV_2 0x00 // Clock divisor = 2 -> 6.0 Mhz +#define GC9107_VGH_CLK_DIV_3 0x10 // Clock divisor = 3 -> 4.0 Mhz +#define GC9107_VGH_CLK_DIV_4 0x20 // Clock divisor = 4 -> 3.0 Mhz +#define GC9107_VGH_CLK_DIV_5 0x30 // Clock divisor = 5 -> 2.4 Mhz +#define GC9107_VGH_CLK_DIV_6 0x40 // Clock divisor = 6 -> 2.0 Mhz +#define GC9107_VGH_CLK_DIV_7 0x50 // Clock divisor = 7 -> 1.7 Mhz +#define GC9107_VGH_CLK_DIV_8 0x60 // Clock divisor = 8 -> 1.5 Mhz +#define GC9107_VGH_CLK_DIV_9 0x70 // Clock divisor = 9 -> 1.3 Mhz +#define GC9107_VGH_CLK_DIV_10 0x80 // Clock divisor = 10 -> 1.2 Mhz +#define GC9107_VGH_CLK_DIV_12 0x90 // Clock divisor = 12 -> 1.0 Mhz +#define GC9107_VGH_CLK_DIV_15 0xA0 // Clock divisor = 15 -> 0.8 Mhz +#define GC9107_VGH_CLK_DIV_20 0xB0 // Clock divisor = 20 -> 0.6 Mhz +#define GC9107_VGH_CLK_DIV_24 0xC0 // Clock divisor = 24 -> 0.5 Mhz +#define GC9107_VGH_CLK_DIV_30 0xD0 // Clock divisor = 30 -> 0.4 Mhz +#define GC9107_VGH_CLK_DIV_40 0xE0 // Clock divisor = 40 -> 0.3 Mhz +#define GC9107_VGH_CLK_DIV_60 0xE0 // Clock divisor = 40 -> 0.2 Mhz // Parameter masks for // GC9107_SET_VGH_VGL_CLK (VGL Divisor) -#define GC9107_VGL_CLK_DIV_2 0x00 // Clock divisor = 2 -> 6.0 Mhz -#define GC9107_VGL_CLK_DIV_3 0x01 // Clock divisor = 3 -> 4.0 Mhz -#define GC9107_VGL_CLK_DIV_4 0x02 // Clock divisor = 4 -> 3.0 Mhz -#define GC9107_VGL_CLK_DIV_5 0x03 // Clock divisor = 5 -> 2.4 Mhz -#define GC9107_VGL_CLK_DIV_6 0x04 // Clock divisor = 6 -> 2.0 Mhz -#define GC9107_VGL_CLK_DIV_7 0x05 // Clock divisor = 7 -> 1.7 Mhz -#define GC9107_VGL_CLK_DIV_8 0x06 // Clock divisor = 8 -> 1.5 Mhz -#define GC9107_VGL_CLK_DIV_9 0x07 // Clock divisor = 9 -> 1.3 Mhz -#define GC9107_VGL_CLK_DIV_10 0x08 // Clock divisor = 10 -> 1.2 Mhz -#define GC9107_VGL_CLK_DIV_12 0x09 // Clock divisor = 12 -> 1.0 Mhz -#define GC9107_VGL_CLK_DIV_15 0x0A // Clock divisor = 15 -> 0.8 Mhz -#define GC9107_VGL_CLK_DIV_20 0x0B // Clock divisor = 20 -> 0.6 Mhz -#define GC9107_VGL_CLK_DIV_24 0x0C // Clock divisor = 24 -> 0.5 Mhz -#define GC9107_VGL_CLK_DIV_30 0x0D // Clock divisor = 30 -> 0.4 Mhz -#define GC9107_VGL_CLK_DIV_40 0x0E // Clock divisor = 40 -> 0.3 Mhz -#define GC9107_VGL_CLK_DIV_60 0x0E // Clock divisor = 40 -> 0.2 Mhz - +#define GC9107_VGL_CLK_DIV_2 0x00 // Clock divisor = 2 -> 6.0 Mhz +#define GC9107_VGL_CLK_DIV_3 0x01 // Clock divisor = 3 -> 4.0 Mhz +#define GC9107_VGL_CLK_DIV_4 0x02 // Clock divisor = 4 -> 3.0 Mhz +#define GC9107_VGL_CLK_DIV_5 0x03 // Clock divisor = 5 -> 2.4 Mhz +#define GC9107_VGL_CLK_DIV_6 0x04 // Clock divisor = 6 -> 2.0 Mhz +#define GC9107_VGL_CLK_DIV_7 0x05 // Clock divisor = 7 -> 1.7 Mhz +#define GC9107_VGL_CLK_DIV_8 0x06 // Clock divisor = 8 -> 1.5 Mhz +#define GC9107_VGL_CLK_DIV_9 0x07 // Clock divisor = 9 -> 1.3 Mhz +#define GC9107_VGL_CLK_DIV_10 0x08 // Clock divisor = 10 -> 1.2 Mhz +#define GC9107_VGL_CLK_DIV_12 0x09 // Clock divisor = 12 -> 1.0 Mhz +#define GC9107_VGL_CLK_DIV_15 0x0A // Clock divisor = 15 -> 0.8 Mhz +#define GC9107_VGL_CLK_DIV_20 0x0B // Clock divisor = 20 -> 0.6 Mhz +#define GC9107_VGL_CLK_DIV_24 0x0C // Clock divisor = 24 -> 0.5 Mhz +#define GC9107_VGL_CLK_DIV_30 0x0D // Clock divisor = 30 -> 0.4 Mhz +#define GC9107_VGL_CLK_DIV_40 0x0E // Clock divisor = 40 -> 0.3 Mhz +#define GC9107_VGL_CLK_DIV_60 0x0E // Clock divisor = 40 -> 0.2 Mhz diff --git a/drivers/painter/gc9xxx/qp_gc9a01.c b/drivers/painter/gc9xxx/qp_gc9a01.c index b4df99c555ed..037ea7bbb13a 100644 --- a/drivers/painter/gc9xxx/qp_gc9a01.c +++ b/drivers/painter/gc9xxx/qp_gc9a01.c @@ -28,6 +28,9 @@ __attribute__((weak)) bool qp_gc9a01_init(painter_device_t device, painter_rotat GC9XXX_SET_INTER_REG_ENABLE2, 0, 0, 0x84, 0, 1, 0x40, GC9A01_SET_FUNCTION_CTL, 0, 3, 0x00, GC9A01_SOURCE_OUTPUT_SCAN_DIRECTION_S360_TO_S1 | GC9A01_GATE_OUTPUT_SCAN_DIRECTION_G1_TO_G32, GC9A01_LCD_DRIVE_LINE_240, // Only works if the previous command is present (undocumented) + GC9A01_SET_POWER_CTL_2, 0, 1, 0x13, + GC9A01_SET_POWER_CTL_3, 0, 1, 0x13, + GC9A01_SET_POWER_CTL_4, 0, 1, 0x22, GC9XXX_SET_GAMMA1, 0, 6, 0x45, 0x09, 0x08, 0x08, 0x26, 0x2A, GC9XXX_SET_GAMMA2, 0, 6, 0x43, 0x70, 0x72, 0x36, 0x37, 0x6F, GC9A01_SET_GAMMA3, 0, 6, 0x45, 0x09, 0x08, 0x08, 0x26, 0x2A, diff --git a/drivers/painter/gc9xxx/qp_gc9a01_opcodes.h b/drivers/painter/gc9xxx/qp_gc9a01_opcodes.h index c384f85a28c4..587219897195 100644 --- a/drivers/painter/gc9xxx/qp_gc9a01_opcodes.h +++ b/drivers/painter/gc9xxx/qp_gc9a01_opcodes.h @@ -10,9 +10,9 @@ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Level 1 command opcodes -#define GC9A01_SET_MEM_CONT 0x3C // Set memory continue -#define GC9A01_SET_BRIGHTNESS 0x51 // Set brightness -#define GC9A01_SET_DISPLAY_CTL 0x53 // Set display ctl +#define GC9A01_SET_MEM_CONT 0x3C // Set memory continue +#define GC9A01_SET_BRIGHTNESS 0x51 // Set brightness +#define GC9A01_SET_DISPLAY_CTL 0x53 // Set display ctl //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Level 2 command opcodes @@ -26,15 +26,15 @@ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Level 3 command opcodes -#define GC9A01_SET_POWER_CTL_7 0xA7 // Set power ctl 7 +#define GC9A01_SET_POWER_CTL_7 0xA7 // Set power ctl 7 -#define GC9A01_SET_POWER_CTL_1 0xC1 // Set power ctl 1 -#define GC9A01_SET_POWER_CTL_2 0xC3 // Set power ctl 2 -#define GC9A01_SET_POWER_CTL_3 0xC4 // Set power ctl 3 -#define GC9A01_SET_POWER_CTL_4 0xC9 // Set power ctl 4 +#define GC9A01_SET_POWER_CTL_1 0xC1 // Set power ctl 1 +#define GC9A01_SET_POWER_CTL_2 0xC3 // Set power ctl 2 +#define GC9A01_SET_POWER_CTL_3 0xC4 // Set power ctl 3 +#define GC9A01_SET_POWER_CTL_4 0xC9 // Set power ctl 4 -#define GC9A01_SET_FRAME_RATE 0xE8 // Set frame rate -#define GC9A01_SET_SPI_2DATA 0xE9 // Set frame rate +#define GC9A01_SET_FRAME_RATE 0xE8 // Set frame rate +#define GC9A01_SET_SPI_2DATA 0xE9 // Set frame rate #define GC9A01_SET_GAMMA3 0xF2 #define GC9A01_SET_GAMMA4 0xF3 @@ -80,7 +80,3 @@ #define GC9A01_LCD_DRIVE_LINE_224 0x1B #define GC9A01_LCD_DRIVE_LINE_232 0x1C #define GC9A01_LCD_DRIVE_LINE_240 0x1D - - - - diff --git a/drivers/painter/gc9xxx/qp_gc9xxx_opcodes.h b/drivers/painter/gc9xxx/qp_gc9xxx_opcodes.h index 3c56d8399711..375147dcd581 100644 --- a/drivers/painter/gc9xxx/qp_gc9xxx_opcodes.h +++ b/drivers/painter/gc9xxx/qp_gc9xxx_opcodes.h @@ -7,38 +7,38 @@ // Quantum Painter GC9xxx command opcodes //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#define GC9XXX_GET_ID_INFO 0x04 // Get ID information -#define GC9XXX_GET_STATUS 0x09 // Get status +#define GC9XXX_GET_ID_INFO 0x04 // Get ID information +#define GC9XXX_GET_STATUS 0x09 // Get status -#define GC9XXX_CMD_SLEEP_ON 0x10 // Enter sleep mode -#define GC9XXX_CMD_SLEEP_OFF 0x11 // Exit sleep mode -#define GC9XXX_CMD_PARTIAL_ON 0x12 // Enter partial mode -#define GC9XXX_CMD_PARTIAL_OFF 0x13 // Exit partial mode -#define GC9XXX_CMD_INVERT_OFF 0x20 // Exit inverted mode -#define GC9XXX_CMD_INVERT_ON 0x21 // Enter inverted mode -#define GC9XXX_CMD_DISPLAY_OFF 0x28 // Disable display -#define GC9XXX_CMD_DISPLAY_ON 0x29 // Enable display -#define GC9XXX_SET_COL_ADDR 0x2A // Set column address (MSB(StartCol),LSB(StartCol),MSB(EndCol),LSB(EndCol) -#define GC9XXX_SET_ROW_ADDR 0x2B // Set row address (MSB(StartRow),LSB(StartRow),MSB(EndRow),LSB(EndRow) -#define GC9XXX_SET_MEM 0x2C // Set (write) memory -#define GC9XXX_SET_PARTIAL_AREA 0x30 // Set partial area (MSB(StartRow),LSB(StartRow),MSB(EndRow),LSB(EndRow) -#define GC9XXX_SET_VSCROLL 0x33 // Set vertical scroll MSB(TFA),LSB(TFA),MSB(VSA),LSB(VSA),MSB(BFA),LSB(BFA) -#define GC9XXX_CMD_TEARING_OFF 0x34 // Tearing effect line OFF -#define GC9XXX_CMD_TEARING_ON 0x35 // Tearing effect line ON -#define GC9XXX_SET_MEM_ACS_CTL 0x36 // Set mem access ctl -#define GC9XXX_SET_VSCROLL_ADDR 0x37 // Set vscroll start addr -#define GC9XXX_CMD_IDLE_OFF 0x38 // Exit idle mode -#define GC9XXX_CMD_IDLE_ON 0x39 // Enter idle mode -#define GC9XXX_SET_PIXEL_FORMAT 0x3A // Set pixel format -#define GC9XXX_SET_TEAR_SCANLINE 0x44 // Set tearing scanline (ScanLine[7:0]) -#define GC9XXX_GET_TEAR_SCANLINE 0x45 // Get tearing scanline (ScanLine[7:0]) -#define GC9XXX_GET_ID1 0xDA // Get ID1 -#define GC9XXX_GET_ID2 0xDB // Get ID2 -#define GC9XXX_GET_ID3 0xDC // Get ID3 -#define GC9XXX_SET_INTER_REG_ENABLE1 0xFE // Enable Inter Register 1 -#define GC9XXX_SET_INTER_REG_ENABLE2 0xEF // Enable Inter Register 2 -#define GC9XXX_SET_GAMMA1 0xF0 // Set gamma 1 -#define GC9XXX_SET_GAMMA2 0xF1 // Set gamma 2 +#define GC9XXX_CMD_SLEEP_ON 0x10 // Enter sleep mode +#define GC9XXX_CMD_SLEEP_OFF 0x11 // Exit sleep mode +#define GC9XXX_CMD_PARTIAL_ON 0x12 // Enter partial mode +#define GC9XXX_CMD_PARTIAL_OFF 0x13 // Exit partial mode +#define GC9XXX_CMD_INVERT_OFF 0x20 // Exit inverted mode +#define GC9XXX_CMD_INVERT_ON 0x21 // Enter inverted mode +#define GC9XXX_CMD_DISPLAY_OFF 0x28 // Disable display +#define GC9XXX_CMD_DISPLAY_ON 0x29 // Enable display +#define GC9XXX_SET_COL_ADDR 0x2A // Set column address (MSB(StartCol),LSB(StartCol),MSB(EndCol),LSB(EndCol) +#define GC9XXX_SET_ROW_ADDR 0x2B // Set row address (MSB(StartRow),LSB(StartRow),MSB(EndRow),LSB(EndRow) +#define GC9XXX_SET_MEM 0x2C // Set (write) memory +#define GC9XXX_SET_PARTIAL_AREA 0x30 // Set partial area (MSB(StartRow),LSB(StartRow),MSB(EndRow),LSB(EndRow) +#define GC9XXX_SET_VSCROLL 0x33 // Set vertical scroll MSB(TFA),LSB(TFA),MSB(VSA),LSB(VSA),MSB(BFA),LSB(BFA) +#define GC9XXX_CMD_TEARING_OFF 0x34 // Tearing effect line OFF +#define GC9XXX_CMD_TEARING_ON 0x35 // Tearing effect line ON +#define GC9XXX_SET_MEM_ACS_CTL 0x36 // Set mem access ctl +#define GC9XXX_SET_VSCROLL_ADDR 0x37 // Set vscroll start addr +#define GC9XXX_CMD_IDLE_OFF 0x38 // Exit idle mode +#define GC9XXX_CMD_IDLE_ON 0x39 // Enter idle mode +#define GC9XXX_SET_PIXEL_FORMAT 0x3A // Set pixel format +#define GC9XXX_SET_TEAR_SCANLINE 0x44 // Set tearing scanline (ScanLine[7:0]) +#define GC9XXX_GET_TEAR_SCANLINE 0x45 // Get tearing scanline (ScanLine[7:0]) +#define GC9XXX_GET_ID1 0xDA // Get ID1 +#define GC9XXX_GET_ID2 0xDB // Get ID2 +#define GC9XXX_GET_ID3 0xDC // Get ID3 +#define GC9XXX_SET_INTER_REG_ENABLE1 0xFE // Enable Inter Register 1 +#define GC9XXX_SET_INTER_REG_ENABLE2 0xEF // Enable Inter Register 2 +#define GC9XXX_SET_GAMMA1 0xF0 // Set gamma 1 +#define GC9XXX_SET_GAMMA2 0xF1 // Set gamma 2 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // MADCTL Flags From 99d182a7980410f2c6a4a8c6beae2b9903b6e374 Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Sat, 17 Feb 2024 02:58:59 +0000 Subject: [PATCH 17/35] Minor adjustments --- drivers/painter/gc9xxx/qp_gc9107.c | 26 +++++++-- drivers/painter/gc9xxx/qp_gc9107_opcodes.h | 3 +- drivers/painter/gc9xxx/qp_gc9a01.c | 64 ++++++++++++++++++++-- 3 files changed, 81 insertions(+), 12 deletions(-) diff --git a/drivers/painter/gc9xxx/qp_gc9107.c b/drivers/painter/gc9xxx/qp_gc9107.c index c2bb58cb3755..7bb6f84e3eda 100644 --- a/drivers/painter/gc9xxx/qp_gc9107.c +++ b/drivers/painter/gc9xxx/qp_gc9107.c @@ -20,16 +20,32 @@ __attribute__((weak)) bool qp_gc9107_init(painter_device_t device, painter_rotat // A lot of these "unknown" opcodes are sourced from other OSS projects and are seemingly required for this display to function. // clang-format off - const uint8_t gc9107_init_sequence[] = { // Command, Delay, N, Data[N] // The following commands are not really needed since the functionality isn't being used - GC9XXX_SET_INTER_REG_ENABLE1, 5, 0, - GC9XXX_SET_INTER_REG_ENABLE2, 5, 0, - GC9XXX_SET_PIXEL_FORMAT, 0, 1, GC9107_PIXEL_FORMAT_16_BPP, + // GC9XXX_SET_INTER_REG_ENABLE1, 5, 0, + // GC9XXX_SET_INTER_REG_ENABLE2, 5, 0, + // GC9107_SET_FUNCTION_CTL2, 0, 1, GC9107_ALLOW_SET_VGH | GC9107_ALLOW_SET_VGL | GC9107_ALLOW_SET_VGH_VGL_CLK, + // GC9107_SET_FUNCTION_CTL3, 0, 1, GC9107_ALLOW_SET_GAMMA1 | GC9107_ALLOW_SET_GAMMA2, + + // GC9107_SET_FUNCTION_CTL6, 0, 1, GC9107_ALLOW_SET_FRAMERATE | GC9107_ALLOW_SET_COMPLEMENT_RGB, // Offset an diagonal 0b00011001 + + // GC9107_SET_COMPLEMENT_RGB, 0, 1, GC9107_COMPLEMENT_WITH_LSB, + // GC9107_SET_FRAME_RATE, 0, 1, 0x19, // 69Hz + + // GC9107_SET_VGH, 0, 1, GC9107_VGH_P140, + // GC9107_SET_VGL, 0, 1, VGL_N_075, + + // GC9107_SET_VGH_VGL_CLK, 0, 1, GC9107_VGH_CLK_DIV_4 | GC9107_VGL_CLK_DIV_4, + + // Values taken from waveshare example. Colors seem a little washed out + // GC9XXX_SET_GAMMA1, 0, 14, 0x1F, 0x28, 0x04, 0x3E, 0x2A, 0x2E, 0x20, 0x00, 0x0C, 0x06, 0x00, 0x1C, 0x1F, 0x0F, + // GC9XXX_SET_GAMMA2, 0, 14, 0x00, 0x2D, 0x2F, 0x3C, 0x6F, 0x1C, 0x0B, 0x00, 0x00, 0x00, 0x07, 0x0D, 0x11, 0x0F, + + GC9XXX_SET_PIXEL_FORMAT, 0, 1, GC9107_PIXEL_FORMAT_16_BPP, GC9XXX_CMD_INVERT_ON, 0, 0, - GC9XXX_CMD_SLEEP_OFF, 120, 0, + GC9XXX_CMD_SLEEP_OFF, 120, 0, GC9XXX_CMD_DISPLAY_ON, 20, 0 }; diff --git a/drivers/painter/gc9xxx/qp_gc9107_opcodes.h b/drivers/painter/gc9xxx/qp_gc9107_opcodes.h index 107186b024f5..61f1af544bec 100644 --- a/drivers/painter/gc9xxx/qp_gc9107_opcodes.h +++ b/drivers/painter/gc9xxx/qp_gc9107_opcodes.h @@ -12,6 +12,7 @@ #define GC9107_GET_IMAGE_FMT 0x0D // Get image format #define GC9107_GET_SIGNAL_MODE 0x0E // Get signal mode #define GC9107_GET_DIAG_RESULT 0x0F // Get self-diagnostic results +#define GC9107_SET_FRAME_RATE 0xAB // Set frame rate #define GC9107_SET_COMPLEMENT_RGB 0xAC // Set complement Principle RGB #define GC9107_SET_BLANK_PORCH 0xAD // Set blank porch control, 0;front_porch[6:0],0;back_porch[6:0] #define GC9107_SET_FUNCTION_CTL1 0xB1 // Set access to AVDD_VCL_CLK and VGH_VGL_CLK commands @@ -43,7 +44,7 @@ // GC9107_SET_FUNCTION_CTL2 #define GC9107_ALLOW_SET_VGH 0b00000001 // Allow GC9107_SET_VGH #define GC9107_ALLOW_SET_VGL 0b00000010 // Allow GC9107_SET_VGL -#define GC9107_ALLOW_SET_VGH_VGL_CLK 0b00000100 // Alloq GC9107_SET_VGH_VGL_CLK +#define GC9107_ALLOW_SET_VGH_VGL_CLK 0b00000100 // Allow GC9107_SET_VGH_VGL_CLK // Parameter masks for // GC9107_SET_FUNCTION_CTL3 #define GC9107_ALLOW_SET_GAMMA1 0b00000001 // Allow GC9107_SET_GAMMA1 diff --git a/drivers/painter/gc9xxx/qp_gc9a01.c b/drivers/painter/gc9xxx/qp_gc9a01.c index 037ea7bbb13a..4f473877fd64 100644 --- a/drivers/painter/gc9xxx/qp_gc9a01.c +++ b/drivers/painter/gc9xxx/qp_gc9a01.c @@ -21,6 +21,58 @@ tft_panel_dc_reset_painter_device_t gc9a01_drivers[GC9A01_NUM_DEVICES] = {0}; __attribute__((weak)) bool qp_gc9a01_init(painter_device_t device, painter_rotation_t rotation) { // A lot of these "unknown" opcodes are sourced from other OSS projects and are seemingly required for this display to function. // clang-format off + // const uint8_t gc9a01_init_sequence[] = { + // // Command, Delay, N, Data[N] + // GC9XXX_SET_INTER_REG_ENABLE2, 0, 0, + // 0xEB, 0, 1, 0x14, + // GC9XXX_SET_INTER_REG_ENABLE1, 0, 0, + // GC9XXX_SET_INTER_REG_ENABLE2, 0, 0, + // 0xEB, 0, 1, 0x14, + // 0x84, 0, 1, 0x40, + // 0x85, 0, 1, 0xFF, + // 0x86, 0, 1, 0xFF, + // 0x87, 0, 1, 0xFF, + // 0x88, 0, 1, 0x0A, + // 0x89, 0, 1, 0x21, + // 0x8a, 0, 1, 0x00, + // 0x8b, 0, 1, 0x80, + // 0x8c, 0, 1, 0x01, + // 0x8d, 0, 1, 0x01, + // 0x8e, 0, 1, 0xFF, + // 0x8f, 0, 1, 0xFF, + // GC9A01_SET_FUNCTION_CTL, 0, 2, 0x00, 0x20, + // GC9XXX_SET_PIXEL_FORMAT, 0, 1, 0x55, + // 0x90, 0, 4, 0x08, 0x08, 0x08, 0x08, + // 0xBD, 0, 1, 0x06, + // 0xBC, 0, 1, 0x00, + // 0xFF, 0, 3, 0x60, 0x01, 0x04, + // GC9A01_SET_POWER_CTL_2, 0, 1, 0x13, + // GC9A01_SET_POWER_CTL_3, 0, 1, 0x13, + // GC9A01_SET_POWER_CTL_4, 0, 1, 0x22, + // 0xBE, 0, 1, 0x11, + // 0xE1, 0, 2, 0x10, 0x0E, + // 0xDF, 0, 3, 0x21, 0x0C, 0x02, + // // GC9XXX_SET_GAMMA1, 0, 6, 0x45, 0x09, 0x08, 0x08, 0x26, 0x2A, + // // GC9XXX_SET_GAMMA2, 0, 6, 0x43, 0x70, 0x72, 0x36, 0x37, 0x6F, + // // GC9A01_SET_GAMMA3, 0, 6, 0x45, 0x09, 0x08, 0x08, 0x26, 0x2A, + // // GC9A01_SET_GAMMA4, 0, 6, 0x43, 0x70, 0x72, 0x36, 0x37, 0x6F, + // 0xED, 0, 2, 0x1B, 0x0B, + // 0xAE, 0, 1, 0x77, + // 0xCD, 0, 1, 0x63, + // 0x70, 0, 9, 0x07, 0x07, 0x04, 0x0E, 0x0F, 0x09, 0x07, 0x08, 0x03, + // GC9A01_SET_FRAME_RATE, 0, 1, 0x34, + // 0x62, 0, 12, 0x18, 0x0D, 0x71, 0xED, 0x70, 0x70, 0x18, 0x0F, 0x71, 0xEF, 0x70, 0x70, + // 0x63, 0, 12, 0x18, 0x11, 0x71, 0xF1, 0x70, 0x70, 0x18, 0x13, 0x71, 0xF3, 0x70, 0x70, + // 0x64, 0, 7, 0x28, 0x29, 0xF1, 0x01, 0xF1, 0x00, 0x07, + // 0x66, 0, 10, 0x3C, 0x00, 0xCD, 0x67, 0x45, 0x45, 0x10, 0x00, 0x00, 0x00, + // 0x67, 0, 10, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x54, 0x10, 0x32, 0x98, + // 0x74, 0, 7, 0x10, 0x85, 0x80, 0x00, 0x00, 0x4E, 0x00, + // 0x98, 0, 2, 0x3E, 0x07, + // GC9XXX_CMD_TEARING_OFF, 0, 0, + // GC9XXX_CMD_INVERT_ON, 0, 0, + // GC9XXX_CMD_SLEEP_OFF, 120, 0, + // GC9XXX_CMD_DISPLAY_ON, 20, 0 + // }; const uint8_t gc9a01_init_sequence[] = { // Command, Delay, N, Data[N] @@ -28,13 +80,13 @@ __attribute__((weak)) bool qp_gc9a01_init(painter_device_t device, painter_rotat GC9XXX_SET_INTER_REG_ENABLE2, 0, 0, 0x84, 0, 1, 0x40, GC9A01_SET_FUNCTION_CTL, 0, 3, 0x00, GC9A01_SOURCE_OUTPUT_SCAN_DIRECTION_S360_TO_S1 | GC9A01_GATE_OUTPUT_SCAN_DIRECTION_G1_TO_G32, GC9A01_LCD_DRIVE_LINE_240, // Only works if the previous command is present (undocumented) - GC9A01_SET_POWER_CTL_2, 0, 1, 0x13, - GC9A01_SET_POWER_CTL_3, 0, 1, 0x13, + GC9A01_SET_POWER_CTL_2, 0, 1, 0x20, + GC9A01_SET_POWER_CTL_3, 0, 1, 0x20, GC9A01_SET_POWER_CTL_4, 0, 1, 0x22, - GC9XXX_SET_GAMMA1, 0, 6, 0x45, 0x09, 0x08, 0x08, 0x26, 0x2A, - GC9XXX_SET_GAMMA2, 0, 6, 0x43, 0x70, 0x72, 0x36, 0x37, 0x6F, - GC9A01_SET_GAMMA3, 0, 6, 0x45, 0x09, 0x08, 0x08, 0x26, 0x2A, - GC9A01_SET_GAMMA4, 0, 6, 0x43, 0x70, 0x72, 0x36, 0x37, 0x6F, + // GC9XXX_SET_GAMMA1, 0, 6, 0x45, 0x09, 0x08, 0x08, 0x26, 0x2A, + // GC9XXX_SET_GAMMA2, 0, 6, 0x43, 0x70, 0x72, 0x36, 0x37, 0x6F, + // GC9A01_SET_GAMMA3, 0, 6, 0x45, 0x09, 0x08, 0x08, 0x26, 0x2A, + // GC9A01_SET_GAMMA4, 0, 6, 0x43, 0x70, 0x72, 0x36, 0x37, 0x6F, 0x66, 0, 10, 0x3C, 0x00, 0xCD, 0x67, 0x45, 0x45, 0x10, 0x00, 0x00, 0x00, 0x67, 0, 10, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x54, 0x10, 0x32, 0x98, GC9XXX_CMD_TEARING_ON, 0, 0, From 7b8c0b9556ea2dd09fa2e88c133681bccfe3cd2a Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Sat, 17 Feb 2024 14:00:48 +0000 Subject: [PATCH 18/35] Removed commented code. Put back gamma control. --- drivers/painter/gc9xxx/qp_gc9a01.c | 60 ++---------------------------- 1 file changed, 4 insertions(+), 56 deletions(-) diff --git a/drivers/painter/gc9xxx/qp_gc9a01.c b/drivers/painter/gc9xxx/qp_gc9a01.c index 4f473877fd64..a94f2d89e27b 100644 --- a/drivers/painter/gc9xxx/qp_gc9a01.c +++ b/drivers/painter/gc9xxx/qp_gc9a01.c @@ -21,58 +21,6 @@ tft_panel_dc_reset_painter_device_t gc9a01_drivers[GC9A01_NUM_DEVICES] = {0}; __attribute__((weak)) bool qp_gc9a01_init(painter_device_t device, painter_rotation_t rotation) { // A lot of these "unknown" opcodes are sourced from other OSS projects and are seemingly required for this display to function. // clang-format off - // const uint8_t gc9a01_init_sequence[] = { - // // Command, Delay, N, Data[N] - // GC9XXX_SET_INTER_REG_ENABLE2, 0, 0, - // 0xEB, 0, 1, 0x14, - // GC9XXX_SET_INTER_REG_ENABLE1, 0, 0, - // GC9XXX_SET_INTER_REG_ENABLE2, 0, 0, - // 0xEB, 0, 1, 0x14, - // 0x84, 0, 1, 0x40, - // 0x85, 0, 1, 0xFF, - // 0x86, 0, 1, 0xFF, - // 0x87, 0, 1, 0xFF, - // 0x88, 0, 1, 0x0A, - // 0x89, 0, 1, 0x21, - // 0x8a, 0, 1, 0x00, - // 0x8b, 0, 1, 0x80, - // 0x8c, 0, 1, 0x01, - // 0x8d, 0, 1, 0x01, - // 0x8e, 0, 1, 0xFF, - // 0x8f, 0, 1, 0xFF, - // GC9A01_SET_FUNCTION_CTL, 0, 2, 0x00, 0x20, - // GC9XXX_SET_PIXEL_FORMAT, 0, 1, 0x55, - // 0x90, 0, 4, 0x08, 0x08, 0x08, 0x08, - // 0xBD, 0, 1, 0x06, - // 0xBC, 0, 1, 0x00, - // 0xFF, 0, 3, 0x60, 0x01, 0x04, - // GC9A01_SET_POWER_CTL_2, 0, 1, 0x13, - // GC9A01_SET_POWER_CTL_3, 0, 1, 0x13, - // GC9A01_SET_POWER_CTL_4, 0, 1, 0x22, - // 0xBE, 0, 1, 0x11, - // 0xE1, 0, 2, 0x10, 0x0E, - // 0xDF, 0, 3, 0x21, 0x0C, 0x02, - // // GC9XXX_SET_GAMMA1, 0, 6, 0x45, 0x09, 0x08, 0x08, 0x26, 0x2A, - // // GC9XXX_SET_GAMMA2, 0, 6, 0x43, 0x70, 0x72, 0x36, 0x37, 0x6F, - // // GC9A01_SET_GAMMA3, 0, 6, 0x45, 0x09, 0x08, 0x08, 0x26, 0x2A, - // // GC9A01_SET_GAMMA4, 0, 6, 0x43, 0x70, 0x72, 0x36, 0x37, 0x6F, - // 0xED, 0, 2, 0x1B, 0x0B, - // 0xAE, 0, 1, 0x77, - // 0xCD, 0, 1, 0x63, - // 0x70, 0, 9, 0x07, 0x07, 0x04, 0x0E, 0x0F, 0x09, 0x07, 0x08, 0x03, - // GC9A01_SET_FRAME_RATE, 0, 1, 0x34, - // 0x62, 0, 12, 0x18, 0x0D, 0x71, 0xED, 0x70, 0x70, 0x18, 0x0F, 0x71, 0xEF, 0x70, 0x70, - // 0x63, 0, 12, 0x18, 0x11, 0x71, 0xF1, 0x70, 0x70, 0x18, 0x13, 0x71, 0xF3, 0x70, 0x70, - // 0x64, 0, 7, 0x28, 0x29, 0xF1, 0x01, 0xF1, 0x00, 0x07, - // 0x66, 0, 10, 0x3C, 0x00, 0xCD, 0x67, 0x45, 0x45, 0x10, 0x00, 0x00, 0x00, - // 0x67, 0, 10, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x54, 0x10, 0x32, 0x98, - // 0x74, 0, 7, 0x10, 0x85, 0x80, 0x00, 0x00, 0x4E, 0x00, - // 0x98, 0, 2, 0x3E, 0x07, - // GC9XXX_CMD_TEARING_OFF, 0, 0, - // GC9XXX_CMD_INVERT_ON, 0, 0, - // GC9XXX_CMD_SLEEP_OFF, 120, 0, - // GC9XXX_CMD_DISPLAY_ON, 20, 0 - // }; const uint8_t gc9a01_init_sequence[] = { // Command, Delay, N, Data[N] @@ -83,10 +31,10 @@ __attribute__((weak)) bool qp_gc9a01_init(painter_device_t device, painter_rotat GC9A01_SET_POWER_CTL_2, 0, 1, 0x20, GC9A01_SET_POWER_CTL_3, 0, 1, 0x20, GC9A01_SET_POWER_CTL_4, 0, 1, 0x22, - // GC9XXX_SET_GAMMA1, 0, 6, 0x45, 0x09, 0x08, 0x08, 0x26, 0x2A, - // GC9XXX_SET_GAMMA2, 0, 6, 0x43, 0x70, 0x72, 0x36, 0x37, 0x6F, - // GC9A01_SET_GAMMA3, 0, 6, 0x45, 0x09, 0x08, 0x08, 0x26, 0x2A, - // GC9A01_SET_GAMMA4, 0, 6, 0x43, 0x70, 0x72, 0x36, 0x37, 0x6F, + GC9XXX_SET_GAMMA1, 0, 6, 0x45, 0x09, 0x08, 0x08, 0x26, 0x2A, + GC9XXX_SET_GAMMA2, 0, 6, 0x43, 0x70, 0x72, 0x36, 0x37, 0x6F, + GC9A01_SET_GAMMA3, 0, 6, 0x45, 0x09, 0x08, 0x08, 0x26, 0x2A, + GC9A01_SET_GAMMA4, 0, 6, 0x43, 0x70, 0x72, 0x36, 0x37, 0x6F, 0x66, 0, 10, 0x3C, 0x00, 0xCD, 0x67, 0x45, 0x45, 0x10, 0x00, 0x00, 0x00, 0x67, 0, 10, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x54, 0x10, 0x32, 0x98, GC9XXX_CMD_TEARING_ON, 0, 0, From f23bfbd6415ae9544ab4d0f6ec87caef1f6bd79b Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Mon, 19 Feb 2024 18:09:28 +0000 Subject: [PATCH 19/35] Cleanup --- drivers/painter/gc9xxx/qp_gc9107.c | 93 ++++++++++++++++------ drivers/painter/gc9xxx/qp_gc9107_opcodes.h | 49 +++++++----- drivers/painter/gc9xxx/qp_gc9a01.c | 4 +- drivers/painter/gc9xxx/qp_gc9a01_opcodes.h | 85 ++++++++++++-------- drivers/painter/gc9xxx/qp_gc9xxx_opcodes.h | 79 +++++++++--------- 5 files changed, 194 insertions(+), 116 deletions(-) diff --git a/drivers/painter/gc9xxx/qp_gc9107.c b/drivers/painter/gc9xxx/qp_gc9107.c index 7bb6f84e3eda..b9adad2ff579 100644 --- a/drivers/painter/gc9xxx/qp_gc9107.c +++ b/drivers/painter/gc9xxx/qp_gc9107.c @@ -19,36 +19,81 @@ tft_panel_dc_reset_painter_device_t gc9107_drivers[GC9107_NUM_DEVICES] = {0}; __attribute__((weak)) bool qp_gc9107_init(painter_device_t device, painter_rotation_t rotation) { // A lot of these "unknown" opcodes are sourced from other OSS projects and are seemingly required for this display to function. // clang-format off - const uint8_t gc9107_init_sequence[] = { - // Command, Delay, N, Data[N] - // The following commands are not really needed since the functionality isn't being used - - // GC9XXX_SET_INTER_REG_ENABLE1, 5, 0, - // GC9XXX_SET_INTER_REG_ENABLE2, 5, 0, - // GC9107_SET_FUNCTION_CTL2, 0, 1, GC9107_ALLOW_SET_VGH | GC9107_ALLOW_SET_VGL | GC9107_ALLOW_SET_VGH_VGL_CLK, - // GC9107_SET_FUNCTION_CTL3, 0, 1, GC9107_ALLOW_SET_GAMMA1 | GC9107_ALLOW_SET_GAMMA2, - - // GC9107_SET_FUNCTION_CTL6, 0, 1, GC9107_ALLOW_SET_FRAMERATE | GC9107_ALLOW_SET_COMPLEMENT_RGB, // Offset an diagonal 0b00011001 - - // GC9107_SET_COMPLEMENT_RGB, 0, 1, GC9107_COMPLEMENT_WITH_LSB, - // GC9107_SET_FRAME_RATE, 0, 1, 0x19, // 69Hz - - // GC9107_SET_VGH, 0, 1, GC9107_VGH_P140, - // GC9107_SET_VGL, 0, 1, VGL_N_075, + GC9XXX_SET_INTER_REG_ENABLE1, 5, 0, + GC9XXX_SET_INTER_REG_ENABLE2, 5, 0, + + //0xB0, 0, 1, 0xC0, + // GC9107_SET_FUNCTION_CTL2, 0, 1, GC9107_ALLOW_SET_VGH | GC9107_ALLOW_SET_VGL | GC9107_ALLOW_SET_VGH_VGL_CLK,// | 0x28, + // GC9107_SET_VGH, 0, 1, 0x24, + // GC9107_SET_VGL, 0, 1, 0x48, + // GC9107_SET_VGH_VGL_CLK, 0, 1, 0x22, + + // GC9107_SET_FUNCTION_CTL3, 0, 1, GC9107_ALLOW_SET_GAMMA1 | GC9107_ALLOW_SET_GAMMA2, + // GC9XXX_SET_GAMMA1, 0, 14, 0x1F,0x28,0x04,0x3E,0x2A,0x2E,0x20,0x00,0x0C,0x06,0x00,0x1C,0x1F,0x0f, + // GC9XXX_SET_GAMMA2, 0, 14, 0X00,0X2D,0X2F,0X3C,0X6F,0X1C,0X0B,0X00,0X00,0X00,0X07,0X0D,0X11,0X0f, - // GC9107_SET_VGH_VGL_CLK, 0, 1, GC9107_VGH_CLK_DIV_4 | GC9107_VGL_CLK_DIV_4, + GC9107_SET_FUNCTION_CTL6, 0, 1, GC9107_ALLOW_SET_COMPLEMENT_RGB | 0x08 | GC9107_ALLOW_SET_FRAMERATE, + GC9107_SET_COMPLEMENT_RGB, 0, 1, GC9107_COMPLEMENT_WITH_LSB, + 0xAB, 0, 1, 0x0E, + GC9107_SET_FRAME_RATE, 0, 1, 0x19, - // Values taken from waveshare example. Colors seem a little washed out - // GC9XXX_SET_GAMMA1, 0, 14, 0x1F, 0x28, 0x04, 0x3E, 0x2A, 0x2E, 0x20, 0x00, 0x0C, 0x06, 0x00, 0x1C, 0x1F, 0x0F, - // GC9XXX_SET_GAMMA2, 0, 14, 0x00, 0x2D, 0x2F, 0x3C, 0x6F, 0x1C, 0x0B, 0x00, 0x00, 0x00, 0x07, 0x0D, 0x11, 0x0F, + // 0xB7, 0, 1, 0x01, + // 0xB8, 0, 1, 0x08, - GC9XXX_SET_PIXEL_FORMAT, 0, 1, GC9107_PIXEL_FORMAT_16_BPP, - GC9XXX_CMD_INVERT_ON, 0, 0, - GC9XXX_CMD_SLEEP_OFF, 120, 0, - GC9XXX_CMD_DISPLAY_ON, 20, 0 + + + // 0xC6, 0, 1, 0x30, + // 0xC7, 0, 1, 0x18, + GC9XXX_SET_PIXEL_FORMAT, 0, 1, GC9107_PIXEL_FORMAT_16_BPP_IFPF, + // 0x21, 0, 0, + GC9XXX_CMD_SLEEP_OFF, 120, 0, + GC9XXX_CMD_DISPLAY_ON, 20, 0 }; + // const uint8_t gc9107_init_sequence[] = { + // // Command, Delay, N, Data[N] + // // The following commands are not really needed since the functionality isn't being used + + // GC9XXX_SET_INTER_REG_ENABLE1, 5, 0, + // GC9XXX_SET_INTER_REG_ENABLE2, 5, 0, + // 0xB0, 0, 1, 0xC0, + // GC9107_SET_FUNCTION_CTL2, 0, 1, GC9107_ALLOW_SET_VGH | GC9107_ALLOW_SET_VGL | GC9107_ALLOW_SET_VGH_VGL_CLK, + // GC9107_SET_FUNCTION_CTL3, 0, 1, GC9107_ALLOW_SET_GAMMA1 | GC9107_ALLOW_SET_GAMMA2, + // 0xB4, 0, 1, 0x04, + // GC9107_SET_FUNCTION_CTL6, 0, 1, GC9107_ALLOW_SET_FRAMERATE | GC9107_ALLOW_SET_COMPLEMENT_RGB, // Offset an diagonal 0b00011001 + // 0xB7, 0, 1, 0x01, + // 0xB8, 0, 1, 0x08, + + // // GC9107_SET_COMPLEMENT_RGB, 0, 1, GC9107_COMPLEMENT_WITH_LSB, + // // GC9107_SET_FRAME_RATE, 0, 1, 0x19, // 69Hz + + // // GC9107_SET_VGH, 0, 1, GC9107_VGH_P140, + // // GC9107_SET_VGL, 0, 1, VGL_N_075, + + // // GC9107_SET_VGH_VGL_CLK, 0, 1, GC9107_VGH_CLK_DIV_4 | GC9107_VGL_CLK_DIV_4, + + // // Values taken from waveshare example. Colors seem a little washed out + // // GC9XXX_SET_GAMMA1, 0, 14, 0x1F, 0x28, 0x04, 0x3E, 0x2A, 0x2E, 0x20, 0x00, 0x0C, 0x06, 0x00, 0x1C, 0x1F, 0x0F, + // // GC9XXX_SET_GAMMA2, 0, 14, 0x00, 0x2D, 0x2F, 0x3C, 0x6F, 0x1C, 0x0B, 0x00, 0x00, 0x00, 0x07, 0x0D, 0x11, 0x0F, + + // 0xA8, 0, 1, 0x19, + // 0xAC, 0, 1, 0xC0, + // 0xAB, 0, 1, 0x0E,// + + // 0xE8, 0, 1, 0x24, + // 0xE9, 0, 1, 0x48, + // 0xEA, 0, 1, 0x22, + + // 0xC6, 0, 1, 0x30, + // 0xC7, 0, 1, 0x18, + + // GC9XXX_SET_PIXEL_FORMAT, 0, 1, GC9107_PIXEL_FORMAT_16_BPP, + // GC9XXX_CMD_INVERT_ON, 0, 0, + // GC9XXX_CMD_SLEEP_OFF, 120, 0, + // GC9XXX_CMD_DISPLAY_ON, 20, 0 + // }; + // clang-format on qp_comms_bulk_command_sequence(device, gc9107_init_sequence, sizeof(gc9107_init_sequence)); diff --git a/drivers/painter/gc9xxx/qp_gc9107_opcodes.h b/drivers/painter/gc9xxx/qp_gc9107_opcodes.h index 61f1af544bec..a0fe470f626e 100644 --- a/drivers/painter/gc9xxx/qp_gc9107_opcodes.h +++ b/drivers/painter/gc9xxx/qp_gc9107_opcodes.h @@ -6,31 +6,36 @@ // Quantum Painter GC9107 command opcodes //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#define GC9107_GET_POWER_MODE 0x0A // Get power mode -#define GC9107_GET_MADCTL 0x0B // Get MADCTL -#define GC9107_GET_PIXEL_FMT 0x0C // Get pixel format -#define GC9107_GET_IMAGE_FMT 0x0D // Get image format -#define GC9107_GET_SIGNAL_MODE 0x0E // Get signal mode -#define GC9107_GET_DIAG_RESULT 0x0F // Get self-diagnostic results -#define GC9107_SET_FRAME_RATE 0xAB // Set frame rate -#define GC9107_SET_COMPLEMENT_RGB 0xAC // Set complement Principle RGB -#define GC9107_SET_BLANK_PORCH 0xAD // Set blank porch control, 0;front_porch[6:0],0;back_porch[6:0] -#define GC9107_SET_FUNCTION_CTL1 0xB1 // Set access to AVDD_VCL_CLK and VGH_VGL_CLK commands -#define GC9107_SET_FUNCTION_CTL2 0xB2 // Set access to VGH, VGH control commands -#define GC9107_SET_FUNCTION_CTL3 0xB3 // Set access to Gamma control commands -#define GC9107_SET_FUNCTION_CTL6 0xB6 // Set access to commands SET_FRAME_RATE, SET_COMPLEMENT_RGB and SET_BLANK_PORCH -#define GC9107_SET_DISPLAY_INVERSION 0xCB // Set Display Inversion control -#define GC9107_SET_CUSTOM_ID_INFO 0xD3 // Set customized display id information -#define GC9107_AVDD_VCL_CLK 0xE3 // AVDD_CLK -#define GC9107_SET_VGH 0xE8 // Set VGH -#define GC9107_SET_VGL 0xE9 // Set VGL -#define GC9107_SET_VGH_VGL_CLK 0xEA // Set VGH and VGL clock divisors +#define GC9107_GET_POWER_MODE 0x0A // Get power mode +#define GC9107_GET_MADCTL 0x0B // Get MADCTL +#define GC9107_GET_PIXEL_FMT 0x0C // Get pixel format +#define GC9107_GET_IMAGE_FMT 0x0D // Get image format +#define GC9107_GET_SIGNAL_MODE 0x0E // Get signal mode +#define GC9107_GET_DIAG_RESULT 0x0F // Get self-diagnostic results + +#define GC9107_SET_FRAME_RATE 0xA8 // Set frame rate +#define GC9107_SET_COMPLEMENT_RGB 0xAC // Set complement Principle RGB +#define GC9107_SET_BLANK_PORCH 0xAD // Set blank porch control, 0;front_porch[6:0],0;back_porch[6:0] +#define GC9107_SET_FUNCTION_CTL1 0xB1 // Set access to AVDD_VCL_CLK and VGH_VGL_CLK commands +#define GC9107_SET_FUNCTION_CTL2 0xB2 // Set access to VGH, VGH control commands +#define GC9107_SET_FUNCTION_CTL3 0xB3 // Set access to Gamma control commands +#define GC9107_SET_DISPLAY_INVERSION 0xB4 // Set Display Inversion control +#define GC9107_SET_FUNCTION_CTL6 0xB6 // Set access to commands SET_FRAME_RATE, SET_COMPLEMENT_RGB and SET_BLANK_PORCH +#define GC9107_GET_CUSTOM_ID_INFO 0xD3 // Set customized display id information +#define GC9107_AVDD_VCL_CLK 0xE3 // AVDD_CLK +#define GC9107_SET_VGH 0xE8 // Set VGH +#define GC9107_SET_VGL 0xE9 // Set VGL +#define GC9107_SET_VGH_VGL_CLK 0xEA // Set VGH and VGL clock divisors + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// GC9107 Parameter constants // Parameter values for // GC9107_SET_PIXEL_FORMAT -#define GC9107_PIXEL_FORMAT_12_BPP 0x01 // 12 bits per pixel -#define GC9107_PIXEL_FORMAT_16_BPP 0x05 // 16 bits per pixel -#define GC9107_PIXEL_FORMAT_18_BPP 0x06 // 18 bits per pixel +#define GC9107_PIXEL_FORMAT_12_BPP_IFPF (0b001 << 0) // 12 bits per pixel +#define GC9107_PIXEL_FORMAT_16_BPP_IFPF (0b101 << 0) // 16 bits per pixel +#define GC9107_PIXEL_FORMAT_18_BPP_IFPB (0b110 << 0) // 18 bits per pixel + // Parameter values for // GC9107_SET_COMPLEMENT_RGB #define GC9107_COMPLEMENT_WITH_0 0x00 // R0 <- B0 <- 0, except if data is FFh diff --git a/drivers/painter/gc9xxx/qp_gc9a01.c b/drivers/painter/gc9xxx/qp_gc9a01.c index a94f2d89e27b..f037a4cc87b2 100644 --- a/drivers/painter/gc9xxx/qp_gc9a01.c +++ b/drivers/painter/gc9xxx/qp_gc9a01.c @@ -38,9 +38,9 @@ __attribute__((weak)) bool qp_gc9a01_init(painter_device_t device, painter_rotat 0x66, 0, 10, 0x3C, 0x00, 0xCD, 0x67, 0x45, 0x45, 0x10, 0x00, 0x00, 0x00, 0x67, 0, 10, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x54, 0x10, 0x32, 0x98, GC9XXX_CMD_TEARING_ON, 0, 0, - GC9XXX_SET_PIXEL_FORMAT, 0, 1, GC9A01_PIXEL_FORMAT_16_BPP_MCUIF, + GC9XXX_SET_PIXEL_FORMAT, 0, 1, GC9A01_PIXEL_FORMAT_16_BPP_DBI, GC9XXX_CMD_INVERT_ON, 0, 0, - GC9XXX_CMD_SLEEP_OFF, 120, 0, + GC9XXX_CMD_SLEEP_OFF, 120, 0, GC9XXX_CMD_DISPLAY_ON, 20, 0 }; // clang-format on diff --git a/drivers/painter/gc9xxx/qp_gc9a01_opcodes.h b/drivers/painter/gc9xxx/qp_gc9a01_opcodes.h index 587219897195..bdb3220ce8d0 100644 --- a/drivers/painter/gc9xxx/qp_gc9a01_opcodes.h +++ b/drivers/painter/gc9xxx/qp_gc9a01_opcodes.h @@ -7,50 +7,51 @@ // Quantum Painter GC9A01 command opcodes //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Level 1 command opcodes - -#define GC9A01_SET_MEM_CONT 0x3C // Set memory continue -#define GC9A01_SET_BRIGHTNESS 0x51 // Set brightness -#define GC9A01_SET_DISPLAY_CTL 0x53 // Set display ctl +#define GC9A01_SET_MEM_CONT 0x3C // Set memory continue +#define GC9A01_SET_BRIGHTNESS 0x51 // Set brightness +#define GC9A01_SET_DISPLAY_CTL 0x53 // Set display ctl -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Level 2 command opcodes +#define GC9A01_SET_RGB_IF_SIG_CTL 0xB0 // RGB IF signal ctl +#define GC9A01_SET_BLANKING_PORCH_CTL 0xB5 // Set blanking porch ctl +#define GC9A01_SET_FUNCTION_CTL 0xB6 // Set function ctl +#define GC9A01_SET_TEARING_EFFECT 0xBA // Set tering effect control +#define GC9A01_SET_POWER_CTL_7 0xA7 // Set power ctl 7 +#define GC9A01_SET_POWER_CTL_1 0xC1 // Set power ctl 1 +#define GC9A01_SET_POWER_CTL_2 0xC3 // Set power ctl 2 +#define GC9A01_SET_POWER_CTL_3 0xC4 // Set power ctl 3 +#define GC9A01_SET_POWER_CTL_4 0xC9 // Set power ctl 4 +#define GC9A01_SET_FRAME_RATE 0xE8 // Set frame rate +#define GC9A01_SET_SPI_2DATA 0xE9 // Set frame rate +#define GC9A01_SET_GAMMA3 0xF2 // Set gamma 3 +#define GC9A01_SET_GAMMA4 0xF3 // Set gamma 4 +#define GC9A01_SET_IF_CTL 0xF6 // Set interface control -#define GC9A01_SET_RGB_IF_SIG_CTL 0xB0 // RGB IF signal ctl -#define GC9A01_SET_BLANKING_PORCH_CTL 0xB5 // Set blanking porch ctl -#define GC9A01_SET_FUNCTION_CTL 0xB6 // Set function ctl -#define GC9A01_SET_TEARING_EFFECT 0xBA // Set tering effect control -#define GC9A01_SET_IF_CTL 0xF6 // Set interface control //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Level 3 command opcodes - -#define GC9A01_SET_POWER_CTL_7 0xA7 // Set power ctl 7 - -#define GC9A01_SET_POWER_CTL_1 0xC1 // Set power ctl 1 -#define GC9A01_SET_POWER_CTL_2 0xC3 // Set power ctl 2 -#define GC9A01_SET_POWER_CTL_3 0xC4 // Set power ctl 3 -#define GC9A01_SET_POWER_CTL_4 0xC9 // Set power ctl 4 - -#define GC9A01_SET_FRAME_RATE 0xE8 // Set frame rate -#define GC9A01_SET_SPI_2DATA 0xE9 // Set frame rate +// GC9A01 MADCTL Flags +#define GC9A01_MADCTL_MH 0b00000100 -#define GC9A01_SET_GAMMA3 0xF2 -#define GC9A01_SET_GAMMA4 0xF3 +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// GC9A01 Parameter constants -#define GC9A01_PIXEL_FORMAT_12_BPP_MCUIF 0x03 // 12 bits/pixel MCU interface format -#define GC9A01_PIXEL_FORMAT_16_BPP_MCUIF 0x05 // 16 bits/pixel MCU interface format -#define GC9A01_PIXEL_FORMAT_18_BPP_MCUIF 0x06 // 18 bits/pixel MCU interface format -#define GC9A01_PIXEL_FORMAT_16_BPP_RGBIF 0x05 // 16 bits/pixel MCU interface format -#define GC9A01_PIXEL_FORMAT_18_BPP_RGBIF 0x06 // 18 bits/pixel MCU interface format +// Parameter values for +// GC9A01_SET_PIXEL_FORMAT +#define GC9A01_PIXEL_FORMAT_12_BPP_DBI (0b011 << 0) // 12 bits/pixel MCU interface format +#define GC9A01_PIXEL_FORMAT_16_BPP_DBI (0b101 << 0) // 16 bits/pixel MCU interface format +#define GC9A01_PIXEL_FORMAT_18_BPP_DBI (0b110 << 0) // 18 bits/pixel MCU interface format +#define GC9A01_PIXEL_FORMAT_16_BPP_DPI (0b101 << 4) // 16 bits/pixel RGB interface format +#define GC9A01_PIXEL_FORMAT_18_BPP_DPI (0b110 << 4) // 18 bits/pixel RGB interface format +// Parameter values for +// GC9A01_SET_FUNCTION_CTL (2nd parameter) #define GC9A01_SOURCE_OUTPUT_SCAN_DIRECTION_S1_TO_S360 0b00000000 #define GC9A01_SOURCE_OUTPUT_SCAN_DIRECTION_S360_TO_S1 0b00100000 #define GC9A01_GATE_OUTPUT_SCAN_DIRECTION_G1_TO_G32 0b00000000 #define GC9A01_GATE_OUTPUT_SCAN_DIRECTION_G32_TO_G1 0b01000000 #define GC9A01_SCAN_MODE_INTER 0x10 +// Parameter values for +// GC9A01_SET_FUNCTION_CTL (3rd parameter) #define GC9A01_LCD_DRIVE_LINE_16 0x01 #define GC9A01_LCD_DRIVE_LINE_24 0x02 #define GC9A01_LCD_DRIVE_LINE_32 0x03 @@ -80,3 +81,25 @@ #define GC9A01_LCD_DRIVE_LINE_224 0x1B #define GC9A01_LCD_DRIVE_LINE_232 0x1C #define GC9A01_LCD_DRIVE_LINE_240 0x1D + +// Parameter values for +// GC9A01_SET_DISPLAY_CTL +#define GC9A01_BRIGHTNESS_CONTROL_ON 0b00100000 +#define GC9A01_DIMMING_ON 0b00001000 +#define GC9A01_BACKLIGHT_ON 0b00000100 +#define GC9A01_BRIGHTNESS_CONTROL_OFF 0b00000000 +#define GC9A01_DIMMING_OFF 0b00000000 +#define GC9A01_BACKLIGHT_OFF 0b00000000 + +// Parameter values for +// GC9A01_SET_IF_CTL +#define GC9A01_DISPLAY_MODE_INTERNAL_CLOCK 0b00000000 +#define GC9A01_DISPLAY_MODE_RGB_INTERFACE 0b00000100 +#define GC9A01_DISPLAY_MODE_VSYNC_INTERFACE 0b00001000 +#define GC9A01_DSISPLAY_MODE_DISABLED 0b00001100 + +#define GC0A01_GRAM_INTERFACE_VSYNC 0b00000000 +#define GC9A01_GRAM_INTERFACE_RGB 0b00000010 + +#define GC9A01_RGB_INTERFACE_MODE_1_TRANSFER 0b00000000 +#define GC9A01_RGB_INTERFACE_MODE_3_TRANSFER 0b00000001 \ No newline at end of file diff --git a/drivers/painter/gc9xxx/qp_gc9xxx_opcodes.h b/drivers/painter/gc9xxx/qp_gc9xxx_opcodes.h index 375147dcd581..a5d4917f41d1 100644 --- a/drivers/painter/gc9xxx/qp_gc9xxx_opcodes.h +++ b/drivers/painter/gc9xxx/qp_gc9xxx_opcodes.h @@ -7,45 +7,50 @@ // Quantum Painter GC9xxx command opcodes //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#define GC9XXX_GET_ID_INFO 0x04 // Get ID information -#define GC9XXX_GET_STATUS 0x09 // Get status - -#define GC9XXX_CMD_SLEEP_ON 0x10 // Enter sleep mode -#define GC9XXX_CMD_SLEEP_OFF 0x11 // Exit sleep mode -#define GC9XXX_CMD_PARTIAL_ON 0x12 // Enter partial mode -#define GC9XXX_CMD_PARTIAL_OFF 0x13 // Exit partial mode -#define GC9XXX_CMD_INVERT_OFF 0x20 // Exit inverted mode -#define GC9XXX_CMD_INVERT_ON 0x21 // Enter inverted mode -#define GC9XXX_CMD_DISPLAY_OFF 0x28 // Disable display -#define GC9XXX_CMD_DISPLAY_ON 0x29 // Enable display -#define GC9XXX_SET_COL_ADDR 0x2A // Set column address (MSB(StartCol),LSB(StartCol),MSB(EndCol),LSB(EndCol) -#define GC9XXX_SET_ROW_ADDR 0x2B // Set row address (MSB(StartRow),LSB(StartRow),MSB(EndRow),LSB(EndRow) -#define GC9XXX_SET_MEM 0x2C // Set (write) memory -#define GC9XXX_SET_PARTIAL_AREA 0x30 // Set partial area (MSB(StartRow),LSB(StartRow),MSB(EndRow),LSB(EndRow) -#define GC9XXX_SET_VSCROLL 0x33 // Set vertical scroll MSB(TFA),LSB(TFA),MSB(VSA),LSB(VSA),MSB(BFA),LSB(BFA) -#define GC9XXX_CMD_TEARING_OFF 0x34 // Tearing effect line OFF -#define GC9XXX_CMD_TEARING_ON 0x35 // Tearing effect line ON -#define GC9XXX_SET_MEM_ACS_CTL 0x36 // Set mem access ctl -#define GC9XXX_SET_VSCROLL_ADDR 0x37 // Set vscroll start addr -#define GC9XXX_CMD_IDLE_OFF 0x38 // Exit idle mode -#define GC9XXX_CMD_IDLE_ON 0x39 // Enter idle mode -#define GC9XXX_SET_PIXEL_FORMAT 0x3A // Set pixel format -#define GC9XXX_SET_TEAR_SCANLINE 0x44 // Set tearing scanline (ScanLine[7:0]) -#define GC9XXX_GET_TEAR_SCANLINE 0x45 // Get tearing scanline (ScanLine[7:0]) -#define GC9XXX_GET_ID1 0xDA // Get ID1 -#define GC9XXX_GET_ID2 0xDB // Get ID2 -#define GC9XXX_GET_ID3 0xDC // Get ID3 -#define GC9XXX_SET_INTER_REG_ENABLE1 0xFE // Enable Inter Register 1 -#define GC9XXX_SET_INTER_REG_ENABLE2 0xEF // Enable Inter Register 2 -#define GC9XXX_SET_GAMMA1 0xF0 // Set gamma 1 -#define GC9XXX_SET_GAMMA2 0xF1 // Set gamma 2 +#define GC9XXX_GET_ID_INFO 0x04 // Get ID information +#define GC9XXX_GET_STATUS 0x09 // Get status + +#define GC9XXX_CMD_SLEEP_ON 0x10 // Enter sleep mode +#define GC9XXX_CMD_SLEEP_OFF 0x11 // Exit sleep mode +#define GC9XXX_CMD_PARTIAL_ON 0x12 // Enter partial mode +#define GC9XXX_CMD_PARTIAL_OFF 0x13 // Exit partial mode + +#define GC9XXX_CMD_INVERT_OFF 0x20 // Exit inverted mode +#define GC9XXX_CMD_INVERT_ON 0x21 // Enter inverted mode +#define GC9XXX_CMD_DISPLAY_OFF 0x28 // Disable display +#define GC9XXX_CMD_DISPLAY_ON 0x29 // Enable display +#define GC9XXX_SET_COL_ADDR 0x2A // Set column address (MSB(StartCol),LSB(StartCol),MSB(EndCol),LSB(EndCol) +#define GC9XXX_SET_ROW_ADDR 0x2B // Set row address (MSB(StartRow),LSB(StartRow),MSB(EndRow),LSB(EndRow) +#define GC9XXX_SET_MEM 0x2C // Set (write) memory + +#define GC9XXX_SET_PARTIAL_AREA 0x30 // Set partial area (MSB(StartRow),LSB(StartRow),MSB(EndRow),LSB(EndRow) +#define GC9XXX_SET_VSCROLL 0x33 // Set vertical scroll MSB(TFA),LSB(TFA),MSB(VSA),LSB(VSA)+ GC9107 extra param: MSB(BFA),LSB(BFA) +#define GC9XXX_CMD_TEARING_OFF 0x34 // Tearing effect line OFF +#define GC9XXX_CMD_TEARING_ON 0x35 // Tearing effect line ON +#define GC9XXX_SET_MEM_ACS_CTL 0x36 // Set mem access ctl +#define GC9XXX_SET_VSCROLL_ADDR 0x37 // Set vscroll start addr +#define GC9XXX_CMD_IDLE_OFF 0x38 // Exit idle mode +#define GC9XXX_CMD_IDLE_ON 0x39 // Enter idle mode +#define GC9XXX_SET_PIXEL_FORMAT 0x3A // Set pixel format +#define GC9XXX_SET_TEAR_SCANLINE 0x44 // Set tearing scanline (Scanline = LS bit of Param 1 (GC9A01) + Param 2(GC9XXX)) +#define GC9XXX_GET_TEAR_SCANLINE 0x45 // Get tearing scanline (Scanline = LS bit of Param 1 (GC9A01) + Param 2(GC9XXX)) + +#define GC9XXX_GET_ID1 0xDA // Get ID1 +#define GC9XXX_GET_ID2 0xDB // Get ID2 +#define GC9XXX_GET_ID3 0xDC // Get ID3 +#define GC9XXX_SET_INTER_REG_ENABLE1 0xFE // Enable Inter Register 1 +#define GC9XXX_SET_INTER_REG_ENABLE2 0xEF // Enable Inter Register 2 +#define GC9XXX_SET_GAMMA1 0xF0 // Set gamma 1 +#define GC9XXX_SET_GAMMA2 0xF1 // Set gamma 2 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // MADCTL Flags -#define GC9XXX_MADCTL_MY 0b10000000 -#define GC9XXX_MADCTL_MX 0b01000000 -#define GC9XXX_MADCTL_MV 0b00100000 +#define GC9XXX_MADCTL_MY 0b10000000 // Mirror Y (row address order) +#define GC9XXX_MADCTL_MX 0b01000000 // Mirror X (column address order) +#define GC9XXX_MADCTL_MV 0b00100000 // Vertical Refresh Order (bottom to top) #define GC9XXX_MADCTL_ML 0b00010000 -#define GC9XXX_MADCTL_RGB 0b00000000 #define GC9XXX_MADCTL_BGR 0b00001000 -#define GC9XXX_MADCTL_MH 0b00000100 +#define GC9XXX_MADCTL_RGB 0b00000000 + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// GC9XXX Parameter constants From 20fb0b1748f7ce3dfecfd90f242e05d63934a4eb Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Mon, 19 Feb 2024 18:13:06 +0000 Subject: [PATCH 20/35] More cleanup --- drivers/painter/gc9xxx/qp_gc9107.c | 43 ------------------------------ 1 file changed, 43 deletions(-) diff --git a/drivers/painter/gc9xxx/qp_gc9107.c b/drivers/painter/gc9xxx/qp_gc9107.c index b9adad2ff579..866a198570d1 100644 --- a/drivers/painter/gc9xxx/qp_gc9107.c +++ b/drivers/painter/gc9xxx/qp_gc9107.c @@ -51,49 +51,6 @@ __attribute__((weak)) bool qp_gc9107_init(painter_device_t device, painter_rotat GC9XXX_CMD_DISPLAY_ON, 20, 0 }; - // const uint8_t gc9107_init_sequence[] = { - // // Command, Delay, N, Data[N] - // // The following commands are not really needed since the functionality isn't being used - - // GC9XXX_SET_INTER_REG_ENABLE1, 5, 0, - // GC9XXX_SET_INTER_REG_ENABLE2, 5, 0, - // 0xB0, 0, 1, 0xC0, - // GC9107_SET_FUNCTION_CTL2, 0, 1, GC9107_ALLOW_SET_VGH | GC9107_ALLOW_SET_VGL | GC9107_ALLOW_SET_VGH_VGL_CLK, - // GC9107_SET_FUNCTION_CTL3, 0, 1, GC9107_ALLOW_SET_GAMMA1 | GC9107_ALLOW_SET_GAMMA2, - // 0xB4, 0, 1, 0x04, - // GC9107_SET_FUNCTION_CTL6, 0, 1, GC9107_ALLOW_SET_FRAMERATE | GC9107_ALLOW_SET_COMPLEMENT_RGB, // Offset an diagonal 0b00011001 - // 0xB7, 0, 1, 0x01, - // 0xB8, 0, 1, 0x08, - - // // GC9107_SET_COMPLEMENT_RGB, 0, 1, GC9107_COMPLEMENT_WITH_LSB, - // // GC9107_SET_FRAME_RATE, 0, 1, 0x19, // 69Hz - - // // GC9107_SET_VGH, 0, 1, GC9107_VGH_P140, - // // GC9107_SET_VGL, 0, 1, VGL_N_075, - - // // GC9107_SET_VGH_VGL_CLK, 0, 1, GC9107_VGH_CLK_DIV_4 | GC9107_VGL_CLK_DIV_4, - - // // Values taken from waveshare example. Colors seem a little washed out - // // GC9XXX_SET_GAMMA1, 0, 14, 0x1F, 0x28, 0x04, 0x3E, 0x2A, 0x2E, 0x20, 0x00, 0x0C, 0x06, 0x00, 0x1C, 0x1F, 0x0F, - // // GC9XXX_SET_GAMMA2, 0, 14, 0x00, 0x2D, 0x2F, 0x3C, 0x6F, 0x1C, 0x0B, 0x00, 0x00, 0x00, 0x07, 0x0D, 0x11, 0x0F, - - // 0xA8, 0, 1, 0x19, - // 0xAC, 0, 1, 0xC0, - // 0xAB, 0, 1, 0x0E,// - - // 0xE8, 0, 1, 0x24, - // 0xE9, 0, 1, 0x48, - // 0xEA, 0, 1, 0x22, - - // 0xC6, 0, 1, 0x30, - // 0xC7, 0, 1, 0x18, - - // GC9XXX_SET_PIXEL_FORMAT, 0, 1, GC9107_PIXEL_FORMAT_16_BPP, - // GC9XXX_CMD_INVERT_ON, 0, 0, - // GC9XXX_CMD_SLEEP_OFF, 120, 0, - // GC9XXX_CMD_DISPLAY_ON, 20, 0 - // }; - // clang-format on qp_comms_bulk_command_sequence(device, gc9107_init_sequence, sizeof(gc9107_init_sequence)); From 3c634f401a092bcc67501aabbf64d69681d08fb7 Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Mon, 19 Feb 2024 21:31:14 +0000 Subject: [PATCH 21/35] code format --- drivers/painter/gc9xxx/qp_gc9107_opcodes.h | 2 +- drivers/painter/gc9xxx/qp_gc9a01_opcodes.h | 37 +++++------ drivers/painter/gc9xxx/qp_gc9xxx_opcodes.h | 77 +++++++++++----------- 3 files changed, 57 insertions(+), 59 deletions(-) diff --git a/drivers/painter/gc9xxx/qp_gc9107_opcodes.h b/drivers/painter/gc9xxx/qp_gc9107_opcodes.h index a0fe470f626e..ed35e66dabdf 100644 --- a/drivers/painter/gc9xxx/qp_gc9107_opcodes.h +++ b/drivers/painter/gc9xxx/qp_gc9107_opcodes.h @@ -21,7 +21,7 @@ #define GC9107_SET_FUNCTION_CTL3 0xB3 // Set access to Gamma control commands #define GC9107_SET_DISPLAY_INVERSION 0xB4 // Set Display Inversion control #define GC9107_SET_FUNCTION_CTL6 0xB6 // Set access to commands SET_FRAME_RATE, SET_COMPLEMENT_RGB and SET_BLANK_PORCH -#define GC9107_GET_CUSTOM_ID_INFO 0xD3 // Set customized display id information +#define GC9107_SET_CUSTOM_ID_INFO 0xD3 // Set customized display id information #define GC9107_AVDD_VCL_CLK 0xE3 // AVDD_CLK #define GC9107_SET_VGH 0xE8 // Set VGH #define GC9107_SET_VGL 0xE9 // Set VGL diff --git a/drivers/painter/gc9xxx/qp_gc9a01_opcodes.h b/drivers/painter/gc9xxx/qp_gc9a01_opcodes.h index bdb3220ce8d0..5853902e6834 100644 --- a/drivers/painter/gc9xxx/qp_gc9a01_opcodes.h +++ b/drivers/painter/gc9xxx/qp_gc9a01_opcodes.h @@ -7,32 +7,31 @@ // Quantum Painter GC9A01 command opcodes //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#define GC9A01_SET_MEM_CONT 0x3C // Set memory continue -#define GC9A01_SET_BRIGHTNESS 0x51 // Set brightness -#define GC9A01_SET_DISPLAY_CTL 0x53 // Set display ctl - -#define GC9A01_SET_RGB_IF_SIG_CTL 0xB0 // RGB IF signal ctl -#define GC9A01_SET_BLANKING_PORCH_CTL 0xB5 // Set blanking porch ctl -#define GC9A01_SET_FUNCTION_CTL 0xB6 // Set function ctl -#define GC9A01_SET_TEARING_EFFECT 0xBA // Set tering effect control -#define GC9A01_SET_POWER_CTL_7 0xA7 // Set power ctl 7 -#define GC9A01_SET_POWER_CTL_1 0xC1 // Set power ctl 1 -#define GC9A01_SET_POWER_CTL_2 0xC3 // Set power ctl 2 -#define GC9A01_SET_POWER_CTL_3 0xC4 // Set power ctl 3 -#define GC9A01_SET_POWER_CTL_4 0xC9 // Set power ctl 4 -#define GC9A01_SET_FRAME_RATE 0xE8 // Set frame rate -#define GC9A01_SET_SPI_2DATA 0xE9 // Set frame rate -#define GC9A01_SET_GAMMA3 0xF2 // Set gamma 3 -#define GC9A01_SET_GAMMA4 0xF3 // Set gamma 4 -#define GC9A01_SET_IF_CTL 0xF6 // Set interface control +#define GC9A01_SET_MEM_CONT 0x3C // Set memory continue +#define GC9A01_SET_BRIGHTNESS 0x51 // Set brightness +#define GC9A01_SET_DISPLAY_CTL 0x53 // Set display ctl +#define GC9A01_SET_RGB_IF_SIG_CTL 0xB0 // RGB IF signal ctl +#define GC9A01_SET_BLANKING_PORCH_CTL 0xB5 // Set blanking porch ctl +#define GC9A01_SET_FUNCTION_CTL 0xB6 // Set function ctl +#define GC9A01_SET_TEARING_EFFECT 0xBA // Set tering effect control +#define GC9A01_SET_POWER_CTL_7 0xA7 // Set power ctl 7 +#define GC9A01_SET_POWER_CTL_1 0xC1 // Set power ctl 1 +#define GC9A01_SET_POWER_CTL_2 0xC3 // Set power ctl 2 +#define GC9A01_SET_POWER_CTL_3 0xC4 // Set power ctl 3 +#define GC9A01_SET_POWER_CTL_4 0xC9 // Set power ctl 4 +#define GC9A01_SET_FRAME_RATE 0xE8 // Set frame rate +#define GC9A01_SET_SPI_2DATA 0xE9 // Set frame rate +#define GC9A01_SET_GAMMA3 0xF2 // Set gamma 3 +#define GC9A01_SET_GAMMA4 0xF3 // Set gamma 4 +#define GC9A01_SET_IF_CTL 0xF6 // Set interface control //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // GC9A01 MADCTL Flags #define GC9A01_MADCTL_MH 0b00000100 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// GC9A01 Parameter constants +// GC9A01 Parameter constants // Parameter values for // GC9A01_SET_PIXEL_FORMAT diff --git a/drivers/painter/gc9xxx/qp_gc9xxx_opcodes.h b/drivers/painter/gc9xxx/qp_gc9xxx_opcodes.h index a5d4917f41d1..7e0fbf9110b2 100644 --- a/drivers/painter/gc9xxx/qp_gc9xxx_opcodes.h +++ b/drivers/painter/gc9xxx/qp_gc9xxx_opcodes.h @@ -7,50 +7,49 @@ // Quantum Painter GC9xxx command opcodes //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#define GC9XXX_GET_ID_INFO 0x04 // Get ID information -#define GC9XXX_GET_STATUS 0x09 // Get status - -#define GC9XXX_CMD_SLEEP_ON 0x10 // Enter sleep mode -#define GC9XXX_CMD_SLEEP_OFF 0x11 // Exit sleep mode -#define GC9XXX_CMD_PARTIAL_ON 0x12 // Enter partial mode -#define GC9XXX_CMD_PARTIAL_OFF 0x13 // Exit partial mode - -#define GC9XXX_CMD_INVERT_OFF 0x20 // Exit inverted mode -#define GC9XXX_CMD_INVERT_ON 0x21 // Enter inverted mode -#define GC9XXX_CMD_DISPLAY_OFF 0x28 // Disable display -#define GC9XXX_CMD_DISPLAY_ON 0x29 // Enable display -#define GC9XXX_SET_COL_ADDR 0x2A // Set column address (MSB(StartCol),LSB(StartCol),MSB(EndCol),LSB(EndCol) -#define GC9XXX_SET_ROW_ADDR 0x2B // Set row address (MSB(StartRow),LSB(StartRow),MSB(EndRow),LSB(EndRow) -#define GC9XXX_SET_MEM 0x2C // Set (write) memory - -#define GC9XXX_SET_PARTIAL_AREA 0x30 // Set partial area (MSB(StartRow),LSB(StartRow),MSB(EndRow),LSB(EndRow) -#define GC9XXX_SET_VSCROLL 0x33 // Set vertical scroll MSB(TFA),LSB(TFA),MSB(VSA),LSB(VSA)+ GC9107 extra param: MSB(BFA),LSB(BFA) -#define GC9XXX_CMD_TEARING_OFF 0x34 // Tearing effect line OFF -#define GC9XXX_CMD_TEARING_ON 0x35 // Tearing effect line ON -#define GC9XXX_SET_MEM_ACS_CTL 0x36 // Set mem access ctl -#define GC9XXX_SET_VSCROLL_ADDR 0x37 // Set vscroll start addr -#define GC9XXX_CMD_IDLE_OFF 0x38 // Exit idle mode -#define GC9XXX_CMD_IDLE_ON 0x39 // Enter idle mode -#define GC9XXX_SET_PIXEL_FORMAT 0x3A // Set pixel format -#define GC9XXX_SET_TEAR_SCANLINE 0x44 // Set tearing scanline (Scanline = LS bit of Param 1 (GC9A01) + Param 2(GC9XXX)) -#define GC9XXX_GET_TEAR_SCANLINE 0x45 // Get tearing scanline (Scanline = LS bit of Param 1 (GC9A01) + Param 2(GC9XXX)) - -#define GC9XXX_GET_ID1 0xDA // Get ID1 -#define GC9XXX_GET_ID2 0xDB // Get ID2 -#define GC9XXX_GET_ID3 0xDC // Get ID3 -#define GC9XXX_SET_INTER_REG_ENABLE1 0xFE // Enable Inter Register 1 -#define GC9XXX_SET_INTER_REG_ENABLE2 0xEF // Enable Inter Register 2 -#define GC9XXX_SET_GAMMA1 0xF0 // Set gamma 1 -#define GC9XXX_SET_GAMMA2 0xF1 // Set gamma 2 +#define GC9XXX_GET_ID_INFO 0x04 // Get ID information +#define GC9XXX_GET_STATUS 0x09 // Get status + +#define GC9XXX_CMD_SLEEP_ON 0x10 // Enter sleep mode +#define GC9XXX_CMD_SLEEP_OFF 0x11 // Exit sleep mode +#define GC9XXX_CMD_PARTIAL_ON 0x12 // Enter partial mode +#define GC9XXX_CMD_PARTIAL_OFF 0x13 // Exit partial mode + +#define GC9XXX_CMD_INVERT_OFF 0x20 // Exit inverted mode +#define GC9XXX_CMD_INVERT_ON 0x21 // Enter inverted mode +#define GC9XXX_CMD_DISPLAY_OFF 0x28 // Disable display +#define GC9XXX_CMD_DISPLAY_ON 0x29 // Enable display +#define GC9XXX_SET_COL_ADDR 0x2A // Set column address (MSB(StartCol),LSB(StartCol),MSB(EndCol),LSB(EndCol) +#define GC9XXX_SET_ROW_ADDR 0x2B // Set row address (MSB(StartRow),LSB(StartRow),MSB(EndRow),LSB(EndRow) +#define GC9XXX_SET_MEM 0x2C // Set (write) memory + +#define GC9XXX_SET_PARTIAL_AREA 0x30 // Set partial area (MSB(StartRow),LSB(StartRow),MSB(EndRow),LSB(EndRow) +#define GC9XXX_SET_VSCROLL 0x33 // Set vertical scroll MSB(TFA),LSB(TFA),MSB(VSA),LSB(VSA)+ GC9107 extra param: MSB(BFA),LSB(BFA) +#define GC9XXX_CMD_TEARING_OFF 0x34 // Tearing effect line OFF +#define GC9XXX_CMD_TEARING_ON 0x35 // Tearing effect line ON +#define GC9XXX_SET_MEM_ACS_CTL 0x36 // Set mem access ctl +#define GC9XXX_SET_VSCROLL_ADDR 0x37 // Set vscroll start addr +#define GC9XXX_CMD_IDLE_OFF 0x38 // Exit idle mode +#define GC9XXX_CMD_IDLE_ON 0x39 // Enter idle mode +#define GC9XXX_SET_PIXEL_FORMAT 0x3A // Set pixel format +#define GC9XXX_SET_TEAR_SCANLINE 0x44 // Set tearing scanline (Scanline = LS bit of Param 1 (GC9A01) + Param 2(GC9XXX)) +#define GC9XXX_GET_TEAR_SCANLINE 0x45 // Get tearing scanline (Scanline = LS bit of Param 1 (GC9A01) + Param 2(GC9XXX)) +#define GC9XXX_GET_ID1 0xDA // Get ID1 +#define GC9XXX_GET_ID2 0xDB // Get ID2 +#define GC9XXX_GET_ID3 0xDC // Get ID3 +#define GC9XXX_SET_INTER_REG_ENABLE1 0xFE // Enable Inter Register 1 +#define GC9XXX_SET_INTER_REG_ENABLE2 0xEF // Enable Inter Register 2 +#define GC9XXX_SET_GAMMA1 0xF0 // Set gamma 1 +#define GC9XXX_SET_GAMMA2 0xF1 // Set gamma 2 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // MADCTL Flags -#define GC9XXX_MADCTL_MY 0b10000000 // Mirror Y (row address order) -#define GC9XXX_MADCTL_MX 0b01000000 // Mirror X (column address order) -#define GC9XXX_MADCTL_MV 0b00100000 // Vertical Refresh Order (bottom to top) +#define GC9XXX_MADCTL_MY 0b10000000 // Mirror Y (row address order) +#define GC9XXX_MADCTL_MX 0b01000000 // Mirror X (column address order) +#define GC9XXX_MADCTL_MV 0b00100000 // Vertical Refresh Order (bottom to top) #define GC9XXX_MADCTL_ML 0b00010000 #define GC9XXX_MADCTL_BGR 0b00001000 #define GC9XXX_MADCTL_RGB 0b00000000 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// GC9XXX Parameter constants +// GC9XXX Parameter constants From 35602bc5b936732852bb71208509f5d383526d59 Mon Sep 17 00:00:00 2001 From: jack <0x6A73@pm.me> Date: Sun, 18 Feb 2024 23:01:25 -0700 Subject: [PATCH 22/35] Fixup boardsource/equals (#23106) * initial * reorder headers --- keyboards/boardsource/equals/48/info.json | 47 ------------------- keyboards/boardsource/equals/60/info.json | 47 ------------------- keyboards/boardsource/equals/avr/info.json | 47 ------------------- keyboards/boardsource/equals/avr/rules.mk | 1 + keyboards/boardsource/equals/equals.c | 46 ++++++++++++++++-- keyboards/boardsource/equals/info.json | 54 ++++++++++++++++++++-- keyboards/boardsource/equals/readme.md | 2 +- keyboards/boardsource/equals/ui.c | 40 ---------------- 8 files changed, 93 insertions(+), 191 deletions(-) create mode 100644 keyboards/boardsource/equals/avr/rules.mk delete mode 100644 keyboards/boardsource/equals/ui.c diff --git a/keyboards/boardsource/equals/48/info.json b/keyboards/boardsource/equals/48/info.json index 63561f4c5979..054779f6fe1a 100644 --- a/keyboards/boardsource/equals/48/info.json +++ b/keyboards/boardsource/equals/48/info.json @@ -14,53 +14,6 @@ "pin": "GP21" }, "rgb_matrix": { - "driver": "ws2812", - "max_brightness": 150, - "animations": { - "alphas_mods": true, - "band_pinwheel_sat": true, - "band_pinwheel_val": true, - "band_sat": true, - "band_spiral_sat": true, - "band_spiral_val": true, - "band_val": true, - "breathing": true, - "cycle_all": true, - "cycle_left_right": true, - "cycle_out_in": true, - "cycle_out_in_dual": true, - "cycle_pinwheel": true, - "cycle_spiral": true, - "cycle_up_down": true, - "digital_rain": true, - "dual_beacon": true, - "gradient_left_right": true, - "gradient_up_down": true, - "hue_breathing": true, - "hue_pendulum": true, - "hue_wave": true, - "jellybean_raindrops": true, - "multisplash": true, - "pixel_flow": true, - "pixel_fractal": true, - "pixel_rain": true, - "rainbow_beacon": true, - "rainbow_moving_chevron": true, - "rainbow_pinwheels": true, - "raindrops": true, - "solid_multisplash": true, - "solid_reactive": true, - "solid_reactive_cross": true, - "solid_reactive_multicross": true, - "solid_reactive_multinexus": true, - "solid_reactive_multiwide": true, - "solid_reactive_nexus": true, - "solid_reactive_simple": true, - "solid_reactive_wide": true, - "solid_splash": true, - "splash": true, - "typing_heatmap": true - }, "layout": [ { "flags": 2, "x": 220, "y": 17 }, { "flags": 2, "x": 172, "y": 17 }, diff --git a/keyboards/boardsource/equals/60/info.json b/keyboards/boardsource/equals/60/info.json index 355e434b4e5d..da3fc3691a64 100644 --- a/keyboards/boardsource/equals/60/info.json +++ b/keyboards/boardsource/equals/60/info.json @@ -14,53 +14,6 @@ "pin": "GP21" }, "rgb_matrix": { - "driver": "ws2812", - "max_brightness": 150, - "animations": { - "alphas_mods": true, - "band_pinwheel_sat": true, - "band_pinwheel_val": true, - "band_sat": true, - "band_spiral_sat": true, - "band_spiral_val": true, - "band_val": true, - "breathing": true, - "cycle_all": true, - "cycle_left_right": true, - "cycle_out_in": true, - "cycle_out_in_dual": true, - "cycle_pinwheel": true, - "cycle_spiral": true, - "cycle_up_down": true, - "digital_rain": true, - "dual_beacon": true, - "gradient_left_right": true, - "gradient_up_down": true, - "hue_breathing": true, - "hue_pendulum": true, - "hue_wave": true, - "jellybean_raindrops": true, - "multisplash": true, - "pixel_flow": true, - "pixel_fractal": true, - "pixel_rain": true, - "rainbow_beacon": true, - "rainbow_moving_chevron": true, - "rainbow_pinwheels": true, - "raindrops": true, - "solid_multisplash": true, - "solid_reactive": true, - "solid_reactive_cross": true, - "solid_reactive_multicross": true, - "solid_reactive_multinexus": true, - "solid_reactive_multiwide": true, - "solid_reactive_nexus": true, - "solid_reactive_simple": true, - "solid_reactive_wide": true, - "solid_splash": true, - "splash": true, - "typing_heatmap": true - }, "layout": [ { "flags": 2, "x": 220, "y": 17 }, { "flags": 2, "x": 172, "y": 17 }, diff --git a/keyboards/boardsource/equals/avr/info.json b/keyboards/boardsource/equals/avr/info.json index bbade34e6383..942feba4ecd8 100644 --- a/keyboards/boardsource/equals/avr/info.json +++ b/keyboards/boardsource/equals/avr/info.json @@ -13,53 +13,6 @@ "pin": "C6" }, "rgb_matrix": { - "driver": "ws2812", - "max_brightness": 150, - "animations": { - "alphas_mods": true, - "band_pinwheel_sat": true, - "band_pinwheel_val": true, - "band_sat": true, - "band_spiral_sat": true, - "band_spiral_val": true, - "band_val": true, - "breathing": true, - "cycle_all": true, - "cycle_left_right": true, - "cycle_out_in": true, - "cycle_out_in_dual": true, - "cycle_pinwheel": true, - "cycle_spiral": true, - "cycle_up_down": true, - "digital_rain": true, - "dual_beacon": true, - "gradient_left_right": true, - "gradient_up_down": true, - "hue_breathing": true, - "hue_pendulum": true, - "hue_wave": true, - "jellybean_raindrops": true, - "multisplash": true, - "pixel_flow": true, - "pixel_fractal": true, - "pixel_rain": true, - "rainbow_beacon": true, - "rainbow_moving_chevron": true, - "rainbow_pinwheels": true, - "raindrops": true, - "solid_multisplash": true, - "solid_reactive": true, - "solid_reactive_cross": true, - "solid_reactive_multicross": true, - "solid_reactive_multinexus": true, - "solid_reactive_multiwide": true, - "solid_reactive_nexus": true, - "solid_reactive_simple": true, - "solid_reactive_wide": true, - "solid_splash": true, - "splash": true, - "typing_heatmap": true - }, "layout": [ { "flags": 2, "x": 220, "y": 17 }, { "flags": 2, "x": 172, "y": 17 }, diff --git a/keyboards/boardsource/equals/avr/rules.mk b/keyboards/boardsource/equals/avr/rules.mk new file mode 100644 index 000000000000..6e7633bfe015 --- /dev/null +++ b/keyboards/boardsource/equals/avr/rules.mk @@ -0,0 +1 @@ +# This file intentionally left blank diff --git a/keyboards/boardsource/equals/equals.c b/keyboards/boardsource/equals/equals.c index 8eb933e70d21..074fa3df3e2d 100644 --- a/keyboards/boardsource/equals/equals.c +++ b/keyboards/boardsource/equals/equals.c @@ -1,18 +1,54 @@ // Copyright 2023 @boardsource // SPDX-License-Identifier: GPL-2.0-or-later + #include "quantum.h" -__attribute__((weak)) void ui_init(void) {}; -__attribute__((weak)) void ui_task(void) {}; #ifdef QUANTUM_PAINTER_ENABLE +#include "qp.h" +#include "qp_st7735.h" +#include "graphics/thintel15.qff.c" + +static painter_device_t oled; +static painter_font_handle_t font; + +__attribute__((weak)) void ui_init(void) { + oled = qp_st7735_make_spi_device(128, 160, OLED_CS_PIN, OLED_DC_PIN, OLED_RST_PIN, 8, 0); + font = qp_load_font_mem(font_thintel15); + qp_init(oled, QP_ROTATION_0); + qp_rect(oled, 0, 0, 130, 162, 0, 0, 0, true); + qp_rect(oled, 20, 20, 108, 60, 55, 55, 55, true); + qp_rect(oled, 20, 80, 108, 120, 55, 55, 55, true); + qp_flush(oled); +} + +__attribute__((weak)) void ui_task(void) { + static const char *text = "Layer:"; + int16_t width = qp_textwidth(font, text); + qp_drawtext(oled, 20, 140, font, text); + + switch (get_highest_layer(layer_state)) { + case 0: + qp_drawtext(oled, (20 + width), 140, font, "QWERTY"); + break; + case 1: + qp_drawtext(oled, (20 + width), 140, font, "SYMBOL"); + break; + case 2: + qp_drawtext(oled, (20 + width), 140, font, "NUMBER"); + break; + default: + qp_drawtext(oled, (20 + width), 140, font, "_PANIC_"); + break; + } +} + void keyboard_post_init_kb(void) { - // Init the display ui_init(); keyboard_post_init_user(); } void housekeeping_task_kb(void) { - // Draw the display ui_task(); + housekeeping_task_user(); } -#endif //QUANTUM_PAINTER_ENABLE +#endif // QUANTUM_PAINTER_ENABLE diff --git a/keyboards/boardsource/equals/info.json b/keyboards/boardsource/equals/info.json index bed8ec2640c5..c6d6245dbfc5 100644 --- a/keyboards/boardsource/equals/info.json +++ b/keyboards/boardsource/equals/info.json @@ -4,18 +4,64 @@ "diode_direction": "COL2ROW", "features": { "bootmagic": true, - "command": false, - "console": false, "extrakey": true, "mousekey": true, "nkro": true, "rgb_matrix": true }, - "url": "", "usb": { "device_version": "1.0.0", "pid": "0x7688", "vid": "0x4273" + }, + "rgb_matrix": { + "driver": "ws2812", + "max_brightness": 150, + "sleep": true, + "animations": { + "alphas_mods": true, + "band_pinwheel_sat": true, + "band_pinwheel_val": true, + "band_sat": true, + "band_spiral_sat": true, + "band_spiral_val": true, + "band_val": true, + "breathing": true, + "cycle_all": true, + "cycle_left_right": true, + "cycle_out_in": true, + "cycle_out_in_dual": true, + "cycle_pinwheel": true, + "cycle_spiral": true, + "cycle_up_down": true, + "digital_rain": true, + "dual_beacon": true, + "gradient_left_right": true, + "gradient_up_down": true, + "hue_breathing": true, + "hue_pendulum": true, + "hue_wave": true, + "jellybean_raindrops": true, + "multisplash": true, + "pixel_flow": true, + "pixel_fractal": true, + "pixel_rain": true, + "rainbow_beacon": true, + "rainbow_moving_chevron": true, + "rainbow_pinwheels": true, + "raindrops": true, + "solid_multisplash": true, + "solid_reactive": true, + "solid_reactive_cross": true, + "solid_reactive_multicross": true, + "solid_reactive_multinexus": true, + "solid_reactive_multiwide": true, + "solid_reactive_nexus": true, + "solid_reactive_simple": true, + "solid_reactive_wide": true, + "solid_splash": true, + "splash": true, + "typing_heatmap": true + } } - } diff --git a/keyboards/boardsource/equals/readme.md b/keyboards/boardsource/equals/readme.md index 9c5d48f5c297..82d24b18145d 100644 --- a/keyboards/boardsource/equals/readme.md +++ b/keyboards/boardsource/equals/readme.md @@ -3,7 +3,7 @@ ![equals](https://i.imgur.com/c3adFqsh.jpeg) * Keyboard Maintainer: [Cole Smith](https://github.com/boardsource) -* Hardware Supported: Equals PCB w/ RP2040 +* Hardware Supported: Equals PCB w/ RP2040 or Equals Kit w/ Pro Micro * Hardware Availability: [boardsource](https://boardsource.xyz) Make example for this keyboard (after setting up your build environment): diff --git a/keyboards/boardsource/equals/ui.c b/keyboards/boardsource/equals/ui.c deleted file mode 100644 index f953fc4c8896..000000000000 --- a/keyboards/boardsource/equals/ui.c +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2023 Cole Smith (@boardsource) -// SPDX-License-Identifier: GPL-2.0-or-later -#include -#include "qp.h" -#include "qp_st7735.h" -#include "graphics/thintel15.qff.c" - -static painter_device_t oled; -static painter_font_handle_t font; - -__attribute__((weak)) void ui_init(void) { - oled = qp_st7735_make_spi_device(128, 160, OLED_CS_PIN, OLED_DC_PIN, OLED_RST_PIN, 8, 0); - font = qp_load_font_mem(font_thintel15); - qp_init(oled, QP_ROTATION_0); - qp_rect(oled, 0, 0, 130, 162, 0, 0, 0, true); - qp_rect(oled, 20, 20, 108, 60, 55, 55, 55, true); - qp_rect(oled, 20, 80, 108, 120, 55, 55, 55, true); - qp_flush(oled); -} - -__attribute__((weak)) void ui_task(void) { - static const char *text = "Layer:"; - int16_t width = qp_textwidth(font, text); - qp_drawtext(oled, 20, 140, font, text); - - switch (get_highest_layer(layer_state)) { - case 0: - qp_drawtext(oled, (20 + width), 140, font, "QWERTY"); - break; - case 1: - qp_drawtext(oled, (20 + width), 140, font, "SYMBOL"); - break; - case 2: - qp_drawtext(oled, (20 + width), 140, font, "NUMBER"); - break; - default: - qp_drawtext(oled, (20 + width), 140, font, "_PANIC_"); - break; - } -} From 9b957f08d8214f2d1508bec99029325a91940924 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Mon, 19 Feb 2024 09:48:06 +0000 Subject: [PATCH 23/35] Manual user keymap removal (#23104) --- .../gergoplex/keymaps/georgepetri/combos.def | 11 - .../gergoplex/keymaps/georgepetri/config.h | 31 - .../keymaps/georgepetri/gergoplex.def | 7 - .../gergoplex/keymaps/georgepetri/keymap.c | 212 ----- .../gergoplex/keymaps/georgepetri/readme.md | 6 - .../gergoplex/keymaps/georgepetri/rules.mk | 20 - .../gergoplex/keymaps/tgrosinger/combos.def | 11 - .../gergoplex/keymaps/tgrosinger/config.h | 4 - .../keymaps/tgrosinger/gergoplex.def | 17 - .../gergoplex/keymaps/tgrosinger/keymap.c | 286 ------- .../gergoplex/keymaps/tgrosinger/readme.md | 12 - .../gergoplex/keymaps/tgrosinger/rules.mk | 18 - keyboards/geonworks/w1_at/keymaps/zq/keymap.c | 119 --- .../geonworks/w1_at/keymaps/zq/readme.md | 21 - keyboards/geonworks/w1_at/keymaps/zq/rules.mk | 1 - .../p65/ansi/keymaps/achrovisual/keymap.c | 56 -- .../p65/ansi/keymaps/achrovisual/readme.md | 1 - .../keymaps/achrovisual/rgb_matrix_user.inc | 72 -- .../p65/ansi/keymaps/achrovisual/rules.mk | 1 - .../gmmk2/p65/ansi/keymaps/thekorn/keymap.c | 44 - .../gmmk2/p65/ansi/keymaps/thekorn/readme.md | 1 - .../pro/rev1/iso/keymaps/chofstede/keymap.c | 107 --- .../pro/rev1/iso/keymaps/chofstede/readme.md | 8 - .../rev1/iso/keymaps/falkecarlsen/keymap.c | 72 -- .../rev1/iso/keymaps/falkecarlsen/readme.md | 8 - .../solder/keymaps/dangjoeltang/keymap.c | 232 ----- .../solder/keymaps/dangjoeltang/readme.md | 9 - .../think65/solder/keymaps/yt/config.h | 19 - .../think65/solder/keymaps/yt/keymap.c | 139 --- .../think65/solder/keymaps/yt/readme.md | 3 - .../think65/solder/keymaps/yt/rules.mk | 5 - .../hadron/ver3/keymaps/sebaslayout/keymap.c | 43 - .../hadron/ver3/keymaps/sebaslayout/readme.md | 7 - .../handwired/aim65/keymaps/bonnee/keymap.c | 42 - .../baredev/rev1/keymaps/manoshu/keymap.c | 99 --- .../baredev/rev1/keymaps/manoshu/readme.md | 16 - .../handwired/bento/keymaps/cbc02009/keymap.c | 42 - .../4x5_5/keymaps/ssedrick/keymap.c | 89 -- .../5x6/keymaps/nabos/config.h | 21 - .../5x6/keymaps/nabos/keymap.c | 75 -- .../5x6/keymaps/squirrel/config.h | 49 -- .../5x6/keymaps/squirrel/keymap.c | 106 --- .../5x6/keymaps/squirrel/rules.mk | 1 - .../6x6/keymaps/happysalada/keymap.c | 167 ---- .../k_numpad17/keymaps/karlssn/keymap.c | 61 -- .../k_numpad17/keymaps/karlssn/rules.mk | 1 - .../lagrange/keymaps/dpapavas/config.h | 22 - .../lagrange/keymaps/dpapavas/keymap.c | 202 ----- .../lagrange/keymaps/dpapavas/rules.mk | 4 - .../handwired/marauder/keymaps/orvia/keymap.c | 199 ----- .../handwired/marauder/keymaps/orvia/rules.mk | 3 - .../handwired/pteron/keymaps/FSund/keymap.c | 116 --- .../pteron/keymaps/alzafacon/config.h | 22 - .../pteron/keymaps/alzafacon/keymap.c | 120 --- .../pteron/keymaps/alzafacon/readme.md | 4 - .../pteron/keymaps/alzafacon/rules.mk | 2 - .../selene/keymaps/bpendragon/keymap.c | 43 - .../steamvan/keymaps/jmdaly/keymap.c | 64 -- .../steamvan/keymaps/jmdaly/readme.md | 1 - .../handwired/z150/keymaps/zyxx/keymap.c | 65 -- .../helix/rev2/keymaps/fraanrosi/config.h | 64 -- .../helix/rev2/keymaps/fraanrosi/keymap.c | 288 ------- .../helix/rev2/keymaps/fraanrosi/readme.md | 40 - .../helix/rev2/keymaps/fraanrosi/rules.mk | 24 - keyboards/helix/rev2/keymaps/froggy/config.h | 50 -- .../helix/rev2/keymaps/froggy/helixfont.h | 235 ----- keyboards/helix/rev2/keymaps/froggy/keymap.c | 696 --------------- keyboards/helix/rev2/keymaps/froggy/readme.md | 83 -- keyboards/helix/rev2/keymaps/froggy/rules.mk | 27 - .../helix/rev2/keymaps/froggy_106/config.h | 47 - .../helix/rev2/keymaps/froggy_106/helixfont.h | 235 ----- .../helix/rev2/keymaps/froggy_106/keymap.c | 810 ------------------ .../helix/rev2/keymaps/froggy_106/readme.md | 85 -- .../helix/rev2/keymaps/froggy_106/rules.mk | 27 - keyboards/hotdox76v2/keymaps/dancxjo/config.h | 6 - keyboards/hotdox76v2/keymaps/dancxjo/keymap.c | 177 ---- keyboards/hotdox76v2/keymaps/dancxjo/rules.mk | 4 - .../hs60/v2/hhkb/keymaps/goatmaster/config.h | 22 - .../hs60/v2/hhkb/keymaps/goatmaster/keymap.c | 71 -- .../hs60/v2/hhkb/keymaps/goatmaster/readme.md | 6 - .../hs60/v2/hhkb/keymaps/goatmaster/rules.mk | 1 - .../keymaps/oncesavedgaming/keymap.c | 23 - .../lfk78/keymaps/ca178858/keymap.c | 136 --- .../lfk78/keymaps/ca178858/readme.md | 1 - .../lfk78/keymaps/ca178858/rules.mk | 3 - .../lfk87/keymaps/ca178858/keymap.c | 170 ---- .../lfk87/keymaps/ca178858/readme.md | 1 - .../lfk87/keymaps/ca178858/rules.mk | 2 - .../mini1800/keymaps/ca178858/keymap.c | 108 --- .../mini1800/keymaps/ca178858/rules.mk | 1 - .../mercutio/keymaps/fearless_spiff/config.h | 28 - .../mercutio/keymaps/fearless_spiff/keymap.c | 301 ------- .../mercutio/keymaps/fearless_spiff/readme.md | 29 - .../mercutio/keymaps/fearless_spiff/rules.mk | 7 - .../keymaps/fearless_spiff_en/config.h | 19 - .../keymaps/fearless_spiff_en/keymap.c | 293 ------- .../keymaps/fearless_spiff_en/readme.md | 22 - .../keymaps/fearless_spiff_en/rules.mk | 3 - keyboards/mehkee96/keymaps/johann/keymap.c | 80 -- .../minimacro5/keymaps/kabraxcis/keymap.c | 63 -- keyboards/minimacro5/keymaps/voaraq/keymap.c | 63 -- .../karina/keymaps/voltex/keymap.c | 70 -- keyboards/mitosis/keymaps/carvac_dv/keymap.c | 123 --- keyboards/mitosis/keymaps/carvac_dv/rules.mk | 1 - keyboards/mitosis/keymaps/nzen/keymap.c | 207 ----- keyboards/mitosis/keymaps/nzen/readme.md | 75 -- keyboards/mitosis/keymaps/nzen/rules.mk | 8 - keyboards/miuni32/keymaps/adam-lee/config.h | 8 - keyboards/miuni32/keymaps/adam-lee/keymap.c | 60 -- keyboards/miuni32/keymaps/adam-lee/readme.md | 1 - keyboards/miuni32/keymaps/adam-lee/rules.mk | 18 - .../keymaps/cassdelacruzmunoz/config.h | 22 - .../keymaps/cassdelacruzmunoz/keymap.c | 173 ---- .../keymaps/cassdelacruzmunoz/readme.md | 19 - keyboards/mt/mt980/keymaps/walker/config.h | 5 - keyboards/mt/mt980/keymaps/walker/keymap.c | 168 ---- keyboards/mt/mt980/keymaps/walker/rules.mk | 1 - .../nack/keymaps/farfalleflickan/keymap.c | 203 ----- .../nack/keymaps/farfalleflickan/keymap.h | 116 --- .../nack/keymaps/farfalleflickan/readme.md | 1 - .../tb16_rgb/keymaps/ningjx/keymap.c | 37 - .../nibble/keymaps/snailmap/keymap.c | 543 ------------ .../nibble/keymaps/snailmap/readme.md | 36 - .../nibble/keymaps/snailmap/rules.mk | 5 - .../tidbit/keymaps/snailmap_lite/keymap.c | 289 ------- .../tidbit/keymaps/snailmap_lite/rules.mk | 7 - keyboards/numatreus/keymaps/yohewi/keymap.c | 61 -- .../mini/keymaps/toyoshimahidenori/config.h | 27 - .../mini/keymaps/toyoshimahidenori/keymap.c | 141 --- .../mini/keymaps/toyoshimahidenori/readme.md | 62 -- .../mini/keymaps/toyoshimahidenori/rules.mk | 3 - .../mini/keymaps/yoshimaru46/config.h | 27 - .../mini/keymaps/yoshimaru46/keymap.c | 111 --- .../mini/keymaps/yoshimaru46/readme.md | 4 - .../mini/keymaps/yoshimaru46/rules.mk | 4 - .../ergodash/rev1/keymaps/m47ch4n/config.h | 27 - .../ergodash/rev1/keymaps/m47ch4n/keymap.c | 219 ----- .../rev1/keymaps/m47ch4n/m47ch4ns_keymap.json | 1 - .../ergodash/rev1/keymaps/m47ch4n/readme.md | 73 -- .../ergodash/rev1/keymaps/m47ch4n/rules.mk | 3 - .../rev1/keymaps/shadowprogr/config.h | 30 - .../rev1/keymaps/shadowprogr/keymap.c | 199 ----- .../rev1/keymaps/shadowprogr/readme.md | 89 -- .../rev1/keymaps/shadowprogr/rules.mk | 3 - .../5x6_5x8/keymaps/derekhsu/config.h | 26 - .../5x6_5x8/keymaps/derekhsu/keymap.c | 60 -- .../5x6_5x8/keymaps/derekhsu/rules.mk | 3 - keyboards/orthodox/keymaps/rfvizarra/config.h | 41 - keyboards/orthodox/keymaps/rfvizarra/keymap.c | 134 --- .../orthodox/keymaps/rfvizarra/readme.md | 19 - keyboards/p3d/q4z/keymaps/rjboone/config.h | 21 - keyboards/p3d/q4z/keymaps/rjboone/keymap.c | 107 --- keyboards/p3d/q4z/keymaps/rjboone/readme.md | 1 - keyboards/p3d/q4z/keymaps/rjboone/rules.mk | 1 - keyboards/pierce/keymaps/durken1/config.h | 69 -- keyboards/pierce/keymaps/durken1/keymap.c | 159 ---- keyboards/pierce/keymaps/durken1/rules.mk | 4 - .../playkbtw/pk60/keymaps/rfvizarra/keymap.c | 29 - .../playkbtw/pk60/keymaps/rfvizarra/readme.md | 11 - .../trackball_nano/keymaps/maddie/keymap.c | 86 -- .../trackball_nano/keymaps/maddie/readme.md | 1 - .../keymaps/reasonsandreasons/config.h | 21 - .../keymaps/reasonsandreasons/keymap.c | 174 ---- .../keymaps/reasonsandreasons/readme.md | 5 - .../keymaps/reasonsandreasons/rules.mk | 20 - .../psuieee/pluto12/keymaps/wymcg/keymap.c | 56 -- .../psuieee/pluto12/keymaps/wymcg/readme.md | 1 - .../qvex/lynepad2/keymaps/mcrosson/keymap.c | 142 --- .../qvex/lynepad2/keymaps/mcrosson/rules.mk | 1 - .../verd/keymaps/alittlepeace/keymap.c | 81 -- .../reviung41/keymaps/ciutadellla/config.h | 25 - .../reviung41/keymaps/ciutadellla/keymap.c | 333 ------- .../reviung41/keymaps/ciutadellla/rules.mk | 10 - keyboards/rgbkb/mun/keymaps/xulkal2/config.h | 42 - keyboards/rgbkb/mun/keymaps/xulkal2/keymap.c | 248 ------ keyboards/rgbkb/mun/keymaps/xulkal2/rules.mk | 5 - .../rgbkb/sol/keymaps/brianweyer/keymap.c | 272 ------ .../rgbkb/sol/keymaps/brianweyer/rules.mk | 15 - .../zen/rev1/keymaps/jwlawrence/config.h | 42 - .../zen/rev1/keymaps/jwlawrence/keymap.c | 97 --- .../zen/rev1/keymaps/jwlawrence/rules.mk | 1 - .../rgbkb/zen/rev1/keymaps/samae/config.h | 35 - .../rgbkb/zen/rev1/keymaps/samae/keymap.c | 79 -- .../rgbkb/zen/rev1/keymaps/samae/rules.mk | 1 - .../rev1/keymaps/starcalleramethyst/config.h | 41 - .../rev1/keymaps/starcalleramethyst/keymap.c | 148 ---- .../rev1/keymaps/starcalleramethyst/rules.mk | 3 - .../rev1/keymaps/josefadamcik/keymap.c | 151 ---- .../rev1/keymaps/josefadamcik/readme.md | 23 - .../katana60/rev1/keymaps/rominronin/config.h | 24 - .../katana60/rev1/keymaps/rominronin/keymap.c | 65 -- .../rev1/keymaps/rominronin/readme.md | 5 - .../rev2/keymaps/rominronin_7u/keymap.c | 79 -- .../rev2/keymaps/rominronin_7u/readme.md | 1 - .../launch_pad/keymaps/warzone/keymap.c | 270 ------ .../launch_pad/keymaps/warzone/rules.mk | 2 - keyboards/waterfowl/keymaps/cyanduck/keymap.c | 129 --- .../zeal60/keymaps/tusing/README.md | 79 -- .../wilba_tech/zeal60/keymaps/tusing/config.h | 45 - .../wilba_tech/zeal60/keymaps/tusing/keymap.c | 48 -- .../wilba_tech/zeal60/keymaps/tusing/rules.mk | 6 - .../winkeyless/bface/keymaps/kpeatt/keymap.c | 75 -- .../winkeyless/bface/keymaps/kpeatt/readme.md | 10 - .../winkeyless/bface/keymaps/p3lim/README.md | 21 - .../winkeyless/bface/keymaps/p3lim/keymap.c | 188 ---- .../winkeyless/bface/keymaps/p3lim/rules.mk | 1 - keyboards/wren/keymaps/walterhanley/config.h | 20 - keyboards/wren/keymaps/walterhanley/keymap.c | 170 ---- keyboards/wren/keymaps/walterhanley/readme.md | 12 - 209 files changed, 14964 deletions(-) delete mode 100644 keyboards/gboards/gergoplex/keymaps/georgepetri/combos.def delete mode 100644 keyboards/gboards/gergoplex/keymaps/georgepetri/config.h delete mode 100644 keyboards/gboards/gergoplex/keymaps/georgepetri/gergoplex.def delete mode 100644 keyboards/gboards/gergoplex/keymaps/georgepetri/keymap.c delete mode 100644 keyboards/gboards/gergoplex/keymaps/georgepetri/readme.md delete mode 100644 keyboards/gboards/gergoplex/keymaps/georgepetri/rules.mk delete mode 100644 keyboards/gboards/gergoplex/keymaps/tgrosinger/combos.def delete mode 100644 keyboards/gboards/gergoplex/keymaps/tgrosinger/config.h delete mode 100644 keyboards/gboards/gergoplex/keymaps/tgrosinger/gergoplex.def delete mode 100644 keyboards/gboards/gergoplex/keymaps/tgrosinger/keymap.c delete mode 100644 keyboards/gboards/gergoplex/keymaps/tgrosinger/readme.md delete mode 100644 keyboards/gboards/gergoplex/keymaps/tgrosinger/rules.mk delete mode 100644 keyboards/geonworks/w1_at/keymaps/zq/keymap.c delete mode 100644 keyboards/geonworks/w1_at/keymaps/zq/readme.md delete mode 100644 keyboards/geonworks/w1_at/keymaps/zq/rules.mk delete mode 100644 keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/keymap.c delete mode 100644 keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/readme.md delete mode 100644 keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/rgb_matrix_user.inc delete mode 100644 keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/rules.mk delete mode 100644 keyboards/gmmk/gmmk2/p65/ansi/keymaps/thekorn/keymap.c delete mode 100644 keyboards/gmmk/gmmk2/p65/ansi/keymaps/thekorn/readme.md delete mode 100644 keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/keymap.c delete mode 100644 keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/readme.md delete mode 100644 keyboards/gmmk/pro/rev1/iso/keymaps/falkecarlsen/keymap.c delete mode 100644 keyboards/gmmk/pro/rev1/iso/keymaps/falkecarlsen/readme.md delete mode 100644 keyboards/gray_studio/think65/solder/keymaps/dangjoeltang/keymap.c delete mode 100644 keyboards/gray_studio/think65/solder/keymaps/dangjoeltang/readme.md delete mode 100644 keyboards/gray_studio/think65/solder/keymaps/yt/config.h delete mode 100644 keyboards/gray_studio/think65/solder/keymaps/yt/keymap.c delete mode 100644 keyboards/gray_studio/think65/solder/keymaps/yt/readme.md delete mode 100644 keyboards/gray_studio/think65/solder/keymaps/yt/rules.mk delete mode 100644 keyboards/hadron/ver3/keymaps/sebaslayout/keymap.c delete mode 100644 keyboards/hadron/ver3/keymaps/sebaslayout/readme.md delete mode 100644 keyboards/handwired/aim65/keymaps/bonnee/keymap.c delete mode 100644 keyboards/handwired/baredev/rev1/keymaps/manoshu/keymap.c delete mode 100644 keyboards/handwired/baredev/rev1/keymaps/manoshu/readme.md delete mode 100644 keyboards/handwired/bento/keymaps/cbc02009/keymap.c delete mode 100644 keyboards/handwired/dactyl_manuform/4x5_5/keymaps/ssedrick/keymap.c delete mode 100644 keyboards/handwired/dactyl_manuform/5x6/keymaps/nabos/config.h delete mode 100644 keyboards/handwired/dactyl_manuform/5x6/keymaps/nabos/keymap.c delete mode 100644 keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/config.h delete mode 100644 keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/keymap.c delete mode 100644 keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/rules.mk delete mode 100644 keyboards/handwired/dactyl_manuform/6x6/keymaps/happysalada/keymap.c delete mode 100644 keyboards/handwired/k_numpad17/keymaps/karlssn/keymap.c delete mode 100644 keyboards/handwired/k_numpad17/keymaps/karlssn/rules.mk delete mode 100644 keyboards/handwired/lagrange/keymaps/dpapavas/config.h delete mode 100644 keyboards/handwired/lagrange/keymaps/dpapavas/keymap.c delete mode 100644 keyboards/handwired/lagrange/keymaps/dpapavas/rules.mk delete mode 100644 keyboards/handwired/marauder/keymaps/orvia/keymap.c delete mode 100644 keyboards/handwired/marauder/keymaps/orvia/rules.mk delete mode 100644 keyboards/handwired/pteron/keymaps/FSund/keymap.c delete mode 100644 keyboards/handwired/pteron/keymaps/alzafacon/config.h delete mode 100644 keyboards/handwired/pteron/keymaps/alzafacon/keymap.c delete mode 100644 keyboards/handwired/pteron/keymaps/alzafacon/readme.md delete mode 100644 keyboards/handwired/pteron/keymaps/alzafacon/rules.mk delete mode 100644 keyboards/handwired/selene/keymaps/bpendragon/keymap.c delete mode 100644 keyboards/handwired/steamvan/keymaps/jmdaly/keymap.c delete mode 100644 keyboards/handwired/steamvan/keymaps/jmdaly/readme.md delete mode 100644 keyboards/handwired/z150/keymaps/zyxx/keymap.c delete mode 100644 keyboards/helix/rev2/keymaps/fraanrosi/config.h delete mode 100644 keyboards/helix/rev2/keymaps/fraanrosi/keymap.c delete mode 100644 keyboards/helix/rev2/keymaps/fraanrosi/readme.md delete mode 100644 keyboards/helix/rev2/keymaps/fraanrosi/rules.mk delete mode 100644 keyboards/helix/rev2/keymaps/froggy/config.h delete mode 100644 keyboards/helix/rev2/keymaps/froggy/helixfont.h delete mode 100644 keyboards/helix/rev2/keymaps/froggy/keymap.c delete mode 100644 keyboards/helix/rev2/keymaps/froggy/readme.md delete mode 100644 keyboards/helix/rev2/keymaps/froggy/rules.mk delete mode 100644 keyboards/helix/rev2/keymaps/froggy_106/config.h delete mode 100644 keyboards/helix/rev2/keymaps/froggy_106/helixfont.h delete mode 100644 keyboards/helix/rev2/keymaps/froggy_106/keymap.c delete mode 100644 keyboards/helix/rev2/keymaps/froggy_106/readme.md delete mode 100644 keyboards/helix/rev2/keymaps/froggy_106/rules.mk delete mode 100644 keyboards/hotdox76v2/keymaps/dancxjo/config.h delete mode 100644 keyboards/hotdox76v2/keymaps/dancxjo/keymap.c delete mode 100644 keyboards/hotdox76v2/keymaps/dancxjo/rules.mk delete mode 100644 keyboards/hs60/v2/hhkb/keymaps/goatmaster/config.h delete mode 100644 keyboards/hs60/v2/hhkb/keymaps/goatmaster/keymap.c delete mode 100644 keyboards/hs60/v2/hhkb/keymaps/goatmaster/readme.md delete mode 100644 keyboards/hs60/v2/hhkb/keymaps/goatmaster/rules.mk delete mode 100644 keyboards/lazydesigners/dimple/staggered/keymaps/oncesavedgaming/keymap.c delete mode 100644 keyboards/lfkeyboards/lfk78/keymaps/ca178858/keymap.c delete mode 100644 keyboards/lfkeyboards/lfk78/keymaps/ca178858/readme.md delete mode 100644 keyboards/lfkeyboards/lfk78/keymaps/ca178858/rules.mk delete mode 100644 keyboards/lfkeyboards/lfk87/keymaps/ca178858/keymap.c delete mode 100644 keyboards/lfkeyboards/lfk87/keymaps/ca178858/readme.md delete mode 100644 keyboards/lfkeyboards/lfk87/keymaps/ca178858/rules.mk delete mode 100644 keyboards/lfkeyboards/mini1800/keymaps/ca178858/keymap.c delete mode 100644 keyboards/lfkeyboards/mini1800/keymaps/ca178858/rules.mk delete mode 100644 keyboards/mechwild/mercutio/keymaps/fearless_spiff/config.h delete mode 100644 keyboards/mechwild/mercutio/keymaps/fearless_spiff/keymap.c delete mode 100644 keyboards/mechwild/mercutio/keymaps/fearless_spiff/readme.md delete mode 100644 keyboards/mechwild/mercutio/keymaps/fearless_spiff/rules.mk delete mode 100644 keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/config.h delete mode 100644 keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/keymap.c delete mode 100644 keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/readme.md delete mode 100644 keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/rules.mk delete mode 100644 keyboards/mehkee96/keymaps/johann/keymap.c delete mode 100644 keyboards/minimacro5/keymaps/kabraxcis/keymap.c delete mode 100644 keyboards/minimacro5/keymaps/voaraq/keymap.c delete mode 100644 keyboards/misonoworks/karina/keymaps/voltex/keymap.c delete mode 100644 keyboards/mitosis/keymaps/carvac_dv/keymap.c delete mode 100644 keyboards/mitosis/keymaps/carvac_dv/rules.mk delete mode 100644 keyboards/mitosis/keymaps/nzen/keymap.c delete mode 100644 keyboards/mitosis/keymaps/nzen/readme.md delete mode 100644 keyboards/mitosis/keymaps/nzen/rules.mk delete mode 100644 keyboards/miuni32/keymaps/adam-lee/config.h delete mode 100644 keyboards/miuni32/keymaps/adam-lee/keymap.c delete mode 100644 keyboards/miuni32/keymaps/adam-lee/readme.md delete mode 100644 keyboards/miuni32/keymaps/adam-lee/rules.mk delete mode 100644 keyboards/miuni32/keymaps/cassdelacruzmunoz/config.h delete mode 100644 keyboards/miuni32/keymaps/cassdelacruzmunoz/keymap.c delete mode 100644 keyboards/miuni32/keymaps/cassdelacruzmunoz/readme.md delete mode 100644 keyboards/mt/mt980/keymaps/walker/config.h delete mode 100644 keyboards/mt/mt980/keymaps/walker/keymap.c delete mode 100644 keyboards/mt/mt980/keymaps/walker/rules.mk delete mode 100644 keyboards/nack/keymaps/farfalleflickan/keymap.c delete mode 100644 keyboards/nack/keymaps/farfalleflickan/keymap.h delete mode 100644 keyboards/nack/keymaps/farfalleflickan/readme.md delete mode 100644 keyboards/ning/tiny_board/tb16_rgb/keymaps/ningjx/keymap.c delete mode 100644 keyboards/nullbitsco/nibble/keymaps/snailmap/keymap.c delete mode 100644 keyboards/nullbitsco/nibble/keymaps/snailmap/readme.md delete mode 100644 keyboards/nullbitsco/nibble/keymaps/snailmap/rules.mk delete mode 100644 keyboards/nullbitsco/tidbit/keymaps/snailmap_lite/keymap.c delete mode 100644 keyboards/nullbitsco/tidbit/keymaps/snailmap_lite/rules.mk delete mode 100644 keyboards/numatreus/keymaps/yohewi/keymap.c delete mode 100644 keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/config.h delete mode 100644 keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/keymap.c delete mode 100644 keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/readme.md delete mode 100644 keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/rules.mk delete mode 100644 keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/config.h delete mode 100644 keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/keymap.c delete mode 100644 keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/readme.md delete mode 100644 keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/rules.mk delete mode 100644 keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/config.h delete mode 100644 keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/keymap.c delete mode 100644 keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/m47ch4ns_keymap.json delete mode 100644 keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/readme.md delete mode 100644 keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/rules.mk delete mode 100644 keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/config.h delete mode 100644 keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/keymap.c delete mode 100644 keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/readme.md delete mode 100644 keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/rules.mk delete mode 100644 keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/config.h delete mode 100644 keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/keymap.c delete mode 100644 keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/rules.mk delete mode 100644 keyboards/orthodox/keymaps/rfvizarra/config.h delete mode 100644 keyboards/orthodox/keymaps/rfvizarra/keymap.c delete mode 100644 keyboards/orthodox/keymaps/rfvizarra/readme.md delete mode 100644 keyboards/p3d/q4z/keymaps/rjboone/config.h delete mode 100644 keyboards/p3d/q4z/keymaps/rjboone/keymap.c delete mode 100644 keyboards/p3d/q4z/keymaps/rjboone/readme.md delete mode 100644 keyboards/p3d/q4z/keymaps/rjboone/rules.mk delete mode 100644 keyboards/pierce/keymaps/durken1/config.h delete mode 100644 keyboards/pierce/keymaps/durken1/keymap.c delete mode 100644 keyboards/pierce/keymaps/durken1/rules.mk delete mode 100644 keyboards/playkbtw/pk60/keymaps/rfvizarra/keymap.c delete mode 100644 keyboards/playkbtw/pk60/keymaps/rfvizarra/readme.md delete mode 100644 keyboards/ploopyco/trackball_nano/keymaps/maddie/keymap.c delete mode 100644 keyboards/ploopyco/trackball_nano/keymaps/maddie/readme.md delete mode 100644 keyboards/primekb/prime_o/keymaps/reasonsandreasons/config.h delete mode 100644 keyboards/primekb/prime_o/keymaps/reasonsandreasons/keymap.c delete mode 100644 keyboards/primekb/prime_o/keymaps/reasonsandreasons/readme.md delete mode 100644 keyboards/primekb/prime_o/keymaps/reasonsandreasons/rules.mk delete mode 100644 keyboards/psuieee/pluto12/keymaps/wymcg/keymap.c delete mode 100644 keyboards/psuieee/pluto12/keymaps/wymcg/readme.md delete mode 100644 keyboards/qvex/lynepad2/keymaps/mcrosson/keymap.c delete mode 100644 keyboards/qvex/lynepad2/keymaps/mcrosson/rules.mk delete mode 100644 keyboards/redscarf_iiplus/verd/keymaps/alittlepeace/keymap.c delete mode 100644 keyboards/reviung/reviung41/keymaps/ciutadellla/config.h delete mode 100644 keyboards/reviung/reviung41/keymaps/ciutadellla/keymap.c delete mode 100644 keyboards/reviung/reviung41/keymaps/ciutadellla/rules.mk delete mode 100644 keyboards/rgbkb/mun/keymaps/xulkal2/config.h delete mode 100644 keyboards/rgbkb/mun/keymaps/xulkal2/keymap.c delete mode 100644 keyboards/rgbkb/mun/keymaps/xulkal2/rules.mk delete mode 100644 keyboards/rgbkb/sol/keymaps/brianweyer/keymap.c delete mode 100644 keyboards/rgbkb/sol/keymaps/brianweyer/rules.mk delete mode 100644 keyboards/rgbkb/zen/rev1/keymaps/jwlawrence/config.h delete mode 100644 keyboards/rgbkb/zen/rev1/keymaps/jwlawrence/keymap.c delete mode 100644 keyboards/rgbkb/zen/rev1/keymaps/jwlawrence/rules.mk delete mode 100644 keyboards/rgbkb/zen/rev1/keymaps/samae/config.h delete mode 100644 keyboards/rgbkb/zen/rev1/keymaps/samae/keymap.c delete mode 100644 keyboards/rgbkb/zen/rev1/keymaps/samae/rules.mk delete mode 100644 keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/config.h delete mode 100644 keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/keymap.c delete mode 100644 keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/rules.mk delete mode 100644 keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/keymap.c delete mode 100644 keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/readme.md delete mode 100644 keyboards/rominronin/katana60/rev1/keymaps/rominronin/config.h delete mode 100644 keyboards/rominronin/katana60/rev1/keymaps/rominronin/keymap.c delete mode 100644 keyboards/rominronin/katana60/rev1/keymaps/rominronin/readme.md delete mode 100644 keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/keymap.c delete mode 100644 keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/readme.md delete mode 100644 keyboards/ungodly/launch_pad/keymaps/warzone/keymap.c delete mode 100644 keyboards/ungodly/launch_pad/keymaps/warzone/rules.mk delete mode 100644 keyboards/waterfowl/keymaps/cyanduck/keymap.c delete mode 100644 keyboards/wilba_tech/zeal60/keymaps/tusing/README.md delete mode 100644 keyboards/wilba_tech/zeal60/keymaps/tusing/config.h delete mode 100644 keyboards/wilba_tech/zeal60/keymaps/tusing/keymap.c delete mode 100644 keyboards/wilba_tech/zeal60/keymaps/tusing/rules.mk delete mode 100644 keyboards/winkeyless/bface/keymaps/kpeatt/keymap.c delete mode 100644 keyboards/winkeyless/bface/keymaps/kpeatt/readme.md delete mode 100644 keyboards/winkeyless/bface/keymaps/p3lim/README.md delete mode 100644 keyboards/winkeyless/bface/keymaps/p3lim/keymap.c delete mode 100644 keyboards/winkeyless/bface/keymaps/p3lim/rules.mk delete mode 100644 keyboards/wren/keymaps/walterhanley/config.h delete mode 100644 keyboards/wren/keymaps/walterhanley/keymap.c delete mode 100644 keyboards/wren/keymaps/walterhanley/readme.md diff --git a/keyboards/gboards/gergoplex/keymaps/georgepetri/combos.def b/keyboards/gboards/gergoplex/keymaps/georgepetri/combos.def deleted file mode 100644 index a9205c028a09..000000000000 --- a/keyboards/gboards/gergoplex/keymaps/georgepetri/combos.def +++ /dev/null @@ -1,11 +0,0 @@ -// List any combo dictionaries you want loaded to your device below! - -// QMK wide includes -//#include "combos/germ-vim-helpers.def" -#include "combos/germ-mouse-keys.def" - -// User includes -#include "gergoplex.def" - -// Word completion -// #include "combos/eng-combos.def" diff --git a/keyboards/gboards/gergoplex/keymaps/georgepetri/config.h b/keyboards/gboards/gergoplex/keymaps/georgepetri/config.h deleted file mode 100644 index e2c27583fab4..000000000000 --- a/keyboards/gboards/gergoplex/keymaps/georgepetri/config.h +++ /dev/null @@ -1,31 +0,0 @@ -/* -Copyright 2012 Jun Wako -Copyright 2013 Oleg Kostyuk - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -// Copy and worked on with love from the EZ team - -#pragma once - -#define HOLD_ON_OTHER_KEY_PRESS_PER_KEY - -#undef DEBOUNCE -#define DEBOUNCE 25 - -#define COMBO_ALLOW_ACTION_KEYS -#define COMBO_VARIABLE_LEN - -#define TAPPING_TERM_PER_KEY diff --git a/keyboards/gboards/gergoplex/keymaps/georgepetri/gergoplex.def b/keyboards/gboards/gergoplex/keymaps/georgepetri/gergoplex.def deleted file mode 100644 index d50d431c8b7a..000000000000 --- a/keyboards/gboards/gergoplex/keymaps/georgepetri/gergoplex.def +++ /dev/null @@ -1,7 +0,0 @@ -// Gergoplex specfic combos - -COMB(hjEnt, KC_ENT, KC_H, KC_J) -COMB(loDel, KC_DEL, KC_L, KC_O) -COMB(pscBspace, KC_BSPC, KC_P, KC_SCLN) -COMB(sdEsc, KC_ESC, KC_D, KC_F) -COMB(fgEsc, KC_ESC, KC_F, KC_G) diff --git a/keyboards/gboards/gergoplex/keymaps/georgepetri/keymap.c b/keyboards/gboards/gergoplex/keymaps/georgepetri/keymap.c deleted file mode 100644 index 44c570b42cd2..000000000000 --- a/keyboards/gboards/gergoplex/keymaps/georgepetri/keymap.c +++ /dev/null @@ -1,212 +0,0 @@ -/* Copyright 2021 Jane Bernhardt - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -/* Good on you for modifying your layout! if you don't have - * time to read the QMK docs, a list of keycodes can be found at - * https://github.com/qmk/qmk_firmware/blob/master/docs/keycodes.md - */ - -#include QMK_KEYBOARD_H -#include "g/keymap_combo.h" - -enum { - _ALPHA, // default - _GAME, // gaming - _SPECIAL, // special characters - _NUMBERS // numbers/function/motion -}; - -typedef enum { - TD_NONE, - TD_UNKNOWN, - TD_SINGLE_TAP, - TD_DOUBLE_TAP, - TD_TRIPLE_TAP -} td_state_t; - -typedef struct { - bool is_press_action; - td_state_t state; -} td_tap_t; - -enum { - GAME -}; - -td_state_t cur_dance(tap_dance_state_t *state); - -void ql_finished(tap_dance_state_t *state, void *user_data); -void ql_reset(tap_dance_state_t *state, void *user_data); - -#define KC_CTL_A MT(MOD_LCTL, KC_A) // Tap for A, hold for Control -#define KC_SFT_Z MT(MOD_RSFT, KC_Z) // Tap for Z, hold for Shift -#define KC_SFT_SL MT(MOD_RSFT, KC_SLSH) // Tap for slash, hold for Shift -#define KC_SPE_SPC LT(_SPECIAL, KC_SPC) // Tap for Space, hold for Special layer -#define KC_NUM_SPC LT(_NUMBERS, KC_SPC) // Tap for Space, hold for Numbers layer - - /* Combomap - * - * ,-------------------------------. ,-------------------------------. - * | | | | | | | | | | | | - * |-------+-----+-----+-----+-----| |-----+-----+-----+-DEL-+-BSPC--| - * | | | ESC ESC | | ENT | | | | - * |-------+-----+-----+-RMB-+-LMB-| |-----+-----+-----+-----+-------| - * | | | | | | | | | | | | - * `-------------------------------' `-------------------------------' - * .-----------------. .-----------------. - * | | | | | | | | - * '-----------------' '-----------------' - */ - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Alpha layer - * - * ,-------------------------------. ,-------------------------------. - * | Q | W | E | R | T | | Y | U | I | O | P | - * |-------+-----+-----+-----+-----| |-----+-----+-----+-----+-------| - * | CTRL A| S | D | F | G | | H | J | K | L | ; | - * |-------+-----+-----+-----+-----| |-----+-----+-----+-----+-------| - * | SHFT Z| X | C | V | B | | N | M | , | . |SHFT / | - * `-------------------------------' `-------------------------------' - * .----------------------. .----------------------. - * | META | ALT | SPC SPE | | SPC NUM | TAB | SHFT | - * '----------------------' '----------------------' - */ - [_ALPHA] = LAYOUT_split_3x5_3( - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, - KC_CTL_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, - KC_SFT_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, TD(GAME), KC_DOT, KC_SFT_SL, - KC_LGUI, KC_LALT, KC_SPE_SPC, KC_NUM_SPC, KC_TAB, KC_RSFT), - - /* Gaming layer - * - * ,-------------------------------. ,-------------------------------. - * | ~ | Q | W | E | R | | Y | U | I | O | P | - * |-------+-----+-----+-----+-----| |-----+-----+-----+-----+-------| - * | CTRL | A | S | D | F | | H | J | K | L | ; | - * |-------+-----+-----+-----+-----| |-----+-----+-----+-----+-------| - * | SHFT | Z | X | C | V | | N | M | , | . |SHFT / | - * `-------------------------------' `-------------------------------' - * .------------------. .----------------------. - * | META | ALT | SPC | | SPC NUM | TAB | SHFT | - * '------------------' '----------------------' - */ - [_GAME] = LAYOUT_split_3x5_3( - KC_TILD, KC_Q, KC_W, KC_E, KC_R, KC_Y, KC_U, KC_I, KC_O, KC_P, - KC_LCTL , KC_A, KC_S, KC_D, KC_F, KC_H, KC_J, KC_K, KC_L, KC_SCLN, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_N, KC_M, TD(GAME), KC_DOT, KC_SFT_SL, - KC_LGUI, KC_LALT, KC_SPC, KC_NUM_SPC, KC_TAB, KC_RSFT), - - /* Special characters layer - * - * ,-------------------------------. ,-------------------------------. - * | ! | @ | { | } | | | | ` | - | = | / | \ | - * |-------+-----+-----+-----+-----| |-----+-----+-----+-----+-------| - * | # | $ | ( | ) | | | LFT | DWN | UP | RGT | ' | - * |-------+-----+-----+-----+-----| |-----+-----+-----+-----+-------| - * | % | ^ | [ | ] | | | & | ~ | + | * | | - * `-------------------------------' `-------------------------------' - * .-------------------. .-----------------. - * | | | | | | " | _ | - * '-------------------' '-----------------' - */ - [_SPECIAL] = LAYOUT_split_3x5_3( - KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_GRV, KC_MINS, KC_EQL , KC_SLSH, KC_BSLS, - KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_QUOT, - KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TRNS, KC_AMPR, KC_TILD, KC_PLUS, KC_ASTR, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LSFT(KC_QUOTE), LSFT(KC_MINS)), - - /* Numbers/Function/Motion layer - * - * ,-------------------------------. ,-------------------------------. - * | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - * |-------+-----+-----+-----+-----| |-----+-----+-----+-----+-------| - * | F1 | F2 | F3 | F4 | F5 | | | | | | | - * |-------+-----+-----+-----+-----| |-----+-----+-----+-----+-------| - * | F6 | F7 | F8 | F9 | F10 | | MLFT| MDWN| MUP | MRGT| | - * `-------------------------------' `-------------------------------' - * .-----------------. .-----------------. - * | F11 | F12 | | | | | | - * '-----------------' '-----------------' - */ - [_NUMBERS] = LAYOUT_split_3x5_3( - KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_TRNS, - KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) -}; - -bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case KC_CTL_A: - return false; - default: - return true; - } -} - -td_state_t cur_dance(tap_dance_state_t *state) { - if (state->count == 1) - return TD_SINGLE_TAP; - if (state->count == 2) - return TD_DOUBLE_TAP; - else if (state->count == 3) - return TD_TRIPLE_TAP; - return TD_UNKNOWN; -} - -static td_tap_t ql_tap_state = { - .is_press_action = true, - .state = TD_NONE -}; - -void ql_finished(tap_dance_state_t *state, void *user_data) { - ql_tap_state.state = cur_dance(state); - switch (ql_tap_state.state) { - case TD_SINGLE_TAP: - tap_code(KC_COMMA); - break; - case TD_DOUBLE_TAP: - tap_code(KC_COMMA); - tap_code(KC_COMMA); - break; - case TD_TRIPLE_TAP: - if (layer_state_is(_GAME)) - layer_off(_GAME); - else - layer_on(_GAME); - break; - default: - break; - } -} - -void ql_reset(tap_dance_state_t *state, void *user_data) { - ql_tap_state.state = TD_NONE; -} - -tap_dance_action_t tap_dance_actions[] = { - [GAME] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ql_finished, ql_reset) -}; - -uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case QK_TAP_DANCE ... QK_TAP_DANCE_MAX: - return 275; - default: - return TAPPING_TERM; - } -} diff --git a/keyboards/gboards/gergoplex/keymaps/georgepetri/readme.md b/keyboards/gboards/gergoplex/keymaps/georgepetri/readme.md deleted file mode 100644 index 7c8a6f202348..000000000000 --- a/keyboards/gboards/gergoplex/keymaps/georgepetri/readme.md +++ /dev/null @@ -1,6 +0,0 @@ -# George Petri's Gergoplex layout -Vim and programming focused layout. -``` -qmk compile -kb gboards/gergoplex -km georgepetri -qmk flash -kb gboards/gergoplex -km georgepetri -``` diff --git a/keyboards/gboards/gergoplex/keymaps/georgepetri/rules.mk b/keyboards/gboards/gergoplex/keymaps/georgepetri/rules.mk deleted file mode 100644 index 74d02c23bd54..000000000000 --- a/keyboards/gboards/gergoplex/keymaps/georgepetri/rules.mk +++ /dev/null @@ -1,20 +0,0 @@ -#---------------------------------------------------------------------------- -# make gboards/gergoplex:default:flash -# Make sure you have dfu-programmer installed! -#---------------------------------------------------------------------------- - -#Debug options -VERBOSE = no -DEBUG_MATRIX_SCAN_RATE = no -DEBUG_MATRIX = no -CONSOLE_ENABLE = no - -#Combos! -COMBO_ENABLE = yes -VPATH += keyboards/gboards/ - -ifeq ($(strip $(DEBUG_MATRIX)), yes) - OPT_DEFS += -DDEBUG_MATRIX -endif - -TAP_DANCE_ENABLE = yes diff --git a/keyboards/gboards/gergoplex/keymaps/tgrosinger/combos.def b/keyboards/gboards/gergoplex/keymaps/tgrosinger/combos.def deleted file mode 100644 index ef953d53f59a..000000000000 --- a/keyboards/gboards/gergoplex/keymaps/tgrosinger/combos.def +++ /dev/null @@ -1,11 +0,0 @@ -// List any combo dictionaries you want loaded to your device below! - -// QMK wide includes -//#include "combos/germ-vim-helpers.def" -//#include "combos/germ-mouse-keys.def" - -// User includes -#include "gergoplex.def" - -// Word completion -// #include "combos/eng-combos.def" diff --git a/keyboards/gboards/gergoplex/keymaps/tgrosinger/config.h b/keyboards/gboards/gergoplex/keymaps/tgrosinger/config.h deleted file mode 100644 index 1b30cc73b3d2..000000000000 --- a/keyboards/gboards/gergoplex/keymaps/tgrosinger/config.h +++ /dev/null @@ -1,4 +0,0 @@ -#pragma once - -#define COMBO_ALLOW_ACTION_KEYS -#define COMBO_VARIABLE_LEN diff --git a/keyboards/gboards/gergoplex/keymaps/tgrosinger/gergoplex.def b/keyboards/gboards/gergoplex/keymaps/tgrosinger/gergoplex.def deleted file mode 100644 index c7a93ed294e5..000000000000 --- a/keyboards/gboards/gergoplex/keymaps/tgrosinger/gergoplex.def +++ /dev/null @@ -1,17 +0,0 @@ -// Gergoplex specfic combos - -COMB(qwGrav, KC_GRV, KC_W, KC_Q) -COMB(wsEsc, KC_ESC, KC_W, KC_S) -COMB(sdBackspace, KC_BSPC, KC_S, KC_D) -COMB(dfTab, KC_TAB, KC_D, KC_F) -COMB(cvEnter, KC_ENT, KC_C, KC_V) - -COMB(ioMinus, KC_MINS, KC_I, KC_O) -COMB(opBackslash, KC_BSLS, KC_O, KC_P) -COMB(hjLess, KC_LT, KC_H, KC_J) -COMB(klGreat, KC_GT, KC_K, KC_L) -COMB(jkColon, KC_COLN, KC_J, KC_K) -COMB(mcUnder, KC_UNDS, KC_M, KC_COMM) -COMB(nmQuote, KC_QUOT, KC_N, KC_M) - -SUBS(pasta, "I'd just like to interject for a moment.", KC_H, KC_J, KC_K, KC_L) diff --git a/keyboards/gboards/gergoplex/keymaps/tgrosinger/keymap.c b/keyboards/gboards/gergoplex/keymaps/tgrosinger/keymap.c deleted file mode 100644 index 74c0899fdb14..000000000000 --- a/keyboards/gboards/gergoplex/keymaps/tgrosinger/keymap.c +++ /dev/null @@ -1,286 +0,0 @@ -/* Copyright 2022 Tony Grosinger - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H -#include "g/keymap_combo.h" - -enum { - _ALPHA, // Default - _SYMB, // Symbols - _NUMB, // Numbers - _ARROWS, // Arrows and OS - _TMUX, // TMUX Nav layer - _POPOS, // Gnome Shell, aka PopOS -}; - - -// Macros -enum custom_keycodes { - TMUX_NEW = SAFE_RANGE, - TMUX_ZOOM, - TMUX_SCROLL, - TMUX_PN_LT, - TMUX_PN_UP, - TMUX_PN_DN, - TMUX_PN_RT, - TMUX_WN_LT, - TMUX_WN_RT, - TMUX_SP_VT, - TMUX_SP_HZ, - VIM_CLIP_CP, - VIM_CLIP_PST, - VIM_MACRO, -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case TMUX_NEW: - if (record->event.pressed) { - tap_code16(C(KC_B)); - SEND_STRING("c"); - } - break; - case TMUX_ZOOM: - if (record->event.pressed) { - tap_code16(C(KC_B)); - SEND_STRING("z"); - } - break; - case TMUX_SCROLL: - if (record->event.pressed) { - tap_code16(C(KC_B)); - SEND_STRING("["); - } - break; - case TMUX_PN_LT: - if (record->event.pressed) { - tap_code16(C(KC_B)); - tap_code(KC_LEFT); - } - break; - case TMUX_PN_DN: - if (record->event.pressed) { - tap_code16(C(KC_B)); - tap_code(KC_DOWN); - } - break; - case TMUX_PN_UP: - if (record->event.pressed) { - tap_code16(C(KC_B)); - tap_code(KC_UP); - } - break; - case TMUX_PN_RT: - if (record->event.pressed) { - tap_code16(C(KC_B)); - tap_code(KC_RIGHT); - } - break; - case TMUX_WN_LT: - if (record->event.pressed) { - tap_code16(C(KC_B)); - SEND_STRING("p"); - } - break; - case TMUX_WN_RT: - if (record->event.pressed) { - tap_code16(C(KC_B)); - SEND_STRING("n"); - } - break; - case TMUX_SP_VT: - if (record->event.pressed) { - tap_code16(C(KC_B)); - SEND_STRING("%"); - } - break; - case TMUX_SP_HZ: - if (record->event.pressed) { - tap_code16(C(KC_B)); - SEND_STRING("\""); - } - break; - case VIM_CLIP_CP: - if (record->event.pressed) { - tap_code16(S(KC_QUOTE)); - tap_code16(S(KC_EQUAL)); - tap_code(KC_Y); - } - break; - case VIM_CLIP_PST: - if (record->event.pressed) { - tap_code16(S(KC_QUOTE)); - tap_code16(S(KC_EQUAL)); - tap_code(KC_P); - } - break; - case VIM_MACRO: - if (record->event.pressed) { - tap_code16(S(KC_2)); - tap_code(KC_Q); - } - break; - /* - case LAYRMOD: - // Act as a mod key if held, or toggle a layer if tapped - // replace KC_LCTL with desired mod, and _TARGET with desired layer name / number - if (record->event.pressed) { - uint8_t key_timer = timer_read(); - register_mods(MOD_BIT(KC_LCTL)); - } else { - unregister_mods(MOD_BIT(KC_LCTL)); - if (timer_elapsed(key_timer) < 200) { - layer_invert(_TARGET); - } - } - return false; - break; - */ - } - return true; -} - -/* Combos - * - * ,-----------------------------. ,-----------------------------. - * | ` | | | | | | MINS | BSLH | - * |-----+----ESC----+-----+-----| |-----+-----+-----+-----------| - * | | BSPC TAB | | | LES COLN GRT | | - * |-----+-----+-----+--RMB+-LMB-| |-----+-----+-----+-----------| - * | | | ENT | | | QUO UNDR | | | - * `-----+-----+-----+-----+-----' `-----------------------------' - * .-------------------------. .-------------------. - * | | | | | | | | - * '-------------------------' '-------------------' - */ - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Keymap 0: Default layer - * ,------------------------------. ,----------------------------------. - * | Q | W | E | R | T | | Y | U | I | O | P | - * |------+-----+-----+-----+-----| |-----+-----+-----+-------+--------| - * |CTRL/A| S | D | F | G | | H | J | K | L | CTRL/; | - * |------+-----+-----+-----+-----| |-----+-----+-----+-------+--------| - * |SHFT/Z|ALT/X| C | V | B | | N | M | < | ALT/> | SHFT/? | - * `------+-----+-----+------+----' `----------------------------------' - * .-----------------. .----------------------. - * | |GUI |SPC(NUM)| |SPC(SYM)|TMUX | PopOS | - * '-----------------' '----------------------' - */ - [_ALPHA] = LAYOUT_split_3x5_3( - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, - MT(MOD_LCTL, KC_A),KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, MT(MOD_LCTL, KC_SCLN), - MT(MOD_LSFT, KC_Z),MT(MOD_LALT, KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, MT(MOD_LALT, KC_DOT), MT(MOD_RSFT, KC_SLSH), - - KC_NO, KC_LGUI, LT(_NUMB, KC_SPC), // Left - LT(_SYMB, KC_SPC), MO(_TMUX), MO(_POPOS) // Right - ), - - /* Keymap 1: Symbols layer - * ,------------------------------. ,-------------------------------. - * | ! | @ | # | $ | % | | ^ | & | * | + | = | - * |------+-----+-----+-----+-----| |-----+-----+-----+-----+-------| - * | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | - * |------+-----+-----+-----+-----| |-----+-----+-----+-----+-------| - * | | | | | | | | | | F11 | F12 | - * `------+-----+-----+-----+-----' `-------------------------------' - * .-----------------. .-----------------. - * | | DEL | MO3 | | HLD | SPC | | - * '-----------------' '-----------------' - */ - [_SYMB] = LAYOUT_split_3x5_3( - KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_PLUS, KC_EQL, - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F11, KC_F12, - KC_NO, KC_DEL, MO(_ARROWS), KC_TRNS, KC_SPC, KC_NO - ), - - /* Keymap 2: Number layer - * ,------------------------------. ,-------------------------------. - * | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - * |------+-----+-----+-----+-----| |-----+-----+-----+-----+-------| - * | CTRL | | ( | ) | | | | 4 | 7 | 6 | | - * |------+-----+-----+-----+-----| |-----+-----+-----+-----+-------| - * | SHFT | | [ | ] | | | | 1 | 2 | 3 | . | - * `------+-----+-----+-----+-----' `-------------------------------' - * .-----------------. .-----------------. - * | | | HLD | | MO3 | 0 | | - * '-----------------' '-----------------' - */ - [_NUMB] = LAYOUT_split_3x5_3( - KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, - KC_LCTL, KC_NO, KC_LPRN, KC_RPRN, KC_NO, KC_NO, KC_4, KC_5, KC_6, KC_NO, - KC_LSFT, KC_NO, KC_LBRC, KC_RBRC, KC_NO, KC_NO, KC_1, KC_2, KC_3, KC_DOT, - KC_NO,KC_NO,KC_TRNS, MO(_ARROWS),KC_0,KC_NO - ), - - /* Keymap 3: Arrows and OS - * ,------------------------------. ,------------------------------------. - * | | | | | | | | | | | | - * |------+-----+-----+-----+-----| |-------+-------+------+-------+-----| - * | CTRL |HOME | PUP | | | | LEFT | DOWN | UP | RIGHT | | - * |------+-----+-----+-----+-----| |-------+-------+------+-------+-----| - * | SHFT |END | PDN | | | | | | | | | - * `------+-----+-----+-----+-----' `------------------------------------' - * .-----------------. .-----------------. - * | | | HLD | | HLD | | | - * '-----------------' '-----------------' - */ - [_ARROWS] = LAYOUT_split_3x5_3( - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_LCTL, KC_HOME, KC_PGUP, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, - KC_LSFT, KC_END, KC_PGDN, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO,KC_NO,KC_TRNS, KC_TRNS,KC_NO,KC_NO - ), - - /* Keymap 4: Tmux navigation layer - * ,----------------------------------. ,---------------------------------------. - * | Vi Mcr | | | | SP VT | | Vi Ynk| | | | Vi PT | - * |--------+-----+-----+-----+-------| |-------+-------+-------+-------+-------| - * | | SCRL| | | | | PN LT | PN DN | PN UP | PN RT | SP HZ | - * |--------+-----+-----+-----+-------| |-------+-------+-------+-------+-------| - * | ZOOM | KILL| NEW | | | | W LT | | | W RT | | - * `--------+-----+-----+-----+-------' `---------------------------------------' - * .-----------------. .-----------------. - * | | | | | | HLD | | - * '-----------------' '-----------------' - */ - [_TMUX] = LAYOUT_split_3x5_3( - VIM_MACRO, KC_NO, KC_NO, KC_NO, TMUX_SP_VT, VIM_CLIP_CP, KC_NO, KC_NO, KC_NO, VIM_CLIP_PST, - KC_NO, TMUX_SCROLL, KC_NO, KC_NO, KC_NO, TMUX_PN_LT, TMUX_PN_DN, TMUX_PN_UP, TMUX_PN_RT, TMUX_SP_HZ, - TMUX_ZOOM, KC_NO, TMUX_NEW, KC_NO, KC_NO, TMUX_WN_LT, KC_NO, KC_NO, TMUX_WN_RT, KC_NO, - KC_NO,KC_NO,KC_NO, KC_NO,KC_TRNS,KC_NO - ), - - /* Keymap 5: Gnome Shell (PopOS) - * ,------------------------------. ,--------------------------------------. - * | | | | | | | MV-DWN| D-DWN | D-UP | MV-UP | Flip | - * |------+-----+-----+-----+-----| |-------+-------+-------+-------+------| - * | | | | | | | W-L | W-DWN | W-UP | W-R | | - * |------+-----+-----+-----+-----| |-------+-------+-------+-------+------| - * | | | | | | | Scrns | Apps | Close | | | - * `------+-----+-----+-----+-----' `--------------------------------------' - * .-----------------. .-----------------. - * | | | | | | | HLD | - * '-----------------' '-----------------' - */ - [_POPOS] = LAYOUT_split_3x5_3( - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, SGUI(KC_J), LCTL(LGUI(KC_J)), LCTL(LGUI(KC_K)), SGUI(KC_K), LGUI(KC_O), - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, LGUI(KC_H), LGUI(KC_J), LGUI(KC_K), LGUI(KC_L), KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, LGUI(KC_D), LGUI(KC_A), LGUI(KC_Q), KC_NO, KC_NO, - KC_NO,KC_NO,KC_NO, KC_NO,KC_NO,KC_TRNS - ), -}; diff --git a/keyboards/gboards/gergoplex/keymaps/tgrosinger/readme.md b/keyboards/gboards/gergoplex/keymaps/tgrosinger/readme.md deleted file mode 100644 index 0a53aa1cbfa8..000000000000 --- a/keyboards/gboards/gergoplex/keymaps/tgrosinger/readme.md +++ /dev/null @@ -1,12 +0,0 @@ -# GergoPlex - -This keymap I created for the GergoPlex with a focus on: - -- Keeping keys close to their normal locations when possible (number/symbol rows) -- Work well for vim, tmux, and Ubuntu default desktop shortcuts -- Work okay for OSx shortcuts - -## Firmware Building - - util/docker_build.sh gboards/gergoplex:tgrosinger - util/docker_build.sh gboards/gergoplex:tgrosinger:flash diff --git a/keyboards/gboards/gergoplex/keymaps/tgrosinger/rules.mk b/keyboards/gboards/gergoplex/keymaps/tgrosinger/rules.mk deleted file mode 100644 index 620cab16c03f..000000000000 --- a/keyboards/gboards/gergoplex/keymaps/tgrosinger/rules.mk +++ /dev/null @@ -1,18 +0,0 @@ -#---------------------------------------------------------------------------- -# make gboards/gergoplex:default:flash -# Make sure you have dfu-programmer installed! -#---------------------------------------------------------------------------- - -#Debug options -VERBOSE = no -DEBUG_MATRIX_SCAN_RATE = no -DEBUG_MATRIX = no -CONSOLE_ENABLE = no - -#Combos! -COMBO_ENABLE = yes -VPATH += keyboards/gboards/ - -ifeq ($(strip $(DEBUG_MATRIX)), yes) - OPT_DEFS += -DDEBUG_MATRIX -endif diff --git a/keyboards/geonworks/w1_at/keymaps/zq/keymap.c b/keyboards/geonworks/w1_at/keymaps/zq/keymap.c deleted file mode 100644 index eba9aedb8f24..000000000000 --- a/keyboards/geonworks/w1_at/keymaps/zq/keymap.c +++ /dev/null @@ -1,119 +0,0 @@ -/* Copyright 2021 Zhi Quan - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include QMK_KEYBOARD_H - -enum custom_keycodes { - KC_P00 = SAFE_RANGE -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = LAYOUT_all( /* Base */ - KC_F1, KC_F2, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, TG(2), KC_PSLS, KC_PAST, KC_PMNS, - KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS, - KC_F5, KC_F6, KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, - KC_F7, KC_F8, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_P1, KC_P2, KC_P3, KC_PENT, - KC_F9, KC_F10, KC_LCTL, KC_LCMD, KC_SPC, KC_ROPT, MO(1), KC_P0, KC_P00, KC_PDOT, KC_PENT), - -[1] = LAYOUT_all( /* FN */ - KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_VOLD, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, QK_BOOT, KC_HOME, KC_UP, KC_PGUP, KC_VOLU, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_MUTE, KC_RGHT, KC_VOLU, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_DOWN, KC_PGDN, KC_MPLY, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY), - -[2] = LAYOUT_all( /* Numpad */ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_UP, KC_PGUP, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, XXXXXXX, KC_RGHT, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_DOWN, KC_PGDN, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - -[3] = LAYOUT_all( /* Empty for dynamic keymaps */ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch(keycode) { - case KC_P00: - if (record->event.pressed) { - tap_code(KC_P0); - tap_code(KC_P0); - } - return false; - break; - case KC_ESC: - if (record->event.pressed) { - // Turn on capslock indicator. - writePin(LED_CAPS_LOCK_PIN, LED_PIN_ON_STATE); - } else { - // Turn off capslock indicator. - writePin(LED_CAPS_LOCK_PIN, !LED_PIN_ON_STATE); - } - } - return true; -} - -// Customized function so that numlock and capslock indicator are no longer controlled by the host. -bool led_update_user(led_t led_state) { -#if defined(LED_NUM_LOCK_PIN) || defined(LED_CAPS_LOCK_PIN) || defined(LED_SCROLL_LOCK_PIN) || defined(LED_COMPOSE_PIN) || defined(LED_KANA_PIN) -# if LED_PIN_ON_STATE == 0 - // invert the whole thing to avoid having to conditionally !led_state.x later - led_state.raw = ~led_state.raw; -# endif - -// # ifdef LED_NUM_LOCK_PIN -// writePin(LED_NUM_LOCK_PIN, led_state.num_lock); -// # endif -// # ifdef LED_CAPS_LOCK_PIN -// writePin(LED_CAPS_LOCK_PIN, led_state.caps_lock); -// # endif -# ifdef LED_SCROLL_LOCK_PIN - writePin(LED_SCROLL_LOCK_PIN, led_state.scroll_lock); -# endif -# ifdef LED_COMPOSE_PIN - writePin(LED_COMPOSE_PIN, led_state.compose); -# endif -# ifdef LED_KANA_PIN - writePin(LED_KANA_PIN, led_state.kana); -# endif -#endif - - // Return false to let led_update_kb fall through. - return false; -} - -// Customized function to manage numlock indicator based on layer. -layer_state_t layer_state_set_user(layer_state_t state) { - switch (get_highest_layer(state)) { - // Base layer - case 0: - // Turn on numlock indicator. - writePin(LED_NUM_LOCK_PIN, LED_PIN_ON_STATE); - break; - - // Numpad navigation layer - case 2: - // Turn off numlock indicator. - writePin(LED_NUM_LOCK_PIN, !LED_PIN_ON_STATE); - break; - } - - return state; -} \ No newline at end of file diff --git a/keyboards/geonworks/w1_at/keymaps/zq/readme.md b/keyboards/geonworks/w1_at/keymaps/zq/readme.md deleted file mode 100644 index 103130b161ac..000000000000 --- a/keyboards/geonworks/w1_at/keymaps/zq/readme.md +++ /dev/null @@ -1,21 +0,0 @@ -# Personal W1-AT keymap -The main highlights are as follows: -* VIA support enabled -* Enter bootloader mode using Fn + \ -* Grave key (` and ~) in place of Esc key -* Esc in place of CapsLock key -* Use NumLock LED indicator on layers: ON in layer 0, OFF in layer 2 (workaround for macOS since there is no NumLock key) -* Use CapsLock LED indicator on Esc key - - -## Layer 0 (Base) ---- -![Layer 0](https://i.imgur.com/l1OKSBB.png) - -## Layer 1 (Function) ---- -![Layer 1](https://i.imgur.com/RdzVyvb.png) - -## Layer 2 (Numpad Navigation) ---- -![Layer 2](https://i.imgur.com/xKVnQaK.png) \ No newline at end of file diff --git a/keyboards/geonworks/w1_at/keymaps/zq/rules.mk b/keyboards/geonworks/w1_at/keymaps/zq/rules.mk deleted file mode 100644 index 036bd6d1c3ec..000000000000 --- a/keyboards/geonworks/w1_at/keymaps/zq/rules.mk +++ /dev/null @@ -1 +0,0 @@ -VIA_ENABLE = yes \ No newline at end of file diff --git a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/keymap.c b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/keymap.c deleted file mode 100644 index 8ca676273bee..000000000000 --- a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/keymap.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright 2022 Eugenio Pastoral - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H - -// Each layer gets a name for readability, which is then used in the keymap matrix below. -// The underscores don't mean anything - you can have a layer called STUFF or any other name. -enum custom_layers { - _BL, - _FL, -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Keymap _BL: Base Layer (Default Layer) - */ -[_BL] = LAYOUT( - QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, - KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT), - - /* Keymap _FL: Function Layer - */ -[_FL] = LAYOUT( - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, RGB_TOG, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, RGB_HUI, RGB_HUD, RGB_SPD, RGB_SPI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, RGB_VAI, _______, - EE_CLR, _______, _______, QK_BOOT, _______, _______, RGB_RMOD, RGB_VAD, RGB_MOD) -}; - -// Turns side LEDs to white for caps lock and layer indicators. -bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { - if (host_keyboard_led_state().caps_lock || get_highest_layer(layer_state | default_layer_state)) { - for (uint8_t i = led_min; i < led_max; i++) { - if (HAS_FLAGS(g_led_config.flags[i], 0x02)) { // 0x02 == LED_FLAG_UNDERGLOW - rgb_matrix_set_color(i, 0xff, 0xff, 0xff); - } - } - } - return false; -}; diff --git a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/readme.md b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/readme.md deleted file mode 100644 index 4f80a5b95663..000000000000 --- a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/readme.md +++ /dev/null @@ -1 +0,0 @@ -# ANSI GMMKV2 65% Layout diff --git a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/rgb_matrix_user.inc b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/rgb_matrix_user.inc deleted file mode 100644 index 2966fe25862a..000000000000 --- a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/rgb_matrix_user.inc +++ /dev/null @@ -1,72 +0,0 @@ - /* Copyright 2022 Eugenio Pastoral - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -RGB_MATRIX_EFFECT(SOLID_UNDERGLOW) -RGB_MATRIX_EFFECT(HOLOGRAPHICS_UNDERGLOW) - -#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS - -// This is a side lights only configuration where the solid color is following the current HSV setting. -static bool SOLID_UNDERGLOW(effect_params_t* params) { - RGB_MATRIX_USE_LIMITS(led_min, led_max); - - RGB rgb = rgb_matrix_hsv_to_rgb(rgb_matrix_config.hsv); - for (uint8_t i = led_min; i < led_max; i++) { - if (HAS_FLAGS(g_led_config.flags[i], 0x02)) { // 0x02 == LED_FLAG_UNDERGLOW - rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); - } else { - rgb_matrix_set_color(i, 0x00, 0x00, 0x00); - } - } - return rgb_matrix_check_finished_leds(led_max); -} - -// This is a side lights only configuration where the color is set to a static gradient. -static bool HOLOGRAPHICS_UNDERGLOW(effect_params_t* params) { - RGB_MATRIX_USE_LIMITS(led_min, led_max); - - for (uint8_t i = led_min; i < led_max; i++) { - if (HAS_FLAGS(g_led_config.flags[i], 0x02)) { // 0x02 == LED_FLAG_UNDERGLOW - // RIGHT-HAND SIDE LEDS || LEFT-HAND SIDE LEDS - if (i == 67 || i == 77) { - rgb_matrix_set_color(i, 0xff, 0x00, 0xee); - } else if (i == 68 || i == 78) { - rgb_matrix_set_color(i, 0xcc, 0x00, 0xff); - } else if (i == 69 || i == 79) { - rgb_matrix_set_color(i, 0x9e, 0x00, 0xff); - } else if (i == 70 || i == 80) { - rgb_matrix_set_color(i, 0x70, 0x00, 0xff); - } else if (i == 71 || i == 81) { - rgb_matrix_set_color(i, 0x52, 0x00, 0xff); - } else if (i == 72 || i == 82) { - rgb_matrix_set_color(i, 0x33, 0x00, 0xff); - } else if (i == 73 || i == 83) { - rgb_matrix_set_color(i, 0x00, 0x38, 0xff); - } else if (i == 74 || i == 84) { - rgb_matrix_set_color(i, 0x00, 0x57, 0xff); - } else if (i == 75 || i == 85) { - rgb_matrix_set_color(i, 0x00, 0x85, 0xff); - } else if (i == 76 || i == 86) { - rgb_matrix_set_color(i, 0x00, 0xb2, 0xff); - } else { - rgb_matrix_set_color(i, 0x00, 0x00, 0x00); - } - } - } - return rgb_matrix_check_finished_leds(led_max); -} - -#endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS diff --git a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/rules.mk b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/rules.mk deleted file mode 100644 index 6245023e803f..000000000000 --- a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/rules.mk +++ /dev/null @@ -1 +0,0 @@ -RGB_MATRIX_CUSTOM_USER = yes diff --git a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/thekorn/keymap.c b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/thekorn/keymap.c deleted file mode 100644 index c5f90e3fee09..000000000000 --- a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/thekorn/keymap.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright 2021 Glorious, LLC - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H - -// Each layer gets a name for readability, which is then used in the keymap matrix below. -// The underscores don't mean anything - you can have a layer called STUFF or any other name. -enum custom_layers { - _BL, - _FL, -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Keymap _BL: Base Layer (Default Layer) - */ -[_BL] = LAYOUT( - QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT), - - /* Keymap _FL: Function Layer - */ -[_FL] = LAYOUT( - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_INS, - RGB_M_P, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, RGB_HUI, RGB_HUD, RGB_SPD, RGB_SPI, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, RGB_VAI, RGB_TOG, - KC_MUTE, KC_VOLU, KC_VOLD, QK_BOOT, _______, _______, RGB_RMOD, RGB_VAD, RGB_MOD) -}; diff --git a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/thekorn/readme.md b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/thekorn/readme.md deleted file mode 100644 index 4f80a5b95663..000000000000 --- a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/thekorn/readme.md +++ /dev/null @@ -1 +0,0 @@ -# ANSI GMMKV2 65% Layout diff --git a/keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/keymap.c b/keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/keymap.c deleted file mode 100644 index 971e0821a323..000000000000 --- a/keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/keymap.c +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright 2021 Glorious, LLC - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include QMK_KEYBOARD_H - -// clang-format off -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Prt Rotary(Mute) -// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc Del -// Tab Q W E R T Y U I O P [ ] PgUp -// Caps A S D F G H J K L ; " # Enter PgDn -// Sh_L / Z X C V B N M , . ? Sh_R Up End -// Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right - - - // The FN key by default maps to a momentary toggle to layer 1 to provide access to the QK_BOOT key (to put the board into bootloader mode). Without - // this mapping, you have to open the case to hit the button on the bottom of the PCB (near the USB cable attachment) while plugging in the USB - // cable to get the board into bootloader mode - definitely not fun when you're working on your QMK builds. Remove this and put it back to KC_RGUI - // if that's your preference. - // - // To put the keyboard in bootloader mode, use FN+backspace. If you accidentally put it into bootloader, you can just unplug the USB cable and - // it'll be back to normal when you plug it back in. - // - // This keyboard defaults to 6KRO instead of NKRO for compatibility reasons (some KVMs and BIOSes are incompatible with NKRO). - // Since this is, among other things, a "gaming" keyboard, a key combination to enable NKRO on the fly is provided for convenience. - // Press Fn+N to toggle between 6KRO and NKRO. This setting is persisted to the EEPROM and thus persists between restarts. - [0] = LAYOUT( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_MUTE, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGUP, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN, - KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT - ), - - [1] = LAYOUT( - _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_PSCR, _______, - _______, RGB_TOG, RGB_M_P, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______, - _______, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, _______, _______, - _______, _______, _______, RGB_HUI, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, RGB_MOD, _______, - _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI - ), - - -}; -// clang-format on - -#ifdef ENCODER_ENABLE -bool encoder_update_user(uint8_t index, bool clockwise) { - if (clockwise) { - tap_code(KC_VOLU); - } else { - tap_code(KC_VOLD); - } - return false; -} -#endif - -bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { - static uint32_t cycle_led_timer = 0; - static uint8_t current_value = 0; - static uint8_t left_side_leds[8] = {68, 71, 74, 77, 81, 84, 88, 92}; - static uint8_t right_side_leds[8] = {69, 72, 75, 78, 82, 85, 89, 93}; - - if (host_keyboard_led_state().caps_lock) { - if (timer_elapsed32(cycle_led_timer) > 500) { - current_value = current_value == 0 ? 255 : 0; - cycle_led_timer = timer_read32(); - } - HSV tempHSV = {.h = 0, .s = 255, .v = current_value}; - RGB tempRGB = hsv_to_rgb(tempHSV); - for (uint8_t i = 0; i < ARRAY_SIZE(left_side_leds); i++) { - rgb_matrix_set_color(left_side_leds[i], tempRGB.r, tempRGB.g, tempRGB.b); - rgb_matrix_set_color(right_side_leds[i], tempRGB.r, tempRGB.g, tempRGB.b); - } - } - - static uint8_t l2_functions[26] = {6, 7, 8, 12, 13, 14, 15, 16, 18, 23, 28, 34, 38, 39, 44, 50, 56, 61, 66, 70, 80, 86, 94, 95, 96, 98}; - switch(get_highest_layer(layer_state)){ // special handling per layer - case 2: //layer one - break; - case 1: - for (uint8_t i = 0; i < ARRAY_SIZE(l2_functions); i++) { - RGB_MATRIX_INDICATOR_SET_COLOR(l2_functions[i], 255, 0, 0); - } - break; - default: - break; - break; - } - return false; -} diff --git a/keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/readme.md b/keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/readme.md deleted file mode 100644 index da66c447adad..000000000000 --- a/keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/readme.md +++ /dev/null @@ -1,8 +0,0 @@ -# chofstede GMMK Pro layout - -- Added Print-Screen to FN+POS1 -- Added Insert to FN+# -- The LED bars on the left and right side of the keyboard blink red when CAPS Lock is enabled -- All mapped keys light up red when FN is being pressed - - diff --git a/keyboards/gmmk/pro/rev1/iso/keymaps/falkecarlsen/keymap.c b/keyboards/gmmk/pro/rev1/iso/keymaps/falkecarlsen/keymap.c deleted file mode 100644 index 694fd80e197b..000000000000 --- a/keyboards/gmmk/pro/rev1/iso/keymaps/falkecarlsen/keymap.c +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright 2021 Glorious, LLC - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include QMK_KEYBOARD_H - -// clang-format off -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Prt Rotary(Mute) -// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc Del -// Tab Q W E R T Y U I O P [ ] PgUp -// Caps A S D F G H J K L ; " # Enter PgDn -// Sh_L / Z X C V B N M , . ? Sh_R Up End -// Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right - - - // The FN key by default maps to a momentary toggle to layer 1 to provide access to the QK_BOOT key (to put the board into bootloader mode). Without - // this mapping, you have to open the case to hit the button on the bottom of the PCB (near the USB cable attachment) while plugging in the USB - // cable to get the board into bootloader mode - definitely not fun when you're working on your QMK builds. Remove this and put it back to KC_RGUI - // if that's your preference. - // - // To put the keyboard in bootloader mode, use FN+backspace. If you accidentally put it into bootloader, you can just unplug the USB cable and - // it'll be back to normal when you plug it back in. - // - // This keyboard defaults to 6KRO instead of NKRO for compatibility reasons (some KVMs and BIOSes are incompatible with NKRO). - // Since this is, among other things, a "gaming" keyboard, a key combination to enable NKRO on the fly is provided for convenience. - // Press Fn+N to toggle between 6KRO and NKRO. This setting is persisted to the EEPROM and thus persists between restarts. - [0] = LAYOUT( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_MPLY, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGUP, - MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN, - KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT - ), - - [1] = LAYOUT( - _______, KC_BRID, KC_BRIU, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_MSTP, KC_MNXT, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______, - _______, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, RGB_VAD, RGB_TOG, RGB_VAI, RGB_HUI, _______, NK_TOGG, _______, _______, _______, _______, _______, RGB_MOD, _______, - _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI - ), - - -}; -// clang-format on - -#ifdef ENCODER_ENABLE -bool encoder_update_user(uint8_t index, bool clockwise) { - if (clockwise) { - tap_code(KC_VOLU); - } else { - tap_code(KC_VOLD); - } - return false; -} -#endif diff --git a/keyboards/gmmk/pro/rev1/iso/keymaps/falkecarlsen/readme.md b/keyboards/gmmk/pro/rev1/iso/keymaps/falkecarlsen/readme.md deleted file mode 100644 index 4239e0dcb8da..000000000000 --- a/keyboards/gmmk/pro/rev1/iso/keymaps/falkecarlsen/readme.md +++ /dev/null @@ -1,8 +0,0 @@ -# Falke Carlsen keymap for GMMK PRO ISO -Based on the default keymap, inheriting rotary encoder and LED configs without modification. - -## Changes: -- Fixes layer 1 of top-row to correspond to 'Keychron ISO Q1 & K2 Dye-Sub PBT Nordic' printed legend multimedia keys. -- Adds early 2010s Ducky layer 1 mouse-emulation to WASD with left+right click and scroll in the 2x4 cluster. -- Remaps default keymaps LED-handling to 2nd-row due to addition of mouse-emulation. -- Swap layer 0 rotary encoder click to play/pause, and layer 1 click to next. diff --git a/keyboards/gray_studio/think65/solder/keymaps/dangjoeltang/keymap.c b/keyboards/gray_studio/think65/solder/keymaps/dangjoeltang/keymap.c deleted file mode 100644 index 884efb7b960b..000000000000 --- a/keyboards/gray_studio/think65/solder/keymaps/dangjoeltang/keymap.c +++ /dev/null @@ -1,232 +0,0 @@ -/* Copyright 2021 Qiaowei Tang - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include QMK_KEYBOARD_H - - - /* - * LED ranges for Think6.5v2 2U - * These values were derived from manual testing. Derived from keymaps/rys. - * ┌───────┬───────┬─────────────┬───────────────────────────────────────────┐ - * │ 00 01 │ 02 03 │ 04 05 06 07 │ 08 09 10 11 12 13 14 15 16 17 18 19 20 21 │ - * │ badge │ badge │    (?)     │              underglow (?)                │ - * │  bar │ icon │         │                               │ - * └───────┴───────┴─────────────┴───────────────────────────────────────────┘ - */ - -// Define the LED ranges start, end -#define THINK65_LED_RANGE_OFF 0, 0 -#define THINK65_LED_RANGE_CAPS 0, 2 -#define THINK65_LED_RANGE_BADGE 0, 4 -#define THINK65_LED_RANGE_UNDERGLOW 4, 22 -#define THINK65_LED_RANGE_ALL 0, 22 - -// Turn the LEDs off by setting HSV to 0, 0, 0 -#define THINK65_LEDS_OFF 0, 0, 0 - -// Caps Lock indicator LED -#define THINK65_LEDS_CAPS 0, 0, 255 - -#define THINK65_LED_STATE_OFF 0x0 // 0b00000000 -#define THINK65_LED_STATE_CAPS 0x1 // 0b00000001 -#define THINK65_LED_STATE_BADGE 0x2 // 0b00000010 -#define THINK65_LED_STATE_CAPS_AND_BADGE 0x3 // 0b00000011 - -// Define each LED range as a bit flag -#define THINK65_LED_CAPS_RANGE_BIT 0 -#define THINK65_LED_BADGE_RANGE_BIT 1 - -// Setup some keycodes to control cycling and range toggling -enum { - KVM_SW1 = SAFE_RANGE, - KVM_SW2, - CYC_LED, - TOG_BDG -}; - -// setup the user EEPROM space we need -typedef union { - uint8_t raw; - struct { - uint8_t current_led_state:8; - }; -} user_config_t; - -user_config_t user_config; - -// toggle one of the range flag bits -void toggle_led_state(unsigned int led_range) { - if (led_range >= THINK65_LED_CAPS_RANGE_BIT && led_range <= THINK65_LED_BADGE_RANGE_BIT) { - user_config.current_led_state ^= 1 << led_range; - } -} - -// set one of the range flag bits -void set_led_state(unsigned int led_range) { - if (led_range >= THINK65_LED_CAPS_RANGE_BIT && led_range <= THINK65_LED_BADGE_RANGE_BIT) { - user_config.current_led_state |= 1 << led_range; - } -} - -// clear one of the range flag bits -void clear_led_state(unsigned int led_range) { - if (led_range >= THINK65_LED_CAPS_RANGE_BIT && led_range <= THINK65_LED_BADGE_RANGE_BIT) { - user_config.current_led_state &= ~(1 << led_range); - } -} - -// cycle LED states: Off -> Esc -> Badge -> Underglow -> Esc+Badge -> Esc+Underglow -> Badge+Underglow -> All -void cycle_led_state(void) { - switch(user_config.current_led_state) { - case THINK65_LED_STATE_OFF: - user_config.current_led_state = THINK65_LED_STATE_CAPS; - break; - case THINK65_LED_STATE_CAPS: - user_config.current_led_state = THINK65_LED_STATE_BADGE; - break; - case THINK65_LED_STATE_BADGE: - user_config.current_led_state = THINK65_LED_STATE_CAPS_AND_BADGE; - break; - case THINK65_LED_STATE_CAPS_AND_BADGE: - user_config.current_led_state = THINK65_LED_STATE_OFF; - break; - default: - break; - } -} - -void apply_led_state(void) { - uint8_t h = rgblight_get_hue(); - uint8_t s = rgblight_get_sat(); - uint8_t v = rgblight_get_val(); - - // Set the RGB ranges based on the current state - switch(user_config.current_led_state) { - case THINK65_LED_STATE_OFF: - rgblight_sethsv_range(THINK65_LEDS_OFF, THINK65_LED_RANGE_ALL); - break; - case THINK65_LED_STATE_CAPS: - rgblight_sethsv_range(THINK65_LEDS_OFF, THINK65_LED_RANGE_BADGE); - rgblight_sethsv_range(THINK65_LEDS_CAPS, THINK65_LED_RANGE_CAPS); - break; - case THINK65_LED_STATE_BADGE: - rgblight_sethsv_range(THINK65_LEDS_OFF, THINK65_LED_RANGE_CAPS); - rgblight_sethsv_range(h, s, v, THINK65_LED_RANGE_BADGE); - break; - case THINK65_LED_STATE_CAPS_AND_BADGE: - rgblight_sethsv_range(h, s, v, THINK65_LED_RANGE_BADGE); - rgblight_sethsv_range(THINK65_LEDS_CAPS, THINK65_LED_RANGE_CAPS); - break; - default: - break; - } -} - -void keyboard_post_init_user(void) { - user_config.raw = eeconfig_read_user(); - - if (user_config.current_led_state >= THINK65_LED_STATE_OFF && user_config.current_led_state <= THINK65_LED_STATE_CAPS_AND_BADGE) { - // If the current state read from user EEPROM is valid, apply it - apply_led_state(); - } else { - // Setup a new default state of off - user_config.current_led_state = THINK65_LED_STATE_OFF; - apply_led_state(); - eeconfig_update_user(user_config.raw); - } -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case KVM_SW1: - if (record->event.pressed) { - SEND_STRING(SS_TAP(X_RCTL) SS_TAP(X_RCTL) "1"); - } else {} - break; - case KVM_SW2: - if(record->event.pressed) { - SEND_STRING(SS_TAP(X_RCTL) SS_TAP(X_RCTL) "2"); - } else {} - break; - case CYC_LED: - if (record->event.pressed) { - cycle_led_state(); - apply_led_state(); - eeconfig_update_user(user_config.raw); - } - break; - case TOG_BDG: - if (record->event.pressed) { - toggle_led_state(THINK65_LED_BADGE_RANGE_BIT); - apply_led_state(); - eeconfig_update_user(user_config.raw); - } - break; - case KC_CAPS: - if (!record->event.pressed) { - // connect capslock LED control to the badge LEDs - host_keyboard_led_state().caps_lock ? set_led_state(THINK65_LED_CAPS_RANGE_BIT) : clear_led_state(THINK65_LED_CAPS_RANGE_BIT); - apply_led_state(); - eeconfig_update_user(user_config.raw); - } - break; - } - return true; -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Base Layer - * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐ - * │Esc│! 1│@ 2│# 3│$ 4│% 5│^ 6│& 7│* 8│( 9│) 0│_ -│+ =│ Bckspc│` ~│ - * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤ - * │Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │{ [│} ]│| \│Del│ - * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ - * │HyCaps│ A │ S │ D │ F │ G │ H │ J │ K │ L │: ;│" '│ Enter│ │ - * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ │ - * │Shift │ Z │ X │ C │ V │ B │ N │ M │< ,│> .│? /│ Shift│ Up│ │ - * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤ - * │Ctrl│ Opt│ Cmd│ Space │Cmd │FnPy│ │Lef│Dow│Rig│ - * └────┴────┴────┴────────────────────────┴────┴────┴─┴───┴───┴───┘ - */ - [0] = LAYOUT_65_ansi_blocker( - QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, XXXXXXX, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, XXXXXXX, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT - ), - /* - * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬────────┬───┐ - * │RST│ F1│ F2│ F3│ F4│ F5│ F6│ F7│ F8│ F9│F10│F11│F12│        │SW1│ - * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬──────┼───┤ - * │ TOG │PLN│MOD│HU+│HU-│SA+│SA-│VA+│VA-│ │ │Hom│End│ │SW2│ - * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴──────┼───┤ - * │ │CYC│BDG│UGL│CAP│ │ │ │ │ │ │ │ │ │ - * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬────┤ │ - * │ │ │ │ │ │ │ │ │ │ │ │ │Vol+│ │ - * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼────┼───┤ - * │ │ │ │ │ │ │ │ │Vol-│ │ - * └────┴────┴────┴────────────────────────┴────┴────┴─┴───┴────┴───┘ - */ - [1] = LAYOUT_65_ansi_blocker( - QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KVM_SW1, - TOG_BDG, RGB_M_P, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, KC_HOME, KC_END, _______, KVM_SW2, - _______, CYC_LED, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, - _______, _______, _______, _______, _______, _______, _______, KC_VOLD, _______ - ), - -}; - diff --git a/keyboards/gray_studio/think65/solder/keymaps/dangjoeltang/readme.md b/keyboards/gray_studio/think65/solder/keymaps/dangjoeltang/readme.md deleted file mode 100644 index 520e7e0752e3..000000000000 --- a/keyboards/gray_studio/think65/solder/keymaps/dangjoeltang/readme.md +++ /dev/null @@ -1,9 +0,0 @@ -# dangjoeltang's Think6.5v2 keymap - -My personal keymap for the Think6.5v2. Using the `LAYOUT_65_ansi_blocker` LAYOUT for a 2U blocker version. I added functionality to enable the Caps-lock indicator LED above the badge. This functionality shipped with the original board; however, for those who reflash their boards using the default `gray_studio/think65/solder` keymaps that functionality disappeared. - -## [Base Layer](http://www.keyboard-layout-editor.com/#/gists/9c6a905a643b77249958f28662348f53) -![Base Layer](https://imgur.com/Gyim08a) - -## [Function Layer](http://www.keyboard-layout-editor.com/#/gists/1c061d3664ea5caf5cb64c759339278d) -![Function Layer](https://imgur.com/H2Yqnv3) diff --git a/keyboards/gray_studio/think65/solder/keymaps/yt/config.h b/keyboards/gray_studio/think65/solder/keymaps/yt/config.h deleted file mode 100644 index 6bdff5008e44..000000000000 --- a/keyboards/gray_studio/think65/solder/keymaps/yt/config.h +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright 2022 Yt Liu - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#define RGBLIGHT_LAYERS diff --git a/keyboards/gray_studio/think65/solder/keymaps/yt/keymap.c b/keyboards/gray_studio/think65/solder/keymaps/yt/keymap.c deleted file mode 100644 index d4d6a7157af9..000000000000 --- a/keyboards/gray_studio/think65/solder/keymaps/yt/keymap.c +++ /dev/null @@ -1,139 +0,0 @@ -/* Copyright 2021 Qiaowei Tang - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - - - - /* - * LED ranges for Think6.5v2 2U - * These values were derived from manual testing. Derived from keymaps/rys. - * ┌───────┬───────┬─────────────┬───────────────────────────────────────────┐ - * │ 00 01 │ 02 03 │ 04 05 06 07 │ 08 09 10 11 12 13 14 15 16 17 18 19 20 21 │ - * │ badge │ badge │    (?)     │              underglow (?)                │ - * │  bar │ icon │         │                               │ - * └───────┴───────┴─────────────┴───────────────────────────────────────────┘ - */ - - -// Setup some layers to control mac/win layouts -#include QMK_KEYBOARD_H - -enum bs_layers { - _WIN, - _MAC, - _FN, - _BLANC -}; - -// Setup some keycodes to control cycling and range toggling -enum bs_keycodes { - WIN = SAFE_RANGE, - MAC -}; - -// Light LEDs 6 to 9 and 12 to 15 red when caps lock is active. Hard to ignore! -const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {0, 4, HSV_WHITE} // Light 4 LEDs, starting with LED 12 -); - -// Now define the array of layers. Later layers take precedence -const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( - my_capslock_layer // Overrides other layers -); - -void keyboard_post_init_user(void) { - // Enable the LED layers - rgblight_layers = my_rgb_layers; -}; - -bool led_update_user(led_t led_state) { - rgblight_set_layer_state(0, led_state.caps_lock); - return true; -}; - -layer_state_t default_layer_state_set_user(layer_state_t state) { - if (get_highest_layer(state) == _MAC) { - rgblight_mode_noeeprom(6); - } else { - rgblight_mode_noeeprom(9); - } - return state; -} - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Win Layer - * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐ - * │Esc│! 1│@ 2│# 3│$ 4│% 5│^ 6│& 7│* 8│( 9│) 0│_ -│+ =│ Bckspc│pup│ - * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤ - * │Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │{ [│} ]│| \│pdw│ - * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ - * │lTCap │ A │ S │ D │ F │ G │ H │ J │ K │ L │: ;│" '│ Enter│ │ - * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ │ - * │Shift │ Z │ X │ C │ V │ B │ N │ M │< ,│> .│? /│ Shift│ Up│ │ - * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴───┴┬─┬───┼───┼───┤ - * │Ctrl│ win│ alt│ Space │ Func │ │Lef│Dow│Rig│ - * └────┴────┴────┴────────────────────────┴─────────┴─┴───┴───┴───┘ - */ - [_WIN] = LAYOUT_65_ansi_blocker( - QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, - LT(_FN, KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, _______, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, _______, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_1, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT - ), - /* Mac Layer - * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐ - * │Esc│! 1│@ 2│# 3│$ 4│% 5│^ 6│& 7│* 8│( 9│) 0│_ -│+ =│ Bckspc│pup│ - * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤ - * │Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │{ [│} ]│| \│pdw│ - * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ - * │lTCap │ A │ S │ D │ F │ G │ H │ J │ K │ L │: ;│" '│ Enter│ │ - * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ │ - * │Shift │ Z │ X │ C │ V │ B │ N │ M │< ,│> .│? /│ Shift│ Up│ │ - * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴───┴┬─┬───┼───┼───┤ - * │Ctrl│ Opt│ Cmd│ Space │ Func │ │Lef│Dow│Rig│ - * └────┴────┴────┴────────────────────────┴─────────┴─┴───┴───┴───┘ - */ - [_MAC] = LAYOUT_65_ansi_blocker( - QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, - LT(_FN, KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, _______, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, _______, - KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_1, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT - ), - /* Fn Layer - * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬────────┬───┐ - * │lck│ F1│ F2│ F3│ F4│ F5│ F6│ F7│ F8│ F9│F10│F11│F12│ delete │mac│ - * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬──────┼───┤ - * │ TOG │MB1│MSU│MB2│MDU│ │ │ │UP │ │Hom│pgu│End│ │win│ - * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴──────┼───┤ - * │MO(2) │MSL│MSD│MSR│MWD│ │ │Lft│Dwn│rgt│END│pgd│ reset │ │ - * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬────┤ │ - * │ RGB_mod│F13│F14│F15│F16│F17│F18│F19│F20│F21│F22│F23 │Bri+│ │ - * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼────┼───┤ - * │Vold│Mute│Volu│ │ │ │ │ │Bri-│ │ - * └────┴────┴────┴────────────────────────┴────┴────┴─┴───┴────┴───┘ - */ - [_FN] = LAYOUT_65_ansi_blocker( - QK_LOCK, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, MAC, - RGB_TOG, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_MS_WH_UP, _______, _______, _______, KC_UP, _______, KC_HOME, KC_PGUP, _______, _______, WIN, - _______, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_DOWN, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_END, KC_PGDN, QK_BOOT, _______, - RGB_MOD, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_BRIU, _______, - KC_VOLD, KC_MUTE, KC_VOLU, _______, _______, _______, _______, KC_BRID, _______ - ), - -}; - - diff --git a/keyboards/gray_studio/think65/solder/keymaps/yt/readme.md b/keyboards/gray_studio/think65/solder/keymaps/yt/readme.md deleted file mode 100644 index 84286c5e342f..000000000000 --- a/keyboards/gray_studio/think65/solder/keymaps/yt/readme.md +++ /dev/null @@ -1,3 +0,0 @@ -# YT45's Think6.5v2 keymap - -My personal keymap for the Think6.5v2. Using the dangjoeltang as a the base and adding a quick switch from mac to win layouts. also with indication of the current layer with RGB lights. diff --git a/keyboards/gray_studio/think65/solder/keymaps/yt/rules.mk b/keyboards/gray_studio/think65/solder/keymaps/yt/rules.mk deleted file mode 100644 index 378684852980..000000000000 --- a/keyboards/gray_studio/think65/solder/keymaps/yt/rules.mk +++ /dev/null @@ -1,5 +0,0 @@ -LTO_ENABLE = yes -VIA_ENABLE = yes -MOUSEKEY_ENABLE = yes -KEY_LOCK_ENABLE = yes -CONSOLE_ENABLE = no \ No newline at end of file diff --git a/keyboards/hadron/ver3/keymaps/sebaslayout/keymap.c b/keyboards/hadron/ver3/keymaps/sebaslayout/keymap.c deleted file mode 100644 index fcae7f07c6c3..000000000000 --- a/keyboards/hadron/ver3/keymaps/sebaslayout/keymap.c +++ /dev/null @@ -1,43 +0,0 @@ -#include QMK_KEYBOARD_H -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - LAYOUT( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PSCR, - KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_P7, KC_P8, KC_P9, - KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_SCLN, KC_P4, KC_P5, KC_P6, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_SLSH, KC_P1, KC_P2, KC_P3, - KC_LCTL, KC_LGUI, KC_LALT, MO(1), KC_SPC, KC_SPC, KC_SPC, MO(1), KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), -/* Primary - * ,------+------+------+------+------+------------------------------------------------. - * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | PRTSN| - * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------. - * | ˜ | Q | W | E | R | T | Y | U | I | O | P | BKSP | 7 | 8 | 9 | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * | Tab | A | S | D | F | G | H | J | K | L | ' | ; | 4 | 5 | 6 | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | Up | /? | 1 | 2 | 3 | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | Alt | GUI | Raise| Space | Raise| Ctrl | Left | Down |Right | 0 | . | Enter| - * `--------------------------------------------------------------------------------------------------------' - */ - LAYOUT( - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F11, KC_F12, KC_TRNS, KC_HOME, KC_INS, KC_PGUP, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_DEL, KC_PGDN, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), -/* Secondary - * ,------+------+------+------+------+------------------------------------------------. - * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | | - * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------. - * | | | | | | | | | | F11 | F12 | | Home | Ins | PgUP | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | | End | Del | PgDN | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | Vol+ | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | Vol- | | | | | - * `--------------------------------------------------------------------------------------------------------' - */ -}; - diff --git a/keyboards/hadron/ver3/keymaps/sebaslayout/readme.md b/keyboards/hadron/ver3/keymaps/sebaslayout/readme.md deleted file mode 100644 index ce6974ce0968..000000000000 --- a/keyboards/hadron/ver3/keymaps/sebaslayout/readme.md +++ /dev/null @@ -1,7 +0,0 @@ -![Hadron v3 Layout Image](https://i.imgur.com/Mi5L57j.png) - -# My Custome Hadron Layout - -+ Moved numpad to the right -+ changed F row to standard numbers -+ Bottom row subject to change diff --git a/keyboards/handwired/aim65/keymaps/bonnee/keymap.c b/keyboards/handwired/aim65/keymaps/bonnee/keymap.c deleted file mode 100644 index 7884841b21ad..000000000000 --- a/keyboards/handwired/aim65/keymaps/bonnee/keymap.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright 2021 Matteo Bonora - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H - -#define CTESC LCTL_T(KC_ESC) - -enum layer_names { - BL, - FL -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [BL] = LAYOUT( - KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, - KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_RGUI, - CTESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - LT(FL, KC_SPC) - ), - - [FL] = LAYOUT( - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, - KC_TAB, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______ - ) -}; diff --git a/keyboards/handwired/baredev/rev1/keymaps/manoshu/keymap.c b/keyboards/handwired/baredev/rev1/keymaps/manoshu/keymap.c deleted file mode 100644 index 82277e215843..000000000000 --- a/keyboards/handwired/baredev/rev1/keymaps/manoshu/keymap.c +++ /dev/null @@ -1,99 +0,0 @@ -/* Copyright 2021 Fernando "ManoShu" Rodrigues - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include QMK_KEYBOARD_H - -#include "keymap_brazilian_abnt2.h" -#include "sendstring_brazilian_abnt2.h" - -enum { - LAYER_BASE, - LAYER_FUNCTIONS -}; - -#define L_FUNCT MO(LAYER_FUNCTIONS) -#define W_CHOLD LGUI_T(KC_CAPS) - -//Combination keycodes -#define KC_PSBR C(KC_PAUSE) // Ctrl+Pause/Break -#define KC_SNIP SGUI(BR_S) // Screen Snip (GUI + Shift + S) -#define KC_WRUN G(BR_R) // Run (GUI + R) -#define KC_WLCK G(BR_L) // Lock (GUI + L) -#define KC_WDSK G(BR_D) // Desktop (GUI + D) -#define KC_WEXP G(BR_E) // Explorer (GUI + E) -#define KC_WPSE G(KC_PAUSE) // System Properties (GUI + Pause) -#define KC_WMGP G(BR_EQL) // Magnify (+) -#define KC_WMGM G(BR_MINS) // Magnify (-) - -enum custom_keycodes { - KC_WPRN = SAFE_RANGE, // Project (P) - KC_WSPC // Input Select (Space) -}; - -layer_state_t layer_state_set_user(layer_state_t state) { - if (get_highest_layer(state) == LAYER_BASE) { - unregister_mods(MOD_MASK_GUI); - } - return state; -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - if(keycode == KC_WPRN || keycode == KC_WSPC) { - if (record->event.pressed) { - - register_code(KC_LGUI); - - if(keycode == KC_WPRN) { - tap_code(KC_P); - } else if (keycode == KC_WSPC) { - tap_code(KC_SPACE); - } - } - } - return true; -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [LAYER_BASE] = LAYOUT( - /* ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ */ - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, - /* ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┴─────────┤ */ - BR_QUOT, BR_1, BR_2, BR_3, BR_4, BR_5, BR_6, BR_7, BR_8, BR_9, BR_0, BR_MINS, BR_EQL, KC_BSPC, - /* ├─────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬──────────────┤ */ - KC_TAB, BR_Q, BR_W, BR_E, BR_R, BR_T, BR_Y, BR_U, BR_I, BR_O, BR_P, BR_ACUT, BR_LBRC, KC_ENT, - /* ├──────────────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬ ┤ */ - W_CHOLD, BR_A, BR_S, BR_D, BR_F, BR_G, BR_H, BR_J, BR_K, BR_L, BR_CCED, BR_TILD, BR_RBRC, - /* ├───────────┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴─────────┴─┬─────────┤ */ - KC_LSFT, BR_BSLS, BR_Z, BR_X, BR_C, BR_V, BR_B, BR_N, BR_M, BR_COMM, BR_DOT, BR_SCLN, BR_SLSH, KC_UP, - /* ├───────────┼─────────┴─┬───────┴───┬─────┴─────────┴─────────┴─────────┴─────────┴─────────┴───────┬─┴───────┬─┴───────┬─┴───────┬─────────┼─────────┤ */ - KC_LCTL, L_FUNCT, KC_LALT, KC_SPC, KC_APP, KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT - /* └───────────┴───────────┴───────────┴───────────────────────────────────────────────────────────────┴─────────┴─────────┴─────────┴─────────┴─────────┘ */ - ), - [LAYER_FUNCTIONS] = LAYOUT( - /* ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ */ - QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSBR, KC_SNIP, - /* ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┴─────────┤ */ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WMGM, KC_WMGP, _______, - /* ├─────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬──────────────┤ */ - _______, KC_MPLY, KC_MUTE, KC_WEXP, KC_WRUN, _______, _______, _______, _______, _______, KC_WPRN, _______, _______, _______, - /* ├──────────────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬ ┤ */ - _______, KC_MPRV, KC_MNXT, KC_WDSK, _______, _______, _______, _______, _______, KC_WLCK, _______, _______, _______, - /* ├───────────┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴─────────┴─┬─────────┤ */ - _______, _______, KC_VOLU, KC_VOLD, KC_CALC, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, - /* ├───────────┼─────────┴─┬───────┴───┬─────┴─────────┴─────────┴─────────┴─────────┴─────────┴───────┬─┴───────┬─┴───────┬─┴───────┬─────────┼─────────┤ */ - _______, _______, _______, KC_WSPC, _______, KC_INS, KC_HOME, KC_PGDN, KC_END - /* └───────────┴───────────┴───────────┴───────────────────────────────────────────────────────────────┴─────────┴─────────┴─────────┴─────────┴─────────┘ */ - ) -}; \ No newline at end of file diff --git a/keyboards/handwired/baredev/rev1/keymaps/manoshu/readme.md b/keyboards/handwired/baredev/rev1/keymaps/manoshu/readme.md deleted file mode 100644 index 1852a0fbc208..000000000000 --- a/keyboards/handwired/baredev/rev1/keymaps/manoshu/readme.md +++ /dev/null @@ -1,16 +0,0 @@ -![BareDev Layout Image](https://i.imgur.com/FXye4Hn.png) - -# ManoShu's custom layout - -Has all the functions of a ABNT TKL keyboard, sans right shift. - -Basic media functions also included. - -Trying to emulate where notebooks/smaller OEM keyboard put the function key, for this reason the GUI key was moved and it can be used by holding the Caps Lock key. - -To not use the new GUI position very often, commonly used GUI + [X] commands are sent using `SEND_STRING()`, `(un)register_code()` and `tap_code()`. - -## Why you didn't used `LT(FUNCTIONS, KC_LGUI)` on the GUI/FN key? -Because I don't want rely on the tapping term to determine I will send either KC_HOME or snap the active window to the left. - -If there is a better way to solve this, please let me know. \ No newline at end of file diff --git a/keyboards/handwired/bento/keymaps/cbc02009/keymap.c b/keyboards/handwired/bento/keymaps/cbc02009/keymap.c deleted file mode 100644 index 57c107b9fc94..000000000000 --- a/keyboards/handwired/bento/keymaps/cbc02009/keymap.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright 2019 cbc02009 - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include QMK_KEYBOARD_H - - -/* LAYER 1 - * ,---------------+-------. - * |KC_MPRV|KC_MNXT|KC_MUTE| - * |-------+-------+-------, - * |KC_MPLY|KC_MSTP|KC_MUTE| - * `-------+-------+-------' - */ -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT(KC_MPRV, KC_MNXT, KC_MUTE, KC_MPLY, KC_MSTP, KC_MUTE) -}; - -#ifdef ENCODER_ENABLE -#include "encoder.h" -bool encoder_update_user(uint8_t index, bool clockwise) { - if (index == 0) { /* First encoder */ - if (clockwise) { - tap_code(KC_VOLU); - } else { - tap_code(KC_VOLD); - } - } - return true; -} -#endif diff --git a/keyboards/handwired/dactyl_manuform/4x5_5/keymaps/ssedrick/keymap.c b/keyboards/handwired/dactyl_manuform/4x5_5/keymaps/ssedrick/keymap.c deleted file mode 100644 index 5774ab7f3bd6..000000000000 --- a/keyboards/handwired/dactyl_manuform/4x5_5/keymaps/ssedrick/keymap.c +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2022 Shem Sedrick (@ssedrick) -// SPDX-License-Identifier: GPL-2.0-or-later - -#include QMK_KEYBOARD_H -#include "print.h" - -enum key_layers { - _BASE, - _COLEMAK, - _RAISE, - _LOWER -}; - -enum layer_keycodes { - QWERTY = SAFE_RANGE, - COLEMAK, -}; - -#define RAISE TT(_RAISE) -#define LOWER MO(_LOWER) -#define SH_ESC SFT_T(KC_ESC) -#define UNDSC RSFT(KC_MINS) -#define MAC_LOCK C(G(KC_D)) -#define ____ KC_TRANSPARENT - -#undef TAPPING_TOGGLE -#define TAPPING_TOGGLE 2 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_BASE] = LAYOUT( - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, - KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, - KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, - KC_LCBR, KC_RCBR, KC_QUOT, KC_GRV, - SH_ESC, KC_LGUI, KC_TAB, KC_RSFT, KC_SPC, KC_ENT, - RAISE, KC_LCTL, KC_BSPC, LOWER - ), - - [_COLEMAK] = LAYOUT( - KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, - KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, - KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, - KC_LCBR, KC_RCBR, KC_QUOT, KC_GRV, - ____, ____, ____, ____, ____, ____, - ____, ____, ____, ____ - ), - - [_RAISE] = LAYOUT( - KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, - S(KC_9), S(KC_0), KC_LBRC, KC_RBRC, KC_EQL, KC_MINS, KC_4, KC_5, KC_6, KC_QUOT, - QK_RBT, QK_BOOT, ____, ____, ____, ____, KC_1, KC_2, KC_3, ____, - MAC_LOCK, ____, KC_0, KC_DOT, - ____, ____, ____, ____, ____, ____, - ____, ____, ____, ____ - ), - - [_LOWER] = LAYOUT( - KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, - S(KC_9), S(KC_0), KC_LBRC, KC_RBRC, KC_EQL, UNDSC, KC_MINS, KC_EQL, KC_BSLS, KC_PIPE, - KC_MNXT, KC_MPLY, KC_VOLU, KC_VOLD, ____, ____, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, - ____, ____, QWERTY, COLEMAK, - ____, ____, ____, ____, ____, ____, - ____, ____, ____, ____ - ) -}; - - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - // If console is enabled, it will print the matrix position and status of each key pressed -#ifdef CONSOLE_ENABLE - uprintf("KL: kc: 0x%04X, col: %u, row: %u, pressed: %d, time: %u, interrupt: %d, count: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed, record->event.time, record->tap.interrupted, record->tap.count); -#endif - switch (keycode) { - case QWERTY: - if (record->event.pressed) { - set_single_persistent_default_layer(_BASE); - } - return false; - break; - case COLEMAK: - if (record->event.pressed) { - set_single_persistent_default_layer(_COLEMAK); - } - return false; - break; - } - return true; -} - diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/nabos/config.h b/keyboards/handwired/dactyl_manuform/5x6/keymaps/nabos/config.h deleted file mode 100644 index 2ab0c912a342..000000000000 --- a/keyboards/handwired/dactyl_manuform/5x6/keymaps/nabos/config.h +++ /dev/null @@ -1,21 +0,0 @@ -/* -Copyright 2022 Nabos - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#pragma once - -#define EE_HANDS - diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/nabos/keymap.c b/keyboards/handwired/dactyl_manuform/5x6/keymaps/nabos/keymap.c deleted file mode 100644 index d118eec92abf..000000000000 --- a/keyboards/handwired/dactyl_manuform/5x6/keymaps/nabos/keymap.c +++ /dev/null @@ -1,75 +0,0 @@ -/* -Copyright 2022 Nabos - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ -#include QMK_KEYBOARD_H - -enum layer_names { - _QWERTY, - _FUNCTIONS, - _NUMPAD, - _GAMING -}; - -#define FUNCTIONS MO(_FUNCTIONS) -#define NUMPAD MO(_NUMPAD) -#define GAMING TG(_GAMING) - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_QWERTY] = LAYOUT_5x6( - QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 ,KC_RBRC, - KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P ,KC_LBRC, - KC_PGUP, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L ,KC_SCLN,KC_QUOT, - KC_PGDN, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M ,KC_COMM,KC_DOT,KC_SLSH,_______, - KC_LEFT,KC_RIGHT, KC_DOWN,KC_UP , - KC_LSFT,KC_SPC , KC_ENT ,KC_BSPC, - KC_LGUI,KC_LALT, FUNCTIONS,KC_RALT, - KC_DEL ,GAMING , NUMPAD ,KC_RCTL - ), - - [_FUNCTIONS] = LAYOUT_5x6( - KC_F12 , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 ,KC_F10 ,KC_F11 , - _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, - _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, - _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, - _______,_______, _______,_______, - _______,_______, _______,_______, - _______,_______, _______,_______, - _______,_______, _______,_______ - ), - - [_NUMPAD] = LAYOUT_5x6( - _______,_______,_______,_______,_______,_______, _______,KC_NUM ,_______,_______,KC_MINS,KC_EQL , - _______,_______,_______,_______,_______,_______, _______,KC_KP_7,KC_KP_8,KC_KP_9,_______,_______, - _______,_______,_______,_______,_______,_______, _______,KC_KP_4,KC_KP_5,KC_KP_6,_______,_______, - _______,_______,_______,_______,_______,_______, _______,KC_KP_1,KC_KP_2,KC_KP_3,_______,KC_PSCR, - _______,_______, KC_KP_0,KC_PDOT, - _______,_______, KC_PENT,_______, - _______,_______, _______,_______, - _______,_______, _______,_______ - ), - - [_GAMING] = LAYOUT_5x6( - _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, - KC_T ,KC_TAB , KC_Q , KC_W , KC_E , KC_R , _______,_______,_______,_______,_______,_______, - KC_G ,KC_LSFT, KC_A , KC_S , KC_D , KC_F , _______,_______,_______,_______,_______,_______, - KC_B ,KC_LCTL, KC_Z , KC_X , KC_C , KC_V , _______,_______,_______,_______,_______,_______, - _______,_______, _______,_______, - _______,_______, _______,_______, - _______,_______, _______,_______, - _______,_______, _______,_______ - ) -}; - diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/config.h b/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/config.h deleted file mode 100644 index e97810f8bc39..000000000000 --- a/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/config.h +++ /dev/null @@ -1,49 +0,0 @@ -/* -Copyright 2012 Jun Wako - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - - -#pragma once - -#define MASTER_LEFT -// #define MASTER_RIGHT -//#define EE_HANDS - -// Mouse -#undef MOUSEKEY_INTERVAL -#define MOUSEKEY_INTERVAL 15 -#undef MOUSEKEY_TIME_TO_MAX -#define MOUSEKEY_TIME_TO_MAX 60 -#undef MOUSEKEY_WHEEL_MAX_SPEED -#define MOUSEKEY_WHEEL_MAX_SPEED 3 - -// RGB backlight -#undef WS2812_DI_PIN -#define WS2812_DI_PIN D3 -#undef RGBLED_NUM -#define RGBLED_NUM 30 -#define RGBLIGHT_EFFECT_BREATHING -#define RGBLIGHT_EFFECT_RAINBOW_MOOD -#define RGBLIGHT_EFFECT_RAINBOW_SWIRL -#define RGBLIGHT_EFFECT_SNAKE -#define RGBLIGHT_EFFECT_KNIGHT -#define RGBLIGHT_EFFECT_CHRISTMAS -#define RGBLIGHT_EFFECT_STATIC_GRADIENT -#define RGBLIGHT_EFFECT_RGB_TEST -#define RGBLIGHT_EFFECT_ALTERNATING -#define RGBLIGHT_EFFECT_TWINKLE -#define RGBLIGHT_LIMIT_VAL 95 -#define RGBLIGHT_SPLIT diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/keymap.c b/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/keymap.c deleted file mode 100644 index c4887a3dbb55..000000000000 --- a/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/keymap.c +++ /dev/null @@ -1,106 +0,0 @@ -/* A standard layout for the Dactyl Manuform 5x6 Keyboard */ - -#include QMK_KEYBOARD_H - -enum layer_names { - _MAC, - _WINDOWS, - _MOUSE, - _ARROWS, - _SYMBOLS, - _NUMBERS, - _MEDIA, -}; - -#define RAISE MO(_RAISE) -#define LOWER MO(_LOWER) - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - [_MAC] = LAYOUT_5x6( - KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 ,KC_GRAVE, - KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P ,KC_MINS, - KC_BSPC, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L ,KC_SCLN,KC_QUOT, - KC_LSFT, CTL_T(KC_Z) , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_BSLS, - KC_LALT,KC_LCTL, KC_DEL, KC_PMNS, - KC_SPC, MO(_ARROWS), MO(_MOUSE), KC_ENT, - KC_LCMD, MO(_SYMBOLS), KC_EQL, KC_RALT, - KC_LALT, MO(_NUMBERS), MO(_MEDIA), KC_EJCT - ), - - [_WINDOWS] = LAYOUT_5x6( - - _______,_______, _______ ,_______,_______ ,_______, _______,_______,_______,_______,_______,_______, - _______,_______,_______,_______,_______,_______, _______, _______ , _______ , _______ ,_______,_______, - _______,_______,_______,_______,_______ ,_______, _______, _______ , _______ , _______ ,_______,_______, - _______,_______,_______,_______,_______,_______, _______, _______ , _______ , _______ ,_______ ,_______, - KC_LCMD,KC_LALT, _______, _______, - _______,_______, _______,_______, - KC_LCTL,_______, _______,_______, - _______,_______, _______,_______ - - ), - - [_MOUSE] = LAYOUT_5x6( - - KC_F11,KC_F1, KC_F2 ,KC_F3,KC_F4 ,KC_F5, KC_F6,KC_F7,KC_F8,KC_F9,KC_F10,KC_F12, - _______,_______,_______,KC_WH_U,_______,_______, _______, _______ , KC_MS_U , _______ ,_______,_______, - _______,_______,KC_WH_L,KC_WH_D,KC_WH_R ,_______, KC_BTN1, KC_MS_L , KC_MS_D , KC_MS_R ,_______,_______, - _______,_______,KC_ACL0,KC_ACL1,KC_ACL2,_______, _______, KC_BTN2 , _______ , _______ ,_______ ,_______, - _______,_______, _______, QK_BOOT, - KC_BTN1,KC_BTN2, _______,_______, - _______,KC_BTN2, _______,_______, - _______,_______, _______,_______ - - ), - [_ARROWS] = LAYOUT_5x6( - - QK_BOOT,_______, _______ ,_______,_______ ,TG(_WINDOWS), _______,_______,_______,_______,_______,_______, - _______,_______,_______,_______,_______,_______, _______, KC_HOME , KC_UP , KC_END ,_______,_______, - _______,_______,_______,_______,_______ ,_______, KC_HOME, KC_LEFT , KC_DOWN , KC_RIGHT ,KC_END,_______, - _______,_______,_______,_______,_______,_______, _______, KC_PGDN , _______ , KC_PGUP ,_______ ,_______, - QK_BOOT,_______, _______, _______, - _______,_______, _______,_______, - _______,_______, _______,_______, - _______,_______, _______,_______ - - ), - [_SYMBOLS] = LAYOUT_5x6( - - _______,_______, _______ ,_______,_______ ,_______, KC_CIRC,KC_CIRC,KC_LABK,KC_RABK,_______,_______, - _______,_______,_______,_______,_______,_______, KC_LABK, KC_AT , KC_LCBR , KC_RCBR ,KC_HASH,KC_RABK, - _______,_______,_______,_______,_______ ,_______, KC_PERC, KC_EQL , KC_LPRN , KC_RPRN ,KC_DLR,KC_AMPR, - _______,_______,_______,_______,_______,_______, KC_TILD, KC_GRAVE , KC_LBRC , KC_RBRC ,KC_PIPE ,KC_EXLM, - _______,_______, KC_PPLS, KC_PMNS, - _______,_______, _______,_______, - _______,_______, _______,_______, - _______,_______, _______,_______ - - ), - [_NUMBERS] = LAYOUT_5x6( - - QK_BOOT,_______, _______ ,_______,_______ ,_______, KC_PSLS,KC_PAST,KC_PPLS,KC_PMNS,_______,_______, - _______,_______,_______,KC_PSLS,KC_PAST,_______, _______, KC_7 , KC_8 , KC_9 ,_______,_______, - _______,_______,_______,KC_PMNS,KC_PPLS ,_______, _______, KC_4 , KC_5 , KC_6 ,_______,_______, - _______,_______,_______,_______,_______,_______, _______, KC_1 , KC_2 , KC_3 ,_______ ,_______, - _______,_______, KC_0, KC_DOT, - _______,_______, _______,_______, - _______,_______, _______,_______, - _______,_______, _______,_______ - - ), - [_MEDIA] = LAYOUT_5x6( - - KC_MSTP,KC_MPRV, KC_MPLY ,KC_MNXT,_______ ,_______, _______,_______,_______,_______,_______,_______, - _______,_______,_______,_______,KC_VOLU,_______, RGB_SPI, _______ , _______ , _______ ,_______,_______, - _______,_______,_______,_______,KC_VOLD ,_______, RGB_TOG, RGB_MODE_FORWARD , RGB_HUI , RGB_SAI ,RGB_VAI,_______, - _______,_______,_______,_______,KC_MUTE,_______, RGB_SPD, RGB_MODE_REVERSE , RGB_HUD , RGB_SAD ,RGB_VAD ,_______, - _______,_______, _______, _______, - _______,_______, _______,_______, - _______,_______, _______,_______, - _______,_______, _______,_______ - - ), -}; - - diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/rules.mk b/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/rules.mk deleted file mode 100644 index 1e3cebb14515..000000000000 --- a/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/rules.mk +++ /dev/null @@ -1 +0,0 @@ -RGBLIGHT_ENABLE = yes diff --git a/keyboards/handwired/dactyl_manuform/6x6/keymaps/happysalada/keymap.c b/keyboards/handwired/dactyl_manuform/6x6/keymaps/happysalada/keymap.c deleted file mode 100644 index d96ae996a590..000000000000 --- a/keyboards/handwired/dactyl_manuform/6x6/keymaps/happysalada/keymap.c +++ /dev/null @@ -1,167 +0,0 @@ -/* -Copyright 2021 Raphael Megzari - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include QMK_KEYBOARD_H - -enum custom_layers { - _COLEMAK_DH, - _LEFT, - _LEFT_UP, - _RIGHT, - _RIGHT_UP, - _QWERTY -}; - -#define COLMAK TO(_COLEMAK_DH) -#define QWERTY TO(_QWERTY) - -enum custom_keycodes { - EQ_SUP = SAFE_RANGE, - INF_EQ, - SUP_EQ, - INF_MIN, - MIN_SUP, - PIPE_R, - SUP_SUP, - INF_INF, -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - [_COLEMAK_DH] = LAYOUT_6x6( - - _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, - _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, - QWERTY ,KC_Q ,KC_W ,KC_F ,KC_P ,KC_K , KC_Z ,KC_L ,KC_U ,KC_Y ,KC_COLN,_______, - _______,KC_A ,KC_R ,KC_S ,KC_T ,KC_G , KC_M ,KC_N ,KC_E ,KC_I ,KC_O ,_______, - KC_LSFT,KC_J ,KC_B ,KC_C ,KC_D ,KC_V , KC_X ,KC_H ,KC_COMM,KC_DOT ,KC_QUES,KC_RSFT, - KC_K ,KC_V , KC_X ,KC_Z , - LT(_RIGHT_UP,KC_BSPC),LSFT_T(KC_ESC), LT(_LEFT, KC_ENT),LT(_LEFT_UP,KC_SPC), - _______,LCTL_T(KC_DEL), LGUI_T(KC_TAB),_______, - _______,_______, _______,_______ - ), - - [_QWERTY] = LAYOUT_6x6( - - _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, - _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, - COLMAK ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T , KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,_______, - _______,KC_A ,KC_S ,KC_D ,KC_F ,KC_G , KC_H ,KC_J ,KC_K ,KC_L ,KC_COLN,_______, - KC_LSFT,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B , KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_QUES,KC_RSFT, - _______,_______, _______,_______, - LT(_RIGHT_UP,KC_BSPC),LSFT_T(KC_ESC), LT(_LEFT, KC_ENT),LT(_LEFT_UP,KC_SPC), - _______,LCTL_T(KC_DEL), LGUI_T(KC_TAB),_______, - _______,_______, _______,_______ - ), - - [_LEFT] = LAYOUT_6x6( - - _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, - _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, - _______,_______,KC_PLUS,KC_CIRC,KC_AMPR,_______, _______,KC_EQL ,KC_PERC,KC_HASH,_______,_______, - _______,_______,KC_TILD,KC_DQUO,KC_PIPE,_______, _______,KC_LPRN,KC_LCBR,KC_LBRC,_______,_______, - _______,_______,KC_BSLS,KC_ASTR,KC_SLSH,_______, _______,KC_RPRN,KC_RCBR,KC_RBRC,_______,_______, - _______,_______, _______,_______, - _______,_______, _______,_______, - _______,_______, _______,_______, - _______,_______, _______,_______ - ), - - [_LEFT_UP] = LAYOUT_6x6( - - _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, - _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, - _______,_______,KC_LABK,KC_MINS,KC_RABK,_______, _______,KC_7 ,KC_8 ,KC_9 ,_______,_______, - _______,_______,KC_UNDS,KC_QUOT,KC_DLR ,KC_GRV , _______,KC_4 ,KC_5 ,KC_6 ,KC_0 ,_______, - _______,_______,KC_SCLN,KC_AT ,KC_EXLM,_______, _______,KC_1 ,KC_2 ,KC_3 ,_______,_______, - _______,_______, _______,_______, - _______,_______, _______,_______, - _______,_______, _______,_______, - _______,_______, _______,_______ - ), - - [_RIGHT] = LAYOUT_6x6( - - _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, - _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, - _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, - _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, - _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, - _______,_______, _______,_______, - _______,_______, _______,_______, - _______,_______, _______,_______, - _______,_______, _______,_______ - ), - - [_RIGHT_UP] = LAYOUT_6x6( - - _______,_______,_______,_______,_______,_______, _______,_______ ,_______ ,_______ ,_______,_______, - _______,_______,_______,_______,_______,_______, _______,_______ ,_______ ,_______ ,_______,_______, - _______,_______,INF_INF,_______,SUP_SUP,_______, _______,LCTL(KC_LEFT),KC_UP ,LCTL(KC_RGHT),_______,_______, - _______,_______,MIN_SUP,EQ_SUP ,PIPE_R ,_______, _______,KC_LEFT ,KC_DOWN ,KC_RGHT ,LGUI(KC_UP),_______, - _______,_______,INF_MIN,INF_EQ ,_______,_______, _______,_______ ,KC_CAPS ,_______ ,_______,_______, - _______,_______, _______ ,_______ , - _______,_______, _______,_______, - _______,_______, _______,_______, - _______,_______, _______,_______ - ), - - -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch(keycode) { - case PIPE_R: - if (record->event.pressed) { - SEND_STRING("|> "); - } - break; - case EQ_SUP: - if (record->event.pressed) { - SEND_STRING("=> "); - } - break; - case INF_EQ: - if (record->event.pressed) { - SEND_STRING("<= "); - } - break; - case MIN_SUP: - if (record->event.pressed) { - SEND_STRING("-> "); - } - break; - case INF_MIN: - if (record->event.pressed) { - SEND_STRING("<- "); - } - break; - case INF_INF: - if (record->event.pressed) { - SEND_STRING("<<"); - } - break; - case SUP_SUP: - if (record->event.pressed) { - SEND_STRING(">>"); - } - break; - } - return true; -} - - diff --git a/keyboards/handwired/k_numpad17/keymaps/karlssn/keymap.c b/keyboards/handwired/k_numpad17/keymaps/karlssn/keymap.c deleted file mode 100644 index fdbc3c8a3917..000000000000 --- a/keyboards/handwired/k_numpad17/keymaps/karlssn/keymap.c +++ /dev/null @@ -1,61 +0,0 @@ -#include QMK_KEYBOARD_H - -//Tap Dance Declarations -enum { - TD_DOT_COMMAS = 0 -}; - -//Tap Dance Definitions -tap_dance_action_t tap_dance_actions[] = { - //Tap once for Esc, twice for Caps Lock - [TD_DOT_COMMAS] = ACTION_TAP_DANCE_DOUBLE(KC_DOT, KC_COMMA) -// Other declarations would go here, separated by commas, if you have them -}; - -//In Layer declaration, add tap dance item in place of a key code - - - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* - * ,-------------------. - * |bcsp| / | * | - | - * |----|----|----|----| - * | 7 | 8 | 9 | | - * |----|----|----| + | - * | 4 | 5 | 6 | | - * |----|----|----|----| - * | 1 | 2 | 3 | | - * |----|----|----| En | - * | FN/0 | . | | - * `-------------------' - */ - - [0] = LAYOUT_numpad_5x4( - KC_BSPC, KC_PSLS, KC_PAST, KC_PMNS, - KC_P7, KC_P8, KC_P9, - KC_P4, KC_P5, KC_P6, KC_PPLS, - KC_P1, KC_P2, KC_P3, - LT(1, KC_P0), TD(TD_DOT_COMMAS), KC_PENT - ), - /* - * ,-------------------. - * | F10| F11| F12| - | - * |----|----|----|----| - * | F7 | F8 | F9 | | - * |----|----|----| vol| - * | F4 | F5 | F6 | + | - * |----|----|----|----| - * | F1 | F2 | F3 | vol| - * |----|----|----| - | - * | FN | . | | - * `-------------------' - */ - [1] = LAYOUT_numpad_5x4( - KC_F10, KC_F11, KC_F12, KC_NO, - KC_F7, KC_F8, KC_F9, - KC_F4, KC_F5, KC_F6, KC_VOLU, - KC_F1, KC_F2, KC_F3, - KC_NO, KC_PDOT, KC_VOLD - ) -}; diff --git a/keyboards/handwired/k_numpad17/keymaps/karlssn/rules.mk b/keyboards/handwired/k_numpad17/keymaps/karlssn/rules.mk deleted file mode 100644 index e5ddcae8d927..000000000000 --- a/keyboards/handwired/k_numpad17/keymaps/karlssn/rules.mk +++ /dev/null @@ -1 +0,0 @@ -TAP_DANCE_ENABLE = yes diff --git a/keyboards/handwired/lagrange/keymaps/dpapavas/config.h b/keyboards/handwired/lagrange/keymaps/dpapavas/config.h deleted file mode 100644 index 0114d6c7f928..000000000000 --- a/keyboards/handwired/lagrange/keymaps/dpapavas/config.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright 2020 Dimitris Papavasiliou - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General 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 - -#undef TAPPING_TERM -#define TAPPING_TERM 175 -#define TAPPING_TERM_PER_KEY -#define PERMISSIVE_HOLD_PER_KEY diff --git a/keyboards/handwired/lagrange/keymaps/dpapavas/keymap.c b/keyboards/handwired/lagrange/keymaps/dpapavas/keymap.c deleted file mode 100644 index 8d2ecd9c791d..000000000000 --- a/keyboards/handwired/lagrange/keymaps/dpapavas/keymap.c +++ /dev/null @@ -1,202 +0,0 @@ -/* Copyright 2020 Dimitris Papavasiliou - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General 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 QMK_KEYBOARD_H - -#define CAPS_SFT MT(MOD_LSFT, KC_CAPS) -#define QUOT_SFT MT(MOD_RSFT, KC_QUOT) -#define PSCR_SFT MT(MOD_LSFT, KC_PSCR) -#define PAUSE_SFT MT(MOD_RSFT, KC_PAUSE) -#define F_SFT MT(MOD_LSFT, KC_F) -#define J_SFT MT(MOD_RSFT, KC_J) -#define PGUP_GUI MT(MOD_LGUI, KC_PGUP) -#define END_GUI MT(MOD_LGUI, KC_END) -#define UP_GUI MT(MOD_RGUI, KC_UP) -#define LEFT_GUI MT(MOD_RGUI, KC_LEFT) -#define EQL_CTL MT(MOD_RCTL, KC_EQL) -#define MINS_CTL MT(MOD_LCTL, KC_MINS) -#define BSPC_ALT LALT_T(KC_BSPC) -#define ENT_ALT LALT_T(KC_ENT) -#define SPC_ALT RALT_T(KC_SPC) -#define DEL_ALT RALT_T(KC_DEL) - -enum tapdance_keycodes { - TD_LEFT, - TD_RGHT, - TD_C_X -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT( - /* Left hand */ /* Right hand */ - - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_ESC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - CAPS_SFT, KC_A, KC_S, KC_D, F_SFT, KC_G, KC_H, J_SFT, KC_K, KC_L, KC_SCLN, QUOT_SFT, - PSCR_SFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, PAUSE_SFT, - - TD(TD_LEFT), KC_INS, KC_LBRC, MINS_CTL, BSPC_ALT, DEL_ALT, TD(TD_C_X), TD(TD_C_X), ENT_ALT, SPC_ALT, EQL_CTL, KC_RBRC, KC_DEL, TD(TD_RGHT), - KC_HOME, PGUP_GUI, END_GUI, LEFT_GUI, UP_GUI, KC_RGHT, - KC_PGDN, KC_DOWN - ), - - [1] = LAYOUT( - /* Left hand */ /* Right hand */ - - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F11, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS - ), -}; - -/* The following helper macros define tap dances that support - * separated press, release, tap and double-tap functions. */ - -#define STEPS(DANCE) [DANCE] = ACTION_TAP_DANCE_FN_ADVANCED( \ - NULL, \ - dance_ ## DANCE ## _finished, \ - dance_ ## DANCE ## _reset) - -#define CHOREOGRAPH(DANCE, PRESS, RELEASE, TAP, DOUBLETAP) \ - static bool dance_ ## DANCE ## _pressed; \ - \ - void dance_ ## DANCE ## _finished(tap_dance_state_t *state, void *user_data) { \ - if (state->count == 1) { \ - if (state->pressed) { \ - dance_ ## DANCE ## _pressed = true; \ - PRESS; \ - } else { \ - TAP; \ - } \ - } else if (state->count == 2) { \ - if (!state->pressed) { \ - DOUBLETAP; \ - } \ - } \ - } \ - \ - void dance_ ## DANCE ## _reset(tap_dance_state_t *state, void *user_data) { \ - if (state->count == 1) { \ - if (dance_ ## DANCE ## _pressed) { \ - RELEASE; \ - dance_ ## DANCE ## _pressed = false; \ - } \ - } \ - } - -/* Define dance for left palm key. */ - -CHOREOGRAPH(TD_LEFT, - layer_invert(1), /* Temporarily toggle layer when held. */ - layer_invert(1), - - /* Press and release both shifts on tap, to change - * keyboard layout (i.e. language). */ - - SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_RSFT) - SS_UP(X_LSFT) SS_UP(X_RSFT)), - - layer_invert(1)); /* Toggle layer (permanently) on - * double-tap. */ - -/* Define dance for right palm key. */ - -CHOREOGRAPH(TD_RGHT, - layer_invert(1), /* Same as above */ - layer_invert(1), - /* Send a complex macro: C-x C-s Mod-t up. (Save in - * Emacs, switch to terminal and recall previous command, - * hopefully a compile command.) */ - SEND_STRING(SS_DOWN(X_LCTL) SS_TAP(X_X) SS_TAP(X_S) SS_UP(X_LCTL) - SS_DOWN(X_LGUI) SS_TAP(X_T) SS_UP(X_LGUI) SS_TAP(X_UP)), - layer_invert(1)); - -/* This facilitates C-x chords in Emacs. Used as a modifier along - * with, say, the s-key, it saves, by sending C-x C-s. When tapped it - * just sends C-x. */ - -CHOREOGRAPH(TD_C_X, - SEND_STRING(SS_DOWN(X_LCTL) SS_TAP(X_X)), - SEND_STRING(SS_UP(X_LCTL)), - SEND_STRING(SS_DOWN(X_LCTL) SS_TAP(X_X) SS_UP(X_LCTL)),); - -tap_dance_action_t tap_dance_actions[] = { - STEPS(TD_LEFT), STEPS(TD_RGHT), STEPS(TD_C_X) -}; - -/* Set a longer tapping term for palm keys to allow comfortable - * permanent layer toggle. Also set an essentially infinite tapping - * term for certain mod-tap keys one tends to keep pressed (such as - * space, backspace, etc.). This prevents sending the modifier - * keycode by accident (allowing re-tap to get repeated key-press) - * and, in combination with permissive hold, they can still be used - * fine as modifiers. */ - -uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case TD(TD_LEFT): - case TD(TD_RGHT): - return 250; - case BSPC_ALT: - case UP_GUI: - case LEFT_GUI: - return 5000; - default: - return TAPPING_TERM; - } -} - -bool get_permissive_hold(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case TD(TD_LEFT): - case TD(TD_RGHT): - case BSPC_ALT: - case UP_GUI: - case LEFT_GUI: - return true; - default: - return false; - } -} - -/* Use the first LED to indicate the active layer. */ - -layer_state_t layer_state_set_user(layer_state_t state) { - writePin(D0, (get_highest_layer(state) > 0)); - - return state; -} - -/* Cycle through the LEDs after initialization. */ - -void keyboard_post_init_user(void) { - const pin_t pins[] = {D0, D1, D2}; - uint8_t i, j; - - for (i = 0 ; i < ARRAY_SIZE(pins) + 2 ; i += 1) { - for (j = 0 ; j < ARRAY_SIZE(pins); j += 1) { - setPinOutput(pins[j]); - writePin(pins[j], (j == i || j == i - 1)); - } - - wait_ms(100); - } -} diff --git a/keyboards/handwired/lagrange/keymaps/dpapavas/rules.mk b/keyboards/handwired/lagrange/keymaps/dpapavas/rules.mk deleted file mode 100644 index 42f42f627acc..000000000000 --- a/keyboards/handwired/lagrange/keymaps/dpapavas/rules.mk +++ /dev/null @@ -1,4 +0,0 @@ -# Enable additional features. - -DEBOUNCE_TYPE = sym_defer_pk -TAP_DANCE_ENABLE = yes diff --git a/keyboards/handwired/marauder/keymaps/orvia/keymap.c b/keyboards/handwired/marauder/keymaps/orvia/keymap.c deleted file mode 100644 index 53463fa002a1..000000000000 --- a/keyboards/handwired/marauder/keymaps/orvia/keymap.c +++ /dev/null @@ -1,199 +0,0 @@ -/* Copyright 2021 BB-66 - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H -bool is_alt_tab_active = false; -uint16_t alt_tab_timer = 0; - -char wpm_str[4]; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PAUS, KC_PSCR, KC_SCRL, KC_ESC, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NUM, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_KP_4, KC_KP_5, KC_KP_6, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_KP_0, KC_KP_DOT - ), - [1] = LAYOUT( - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO - ), - [2] = LAYOUT( - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO - ), - [3] = LAYOUT( - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO - ), - -}; - - -#ifdef OLED_ENABLE -// WPM-responsive animation stuff here -# define IDLE_FRAMES 5 -# define IDLE_SPEED 20 // below this wpm value your animation will idle - -// #define PREP_FRAMES 1 // uncomment if >1 - -# define TAP_FRAMES 2 -# define TAP_SPEED 40 // above this wpm value typing animation to trigger - -# define ANIM_FRAME_DURATION 200 // how long each frame lasts in ms -// #define SLEEP_TIMER 60000 // should sleep after this period of 0 wpm, needs fixing -# define ANIM_SIZE 610 // number of bytes in array, minimize for adequate firmware size, max is 1024 - -uint32_t anim_timer = 0; -uint32_t anim_sleep = 0; -uint8_t current_idle_frame = 0; -// uint8_t current_prep_frame = 0; // uncomment if PREP_FRAMES >1 -uint8_t current_tap_frame = 0; - -// Code containing pixel art, contains: -// 5 idle frames, 1 prep frame, and 2 tap frames - -// To make your own pixel art: -// save a png/jpeg of an 128x32 image (resource: https://www.pixilart.com/draw ) -// follow this guide up to and including "CONVERT YOUR IMAGE" https://docs.splitkb.com/hc/en-us/articles/360013811280-How-do-I-convert-an-image-for-use-on-an-OLED-display- -// replace numbers in brackets with your own -// if you start getting errors when compiling make sure you didn't accedentally delete a bracket -static void render_anim(void) { - static const char PROGMEM idle[IDLE_FRAMES][ANIM_SIZE] = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x82, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x01, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x34, 0xc4, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0d, 0x31, 0xc1, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; - static const char PROGMEM prep[][ANIM_SIZE] = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64, 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; - static const char PROGMEM tap[TAP_FRAMES][ANIM_SIZE] = { - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64, 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x98, 0xc0, 0x88, 0x88, 0x8c, 0x9c, 0x1c, 0x1e, 0x0e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0f, 0x0f, 0x07, 0x03, 0x03, 0x61, 0xf0, 0xf8, 0xfc, 0x60, 0x01, 0x01, 0x01, 0x3c, 0x78, 0xf8, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - }; - - // assumes 1 frame prep stage - void animation_phase(void) { - if (get_current_wpm() <= IDLE_SPEED) { - current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES; - oled_write_raw_P(idle[abs((IDLE_FRAMES - 1) - current_idle_frame)], ANIM_SIZE); - } - if (get_current_wpm() > IDLE_SPEED && get_current_wpm() < TAP_SPEED) { - // oled_write_raw_P(prep[abs((PREP_FRAMES-1)-current_prep_frame)], ANIM_SIZE); // uncomment if IDLE_FRAMES >1 - oled_write_raw_P(prep[0], ANIM_SIZE); // remove if IDLE_FRAMES >1 - } - if (get_current_wpm() >= TAP_SPEED) { - current_tap_frame = (current_tap_frame + 1) % TAP_FRAMES; - oled_write_raw_P(tap[abs((TAP_FRAMES - 1) - current_tap_frame)], ANIM_SIZE); - } - } - if (get_current_wpm() != 000) { - oled_on(); // not essential but turns on animation OLED with any alpha keypress - if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { - anim_timer = timer_read32(); - animation_phase(); - } - anim_sleep = timer_read32(); - } else { - if (timer_elapsed32(anim_sleep) > OLED_TIMEOUT) { - oled_off(); - } else { - if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { - anim_timer = timer_read32(); - animation_phase(); - } - } - } -} - -// Used to draw on to the oled screen -bool oled_task_user(void) { - render_anim(); // renders pixelart - - oled_set_cursor(0, 0); // sets cursor to (row, column) using charactar spacing (4 rows, 21 full columns on a 128x32 screen, anything more will overflow back to the top) - uint8_t n = get_current_wpm(); - wpm_str[3] = '\0'; - wpm_str[2] = '0' + n % 10; - wpm_str[1] = (n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' '; - wpm_str[0] = n / 10 ? '0' + n / 10 : ' '; - oled_write_P(PSTR("WPM:"), false); - oled_write(wpm_str, false); - - led_t led_state = host_keyboard_led_state(); // caps lock stuff, prints CAPS on new line if caps led is on - oled_set_cursor(0, 1); - oled_write_P(led_state.caps_lock ? PSTR("CAPS") : PSTR(" "), false); - oled_set_cursor(0, 2); - oled_write_P(led_state.num_lock ? PSTR("NUM") : PSTR(" "), false); - oled_set_cursor(4, 2); - oled_write_P(led_state.scroll_lock ? PSTR("SCLK") : PSTR(" "), false); - oled_set_cursor(0, 3); - switch (get_highest_layer(layer_state)) { - case 0: - oled_write_P(PSTR("Base Layer\n"), false); - break; - case 1: - oled_write_P(PSTR("Base Enhanced\n"), false); - break; - case 2: - oled_write_P(PSTR("Gaming\n"), false); - break; - case 3: - oled_write_P(PSTR("Gaming Enh\n"), false); - break; - default: - oled_write_ln_P(PSTR("Undefined"), false); - } - oled_set_cursor(17, 3); - oled_write_P(PSTR("NKRO"), keymap_config.nkro); - return false; -} -#endif diff --git a/keyboards/handwired/marauder/keymaps/orvia/rules.mk b/keyboards/handwired/marauder/keymaps/orvia/rules.mk deleted file mode 100644 index e39f8c6e9e80..000000000000 --- a/keyboards/handwired/marauder/keymaps/orvia/rules.mk +++ /dev/null @@ -1,3 +0,0 @@ -VIA_ENABLE = yes -OLED_ENABLE = yes -WPM_ENABLE = yes # WPM counting Enable diff --git a/keyboards/handwired/pteron/keymaps/FSund/keymap.c b/keyboards/handwired/pteron/keymaps/FSund/keymap.c deleted file mode 100644 index 14ad23cd43e1..000000000000 --- a/keyboards/handwired/pteron/keymaps/FSund/keymap.c +++ /dev/null @@ -1,116 +0,0 @@ -#include QMK_KEYBOARD_H - -enum pteron_layers { - _QWERTY, - _LOWER, - _RAISE, - _ADJUST -}; - -#define LOWER MO(_LOWER) -#define RAISE MO(_RAISE) - -// alt gr -#undef G -#define G(kc) RALT(kc) - -// custom keycodes -// use F_ prefix to avoid problems - -// NB! I use Norwegian keyboard layout on my machines, so the keymap probably -// doesn't make much sense for US/ANSI users - -#define F_FSLH S(KC_7) // forward slash -#define F_BSLH KC_EQL // backward slash -#define F_EQL S(KC_0) // equals sign -#define F_APOS KC_BSLS // ' -#define F_TIMES S(KC_BSLS) // * -#define F_PLUS KC_MINS // + -#define F_QUEST S(KC_MINS) // ? -#define F_HAT S(KC_RBRC) // ^ -#define F_TILD G(KC_RBRC) // ~ -#define F_UML KC_RBRC // ¨ (umlaut) -#define F_SECT S(KC_GRV) // section sign ("law sign") (shifted key below esc) -#define F_GRAVE S(KC_EQL) -#define F_ACUTE G(KC_EQL) - -#define KC_AA KC_LBRC -#define KC_OE KC_SCLN -#define KC_AE KC_QUOT - -// brackets -#define F_SBRL G(KC_8) // square bracket left -#define F_SBRR G(KC_9) // square bracket right -#define F_CBRL G(KC_7) // curly bracket left -#define F_CBRR G(KC_0) // curly bracket right -#define F_RBRL S(KC_8) // round bracket left -#define F_RBRR S(KC_9) // round bracket right -#define F_ABRL KC_NUBS // angle bracket left -#define F_ABRR S(KC_NUBS) // angle bracket right - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* QWERTY - * +-----------------------------------------+ +-----------------------------------------+ - * | Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Å | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Ctrl | A | S | D | F | G | | H | J | K | L | Ø | Æ | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Shft | Z | X | C | V | B | | N | M | , | . | - | Shft | - * +---------------------------+------+------+-------------+ +-------------+------+------+---------------------------+ - * | LOWR | Spc | Alt | Win | | Win | Alt | Spc | RISE | - * +---------------------------+ +---------------------------+ - */ - -[_QWERTY] = LAYOUT( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_AA, - KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_OE, KC_AE, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - LOWER, KC_SPC, KC_LALT, KC_LGUI, KC_RGUI, KC_RALT, KC_ENT, RAISE - ), - -/* LOWER - * +-----------------------------------------+ +-----------------------------------------+ - * | | | | | | | | | | | | | | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | | | | | | | \ | / | [ | ] | = | Del | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | F1 | F2 | F3 | F4 | F5 | | < | > | ( | ) | * | ~ | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | F6 | F7 | F8 | F9 | F10 | | F11 | F12 | { | } | + | | - * +---------------------------+------+------+-------------+ +-------------+------+------+---------------------------+ - * | | | | | | | | | | - * +---------------------------+ +---------------------------+ - */ - -[_LOWER] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, F_BSLH, F_FSLH, F_SBRL, F_SBRR, F_EQL, KC_DEL, - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, F_ABRL, F_ABRR, F_RBRL, F_RBRR, F_TIMES, F_TILD, - _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, F_CBRL, F_CBRR, F_PLUS, _______, - _______, _______, _______, _______, _______, _______, _______, _______ - ), - -[_RAISE] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_AA, - F_SECT, S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), F_QUEST, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, F_APOS, - _______, S(KC_6), G(KC_2), G(KC_3), G(KC_4), G(KC_5), F_HAT, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, - _______, _______, _______, _______, _______, _______, _______, _______ - ), - -[_ADJUST] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, F_UML, F_GRAVE, F_ACUTE, _______, QK_BOOT, _______, _______, _______, _______, KC_PSCR, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, _______, - _______, _______, _______, _______, _______, _______, _______, _______ - ) -}; - -layer_state_t layer_state_set_user(layer_state_t state) { - return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); -} diff --git a/keyboards/handwired/pteron/keymaps/alzafacon/config.h b/keyboards/handwired/pteron/keymaps/alzafacon/config.h deleted file mode 100644 index 3bc36a62ae50..000000000000 --- a/keyboards/handwired/pteron/keymaps/alzafacon/config.h +++ /dev/null @@ -1,22 +0,0 @@ - /* Copyright 2021 Fidel Coria - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -/* override diode direction from keyboard config */ -/* COL2ROW or ROW2COL */ -#undef DIODE_DIRECTION -#define DIODE_DIRECTION COL2ROW diff --git a/keyboards/handwired/pteron/keymaps/alzafacon/keymap.c b/keyboards/handwired/pteron/keymaps/alzafacon/keymap.c deleted file mode 100644 index 1d030599fd88..000000000000 --- a/keyboards/handwired/pteron/keymaps/alzafacon/keymap.c +++ /dev/null @@ -1,120 +0,0 @@ - /* Copyright 2021 Fidel Coria - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H - -enum pteron_layers { - _QWERTY, - _LOWER, - _RAISE, - _ADJUST -}; - - -#define LOWER MO(_LOWER) -#define RAISE MO(_RAISE) - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Qwerty - * +-----------------------------------------+ +-----------------------------------------+ - * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Del | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Esc | A | S | D | F | G | | H | J | K | L | ; | " | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter | - * +-------------+------+------+------+------| |------+------+------+------+-------------+ - * |Lower | SPC | Alt | GUI | | Alt | GUI | SPC |Raise | - * +---------------------------+ +---------------------------+ - */ -[_QWERTY] = LAYOUT( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, - KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, - LOWER, KC_SPC, KC_LALT, KC_LGUI, KC_RALT, KC_RGUI, KC_SPC, RAISE -), - -/* Lower - * +-----------------------------------------+ +-----------------------------------------+ - * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Bksp | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Del | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | | F6 | _ | + | { | } | | | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | | F12 |ISO ~ |ISO | | | | | - * +-------------+------+------+------+------| |------+------+------+------+-------------+ - * | | | | | | Next | Vol- | Vol+ | Play | - * +---------------------------+ +---------------------------+ - */ -[_LOWER] = LAYOUT( - KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, - KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______, - _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY -), - -/* Raise - * +-----------------------------------------+ +-----------------------------------------+ - * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | | F12 |ISO # |ISO / | | | | - * +-------------+------+------+------+------| |------+------+------+------+-------------+ - * | | | | | | Next | Vol- | Vol+ | Play | - * +---------------------------+ +---------------------------+ - */ -[_RAISE] = LAYOUT( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, - _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY -), - -/* Adjust (Lower + Raise) - * +-----------------------------------------+ +-----------------------------------------+ - * | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | Reset| | | | | | | | | | | Del | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | | |Aud on|AudOff|AGnorm| |AGswap|Qwerty|Colemk|Dvorak| | | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | |Voice-|Voice+|Mus on|MusOff|MidiOn| |MidOff| | | | | | - * +-------------+------+------+------+------| |------+------+------+------+-------------+ - * | | | | | | | | | | - * +---------------------------+ +---------------------------+ - */ -[_ADJUST] = LAYOUT( - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, - _______, QK_BOOT, DB_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______ -) - -}; - -layer_state_t layer_state_set_user(layer_state_t state) { - return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); -} diff --git a/keyboards/handwired/pteron/keymaps/alzafacon/readme.md b/keyboards/handwired/pteron/keymaps/alzafacon/readme.md deleted file mode 100644 index 0bc5f2704fde..000000000000 --- a/keyboards/handwired/pteron/keymaps/alzafacon/readme.md +++ /dev/null @@ -1,4 +0,0 @@ -# alzafacon pteron layout - -This keymap is for builds with elite-c controllers. -Also notice `DIODE_DIRECTION COL2ROW`. I prefer to hand-wire this way. diff --git a/keyboards/handwired/pteron/keymaps/alzafacon/rules.mk b/keyboards/handwired/pteron/keymaps/alzafacon/rules.mk deleted file mode 100644 index 03323308e775..000000000000 --- a/keyboards/handwired/pteron/keymaps/alzafacon/rules.mk +++ /dev/null @@ -1,2 +0,0 @@ -# for elite-c -BOOTLOADER = atmel-dfu diff --git a/keyboards/handwired/selene/keymaps/bpendragon/keymap.c b/keyboards/handwired/selene/keymaps/bpendragon/keymap.c deleted file mode 100644 index 4723250e3547..000000000000 --- a/keyboards/handwired/selene/keymaps/bpendragon/keymap.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright 2020 Bpendragon - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H - -enum custom_keycodes { - DBL_0 = SAFE_RANGE, -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case DBL_0: - if(record->event.pressed) { - SEND_STRING("00"); - } - break; - } - return true; -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT ( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, KC_MUTE, KC_MPRV, KC_MNXT, KC_MPLY, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, DBL_0, KC_PDOT - ) -}; diff --git a/keyboards/handwired/steamvan/keymaps/jmdaly/keymap.c b/keyboards/handwired/steamvan/keymaps/jmdaly/keymap.c deleted file mode 100644 index 21ba0e5b3d51..000000000000 --- a/keyboards/handwired/steamvan/keymaps/jmdaly/keymap.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright 2019 John M Daly - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include QMK_KEYBOARD_H - - -// Each layer gets a name for readability, which is then used in the keymap matrix below. -// The underscores don't mean anything - you can have a layer called STUFF or any other name. -// Layer names don't all need to be of the same length, obviously, and you can also skip them -// entirely and just use numbers. - -enum { - // Layers - _L1, - _L2, - _L3, - _L4, - _L5 -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_L1] = LAYOUT_standard( /* Qwerty */ - LT(_L5, KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, - CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(_L2, KC_QUOT), - SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC, - MO(_L2), KC_LGUI, MO(_L3), KC_ENT, LT(_L2, KC_SPC), KC_RALT, KC_BSLS, MO(_L4) - ), - [_L2] = LAYOUT_standard( /* LAYER 2 */ - KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, - _______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, - _______, KC_ESC, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_LBRC, KC_RBRC, KC_MNXT, _______, - _______, KC_LGUI, _______, _______, _______, _______, _______, MO(_L4) - ), - [_L3] = LAYOUT_standard( /* LAYER 3 */ - KC_MINS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, - KC_EQL, KC_PIPE, KC_TILD, KC_UNDS, KC_PLUS, LSFT(KC_LBRC), LSFT(KC_RBRC), KC_4, KC_5, KC_6, KC_VOLU, KC_INS, - _______, RGB_TOG, RGB_MOD, RGB_RMOD, KC_DQUO, _______, KC_0, KC_1, KC_2, KC_3, KC_VOLD, _______, - _______, _______, _______, _______, _______, _______, _______, _______ - ), - [_L4] = LAYOUT_standard( /* LAYER 4 */ - QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_PGUP, _______, - KC_ESC, _______, _______, _______, _______, _______, _______, KC_F5, KC_F6, KC_HOME, KC_END, _______, - KC_LSFT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_F9, KC_F10, KC_PGDN, KC_F12, _______, - _______, KC_LSFT, KC_B, KC_SPC, KC_C, _______, _______, _______ - ), - [_L5] = LAYOUT_standard( /* LAYER 5 */ - _______, LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), LGUI(KC_MINS), - KC_ESC, _______, _______, _______, _______, _______, _______, KC_F5, KC_F6, KC_HOME, KC_END, _______, - KC_LSFT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_F9, KC_F10, KC_PGDN, KC_F12, _______, - _______, KC_LSFT, KC_B, KC_SPC, KC_C, _______, _______, _______ - ) -}; diff --git a/keyboards/handwired/steamvan/keymaps/jmdaly/readme.md b/keyboards/handwired/steamvan/keymaps/jmdaly/readme.md deleted file mode 100644 index 5aeae7064f13..000000000000 --- a/keyboards/handwired/steamvan/keymaps/jmdaly/readme.md +++ /dev/null @@ -1 +0,0 @@ -# jmdaly's keymap for the steamvan diff --git a/keyboards/handwired/z150/keymaps/zyxx/keymap.c b/keyboards/handwired/z150/keymaps/zyxx/keymap.c deleted file mode 100644 index 76ee90d9dc09..000000000000 --- a/keyboards/handwired/z150/keymaps/zyxx/keymap.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright 2020 DmNosachev - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include QMK_KEYBOARD_H - -// Defines names for use in layer keycodes and the keymap -enum layer_names { - _BASE, - _FN1 -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* - * ,---------------------------------------------------------------------------------------------------------------------------. - * | F1 | F2 | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Backspace| ~` | ScrLk | FN1 | - * |---------------------------------------------------------------------------------------------------------------------------| - * | F3 | F4 | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | |Home | ↑ |PgUp |PrnSc| - * |--------------------------------------------------------------------------------------------- ------------------------| - * | F5 | F6 | Ctrl | A | S | D | F | G | H | J | K | L | ;: | '" | Enter | ← | ↓ | → | wh+ | - * |---------------------------------------------------------------------------------------------------------------------------| - * | F7 | F8 | Shift | Z | X | C | V | B | N | M | , | . | /? | Shift | |\ |End | |PgDn | wh- | - * |---------------------------------------------------------------------------------------------------------------------- | - * | F9 | F10 | Alt |FN1 | Space | Alt | Ins | Del | | - * `---------------------------------------------------------------------------------------------------------------------------' -*/ - [_BASE] = LAYOUT( - KC_F1, KC_F2, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV, KC_SCRL, MO(_FN1), - KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_HOME, KC_UP, KC_PGUP, KC_PSCR, - KC_F5, KC_F6, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_LEFT, KC_DOWN, KC_RGHT, KC_WH_U, - KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_BSLS, KC_END, KC_NO, KC_PGDN, KC_WH_D, - KC_F9, KC_F10,KC_LALT, MO(_FN1), KC_SPC, KC_RALT, KC_INS, KC_DEL - ), -/* - * ,---------------------------------------------------------------------------------------------------------------------------. - * |reset| | | F11 | F12 | au+ | au- | clk | clk+| clk-| clkr| | | | | Delete |NumLk| / | FN1 | - * |---------------------------------------------------------------------------------------------------------------------------| - * | | | | | mlb | m↑ | mrb | | | | | | | | | | 7 | 8 | 9 | * | - * |--------------------------------------------------------------------------------------------- ------------------------| - * | | | | | m← | m↓ | m→ | | | | | | | | | 4 | 5 | 6 | - | - * |---------------------------------------------------------------------------------------------------------------------------| - * | | | | | | | | | | | | | | | | 1 | 2 | 3 | + | - * |---------------------------------------------------------------------------------------------------------------------- | - * | | | |FN1 | | CapsLock| 0 Ins | . Del | | - * `---------------------------------------------------------------------------------------------------------------------------' -*/ - [_FN1] = LAYOUT( - QK_BOOT, _______, _______, KC_F11, KC_F12, AU_ON, AU_OFF, CK_TOGG, CK_UP, CK_DOWN, CK_RST, _______, _______, _______, _______, KC_DEL, KC_NUM, KC_PSLS, _______, - _______, _______, _______, _______, KC_BTN1, KC_MS_U, KC_BTN2, _______, _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PAST, - _______, _______, _______ , _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_PMNS, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PPLS, - _______, _______, _______, _______, _______, KC_CAPS, KC_P0, KC_PDOT - ) -}; diff --git a/keyboards/helix/rev2/keymaps/fraanrosi/config.h b/keyboards/helix/rev2/keymaps/fraanrosi/config.h deleted file mode 100644 index 6c816d0accd6..000000000000 --- a/keyboards/helix/rev2/keymaps/fraanrosi/config.h +++ /dev/null @@ -1,64 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert -Copyright 2021 Franco Rosi - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#pragma once - -// place overrides here - -// If you need more program area, try select and reduce rgblight modes to use. - -#ifndef LED_ANIMATIONS -# define LED_ANIMATIONS -#endif - -// Selection of RGBLIGHT MODE to use. -#if defined(LED_ANIMATIONS) - #define RGBLIGHT_EFFECT_BREATHING - #define RGBLIGHT_EFFECT_RAINBOW_MOOD - #define RGBLIGHT_EFFECT_RAINBOW_SWIRL - #define RGBLIGHT_EFFECT_SNAKE - #define RGBLIGHT_EFFECT_KNIGHT - #define RGBLIGHT_EFFECT_CHRISTMAS - #define RGBLIGHT_EFFECT_STATIC_GRADIENT - #define RGBLIGHT_EFFECT_RGB_TEST - #define RGBLIGHT_EFFECT_ALTERNATING - #define RGBLIGHT_EFFECT_TWINKLE -#endif - -#undef RGBLIGHT_HUE_STEP -#define RGBLIGHT_HUE_STEP 4 - -#ifdef MOUSEKEY_ENABLE - #undef MOUSEKEY_INTERVAL - #define MOUSEKEY_INTERVAL 20 - - #undef MOUSEKEY_TIME_TO_MAX - #define MOUSEKEY_TIME_TO_MAX 40 - - #undef MOUSEKEY_MAX_SPEED - #define MOUSEKEY_MAX_SPEED 6 - - #undef MOUSEKEY_MOVE_DELTA - #define MOUSEKEY_MOVE_DELTA 5 - - #undef MOUSEKEY_DELAY - #define MOUSEKEY_DELAY 0 -#endif diff --git a/keyboards/helix/rev2/keymaps/fraanrosi/keymap.c b/keyboards/helix/rev2/keymaps/fraanrosi/keymap.c deleted file mode 100644 index 1bd43ab24a0a..000000000000 --- a/keyboards/helix/rev2/keymaps/fraanrosi/keymap.c +++ /dev/null @@ -1,288 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert -Copyright 2021 Franco Rosi - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ -#include QMK_KEYBOARD_H - -// Following line allows macro to read current RGB settings -#ifdef RGBLIGHT_ENABLE -uint8_t RGB_current_mode; -HSV CURRENT_COLOR; -bool caps_is_active = false; -/*Here I set the first rgb mode*/ -void keyboard_post_init_user(void) { - rgblight_enable(); // Enables RGB, without saving settings - rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 3); - RGB_current_mode = rgblight_get_mode(); - rgblight_sethsv(HSV_RED); - CURRENT_COLOR = rgblight_get_hsv(); -} -#endif - -extern uint8_t is_master; - -// Each layer gets a name for readability, which is then used in the keymap matrix below. -// The underscores don't mean anything - you can have a layer called STUFF or any other name. -// Layer names don't all need to be of the same length, obviously, and you can also skip them -// entirely and just use numbers. -enum layer_number { - _QWERTY = 0, - _LOWER, - _RAISE -}; - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - LOWER, - RAISE, - RGBRST, - RGB_1, - RGB_2, - RGB_3, - RGB_4, - RGB_5, - RGB_6, - RGB_7, - RGB_8, - RGB_9 -}; - -#define LOWER MO(1) -#define RAISE MO(2) - - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - /* Qwerty - * ,-----------------------------------------. ,-----------------------------------------. - * | | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | CAPS | A | S | D | F | G | | H | J | K | L | Ñ |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * |Shift | Z | X | C | V | B | { | } | N | M | , | . | - |Shift | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | Esc | Win | Alt |Raise |Lower |Space |Space |Alt Gr| Left | Up | Down |Right | Ctrl | - * `-------------------------------------------------------------------------------------------------' - */ - [_QWERTY] = LAYOUT( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_QUOT, KC_NUHS, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - KC_LCTL, KC_ESC, KC_LGUI, KC_LALT, MO(2), MO(1), KC_SPC, KC_SPC, KC_RALT, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, KC_RCTL - ), - - /*Lower - * ,-----------------------------------------. ,-----------------------------------------. - * | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | Mute | Play |Mouse1|Mouse2| | |Print | |Insert|' ? \ | ¿ ¡ | | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | |Shine+|Shine-| Vol -| Vol +| | | |Mouse↑| | ´ ¨ |+ * ~ | | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * | | < > | | | | | | |Mouse←|Mouse↓|Mouse→| | | | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | Home |PageUp|PageDn| End | | - * `-------------------------------------------------------------------------------------------------' - */ - [_LOWER] = LAYOUT( - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, - KC_TRNS, KC_MUTE, KC_MPLY, KC_BTN1, KC_BTN2, KC_TRNS, KC_PSCR, KC_TRNS, KC_INS, KC_MINS, KC_EQL, KC_TRNS, - KC_NO, KC_BRID, KC_BRIU, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_LBRC, KC_RBRC, KC_TRNS, - KC_TRNS, KC_NUBS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_PGDN, KC_END, KC_TRNS - ), - - /* Raise - * ,-----------------------------------------. ,-----------------------------------------. - * | | | | | | | | | | | | | | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | RGB1 | RGB2 | RGB3 | RGB4 |RGB ON| | | | MODE+| MODE-| | | | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | RGB5 | RGB6 | RGB7 | RGB8 | RGB9 | | | | HUE+ | HUE- | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * | | MODE+| MODE-| HUE+ | HUE- | | Reset| | | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | | | | - * `-------------------------------------------------------------------------------------------------' - */ - [_RAISE] = LAYOUT( - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - RGB_1, RGB_2, RGB_3, RGB_4, RGB_TOG, KC_NO, KC_NO, RGB_MOD, RGB_RMOD,KC_NO, KC_NO, KC_NO, - RGB_5, RGB_6, RGB_7, RGB_8, RGB_9, KC_NO, KC_NO, RGB_HUI, RGB_HUD, KC_NO, KC_NO, KC_NO, - KC_NO, RGB_MOD, RGB_RMOD,RGB_HUI, RGB_HUD, KC_NO, QK_BOOT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO - ) -}; - -// define variables for reactive RGB -bool TOG_STATUS = false; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case LOWER: - if (record->event.pressed) { - // not sure how to have keyboard check mode and set it to a variable, so my work around - // uses another variable that would be set to true after the first time a reactive key is pressed. - if (TOG_STATUS) { // TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false - } else { - TOG_STATUS = !TOG_STATUS; - #ifdef RGBLIGHT_ENABLE - if (!caps_is_active) { - RGB_current_mode = rgblight_get_mode(); - CURRENT_COLOR = rgblight_get_hsv(); - } - rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT); - rgblight_sethsv(HSV_BLUE); - #endif - } - layer_on(_LOWER); - } else { - #ifdef RGBLIGHT_ENABLE - if (!caps_is_active) { - rgblight_mode(RGB_current_mode); - rgblight_sethsv(CURRENT_COLOR.h, CURRENT_COLOR.s, CURRENT_COLOR.v); - } else { - rgblight_mode(RGBLIGHT_MODE_ALTERNATING); - rgblight_sethsv(HSV_WHITE); - } - #endif - TOG_STATUS = false; - layer_off(_LOWER); - } - return false; - break; - case RAISE: - if (record->event.pressed) { - // not sure how to have keyboard check mode and set it to a variable, so my work around - // uses another variable that would be set to true after the first time a reactive key is pressed. - if (TOG_STATUS) { // TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false - } else { - TOG_STATUS = !TOG_STATUS; - #ifdef RGBLIGHT_ENABLE - if (!caps_is_active) { - RGB_current_mode = rgblight_get_mode(); - CURRENT_COLOR = rgblight_get_hsv(); - } - rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT); - rgblight_sethsv(HSV_RED); - #endif - } - layer_on(_RAISE); - } else { - #ifdef RGBLIGHT_ENABLE - if (!caps_is_active) { - rgblight_mode(RGB_current_mode); - rgblight_sethsv(CURRENT_COLOR.h, CURRENT_COLOR.s, CURRENT_COLOR.v); - } else { - rgblight_mode(RGBLIGHT_MODE_ALTERNATING); - rgblight_sethsv(HSV_WHITE); - } - #endif - layer_off(_RAISE); - TOG_STATUS = false; - } - return false; - break; - //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released - case RGB_1 ... RGB_9: - if (record->event.pressed) { - rgblight_sethsv(CURRENT_COLOR.h, CURRENT_COLOR.s, CURRENT_COLOR.v); - //this to have each custom mode separately, but sharing logic - switch(keycode){ - case RGB_1: - rgblight_mode(RGBLIGHT_MODE_RAINBOW_MOOD + 1); - break; - case RGB_2: - rgblight_mode(RGBLIGHT_MODE_KNIGHT); - break; - case RGB_3: - rgblight_mode(RGBLIGHT_MODE_SNAKE); - break; - case RGB_4: - rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 3); - break; - case RGB_5: - rgblight_mode(RGBLIGHT_MODE_TWINKLE + 5); - break; - case RGB_6: - rgblight_mode(RGBLIGHT_MODE_BREATHING + 3); - break; - case RGB_7: - rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT); - break; - case RGB_8: - rgblight_mode(RGBLIGHT_MODE_STATIC_GRADIENT + 5); - break; - case RGB_9: - rgblight_mode(RGBLIGHT_MODE_CHRISTMAS); - break; - } - RGB_current_mode = rgblight_get_mode(); - CURRENT_COLOR = rgblight_get_hsv(); - } - return false; - break; - case RGB_TOG ... RGB_HUD: - if (record->event.pressed) { - rgblight_sethsv(CURRENT_COLOR.h, CURRENT_COLOR.s, CURRENT_COLOR.v); - rgblight_mode(RGB_current_mode); - process_rgb(keycode, record); - RGB_current_mode = rgblight_get_mode(); - CURRENT_COLOR = rgblight_get_hsv(); - } - return false; - break; - case KC_CAPS: - if (record->event.pressed) { - register_code(KC_CAPS); - caps_is_active = !caps_is_active; - if (caps_is_active) { - CURRENT_COLOR = rgblight_get_hsv(); - rgblight_mode(RGBLIGHT_MODE_ALTERNATING); - rgblight_sethsv(HSV_WHITE); - } else if (!caps_is_active) { - unregister_code(KC_CAPS); - rgblight_mode(RGB_current_mode); - rgblight_sethsv(CURRENT_COLOR.h, CURRENT_COLOR.s, CURRENT_COLOR.v); - } - } - return false; - break; - case RGBRST: - #ifdef RGBLIGHT_ENABLE - if (record->event.pressed) { - eeconfig_update_rgblight_default(); - rgblight_enable(); - RGB_current_mode = rgblight_get_mode(); - } - #endif - break; - } - return true; -} - -void matrix_init_user(void) { -#ifdef RGBLIGHT_ENABLE - RGB_current_mode = rgblight_get_mode(); - CURRENT_COLOR = rgblight_get_hsv(); -#endif -} diff --git a/keyboards/helix/rev2/keymaps/fraanrosi/readme.md b/keyboards/helix/rev2/keymaps/fraanrosi/readme.md deleted file mode 100644 index 71f71bbb99fa..000000000000 --- a/keyboards/helix/rev2/keymaps/fraanrosi/readme.md +++ /dev/null @@ -1,40 +0,0 @@ - -## Fraanrosi -A **Latin American Spanish** keymap for Helix/rev2/under, 5 rows. -Designed to be as simple and more touch typing oriented as possible. -It was inspired by a DELL Latitude E5470. - -## Layers - -The Helix obviously does not have enough keys compared to a typical keyboard. -The keymap has multiple layers, moving extra keys to different layers. - -|Priority|Layer ID|Layer Name|Contents| -| ---- | ---- | --- | --- | -||0|Qwerty|Qwerty layout (Base)| -||1|Lower|Symbols, media, function keys and mouse.(Blue)| -||2|Raise|Underglow RGB config(Red)| - -Keymap : http://www.keyboard-layout-editor.com/#/gists/4cd7b4ccda1de5cf9edc56d29b64da30 -### First layer (qwerty). - -It contains the "**Ñ**" letter. -"Caps Lock" key toggle an RGB mode, to alert. -@ is typed with AltGr+q -![first-layer](https://i.imgur.com/BaVDVdB.png) -### Second layer (Lower). - -While "Lower" key is pressed, the RBG mode remains BLUE. -It has the "Symbols, media, function keys and mouse" features. -It completes the rest of the needed qwerty and F keys. -![second-layer](https://i.imgur.com/HbDVTfp.png) -### Third layer (Raise). - -While "Raise" key is pressed, the RBG mode remains RED. -This is the underglow RGB's layer , where can be controlled the modes and hue. -With reset button for the micros. -![third-layer](https://i.imgur.com/MF8jjbu.png) -### All the layers. - ![all-the-layers](https://i.imgur.com/jn1VI4V.png) - - diff --git a/keyboards/helix/rev2/keymaps/fraanrosi/rules.mk b/keyboards/helix/rev2/keymaps/fraanrosi/rules.mk deleted file mode 100644 index 688813ce399a..000000000000 --- a/keyboards/helix/rev2/keymaps/fraanrosi/rules.mk +++ /dev/null @@ -1,24 +0,0 @@ -# QMK Standard Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# -# See TOP/keyboards/helix/rules.mk for a list of options that can be set. -# See TOP/docs/config_options.md for more information. -# -SPLIT_KEYBOARD = yes -LTO_ENABLE = yes # if firmware size over limit, try this option -MOUSEKEY_ENABLE = yes # Mouse keys -EXTRAKEY_ENABLE = yes # Audio control and System control -# AUDIO_ENABLE = yes # Audio output on port C6 -# Helix Spacific Build Options -# you can uncomment and edit follows 7 Variables -# jp: 以下の7つの変数を必要に応じて編集し、コメントアウトをはずします。 -# OLED_ENABLE = no # OLED_ENABLE -# LOCAL_GLCDFONT = no # use each keymaps "helixfont.h" insted of "common/glcdfont.c" -# LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.) -# LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.) -LED_ANIMATIONS = yes # LED animations -# IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone) - -LED_BACK_ENABLE = no -LED_UNDERGLOW_ENABLE = yes diff --git a/keyboards/helix/rev2/keymaps/froggy/config.h b/keyboards/helix/rev2/keymaps/froggy/config.h deleted file mode 100644 index fea362bcd614..000000000000 --- a/keyboards/helix/rev2/keymaps/froggy/config.h +++ /dev/null @@ -1,50 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#undef TAPPING_TERM -#define TAPPING_TERM 200 -#define ONESHOT_TAP_TOGGLE 5 /* Tapping this number of times holds the key until tapped this number of times again. */ -#define ONESHOT_TIMEOUT 5000 /* Time (in ms) before the one shot key is released */ - -// the froggy keymap does not use the right hand side, so sync_timer is not needed -#define DISABLE_SYNC_TIMER -// For the same reason, the following are also not needed -#undef SPLIT_LAYER_STATE_ENABLE -#undef SPLIT_LED_STATE_ENABLE - -// If you need more program area, try select and reduce rgblight modes to use. - -// Selection of RGBLIGHT MODE to use. -#if defined(LED_ANIMATIONS) - #define RGBLIGHT_EFFECT_BREATHING - #define RGBLIGHT_EFFECT_RAINBOW_MOOD - #define RGBLIGHT_EFFECT_RAINBOW_SWIRL - #define RGBLIGHT_EFFECT_SNAKE - #define RGBLIGHT_EFFECT_KNIGHT - #define RGBLIGHT_EFFECT_CHRISTMAS - #define RGBLIGHT_EFFECT_STATIC_GRADIENT - //#define RGBLIGHT_EFFECT_RGB_TEST - //#define RGBLIGHT_EFFECT_ALTERNATING -#endif - -#endif /* CONFIG_USER_H */ diff --git a/keyboards/helix/rev2/keymaps/froggy/helixfont.h b/keyboards/helix/rev2/keymaps/froggy/helixfont.h deleted file mode 100644 index 5360eace95b6..000000000000 --- a/keyboards/helix/rev2/keymaps/froggy/helixfont.h +++ /dev/null @@ -1,235 +0,0 @@ -// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0. -// See gfxfont.h for newer custom bitmap font info. - -#pragma once - -#include "progmem.h" - -// Standard ASCII 5x7 font - -static const unsigned char font[] PROGMEM = { -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, -0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, -0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, -0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, -0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, -0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, -0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, -0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, -0x00, 0x18, 0x24, 0x18, 0x00, 0x00, -0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, -0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, -0x26, 0x29, 0x79, 0x29, 0x26, 0x00, -0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, -0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, -0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, -0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, -0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, -0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, -0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, -0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, -0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, -0x60, 0x60, 0x60, 0x60, 0x60, 0x00, -0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, -0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, -0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, -0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, -0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, -0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, -0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, -0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, -0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, -0x00, 0x07, 0x00, 0x07, 0x00, 0x00, -0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, -0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, -0x23, 0x13, 0x08, 0x64, 0x62, 0x00, -0x36, 0x49, 0x56, 0x20, 0x50, 0x00, -0x00, 0x08, 0x07, 0x03, 0x00, 0x00, -0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, -0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, -0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, -0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, -0x00, 0x80, 0x70, 0x30, 0x00, 0x00, -0x08, 0x08, 0x08, 0x08, 0x08, 0x00, -0x00, 0x00, 0x60, 0x60, 0x00, 0x00, -0x20, 0x10, 0x08, 0x04, 0x02, 0x00, -0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, -0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, -0x72, 0x49, 0x49, 0x49, 0x46, 0x00, -0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, -0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, -0x27, 0x45, 0x45, 0x45, 0x39, 0x00, -0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, -0x41, 0x21, 0x11, 0x09, 0x07, 0x00, -0x36, 0x49, 0x49, 0x49, 0x36, 0x00, -0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, -0x00, 0x00, 0x14, 0x00, 0x00, 0x00, -0x00, 0x40, 0x34, 0x00, 0x00, 0x00, -0x00, 0x08, 0x14, 0x22, 0x41, 0x00, -0x14, 0x14, 0x14, 0x14, 0x14, 0x00, -0x00, 0x41, 0x22, 0x14, 0x08, 0x00, -0x02, 0x01, 0x59, 0x09, 0x06, 0x00, -0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, -0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, -0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, -0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, -0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, -0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, -0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, -0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, -0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, -0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, -0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, -0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, -0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, -0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, -0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, -0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, -0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, -0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, -0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, -0x26, 0x49, 0x49, 0x49, 0x32, 0x00, -0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, -0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, -0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, -0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, -0x63, 0x14, 0x08, 0x14, 0x63, 0x00, -0x03, 0x04, 0x78, 0x04, 0x03, 0x00, -0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, -0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, -0x02, 0x04, 0x08, 0x10, 0x20, 0x00, -0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, -0x04, 0x02, 0x01, 0x02, 0x04, 0x00, -0x40, 0x40, 0x40, 0x40, 0x40, 0x00, -0xFC, 0xFE, 0x02, 0x82, 0x82, 0x82, -0x82, 0x82, 0x82, 0xC2, 0x82, 0x02, -0x02, 0xFE, 0x00, 0x00, 0xFE, 0xFE, -0x02, 0x62, 0x62, 0x62, 0x62, 0xE2, -0x62, 0x62, 0xE2, 0x02, 0x02, 0xFC, -0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, -0x30, 0x40, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x80, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x40, 0x00, 0x00, 0x24, 0xA4, -0xA4, 0xBC, 0xA4, 0x24, 0x24, 0x00, -0x00, 0x00, 0x24, 0xA4, 0x24, 0x24, -0x3C, 0x04, 0x04, 0x00, 0x00, 0x00, -0xB8, 0xA4, 0xA4, 0xA4, 0xBC, 0x00, -0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, -0x00, 0x44, 0x44, 0x44, 0xDC, 0x44, -0x04, 0x3C, 0x00, 0x00, 0x00, 0x00, -0xFC, 0xFE, 0xFE, 0x7E, 0x7E, 0x7E, -0x7E, 0x7E, 0x7E, 0x3E, 0x7E, 0xFE, -0xFE, 0xFE, 0x00, 0x00, 0xFE, 0xFE, -0xFE, 0x9E, 0x9E, 0x9E, 0x9E, 0x1E, -0x9E, 0x9E, 0x1E, 0xFE, 0xFE, 0xFC, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x08, 0x36, 0x41, 0x00, 0x00, -0x00, 0x00, 0x77, 0x00, 0x00, 0x00, -0x00, 0x41, 0x36, 0x08, 0x00, 0x00, -0x02, 0x01, 0x02, 0x04, 0x02, 0x00, -0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, -0x7F, 0x7F, 0x40, 0x41, 0x41, 0x41, -0x41, 0x41, 0x41, 0x41, 0x41, 0x40, -0x40, 0x7F, 0x00, 0x00, 0x7F, 0x7F, -0x40, 0x40, 0x40, 0x40, 0x40, 0x41, -0x40, 0x40, 0x43, 0x40, 0x40, 0x7F, -0x00, 0x00, 0x00, 0xF0, 0xFB, 0xFB, -0x00, 0x50, 0x60, 0xFF, 0xFC, 0x3C, -0x1E, 0x0E, 0x0C, 0xFC, 0xF8, 0xE8, -0xE8, 0xE8, 0x30, 0x00, 0x00, 0x00, -0x00, 0x00, 0x02, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x02, 0x02, 0x0D, 0x02, -0x02, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x57, 0x50, -0x57, 0x54, 0x57, 0x10, 0x50, 0x00, -0x00, 0x00, 0x97, 0x94, 0x97, 0x94, -0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, -0xE4, 0x14, 0xF4, 0x94, 0xF7, 0x00, -0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, -0x00, 0x38, 0xA4, 0xA4, 0xA5, 0x3C, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x7F, 0x7F, 0x7F, 0x7E, 0x7E, 0x7E, -0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7F, -0x7F, 0x7F, 0x00, 0x00, 0x7F, 0x7F, -0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7E, -0x7F, 0x7F, 0x7C, 0x7F, 0x7F, 0x7F, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0xFE, 0xFE, 0x02, 0x62, 0x62, 0x62, -0xE2, 0x62, 0x62, 0x62, 0xC2, 0x02, -0x02, 0xFE, 0x00, 0x00, 0xFE, 0xFE, -0x02, 0x82, 0xC2, 0xE2, 0xF2, 0x82, -0x82, 0x82, 0x82, 0x02, 0x02, 0xFE, -0x00, 0x00, 0x00, 0x07, 0x7F, 0xDF, -0x00, 0x05, 0x03, 0x7F, 0x1F, 0x1E, -0x3C, 0x38, 0x18, 0x1F, 0x0F, 0x0D, -0x0D, 0x0D, 0x06, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x20, 0x20, 0x50, -0x8C, 0x50, 0x20, 0x20, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x80, 0x80, -0x40, 0x30, 0x40, 0x80, 0x89, 0x09, -0x06, 0x09, 0x09, 0x00, 0x00, 0x00, -0x00, 0x00, 0x1C, 0x12, 0x12, 0x12, -0x1E, 0x10, 0x10, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xFF, 0x00, 0x73, -0x84, 0xE7, 0x94, 0x94, 0x94, 0x67, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0xFE, 0xFE, 0xFE, 0x9E, 0x9E, 0x9E, -0x1E, 0x9E, 0x9E, 0x9E, 0x3E, 0xFE, -0xFE, 0xFE, 0x00, 0x00, 0xFE, 0xFE, -0xFE, 0x7E, 0x3E, 0x1E, 0x0E, 0x7E, -0x7E, 0x7E, 0x7E, 0xFE, 0xFE, 0xFE, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x3F, 0x7F, 0x40, 0x46, 0x46, 0x46, -0x47, 0x46, 0x46, 0x46, 0x43, 0x40, -0x40, 0x7F, 0x00, 0x00, 0x7F, 0x7F, -0x40, 0x41, 0x43, 0x47, 0x4F, 0x41, -0x41, 0x41, 0x41, 0x40, 0x40, 0x3F, -0x00, 0x00, 0x00, 0x00, 0x00, 0x07, -0x06, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x04, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x01, 0x06, 0x01, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x08, 0x08, -0x36, 0x08, 0x08, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x1F, 0x00, 0x0E, -0x10, 0x1C, 0x12, 0x12, 0x12, 0x12, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x3F, 0x7F, 0x7F, 0x79, 0x79, 0x79, -0x78, 0x79, 0x79, 0x79, 0x7C, 0x7F, -0x7F, 0x7F, 0x00, 0x00, 0x7F, 0x7F, -0x7F, 0x7E, 0x7C, 0x78, 0x70, 0x7E, -0x7E, 0x7E, 0x7E, 0x7F, 0x7F, 0x3F, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; diff --git a/keyboards/helix/rev2/keymaps/froggy/keymap.c b/keyboards/helix/rev2/keymaps/froggy/keymap.c deleted file mode 100644 index 1680147157de..000000000000 --- a/keyboards/helix/rev2/keymaps/froggy/keymap.c +++ /dev/null @@ -1,696 +0,0 @@ -#include QMK_KEYBOARD_H -#include - -#define MIN(x, y) (((x) < (y)) ? (x) : (y)) -#define MAX(x, y) (((x) > (y)) ? (x) : (y)) - -#define LAYOUT_half( \ - L00, L01, L02, L03, L04, L05, \ - L10, L11, L12, L13, L14, L15, \ - L20, L21, L22, L23, L24, L25, \ - L30, L31, L32, L33, L34, L35, L36, \ - L40, L41, L42, L43, L44, L45, L46 \ -) { \ - { L00, L01, L02, L03, L04, L05, KC_NO }, \ - { L10, L11, L12, L13, L14, L15, KC_NO }, \ - { L20, L21, L22, L23, L24, L25, KC_NO }, \ - { L30, L31, L32, L33, L34, L35, L36 }, \ - { L40, L41, L42, L43, L44, L45, L46 }, \ - { _______, _______, _______, _______, _______, _______, KC_NO }, \ - { _______, _______, _______, _______, _______, _______, KC_NO }, \ - { _______, _______, _______, _______, _______, _______, KC_NO }, \ - { _______, _______, _______, _______, _______, _______, _______ }, \ - { _______, _______, _______, _______, _______, _______, _______ } \ -} - -#define DELAY_TIME 75 -static uint16_t key_timer; -static uint16_t tap_timer; -static uint16_t delay_registered_code; -static uint8_t delay_mat_row; -static uint8_t delay_mat_col; -static bool delay_key_stat; -static bool delay_key_pressed; -static bool tapping_key; - -// Each layer gets a name for readability, which is then used in the keymap matrix below. -// The underscores don't mean anything - you can have a layer called STUFF or any other name. -// Layer names don't all need to be of the same length, obviously, and you can also skip them -// entirely and just use numbers. -#define _BASE 0 -#define _OPT 1 -#define _FUNC 2 -#define _SYM 3 -#define _NUM 4 - -bool RGBAnimation = false; //Flag for LED Layer color Refresh. - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - EISU, - KANA, - RGBRST, - RGBOFF, - RGB1, - RGB2, - RGB3, - OPT_TAP_SP, - DESKTOP, - MAC, - WIN, -}; - -enum macro_keycodes { - KC_SAMPLEMACRO, -}; - -//Macros -#define M_SAMPLE M(KC_SAMPLEMACRO) - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - /* Base - * ,-----------------------------------------. - * | C+z | ; | [ | ( | < | { | - * |------+------+------+------+------+------| - * | KANA | P | K | R | A | F | - * |------+------+------+------+------+------| - * | BS | D | T | H | E | O | - * |------+------+------+------+------+------+------. - * | Shift| Y | S | N | I | U |Space | - * |------+------+------+------+------+------+------| - * | Ctrl | Alt | Gui | Sym | Num | OPT | Ent | - * `------------------------------------------------' - */ - [_BASE] = LAYOUT_half( - LCTL(KC_Z), KC_SCLN, KC_LBRC, KC_LPRN, KC_LT, KC_LCBR, - KANA, KC_P, KC_K, KC_R, KC_A, KC_F, - KC_BSPC, KC_D, KC_T, KC_H, KC_E, KC_O, - OSM(MOD_LSFT), KC_Y, KC_S, KC_N, KC_I, KC_U, KC_SPC, - OSM(MOD_LCTL), OSM(MOD_LALT), OSM(MOD_LGUI), MO(_SYM), MO(_NUM), OPT_TAP_SP, KC_ENT ), - - /* Opt - * ,-----------------------------------------. - * | Esc | : | ] | ) | > | } | - * |------+------+------+------+------+------| - * | EISU| J | M | B | ' | Tab | - * |------+------+------+------+------+------| - * | . | V | C | L | Z | Q | - * |------+------+------+------+------+------+------. - * | | X | G | W | - | Del | Esc | - * |------+------+------+------+------+------+------| - * | | | | , | DTOP | | | - * `------------------------------------------------' - */ - [_OPT] = LAYOUT_half( - KC_ESC, KC_COLN,KC_RBRC, KC_RPRN,KC_GT, KC_RCBR, - EISU, KC_J, KC_M, KC_B, KC_QUOT, KC_TAB, - KC_DOT, KC_V, KC_C, KC_L, KC_Z, KC_Q, - _______, KC_X, KC_G, KC_W, KC_MINUS, KC_DEL, KC_ESC, - _______, _______,_______, KC_COMM,DESKTOP, _______, _______ - ), - - /* Func - * ,-----------------------------------------. - * |RGBRST| Hue | | RST | Mac | Win | - * |------+------+------+------+------+------| - * | RGB1 | VAL+ | F7 | F8 | F9 | | - * |------+------+------+------+------+------| - * | RGB2 | VAL- | F4 | F5 | F6 | F12 | - * |------+------+------+------+------+------+------. - * | RGB3 | F10 | F1 | F2 | F3 | F11 | | - * |------+------+------+------+------+------+------| - * |RGBOFF| | | | | | | - * `------------------------------------------------' - */ - [_FUNC] = LAYOUT_half( - RGBRST,RGB_HUI, _______, QK_BOOT, MAC, WIN, - RGB1, RGB_VAI, KC_F7, KC_F8, KC_F9, _______, - RGB2, RGB_VAD, KC_F4, KC_F5, KC_F6, KC_F12, - RGB3, KC_F10, KC_F1, KC_F2, KC_F3, KC_F11, _______, - RGBOFF,_______, _______, _______, _______, _______, _______ - ), - - /* Sym - * ,-----------------------------------------. - * | Ins | GRV | | PU | PD | ^ | - * |------+------+------+------+------+------| - * | | \ | # | = | ? | % | - * |------+------+------+------+------+------| - * | | $ | upA | @ | ! | | | - * |------+------+------+------+------+------+------. - * | CL | <- | dwA | -> | _ | & | | - * |------+------+------+------+------+------+------| - * | | | PS | | ~ | | | - * `------------------------------------------------' - */ - [_SYM] = LAYOUT_half( - KC_INS, KC_GRV, _______, KC_PGUP, KC_PGDN, KC_CIRC, - _______, KC_BSLS, KC_HASH, KC_EQL, KC_QUES, KC_PERC, - _______, KC_DLR, KC_UP, KC_AT, KC_EXLM, KC_PIPE, - KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT,KC_UNDS, KC_AMPR, _______, - _______, _______, KC_PSCR, _______, KC_TILD, _______, _______ - ), - - /* Raise - * ,-----------------------------------------. - * | | | Func | home | End | | - * |------+------+------+------+------+------| - * | | * | 7 | 8 | 9 | - | - * |------+------+------+------+------+------| - * | . | / | 4 | 5 | 6 | + | - * |------+------+------+------+------+------+------. - * | LN | 0 | 1 | 2 | 3 |C+S+F1| | - * |------+------+------+------+------+------+------| - * | | | | , | | | | - * `------------------------------------------------' - */ - [_NUM] = LAYOUT_half( - _______, _______, OSL(_FUNC), KC_HOME, KC_END, _______, - _______, KC_ASTR, KC_P7, KC_P8, KC_P9, KC_MINS, - KC_PDOT, KC_SLSH, KC_P4, KC_P5, KC_P6, KC_PLUS, - KC_NUM, KC_P0, KC_P1, KC_P2, KC_P3, LCTL(S(KC_F1)), _______, - _______, _______, KC_PDOT, KC_COMM, _______, _______, _______ - ) -}; - -#ifdef AUDIO_ENABLE - -float tone_qwerty[][2] = SONG(QWERTY_SOUND); -float tone_dvorak[][2] = SONG(DVORAK_SOUND); -float tone_colemak[][2] = SONG(COLEMAK_SOUND); -float tone_plover[][2] = SONG(PLOVER_SOUND); -float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); -#endif - -// define variables for reactive RGB -//bool TOG_STATUS = false; -int RGB_current_mode; - -void persistent_default_layer_set(uint16_t default_layer) { - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); -} - -bool find_mairix(uint16_t keycode, uint8_t *row, uint8_t *col){ - for(uint8_t i=0; ievent.key.col; - row = record->event.key.row; - if (record->event.pressed && ((row < 5 && is_keyboard_master()) || (row >= 5 && !is_keyboard_master()))) { - int end = keybuf_end; - keybufs[end].col = col; - keybufs[end].row = row % 5; - keybufs[end].frame = 0; - keybuf_end ++; - } - #endif - - if(tap_timer&&keycode!=OPT_TAP_SP){ - tapping_key = true; - } - - if(keycode==delay_registered_code){ - if (!record->event.pressed){ - unregister_delay_code(); - } - } - - switch (keycode) { - case KC_SCLN: - case KC_LBRC: - case KC_LPRN: - case KC_LT: - case KC_LCBR: - case KC_P: - case KC_K: - case KC_R: - case KC_A: - case KC_F: - case KC_BSPC: - case KC_D: - case KC_T: - case KC_H: - case KC_E: - case KC_O: - case KC_Y: - case KC_S: - case KC_N: - case KC_I: - case KC_U: - case LCTL(KC_Z): - case KC_SPC: - if (record->event.pressed) { - register_delay_code(_BASE); - if(find_mairix(keycode, &delay_mat_row, &delay_mat_col)){ - key_timer = timer_read(); - delay_key_stat = true; - delay_key_pressed = true; - } - }else{ - delay_key_pressed = false; - } - return false; - break; - case OPT_TAP_SP: - if (record->event.pressed) { - tapping_key = false; - register_delay_code(_OPT); - layer_on(_OPT); - tap_timer = timer_read(); - }else{ - layer_off(_OPT); - if(tapping_key==false && timer_elapsed(tap_timer) < TAPPING_TERM){ - SEND_STRING(" "); - } - tap_timer = 0; - } - return false; - break; - case EISU: - if (record->event.pressed) { - if(keymap_config.swap_lalt_lgui==false){ - register_code(KC_LNG2); - }else{ - SEND_STRING(SS_LALT("`")); - } - } else { - unregister_code(KC_LNG2); - } - return false; - break; - case KANA: - if (record->event.pressed) { - if(keymap_config.swap_lalt_lgui==false){ - register_code(KC_LNG1); - }else{ - SEND_STRING(SS_LALT("`")); - } - } else { - unregister_code(KC_LNG1); - } - return false; - break; - case DESKTOP: - if (record->event.pressed) { - if(keymap_config.swap_lalt_lgui==false){ - register_code(KC_F11); - }else{ - SEND_STRING(SS_LGUI("d")); - } - } else { - unregister_code(KC_F11); - } - return false; - break; - case RGBRST: - #ifdef RGBLIGHT_ENABLE - if (record->event.pressed) { - eeconfig_update_rgblight_default(); - rgblight_enable(); - RGB_current_mode = rgblight_get_mode(); - RGBAnimation = false; - } - #endif - break; - case RGBOFF: - #ifdef RGBLIGHT_ENABLE - if (record->event.pressed) { - rgblight_disable(); - } - #endif - break; - case RGB1: - #ifdef RGBLIGHT_ENABLE - if (record->event.pressed) { - RGBAnimation = true; - rgblight_mode(RGBLIGHT_MODE_RAINBOW_MOOD); - RGB_current_mode = rgblight_get_mode(); - } - #endif - break; - case RGB2: - #ifdef RGBLIGHT_ENABLE - if (record->event.pressed) { - RGBAnimation = true; - rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 1); - RGB_current_mode = rgblight_get_mode(); - } - #endif - break; - case RGB3: - #ifdef RGBLIGHT_ENABLE - if (record->event.pressed) { - RGBAnimation = true; - rgblight_mode(RGBLIGHT_MODE_KNIGHT); - RGB_current_mode = rgblight_get_mode(); - } - #endif - break; - case MAC: - if (record->event.pressed) { - keymap_config.swap_lalt_lgui = false; - keymap_config.swap_ralt_rgui = false; - #ifdef AUDIO_ENABLE - PLAY_SONG(ag_norm_song); - #endif - } - break; - case WIN: - if (record->event.pressed) { - keymap_config.swap_lalt_lgui = true; - keymap_config.swap_ralt_rgui = true; - #ifdef AUDIO_ENABLE - PLAY_SONG(ag_swap_song); - #endif - } - break; - } - return true; -} - - -//keyboard start-up code. Runs once when the firmware starts up. -void matrix_init_user(void) { - #ifdef RGBLIGHT_ENABLE - RGB_current_mode = rgblight_get_mode(); - #endif -} - - -//assign the right code to your layers for OLED display -#define L_BASE 0 -#define L_OPT 2 -#define L_FUNC 4 -#define L_SYM 8 -#define L_NUM 16 -#define L_FNLAYER 64 -#define L_NUMLAY 128 -#define L_NLOWER 136 -#define L_NFNLAYER 192 -#define L_MOUSECURSOR 256 - -// LED Effect -#ifdef RGBLIGHT_ENABLE -unsigned char rgb[7][5][3]; -void led_ripple_effect(char r, char g, char b) { - static int scan_count = -10; - static int keys[] = { 6, 6, 6, 7, 7 }; - static int keys_sum[] = { 0, 6, 12, 18, 25 }; - - if (scan_count == -1) { - rgblight_enable_noeeprom(); - rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT); - } else if (scan_count >= 0 && scan_count < 5) { - for (unsigned char c=keybuf_begin; c!=keybuf_end; c++) { - int i = c; - // FIXME: - - int y = scan_count; - int dist_y = abs(y - keybufs[i].row); - for (int x=0; x= 6 && scan_count <= 10) { - int y = scan_count - 6; - for (int x=0; x= 12) { scan_count = 0; } -} -#endif - -uint8_t layer_state_old; - -//runs every scan cycle (a lot) -void matrix_scan_user(void) { - if(delay_key_stat && (timer_elapsed(key_timer) > DELAY_TIME)){ - register_delay_code(_BASE); - if(!delay_key_pressed){ - unregister_delay_code(); - } - } - - if(layer_state_old != layer_state){ - switch (layer_state) { - case L_BASE: - break; - case L_OPT: - register_delay_code(_OPT); - break; - case L_NUM: - register_delay_code(_NUM); - break; - case L_SYM: - register_delay_code(_SYM); - break; - case L_FUNC: - register_delay_code(_FUNC); - break; - } - layer_state_old = layer_state; - } - - #ifdef RGBLIGHT_ENABLE - if(!RGBAnimation){ - switch (layer_state) { - case L_BASE: - #ifdef RGBLED_BACK - led_ripple_effect(0,112,127); - #else - rgblight_setrgb(0,112,127); - #endif - break; - case L_OPT: - #ifdef RGBLED_BACK - led_ripple_effect(127,0,100); - #else - rgblight_setrgb(127,0,100); - #endif - break; - case L_NUM: - #ifdef RGBLED_BACK - led_ripple_effect(127,23,0); - #else - rgblight_setrgb(127,23,0); - #endif - break; - case L_SYM: - #ifdef RGBLED_BACK - led_ripple_effect(0,127,0); - #else - rgblight_setrgb(0,127,0); - #endif - break; - case L_FUNC: - #ifdef RGBLED_BACK - led_ripple_effect(127,0,61); - #else - rgblight_setrgb(127,0,61); - #endif - break; - } - } - #endif -} - -//OLED update loop -#ifdef OLED_ENABLE - -oled_rotation_t oled_init_user(oled_rotation_t rotation) { - return OLED_ROTATION_0; -} - -// Render to OLED -void render_status(void) { - - // froggy logo - static char logo[4][1][17]= - { - { - {0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0} - }, - { - {0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,0} - }, - { - {0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,0} - }, - { - {0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0} - } - }; - - static char indctr[8][2][4]= - { - // white icon - { - {0x60,0x61,0x62,0}, - {0x63,0x64,0} - }, - { - {0x80,0x81,0x82,0}, - {0x83,0x84,0} - }, - { - {0xa0,0xa1,0xa2,0}, - {0xa3,0xa4,0} - }, - { - {0xc0,0xc1,0xc2,0}, - {0xc3,0xc4,0} - }, - // Black icon - { - {0x75,0x76,0x77,0}, - {0x78,0x79,0} - }, - { - {0x95,0x96,0x97,0}, - {0x98,0x99,0} - }, - { - {0xb5,0xb6,0xb7,0}, - {0xb8,0xb9,0} - }, - { - {0xd5,0xd6,0xd7,0}, - {0xd8,0xd9,0} - }, - }; - - int rown = 0; - int rowf = 0; - int rowa = 0; - int rows = 0; - - //Set Indicator icon - led_t led_state = host_keyboard_led_state(); - if (led_state.num_lock) { rown = 4; } else { rown = 0; } - if (led_state.caps_lock) { rowa = 4; } else { rowa = 0; } - if (led_state.scroll_lock) { rows = 4; } else { rows = 0; } - if (layer_state == L_FUNC) { rowf = 4; } - - oled_write(indctr[rown] [0], false); - oled_write(indctr[rowf] [1], false); - oled_write(logo [0] [0], false); - oled_write(indctr[rown+1][0], false); - oled_write(indctr[rowf+1][1], false); - oled_write(logo [1] [0], false); - oled_write(indctr[rowa+2][0], false); - oled_write(indctr[rows+2][1], false); - oled_write(logo [2] [0], false); - oled_write(indctr[rowa+3][0], false); - oled_write(indctr[rows+3][1], false); - oled_write(logo [3] [0], false); - -} - -bool oled_task_user(void) { - -#if DEBUG_TO_SCREEN - if (debug_enable) { - return; - } -#endif - - if (is_keyboard_master()) { - render_status(); - } - return false; -} - -#endif // end of OLED_ENABLE diff --git a/keyboards/helix/rev2/keymaps/froggy/readme.md b/keyboards/helix/rev2/keymaps/froggy/readme.md deleted file mode 100644 index 624e738a6c93..000000000000 --- a/keyboards/helix/rev2/keymaps/froggy/readme.md +++ /dev/null @@ -1,83 +0,0 @@ -Froggy -one hand Helix- -====== - -![Imgur](https://i.imgur.com/S1Dw3XW.jpg) - -## Features -It is a one-handed keyboard with reference to Frogpad. Layout Designed by タクマ ([@humid](https://twitter.com/humid)). - -## Layout -### Base -``` -,-----------------------------------------. -| C+z | ; | [ | ( | < | { | -|------+------+------+------+------+------| -| KANA | P | K | R | A | F | -|------+------+------+------+------+------| -| BS | D | T | H | E | O | -|------+------+------+------+------+------+------. -| Shift| Y | S | N | I | U | Space| -|------+------+------+------+------+------+------| -| Ctrl | Alt | win | Sym | Num | OPT | Ent | -`------------------------------------------------' -``` - -### Opt -``` -,-----------------------------------------. -| Esc | : | ] | ) | > | } | -|------+------+------+------+------+------| -| EISU | J | M | B | ' | Tab | -|------+------+------+------+------+------| -| . | V | C | L | Z | Q | -|------+------+------+------+------+------+------. -| | X | G | W | - | Del | Esc | -|------+------+------+------+------+------+------| -| | | | , | DTOP | | | -`------------------------------------------------' -``` - -### Num -``` -,-----------------------------------------. -| | | Func | home | End | | -|------+------+------+------+------+------| -| | * | 7 | 8 | 9 | - | -|------+------+------+------+------+------| -| . | / | 4 | 5 | 6 | + | -|------+------+------+------+------+------+------. -| LN | 0 | 1 | 2 | 3 |C+S+F1| | -|------+------+------+------+------+------+------| -| | | | , | | | | -`------------------------------------------------' -``` - -### Sym -``` -,-----------------------------------------. -| Ins | GRV | | PU | PD | ^ | -|------+------+------+------+------+------| -| | \ | # | = | ? | % | -|------+------+------+------+------+------| -| | $ | upA | @ | ! | | | -|------+------+------+------+------+------+------. -| CL | <- | dwA | -> | _ | & | | -|------+------+------+------+------+------+------| -| | | PS | | ~ | | | - `-----------------------------------------------' -``` - -### Func -``` -,-----------------------------------------. -|RGBRST| Hue | | RST | Mac | Win | -|------+------+------+------+------+------| -| RGB1 | VAL+ | F7 | F8 | F9 | | -|------+------+------+------+------+------| -| RGB2 | VAL- | F4 | F5 | F6 | F12 | -|------+------+------+------+------+------+------. -| RGB3 | F10 | F1 | F2 | F3 | F11 | | -|------+------+------+------+------+------+------| -|RGBOFF| | | | | | | -`------------------------------------------------' -``` diff --git a/keyboards/helix/rev2/keymaps/froggy/rules.mk b/keyboards/helix/rev2/keymaps/froggy/rules.mk deleted file mode 100644 index 048ecefff38f..000000000000 --- a/keyboards/helix/rev2/keymaps/froggy/rules.mk +++ /dev/null @@ -1,27 +0,0 @@ -# QMK Standard Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# -# See TOP/keyboards/helix/rules.mk for a list of options that can be set. -# See TOP/docs/config_options.md for more information. -# -LTO_ENABLE = no # if firmware size over limit, try this option -SPLIT_KEYBOARD = yes - -# Helix Spacific Build Options -# you can uncomment and edit follows 7 Variables -# jp: 以下の7つの変数を必要に応じて編集し、コメントアウトをはずします。 -OLED_ENABLE = yes # OLED_ENABLE -LOCAL_GLCDFONT = yes # use each keymaps "helixfont.h" insted of "common/glcdfont.c" -LED_BACK_ENABLE = yes # LED backlight (Enable WS2812 RGB underlight.) -LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.) -LED_ANIMATIONS = yes # LED animations -# IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone) - -# OLED_ENABLE が yes のとき -# OLED_SELECT が core ならば QMK 標準の oled_dirver.c を使用します。 -# OLED_SELECT が core 以外ならば従来どおり helix/local_drivers/ssd1306.c を使用します。 -# If OLED_ENABLE is 'yes' -# If OLED_SELECT is 'core', use QMK standard oled_dirver.c. -# If OLED_SELECT is other than 'core', use helix/local_drivers/ssd1306.c. -OLED_SELECT = core diff --git a/keyboards/helix/rev2/keymaps/froggy_106/config.h b/keyboards/helix/rev2/keymaps/froggy_106/config.h deleted file mode 100644 index 9affa1d296ad..000000000000 --- a/keyboards/helix/rev2/keymaps/froggy_106/config.h +++ /dev/null @@ -1,47 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#pragma once - -#undef TAPPING_TERM -#define TAPPING_TERM 200 -#define ONESHOT_TAP_TOGGLE 5 /* Tapping this number of times holds the key until tapped this number of times again. */ -#define ONESHOT_TIMEOUT 5000 /* Time (in ms) before the one shot key is released */ - -// the froggy keymap does not use the right hand side, so sync_timer is not needed -#define DISABLE_SYNC_TIMER -// For the same reason, the following are also not needed -#undef SPLIT_LAYER_STATE_ENABLE -#undef SPLIT_LED_STATE_ENABLE - -// If you need more program area, try select and reduce rgblight modes to use. - -// Selection of RGBLIGHT MODE to use. -#if defined(LED_ANIMATIONS) - #define RGBLIGHT_EFFECT_BREATHING - #define RGBLIGHT_EFFECT_RAINBOW_MOOD - #define RGBLIGHT_EFFECT_RAINBOW_SWIRL - #define RGBLIGHT_EFFECT_SNAKE - #define RGBLIGHT_EFFECT_KNIGHT - #define RGBLIGHT_EFFECT_CHRISTMAS - #define RGBLIGHT_EFFECT_STATIC_GRADIENT - //#define RGBLIGHT_EFFECT_RGB_TEST - //#define RGBLIGHT_EFFECT_ALTERNATING -#endif diff --git a/keyboards/helix/rev2/keymaps/froggy_106/helixfont.h b/keyboards/helix/rev2/keymaps/froggy_106/helixfont.h deleted file mode 100644 index 3a79a1937ba7..000000000000 --- a/keyboards/helix/rev2/keymaps/froggy_106/helixfont.h +++ /dev/null @@ -1,235 +0,0 @@ -// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0. -// See gfxfont.h for newer custom bitmap font info. - -#pragma once - -#include "progmem.h" - -// Standard ASCII 5x7 font - -static const unsigned char font[] PROGMEM = { -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, -0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, -0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, -0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, -0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, -0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, -0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, -0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, -0x00, 0x18, 0x24, 0x18, 0x00, 0x00, -0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, -0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, -0x26, 0x29, 0x79, 0x29, 0x26, 0x00, -0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, -0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, -0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, -0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, -0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, -0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, -0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, -0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, -0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, -0x60, 0x60, 0x60, 0x60, 0x60, 0x00, -0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, -0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, -0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, -0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, -0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, -0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, -0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, -0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, -0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, -0x00, 0x07, 0x00, 0x07, 0x00, 0x00, -0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, -0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, -0x23, 0x13, 0x08, 0x64, 0x62, 0x00, -0x36, 0x49, 0x56, 0x20, 0x50, 0x00, -0x00, 0x08, 0x07, 0x03, 0x00, 0x00, -0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, -0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, -0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, -0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, -0x00, 0x80, 0x70, 0x30, 0x00, 0x00, -0x08, 0x08, 0x08, 0x08, 0x08, 0x00, -0x00, 0x00, 0x60, 0x60, 0x00, 0x00, -0x20, 0x10, 0x08, 0x04, 0x02, 0x00, -0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, -0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, -0x72, 0x49, 0x49, 0x49, 0x46, 0x00, -0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, -0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, -0x27, 0x45, 0x45, 0x45, 0x39, 0x00, -0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, -0x41, 0x21, 0x11, 0x09, 0x07, 0x00, -0x36, 0x49, 0x49, 0x49, 0x36, 0x00, -0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, -0x00, 0x00, 0x14, 0x00, 0x00, 0x00, -0x00, 0x40, 0x34, 0x00, 0x00, 0x00, -0x00, 0x08, 0x14, 0x22, 0x41, 0x00, -0x14, 0x14, 0x14, 0x14, 0x14, 0x00, -0x00, 0x41, 0x22, 0x14, 0x08, 0x00, -0x02, 0x01, 0x59, 0x09, 0x06, 0x00, -0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, -0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, -0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, -0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, -0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, -0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, -0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, -0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, -0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, -0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, -0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, -0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, -0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, -0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, -0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, -0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, -0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, -0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, -0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, -0x26, 0x49, 0x49, 0x49, 0x32, 0x00, -0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, -0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, -0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, -0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, -0x63, 0x14, 0x08, 0x14, 0x63, 0x00, -0x03, 0x04, 0x78, 0x04, 0x03, 0x00, -0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, -0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, -0x02, 0x04, 0x08, 0x10, 0x20, 0x00, -0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, -0x04, 0x02, 0x01, 0x02, 0x04, 0x00, -0x40, 0x40, 0x40, 0x40, 0x40, 0x00, -0xFC, 0xFE, 0x02, 0x82, 0x82, 0x82, -0x82, 0x82, 0x82, 0xC2, 0x82, 0x02, -0x02, 0xFE, 0x00, 0x00, 0xFE, 0xFE, -0x02, 0x62, 0x62, 0x62, 0x62, 0xE2, -0x62, 0x62, 0xE2, 0x02, 0x02, 0xFC, -0x00, 0x00, 0x00, 0xF0, 0xFC, 0xFC, -0xFC, 0x00, 0xFC, 0xFC, 0xF0, 0x80, -0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, -0x30, 0x40, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x20, 0x00, 0x00, 0x24, 0xA4, -0xA4, 0xBC, 0xA4, 0x24, 0x24, 0x00, -0x00, 0x00, 0x24, 0xA4, 0x24, 0x24, -0x3C, 0x04, 0x04, 0x00, 0x00, 0x00, -0xB8, 0xA4, 0xA4, 0xA4, 0xBC, 0x00, -0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, -0x00, 0x44, 0x44, 0x44, 0xDC, 0x44, -0x04, 0x3C, 0x00, 0x00, 0x00, 0x00, -0xFC, 0xFE, 0xFE, 0x7E, 0x7E, 0x7E, -0x7E, 0x7E, 0x7E, 0x3E, 0x7E, 0xFE, -0xFE, 0xFE, 0x00, 0x00, 0xFE, 0xFE, -0xFE, 0x9E, 0x9E, 0x9E, 0x9E, 0x1E, -0x9E, 0x9E, 0x1E, 0xFE, 0xFE, 0xFC, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x08, 0x36, 0x41, 0x00, 0x00, -0x00, 0x00, 0x77, 0x00, 0x00, 0x00, -0x00, 0x41, 0x36, 0x08, 0x00, 0x00, -0x02, 0x01, 0x02, 0x04, 0x02, 0x00, -0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, -0x7F, 0x7F, 0x40, 0x41, 0x41, 0x41, -0x41, 0x41, 0x41, 0x41, 0x41, 0x40, -0x40, 0x7F, 0x00, 0x00, 0x7F, 0x7F, -0x40, 0x40, 0x40, 0x40, 0x40, 0x41, -0x40, 0x40, 0x43, 0x40, 0x40, 0x7F, -0x00, 0x20, 0x3C, 0x3E, 0x3E, 0x3E, -0x3E, 0x00, 0x3E, 0x3E, 0x3E, 0x3E, -0x38, 0x00, 0x00, 0xF0, 0xFB, 0xFB, -0x00, 0x50, 0x60, 0xFF, 0xFC, 0x3C, -0x1E, 0x0E, 0x0C, 0xFC, 0xF8, 0xE8, -0xE8, 0xE8, 0x30, 0x00, 0x00, 0x00, -0x00, 0x00, 0x02, 0x00, 0x00, 0x00, -0x00, 0x04, 0x04, 0x1B, 0x04, 0x04, -0x00, 0x00, 0x00, 0x00, 0x57, 0x50, -0x57, 0x54, 0x57, 0x10, 0x50, 0x00, -0x00, 0x00, 0x97, 0x94, 0x97, 0x94, -0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, -0xE4, 0x14, 0xF4, 0x94, 0xF7, 0x00, -0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, -0x00, 0x38, 0xA4, 0xA4, 0xA5, 0x3C, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x7F, 0x7F, 0x7F, 0x7E, 0x7E, 0x7E, -0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7F, -0x7F, 0x7F, 0x00, 0x00, 0x7F, 0x7F, -0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7E, -0x7F, 0x7F, 0x7C, 0x7F, 0x7F, 0x7F, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0xFE, 0xFE, 0x02, 0x62, 0x62, 0x62, -0xE2, 0x62, 0x62, 0x62, 0xC2, 0x02, -0x02, 0xFE, 0x00, 0x00, 0xFE, 0xFE, -0x02, 0x82, 0xC2, 0xE2, 0xF2, 0x82, -0x82, 0x82, 0x82, 0x02, 0x02, 0xFE, -0x00, 0x00, 0x00, 0x3C, 0x66, 0x66, -0x66, 0x66, 0x66, 0x66, 0x66, 0x66, -0x00, 0x00, 0x00, 0x07, 0x7F, 0xDF, -0x00, 0x05, 0x03, 0x7F, 0x1F, 0x1E, -0x3C, 0x38, 0x18, 0x1F, 0x0F, 0x0D, -0x0D, 0x0D, 0x06, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x20, 0x20, 0x50, -0x8C, 0x50, 0x20, 0x20, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x09, 0x09, -0x06, 0x09, 0x09, 0x00, 0x00, 0x00, -0x00, 0x00, 0x1C, 0x12, 0x12, 0x12, -0x1E, 0x10, 0x10, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xFF, 0x00, 0x73, -0x84, 0xE7, 0x94, 0x94, 0x94, 0x67, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0xFE, 0xFE, 0xFE, 0x9E, 0x9E, 0x9E, -0x1E, 0x9E, 0x9E, 0x9E, 0x3E, 0xFE, -0xFE, 0xFE, 0x00, 0x00, 0xFE, 0xFE, -0xFE, 0x7E, 0x3E, 0x1E, 0x0E, 0x7E, -0x7E, 0x7E, 0x7E, 0xFE, 0xFE, 0xFE, -0x00, 0x00, 0x00, 0x3C, 0x66, 0x66, -0x60, 0x60, 0x60, 0x60, 0x60, 0x60, -0x00, 0x00, 0x00, 0x07, 0x7F, 0xDF, -0x00, 0x00, 0xE0, 0xF8, 0xFC, 0xFC, -0xFC, 0xFC, 0xFC, 0xFC, 0xF0, 0x80, -0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, -0x3F, 0x7F, 0x40, 0x46, 0x46, 0x46, -0x47, 0x46, 0x46, 0x46, 0x43, 0x40, -0x40, 0x7F, 0x00, 0x00, 0x7F, 0x7F, -0x40, 0x41, 0x43, 0x47, 0x4F, 0x41, -0x41, 0x41, 0x41, 0x40, 0x40, 0x3F, -0x00, 0x00, 0x00, 0x3E, 0x73, 0x60, -0x70, 0x3E, 0x07, 0x03, 0x67, 0x3E, -0x00, 0x00, 0x00, 0x00, 0x00, 0x07, -0x06, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x04, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x08, 0x08, -0x36, 0x08, 0x08, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x1F, 0x00, 0x0E, -0x10, 0x1C, 0x12, 0x12, 0x12, 0x12, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x3F, 0x7F, 0x7F, 0x79, 0x79, 0x79, -0x78, 0x79, 0x79, 0x79, 0x7C, 0x7F, -0x7F, 0x7F, 0x00, 0x00, 0x7F, 0x7F, -0x7F, 0x7E, 0x7C, 0x78, 0x70, 0x7E, -0x7E, 0x7E, 0x7E, 0x7F, 0x7F, 0x3F, -0x00, 0x00, 0x00, 0x03, 0x03, 0x03, -0x03, 0x3F, 0x63, 0x63, 0x63, 0x3F, -0x00, 0x00, 0x00, 0x00, 0x00, 0x07, -0x00, 0x00, 0x07, 0x1F, 0x3F, 0x0F, -0x07, 0x0F, 0x3F, 0x3F, 0x0F, 0x00, -0x03, 0x06, 0x00, 0xF0, 0xFB, 0xFB, -}; diff --git a/keyboards/helix/rev2/keymaps/froggy_106/keymap.c b/keyboards/helix/rev2/keymaps/froggy_106/keymap.c deleted file mode 100644 index d0a17cb4ae64..000000000000 --- a/keyboards/helix/rev2/keymaps/froggy_106/keymap.c +++ /dev/null @@ -1,810 +0,0 @@ -#include QMK_KEYBOARD_H -#include "keymap_japanese.h" -#include - -#define LAYOUT_half( \ - L00, L01, L02, L03, L04, L05, \ - L10, L11, L12, L13, L14, L15, \ - L20, L21, L22, L23, L24, L25, \ - L30, L31, L32, L33, L34, L35, L36, \ - L40, L41, L42, L43, L44, L45, L46 \ -) { \ - { L00, L01, L02, L03, L04, L05, KC_NO }, \ - { L10, L11, L12, L13, L14, L15, KC_NO }, \ - { L20, L21, L22, L23, L24, L25, KC_NO }, \ - { L30, L31, L32, L33, L34, L35, L36 }, \ - { L40, L41, L42, L43, L44, L45, L46 }, \ - { _______, _______, _______, _______, _______, _______, KC_NO }, \ - { _______, _______, _______, _______, _______, _______, KC_NO }, \ - { _______, _______, _______, _______, _______, _______, KC_NO }, \ - { _______, _______, _______, _______, _______, _______, _______ }, \ - { _______, _______, _______, _______, _______, _______, _______ } \ -} - -#define DELAY_TIME 75 -static uint16_t key_timer; -static uint16_t tap_timer; -static uint16_t delay_registered_code; -static uint8_t delay_registered_layer; -static uint8_t delay_mat_row; -static uint8_t delay_mat_col; -static bool delay_key_stat; -static bool delay_key_pressed; -static bool tapping_key; - -// Each layer gets a name for readability, which is then used in the keymap matrix below. -// The underscores don't mean anything - you can have a layer called STUFF or any other name. -// Layer names don't all need to be of the same length, obviously, and you can also skip them -// entirely and just use numbers. -enum layer_number { - _BASE = 0, - _BASE_106, - _OPT, - _OPT_106, - _SYM, - _SYM_106, - _NUM, - _NUM_106, - _FUNC, - _LAYER_NUM, -}; -bool RGBAnimation = false; //Flag for LED Layer color Refresh. - -typedef union { - uint32_t raw; - struct { - bool mac_mode:1; - }; -} user_config_t; -user_config_t user_config; - -#define IS_MODE_106() ((default_layer_state & (1UL << _BASE_106)) != 0) -#define IS_MODE_MAC() (user_config.mac_mode) -#ifndef MAX -#define MAX(X, Y) ((X) > (Y) ? (X) : (Y)) -#endif -#ifndef MIN -#define MIN(X, Y) ((X) < (Y) ? (X) : (Y)) -#endif - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - EISU, - KANA, - RGBRST, - RGBOFF, - RGB1, - RGB2, - RGB3, - OPT_TAP_SP, - DESKTOP, - MAC, - WIN, - L_SYM, - L_NUM, - TO_106, - TO_101, -}; - -enum macro_keycodes { - KC_SAMPLEMACRO, -}; - -//Macros -#define M_SAMPLE M(KC_SAMPLEMACRO) - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - /* Base - * ,-----------------------------------------. - * | C+z | ; | [ | ( | < | { | - * |------+------+------+------+------+------| - * | KANA | P | K | R | A | F | - * |------+------+------+------+------+------| - * | BS | D | T | H | E | O | - * |------+------+------+------+------+------+------. - * | Shift| Y | S | N | I | U |Space | - * |------+------+------+------+------+------+------| - * | Ctrl | Alt | Gui | Sym | Num | OPT | Ent | - * `------------------------------------------------' - */ - [_BASE] = LAYOUT_half( - LCTL(KC_Z), KC_SCLN, KC_LBRC, KC_LPRN, KC_LT, KC_LCBR, - KANA, KC_P, KC_K, KC_R, KC_A, KC_F, - KC_BSPC, KC_D, KC_T, KC_H, KC_E, KC_O, - OSM(MOD_LSFT), KC_Y, KC_S, KC_N, KC_I, KC_U, KC_SPC, - OSM(MOD_LCTL), OSM(MOD_LALT), OSM(MOD_LGUI), L_SYM, L_NUM, OPT_TAP_SP, KC_ENT - ), - [_BASE_106] = LAYOUT_half( - LCTL(KC_Z), JP_SCLN, JP_LBRC, JP_LPRN, JP_LABK, JP_LCBR, - KANA, KC_P, KC_K, KC_R, KC_A, KC_F, - KC_BSPC, KC_D, KC_T, KC_H, KC_E, KC_O, - OSM(MOD_LSFT), KC_Y, KC_S, KC_N, KC_I, KC_U, KC_SPC, - OSM(MOD_LCTL), OSM(MOD_LALT), OSM(MOD_LGUI), L_SYM, L_NUM, OPT_TAP_SP, KC_ENT - ), - - /* Opt - * ,-----------------------------------------. - * | Esc | : | ] | ) | > | } | - * |------+------+------+------+------+------| - * | EISU| J | M | B | ' | Tab | - * |------+------+------+------+------+------| - * | . | V | C | L | Z | Q | - * |------+------+------+------+------+------+------. - * | | X | G | W | - | Del | Esc | - * |------+------+------+------+------+------+------| - * | | | | , | DTOP | | | - * `------------------------------------------------' - */ - [_OPT] = LAYOUT_half( - KC_ESC, KC_COLN,KC_RBRC, KC_RPRN,KC_GT, KC_RCBR, - EISU, KC_J, KC_M, KC_B, KC_QUOT, KC_TAB, - KC_DOT, KC_V, KC_C, KC_L, KC_Z, KC_Q, - _______, KC_X, KC_G, KC_W, KC_MINUS, KC_DEL, KC_ESC, - _______, _______,_______, KC_COMM,DESKTOP, _______, _______ - ), - [_OPT_106] = LAYOUT_half( - KC_ESC, JP_COLN,JP_RBRC, JP_RPRN,JP_RABK, JP_RCBR, - EISU, KC_J, KC_M, KC_B, JP_QUOT, KC_TAB, - KC_DOT, KC_V, KC_C, KC_L, KC_Z, KC_Q, - _______, KC_X, KC_G, KC_W, JP_MINS, KC_DEL, KC_ESC, - _______, _______,_______, KC_COMM,DESKTOP, _______, _______ - ), - - /* Sym - * ,-----------------------------------------. - * | Ins | GRV | | PU | PD | ^ | - * |------+------+------+------+------+------| - * | | \ | # | = | ? | % | - * |------+------+------+------+------+------| - * | | $ | upA | @ | ! | | | - * |------+------+------+------+------+------+------. - * | CL | <- | dwA | -> | _ | & | | - * |------+------+------+------+------+------+------+ - * | | | PS | | ~ | | | - * `------------------------------------------------' - */ - [_SYM] = LAYOUT_half( - KC_INS, KC_GRV, _______, KC_PGUP, KC_PGDN, KC_CIRC, - _______, KC_BSLS, KC_HASH, KC_EQL, KC_QUES, KC_PERC, - _______, KC_DLR, KC_UP, KC_AT, KC_EXLM, KC_PIPE, - KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT,KC_UNDS, KC_AMPR, _______, - _______, _______, KC_PSCR, _______, KC_TILD, _______, _______ - ), - [_SYM_106] = LAYOUT_half( - KC_INS, JP_GRV, _______, KC_PGUP, KC_PGDN, JP_CIRC, - _______, JP_BSLS, JP_HASH, JP_EQL, JP_QUES, JP_PERC, - _______, JP_DLR, KC_UP, JP_AT, JP_EXLM, JP_PIPE, - KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT,JP_UNDS, JP_AMPR, _______, - _______, _______, KC_PSCR, _______, JP_TILD, _______, _______ - ), - - /* Raise - * ,-----------------------------------------. - * | | | Func | home | End | | - * |------+------+------+------+------+------| - * | | * | 7 | 8 | 9 | - | - * |------+------+------+------+------+------| - * | . | / | 4 | 5 | 6 | + | - * |------+------+------+------+------+------+------. - * | LN | 0 | 1 | 2 | 3 |C+S+F1| | - * |------+------+------+------+------+------+------| - * | | | . | , | | | | - * `------------------------------------------------' - */ - [_NUM] = LAYOUT_half( - _______, _______, OSL(_FUNC), KC_HOME, KC_END, _______, - _______, KC_ASTR, KC_P7, KC_P8, KC_P9, KC_MINS, - KC_DOT, KC_SLSH, KC_P4, KC_P5, KC_P6, KC_PLUS, - KC_NUM, KC_P0, KC_P1, KC_P2, KC_P3, LCTL(S(KC_F1)), _______, - _______, _______, KC_PDOT, KC_COMM, _______, _______, _______ - ), - [_NUM_106] = LAYOUT_half( - _______, _______, OSL(_FUNC), KC_HOME, KC_END, _______, - _______, JP_ASTR, KC_P7, KC_P8, KC_P9, JP_MINS, - KC_DOT, JP_SLSH, KC_P4, KC_P5, KC_P6, JP_PLUS, - KC_NUM, KC_P0, KC_P1, KC_P2, KC_P3, LCTL(S(KC_F1)), _______, - _______, _______, KC_PDOT, JP_COMM, _______, _______, _______ - ), - - /* Func - * ,-----------------------------------------. - * |RGBRST| Hue |To101 | RST | Mac | Win | - * |------+------+------+------+------+------| - * | RGB1 | VAL+ | F7 | F8 | F9 |To106 | - * |------+------+------+------+------+------| - * | RGB2 | VAL- | F4 | F5 | F6 | F12 | - * |------+------+------+------+------+------+------. - * | RGB3 | F10 | F1 | F2 | F3 | F11 | | - * |------+------+------+------+------+------+------| - * |RGBOFF| | | | | | | - * `------------------------------------------------' - */ - [_FUNC] = LAYOUT_half( - RGBRST,RGB_HUI, TO_101, QK_BOOT, MAC, WIN, - RGB1, RGB_VAI, KC_F7, KC_F8, KC_F9, TO_106, - RGB2, RGB_VAD, KC_F4, KC_F5, KC_F6, KC_F12, - RGB3, KC_F10, KC_F1, KC_F2, KC_F3, KC_F11, _______, - RGBOFF,_______, _______, _______, _______, _______, _______ - ) -}; - -void set_mac_mode(bool enable) { - if(enable){ - user_config.mac_mode = true; - keymap_config.swap_lalt_lgui = false; - keymap_config.swap_ralt_rgui = false; - }else{ - user_config.mac_mode = false; - keymap_config.swap_lalt_lgui = true; - keymap_config.swap_ralt_rgui = true; - } - eeconfig_update_user(user_config.raw); -} - -void eeconfig_init_user(void) { - user_config.raw = 0; - eeconfig_update_user(user_config.raw); -} - -void keyboard_post_init_user(void) { - user_config.raw = eeconfig_read_user(); - set_mac_mode(user_config.mac_mode); -} - -bool find_mairix(uint16_t keycode, uint8_t *row, uint8_t *col){ - int base_keymap = IS_MODE_106() ? _BASE_106 : _BASE; - for(uint8_t i=0; ievent.key.col; - row = record->event.key.row; - if (record->event.pressed && ((row < 5 && is_keyboard_master()) || (row >= 5 && !is_keyboard_master()))) { - int end = keybuf_end; - keybufs[end].col = col; - keybufs[end].row = row % 5; - keybufs[end].frame = 0; - keybuf_end ++; - } - #endif - - if(tap_timer&&keycode!=OPT_TAP_SP){ - tapping_key = true; - } - - if(keycode==delay_registered_code){ - if (!record->event.pressed){ - unregister_delay_code(); - } - } - - switch (keycode) { - case KC_SCLN: - case KC_LBRC: - case KC_LPRN: - case KC_LT: - case KC_LCBR: - case KC_P: - case KC_K: - case KC_R: - case KC_A: - case KC_F: - case KC_BSPC: - case KC_D: - case KC_T: - case KC_H: - case KC_E: - case KC_O: - case KC_Y: - case KC_S: - case KC_N: - case KC_I: - case KC_U: - case LCTL(KC_Z): - case KC_SPC: - //case JP_SCLN: // == KC_SCLN - case JP_LBRC: - case JP_LPRN: - //case JP_LABK: // == KC_LT - case JP_LCBR: - if (IS_MODE_106()) { - if (keycode == KC_LBRC || keycode == KC_LPRN || keycode == KC_LCBR) - break; - }else{ - if (keycode == JP_LBRC || keycode == JP_LPRN || keycode == JP_LCBR) - break; - } - if (record->event.pressed) { - if (IS_MODE_106()) - register_delay_code(_BASE_106); - else - register_delay_code(_BASE); - if(find_mairix(keycode, &delay_mat_row, &delay_mat_col)){ - key_timer = timer_read(); - delay_key_stat = true; - delay_key_pressed = true; - } - }else{ - delay_key_pressed = false; - } - return false; - break; - case L_SYM: - if (record->event.pressed) { - if (IS_MODE_106()) { - register_delay_code(_SYM_106); - layer_on(_SYM_106); - }else{ - register_delay_code(_SYM); - layer_on(_SYM); - } - }else{ - layer_off(_SYM); - layer_off(_SYM_106); - if(delay_registered_layer == _SYM || delay_registered_layer == _SYM_106) { - unregister_delay_code(); - } - } - return false; - break; - case L_NUM: - if (record->event.pressed) { - if (IS_MODE_106()) { - register_delay_code(_NUM_106); - layer_on(_NUM_106); - }else{ - register_delay_code(_NUM); - layer_on(_NUM); - } - }else{ - layer_off(_NUM); - layer_off(_NUM_106); - if(delay_registered_layer == _NUM || delay_registered_layer == _NUM_106) { - unregister_delay_code(); - } - } - return false; - break; - case OPT_TAP_SP: - if (record->event.pressed) { - tapping_key = false; - if (IS_MODE_106()) { - register_delay_code(_OPT_106); - layer_on(_OPT_106); - }else{ - register_delay_code(_OPT); - layer_on(_OPT); - } - tap_timer = timer_read(); - }else{ - layer_off(_OPT); - layer_off(_OPT_106); - if(tapping_key==false && timer_elapsed(tap_timer) < TAPPING_TERM){ - SEND_STRING(" "); - }else if(delay_registered_layer == _OPT || delay_registered_layer == _OPT_106) { - unregister_delay_code(); - } - tap_timer = 0; - } - return false; - break; - case EISU: - if (record->event.pressed) { - if(IS_MODE_MAC()){ - register_code(KC_LNG2); - }else{ - SEND_STRING(SS_LALT("`")); - } - } else { - unregister_code(KC_LNG2); - } - return false; - break; - case KANA: - if (record->event.pressed) { - if(IS_MODE_MAC()){ - register_code(KC_LNG1); - }else{ - SEND_STRING(SS_LALT("`")); - } - } else { - unregister_code(KC_LNG1); - } - return false; - break; - case DESKTOP: - if (record->event.pressed) { - if(IS_MODE_MAC()){ - register_code(KC_F11); - }else{ - SEND_STRING(SS_LGUI("d")); - } - } else { - unregister_code(KC_F11); - } - return false; - break; - case RGBRST: - #ifdef RGBLIGHT_ENABLE - if (record->event.pressed) { - eeconfig_update_rgblight_default(); - rgblight_enable(); - RGBAnimation = false; - } - #endif - break; - case RGBOFF: - #ifdef RGBLIGHT_ENABLE - if (record->event.pressed) { - rgblight_disable(); - } - #endif - break; - case RGB1: - #ifdef RGBLIGHT_ENABLE - if (record->event.pressed) { - RGBAnimation = true; - rgblight_mode(RGBLIGHT_MODE_RAINBOW_MOOD); - } - #endif - break; - case RGB2: - #ifdef RGBLIGHT_ENABLE - if (record->event.pressed) { - RGBAnimation = true; - rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 1); - } - #endif - break; - case RGB3: - #ifdef RGBLIGHT_ENABLE - if (record->event.pressed) { - RGBAnimation = true; - rgblight_mode(RGBLIGHT_MODE_KNIGHT); - } - #endif - break; - case MAC: - if (record->event.pressed) { - set_mac_mode(true); - } - break; - case WIN: - if (record->event.pressed) { - set_mac_mode(false); - } - break; - case TO_101: - if (record->event.pressed) { - if (IS_MODE_106()) { - set_single_persistent_default_layer(_BASE); - } - } - break; - case TO_106: - if (record->event.pressed) { - if (!IS_MODE_106()) { - set_single_persistent_default_layer(_BASE_106); - } - } - break; - } - return true; -} - -// LED Effect -#ifdef RGBLIGHT_ENABLE -unsigned char rgb[7][5][3]; -void led_ripple_effect(char r, char g, char b) { - static int scan_count = -10; - static int keys[] = { 6, 6, 6, 7, 7 }; - static int keys_sum[] = { 0, 6, 12, 18, 25 }; - - if (scan_count == -1) { - rgblight_enable_noeeprom(); - rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT); - } else if (scan_count >= 0 && scan_count < 5) { - for (unsigned char c=keybuf_begin; c!=keybuf_end; c++) { - int i = c; - // FIXME: - - int y = scan_count; - int dist_y = abs(y - keybufs[i].row); - for (int x=0; x= 6 && scan_count <= 10) { - int y = scan_count - 6; - for (int x=0; x= 12) { scan_count = 0; } -} -#endif - -layer_state_t layer_state_old; - -//runs every scan cycle (a lot) -void matrix_scan_user(void) { - if(delay_key_stat && (timer_elapsed(key_timer) > DELAY_TIME)){ - if (IS_MODE_106()) - register_delay_code(_BASE_106); - else - register_delay_code(_BASE); - if(!delay_key_pressed){ - unregister_delay_code(); - } - } - - if(layer_state_old != layer_state){ - for (int8_t i = _LAYER_NUM-1; i > _BASE_106; i--) { - if(IS_LAYER_ON(i)){ - register_delay_code(i); - break; - } - } - layer_state_old = layer_state; - } - - #ifdef RGBLIGHT_ENABLE - if(!RGBAnimation){ - if(IS_LAYER_ON(_FUNC)){ - #ifdef RGBLED_BACK - led_ripple_effect(127,23,0); - #else - rgblight_setrgb(127,23,0); - #endif - }else if(IS_LAYER_ON(_NUM)||IS_LAYER_ON(_NUM_106)){ - #ifdef RGBLED_BACK - led_ripple_effect(127,0,61); - #else - rgblight_setrgb(127,0,61); - #endif - }else if(IS_LAYER_ON(_SYM)||IS_LAYER_ON(_SYM_106)){ - #ifdef RGBLED_BACK - led_ripple_effect(0,127,0); - #else - rgblight_setrgb(0,127,0); - #endif - }else if(IS_LAYER_ON(_OPT)||IS_LAYER_ON(_OPT_106)){ - #ifdef RGBLED_BACK - led_ripple_effect(127,0,100); - #else - rgblight_setrgb(127,0,100); - #endif - } else { - #ifdef RGBLED_BACK - led_ripple_effect(0,112,127); - #else - rgblight_setrgb(0,112,127); - #endif - } - } - #endif -} - -//OLED update loop -#ifdef OLED_ENABLE - -// Render to OLED -void render_status(void) { - - // froggy logo - static char logo[4][17]= - { - {0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0}, - {0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,0}, - {0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,0}, - {0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0}, - }; - - static char modectl[4][2][4]= - { - { - {0x65,0x66,0x67,0}, //WIN - {0x85,0x86,0x87,0}, //WIN - }, - { - {0xa5,0xa6,0xa7,0}, //US(101) - {0xc5,0xc6,0xc7,0}, //US(101) - }, - { - {0xbd,0xbe,0xbf,0}, //MAC - {0xdd,0xde,0xdf,0}, //MAC - }, - { - {0xba,0xbb,0xbc,0}, //JP(106) - {0xda,0xdb,0xdc,0}, //JP(106) - }, - }; - - static char indctr[8][2][4]= - { - // white icon - { - {0x60,0x61,0x62,0}, //NUM - {0x63,0x64,0} //FUNC - }, - { - {0x80,0x81,0x82,0}, //NUM - {0x83,0x84,0} //FUNC - }, - { - {0xa0,0xa1,0xa2,0}, //CAPS - {0xa3,0xa4,0} //SCLK - }, - { - {0xc0,0xc1,0xc2,0}, //CAPS - {0xc3,0xc4,0} //SCLK - }, - // Black icon - { - {0x75,0x76,0x77,0}, //NUM - {0x78,0x79,0} //FUNC - }, - { - {0x95,0x96,0x97,0}, //NUM - {0x98,0x99,0} //FUNC - }, - { - {0xb5,0xb6,0xb7,0}, //CAPS - {0xb8,0xb9,0} //SCLK - }, - { - {0xd5,0xd6,0xd7,0}, //CAPS - {0xd8,0xd9,0} //SCLK - }, - }; - - int rown = 0; - int rowf = 0; - int rowa = 0; - int rows = 0; - int rowm = 0; - int rowj = 1; - - //Set Indicator icon - led_t led_state = host_keyboard_led_state(); - if (led_state.num_lock) { rown = 4; } - if (led_state.caps_lock) { rowa = 4; } - if (led_state.scroll_lock) { rows = 4; } - if (IS_LAYER_ON(_FUNC)) { rowf = 4; } - - //Set Mode icon - if (IS_MODE_MAC()) { rowm = 2; } - if (IS_MODE_106()) { rowj = 3; } - - oled_write(indctr[rown] [0], false); - oled_write(indctr[rowf] [1], false); - oled_write(modectl[rowm] [0], false); - oled_write(logo[0], false); - oled_write(indctr[rown+1][0], false); - oled_write(indctr[rowf+1][1], false); - oled_write(modectl[rowm] [1], false); - oled_write(logo[1], false); - oled_write(indctr[rowa+2][0], false); - oled_write(indctr[rows+2][1], false); - oled_write(modectl[rowj] [0], false); - oled_write(logo[2], false); - oled_write(indctr[rowa+3][0], false); - oled_write(indctr[rows+3][1], false); - oled_write(modectl[rowj] [1], false); - oled_write(logo[3], false); - -} - -bool oled_task_user(void) { - -#if DEBUG_TO_SCREEN - if (debug_enable) { - return; - } -#endif - - if (is_keyboard_master()) { - render_status(); - } - return false; -} - -#endif // end of OLED_ENABLE - -// Local Variables: -// mode: c++ -// truncate-lines: t -// indent-tabs-mode: nil -// End: diff --git a/keyboards/helix/rev2/keymaps/froggy_106/readme.md b/keyboards/helix/rev2/keymaps/froggy_106/readme.md deleted file mode 100644 index 911fb404321c..000000000000 --- a/keyboards/helix/rev2/keymaps/froggy_106/readme.md +++ /dev/null @@ -1,85 +0,0 @@ -Froggy -one hand Helix- with 106-key mode -====== - -![Imgur](https://i.imgur.com/S1Dw3XW.jpg) - -## Features -It is a one-handed keyboard with reference to Frogpad. Layout Designed by タクマ ([@humid](https://twitter.com/humid)). - -This keymap has 106-key mode, This is usable when keyboard setting of OS is OADG 106/109 keyboard. - -## Layout -### Base -``` -,-----------------------------------------. -| C+z | ; | [ | ( | < | { | -|------+------+------+------+------+------| -| KANA | P | K | R | A | F | -|------+------+------+------+------+------| -| BS | D | T | H | E | O | -|------+------+------+------+------+------+------. -| Shift| Y | S | N | I | U | Space| -|------+------+------+------+------+------+------| -| Ctrl | Alt | win | Sym | Num | OPT | Ent | -`------------------------------------------------' -``` - -### Opt -``` -,-----------------------------------------. -| Esc | : | ] | ) | > | } | -|------+------+------+------+------+------| -| EISU | J | M | B | ' | Tab | -|------+------+------+------+------+------| -| . | V | C | L | Z | Q | -|------+------+------+------+------+------+------. -| | X | G | W | - | Del | Esc | -|------+------+------+------+------+------+------| -| | | | , | DTOP | | | -`------------------------------------------------' -``` - -### Num -``` -,-----------------------------------------. -| | | Func | home | End | | -|------+------+------+------+------+------| -| | * | 7 | 8 | 9 | - | -|------+------+------+------+------+------| -| . | / | 4 | 5 | 6 | + | -|------+------+------+------+------+------+------. -| LN | 0 | 1 | 2 | 3 |C+S+F1| | -|------+------+------+------+------+------+------| -| | | | , | | | | -`------------------------------------------------' -``` - -### Sym -``` -,-----------------------------------------. -| Ins | GRV | | PU | PD | ^ | -|------+------+------+------+------+------| -| | \ | # | = | ? | % | -|------+------+------+------+------+------| -| | $ | upA | @ | ! | | | -|------+------+------+------+------+------+------. -| CL | <- | dwA | -> | _ | & | | -|------+------+------+------+------+------+------| -| | | PS | | ~ | | | - `-----------------------------------------------' -``` - -### Func -``` -,-----------------------------------------. -|RGBRST| Hue | to101| RST | Mac | Win | -|------+------+------+------+------+------| -| RGB1 | VAL+ | F7 | F8 | F9 | to106| -|------+------+------+------+------+------| -| RGB2 | VAL- | F4 | F5 | F6 | F12 | -|------+------+------+------+------+------+------. -| RGB3 | F10 | F1 | F2 | F3 | F11 | | -|------+------+------+------+------+------+------| -|RGBOFF| | | | | | | -`------------------------------------------------' -``` diff --git a/keyboards/helix/rev2/keymaps/froggy_106/rules.mk b/keyboards/helix/rev2/keymaps/froggy_106/rules.mk deleted file mode 100644 index b77e8af4f2ae..000000000000 --- a/keyboards/helix/rev2/keymaps/froggy_106/rules.mk +++ /dev/null @@ -1,27 +0,0 @@ -# QMK Standard Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# -# See TOP/keyboards/helix/rules.mk for a list of options that can be set. -# See TOP/docs/config_options.md for more information. -# -LTO_ENABLE = yes # if firmware size over limit, try this option -SPLIT_KEYBOARD = yes - -# Helix Spacific Build Options -# you can uncomment and edit follows 7 Variables -# jp: 以下の7つの変数を必要に応じて編集し、コメントアウトをはずします。 -OLED_ENABLE = yes # OLED_ENABLE -LOCAL_GLCDFONT = yes # use each keymaps "helixfont.h" insted of "common/glcdfont.c" -LED_BACK_ENABLE = yes # LED backlight (Enable WS2812 RGB underlight.) -LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.) -LED_ANIMATIONS = yes # LED animations -# IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone) - -# OLED_ENABLE が yes のとき -# OLED_SELECT が core ならば QMK 標準の oled_dirver.c を使用します。 -# OLED_SELECT が core 以外ならば従来どおり helix/local_drivers/ssd1306.c を使用します。 -# If OLED_ENABLE is 'yes' -# If OLED_SELECT is 'core', use QMK standard oled_dirver.c. -# If OLED_SELECT is other than 'core', use helix/local_drivers/ssd1306.c. -OLED_SELECT = core diff --git a/keyboards/hotdox76v2/keymaps/dancxjo/config.h b/keyboards/hotdox76v2/keymaps/dancxjo/config.h deleted file mode 100644 index fac328091d30..000000000000 --- a/keyboards/hotdox76v2/keymaps/dancxjo/config.h +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright 2023 Travis Reed (@dancxjo) -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once -#define DYNAMIC_KEYMAP_LAYER_COUNT 5 -#define EE_HANDS diff --git a/keyboards/hotdox76v2/keymaps/dancxjo/keymap.c b/keyboards/hotdox76v2/keymaps/dancxjo/keymap.c deleted file mode 100644 index 1f55685de060..000000000000 --- a/keyboards/hotdox76v2/keymaps/dancxjo/keymap.c +++ /dev/null @@ -1,177 +0,0 @@ -// Copyright 2023 Travis Reed (@dancxjo) -// SPDX-License-Identifier: GPL-2.0-or-later - -#include QMK_KEYBOARD_H - -enum layer { - _ENGRAM = 0, - _QWERTY, - _ENGRAM_SHIFT, - _FUNCTION, - _MEDIA -}; - -/* Combines the compose key (right super) and the AltGr */ -#define KC_COMP MT(MOD_RALT, KC_RGUI) -#define KC_SCMP MT(MOD_RSFT | MOD_RALT, KC_RGUI) - -#define KC_STAB MT(MOD_LSFT, KC_TAB) - -/* Use a fake shift layer since Engram switches level 2 assignments */ -#define KC_PSFT MO(_ENGRAM_SHIFT) - -#define KC_FUNC TT(_FUNCTION) -#define KC_MEDI TT(_MEDIA) - -/* Easily switch between MacOS & other OSes*/ -#define KC_HLM1 LM(1, MOD_LCTL) -#define KC_HLM2 LM(1, MOD_LGUI) -#define KC_SHM1 LM(1, MOD_LCTL | MOD_LSFT) -#define KC_SHM2 LM(1, MOD_LGUI | MOD_LSFT) -#define KC_STRN RSFT(KC_TRNS) - -#define KC_FORW LGUI(KC_TAB) -#define KC_BACK LGUI(LSFT(KC_TAB)) - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Differs slightly from official Engram in that {} are the level 1 and [] are the level 2 */ - [_ENGRAM] = LAYOUT_ergodox_pretty( - KC_LCBR, KC_1, KC_2, KC_3, KC_4, KC_5, CG_NORM, KC_PAUSE, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RCBR, - KC_TAB, KC_B, KC_Y, KC_O, KC_U, KC_QUOT, KC_AT, KC_HASH, KC_DQUO, KC_L, KC_D, KC_W, KC_V, KC_Z, - KC_CAPS, KC_C, KC_I, KC_E, KC_A, KC_COMM, KC_DOT, KC_H, KC_T, KC_S, KC_N, KC_Q, - KC_PSFT, KC_G, KC_X, KC_J, KC_K, KC_MINS, KC_SLSH, KC_PSCR, KC_QUES, KC_R, KC_M, KC_F, KC_P, KC_PSFT, - KC_HLM1, KC_FUNC, KC_MEDI, KC_LALT, KC_HLM2, KC_RGUI, KC_RALT, KC_MEDI, KC_FUNC,KC_HLM1, - KC_INS, KC_HOME, KC_END, KC_DEL, - KC_PGUP, KC_PGDN, - KC_ENT, KC_ESC, KC_LSFT, KC_RSFT, KC_BSPC, KC_SPC - ), - [_ENGRAM_SHIFT] = LAYOUT_ergodox_pretty( - KC_LBRC, KC_PIPE, KC_EQL, KC_TILD, KC_PLUS, KC_LT, CG_SWAP, KC_STRN, KC_GT, KC_CIRC, KC_AMPR, KC_PERC, KC_ASTR, KC_RBRC, - KC_STRN, RSFT(KC_B), RSFT(KC_Y), RSFT(KC_O), RSFT(KC_U), KC_LPRN, KC_GRV, KC_DLR, KC_RPRN, RSFT(KC_L), RSFT(KC_D), RSFT(KC_W), RSFT(KC_V), RSFT(KC_Z), - KC_STRN, RSFT(KC_C), RSFT(KC_I), RSFT(KC_E), RSFT(KC_A), KC_SCLN, KC_COLN, RSFT(KC_H), RSFT(KC_T), RSFT(KC_S), RSFT(KC_N), RSFT(KC_Q), - KC_TRNS, RSFT(KC_G), RSFT(KC_X), RSFT(KC_J), RSFT(KC_K), KC_UNDS, KC_BSLS, KC_STRN, KC_EXLM, RSFT(KC_R), RSFT(KC_M), RSFT(KC_F), RSFT(KC_P), KC_TRNS, - KC_SHM1, KC_STRN, KC_STRN, KC_STRN, KC_SHM2, KC_STRN, KC_STRN, KC_STRN, KC_STRN, KC_SHM1, - KC_STRN, KC_STRN, KC_HYPR, KC_STRN, - KC_STRN, KC_STRN, - KC_SHM1, KC_STRN, KC_STRN, KC_SHM2, KC_STRN, KC_STRN - ), - [_QWERTY] = LAYOUT_ergodox_pretty( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - KC_TRNS, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_TRNS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_EQL, KC_TRNS, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS - ), - [_FUNCTION] = LAYOUT_ergodox_pretty( - KC_PSCR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_BRID, KC_BRIU, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PWR, - KC_APP, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, TG(1), TG(1), KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_SLEP, - KC_SCRL, KC_F21, KC_F22, KC_F23, KC_F24, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WAKE, - KC_PAUS, KC_UNDO, KC_CUT, KC_COPY, KC_PSTE, KC_NO, CG_SWAP, CG_NORM, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, QK_BOOT, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - RGB_SAD, RGB_HUD, RGB_HUI, RGB_SAI, - RGB_RMOD, RGB_MOD, - RGB_SPD, RGB_VAD, KC_TRNS, KC_TRNS, RGB_VAI, RGB_SPI - ), - [_MEDIA] = LAYOUT_ergodox_pretty( - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WREF, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, KC_NO, KC_NO, KC_NO, KC_WREF, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_UP, KC_PGDN, KC_MSEL, KC_NO, - KC_NO, KC_NO, KC_WSTP, KC_MYCM, KC_WSCH, KC_FIND, KC_WHOM, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO, KC_NO, - KC_LSFT, KC_NO, KC_NO, KC_CALC, KC_NO, KC_WFAV, KC_NO, KC_NO, KC_NO, KC_HOME, KC_MAIL, KC_END, KC_NO, KC_NO, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_MUTE, KC_EJCT, KC_MSTP, KC_MPLY, - KC_MPRV, KC_MNXT, - KC_MRWD, KC_VOLD, KC_TRNS, KC_TRNS, KC_VOLU, KC_MFFD - ) -}; - -char* get_layer_name(uint8_t layer, bool capitalized) { - char *layer_name = "Unknown "; - - switch (layer) { - case _ENGRAM: - case _ENGRAM_SHIFT: - if (capitalized) { - layer_name = "ENGRAM "; - } else { - layer_name = "engram "; - } - break; - case _QWERTY: - if (capitalized) { - layer_name = "QWERTY "; - } else { - layer_name = "qwerty "; - } - break; - case _MEDIA: - layer_name = "Media+ "; - break; - case _FUNCTION: - layer_name = "Function"; - break; - } - return layer_name; -} - -void render_locks(led_t led_state) { - oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false); - oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false); - oled_write_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false); -} - -void render_mods(uint8_t modifiers, uint8_t layer) { - oled_write_P(modifiers & MOD_MASK_GUI ? PSTR("Super") : PSTR(" "), false); - oled_write_P(PSTR(" "), false); - oled_write_P(modifiers & MOD_MASK_ALT ? PSTR("Alt") : PSTR(" "), false); - oled_write_P(PSTR(" "), false); - oled_write_P(modifiers & MOD_MASK_CTRL ? PSTR("Ctl") : PSTR(" "), false); - oled_write_P(PSTR(" "), false); - - if (layer == _ENGRAM_SHIFT) { - oled_write_P(PSTR("Pseudo"), false); - } else { - oled_write_P(modifiers & MOD_MASK_SHIFT ? PSTR("Shift ") : PSTR(" "), false); - } -} - -char* get_helm_key(void) { - if (keymap_config.swap_lctl_lgui) { - return "Super"; - } else { - return "Control"; - } -} - -bool oled_task_user(void) { - uint8_t layer = get_highest_layer(layer_state); - uint8_t modifiers = get_mods()|get_oneshot_mods(); - led_t led_state = host_keyboard_led_state(); - - bool real_shifted = modifiers & MOD_MASK_SHIFT; - bool pseudo_shifted = layer == _ENGRAM_SHIFT; - bool shifted = real_shifted || pseudo_shifted; - bool caps = led_state.caps_lock; - bool capitalized = (caps && !shifted) || (!caps && shifted); - - oled_write_P(PSTR("Layer: "), false); - oled_write(get_layer_name(layer, capitalized), false); - oled_write_P(PSTR("\n"), false); - - // Only the master knows if we've swapped the gui and ctl key - if (is_keyboard_master()) { - oled_write_P(PSTR(" Helm: "), false); - oled_write(get_helm_key(), false); - } - - oled_write_P(PSTR("\n"), false); - - render_mods(modifiers, layer); - oled_write_P(PSTR("\n"), false); - - render_locks(led_state); - - return false; -} diff --git a/keyboards/hotdox76v2/keymaps/dancxjo/rules.mk b/keyboards/hotdox76v2/keymaps/dancxjo/rules.mk deleted file mode 100644 index bc20eb20b7ce..000000000000 --- a/keyboards/hotdox76v2/keymaps/dancxjo/rules.mk +++ /dev/null @@ -1,4 +0,0 @@ -COMMAND_ENABLE = yes -VIA_ENABLE = yes -EXTRAKEY_ENABLE = no -MOUSEKEY_ENABLE = no diff --git a/keyboards/hs60/v2/hhkb/keymaps/goatmaster/config.h b/keyboards/hs60/v2/hhkb/keymaps/goatmaster/config.h deleted file mode 100644 index 50c76489e656..000000000000 --- a/keyboards/hs60/v2/hhkb/keymaps/goatmaster/config.h +++ /dev/null @@ -1,22 +0,0 @@ -/* -Copyright 2018 Yiancar - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ -#pragma once - -/* Include overwrites for specific keymap */ - -#undef RGB_BACKLIGHT_CAPS_LOCK_INDICATOR -#define RGB_BACKLIGHT_CAPS_LOCK_INDICATOR { .color = { .h = 0, .s = 255 }, .index = 3-1 } //red diff --git a/keyboards/hs60/v2/hhkb/keymaps/goatmaster/keymap.c b/keyboards/hs60/v2/hhkb/keymaps/goatmaster/keymap.c deleted file mode 100644 index 374dc6ad4b5e..000000000000 --- a/keyboards/hs60/v2/hhkb/keymaps/goatmaster/keymap.c +++ /dev/null @@ -1,71 +0,0 @@ -/* Copyright 2018 Yiancar - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include QMK_KEYBOARD_H - -//This is the HHKB version of the PCB - -enum macro_keys { - KC_EML = SAFE_RANGE -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = LAYOUT_60_hhkb( /* Base */ - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSLS, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, - KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL ), - -[1] = LAYOUT_60_hhkb( /* FN */ - QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, - KC_TRNS, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, BR_DEC, BR_INC, ES_DEC, ES_INC, KC_UP, KC_TRNS, KC_DEL, - KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, - KC_TRNS, KC_TRNS, S1_DEC, S1_INC, S2_DEC, S2_INC, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), - -[2] = LAYOUT_60_hhkb( /* Empty for dynamic keymaps */ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), - -[3] = LAYOUT_60_hhkb( /* Empty for dynamic keymaps */ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), -}; - -void matrix_init_user(void) { - //user initialization -} - -void matrix_scan_user(void) { - //user matrix -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case KC_EML: //use "KC_EML" as keycode in layers above to call macro - if (!record->event.pressed) { - send_string_with_delay_P(PSTR("example@email.com"), 10); //change email value here - } - break; - } - return true; -} diff --git a/keyboards/hs60/v2/hhkb/keymaps/goatmaster/readme.md b/keyboards/hs60/v2/hhkb/keymaps/goatmaster/readme.md deleted file mode 100644 index ea9803cc0bbb..000000000000 --- a/keyboards/hs60/v2/hhkb/keymaps/goatmaster/readme.md +++ /dev/null @@ -1,6 +0,0 @@ -The default keymap for HHKB HS60 V2. VIA support enabled. -========================================================= - -![Layout image](https://imgur.com/usbrQWL.png) - -Default layer is normal HHKB with 7U space. Fn layer is used for RGB functions, Volume control and arrow cluster \ No newline at end of file diff --git a/keyboards/hs60/v2/hhkb/keymaps/goatmaster/rules.mk b/keyboards/hs60/v2/hhkb/keymaps/goatmaster/rules.mk deleted file mode 100644 index 1e5b99807cb7..000000000000 --- a/keyboards/hs60/v2/hhkb/keymaps/goatmaster/rules.mk +++ /dev/null @@ -1 +0,0 @@ -VIA_ENABLE = yes diff --git a/keyboards/lazydesigners/dimple/staggered/keymaps/oncesavedgaming/keymap.c b/keyboards/lazydesigners/dimple/staggered/keymaps/oncesavedgaming/keymap.c deleted file mode 100644 index e490d6890072..000000000000 --- a/keyboards/lazydesigners/dimple/staggered/keymaps/oncesavedgaming/keymap.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright 2021 LAZYDESIGNERS - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT(KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, RSFT(KC_SLSH), KC_DEL, KC_ESC, KC_LALT, KC_SPC, LT(1,KC_SPC), KC_RALT, KC_RGUI, KC_LCTL), - [1] = LAYOUT(KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, QK_BOOT, RGB_SPI, RGB_SPD, RGB_M_P, RGB_M_B, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, KC_SCLN, KC_NO, KC_LSFT, RGB_TOG, RGB_MOD, RGB_RMOD, RGB_HUI, RGB_HUD, RGB_VAI, RGB_VAD, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, MO(2), KC_NO, KC_LEFT, KC_DOWN, KC_RGHT), - [2] = LAYOUT(KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO) -}; diff --git a/keyboards/lfkeyboards/lfk78/keymaps/ca178858/keymap.c b/keyboards/lfkeyboards/lfk78/keymaps/ca178858/keymap.c deleted file mode 100644 index 80e267e45865..000000000000 --- a/keyboards/lfkeyboards/lfk78/keymaps/ca178858/keymap.c +++ /dev/null @@ -1,136 +0,0 @@ -#include QMK_KEYBOARD_H - -enum keymap_layout { - VANILLA = 0, // matches MF68 layout - CS_GO, // 0x08 - FUNC, // 0x10 - SETTINGS, // 0x20 -}; - -enum { - TD_ESC_FUNC = 0, - TD_ESC_CTRL, - TD_SPC_SPAM -}; - -bool spam_space = false; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Keymap BASE: (Base Layer) Default Layer - * ,---------. ,------------------------------------------------------------. ,---------. - * |Vol-|Vol+| |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| | Ins|PgUp| - * |---------| |------------------------------------------------------------| |---------| - * | F3 | F4 | |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del|PgDn| - * |---------| |------------------------------------------------------------| `---------' - * | F5 | F6 | |Control | A| S| D| F| G| H| J| K| L| ;| '|Return | - * |---------| |------------------------------------------------------------| ,----. - * | F7 | F8 | |Shift | Z| X| C| V| B| N| M| ,| .| /| Shift | | Up | - * |---------| |-------------------------------------------------------------------------. - * | F9 | F10| |Func|Alt |Cmd | Space |Cmd |Alt |Func | |Lft| Dn |Rig | - * `---------' `------------------------------------------------------' `-------------' - */ - [VANILLA] = LAYOUT_split_rshift( - KC_VOLD, KC_VOLU, QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, LALT(KC_F5), KC_PGUP, - KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN, - KC_F5, KC_F6, TD(TD_ESC_FUNC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, - KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(CS_GO), KC_UP, - KC_F9, KC_F10, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT - ), - - [CS_GO] = LAYOUT_split_rshift( - _______, _______, QK_GESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, KC_LCTL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ - ), - - /* Keymap FUNCTION: Function Layer - * ,---------. ,-------------------------------------------------------------. ,---------. - * | V- | V+ | | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | Ins|Home| - * |---------| |-------------------------------------------------------------| |---------| - * | | | |Tab | |PgU| | | | | | Up| | | | | | | Del|End | - * |---------| |-------------------------------------------------------------| `---------' - * | | | |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | | - * |---------| |-------------------------------------------------------------| ,----. - * | | | |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up | - * |---------| |--------------------------------------------------------------------------. - * | | F10| |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig | - * `---------' `------------------------------------------------------' `-------------' - */ - [FUNC] = LAYOUT_split_rshift( - _______, _______, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, TO(CS_GO), KC_HOME, - _______, _______, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_END, - _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, - _______, _______, _______, XXXXXXX, KC_DEL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), XXXXXXX, _______, - _______, _______, _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______ - ), - - /* Keymap SETTINGS: Settings Layer - * ,---------. ,-----------------------------------------------------------. ,-------------. - * | | | |FN0 |BL0|BL1|BL2|BL3| | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+| - * |---------| |-----------------------------------------------------------| |-------------| - * | | | |Debug| | | | | | | | | | | | |RGBTst| |RGB Mode|Val-| - * |---------| |-----------------------------------------------------------| `-------------' - * | | | |LayrClr|Hz+|MS+| | | | | | | | | | RST | - * |---------| |-----------------------------------------------------------| ,----. - * | | | |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+| - * |---------| |------------------------------------------------------------------------. - * | | | | | | | Print Debug | | | | |Sat-|Hue-|Sat+| - * `---------' `------------------------------------------------------' `--------------' - */ - [SETTINGS] = LAYOUT_split_rshift( - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DOWN, BL_UP, BL_TOGG, RGB_TOG, RGB_VAI, - XXXXXXX, XXXXXXX, DB_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_VAD, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SAD, RGB_HUD, RGB_SAI - ) -}; - -void tap_space_spam_finished(tap_dance_state_t *state, void *user_data) { - if (get_mods() & (MOD_BIT(KC_LGUI))) { - return; - } - if (state->pressed) { - spam_space = true; - } - tap_code(KC_SPC); -} - -void tap_space_spam_reset(tap_dance_state_t *state, void *user_data) { - spam_space = false; - unregister_code(KC_SPC); -} - -void tap_esc_func_finished(tap_dance_state_t *state, void *user_data) { - if (state->pressed) { - layer_on(FUNC); - } else { - tap_code(KC_ESC); - } -} - -void tap_esc_func_reset(tap_dance_state_t *state, void *user_data) { - layer_off(FUNC); -} - -tap_dance_action_t tap_dance_actions[] = { - [TD_ESC_FUNC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_esc_func_finished, tap_esc_func_reset), - [TD_SPC_SPAM] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_space_spam_finished, tap_space_spam_reset), -}; - -void matrix_scan_user(void) { - if (spam_space && !(get_mods() & (MOD_BIT(KC_LGUI)))) { - tap_code(KC_SPC); - } -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - if ((layer_state & (1 << CS_GO)) && (keycode == 44)) { - if (get_mods() & (MOD_BIT(KC_LGUI))) { - return false; - } - } - return true; -} diff --git a/keyboards/lfkeyboards/lfk78/keymaps/ca178858/readme.md b/keyboards/lfkeyboards/lfk78/keymaps/ca178858/readme.md deleted file mode 100644 index 85b7b1a8d281..000000000000 --- a/keyboards/lfkeyboards/lfk78/keymaps/ca178858/readme.md +++ /dev/null @@ -1 +0,0 @@ -# The default keymap for bluepad diff --git a/keyboards/lfkeyboards/lfk78/keymaps/ca178858/rules.mk b/keyboards/lfkeyboards/lfk78/keymaps/ca178858/rules.mk deleted file mode 100644 index 732bfcfa8f58..000000000000 --- a/keyboards/lfkeyboards/lfk78/keymaps/ca178858/rules.mk +++ /dev/null @@ -1,3 +0,0 @@ -AUDIO_ENABLE = no -TAP_DANCE_ENABLE = yes -WATCHDOG_ENABLE = yes # Resets keyboard if matrix_scan isn't run every 250ms diff --git a/keyboards/lfkeyboards/lfk87/keymaps/ca178858/keymap.c b/keyboards/lfkeyboards/lfk87/keymaps/ca178858/keymap.c deleted file mode 100644 index 3be46837c1d7..000000000000 --- a/keyboards/lfkeyboards/lfk87/keymaps/ca178858/keymap.c +++ /dev/null @@ -1,170 +0,0 @@ -#include QMK_KEYBOARD_H - -enum keymap_layout { - VANILLA = 0, // matches MF68 layout - DEFAULT_WKL, // 0x02 Function in CapsLock location, gui key disabled - DEFAULT_OSX, // 0x04 Function in CapsLock location, gui/alt swapped for OSX - CS_GO, // 0x08 Function in CapsLock location, gui/alt swapped for OSX - FUNC, // 0x10 - SETTINGS, // 0x20 -}; - -enum { - TD_ESC_FUNC = 0, -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Keymap VANILLA: (Base Layer) Default Layer - * ,-----------------------------------------------------------------------------. - * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus| - * |-----------------------------------------------------------| |--------------| - * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp| - * |-----------------------------------------------------------| |--------------| - * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn| - * |-----------------------------------------------------------| `--------------' - * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return | - * |-----------------------------------------------------------| ,----. - * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up | - * |-----------------------------------------------------------| ,-------------. - * |Ctrl|Gui |Alt | Space |ALT |GUI |CTRL |Func| |Lft| Dn |Rig | - * `-----------------------------------------------------------' `-------------' - */ - [VANILLA] = LAYOUT_tkl_ansi( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), MO(SETTINGS), KC_LEFT, KC_DOWN, KC_RGHT - ), - - /* Keymap DEFAULT_TKL: (Base Layer) Default Layer - * ,-----------------------------------------------------------------------------. - * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus| - * |-----------------------------------------------------------| |--------------| - * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp| - * |-----------------------------------------------------------| |--------------| - * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn| - * |-----------------------------------------------------------| `--------------' - * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return | - * |-----------------------------------------------------------| ,----. - * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up | - * |-----------------------------------------------------------| ,-------------. - * |Ctrl| |Alt | Space |ALT | |CTRL |Func| |Lft| Dn |Rig | - * `-----------------------------------------------------------' `-------------' - */ - [DEFAULT_WKL] = LAYOUT_tkl_ansi( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT - ), - - /* Keymap DEFAULT_OSX: (Base Layer) Default Layer - * ,-----------------------------------------------------------------------------. - * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus| - * |-----------------------------------------------------------| |--------------| - * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp| - * |-----------------------------------------------------------| |--------------| - * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn| - * |-----------------------------------------------------------| `--------------' - * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return | - * |-----------------------------------------------------------| ,----. - * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up | - * |-----------------------------------------------------------| ,-------------. - * |Ctrl| Opt |Cmd | Space |Cmd |Opt |CTRL |Func| |Lft| Dn |Rig | - * `-----------------------------------------------------------' `-------------' - */ - [DEFAULT_OSX] = LAYOUT_tkl_ansi( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_SCRL, KC_PAUS, LALT(KC_F5), - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, - TD(TD_ESC_FUNC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, - KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), MO(SETTINGS), KC_LEFT, KC_DOWN, KC_RGHT - ), - - [CS_GO] = LAYOUT_tkl_ansi( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - KC_LCTL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ - ), - - /* Keymap FUNCTION: Function Layer - * ,-------------------------------------------------------------. ,--------------. - * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus| - * |-------------------------------------------------------------| |--------------| - * | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | | | | - * |-------------------------------------------------------------| |--------------| - * |Tab | |PgU| | | | | | Up| | | | | | | | | | - * |-------------------------------------------------------------| `--------------' - * |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | | - * |-------------------------------------------------------------| ,----. - * |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up | - * |-------------------------------------------------------------' ,-------------. - * |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig | - * `------------------------------------------------------' `-------------' - */ - [FUNC] = LAYOUT_tkl_ansi( - KC_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, TO(CS_GO), _______, _______, - XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, - _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, - _______, XXXXXXX, KC_DEL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), _______, - _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______, _______ - ), - - /* Keymap SETTINGS: Settings Layer - * ,-----------------------------------------------------------. ,-------------. - * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus| - * |-------------------------------------------------------------| |--------------| - * |LayClr| | | | | | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+| - * |-----------------------------------------------------------| |-------------| - * |Debug| | | | | | | | | | | | |LEDTst| |RGB Mode|Val-| - * |-----------------------------------------------------------| `-------------' - * |AU_TOGG|Hz+|MS+| | | | | | | | | | RST | - * |-----------------------------------------------------------| ,----. - * |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+| - * |------------------------------------------------------------------------. - * | | | | Print Debug | | | | |Sat-|Hue-|Sat+| - * `------------------------------------------------------' `--------------' - */ - [SETTINGS] = LAYOUT_tkl_ansi( - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DOWN, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DOWN, BL_UP, BL_TOGG, RGB_TOG, RGB_VAI, XXXXXXX, - MU_NEXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_VAD, XXXXXXX, - AU_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, RGB_SAD, RGB_HUD, RGB_SAI - ) -}; - -void tap_esc_func_finished(tap_dance_state_t *state, void *user_data) { - if (state->pressed) { - layer_on(FUNC); - } else { - tap_code(KC_ESC); - } -} - -void tap_esc_func_reset(tap_dance_state_t *state, void *user_data) { - layer_off(FUNC); -} - -tap_dance_action_t tap_dance_actions[] = { - [TD_ESC_FUNC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_esc_func_finished, tap_esc_func_reset), -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - if ((layer_state & (1 << CS_GO)) && (keycode == 44)) { - if (get_mods() & (MOD_BIT(KC_LGUI))) { - return false; - } - } - return true; -} diff --git a/keyboards/lfkeyboards/lfk87/keymaps/ca178858/readme.md b/keyboards/lfkeyboards/lfk87/keymaps/ca178858/readme.md deleted file mode 100644 index 56742f3b282c..000000000000 --- a/keyboards/lfkeyboards/lfk87/keymaps/ca178858/readme.md +++ /dev/null @@ -1 +0,0 @@ -# The default keymap for LFK87 diff --git a/keyboards/lfkeyboards/lfk87/keymaps/ca178858/rules.mk b/keyboards/lfkeyboards/lfk87/keymaps/ca178858/rules.mk deleted file mode 100644 index eb12c33f4a36..000000000000 --- a/keyboards/lfkeyboards/lfk87/keymaps/ca178858/rules.mk +++ /dev/null @@ -1,2 +0,0 @@ -TAP_DANCE_ENABLE = yes -WATCHDOG_ENABLE = yes # Resets keyboard if matrix_scan isn't run every 250ms diff --git a/keyboards/lfkeyboards/mini1800/keymaps/ca178858/keymap.c b/keyboards/lfkeyboards/mini1800/keymaps/ca178858/keymap.c deleted file mode 100644 index 9e3927f54578..000000000000 --- a/keyboards/lfkeyboards/mini1800/keymaps/ca178858/keymap.c +++ /dev/null @@ -1,108 +0,0 @@ -#include QMK_KEYBOARD_H - -enum keymap_layout { - VANILLA = 0, // matches MF68 layout - FUNC, // 0x08 - SETTINGS, // 0x10 -}; - -enum { - TD_ESC_FUNC = 0, - TD_ESC_CTRL, - TD_SPC_SPAM -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Keymap VANILLA: (Base Layer) Default Layer - * ,-----------------------------------------------------------------------------. - * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus| - * |-----------------------------------------------------------| |--------------| - * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp| - * |-----------------------------------------------------------| |--------------| - * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn| - * |-----------------------------------------------------------| `--------------' - * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return | - * |-----------------------------------------------------------| ,----. - * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up | - * |-----------------------------------------------------------| ,-------------. - * |Ctrl|Gui |Alt | Space |ALT |GUI |Func|CTRL | |Lft| Dn |Rig | - * `-----------------------------------------------------------' `-------------' - */ - [VANILLA] = LAYOUT( - QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS, - TD(TD_ESC_FUNC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, LALT(KC_F5), - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, - KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT - ), - - /* Keymap FUNCTION: Function Layer - * ,-------------------------------------------------------------. ,--------------. - * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus| - * |-------------------------------------------------------------| |--------------| - * | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | | | | - * |-------------------------------------------------------------| |--------------| - * |Tab | |PgU| | | | | | Up| | | | | | | | | | - * |-------------------------------------------------------------| `--------------' - * |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | | - * |-------------------------------------------------------------| ,----. - * |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up | - * |-------------------------------------------------------------' ,-------------. - * |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig | - * `------------------------------------------------------' `-------------' - */ - [FUNC] = LAYOUT( - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______, _______, _______, _______, - XXXXXXX, KC_HOME, KC_UP, KC_END, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, - _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, - _______, XXXXXXX, KC_DEL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), _______, _______, _______, _______, _______, - _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______, _______, _______ - ), - - /* Keymap SETTINGS: Settings Layer - * ,-----------------------------------------------------------. ,-------------. - * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus| - * |-------------------------------------------------------------| |--------------| - * |FN0 | | | | | | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+| - * |-----------------------------------------------------------| |-------------| - * |MuMode| | | | | | | | | | | | |LEDTst| |RGB Mode|Val-| - * |-----------------------------------------------------------| `-------------' - * |AudTgl |Hz+|MS+| | | | | | | | | | RST | - * |-----------------------------------------------------------| ,----. - * |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+| - * |--------------------------------------------------------------------------. - * | | | | | | | | | |Sat-|Hue-|Sat+| - * `----------------------------------------------------------------------------' - */ - [SETTINGS] = LAYOUT( - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DOWN, BL_UP, BL_TOGG, RGB_TOG, RGB_VAI, XXXXXXX, XXXXXXX, - MU_NEXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_VAD, XXXXXXX, XXXXXXX, - AU_TOGG, KC_F1, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SAD, RGB_HUD, RGB_SAI, XXXXXXX, XXXXXXX - ) -}; - -void tap_esc_func_finished(tap_dance_state_t *state, void *user_data) { - if (state->pressed) { - layer_on(FUNC); - } else { - tap_code(KC_ESC); - } -} - -void tap_esc_func_reset(tap_dance_state_t *state, void *user_data) { - layer_off(FUNC); -} - -tap_dance_action_t tap_dance_actions[] = { - [TD_ESC_FUNC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_esc_func_finished, tap_esc_func_reset), -}; - -void matrix_init_user(void) { - // This keymap only has a single base layer, so reset the default if needed - if (eeconfig_read_default_layer() > 1) { - eeconfig_update_default_layer(1); - default_layer_set(1); - } -} diff --git a/keyboards/lfkeyboards/mini1800/keymaps/ca178858/rules.mk b/keyboards/lfkeyboards/mini1800/keymaps/ca178858/rules.mk deleted file mode 100644 index e5ddcae8d927..000000000000 --- a/keyboards/lfkeyboards/mini1800/keymaps/ca178858/rules.mk +++ /dev/null @@ -1 +0,0 @@ -TAP_DANCE_ENABLE = yes diff --git a/keyboards/mechwild/mercutio/keymaps/fearless_spiff/config.h b/keyboards/mechwild/mercutio/keymaps/fearless_spiff/config.h deleted file mode 100644 index f29c91f9e000..000000000000 --- a/keyboards/mechwild/mercutio/keymaps/fearless_spiff/config.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright 2022 Fearless Spiff - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#define TAPPING_TERM 180 - -#define MK_KINETIC_SPEED -#define MOUSEKEY_DELAY 8 -#define MOUSEKEY_INTERVAL 5 -#define MOUSEKEY_MOVE_DELTA 1 -#define MOUSEKEY_INITIAL_SPEED 3 -#define MOUSEKEY_BASE_SPEED 120 -#define MOUSEKEY_DECELERATED_SPEED 100 -#define MOUSEKEY_ACCELERATED_SPEED 1000 diff --git a/keyboards/mechwild/mercutio/keymaps/fearless_spiff/keymap.c b/keyboards/mechwild/mercutio/keymaps/fearless_spiff/keymap.c deleted file mode 100644 index 76438f9dc3b9..000000000000 --- a/keyboards/mechwild/mercutio/keymaps/fearless_spiff/keymap.c +++ /dev/null @@ -1,301 +0,0 @@ -/* Copyright 2021 Kyle McCreery - * Copyright 2021 Jonavin Eng - * Copyright 2022 Fearless Spiff - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H -#include "keymap_german.h" - -// OLED setup for bongocat -#define IDLE_FRAMES 5 -#define IDLE_SPEED 30 -#define TAP_FRAMES 2 -#define TAP_SPEED 40 -#define ANIM_FRAME_DURATION 200 -#define ANIM_SIZE 512 - -#define LABEL_LENGTH 8 - -#define KC_CAD LALT(LCTL(KC_DEL)) -#define KC_TEAMS_CAM C(S(KC_O)) -#define KC_TEAMS_MUTE C(S(KC_M)) - -enum layers { - QWERT, - FN_1, - FN_2, - FN_MOUSE -}; - -enum custom_user_keycodes { - KC_ENC = SAFE_RANGE -}; - -static long int oled_timeout = 1800000; // 30 minutes -bool gui_on = true; -char wpm_str[10]; -uint32_t anim_timer = 0; -uint32_t anim_sleep = 0; -uint8_t current_idle_frame = 0; -uint8_t current_tap_frame = 0; - -// Tap Dance declarations -enum { - TD_TAB_ESC, -}; - -// Tap Dance definitions -tap_dance_action_t tap_dance_actions[] = { - // Tap once for Tab, twice for Esc - [TD_TAB_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_TAB, KC_ESC), -}; - -typedef struct { - char label_top[LABEL_LENGTH]; - char label_mid[LABEL_LENGTH]; - char label_bottom[LABEL_LENGTH]; - uint16_t keycode; -} encoder_key; - -static const encoder_key PROGMEM encoder_keys[] = { - // list of key codes that will be scrolled through by encoder and description - // Be aware that it only works when using one char less than defined. In this case 7 max. No idea why? - {"Teams", "Toggle", "Mic", KC_TEAMS_MUTE}, - {"Teams", "Toggle", "Cam", KC_TEAMS_CAM}, - {"Ctrl", "Alt", "Del", KC_CAD}, - {"Caps", "Lock", "", KC_CAPS_LOCK}, - {"Pause", "", "", KC_PAUSE}, - {"PrtScr", "", "", KC_PSCR}, - {"Insert", "", "", KC_INS}, - {"Play", "", "", KC_MEDIA_PLAY_PAUSE} -}; - -#define NUMBER_OF_ENCODER_KEYS ARRAY_SIZE(encoder_keys) - -static uint8_t selected_encoder_key_id = 0; -static encoder_key selected_encoder_key; - -static void set_selected_encoder_key(uint8_t idx) { - // make a copy from PROGMEM - memcpy_P (&selected_encoder_key, &encoder_keys[idx], sizeof selected_encoder_key); -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case KC_ENC: - if (record->event.pressed) { - tap_code16(selected_encoder_key.keycode); - } - break; - } - return true; -} - - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [QWERT] = LAYOUT_all( - KC_ENC, - TD(TD_TAB_ESC), KC_Q, KC_W, KC_E, KC_R, KC_T, DE_Z, KC_U, KC_I, KC_O, KC_P, KC_BSPC, - MO(FN_1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, DE_PLUS, KC_ENT, - KC_LSFT, DE_LABK, DE_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, - KC_LCTL, KC_LGUI, KC_LALT, LT(FN_2,KC_SPC), LT(FN_2,KC_SPC), LT(FN_2,KC_SPC), KC_RALT, DE_MINS, KC_RCTL ), - - [FN_1] = LAYOUT_all( - KC_MUTE, - QK_GESC, _______, _______, _______, DE_LCBR, DE_RCBR, _______, DE_UDIA, KC_UP, DE_ODIA, DE_QUES, KC_DEL, - _______, DE_ADIA, DE_SS, _______, DE_LPRN, DE_RPRN, _______, KC_LEFT, KC_DOWN, KC_RIGHT, DE_HASH, _______, - _______, _______, DE_CIRC, DE_ACUT, _______, DE_LBRC, DE_RBRC, KC_HOME, KC_END, DE_QUOT, DE_DQUO, DE_EQL, - _______, _______, _______, MO(FN_MOUSE), MO(FN_MOUSE), MO(FN_MOUSE), DE_BSLS, DE_SLSH, DE_TILD ), - - [FN_2] = LAYOUT_all( - _______, - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_BSPC, - KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_COMM, KC_DOT, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______ ), - - [FN_MOUSE] = LAYOUT_all( - _______, - _______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_MS_U, KC_BTN2, KC_BTN3, _______, - _______, _______, _______, _______, KC_ACL0, _______, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______ ) -}; - -#ifdef ENCODER_ENABLE - bool encoder_update_user(uint8_t index, bool clockwise) { - if (clockwise) { - if (IS_LAYER_ON(QWERT) && selected_encoder_key_id < NUMBER_OF_ENCODER_KEYS-1) { - selected_encoder_key_id ++; - set_selected_encoder_key(selected_encoder_key_id); - } - if (IS_LAYER_ON(FN_1)) { - tap_code16(KC_PGDN); - } - if (IS_LAYER_ON(FN_2)) { - tap_code(KC_VOLU); - } - } else { - if (IS_LAYER_ON(QWERT) && selected_encoder_key_id > 0) { - selected_encoder_key_id --; - set_selected_encoder_key(selected_encoder_key_id); - } - if (IS_LAYER_ON(FN_1)) { - tap_code16(KC_PGUP); - } - if (IS_LAYER_ON(FN_2)) { - tap_code(KC_VOLD); - } - } - return false; - } -#endif - -#ifdef OLED_ENABLE - oled_rotation_t oled_init_user(oled_rotation_t rotation) { - set_selected_encoder_key(selected_encoder_key_id); - - return OLED_ROTATION_180; // flips the display 180 degrees - } - - static void render_anim(void) { - - // Idle animation - static const char PROGMEM idle[IDLE_FRAMES][ANIM_SIZE] = { - - { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,16,8,8,4,4,4,8,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,100,130,2,2,2,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64, - 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,56,4,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,7, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - }, - - { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,16,8,8,4,4,4,8,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,100,130,2,2,2,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64, - 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,56,4,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8, - 7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - }, - - { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,64,64,64,64,32,32,32,32,16,8,4,2,2,4,24,96,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,194,1,1,2,2,4,4,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,96,0,129,130,130,132,8,16,32,64,128,0,0,0,0,128,128,128,128,64,64,64,64,32, - 32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,25,6,0,0,0,0,0,0,0,24,24,24,27,3,0,64,160,34,36,20,18,18,18,11,8,8,8,8,5,5,9,9,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,7,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - }, - - { - 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64, - 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8, - 7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - }, - - { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,8,4,2,2,2,4,56,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,226,1,1,2,2,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64,64,64, - 32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,7,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - } - - }; - - // Prep animation - static const char PROGMEM prep[][ANIM_SIZE] = { - - { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,129,128,128,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,0,1,225,26,6,9,49,53,1,138,124,0,0,128,128,128,128,64,64, - 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,24,6,5,152,153,132,195,124,65,65,64,64,32,33,34,18,17,17,17,9,8,8,8,8,4,4,4,4,4,4,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - } - - }; - - // Typing animation - static const char PROGMEM tap[TAP_FRAMES][ANIM_SIZE] = { - - { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,248,248,248,248,0,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,129,128,128,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,0,1,1,2,4,8,16,32,67,135,7,1,0,184,188,190,159, - 95,95,79,76,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,24,6,5,152,153,132,67,124,65,65,64,64,32,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,61,124,252,252,252,252,252,60,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1, - 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - }, - - { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,0,1,225,26,6,9,49,53,1,138,124,0,0,128,128,128,128,64,64,64,64,32, - 32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,0,0,0,0,0,0,0,0,1,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,4,4,4,4,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,122,122,121,121,121,121,57,49,2,2,4,4,8,8,8,136,136,135,128, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - } - - }; - - void animation_phase(void) { - if (get_current_wpm() <= IDLE_SPEED) { - current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES; - oled_write_raw_P(idle[abs((IDLE_FRAMES-1)-current_idle_frame)], ANIM_SIZE); - } - - if (get_current_wpm() > IDLE_SPEED && get_current_wpm() < TAP_SPEED) { - oled_write_raw_P(prep[0], ANIM_SIZE); - } - - if (get_current_wpm() >= TAP_SPEED) { - current_tap_frame = (current_tap_frame + 1) % TAP_FRAMES; - oled_write_raw_P(tap[abs((TAP_FRAMES-1)-current_tap_frame)], ANIM_SIZE); - } - } - - if (get_current_wpm() != 000) { - oled_on(); - - if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { - anim_timer = timer_read32(); - animation_phase(); - } - - anim_sleep = timer_read32(); - } else { - if (timer_elapsed32(anim_sleep) > oled_timeout) { - oled_off(); - } else { - if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { - anim_timer = timer_read32(); - animation_phase(); - } - } - } - } - - bool oled_task_user(void) { - - render_anim(); - - oled_set_cursor(0,0); - oled_write(selected_encoder_key.label_top, false); - - oled_set_cursor(0,1); - oled_write(selected_encoder_key.label_mid, false); - - oled_set_cursor(0,2); - oled_write(selected_encoder_key.label_bottom, false); - - /* hide wpm display for now - oled_set_cursor(13,3); - oled_write_P(PSTR("WPM: "), false); - oled_write(get_u8_str(get_current_wpm(), ' '), false); - */ - - return false; - } - - void suspend_power_down_user(void) { - oled_off(); - } -#endif diff --git a/keyboards/mechwild/mercutio/keymaps/fearless_spiff/readme.md b/keyboards/mechwild/mercutio/keymaps/fearless_spiff/readme.md deleted file mode 100644 index 85b3490608a7..000000000000 --- a/keyboards/mechwild/mercutio/keymaps/fearless_spiff/readme.md +++ /dev/null @@ -1,29 +0,0 @@ -Fearless Spiff's Custom Mercutio Keymap - - "Programmer"-centric and German layout based keymap - - Based on Bongocat and Jonavin keymap - -Features - - Fancy Bongocat! Yay! (borrowed from bongocat obviously) - - Encoder selectable key codes and displayed on OLED (borrowed and multi-line-enhanced from Jonavin) - - Change encoder_keys in keymap.c to assign your desired key selection - - Additional encoder functionality - - While holding FN_1, page up and down - - While holding FN_2, volume up and down - - Mouse controls by holding Caps-Space - - Use my templates for your own layout overview at [Keyboard Layout Editor](http://www.keyboard-layout-editor.com) using my gist [here](https://gist.github.com/FearlessSpiff) - - Shout out to [KMonad](https://github.com/kmonad/kmonad) which enabled my laptop keyboard to behave like my Mercutio! - -QWERT Layer -![image](https://user-images.githubusercontent.com/1927259/148683284-04932e15-a34d-451e-b657-335780033f36.png) - -FN_1 Layer -![image](https://user-images.githubusercontent.com/1927259/157032746-8aa68e1c-27b9-4cf5-88ed-a071d8238f56.png) - -FN_2 layer -![image](https://user-images.githubusercontent.com/1927259/148683306-364bc59c-b41b-4092-b93b-d7b4fc58567b.png) - -FN_MOUSE layer -![image](https://user-images.githubusercontent.com/1927259/157032817-83922578-8932-42bf-a2d2-f785136b4d4e.png) - - - diff --git a/keyboards/mechwild/mercutio/keymaps/fearless_spiff/rules.mk b/keyboards/mechwild/mercutio/keymaps/fearless_spiff/rules.mk deleted file mode 100644 index fc0ec2815382..000000000000 --- a/keyboards/mechwild/mercutio/keymaps/fearless_spiff/rules.mk +++ /dev/null @@ -1,7 +0,0 @@ -WPM_ENABLE = yes -TAP_DANCE_ENABLE = yes -VIA_ENABLE = no -MOUSEKEY_ENABLE = yes -EXTRAKEY_ENABLE = yes # Audio control and System control -KEY_LOCK_ENABLE = no -CONSOLE_ENABLE = no diff --git a/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/config.h b/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/config.h deleted file mode 100644 index 9d588ed8c08f..000000000000 --- a/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/config.h +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright 2022 Fearless Spiff - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#define TAPPING_TERM 180 diff --git a/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/keymap.c b/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/keymap.c deleted file mode 100644 index c79c00a707f5..000000000000 --- a/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/keymap.c +++ /dev/null @@ -1,293 +0,0 @@ -/* Copyright 2021 Kyle McCreery - * Copyright 2021 Jonavin Eng - * Copyright 2022 Fearless Spiff - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H -#include "keymap_german.h" - -// OLED setup for bongocat -#define IDLE_FRAMES 5 -#define IDLE_SPEED 30 -#define TAP_FRAMES 2 -#define TAP_SPEED 40 -#define ANIM_FRAME_DURATION 200 -#define ANIM_SIZE 512 - -#define LABEL_LENGTH 8 - -#define KC_CAD LALT(LCTL(KC_DEL)) -#define KC_TEAMS_CAM C(S(KC_O)) -#define KC_TEAMS_MUTE C(S(KC_M)) - -enum layers { - QWERT, - FN_1, - FN_2 -}; - -enum custom_user_keycodes { - KC_ENC = SAFE_RANGE -}; - -static long int oled_timeout = 1800000; // 30 minutes -bool gui_on = true; -char wpm_str[10]; -uint32_t anim_timer = 0; -uint32_t anim_sleep = 0; -uint8_t current_idle_frame = 0; -uint8_t current_tap_frame = 0; - -// Tap Dance declarations -enum { - TD_TAB_ESC, -}; - -// Tap Dance definitions -tap_dance_action_t tap_dance_actions[] = { - // Tap once for Tab, twice for Esc - [TD_TAB_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_TAB, KC_ESC), -}; - -typedef struct { - char label_top[LABEL_LENGTH]; - char label_mid[LABEL_LENGTH]; - char label_bottom[LABEL_LENGTH]; - uint16_t keycode; -} encoder_key; - -static const encoder_key PROGMEM encoder_keys[] = { - // list of key codes that will be scrolled through by encoder and description - // Be aware that it only works when using one char less than defined. In this case 7 max. No idea why? - {"Teams", "Toggle", "Mic", KC_TEAMS_MUTE}, - {"Teams", "Toggle", "Cam", KC_TEAMS_CAM}, - {"Ctrl", "Alt", "Del", KC_CAD}, - {"Caps", "Lock", "", KC_CAPS_LOCK}, - {"Pause", "", "", KC_PAUSE}, - {"PrtScr", "", "", KC_PSCR}, - {"Insert", "", "", KC_INS}, - {"Play", "", "", KC_MEDIA_PLAY_PAUSE} -}; - -#define NUMBER_OF_ENCODER_KEYS ARRAY_SIZE(encoder_keys) - -static uint8_t selected_encoder_key_id = 0; -static encoder_key selected_encoder_key; - -static void set_selected_encoder_key(uint8_t idx) { - // make a copy from PROGMEM - memcpy_P (&selected_encoder_key, &encoder_keys[idx], sizeof selected_encoder_key); -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case KC_ENC: - if (record->event.pressed) { - tap_code16(selected_encoder_key.keycode); - } - break; - } - return true; -} - - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [QWERT] = LAYOUT_all( - KC_ENC, - TD(TD_TAB_ESC), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, - LT(1,KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_PLUS, KC_ENT, - KC_LSFT, KC_LABK, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, - KC_LCTL, KC_LGUI, LT(2,KC_LALT), KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(2), KC_RCTL ), - - [FN_1] = LAYOUT_all( - KC_MUTE, - QK_GESC, _______, KC_UP, _______, KC_LCBR, KC_RCBR, _______, _______, KC_UP, _______, KC_QUES, KC_DEL, - _______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_LPRN, KC_RPRN, KC_QUES, KC_LEFT, KC_DOWN, KC_LABK, KC_RABK, _______, - _______, KC_BSLS, KC_SLSH, KC_PIPE, _______, KC_LBRC, KC_RBRC, KC_HOME, KC_END, KC_QUOT, KC_DQUO, KC_EQL, - _______, _______, _______, _______, _______, _______, KC_BSLS, KC_SLSH, KC_TILD ), - - [FN_2] = LAYOUT_all( - _______, - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, - _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_AMPR, KC_PERC, KC_ASTR, KC_LPRN, KC_RPRN, _______, _______, - _______, _______, KC_MINS, KC_PLUS, KC_BSLS, KC_SLSH, KC_SCLN, KC_COLN, KC_QUES, KC_LBRC, KC_RBRC, KC_DOT, - KC_DQUO, KC_QUOT, KC_DQUO, _______, _______, _______, _______, _______, KC_PIPE ) -}; - -#ifdef ENCODER_ENABLE - bool encoder_update_user(uint8_t index, bool clockwise) { - if (clockwise) { - if (IS_LAYER_ON(QWERT) && selected_encoder_key_id < NUMBER_OF_ENCODER_KEYS-1) { - selected_encoder_key_id ++; - set_selected_encoder_key(selected_encoder_key_id); - } - if (IS_LAYER_ON(FN_1)) { - tap_code16(KC_PGDN); - } - if (IS_LAYER_ON(FN_2)) { - tap_code(KC_VOLU); - } - } else { - if (IS_LAYER_ON(QWERT) && selected_encoder_key_id > 0) { - selected_encoder_key_id --; - set_selected_encoder_key(selected_encoder_key_id); - } - if (IS_LAYER_ON(FN_1)) { - tap_code16(KC_PGUP); - } - if (IS_LAYER_ON(FN_2)) { - tap_code(KC_VOLD); - } - } - return false; - } -#endif - -#ifdef OLED_ENABLE - oled_rotation_t oled_init_user(oled_rotation_t rotation) { - set_selected_encoder_key(selected_encoder_key_id); - - return OLED_ROTATION_180; // flips the display 180 degrees - } - - static void render_anim(void) { - - // Idle animation - static const char PROGMEM idle[IDLE_FRAMES][ANIM_SIZE] = { - - { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,16,8,8,4,4,4,8,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,100,130,2,2,2,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64, - 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,56,4,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,7, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - }, - - { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,16,8,8,4,4,4,8,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,100,130,2,2,2,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64, - 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,56,4,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8, - 7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - }, - - { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,64,64,64,64,32,32,32,32,16,8,4,2,2,4,24,96,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,194,1,1,2,2,4,4,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,96,0,129,130,130,132,8,16,32,64,128,0,0,0,0,128,128,128,128,64,64,64,64,32, - 32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,25,6,0,0,0,0,0,0,0,24,24,24,27,3,0,64,160,34,36,20,18,18,18,11,8,8,8,8,5,5,9,9,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,7,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - }, - - { - 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64, - 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8, - 7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - }, - - { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,8,4,2,2,2,4,56,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,226,1,1,2,2,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64,64,64, - 32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,7,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - } - - }; - - // Prep animation - static const char PROGMEM prep[][ANIM_SIZE] = { - - { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,129,128,128,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,0,1,225,26,6,9,49,53,1,138,124,0,0,128,128,128,128,64,64, - 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,24,6,5,152,153,132,195,124,65,65,64,64,32,33,34,18,17,17,17,9,8,8,8,8,4,4,4,4,4,4,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - } - - }; - - // Typing animation - static const char PROGMEM tap[TAP_FRAMES][ANIM_SIZE] = { - - { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,248,248,248,248,0,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,129,128,128,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,0,1,1,2,4,8,16,32,67,135,7,1,0,184,188,190,159, - 95,95,79,76,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,24,6,5,152,153,132,67,124,65,65,64,64,32,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,61,124,252,252,252,252,252,60,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1, - 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - }, - - { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,0,1,225,26,6,9,49,53,1,138,124,0,0,128,128,128,128,64,64,64,64,32, - 32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,0,0,0,0,0,0,0,0,1,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,4,4,4,4,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,122,122,121,121,121,121,57,49,2,2,4,4,8,8,8,136,136,135,128, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - } - - }; - - void animation_phase(void) { - if (get_current_wpm() <= IDLE_SPEED) { - current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES; - oled_write_raw_P(idle[abs((IDLE_FRAMES-1)-current_idle_frame)], ANIM_SIZE); - } - - if (get_current_wpm() > IDLE_SPEED && get_current_wpm() < TAP_SPEED) { - oled_write_raw_P(prep[0], ANIM_SIZE); - } - - if (get_current_wpm() >= TAP_SPEED) { - current_tap_frame = (current_tap_frame + 1) % TAP_FRAMES; - oled_write_raw_P(tap[abs((TAP_FRAMES-1)-current_tap_frame)], ANIM_SIZE); - } - } - - if (get_current_wpm() != 000) { - oled_on(); - - if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { - anim_timer = timer_read32(); - animation_phase(); - } - - anim_sleep = timer_read32(); - } else { - if (timer_elapsed32(anim_sleep) > oled_timeout) { - oled_off(); - } else { - if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { - anim_timer = timer_read32(); - animation_phase(); - } - } - } - } - - bool oled_task_user(void) { - - render_anim(); - - oled_set_cursor(0,0); - oled_write(selected_encoder_key.label_top, false); - - oled_set_cursor(0,1); - oled_write(selected_encoder_key.label_mid, false); - - oled_set_cursor(0,2); - oled_write(selected_encoder_key.label_bottom, false); - - /* hide wpm display for now - oled_set_cursor(13,3); - oled_write_P(PSTR("WPM: "), false); - oled_write(get_u8_str(get_current_wpm(), ' '), false); - */ - - return false; - } - - void suspend_power_down_user(void) { - oled_off(); - } -#endif diff --git a/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/readme.md b/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/readme.md deleted file mode 100644 index dea71bf358ce..000000000000 --- a/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/readme.md +++ /dev/null @@ -1,22 +0,0 @@ -Fearless Spiff's Custom Mercutio Keymap - - "Programmer"-centric and German layout based keymap - - Based on Bongocat and Jonavin keymap - -Features - - Fancy Bongocat! Yay! (borrowed from bongocat obviously) - - Encoder selectable key codes and displayed on OLED (borrowed and multi-line-enhanced from Jonavin) - - Change encoder_keys in keymap.c to assign your desired key selection - - Additional encoder functionality - - While holding FN_1, page up and down - - While holding FN_2, volume up and down - - Use my templates for your own layout overview at [Keyboard Layout Editor](http://www.keyboard-layout-editor.com) using my gist [here](https://gist.github.com/FearlessSpiff) - -QWERT Layer -![image](https://user-images.githubusercontent.com/1927259/148683284-04932e15-a34d-451e-b657-335780033f36.png) - -FN_1 Layer -![image](https://user-images.githubusercontent.com/1927259/148683299-f2c80403-3f29-4ba8-9fc4-957729f30b05.png) - -FN_2 layer -![image](https://user-images.githubusercontent.com/1927259/148683306-364bc59c-b41b-4092-b93b-d7b4fc58567b.png) - diff --git a/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/rules.mk b/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/rules.mk deleted file mode 100644 index 4775e0e11d0a..000000000000 --- a/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/rules.mk +++ /dev/null @@ -1,3 +0,0 @@ -WPM_ENABLE = yes -TAP_DANCE_ENABLE = yes -MOUSEKEY_ENABLE = no diff --git a/keyboards/mehkee96/keymaps/johann/keymap.c b/keyboards/mehkee96/keymaps/johann/keymap.c deleted file mode 100644 index 30fdb742c412..000000000000 --- a/keyboards/mehkee96/keymaps/johann/keymap.c +++ /dev/null @@ -1,80 +0,0 @@ -#include QMK_KEYBOARD_H - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - /* Layer 0, default layer -____________________________________________________________________________________________________________________________________________________________________________ -| | | | | | | | | | | | | | | | | | | | -| ESC* | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | P SCN | HOME | DEL | INSERT | P Up | P Down | -|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________| -| | | | | | | | | | | | | | | BACK | NUM | | | Play | -| ~` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | _ - | = + | \ | SPACE | LOCK | / | * | Pause | -|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________| -| | | | | | | | | | | | [ | ] | | | | | | -| TAB | Q | W | E | R | T | Y | U | I | O | P | { | } | | \ | 7 | 8 | 9 | Next | -|____________|________|________|________|________|________|________|________|________|________|________|________|________|_____________|________|________|________|________| -| | | | | | | | | | | ; | ' | | | | | | -| CAPS LOCK | A | S | D | F | G | H | J | K | L | : | " | ENTER | 4 | 5 | 6 | - | -|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________| -| | | | | | | | | , | . | / | | | | | | | -| SHIFT | Z | X | C | V | B | N | M | < | > | ? | SHIFT | UP | 1 | 2 | 3 | + | -|__________________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________|________| -| | | | | | | MO | | | | | | | -| CTRL | LGUI | L ALT | SPACE | R ALT | RGUI | _FN | LEFT | DOWN | RIGHT | 0 | . | ENTER | -|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________| -*/ - - - - LAYOUT( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_HOME, KC_DEL, KC_INS, KC_PGUP, KC_PGDN, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NUM, KC_PSLS, KC_PAST, KC_MPLY, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_MNXT, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PMNS, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PPLS, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), - - - - /* Layer 1, function layer -____________________________________________________________________________________________________________________________________________________________________________ -| | | | | | | | | | | | | | | VOL | VOL | | | | -| QK_BOOT | | | | | | | | | | | | | MUTE | DOWN | UP | | | | -|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________| -| | | | | | | | | | | | | | | | | | | | -| | | | | | | | | | | | | | | | | | | | -|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________| -| | RGB | | RGB | HUE | HUE | SATUR. | SATUR. | VALUE | VALUE | | | | | | | | | -| | TOGGLE | | MODE |INCREASE| DCRSE |INCREASE| DCRSE |INCREASE| DCRSE | | | | | | | | | -|____________|________|________|________|________|________|________|________|________|________|________|________|________|_____________|________|________|________|________| -| BACKLIGHT | | | | | | | | | | | | | | | | | -| TOGGLE | | | | | | | | | | | | | | | | | -|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________| -| | | | |BACKLHT |BACKLHT |BACKLHT | | | | | | | | | | | | -| | | | | DCRSE |TOGGLE |INCREASE| | | | | | | | | | | | -|_________|________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________|________| -| | | | | | | | | | | | | | -| | | | | | | | | | | | | | -|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________| -BL_TOGG, BL_DOWN,BL_UP changes the in-switch LEDs -*/ - - - LAYOUT( - QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, RGB_TOG, _______, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, - BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______ , _______, _______, BL_DOWN, BL_TOGG, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), -}; - -void matrix_init_user(void) { -} - -void matrix_scan_user(void) { -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - return true; -} diff --git a/keyboards/minimacro5/keymaps/kabraxcis/keymap.c b/keyboards/minimacro5/keymaps/kabraxcis/keymap.c deleted file mode 100644 index 6b7026ce205a..000000000000 --- a/keyboards/minimacro5/keymaps/kabraxcis/keymap.c +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright 2020 dezlidezlidezli - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H - -enum layers { - _MAIN, -}; - -bool encoder_update_user(uint8_t index, bool clockwise) { - if (index == 0) { /* First encoder*/ - if (clockwise) { - tap_code(KC_VOLU); - } else { - tap_code(KC_VOLD); - } - } else if (index == 1) { /* Second encoder*/ - if (clockwise) { - tap_code(KC_3); - } else { - tap_code(KC_4); - } - } else if (index == 2) { /* Third encoder*/ - if (clockwise) { - tap_code(KC_5); - } else { - tap_code(KC_6); - } - } else if (index == 3) { /* Fourth encoder*/ - if (clockwise) { - tap_code(KC_7); - } else { - tap_code(KC_8); - } - } else if (index == 4) { /* Fifth encoder*/ - if (clockwise) { - tap_code(KC_VOLU); - } else { - tap_code(KC_VOLD); - } - } - return true; -} - -// -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_MAIN] = LAYOUT_ortho_1x5( - KC_CAPS, KC_MNXT, KC_MPLY, KC_MPRV, KC_CAPS - ) -}; diff --git a/keyboards/minimacro5/keymaps/voaraq/keymap.c b/keyboards/minimacro5/keymaps/voaraq/keymap.c deleted file mode 100644 index 9af37167dc12..000000000000 --- a/keyboards/minimacro5/keymaps/voaraq/keymap.c +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright 2020 dezlidezlidezli - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H - -enum layers { - _MAIN, -}; - -bool encoder_update_user(uint8_t index, bool clockwise) { - if (index == 0) { /* First encoder*/ - if (clockwise) { - tap_code(KC_1); - } else { - tap_code(KC_2); - } - } else if (index == 1) { /* Second encoder*/ - if (clockwise) { - tap_code(KC_3); - } else { - tap_code(KC_4); - } - } else if (index == 2) { /* Third encoder*/ - if (clockwise) { - tap_code(KC_5); - } else { - tap_code(KC_6); - } - } else if (index == 3) { /* Fourth encoder*/ - if (clockwise) { - tap_code(KC_7); - } else { - tap_code(KC_8); - } - } else if (index == 4) { /* Fifth encoder*/ - if (clockwise) { - tap_code(KC_VOLU); - } else { - tap_code(KC_VOLD); - } - } - return true; -} - -// -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //buttion closest to usb is first - [_MAIN] = LAYOUT_ortho_1x5( - KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MUTE - ) -}; diff --git a/keyboards/misonoworks/karina/keymaps/voltex/keymap.c b/keyboards/misonoworks/karina/keymaps/voltex/keymap.c deleted file mode 100644 index f06522f92a01..000000000000 --- a/keyboards/misonoworks/karina/keymaps/voltex/keymap.c +++ /dev/null @@ -1,70 +0,0 @@ -/* -Copyright 2020 MisonoWorks - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include QMK_KEYBOARD_H - -enum layers { - DEFAULT, - SUPER, - META, -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - [DEFAULT] = LAYOUT( - KC_TRNS, KC_TRNS, - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, - KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, - KC_LALT, MO(SUPER), KC_SPC, KC_BSPC, MO(META), KC_LCTL - ), - - [SUPER] = LAYOUT( - KC_ESC, KC_TRNS, - KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, - KC_MINS, KC_EQL, KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_QUOT, KC_SCLN, - KC_LSFT, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SLSH, KC_BSLS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS, KC_TRNS - ), - - [META] = LAYOUT( - KC_TRNS, KC_TRNS, - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, - KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, - KC_LSFT, KC_LEFT, KC_DOWN, KC_RGHT, KC_PPLS, KC_P2, KC_P0, KC_P1, KC_TRNS, KC_TRNS, - RGB_TOG, RGB_SAI, RGB_HUI, RGB_VAI, KC_TRNS, RGB_MOD - ) - -}; - -bool encoder_update_user(uint8_t index, bool clockwise) { - if (index == 0) { - if (clockwise) { - tap_code(KC_MS_LEFT); - } else { - tap_code(KC_MS_RIGHT); - } - } - else if (index == 1) { - if (clockwise) { - tap_code(KC_MS_U); - } else { - tap_code(KC_MS_D); - } - } - return true; -} diff --git a/keyboards/mitosis/keymaps/carvac_dv/keymap.c b/keyboards/mitosis/keymaps/carvac_dv/keymap.c deleted file mode 100644 index 842556324f85..000000000000 --- a/keyboards/mitosis/keymaps/carvac_dv/keymap.c +++ /dev/null @@ -1,123 +0,0 @@ -// This is the Dvorak-friendly layout for the Mitosis by CarVac (/u/CarVac) -// It features space on the left thumb, shift on the right thumb, a -// number layer with all the numbers on the home row, and a function layer -// that provides mouse keys among other things. - -#include QMK_KEYBOARD_H - -enum mitosis_layers -{ - _STD, - _NUM, - _FN -}; - - -//Mousekeys -#define MOUSEKEY_DELAY 300 -#define MOUSEKEY_INTERNAL 50 -#define MOUSEKEY_MAX_SPEED 20 -#define MOUSEKEY_TIME_TO_MAX 30 -#define MOUSEKEY_WHEEL_MAX_SPEED 8 -#define MOUSEKEY_WHEEL_TIME_TO_MAX 40 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - /* QWERTY - * .--------------------------------------------..--------------------------------------------. - * | Q | W | E | R | T || Y | U | I | O | P | - * |--------+--------+--------+--------+--------||--------+--------+--------+--------+--------| - * | A | S | D | F | G || J | H | K | L | ; | - * |--------+--------+--------+--------+--------||--------+--------+--------+--------+--------| - * | Z | X | C | V | B || N | M | , | . | / | - * '--------+--------+--------+--------+--------||--------+--------+--------+--------+--------' - * | PGUP | TAB | LCTRL | SPACE || LSHIFT | ENTER | UP | PSCR | - * |--------+--------+--------+--------||--------+--------+--------+--------| - * | PGDN | LGUI | LALT | FN || NUM | LEFT | DOWN | RIGHT | - * '-----------------------------------''-----------------------------------' - */ - [_STD] = LAYOUT( /* Standard; as compatible with dvorak and qwerty as possible */ - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, - KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, - KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, - KC_PGUP, KC_TAB, KC_LCTL, KC_SPC, KC_LSFT, KC_ENT, KC_UP, KC_PSCR, - KC_PGDN, KC_LGUI, KC_LALT, MO(_FN), MO(_NUM), KC_LEFT, KC_DOWN, KC_RGHT - ), - - /* Number layout, for data entry and programming purposes (Dvorak result in parens) - * .--------------------------------------------..--------------------------------------------. - * | TAB | (,<) | (.>) | - ([{) | = (]}) || ] (=+) | pad * | pad + | pad - | [ (/?) | - * |--------+--------+--------+--------+--------||--------+--------+--------+--------+--------| - * | 1 | 2 | 3 | 4 | 5 || 6 | 7 | 8 | 9 | 0 | - * |--------+--------+--------+--------+--------||--------+--------+--------+--------+--------| - * | F1 | F2 | F3 | F4 | F5 || F6 | F7 | F8 | F9 | F10 | - * '--------+--------+--------+--------+--------||--------+--------+--------+--------+--------' - * | F11 | F12 | | || | | | | - * |--------+--------+--------+--------||--------+--------+--------+--------| - * | | | | || | | | | - * '-----------------------------------''-----------------------------------' - */ - [_NUM] = LAYOUT( /* Number layout along the home row for maximum speed*/ - KC_TAB, _______, _______, KC_MINS, KC_EQL, KC_RBRC, KC_PAST, KC_PPLS, KC_PMNS, KC_LBRC, - KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, - KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______ - ), - - - /* Fn layout, for typing purposes (Dvorak result in parens) - * .--------------------------------------------..--------------------------------------------. - * | ` | | MS_U | | || WH_U | WH_L | BTN3 | WH_R | [ (/?) | - * |--------+--------+--------+--------+--------||--------+--------+--------+--------+--------| - * | ESC | MS_L | MS_D | MS_R | || WH_D | BTN1 | BTN2 | | ' (-_) | - * |--------+--------+--------+--------+--------||--------+--------+--------+--------+--------| - * | APP | MPRV | MPLY | MSTP | MNXT || | BSPC | DEL | INS | \ | - * '--------+--------+--------+--------+--------||--------+--------+--------+--------+--------' - * | VOLU | | | || | | PGUP | | - * |--------+--------+--------+--------||--------+--------+--------+--------| - * | VOLD | | | || | HOME | PGDN | END | - * '-----------------------------------''-----------------------------------' - */ - [_FN] = LAYOUT( /* Function Layer, primary alternative layer featuring numpad on right hand, - cursor keys on left hand, and all symbols*/ - KC_GRV, _______, KC_MS_U, _______, _______, KC_WH_U, KC_WH_L, KC_BTN3, KC_WH_R, KC_LBRC, - KC_ESC, KC_MS_L, KC_MS_D, KC_MS_R, _______, KC_WH_D, KC_BTN1, KC_BTN2, _______, KC_QUOT, - KC_APP, KC_MPRV, KC_MPLY, KC_MSTP, KC_MNXT, _______, KC_BSPC, KC_DEL, KC_INS, KC_BSLS, - KC_VOLU, _______, _______, _______, _______, _______, KC_PGUP, _______, - KC_VOLD, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END - ), - - /* blank key layout template - * .--------------------------------------------..--------------------------------------------. - * | | | | | || | | | | | - * |--------+--------+--------+--------+--------||--------+--------+--------+--------+--------| - * | | | | | || | | | | | - * |--------+--------+--------+--------+--------||--------+--------+--------+--------+--------| - * | | | | | || | | | | | - * '--------+--------+--------+--------+--------||--------+--------+--------+--------+--------' - * | | | | || | | | | - * |--------+--------+--------+--------||--------+--------+--------+--------| - * | | | | || | | | | - * '-----------------------------------''-----------------------------------' - */ - -}; - -void matrix_scan_user(void) { - uint8_t layer = get_highest_layer(layer_state); - - switch (layer) { - case _STD: - set_led_off; - break; - case _FN: - set_led_blue; - break; - case _NUM: - set_led_red; - break; - default: - break; - } -}; diff --git a/keyboards/mitosis/keymaps/carvac_dv/rules.mk b/keyboards/mitosis/keymaps/carvac_dv/rules.mk deleted file mode 100644 index 6c605daecf53..000000000000 --- a/keyboards/mitosis/keymaps/carvac_dv/rules.mk +++ /dev/null @@ -1 +0,0 @@ -MOUSEKEY_ENABLE = yes diff --git a/keyboards/mitosis/keymaps/nzen/keymap.c b/keyboards/mitosis/keymaps/nzen/keymap.c deleted file mode 100644 index 07816067b422..000000000000 --- a/keyboards/mitosis/keymaps/nzen/keymap.c +++ /dev/null @@ -1,207 +0,0 @@ - - -#include QMK_KEYBOARD_H - -enum mitosis_layers -{ - _QWERTY, - _WORKMAN, - _NUMBERS, - _PUNCT, - _MOUSE, - _LAYERS, - _GAMING, - _UNICODE, - _NUMPAD -}; - - -//Mousekeys -#define MOUSEKEY_DELAY 300 -#define MOUSEKEY_INTERNAL 50 -#define MOUSEKEY_MAX_SPEED 20 -#define MOUSEKEY_TIME_TO_MAX 30 -#define MOUSEKEY_WHEEL_MAX_SPEED 8 -#define MOUSEKEY_WHEEL_TIME_TO_MAX 40 - -// Fillers to make layering more clear -#define XXX KC_NO - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - // https://github.com/nhou7/qmk_firmware_amj40/blob/master/doc/keycode.txt - /* QWERTY - ['Q', 'W', 'E', 'R', 'T',// 'Y', 'U', 'I', 'O', 'P' ], - ['A', 'S', 'D', 'F', 'G',// 'H', 'J', 'K', 'L', '; :' ], - ['Z', 'X', 'C', 'V', 'B',// 'N', 'M', ', <', '. >', '\' "' ], - [ 'back', 'del', 'ctrl', 'L_n',// 'L_p', 'ctrl', 'ent', 'back', ], - [ 'alt', '0', 'shif', 'spac',// 'spac', 'shif', 'cap', 'alt', ] - */ - [_QWERTY] = LAYOUT( - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, - KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, - KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_QUOTE, - KC_BSPC, KC_DELETE, KC_LCTL, TG( 2 ), TG( 3 ), KC_RCTL, KC_ENTER, KC_BSPC, - KC_LALT, KC_0, KC_LSFT, KC_SPACE, KC_SPACE, KC_RSFT, KC_CAPS, KC_RALT - ), - /* - ['Q', 'D', 'R', 'W', 'B',/ ** / 'J', 'F', 'U', 'P', '; :' ], - ['A', 'S', 'H', 'T', 'G',/ ** / 'Y', 'N', 'E', 'O', 'I' ], - ['Z', 'X', 'M', 'C', 'V',/ ** / 'K', 'L', ', <', '. >', '\' "' ], - [ '', '', '', '',/ ** / '', '', '', '', ], - [ '', '4', '', '',/ ** / '', '', '', '', ] - */ - [_WORKMAN] = LAYOUT( - KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, - KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, - KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMMA, KC_DOT, KC_QUOTE, - _______, _______, _______, _______, _______, _______, _______, _______, - _______, KC_1, _______, _______, _______, _______, _______, _______ - ), - /* - ['9', '8', '7', '6', '5',/ ** / 'F2', 'pDn', *up* /, '*tab* /, 'pUp' ], - [' 4', ' 3', ' 2', ' 1', ' 0',/ ** / 'home', *lf* /, '*dn* /, *rt* /, 'end' ], - ['undo', 'cut', 'copy', 'paste', 'os',/ ** / 'D', '_', ',', '-', '.' ], - // -- - [ '', '', '', 'L_=6',/ ** / 'L_7', '', '', '', ], - [ '', '6', '', '',/ ** / '', '', '', '', ] - */ - [_NUMBERS] = LAYOUT( - KC_9, KC_8, KC_7, KC_6, KC_5, KC_F2, KC_PGDN, KC_UP, KC_TAB, KC_PGUP, - KC_4, KC_3, KC_2, KC_1, KC_0, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_END, - LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_LGUI, KC_D, KC_UNDERSCORE, KC_COMMA, KC_MINUS, KC_DOT, - _______, _______, _______, TG( 2 ), TG( 3 ), _______, _______, _______, - _______, KC_2, _______, _______, _______, _______, _______, _______ - ), - /* - [ '#', '@', '&', '.', ';',/ ** / '_', ',', '|', '^', '%' ], - [ '*', '+', '{', '(', ':',/ ** / '"', ')', '}', '-', '=' ], - [ '\\', '?', '<', '[', '$',/ ** / '~', ']', '>', '!', '/' ], - // -- - ['', '', '', 'L_8',/ ** / 'L_=7', '', '', '', ], - ['', '7', '', '',/ ** / '', '', '', '', ] - */ - [_PUNCT] = LAYOUT( - KC_HASH, KC_AT, KC_AMPERSAND, KC_DOT, KC_SCLN, KC_UNDERSCORE, KC_COMMA, KC_PIPE, KC_CIRCUMFLEX, KC_PERCENT, - KC_ASTERISK, KC_PLUS, KC_LCBR, KC_LPRN, KC_COLON, KC_DQUO, KC_RPRN, KC_RCBR, KC_MINUS, KC_EQUAL, - KC_BSLS, KC_QUESTION, KC_LT, KC_LBRC, KC_DOLLAR, KC_TILDE, KC_RBRC, KC_GT, KC_EXCLAIM, KC_SLASH, - _______, _______, _______, TG( 4 ), TG( 3 ), _______, _______, _______, - _______, KC_3, _______, _______, _______, _______, _______, _______ - ), - /* - ['F6', 'F7', 'F8', 'F9', 'F10',/ ** / 'app', 'mb1', 'mmU', 'mb2', 'mwU' ], - ['F1', 'F2', 'F3', 'F4', 'F5',/ ** / 'mnu', 'mmL', 'mmD', 'mmR', 'mwD' ], - ['F11', 'F12', '`', 'mute', 'ESC',/ ** / 'prtSc', 'scrLk', 'mwL', 'mwR', 'mb3' ], - // -- - [ '', '', '', 'L_=8',/ ** / 'L_9', '', '', '', ], - [ '', '8', '', '',/ ** / '', '', '', '', ] - */ - [_MOUSE] = LAYOUT( - KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_MENU, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_MS_WH_UP, - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_MENU, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_DOWN, - KC_F11, KC_F12, KC_GRAVE, KC_MUTE, KC_ESCAPE, KC_PSCR, KC_SCRL, KC_MS_WH_LEFT, KC_MS_WH_RIGHT, KC_MS_BTN3, - _______, _______, _______, TG( 4 ), TG( 5 ), _______, _______, _______, - _______, KC_4, _______, _______, _______, _______, _______, _______ - ), - /* - ['L_ma1', '!', 'L_dv2', '!', 'L_cl3',/ ** / 'L_wk4', '!', 'L_ar5', '!', '!' ], - ['!', '!', '!', '!', '!',/ ** / '!', '!', '!', '!', '!' ], - ['L_gmA', '!', 'L_ucB', '!', 'L_npC',/ ** / '!', '!', '!', '!', '!' ], - // -- - [ '', '', '', 'L_=9',/ ** / 'L_=9', '', '', '', ], - [ '', '9', '', '',/ ** / '', '', '', '', ] - */ - [_LAYERS] = LAYOUT( - KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, TG( 1 ), KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, - KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, - TG( 6 ), KC_EXCLAIM, TG( 7 ), KC_EXCLAIM, TG( 8 ), KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, - _______, _______, _______, TG( 5 ), TG( 5 ), _______, _______, _______, - _______, KC_5, _______, _______, _______, _______, _______, _______ - ), - /* - ['Q', 'W', 'E', 'R', 'T',/ ** / 'P', 'Y', '\u2191'*up* /, 'K', '1' ], - ['A', 'S', 'D', 'F', 'G',/ ** / 'H', '\u2190'*lf* /, '\u2193'*dn* /, '\u2192'*rt* /, '2' ], - ['Z', 'X', 'C', 'V', 'B',/ ** / 'M', '*', '*', '*', '3' ], - // -- - [ '', '', '', 'L_=A',/ ** / 'A', '', '', '', ], - [ '', 'A', '', '',/ ** / '', '', '', '', ] - */ - [_GAMING] = LAYOUT( - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P, KC_Y, KC_UP, KC_K, KC_1, - KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_LEFT, KC_DOWN, KC_RIGHT, KC_2, - KC_Z, KC_X, KC_C, KC_V, KC_B, KC_M, KC_ASTERISK, KC_ASTERISK, KC_ASTERISK, KC_3, - _______, _______, _______, TG( 6 ), KC_6, _______, _______, _______, - _______, KC_6, _______, _______, _______, _______, _______, _______ - ), - /* - ['\u00a2'cent* /, '\u00bc'1/4* /, '\u00bd'1/2* /, '\u03a3'sum* /, '\u00d8'Oslash* /,/ ** / '\u250f'box ul* /, '\u2533'box um* /, '\u2513'box ur* /, '\u03bb'lambda* /, '\u2018'sm'dn* / ], - ['\u00F1'n~* /, '\u00a9'©* /, '\u00b0'degrees* /, '\u00b1'+-* /, '\u2b0f'arrow up* /,/ ** / '\u2523'box ml* /, '\u254B'box mm* /, '\u252B'box mr* /, '\u0394'delta* /, '\u2019'sm'up* / ], - ['\u00a1'down !* /, '\u00bf'down ?* /, '\u00d7'mult x* /, '\u00f7'div/ * /, '\u03c0'pi* /,/ ** / '\u2517'box ll* /, '\u253b'bos lm* /, '\u251b'box lr* /, '\u201c'sm"dn* /, '\u201d'sm"up* / ], - // -- - [ '', '', '', 'L_=B',/ ** / 'B', '', '', '', ], - [ '', 'B', '', '',/ ** / '', '', '', '', ] - */ - [_UNICODE] = LAYOUT( - UC(0x00A2), UC(0x00BC), UC(0x00BD), UC(0x03A3), UC(0x00D8), UC(0x250F), UC(0x2533), UC(0x2513), UC(0x03BB), UC(0x2018), - UC(0x00F1), UC(0x00A9), UC(0x00B0), UC(0x00B1), UC(0x2B0F), UC(0x2523), UC(0x254B), UC(0x252B), UC(0x0394), UC(0x2019), - UC(0x00A1), UC(0x00BF), UC(0x00D7), UC(0x00F7), UC(0x03C0), UC(0x2517), UC(0x253B), UC(0x251B), UC(0x201C), UC(0x201D), - _______, _______, _______, TG( 7 ), KC_7, _______, _______, _______, - _______, KC_7, _______, _______, _______, _______, _______, _______ - ), - /* - ['n-.', 'n-7', 'n-8', 'n-9', 'n--',/ ** / 'n-=', 'volU', 'volD', 'volU', 'volD' ], - ['n-0', 'n-4', 'n-5', 'n-6', 'n-+',/ ** / 'N-lck', 'BACK', 'MUTE', 'RGUI', 'paus' ], - ['n -*', 'n-1', 'n-2', 'n-3', 'n-/',/ ** / 'n-ent', 'PLAY', 'PREV', 'NEXT', 'insr' ], - // -- - [ '', '', '', 'L_=C',/ ** / 'C', '', '', '', ], - [ '', 'C', '', '',/ ** / '', '', '', '', ] - */ - [_NUMPAD] = LAYOUT( - KC_KP_DOT, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_MINUS, KC_KP_EQUAL, KC_AUDIO_VOL_UP, KC_AUDIO_VOL_DOWN, KC_VOLU, KC_VOLD, - KC_KP_0, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_PLUS, KC_NUM, KC_WWW_BACK, KC_AUDIO_MUTE, KC_RGUI, KC_PAUSE, - KC_KP_ASTERISK, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_SLASH, KC_KP_ENTER, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_PREV_TRACK, KC_MEDIA_NEXT_TRACK, KC_INSERT, - _______, _______, _______, TG( 8 ), KC_8, _______, _______, _______, - _______, KC_8, _______, _______, _______, _______, _______, _______ - )// , - /* - * / - [_] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______ - ) - */ -}; - -void matrix_scan_user(void) { - uint8_t layer = get_highest_layer(layer_state); - - switch (layer) { - case _QWERTY: - case _WORKMAN: - set_led_off; - break; - case _NUMBERS: - set_led_blue; - break; - case _PUNCT: - set_led_red; - break; - case _MOUSE: - set_led_green; - break; - case _LAYERS: - set_led_yellow; - break; - case _UNICODE: - set_led_cyan; - break; - default: - break; - } -}; - -void matrix_init_user(void) { - set_unicode_input_mode(UNICODE_MODE_LINUX); // or UNICODE_MODE_WINCOMPOSE -}; diff --git a/keyboards/mitosis/keymaps/nzen/readme.md b/keyboards/mitosis/keymaps/nzen/readme.md deleted file mode 100644 index c11981bd4d51..000000000000 --- a/keyboards/mitosis/keymaps/nzen/readme.md +++ /dev/null @@ -1,75 +0,0 @@ - -### personal layout: Nzen - -Levels - -* Qwerty, with quotes in place of slash question. -* Workman -* Numbers and navigation, left and right hands respectively -* Punctuation, mostly symmetric -* Function and mouse, l/r respectively -* Layer hub, to reach workman or upper layers -* Gaming, qwert and arrows -* Unicode, some numerics and one of the box styles -* Numpad and media, l/r respectively - -Bottom cluster is the same on all levels and mostly symmetric. The 'ring fingers' differ between the two sides. N is a number corresponding to the current layer. Toggle layer will be one down and one up. - -* back del/enter ctrl toggle-layer -* alt N/caps shift space - -You can preview the layout by cloning [this webpage](https://gitlab.com/Nzen/impatient-broth-nenem). The page imitates qmk's fallthrough. - -['Q', 'W', 'E', 'R', 'T',// 'Y', 'U', 'I', 'O', 'P' -['A', 'S', 'D', 'F', 'G',// 'H', 'J', 'K', 'L', '; :' -['Z', 'X', 'C', 'V', 'B',// 'N', 'M', ', <', '. >', '\' "' -[ 'back', 'del', 'ctrl', 'L_n',// 'L_p', 'ctrl', 'ent', 'back', -[ 'alt', '0', 'shif', 'spac',// 'spac', 'shif', 'cap', 'alt', - -['Q', 'D', 'R', 'W', 'B',/ ** / 'J', 'F', 'U', 'P', '; :' -['A', 'S', 'H', 'T', 'G',/ ** / 'Y', 'N', 'E', 'O', 'I' -['Z', 'X', 'M', 'C', 'V',/ ** / 'K', 'L', ', <', '. >', '\' "' -[ '', '', '', '',/ ** / '', '', '', '', -[ '', '4', '', '',/ ** / '', '', '', '', - -['9', '8', '7', '6', '5',/ ** / 'F2', 'pDn', *up* /, '*tab* /, 'pUp' -[' 4', ' 3', ' 2', ' 1', ' 0',/ ** / 'home', *lf* /, '*dn* /, *rt* /, 'end' -['undo', 'cut', 'copy', 'paste', 'os',/ ** / 'D', '_', ',', '-', '.' -[ '', '', '', 'L_=6',/ ** / 'L_7', '', '', '', -[ '', '6', '', '',/ ** / '', '', '', '', - -[ '#', '@', '&', '.', ';',/ ** / '_', ',', '|', '^', '%' -[ '*', '+', '{', '(', ':',/ ** / '"', ')', '}', '-', '=' -[ '\\', '?', '<', '[', '$',/ ** / '~', ']', '>', '!', '/' -['', '', '', 'L_8',/ ** / 'L_=7', '', '', '', -['', '7', '', '',/ ** / '', '', '', '', - -['F6', 'F7', 'F8', 'F9', 'F10',/ ** / 'app', 'mb1', 'mmU', 'mb2', 'mwU' -['F1', 'F2', 'F3', 'F4', 'F5',/ ** / 'mnu', 'mmL', 'mmD', 'mmR', 'mwD' -['F11', 'F12', '`', 'mute', 'ESC',/ ** / 'prtSc', 'scrLk', 'mwL', 'mwR', 'mb3' -[ '', '', '', 'L_=8',/ ** / 'L_9', '', '', '', -[ '', '8', '', '',/ ** / '', '', '', '', - -['L_ma1', '!', 'L_dv2', '!', 'L_cl3',/ ** / 'L_wk4', '!', 'L_ar5', '!', '!' -['!', '!', '!', '!', '!',/ ** / '!', '!', '!', '!', '!' -['L_gmA', '!', 'L_ucB', '!', 'L_npC',/ ** / '!', '!', '!', '!', '!' -[ '', '', '', 'L_=9',/ ** / 'L_=9', '', '', '', -[ '', '9', '', '',/ ** / '', '', '', '', - -['Q', 'W', 'E', 'R', 'T',/ ** / 'P', 'Y', '\u2191'*up* /, 'K', '1' -['A', 'S', 'D', 'F', 'G',/ ** / 'H', '\u2190'*lf* /, '\u2193'*dn* /, '\u2192'*rt* /, '2' -['Z', 'X', 'C', 'V', 'B',/ ** / 'M', '*', '*', '*', '3' -[ '', '', '', 'L_=A',/ ** / 'A', '', '', '', -[ '', 'A', '', '',/ ** / '', '', '', '', - -['\u00a2'cent* /, '\u00bc'1/4* /, '\u00bd'1/2* /, '\u03a3'sum* /, '\u00d8'Oslash* /,/ ** / '\u250f'box ul* /, '\u2533'box um* /, '\u2513'box ur* /, '\u03bb'lambda* /, '\u2018'sm'dn* / ], -['\u00F1'n~* /, '\u00a9'©* /, '\u00b0'degrees* /, '\u00b1'+-* /, '\u2b0f'arrow up* /,/ ** / '\u2523'box ml* /, '\u254B'box mm* /, '\u252B'box mr* /, '\u0394'delta* /, '\u2019'sm'up* / ], -['\u00a1'down !* /, '\u00bf'down ?* /, '\u00d7'mult x* /, '\u00f7'div/ * /, '\u03c0'pi* /,/ ** / '\u2517'box ll* /, '\u253b'bos lm* /, '\u251b'box lr* /, '\u201c'sm"dn* /, '\u201d'sm"up* / -[ '', '', '', 'L_=B',/ ** / 'B', '', '', '', -[ '', 'B', '', '',/ ** / '', '', '', '', - -['n-.', 'n-7', 'n-8', 'n-9', 'n--',/ ** / 'n-=', 'volU', 'volD', 'volU', 'volD' -['n-0', 'n-4', 'n-5', 'n-6', 'n-+',/ ** / 'N-lck', 'BACK', 'MUTE', 'RGUI', 'paus' -['n -*', 'n-1', 'n-2', 'n-3', 'n-/',/ ** / 'n-ent', 'PLAY', 'PREV', 'NEXT', 'insr' -[ '', '', '', 'L_=C',/ ** / 'C', '', '', '', -[ '', 'C', '', '',/ ** / '', '', '', '', diff --git a/keyboards/mitosis/keymaps/nzen/rules.mk b/keyboards/mitosis/keymaps/nzen/rules.mk deleted file mode 100644 index eaba18db9699..000000000000 --- a/keyboards/mitosis/keymaps/nzen/rules.mk +++ /dev/null @@ -1,8 +0,0 @@ - - -# Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = no # Commands for debug and configuration diff --git a/keyboards/miuni32/keymaps/adam-lee/config.h b/keyboards/miuni32/keymaps/adam-lee/config.h deleted file mode 100644 index df06a2620627..000000000000 --- a/keyboards/miuni32/keymaps/adam-lee/config.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -// place overrides here - -#endif \ No newline at end of file diff --git a/keyboards/miuni32/keymaps/adam-lee/keymap.c b/keyboards/miuni32/keymaps/adam-lee/keymap.c deleted file mode 100644 index d6f5f40fddfd..000000000000 --- a/keyboards/miuni32/keymaps/adam-lee/keymap.c +++ /dev/null @@ -1,60 +0,0 @@ -#include QMK_KEYBOARD_H - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Level 0: Default Layer - * ,---------------------------------------------------------------------------------------. - * | Q | W | E | R | T | Y | U | I | O | P | BSP | - * |---------------------------------------------------------------------------------------| - * | A | S | D | F | G | H | J | K | L | ENT |LT(1|,)| - * |---------------------------------------------------------------------------------------| - * |LT(3|Z)| X | C | V | SPC | B | N | M | RSFT |LT(2|.)| - * |---------------------------------------------------------------------------------------| - */ - [0] = LAYOUT( - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, - KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, LT(1, KC_COMMA), - LT(3, KC_Z), KC_X, KC_C, KC_V, KC_SPC, KC_B, KC_N, KC_M, KC_RSFT, LT(2, KC_DOT) - ), - /* Level 1: Numbers Layer - * ,---------------------------------------------------------------------------------------. - * | ESC | 7 | 8 | 9 | / | * | . | , | ( | ) | DEL | - * |---------------------------------------------------------------------------------------| - * | TAB | 4 | 5 | 6 | - | + | HOME | UP | END | PGUP | TRNS | - * |---------------------------------------------------------------------------------------| - * | LATL | 1 | 2 | 3 | 0 | LEFT | DOWN | RGHT | PGDN | RSHFT | - * |---------------------------------------------------------------------------------------| - */ - [1] = LAYOUT( - KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_DEL, - KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, - KC_LALT, KC_1, KC_2, KC_3, KC_0, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_RSFT - ), - /* Level 2: Symbols Layer - * ,---------------------------------------------------------------------------------------. - * | ! | @ | # | $ | % | ^ | & | * | - | + | = | - * |---------------------------------------------------------------------------------------| - * | { | } | [ | ] | TRNS | TRNS | \ | ; | : | ` | ? | - * |---------------------------------------------------------------------------------------| - * | LSFT | LCTL | L | T | TAB | N | TRNS | TRNS | RCTL | TRNS | - * |---------------------------------------------------------------------------------------| - */ - [2] = LAYOUT( - KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL, - KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, _______, _______, KC_BSLS, KC_SCLN, KC_COLN, KC_GRV, KC_QUES, - KC_LSFT, KC_LCTL, KC_L, KC_T, KC_TAB, KC_N, _______, _______, KC_RCTL, _______ - ), - /* Level 3: RGB Layer - * ,---------------------------------------------------------------------------------------. - * | QK_BOOT | TRNS | TRNS | TRNS | TRNS | F1 | F2 | F3 | F4 | F5 | F6 | - * |---------------------------------------------------------------------------------------| - * |RGB_TOG|RGB_MOD|RGB_HUI|RGB_HUD| NO |RGB_SAI|RGB_SAD|RGB_VAI|RGB_VAD| TRNS | TRNS | - * |---------------------------------------------------------------------------------------| - * | TRNS | TRNS | TRNS | TRNS | F7 | F8 | F9 | F10 | F11 | F12 | - * |---------------------------------------------------------------------------------------| - */ - [3] = LAYOUT( - QK_BOOT, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, - RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, KC_NO, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, - _______, _______, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 - ) -}; diff --git a/keyboards/miuni32/keymaps/adam-lee/readme.md b/keyboards/miuni32/keymaps/adam-lee/readme.md deleted file mode 100644 index 4cff8ef5a3a2..000000000000 --- a/keyboards/miuni32/keymaps/adam-lee/readme.md +++ /dev/null @@ -1 +0,0 @@ -# The default keymap for miuni32 \ No newline at end of file diff --git a/keyboards/miuni32/keymaps/adam-lee/rules.mk b/keyboards/miuni32/keymaps/adam-lee/rules.mk deleted file mode 100644 index 1022078ba6c6..000000000000 --- a/keyboards/miuni32/keymaps/adam-lee/rules.mk +++ /dev/null @@ -1,18 +0,0 @@ -# Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# -BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = yes # Commands for debug and configuration -NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -MIDI_ENABLE = no # MIDI controls -AUDIO_ENABLE = no # Audio output on port C6 -UNICODE_ENABLE = no # Unicode -BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - diff --git a/keyboards/miuni32/keymaps/cassdelacruzmunoz/config.h b/keyboards/miuni32/keymaps/cassdelacruzmunoz/config.h deleted file mode 100644 index d057ce4f34b9..000000000000 --- a/keyboards/miuni32/keymaps/cassdelacruzmunoz/config.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright 2020 Cassandra de la Cruz-Munoz cassandra.delacruzmunoz@gmaill.com @cassdelacruzmunoz -* -* This program is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 2 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see -*/ - -#pragma once - -// place overrides here -#define RGBLIGHT_LAYERS -#define RGBLIGHT_SLEEP -#define MIDI_ADVANCED diff --git a/keyboards/miuni32/keymaps/cassdelacruzmunoz/keymap.c b/keyboards/miuni32/keymaps/cassdelacruzmunoz/keymap.c deleted file mode 100644 index 7d347edb6623..000000000000 --- a/keyboards/miuni32/keymaps/cassdelacruzmunoz/keymap.c +++ /dev/null @@ -1,173 +0,0 @@ -/* Copyright 2020 Cassandra de la Cruz-Munoz cassandra.delacruzmunoz@gmaill.com @cassdelacruzmunoz -* -* This program is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 2 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see -*/ - -#include QMK_KEYBOARD_H - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Level 0: Default Layer - * ,---------------------------------------------------------------------------------------. - * | Q | W | E | R | T | Y | U | I | O | P | BSP | - * |---------------------------------------------------------------------------------------| - * | A | S | D | F | G | H | J | K | L | ENT |LT(1|,)| - * |---------------------------------------------------------------------------------------| - * | Z | X | C | V | SPC | B | N | M | RSFT | . | - * |---------------------------------------------------------------------------------------| - */ - [0] = LAYOUT( - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, - KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, LT(1, KC_COMMA), - KC_Z, KC_X, KC_C, KC_V, KC_SPC, KC_B, KC_N, KC_M, KC_RSFT, KC_DOT - ), - /* Level 1: Layers Layer - * ,---------------------------------------------------------------------------------------. - * | TO(2) | TO(3) | TO(4) | TO(5) | TO(6) | TO(7) | TO(8) | TO(9) | TO(10)| TO(11)| TO(12)| - * |---------------------------------------------------------------------------------------| - * | TO(13)| TO(14)| TO(15)| TO(16)| TO(17)| TO(18)| TO(19)| TO(20)| TO(21)| TO(22)| TRNS | - * |---------------------------------------------------------------------------------------| - * | TO(23)| TO(24)| TO(25)| TO(26)| | TO(27)| TO(28)| TO(29)| TO(30)| TO(31)| - * |---------------------------------------------------------------------------------------| - */ - [1] = LAYOUT( - TO(2), TO(3), TO(4), TO(5), TO(6),//TO(7), TO(8), TO(9), TO(10), TO(11), TO(12), - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - //TO(13), TO(14), TO(15), TO(16), TO(17), TO(18), TO(19), TO(20), TO(21), TO(22), _______, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, _______, - //TO(23), TO(24), TO(25), TO(26), KC_NO, TO(27), TO(28), TO(29), TO(30), TO(31) - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO - ), - /* Level 2: Numbers Layer - * ,---------------------------------------------------------------------------------------. - * | ESC | 7 | 8 | 9 | / | * | . | , | ( | ) | DEL | - * |---------------------------------------------------------------------------------------| - * | TAB | 4 | 5 | 6 | - | + | HOME | UP | END | PGUP | TG(2) | - * |---------------------------------------------------------------------------------------| - * | LALT | 1 | 2 | 3 | 0 | LEFT | DOWN | RGHT | PGDN | RSHFT | - * |---------------------------------------------------------------------------------------| - */ - [2] = LAYOUT( - KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_DEL, - KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_HOME, KC_UP, KC_END, KC_PGUP, TG(2), - KC_LALT, KC_1, KC_2, KC_3, KC_0, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_RSFT - ), - /* Level 3: Symbols Layer - * ,---------------------------------------------------------------------------------------. - * | ! | @ | # | $ | % | ^ | & | * | - | + | = | - * |---------------------------------------------------------------------------------------| - * | { | } | [ | ] | ' | | \ | ; | : | ` | TG(3) | - * |---------------------------------------------------------------------------------------| - * | LSFT | LCTL | | | TAB | | | | RCTL | ? | - * |---------------------------------------------------------------------------------------| - */ - [3] = LAYOUT( - KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL, - KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_QUOT, KC_NO, KC_BSLS, KC_SCLN, KC_COLN, KC_GRV, TG(3), - KC_LSFT, KC_LCTL, KC_NO, KC_NO, KC_TAB, KC_NO, KC_NO, KC_NO, KC_RCTL, KC_QUES - ), - /* Level 4: F-keys and Media Layer - * ,---------------------------------------------------------------------------------------. - * | QK_BOOT | MUTE | VOLU | MPLY | TRNS | F1 | F2 | F3 | F4 | F5 | F6 | - * |---------------------------------------------------------------------------------------| - * | LGUI | MPRV | VOLD | MNXT | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | TG(4) | - * |---------------------------------------------------------------------------------------| - * | TRNS | TRNS | TRNS | TRNS | F7 | F8 | F9 | F10 | F11 | F12 | - * |---------------------------------------------------------------------------------------| - */ - [4] = LAYOUT( - QK_BOOT, KC_MUTE, KC_VOLU, KC_MPLY, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, - KC_LGUI, KC_MPRV, KC_VOLD, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TG(4), - KC_NO, KC_NO, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 - ), - /* Level 5: Commands Layer - * ,---------------------------------------------------------------------------------------. - * | CUT | PSCR | BRIU | PWR | | | | | | | | - * |---------------------------------------------------------------------------------------| - * | COPY | FIND | BRID | SLEP | | | | | | | TG(5) | - * |---------------------------------------------------------------------------------------| - * | PSTE | | | WAKE | | | | | | | - * |---------------------------------------------------------------------------------------| - */ - [5] = LAYOUT( - KC_CUT, KC_PSCR, KC_BRIU, KC_PWR, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_COPY, KC_FIND, KC_BRID, KC_SLEP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TG(5), - KC_PSTE, KC_NO, KC_NO, KC_WAKE, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO - ), - /* Level 6: MIDI Layer - * ,---------------------------------------------------------------------------------------. - * | C1 | E1 | G1 | B1 | D2 | F2 | A2 | C3 | E3 | G3 | | - * |---------------------------------------------------------------------------------------| - * | D1 | F1 | A1 | C2 | E2 | G2 | B2 | D3 | F3 | A3 | TG(6) | - * |---------------------------------------------------------------------------------------| - * | OCTD | OCTU | TRNSD | TRNSU | | | | | | | - * |---------------------------------------------------------------------------------------| - */ - [6] = LAYOUT( - MI_C1, MI_E1, MI_G1, MI_B1, MI_D2, MI_F2, MI_A2, MI_C3, MI_E3, MI_G3, KC_NO, - MI_D1, MI_F1, MI_A1, MI_C2, MI_E2, MI_G2, MI_B2, MI_D3, MI_F3, MI_A3, TG(6), - MI_OCTD, MI_OCTU, MI_TRSD, MI_TRSU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO - ) -}; - -// Light LEDs 0 through 16 in white when keyboard layer 0 is active -const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {0, 17, HSV_WHITE} -); -// Light LEDs 0 through 16 in blue when keyboard layer 1 is active -const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {0, 17, HSV_BLUE} -); -// Light LEDs 0 through 16 in green when keyboard layer 2 is active -const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {0, 17, HSV_GREEN} -); -// Light LEDs 0 through 16 in yellow when keyboard layer 3 is active -const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {0, 17, HSV_YELLOW} -); -// Light LEDs 0 through 16 in red when keyboard layer 4 is active -const rgblight_segment_t PROGMEM my_layer4_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {0, 17, HSV_RED} -); -// Light LEDs 0 through 16 in cyan when keyboard layer 5 is active -const rgblight_segment_t PROGMEM my_layer5_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {0, 17, HSV_CYAN} -); -// Light LEDs 0 through 16 in orange when keyboard layer 6 is active -const rgblight_segment_t PROGMEM my_layer6_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {0, 17, HSV_ORANGE} -); - -// Now define the array of layers. Later layers take precedence -const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( - my_layer0_layer, - my_layer1_layer, - my_layer2_layer, - my_layer3_layer, - my_layer4_layer, - my_layer5_layer, - my_layer6_layer -); - -void keyboard_post_init_user(void) { - // Enable the LED layers - rgblight_layers = my_rgb_layers; -} - -layer_state_t layer_state_set_user(layer_state_t state) { - for (int i = 0; i < 7; i++) { - rgblight_set_layer_state(i, layer_state_cmp(state, i)); - } - return state; -} diff --git a/keyboards/miuni32/keymaps/cassdelacruzmunoz/readme.md b/keyboards/miuni32/keymaps/cassdelacruzmunoz/readme.md deleted file mode 100644 index b9e42964cfd9..000000000000 --- a/keyboards/miuni32/keymaps/cassdelacruzmunoz/readme.md +++ /dev/null @@ -1,19 +0,0 @@ -# Cass de la Cruz-Munoz's keymap for Miuni32 - -7 layers: - -* QUERTY -* Layer access -* Numberpad, navigation keys -* Symbols -* Function and media keys -* Assorted command keys -* MIDI keys - -![QUERTY](https://imgur.com/0B3Xl2D.png) -![Layers](https://imgur.com/Rb9KRgL.png) -![Numberpad & Navigation](https://imgur.com/psq5U5o.png) -![Symbols](https://imgur.com/nbxOjCG.png) -![Function & Media](https://imgur.com/AZe6Vib.png) -![Commands](https://imgur.com/Pl0NYbw.png) -![MIDI](https://imgur.com/c6BcDe2.png) diff --git a/keyboards/mt/mt980/keymaps/walker/config.h b/keyboards/mt/mt980/keymaps/walker/config.h deleted file mode 100644 index 0bd39599381b..000000000000 --- a/keyboards/mt/mt980/keymaps/walker/config.h +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once - -#define TAPPING_TERM 200 -#define ONESHOT_TAP_TOGGLE 5 -#define ONESHOT_TIMEOUT 5000 diff --git a/keyboards/mt/mt980/keymaps/walker/keymap.c b/keyboards/mt/mt980/keymaps/walker/keymap.c deleted file mode 100644 index f0817dd33d59..000000000000 --- a/keyboards/mt/mt980/keymaps/walker/keymap.c +++ /dev/null @@ -1,168 +0,0 @@ -#include QMK_KEYBOARD_H - -bool numlock_on = true; - -typedef struct { - bool is_press_action; - int state; -} tap; - -enum { - SINGLE_TAP = 1, - SINGLE_HOLD = 2, - DOUBLE_TAP = 3, - DOUBLE_HOLD = 4, - TRIPLE_TAP = 5, - TRIPLE_HOLD = 6 -}; - -enum { - ALT_L1 = 0 -}; - -int cur_dance (tap_dance_state_t *state); -void alt_finished (tap_dance_state_t *state, void *user_data); -void alt_reset (tap_dance_state_t *state, void *user_data); - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - [0] = LAYOUT( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_INS, KC_PSCR, KC_PGUP, KC_PGDN, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, - KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, - KC_LCTL, KC_LGUI, TD(ALT_L1), KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), - - [1] = LAYOUT( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUSE, KC_SCRL, KC_HOME, KC_END, - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RGB_TOG, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, RGB_RMOD, RGB_VAD, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS) - -}; - -int cur_dance (tap_dance_state_t *state) { - if (state->count == 1) { - if (state->pressed) return SINGLE_HOLD; - else return SINGLE_TAP; - } - else if (state->count == 2) { - if (state->pressed) return DOUBLE_HOLD; - else return DOUBLE_TAP; - } - else if (state->count == 3) { - if (state->interrupted || !state->pressed) return TRIPLE_TAP; - else return TRIPLE_HOLD; - } - else return 8; -} - -static tap alttap_state = { - .is_press_action = true, - .state = 0 -}; - -void alt_finished (tap_dance_state_t *state, void *user_data) { - alttap_state.state = cur_dance(state); - switch (alttap_state.state) { - case SINGLE_TAP: set_oneshot_layer(1, ONESHOT_START); clear_oneshot_layer_state(ONESHOT_PRESSED); break; - case SINGLE_HOLD: register_code(KC_LALT); break; - case DOUBLE_TAP: set_oneshot_layer(1, ONESHOT_START); set_oneshot_layer(1, ONESHOT_PRESSED); break; - case DOUBLE_HOLD: register_code(KC_LALT); layer_on(1); break; - } -} - -void alt_reset (tap_dance_state_t *state, void *user_data) { - switch (alttap_state.state) { - case SINGLE_TAP: break; - case SINGLE_HOLD: unregister_code(KC_LALT); break; - case DOUBLE_TAP: break; - case DOUBLE_HOLD: layer_off(1); unregister_code(KC_LALT); break; - } - alttap_state.state = 0; -} - -tap_dance_action_t tap_dance_actions[] = { - [ALT_L1] = ACTION_TAP_DANCE_FN_ADVANCED(NULL,alt_finished, alt_reset) -}; - -bool led_update_keymap(led_t led_state) { - if (led_state.num_lock) { - numlock_on = true; - } - else { - numlock_on = false; - } -} - -bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { - - switch (keycode) { - case KC_TRNS: - case KC_NO: - /* Always cancel one-shot layer when another key gets pressed */ - if (record->event.pressed && is_oneshot_layer_active()) - clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED); - return true; - case QK_BOOT: - /* Don't allow reset from oneshot layer state */ - if (record->event.pressed && is_oneshot_layer_active()) { - clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED); - return false; - } - return true; - case KC_PPLS: - if (!numlock_on) { - if (is_oneshot_layer_active() || layer_state & 0x2) { - if (record->event.pressed) - register_code(KC_HOME); - else - unregister_code(KC_HOME); - clear_oneshot_layer_state(ONESHOT_START); - } - else { - if (record->event.pressed) - register_code(KC_PGUP); - else - unregister_code(KC_PGUP); - } - return false; - } - return true; - case KC_PENT: - if (!numlock_on) { - if (is_oneshot_layer_active() || layer_state & 0x2) { - if (record->event.pressed) - register_code(KC_END); - else - unregister_code(KC_END); - clear_oneshot_layer_state(ONESHOT_START); - } - else { - if (record->event.pressed) - register_code(KC_PGDN); - else - unregister_code(KC_PGDN); - } - return false; - } - return true; - case KC_NUM: - /* Shift + NumLock will be treated as shift-Insert */ - if ((keyboard_report->mods & MOD_BIT (KC_LSFT)) || (keyboard_report->mods & MOD_BIT (KC_RSFT))) { - if (record->event.pressed) { - register_code(KC_INS); - unregister_code(KC_INS); - } - return false; - } - else - return true; - default: - return true; - } - return true; -} diff --git a/keyboards/mt/mt980/keymaps/walker/rules.mk b/keyboards/mt/mt980/keymaps/walker/rules.mk deleted file mode 100644 index e5ddcae8d927..000000000000 --- a/keyboards/mt/mt980/keymaps/walker/rules.mk +++ /dev/null @@ -1 +0,0 @@ -TAP_DANCE_ENABLE = yes diff --git a/keyboards/nack/keymaps/farfalleflickan/keymap.c b/keyboards/nack/keymaps/farfalleflickan/keymap.c deleted file mode 100644 index ec0b2434fa46..000000000000 --- a/keyboards/nack/keymaps/farfalleflickan/keymap.c +++ /dev/null @@ -1,203 +0,0 @@ -/* Copyright 2020 farfalleflickan - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include QMK_KEYBOARD_H -#include "keymap.h" - -#define ____ _______ - -// Defines names for use in layer keycodes and the keymap -enum layer_names { - BASE, - NOGUI, - NUM, - FN -}; - -// Defines the keycodes used by our macros in process_record_user -enum custom_keycodes { - CK_LSFT = SAFE_RANGE, // Shift - CK_RALT, // AltGr - CK_BSPC_DEL, // Backspace or Del (if pressed with CK_LSFT or CK_RALT) - KK_RESET -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [BASE] = LAYOUT( -/* __________________________________________________________________________________________________________________________________________________________________________ - | \ \ \ \ \ \ \ \ \ \ \ \ \ \ */ -// | |----TAB-----|---Q--------|-----W------|-----E------|-----R------|----T-------|-----Y------|-----U------|----I-------|------O-----|----P-------|----Å-------|--( ¨^~ )---| - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, -// | |----ESC-----|---A--------|---S--------|----D-------|-----F------|-----G------|-----H------|-----J------|-----K------|-----L------|-----Ö------|-----Ä------|--( '* )----| - KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, -// | |---SHIFT----|---Z--------|---X--------|----C-------|-----V------|-----B------|-----N------|------M-----|---( ,; )---|---( .: )---|---( -_ )---|----UP------|-BACKSPACE--| - CK_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, CK_BSPC_DEL, -// | |---CTRL-----|---ALT------|---META-----|----FN_1----|----------SPACE----------|----FN_2----|----AltGr---|--( <>| )---|---ENTER----|-LEFT-------|---DOWN-----|--RIGHT-----| - KC_LCTL, KC_LALT, KC_LGUI, MO(NUM), KC_SPC, KC_NO, MO(FN), CK_RALT, KC_NUBS, KC_ENT, KC_LEFT, KC_DOWN, KC_RIGHT -// \|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________| - ), - [NOGUI] = LAYOUT( -/* __________________________________________________________________________________________________________________________________________________________________________ - | \ \ \ \ \ \ \ \ \ \ \ \ \ \ */ -// | |----TAB-----|---Q--------|-----W------|-----E------|-----R------|----T-------|-----Y------|-----U------|----I-------|------O-----|----P-------|----Å-------|--( ¨^~ )---| - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, -// | |----ESC-----|---A--------|---S--------|----D-------|-----F------|-----G------|-----H------|-----J------|-----K------|-----L------|-----Ö------|-----Ä------|--( '* )----| - KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, -// | |---SHIFT----|---Z--------|---X--------|----C-------|-----V------|-----B------|-----N------|------M-----|---( ,; )---|---( .: )---|---( -_ )---|----UP------|-BACKSPACE--| - CK_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, CK_BSPC_DEL, -// | |---CTRL-----|---ALT------|---META-----|----FN_1----|----------SPACE----------|----FN_2----|----AltGr---|--( <>| )---|---ENTER----|-LEFT-------|---DOWN-----|--RIGHT-----| - KC_LCTL, KC_LALT, KC_NO, MO(NUM), KC_SPC, KC_NO, TO(BASE), CK_RALT, KC_NUBS, KC_ENT, KC_LEFT, KC_DOWN, KC_RIGHT -// \|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________| - ), - [NUM] = LAYOUT( -/* __________________________________________________________________________________________________________________________________________________________________________ - | \ \ \ \ \ \ \ \ \ \ \ \ \ \ */ -// | |---TAB------|---( 1! )---|--( 2"@ )---|--( 3#£ )---|---( 4¤$ )--|--( 5%€ )---|---( 6& )---|--( 7/{ )---|--( 8([ )---|--( 9)] )---|--( 0=} )---|---( +?\ )--|---( ´` )---| - ____, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, -// | |----ESC-----|-----F1-----|-----F2-----|----F3------|----F4------|----F5------|-----F6-----|-----F7------|----F8-----|-----F9-----|-----F10----|----F11-----|----F12-----| - ____, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, -// | |---SHIFT----|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------| - ____, KC_P0, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_P6, KC_P7, KC_P8, KC_P9, KC_PGUP, KC_NO, -// | |---CTRL-----|---ALT------|---META-----|---FN_1-----|------------|------------|----FN_2----|--AltGr-----|---( §½ )---|------------|------------|------------|------------| - ____, ____, ____, TO(BASE), KC_NO, KC_NO, MO(FN), ____, KC_GRV, KC_PDOT, KC_HOME, KC_PGDN, KC_END -// \|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________| - ), - [FN] = LAYOUT( -/* __________________________________________________________________________________________________________________________________________________________________________ - | \ \ \ \ \ \ \ \ \ \ \ \ \ \ */ -// | |-RGB TOGGLE-|-CHANGE RGB-|-RGB HUE UP-|-RGB SAT UP-|------------|------------|------------|------------|------------|------------|------------|------------|-QK_BOOT KBD--| - RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KK_RESET, -// | |------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------| - MU_TOGG, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, -// | |------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|-RGB LIGHT +|------------| - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_VAI, KC_NO, -// | |------------|------------|------------|---FN_1-----|------------|------------|----FN_2----|------------|------------|------------|------------|-RGB LIGHT -|------------| - KC_NO, KC_NO, KC_NO, TO(BASE), KC_NO, KC_NO, TO(BASE), TO(NOGUI), KC_NO, KC_NO, KC_NO, RGB_VAD, KC_NO -// \|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________| - ) -}; - -// Interrupt bools -bool lshift = false, ralt = false; - -// Number of items that are saved in prev_kcs -uint8_t prev_indx = 0; -// Used to save the last 6 actual keycodes -uint16_t prev_kcs[6] = {0, 0, 0, 0, 0, 0}; - -/* -Used to add a keycode to a prev_kcs to remember it. -When full the last code gets discarded and replaced by -the new one. -*/ -void add_to_prev(uint16_t kc){ - for (int i=0; i0; i--){ - prev_kcs[i] = prev_kcs[i-1]; - } - prev_kcs[0] = kc; - } else { - prev_kcs[prev_indx] = kc; - prev_indx++; - } -} - -/* -Unregisters all codes saved in prev_kcs and resets prev_indx. -gets called on multiple occasions mainly when shift is released -and when frankenkeycodes are pressed. Prevents output of -wrong characters when really specific key combinations -that would never occur during normal usage are pressed. -*/ -void unreg_prev(void){ - if (prev_indx == 0) - return; - for (int i=0; ievent.pressed) { - unregister_code(KC_LSFT); - register_code(KC_LSFT); - lshift = true; - } else { - unreg_prev(); - unregister_code(KC_LSFT); - lshift = false; - } - return false; - break; - case CK_RALT: - if(record->event.pressed) { - unregister_code(KC_RALT); - register_code(KC_RALT); - ralt = true; - } else { - unreg_prev(); - unregister_code(KC_RALT); - ralt = false; - } - return false; - break; - case CK_BSPC_DEL: - if (ralt==true) { - RALT_NO(KC_BSPC,KC_DEL); - } else { - SHIFT_NO(KC_BSPC,KC_DEL); - } - break; - case KK_RESET: // Basically, turn off RGB before resetting - if (record->event.pressed) { - key_timer = timer_read32(); - #ifdef RGB_MATRIX_ENABLE - rgb_matrix_disable_noeeprom(); - #endif - } else { - if (timer_elapsed32(key_timer) >= 20) { - reset_keyboard(); - } - } - break; - default: - if(record->event.pressed) { - timer_timeout_keymap(); - if (lshift) - register_code(KC_LSFT); - else - unregister_code(KC_LSFT); - - if (ralt) - register_code(KC_ALGR); - else - unregister_code(KC_ALGR); - } - break; - } - return true; -} - -__attribute__((weak)) -void timer_timeout_keymap(void){ -} diff --git a/keyboards/nack/keymaps/farfalleflickan/keymap.h b/keyboards/nack/keymaps/farfalleflickan/keymap.h deleted file mode 100644 index 212f45ffdb4a..000000000000 --- a/keyboards/nack/keymaps/farfalleflickan/keymap.h +++ /dev/null @@ -1,116 +0,0 @@ -/* Copyright 2020 farfalleflickan - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once -#include "quantum.h" - -void add_to_prev(uint16_t kc); -void unreg_prev(void); -void timer_timeout_keymap(void); -bool process_record_user(uint16_t keycode, keyrecord_t *record); - -// Normal shift status -#define SHIFT_NORM(kc1, kc2) \ -if (record->event.pressed) { \ - timer_timeout_keymap(); \ - if (lshift) { \ - register_code(KC_LSFT); \ - unregister_code(kc2); \ - register_code(kc2); \ - add_to_prev(kc2); \ - } else { \ - unregister_code(KC_LSFT); \ - unregister_code(kc1); \ - register_code(kc1); \ - } \ -} else { \ - unregister_code(kc1); \ - unregister_code(kc2); \ -} \ -return false; - -// Always shifted -#define SHIFT_ALL(kc1, kc2) \ -if (record->event.pressed) { \ - timer_timeout_keymap(); \ - register_code(KC_LSFT); \ - if (lshift) { \ - unregister_code(kc2); \ - register_code(kc2); \ - add_to_prev(kc2); \ - } else { \ - unregister_code(kc1); \ - register_code(kc1); \ - add_to_prev(kc1); \ - } \ -} else { \ - unregister_code(kc1); \ - unregister_code(kc2); \ - unreg_prev(); \ - if (lshift) \ - register_code(KC_LSFT); \ - else \ - unregister_code(KC_LSFT); \ -} \ -return false; - -// Never shifted -#define SHIFT_NO(kc1, kc2) \ -if (record->event.pressed) { \ - timer_timeout_keymap(); \ - unregister_code(KC_LSFT); \ - if (lshift) { \ - unregister_code(kc2); \ - register_code(kc2); \ - add_to_prev(kc2); \ - } else { \ - unregister_code(kc1); \ - register_code(kc1); \ - } \ -} else { \ - unregister_code(kc1); \ - unregister_code(kc2); \ - unreg_prev(); \ - if (lshift) \ - register_code(KC_LSFT); \ - else \ - unregister_code(KC_LSFT); \ -} \ -return false; - -//Never RALT -#define RALT_NO(kc1, kc2) \ -if (record->event.pressed) { \ - timer_timeout_keymap(); \ - unregister_code(KC_RALT); \ - if (ralt) { \ - unregister_code(kc2); \ - register_code(kc2); \ - add_to_prev(kc2); \ - } else { \ - unregister_code(kc1); \ - register_code(kc1); \ - } \ -} else { \ - unregister_code(kc1); \ - unregister_code(kc2); \ - unreg_prev(); \ - if (ralt) \ - register_code(KC_RALT); \ - else \ - unregister_code(KC_RALT); \ -} \ -return false; diff --git a/keyboards/nack/keymaps/farfalleflickan/readme.md b/keyboards/nack/keymaps/farfalleflickan/readme.md deleted file mode 100644 index fbe5c6f5e3cb..000000000000 --- a/keyboards/nack/keymaps/farfalleflickan/readme.md +++ /dev/null @@ -1 +0,0 @@ -# farfalleflickan's keymap for nack diff --git a/keyboards/ning/tiny_board/tb16_rgb/keymaps/ningjx/keymap.c b/keyboards/ning/tiny_board/tb16_rgb/keymaps/ningjx/keymap.c deleted file mode 100644 index e9529fe91e15..000000000000 --- a/keyboards/ning/tiny_board/tb16_rgb/keymaps/ningjx/keymap.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright 2023 Ning (@ningjx) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* - * ┌───┬───┬───┬───┐ - * │ 7 │ 8 │ 9 │RGB│ - * ├───┼───┼───┼───┤ - * │ 4 │ 5 │ 6 │MOD│ - * ├───┼───┼───┼───┤ - * │ 1 │ 2 │ 3 │ - │ - * ├───┼───┼───┼───┤ - * │ 0 │ . │Ent│ + │ - * └───┴───┴───┴───┘ - */ - [0] = LAYOUT_ortho_4x4( - KC_P7, KC_P8, KC_P9, RGB_TOG, - KC_P4, KC_P5, KC_P6, RGB_MODE_FORWARD, - KC_P1, KC_P2, KC_P3, KC_PMNS, - KC_P0, KC_PDOT, KC_PENT, KC_PPLS - ) -}; diff --git a/keyboards/nullbitsco/nibble/keymaps/snailmap/keymap.c b/keyboards/nullbitsco/nibble/keymaps/snailmap/keymap.c deleted file mode 100644 index a53335003f65..000000000000 --- a/keyboards/nullbitsco/nibble/keymaps/snailmap/keymap.c +++ /dev/null @@ -1,543 +0,0 @@ -/* Copyright 2021 dogspace - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H - -enum custom_keycodes { - KC_CUST = SAFE_RANGE, -}; - -enum layer_names { - _MA, - _L1, - _L2, - _L3 -}; - -// NOTE: Default keymap layers were designed for ANSI split-space layout http://www.keyboard-layout-editor.com/#/gists/f28bd5ff4e62f69e89896df3a59671c6 -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_MA] = LAYOUT_ansi( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, - KC_MUTE, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, LCTL(KC_F), - KC_CAPS, MO(_L2), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_CALC, - TG(_L2), KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_WHOM, - MO(_L3), KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_L1), LCTL(KC_C), LCTL(KC_V), KC_LEFT, KC_DOWN, KC_RGHT - ), - [_L1] = LAYOUT_ansi( - KC_GRAVE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - RGB_TOG, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_UP, _______, _______, _______, _______, _______, _______, - _______, LCTL(KC_Z), KC_LCTL, KC_LSFT, _______, _______, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_END, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, KC_PGDN, _______, _______, LCTL(KC_SLSH), _______, _______, _______, - _______, _______, _______, _______, _______, _______, LCTL(KC_X), _______, _______, _______, _______ - ), - [_L2] = LAYOUT_ansi( - KC_GRAVE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - RGB_TOG, _______, _______, _______, _______, _______, _______, KC_PAST, KC_7, KC_8, KC_9, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, KC_PPLS, KC_4, KC_5, KC_6, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, KC_PMNS, KC_1, KC_2, KC_3, _______, _______, _______, _______, - _______, _______, _______, _______, KC_0, KC_PSLS, _______, _______, _______, _______, _______ - ), - [_L3] = LAYOUT_ansi( - _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, - RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - KC_SYRQ, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ - ) -}; - -#ifdef OLED_ENABLE -/*=========================================== OLED CONFIGURATION ===========================================*/ -bool oled_horizontal = true; // OLED rotation (true = horizontal, false = vertical) -bool ansi_layout = true; // ANSI or ISO layout (true = ANSI, false = ISO) -bool split_space = true; // Split spacebar (true = split spacebar, false = 6.25u or 7u spacebar) -bool three_mods_left = true; // Left mods layout (true = 3x 1.25u keys, false = 2x 1.5u keys) -bool three_mods_right = false; // Right mods layout (true = 3x 1u keys, false = 2x 1.5u keys) -bool graph_direction = true; // Graph movement (true = right to left, false = left to right) -float graph_top_wpm = 100.0; // Minimum WPM required to reach the top of the graph -int graph_refresh = 1000; // In milliseconds, determines the graph-line frequency -int icon_med_wpm = 50; // WPM required to display the medium snail -int icon_fast_wpm = 72; // WPM required to display the fast snail -// Layer names: Should be exactly 5 characters in length if vertical display, or 6 characters if horizontal -#define MA_LAYER_NAME "QWERTY" // Layer _MA name -#define L1_LAYER_NAME "ARROWS" // Layer _L1 name -#define L2_LAYER_NAME "NUMPAD" // Layer _L2 name -#define L3_LAYER_NAME "FUNCTN" // Layer _L3 name -/*================================================================================================================*/ -bool first_loop = true; -int timer = 0; -int wpm_limit = 20; -int max_wpm = -1; -int wpm_icon = -1; -int graph_lines[64]; - -// Set OLED rotation -oled_rotation_t oled_init_user(oled_rotation_t rotation) { - if (oled_horizontal) { - return OLED_ROTATION_180; - } else { - return OLED_ROTATION_90; - } -} - -// Toggles pixel on/off, converts horizontal coordinates to vertical equivalent if necessary -static void write_pixel(int x, int y, bool onoff) { - if (oled_horizontal) { - oled_write_pixel(x, y, onoff); - } else { - oled_write_pixel(y, 127 - x, onoff); - } -} - -// Draw static background image to OLED (keyboard with no bottom row) -static void render_background(void) { - if (oled_horizontal) { - static const char PROGMEM oled_keymap_horizontal[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x84, 0x80, 0x80, 0x80, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, - 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, - 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, - 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, - 0x80, 0x04, 0x04, 0x04, 0x04, 0x84, 0x84, 0x84, 0x84, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - }; - oled_write_raw_P(oled_keymap_horizontal, sizeof(oled_keymap_horizontal)); - } else { - static const char PROGMEM oled_keymap_vertical[] = { - 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, - 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, - 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, - 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, - 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - }; - oled_write_raw_P(oled_keymap_vertical, sizeof(oled_keymap_vertical)); - } -} - -// Location of OLED keyboard's top left pixel, relative to the display -static const int keymap_template[2] = {41, 0}; -// Location of key highlights top left pixels, relative to keymap_template {X, Y, Key length in px} -static int keymap_coords[MATRIX_ROWS][MATRIX_COLS][3] = { - { {12, 15, 1}, {5, 0, 1}, {10, 0, 1}, {15, 0, 1}, {20, 0, 1}, {25, 0, 1}, {30, 0, 1}, {35, 0, 1}, {40, 0, 1}, {45, 0, 1}, {50, 0, 1}, {55, 0, 1}, {60, 0, 1}, {65, 0, 1}, {70, 0, 8}, {82, 0, 1} }, - { {0, 5, 1}, {5, 5, 5}, {14, 5, 1}, {19, 5, 1}, {24, 5, 1}, {29, 5, 1}, {34, 5, 1}, {39, 5, 1}, {44, 5, 1}, {49, 5, 1}, {54, 5, 1}, {59, 5, 1}, {64, 5, 1}, {69, 5, 1}, {74, 5, 4}, {82, 5, 1} }, - { {0, 10, 1}, {5, 10, 6}, {15, 10, 1}, {20, 10, 1}, {25, 10, 1}, {30, 10, 1}, {35, 10, 1}, {40, 10, 1}, {45, 10, 1}, {50, 10, 1}, {55, 10, 1}, {60, 10, 1}, {65, 10, 1}, {0, 0, 0}, {70, 10, 8}, {82, 10, 1} }, - { {0, 15, 1}, {5, 15, 8}, {17, 15, 1}, {22, 15, 1}, {27, 15, 1}, {32, 15, 1}, {37, 15, 1}, {42, 15, 1}, {47, 15, 1}, {52, 15, 1}, {57, 15, 1}, {62, 15, 1}, {67, 15, 6}, {0, 0, 0}, {77, 15, 1}, {82, 15, 1} }, - { {0, 20, 1}, {5, 20, 2}, {11, 20, 2}, {17, 20, 2}, {0, 0, 0}, {0, 0, 0}, {23, 20, 12}, {0, 0, 0}, {0, 0, 0}, {39, 20, 3}, {56, 20, 4}, {64, 20, 4}, {72, 20, 1}, {0, 0, 0}, {77, 20, 1}, {82, 20, 1} } -}; - -// Draw the bottom row of the keyboard (based on OLED config variables), update coordinates -static void render_fn_row(void) { - // Update locations of spacebar and modifier key highlights - if ((split_space == false) && (three_mods_left == false)) { - keymap_coords[4][1][2] = 3; - keymap_coords[4][2][0] = 12; - keymap_coords[4][2][2] = 3; - keymap_coords[4][3][0] = 0; - keymap_coords[4][3][1] = 0; - keymap_coords[4][3][2] = 0; - keymap_coords[4][6][0] = 19; - keymap_coords[4][6][2] = 34; - } else if ((split_space == false) && (three_mods_left == true)) { - keymap_coords[4][6][2] = 30; - } - if ((split_space == false) && (three_mods_right == true)) { - keymap_coords[4][9][0] = 57; - keymap_coords[4][9][2] = 1; - keymap_coords[4][10][0] = 62; - keymap_coords[4][10][2] = 1; - keymap_coords[4][11][0] = 67; - keymap_coords[4][11][2] = 1; - } - // Draw modifiers - for (int i = 0; i < 16; i++) { - if (keymap_coords[4][i][2] != 0) { - for (int p = 0; p < keymap_coords[4][i][2]; p++) { - int x = keymap_template[0] + keymap_coords[4][i][0] + 2 + p; - write_pixel(x, 22, true); - } - } - } - // Draw second line for split spacebar - if (split_space == true) { - for (int i = 0; i < 6; i++) { - int x = keymap_template[0] + 46 + 2 + i; - write_pixel(x, 22, true); - } - } -} - -// Update OLED keyboard with ISO layout, update coordinates -static void render_iso(void) { - for (int i = 0; i < 6; i++) { - // Turn off ANSI enter - write_pixel(keymap_template[0] + 73 + i, keymap_template[1] + 12, false); - if (i < 4) { - // Turn off part of ANSI left shift - write_pixel(keymap_template[0] + 10 + i, keymap_template[1] + 17, false); - // Draw vertical line for ISO enter - write_pixel(keymap_template[0] + 79, keymap_template[1] + 8 + i, true); - } - } - // Update locations of shift and grave key highlights - keymap_coords[3][1][2] = 3; - keymap_coords[1][14][0] = 70; - keymap_coords[1][14][1] = 10; - keymap_coords[1][14][2] = 1; -} - -// Toggles pixels surrounding key -static void render_keymap(uint8_t key_row, uint8_t key_col, bool onoff) { - int length = keymap_coords[key_row][key_col][2] + 4; - int left = keymap_coords[key_row][key_col][0] + keymap_template[0]; - int top = keymap_coords[key_row][key_col][1] + keymap_template[1]; - int right = left + length - 1; - int bottom = top + 4; - - // Special case 1 - Draw enter key on ISO layout, return - if ((ansi_layout == false) && (key_row == 2) && (key_col == 14)) { - for (int i = 0; i < 10; i++) { - write_pixel(keymap_template[0] + 81, keymap_template[1] + 5 + i, onoff); - if (i < 5) { - write_pixel(keymap_template[0] + 74, keymap_template[1] + 5 + i, onoff); - } - if (i < 6) { - write_pixel(keymap_template[0] + 75, keymap_template[1] + 9 + i, onoff); - } - if (i < 7) { - write_pixel(keymap_template[0] + 75 + i, keymap_template[1] + 5, onoff); - write_pixel(keymap_template[0] + 75 + i, keymap_template[1] + 14, onoff); - } - } - return; - } - // Draw top and bottom walls (horizontal for px) - for (int x = 0; x < length; x++) { - write_pixel(left + x, top, onoff); - write_pixel(left + x, bottom, onoff); - } - // Draw left and right walls (vertical for 5px) - for (int y = 0; y < 5; y++) { - write_pixel(left, top + y, onoff); - write_pixel(right, top + y, onoff); - } - // Special case 2 - Draw right spacebar on split-space layout - if ((split_space == true) && (key_row == 4) && (key_col == 6)) { - int start = keymap_template[0] + 46; - int stop = keymap_template[0] + 55; - for (int x = start; x < stop; x++) { - write_pixel(x, top, onoff); - write_pixel(x, bottom, onoff); - } - for (int y = 0; y < 5; y++) { - write_pixel(start, top + y, onoff); - write_pixel(stop, top + y, onoff); - } - } -} - -// Write active layer name -static void render_layer_state(void) { - if (oled_horizontal) { - oled_set_cursor(0, 0); - } else { - oled_set_cursor(0, 15); - } - switch (get_highest_layer(layer_state)) { - case _MA: - oled_write_P(PSTR(MA_LAYER_NAME), false); - break; - case _L1: - oled_write_P(PSTR(L1_LAYER_NAME), false); - break; - case _L2: - oled_write_P(PSTR(L2_LAYER_NAME), false); - break; - case _L3: - oled_write_P(PSTR(L3_LAYER_NAME), false); - break; - default: - oled_write("ERROR", false); - break; - } -} - -// Update WPM counters -static void render_wpm_counters(int current_wpm) { - int cursorposition_cur = 2; - int cursorposition_max = 1; - if (oled_horizontal == false) { - cursorposition_cur = 13; - cursorposition_max = 14; - } - - char wpm_counter[4]; - wpm_counter[3] = '\0'; - wpm_counter[2] = '0' + current_wpm % 10; - wpm_counter[1] = '0' + (current_wpm / 10) % 10; - wpm_counter[0] = '0' + (current_wpm / 100) % 10; - oled_set_cursor(0, cursorposition_cur); - oled_write(wpm_counter, false); - - if (current_wpm > max_wpm) { - max_wpm = current_wpm; - wpm_limit = max_wpm + 20; - oled_set_cursor(0, cursorposition_max); - oled_write(wpm_counter, false); - } -} - -// Update WPM snail icon -static void render_wpm_icon(int current_wpm) { - // wpm_icon is used to prevent unnecessary redraw - if ((current_wpm < icon_med_wpm) && (wpm_icon != 0)) { - wpm_icon = 0; - } else if ((current_wpm >= icon_med_wpm) && (current_wpm < icon_fast_wpm) && (wpm_icon != 1)) { - wpm_icon = 1; - } else if ((current_wpm >= icon_fast_wpm) && (wpm_icon != 2)) { - wpm_icon = 2; - } else { - return; - } - static const char PROGMEM snails[][2][24] = { - {{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0xA0, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00}, - {0x40, 0x60, 0x50, 0x4E, 0x51, 0x64, 0x4A, 0x51, 0x54, 0x49, 0x41, 0x62, 0x54, 0x49, 0x46, 0x41, 0x40, 0x30, 0x09, 0x04, 0x02, 0x01, 0x00, 0x00}}, - {{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x04, 0x98, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00}, - {0x60, 0x50, 0x54, 0x4A, 0x51, 0x64, 0x4A, 0x51, 0x55, 0x49, 0x41, 0x62, 0x54, 0x49, 0x46, 0x41, 0x21, 0x10, 0x0A, 0x08, 0x05, 0x02, 0x00, 0x00}}, - {{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x10, 0x10, 0x10, 0x20, 0x40, 0x40, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00}, - {0x60, 0x58, 0x54, 0x62, 0x49, 0x54, 0x52, 0x51, 0x55, 0x49, 0x62, 0x52, 0x4D, 0x45, 0x46, 0x22, 0x21, 0x11, 0x10, 0x0A, 0x08, 0x05, 0x02, 0x00}} - }; - if (oled_horizontal) { - oled_set_cursor(3, 1); - oled_write_raw_P(snails[wpm_icon][0], sizeof(snails[wpm_icon][0])); - oled_set_cursor(3, 2); - oled_write_raw_P(snails[wpm_icon][1], sizeof(snails[wpm_icon][1])); - } else { - oled_set_cursor(0, 11); - oled_write_raw_P(snails[wpm_icon][0], sizeof(snails[wpm_icon][0])); - oled_set_cursor(0, 12); - oled_write_raw_P(snails[wpm_icon][1], sizeof(snails[wpm_icon][1])); - } -} - -// Update WPM graph -static void render_wpm_graph(int current_wpm) { - int line_height = ((current_wpm / graph_top_wpm) * 7); - if (line_height > 7) { - line_height = 7; - } - // Count graph line pixels, return if nothing to draw - int pixel_count = line_height; - for (int i = 0; i < 63; i++) { - pixel_count += graph_lines[i]; - } - if (pixel_count == 0) { - return; - } - // Shift array elements left or right depending on graph_direction, append new graph line - if (graph_direction) { - for (int i = 0; i < 63; i++) { - graph_lines[i] = graph_lines[i + 1]; - } - graph_lines[63] = line_height; - } else { - for (int i = 63; i > 0; i--) { - graph_lines[i] = graph_lines[i - 1]; - } - graph_lines[0] = line_height; - } - // Draw all graph lines (left to right, bottom to top) - int draw_count, arrpos; - for (int x = 1; x <= 127; x += 2) { - arrpos = x / 2; - draw_count = graph_lines[arrpos]; - for (int y = 31; y >= 25; y--) { - if (draw_count > 0) { - write_pixel(x, y, true); - draw_count--; - } else { - write_pixel(x, y, false); - } - } - } -} - -// Call OLED functions -bool oled_task_user(void) { - // Draw OLED keyboard, prevent redraw - if (first_loop) { - render_background(); - render_fn_row(); - if (ansi_layout == false) { - render_iso(); - } - first_loop = false; - } - // Get current WPM, subtract 25% for accuracy and prevent large jumps caused by simultaneous keypresses - int current_wpm = get_current_wpm(); - // Note: This will most likely be removed once QMK's WPM calculation is updated - current_wpm -= current_wpm >> 2; - if (current_wpm > wpm_limit) { - current_wpm = max_wpm; - set_current_wpm(max_wpm); - } - // Write active layer name to display - render_layer_state(); - // Update WPM counters - render_wpm_counters(current_wpm); - // Update WPM snail icon - render_wpm_icon(current_wpm); - // Update WPM graph every graph_refresh milliseconds - if (timer_elapsed(timer) > graph_refresh) { - render_wpm_graph(current_wpm); - timer = timer_read(); - } - return false; -} -#endif - -// Called by QMK during key processing -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - // Forwards keystrokes from an external input device over UART/TRRS - process_record_remote_kb(keycode, record); - - #ifdef OLED_ENABLE - // Toggle pixels surrounding key - render_keymap(record->event.key.row, record->event.key.col, record->event.pressed); - #endif - - return true; -} - -// Rotary encoder - RGB and OLED settings -void change_RGB(bool clockwise) { - // While on any layer except default: // Rotary = RGB Mode - bool shift = get_mods() & MOD_MASK_SHIFT; // Rotary + Shift = OLED Brightness - bool ctrl = get_mods() & MOD_MASK_CTRL; // Rotary + Ctrl = RGB Brightness - bool gui = get_mods() & MOD_MASK_GUI; // Rotary + Gui = RGB Saturation - bool alt = get_mods() & MOD_MASK_ALT; // Rotary + Alt = RGB Hue - - if (clockwise) { - if (shift) { - int new_brightness = oled_get_brightness() + 10; - if (new_brightness < 255) { - oled_set_brightness(new_brightness); - } else { - oled_set_brightness(255); - } - } else if (ctrl) { - rgblight_increase_val(); - } else if (gui) { - rgblight_increase_sat(); - } else if (alt) { - rgblight_increase_hue(); - } else { - rgblight_step(); - } - } else { - if (shift) { - int new_brightness = oled_get_brightness() - 10; - if (new_brightness > 0) { - oled_set_brightness(new_brightness); - } else { - oled_set_brightness(0); - } - } else if (ctrl) { - rgblight_decrease_val(); - } else if (gui) { - rgblight_decrease_sat(); - } else if (alt) { - rgblight_decrease_hue(); - } else { - rgblight_step_reverse(); - } - } -} - -// Rotary encoder behavior - Change volume on default layer, RGB/OLED on other layers -bool encoder_update_user(uint8_t index, bool clockwise) { - if (layer_state_is(0)) { - if (clockwise) { - tap_code(KC_VOLU); - } else { - tap_code(KC_VOLD); - } - } else { - change_RGB(clockwise); - } - return true; -} - -// Initialize remote keyboard, if connected -void matrix_init_user(void) { - matrix_init_remote_kb(); -} - -// Scan and parse keystrokes from remote keyboard, if connected -void matrix_scan_user(void) { - matrix_scan_remote_kb(); -} diff --git a/keyboards/nullbitsco/nibble/keymaps/snailmap/readme.md b/keyboards/nullbitsco/nibble/keymaps/snailmap/readme.md deleted file mode 100644 index 5ea93b01afbd..000000000000 --- a/keyboards/nullbitsco/nibble/keymaps/snailmap/readme.md +++ /dev/null @@ -1,36 +0,0 @@ - -# SnailMap - -![KeySnail](https://i.imgur.com/yEQJyI2h.png) - -## :snail: Display - -- Mini keyboard that highlights the currently pressed keys -- Snail icon that changes based on the current WPM -- Current and max WPM counters -- Active layer name -- WPM graph - -## :gear: Customization - -The `OLED configuration variables` can be used to easily customize the display - -``` -oled_horizontal - Horizontal or vertical orientation -ansi_layout - ANSI or ISO layout -split_space - Bottom row spacebar -three_mods_left - Left modifier keys -three_mods_right - Right modifier keys -graph_direction - Graph movement direction -graph_refresh - Frequency of graph lines -graph_top_wpm - WPM required to reach the top of the graph -icon_med_wpm - WPM required to display the medium snail -icon_fast_wpm - WPM required to display the fast snail -MA_LAYER_NAME - Layer 0 display name -L1_LAYER_NAME - Layer 1 display name -L2_LAYER_NAME - Layer 2 display name -L3_LAYER_NAME - Layer 3 display name -``` -___ - -###### *Keymap created by* [dogspace](https://github.com/dogspace) diff --git a/keyboards/nullbitsco/nibble/keymaps/snailmap/rules.mk b/keyboards/nullbitsco/nibble/keymaps/snailmap/rules.mk deleted file mode 100644 index 4e0f1b619a23..000000000000 --- a/keyboards/nullbitsco/nibble/keymaps/snailmap/rules.mk +++ /dev/null @@ -1,5 +0,0 @@ -OLED_ENABLE = yes -WPM_ENABLE = yes -SPACE_CADET_ENABLE = no -GRAVE_ESC_ENABLE = no -MAGIC_ENABLE = no \ No newline at end of file diff --git a/keyboards/nullbitsco/tidbit/keymaps/snailmap_lite/keymap.c b/keyboards/nullbitsco/tidbit/keymaps/snailmap_lite/keymap.c deleted file mode 100644 index d14723df0348..000000000000 --- a/keyboards/nullbitsco/tidbit/keymaps/snailmap_lite/keymap.c +++ /dev/null @@ -1,289 +0,0 @@ -/* Copyright 2021 dogspace - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H - -enum layer_names { - _LAY0, - _LAY1, - _LAY2, - _LAY3 -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_LAY0] = LAYOUT( - KC_PSLS, KC_PAST, KC_PMNS, - KC_P7, KC_P8, KC_P9, KC_PPLS, - KC_P4, KC_P5, KC_P6, KC_PPLS, - KC_P1, KC_P2, KC_P3, KC_PENT, - KC_P0, KC_P0, KC_PDOT, KC_PENT - ), - [_LAY1] = LAYOUT( - _______, _______, _______, - _______, _______, _______, _______, - _______, _______, _______, _______, - _______, _______, _______, _______, - _______, _______, _______, _______ - ), - [_LAY2] = LAYOUT( - _______, _______, _______, - _______, _______, _______, _______, - _______, _______, _______, _______, - _______, _______, _______, _______, - _______, _______, _______, _______ - ), - [_LAY3] = LAYOUT( - _______, _______, _______, - _______, _______, _______, _______, - _______, _______, _______, _______, - _______, _______, _______, _______, - _______, _______, _______, _______ - ) -}; - -#ifdef ENCODER_MAP_ENABLE -const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { - [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), }, - [1] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), }, - [2] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), }, - [3] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), }, -}; -#endif - -#ifdef OLED_ENABLE -/*=========================================== OLED CONFIGURATION ===========================================*/ -#define OLED_ROTATE true // OLED rotation (flip 180* from default orientation) -#define GRAPH_DIRECTION true // Graph movement (true = right to left, false = left to right) -#define GRAPH_TOP_WPM 100.0 // Minimum WPM required to reach the top of the graph -#define GRAPH_REFRESH 1000 // In milliseconds, determines the graph-line frequency -#define ICON_MED_WPM 10 // WPM required to display the medium snail -#define ICON_FAST_WPM 25 // WPM required to display the fast snail - -// Layer names: Should be exactly 5 characters in length if vertical display, or 6 characters if horizontal -#define MA_LAYER_NAME "LAY 0" // Layer _MA name -#define L1_LAYER_NAME "LAY 1" // Layer _L1 name -#define L2_LAYER_NAME "LAY 2" // Layer _L2 name -#define L3_LAYER_NAME "LAY 3" // Layer _L3 name - -#define CAPLCK_STR "CAPLK" // Caps Lock string -#define NUMLCK_STR "NUMLK" // Num Lock string -#define SCRLK_STR "SCRLK" // Scroll Lock string -#define EMPTY_STR " " // Empty string - -/*================================================================================================================*/ - -typedef struct oled_params { - bool first_loop : 1; - uint8_t wpm_icon : 7; - uint16_t timer; - uint8_t wpm_limit; - uint8_t max_wpm; - uint8_t graph_lines[32]; -} oled_params; - -oled_params oled_data; - -void oled_init_data(void) { - // Initialize oled params - oled_data.first_loop = true; - oled_data.wpm_icon = 5; - oled_data.timer = 0; - oled_data.wpm_limit = 20; - oled_data.max_wpm = 0; - - for (int i=0; i<32; i++) { - oled_data.graph_lines[i] = 0; - } -} - -// Set OLED rotation -oled_rotation_t oled_init_user(oled_rotation_t rotation) { - oled_init_data(); - return OLED_ROTATE ? OLED_ROTATION_270 : OLED_ROTATION_90; -} - -// Draw static background image to OLED (keyboard with no bottom row) -static void render_background(void) { - static const char PROGMEM nullbits_n_oled[] = { - 0x00, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xf0, 0xf0, 0xe0, 0x80, 0x20, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xe0, 0xe0, 0xe0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, - 0x1f, 0x1f, 0x1f, 0x1f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0xf0, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, - 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - 0x00, 0x07, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x07, 0x03, 0x00, - }; - oled_write_raw_P(nullbits_n_oled, sizeof(nullbits_n_oled)); -} - -// Toggles pixel on/off, converts horizontal coordinates to vertical equivalent if necessary -static void write_pixel(uint8_t x, uint8_t y, bool onoff) { - oled_write_pixel(y, 127 - x, onoff); -} - -// Write active layer name -static void render_layer_state(void) { - oled_set_cursor(0, 15); - switch (get_highest_layer(layer_state)) { - case _LAY0: - oled_write_P(PSTR(MA_LAYER_NAME), false); - break; - case _LAY1: - oled_write_P(PSTR(L1_LAYER_NAME), false); - break; - case _LAY2: - oled_write_P(PSTR(L2_LAYER_NAME), false); - break; - case _LAY3: - oled_write_P(PSTR(L3_LAYER_NAME), false); - break; - default: - oled_write("ERROR", false); - break; - } -} - -// Update WPM counters -static void render_wpm_counters(uint8_t current_wpm) { - uint8_t cursorposition_cur = 13; - uint8_t cursorposition_max = 14; - - oled_set_cursor(0, cursorposition_cur); - oled_write(get_u8_str(current_wpm, '0'), false); - - if (current_wpm > oled_data.max_wpm) { - oled_data.max_wpm = current_wpm; - oled_data.wpm_limit = oled_data.max_wpm + 20; - oled_set_cursor(0, cursorposition_max); - oled_write(get_u8_str(current_wpm, '0'), false); - } -} - -static void render_led_status(void) { - // Host Keyboard LED Status - led_t led_state = host_keyboard_led_state(); - oled_set_cursor(0, 8); - oled_write_P(led_state.caps_lock ? PSTR(CAPLCK_STR) : PSTR(EMPTY_STR), false); - oled_set_cursor(0, 9); - oled_write_P(led_state.num_lock ? PSTR(NUMLCK_STR) : PSTR(EMPTY_STR), false); - oled_set_cursor(0, 10); - oled_write_P(led_state.scroll_lock ? PSTR(SCRLK_STR) : PSTR(EMPTY_STR), false); -} - -// Update WPM snail icon -static void render_wpm_icon(uint8_t current_wpm) { - // wpm_icon is used to prevent unnecessary redraw - if ((current_wpm < ICON_MED_WPM) && (oled_data.wpm_icon != 0)) { - oled_data.wpm_icon = 0; - } else if ((current_wpm >= ICON_MED_WPM) && (current_wpm < ICON_FAST_WPM) && (oled_data.wpm_icon != 1)) { - oled_data.wpm_icon = 1; - } else if ((current_wpm >= ICON_FAST_WPM) && (oled_data.wpm_icon != 2)) { - oled_data.wpm_icon = 2; - } else { - return; - } - static const char PROGMEM snails[][2][24] = { - {{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0xA0, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00}, - {0x40, 0x60, 0x50, 0x4E, 0x51, 0x64, 0x4A, 0x51, 0x54, 0x49, 0x41, 0x62, 0x54, 0x49, 0x46, 0x41, 0x40, 0x30, 0x09, 0x04, 0x02, 0x01, 0x00, 0x00}}, - {{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x04, 0x98, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00}, - {0x60, 0x50, 0x54, 0x4A, 0x51, 0x64, 0x4A, 0x51, 0x55, 0x49, 0x41, 0x62, 0x54, 0x49, 0x46, 0x41, 0x21, 0x10, 0x0A, 0x08, 0x05, 0x02, 0x00, 0x00}}, - {{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x10, 0x10, 0x10, 0x20, 0x40, 0x40, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00}, - {0x60, 0x58, 0x54, 0x62, 0x49, 0x54, 0x52, 0x51, 0x55, 0x49, 0x62, 0x52, 0x4D, 0x45, 0x46, 0x22, 0x21, 0x11, 0x10, 0x0A, 0x08, 0x05, 0x02, 0x00}} - }; - oled_set_cursor(0, 11); - oled_write_raw_P(snails[oled_data.wpm_icon][0], sizeof(snails[oled_data.wpm_icon][0])); - oled_set_cursor(0, 12); - oled_write_raw_P(snails[oled_data.wpm_icon][1], sizeof(snails[oled_data.wpm_icon][1])); -} - -// Update WPM graph -static void render_wpm_graph(uint8_t current_wpm) { - uint8_t line_height = ((current_wpm / GRAPH_TOP_WPM) * 7); - if (line_height > 7) { - line_height = 7; - } - // Count graph line pixels, return if nothing to draw - uint8_t pixel_count = line_height; - for (int i = 0; i < 31; i++) { - pixel_count += oled_data.graph_lines[i]; - } - if (pixel_count == 0) { - return; - } - // Shift array elements left or right depending on GRAPH_DIRECTION pend new graph line - if (GRAPH_DIRECTION) { - for (int i = 0; i < 31; i++) { - oled_data.graph_lines[i] = oled_data.graph_lines[i + 1]; - } - oled_data.graph_lines[31] = line_height; - } else { - for (int i = 31; i > 0; i--) { - oled_data.graph_lines[i] = oled_data.graph_lines[i - 1]; - } - oled_data.graph_lines[0] = line_height; - } - // Draw all graph lines (left to right, bottom to top) - uint16_t draw_count, arrpos; - for (int x = 1; x <= 63; x += 2) { - arrpos = x / 2; - draw_count = oled_data.graph_lines[arrpos]; - for (int y = 31; y >= 25; y--) { - if (draw_count > 0) { - write_pixel(x, y, true); - draw_count--; - } else { - write_pixel(x, y, false); - } - } - } -} - -// Call OLED functions -bool oled_task_user(void) { - // Draw OLED keyboard, prevent redraw - if (oled_data.first_loop) { - render_background(); - oled_data.first_loop = false; - } - // Get current WPM, subtract 25% for accuracy and prevent large jumps caused by simultaneous keypresses - uint8_t current_wpm = get_current_wpm(); - // Write active layer name to display - render_layer_state(); - // Update WPM counters - render_wpm_counters(current_wpm); - // Update WPM snail icon - render_wpm_icon(current_wpm); - // Update LED status - render_led_status(); - // Update WPM graph every graph_refresh milliseconds - if (timer_elapsed(oled_data.timer) > GRAPH_REFRESH) { - render_wpm_graph(current_wpm); - oled_data.timer = timer_read(); - } - return false; -} -#endif - -bool wpm_keycode_user(uint16_t keycode) { - // Count all keycodes on the macropad - return true; -} - diff --git a/keyboards/nullbitsco/tidbit/keymaps/snailmap_lite/rules.mk b/keyboards/nullbitsco/tidbit/keymaps/snailmap_lite/rules.mk deleted file mode 100644 index 605f034e1df8..000000000000 --- a/keyboards/nullbitsco/tidbit/keymaps/snailmap_lite/rules.mk +++ /dev/null @@ -1,7 +0,0 @@ -OLED_ENABLE = yes -WPM_ENABLE = yes -VIA_ENABLE = yes -SPACE_CADET_ENABLE = no -GRAVE_ESC_ENABLE = no -MAGIC_ENABLE = no -ENCODER_MAP_ENABLE = yes diff --git a/keyboards/numatreus/keymaps/yohewi/keymap.c b/keyboards/numatreus/keymaps/yohewi/keymap.c deleted file mode 100644 index 5b53389f9865..000000000000 --- a/keyboards/numatreus/keymaps/yohewi/keymap.c +++ /dev/null @@ -1,61 +0,0 @@ -#include QMK_KEYBOARD_H - -// Each layer gets a name for readability, which is then used in the keymap matrix below. -// The underscores don't mean anything - you can have a layer called STUFF or any other name. -// Layer names don't all need to be of the same length, obviously, and you can also skip them -// entirely and just use numbers. - -enum layer_number { - _QWERTY, - _LOWER, - _RAISE, -}; - -enum custom_keycodes { - BASE = SAFE_RANGE, - LOWER, - RAISE, -}; - - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - /* - * q w e r t || y u i o p - * a s d f g || h j k l ; - * z x c v b || n m , . \ - * esc tab ctl lw spc bspc|| GRV ent RS / alt - - */ - - [_QWERTY] = LAYOUT( /* Qwerty */ - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P , - KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN , - SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, SFT_T(KC_BSLS) , - KC_ESC, KC_TAB, KC_LCTL, MO(_LOWER), KC_SPC, KC_BSPC, LALT(KC_GRV), KC_ENT, MO(_RAISE), KC_DOT, KC_RALT, KC_MINS ), - - - /* - * 1 2 3 4 5 || 6 7 8 9 0 - * # < > = - || _ + ENT - * [ ] ( ) & || ` . UP \ - * TRANS TRANS TRANS TRANS TRANS TRANS|| TRANS TRANS RS LEFT DPWM RGHT - */ - [_RAISE] = LAYOUT( /* [> RAISE <] */ - KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0 , - KC_HASH, KC_LABK, KC_RABK, KC_EQL, KC_MINS, KC_UNDS, KC_PLUS, KC_TRNS, KC_TRNS, KC_ENT , - KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_AMPR, KC_GRV, KC_TRNS, KC_DOT, KC_UP, KC_BSLS , - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT ), - - /* - * ! @ # $ % || ^ & * ( ) - * F1 F2 F3 F4 F5 || F6 F7 F8 F9 F10 - * F11 F12 reset || , UP \ - * TRNS TRNS TRNS TRNS TRNS TRNS||TRNS TRNS TRNS LEFT DPWM RGHT - */ - - [_LOWER] = LAYOUT( /* [> LOWER <] */ - KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN , - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 , - KC_F11, KC_F12, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_TRNS, KC_QUOT, KC_UP, KC_BSLS , - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, TO(_QWERTY), KC_LEFT, KC_DOWN, KC_RGHT ) -}; diff --git a/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/config.h b/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/config.h deleted file mode 100644 index a597d848e2e6..000000000000 --- a/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/config.h +++ /dev/null @@ -1,27 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#pragma once - -/* Select hand configuration */ - -#define MASTER_LEFT -// #define MASTER_RIGHT -// #define EE_HANDS diff --git a/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/keymap.c b/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/keymap.c deleted file mode 100644 index 8bc5d09d802b..000000000000 --- a/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/keymap.c +++ /dev/null @@ -1,141 +0,0 @@ -/* Copyright 2020 Toyoshima Hidenori -* -* This program is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 2 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see -*/ - -#include QMK_KEYBOARD_H - -enum layers { - _QWERTY, - _LOWER, - _RAISE, - _ADJUST, -}; - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - LOWER, - RAISE, - ADJUST, -}; - -#define EISU LALT(KC_GRV) -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - /* Qwerty - * ,----------------------------------------------------------------------------------------------------------------------. - * | TAB | Q | W | E | R | T | - | | = | Y | U | I | O | P | \ | - * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| - * | Ctrl | A | S | D | F | G | [ | | ] | H | J | K | L | ; | ' | - * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | GUI | | GUI | N | M | , | . | / | Shift| - * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| - * | Ctrl | ESC | ALt | ESC |||||||| Shift| Raise| Space|||||||| enter| Lower| Bcspc|||||||| Left | Down | Up | Right| - * ,----------------------------------------------------------------------------------------------------------------------. - */ - [_QWERTY] = LAYOUT( - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MINS, KC_EQL , KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LBRC, KC_RBRC, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LGUI, KC_RGUI, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - KC_LCTL, KC_ESC, KC_LALT, KC_ESC, KC_LSFT, RAISE, KC_SPC, KC_ENT, LOWER, KC_BSPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT - ), - - /* Lower - * ,----------------------------------------------------------------------------------------------------------------------. - * | ~ | 1 | 2 | 3 | 4 | 5 | _ | | + | 6 | 7 | 8 | 9 | 0 | | | - * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| - * | Ctrl | ^ | & | * | ( | ) | { | | } | Left | Down | Up | Right| : | " | - * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| - * | Shift| ! | @ | # | $ | % | GUI | | GUI | - | = | < | > | ? | Shift| - * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| - * | Ctrl | ESC | ALt | EISU |||||||| kana | Raise| Space|||||||| Enter| Lower|Delete|||||||| Home |PageDn|PageUp| End | - * ,----------------------------------------------------------------------------------------------------------------------. - */ - [_LOWER] = LAYOUT( - KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_UNDS, KC_PLUS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PIPE, - KC_LCTL, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_LCBR, KC_RCBR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_COLN, KC_DQT , - KC_LSFT, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_LGUI, KC_RGUI, KC_MINS, KC_EQL, KC_LT, KC_GT, KC_QUES, KC_RSFT, - KC_LCTL, KC_ESC, KC_LALT, KC_LNG2, KC_LNG1, RAISE, KC_SPC, KC_ENT, LOWER, KC_DEL, KC_HOME,KC_PGDN, KC_PGUP, KC_END - ), - - /* Raise - * ,----------------------------------------------------------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | _ | | + | 6 | 7 | 8 | 9 | 0 | | | - * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| - * | Ctrl | ^ | & | * | ( | ) | { | | } | Left | Down | Up | Right| : | " | - * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| - * | Shift| ! | @ | # | $ | % | GUI | | GUI | _ | + | < | > | ? | Shift| - * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| - * | Ctrl | ESC | ALt | EISU |||||||| kana | Raise| Space|||||||| Enter| Lower|Delete|||||||| Home |PageDn|PageUp| End | - * ,----------------------------------------------------------------------------------------------------------------------. - */ - [_RAISE] = LAYOUT( - KC_GRV , KC_1, KC_2, KC_3, KC_4, KC_5, KC_UNDS, KC_PLUS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PIPE, - KC_LCTL, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_LCBR, KC_RCBR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_COLN, KC_DQT , - KC_LSFT, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_LGUI, KC_RGUI, KC_UNDS, KC_PLUS, KC_LT, KC_GT, KC_QUES, KC_RSFT, - KC_LCTL, KC_ESC, KC_LALT, KC_LNG2, KC_LNG1, RAISE, KC_SPC, KC_ENT, LOWER, KC_DEL, KC_HOME, KC_PGDN, KC_PGUP, KC_END - ), - - /* Adjust - * ,----------------------------------------------------------------------------------------------------------------------. - * | | Reset|RGB ON| MODE| HUE-| HUE+| | | | SAT-| SAT+| VAL-| VAL+| | | - * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | - * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| - * | F1 | F2 | F3 | F4 | F5 | F6 | | | | F7 | F8 | F9 | F10 | F11 | F12 | - * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| - * | | | | |||||||| | | |||||||| | | |||||||| | | | | - * ,----------------------------------------------------------------------------------------------------------------------. - */ - [_ADJUST] = LAYOUT( - _______, QK_BOOT, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI,_______, _______, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, _______, - _______, _______, BL_TOGG, BL_BRTG, BL_UP , BL_DOWN,_______, _______, _______, _______, _______, _______, _______, _______, - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6 ,_______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, - _______, _______, _______, _______, _______,_______,_______, _______,_______, _______, _______, _______, _______, _______ - ) -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case LOWER: - if (record->event.pressed) { - layer_on(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } else { - layer_off(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } - return false; - break; - case RAISE: - if (record->event.pressed) { - layer_on(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } else { - layer_off(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } - return false; - break; - case ADJUST: - if (record->event.pressed) { - layer_on(_ADJUST); - } else { - layer_off(_ADJUST); - } - return false; - break; - } - return true; -} diff --git a/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/readme.md b/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/readme.md deleted file mode 100644 index ebc13043a7e0..000000000000 --- a/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/readme.md +++ /dev/null @@ -1,62 +0,0 @@ -# ToyoshimaHidenori's keymap for Ergodash mini - -This is the ToyoshimaHidenori's keymap configuration for Ergodash mini. -There are four layers, QWERTY(default), LOWER, RAISE and ADJSUT. - -## Layers - -### Qwerty - -``` -,----------------------------------------------------------------------------------------------------------------------. -| TAB | Q | W | E | R | T | - | | = | Y | U | I | O | P | \ | -|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| -| Ctrl | A | S | D | F | G | [ | | ] | H | J | K | L | ; | ' | -|------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| -| Shift| Z | X | C | V | B | GUI | | GUI | N | M | , | . | / | Shift| -|-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| -| Ctrl | ESC | ALt | ESC |||||||| Shift| Raise| Space|||||||| enter| Lower| Bcspc|||||||| Left | Down | Up | Right| -,----------------------------------------------------------------------------------------------------------------------. -``` - -### Lower - -``` -,----------------------------------------------------------------------------------------------------------------------. -| ~ | 1 | 2 | 3 | 4 | 5 | _ | | + | 6 | 7 | 8 | 9 | 0 | | | -|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| -| Ctrl | ^ | & | * | ( | ) | { | | } | Left | Down | Up | Right| : | " | -|------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| -| Shift| ! | @ | # | $ | % | GUI | | GUI | - | = | < | > | ? | Shift| -|-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| -| Ctrl | ESC | ALt | EISU |||||||| kana | Raise| Space|||||||| Enter| Lower|Delete|||||||| Home |PageDn|PageUp| End | -,----------------------------------------------------------------------------------------------------------------------. -``` - -### Raise - -``` -,----------------------------------------------------------------------------------------------------------------------. -| ` | 1 | 2 | 3 | 4 | 5 | _ | | + | 6 | 7 | 8 | 9 | 0 | | | -|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| -| Ctrl | ^ | & | * | ( | ) | { | | } | Left | Down | Up | Right| : | " | -|------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| -| Shift| ! | @ | # | $ | % | GUI | | GUI | _ | + | < | > | ? | Shift| -|-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| -| Ctrl | ESC | ALt | EISU |||||||| kana | Raise| Space|||||||| Enter| Lower|Delete|||||||| Home |PageDn|PageUp| End | -,----------------------------------------------------------------------------------------------------------------------. -``` - -### Adjust - -``` -,----------------------------------------------------------------------------------------------------------------------. -| | Reset|RGB ON| MODE| HUE-| HUE+| | | | SAT-| SAT+| VAL-| VAL+| | | -|------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| -| | | | | | | | | | | | -|------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| -| F1 | F2 | F3 | F4 | F5 | F6 | | | | F7 | F8 | F9 | F10 | F11 | F12 | -|-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| -| | | | |||||||| | | |||||||| | | |||||||| | | | | -,----------------------------------------------------------------------------------------------------------------------. -``` diff --git a/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/rules.mk b/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/rules.mk deleted file mode 100644 index 11b62b9bffeb..000000000000 --- a/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/rules.mk +++ /dev/null @@ -1,3 +0,0 @@ -BACKLIGHT_ENABLE = yes -RGBLIGHT_ENABLE = yes -AUDIO_ENABLE = no diff --git a/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/config.h b/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/config.h deleted file mode 100644 index a597d848e2e6..000000000000 --- a/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/config.h +++ /dev/null @@ -1,27 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#pragma once - -/* Select hand configuration */ - -#define MASTER_LEFT -// #define MASTER_RIGHT -// #define EE_HANDS diff --git a/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/keymap.c b/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/keymap.c deleted file mode 100644 index 9636b761bcf3..000000000000 --- a/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/keymap.c +++ /dev/null @@ -1,111 +0,0 @@ -/* Copyright 2021 Yoshihiro Saito - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see - */ - -#include QMK_KEYBOARD_H - -enum layers { - _QWERTY, - _LOWER, - _RAISE, - _ADJUST, -}; - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - LOWER, - RAISE, - ADJUST, -}; - -// Shift + ( = < -const key_override_t left_paren_angle_bracket_override = ko_make_basic(MOD_MASK_SHIFT, KC_LEFT_PAREN, KC_LEFT_ANGLE_BRACKET); - -// Shift + ) = > -const key_override_t right_paren_angle_bracket_override = ko_make_basic(MOD_MASK_SHIFT, KC_RIGHT_PAREN, KC_RIGHT_ANGLE_BRACKET); - -const key_override_t **key_overrides = (const key_override_t *[]){ - &left_paren_angle_bracket_override, - &right_paren_angle_bracket_override, - NULL -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Qwerty */ - [_QWERTY] = LAYOUT( - QK_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LPRN, KC_RPRN, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, - KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LBRC, KC_RBRC, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_DEL, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, XXXXXXX, XXXXXXX, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LGUI, LOWER, CTL_T(KC_SPC), SC_SENT, RAISE, KC_RGUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX - ), - - /* Lower */ - [_LOWER] = LAYOUT( - XXXXXXX, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_F11, KC_GRV, KC_CIRC, KC_AMPR, KC_ASTR, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F12, KC_BSLS, KC_TILD, KC_MINS, KC_EQL, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX, XXXXXXX, KC_PIPE, KC_UNDS, KC_PLUS, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX - ), - - /* Raise */ - [_RAISE] = LAYOUT( - XXXXXXX, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, XXXXXXX, XXXXXXX, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX - ), - - /* Adjust */ - [_ADJUST] = LAYOUT( - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX ,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX ,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX ,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______ ,_______, _______, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX - ), -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case LOWER: - if (record->event.pressed) { - layer_on(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } else { - layer_off(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } - return false; - break; - case RAISE: - if (record->event.pressed) { - layer_on(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } else { - layer_off(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } - return false; - break; - case ADJUST: - if (record->event.pressed) { - layer_on(_ADJUST); - } else { - layer_off(_ADJUST); - } - return false; - break; - } - return true; -} diff --git a/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/readme.md b/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/readme.md deleted file mode 100644 index 67a6ed9b90fa..000000000000 --- a/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/readme.md +++ /dev/null @@ -1,4 +0,0 @@ -# yoshimaru46's keymap for Ergodash mini - -This is the yoshimaru46's keymap configuration for Ergodash mini. -There are three layers, QWERTY(default), LOWER, and RAISE. diff --git a/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/rules.mk b/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/rules.mk deleted file mode 100644 index f85c6a4151a4..000000000000 --- a/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/rules.mk +++ /dev/null @@ -1,4 +0,0 @@ -BACKLIGHT_ENABLE = no -RGBLIGHT_ENABLE = no -AUDIO_ENABLE = no -KEY_OVERRIDE_ENABLE = yes diff --git a/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/config.h b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/config.h deleted file mode 100644 index a597d848e2e6..000000000000 --- a/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/config.h +++ /dev/null @@ -1,27 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#pragma once - -/* Select hand configuration */ - -#define MASTER_LEFT -// #define MASTER_RIGHT -// #define EE_HANDS diff --git a/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/keymap.c b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/keymap.c deleted file mode 100644 index 3b52ba975eb9..000000000000 --- a/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/keymap.c +++ /dev/null @@ -1,219 +0,0 @@ -#include QMK_KEYBOARD_H -#include "keymap_japanese.h" - -// clang-format off -enum layers { _QWERTY, _LOWER, _RAISE, _ADJUST }; - -enum custom_keycodes { JP = SAFE_RANGE, US, SHIFT, LOWER, RAISE, ADJUST, - CSTM_0, CSTM_1, CSTM_2, CSTM_3, CSTM_4, CSTM_5, CSTM_6, CSTM_7, CSTM_8, CSTM_9, - CIRC, AT, LBRC, RBRC, BSLS, AMPR, QUOT, LPRN, RPRN, EQL, TILD, PIPE, GRV, LCBR, - PLUS, ASTR, RCBR, UNDS, MINS, SCLN, COMM, DOT, SLSH, EXLM, HASH, DLR, PERC, DEL }; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Qwerty - * ,----------------------------------------------------------------------------------------------------------------------. - * | ESC | 1 | 2 | 3 | 4 | 5 | ZKHK | | ZKHK | 6 | 7 | 8 | 9 | 0 | ` | - * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| - * | TAB | Q | W | E | R | T | MHEN | |HENKAN| Y | U | I | O | P | \ | - * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| - * | CTRL | A | S | D | F | G | EISU | <- ONLY FOR MAC -> | KANA | H | J | K | L | ; | ' | - * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| - * | SHIFT| Z | X | C | V | B | SHIFT| | SHIFT| N | M | , | . | / | SHIFT| - * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| - * | SHIFT|ADJUST| ALT | GUI |||||||| LOWER| SPACE| |||||||| | ENTER| RAISE|||||||| GUI | ALT |ADJUST| SHIFT| - * ,----------------------------------------------------------------------------------------------------------------------. - */ - [_QWERTY] = LAYOUT( - KC_ESC, CSTM_1, CSTM_2, CSTM_3, CSTM_4, CSTM_5, JP_KANA, JP_KANA, CSTM_6, CSTM_7, CSTM_8, CSTM_9, CSTM_0, GRV , - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, JP_MHEN, JP_HENK, KC_Y, KC_U, KC_I, KC_O, KC_P, BSLS , - KC_LGUI, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LNG2, JP_LANG1,KC_H, KC_J, KC_K, KC_L, SCLN, QUOT , - SHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, SHIFT , SHIFT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SHIFT , - SHIFT, ADJUST, KC_LALT, KC_LCTL, LOWER, KC_SPC ,XXXXXXX, XXXXXXX,KC_ENT , RAISE, KC_LCTL, KC_LALT, ADJUST, SHIFT - ), - - /* Lower - * ,----------------------------------------------------------------------------------------------------------------------. - * | F11 | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F12 | - * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| - * | ~ | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | | | - * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| - * | | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | | - * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| - * | |||||||||||||||||||||| - | _ | | | | + | = | [ | ] |||||||| | - * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| - * | | | | |||||||| | ESC | |||||||| | BKSP | |||||||| | | | | - * ,----------------------------------------------------------------------------------------------------------------------. - */ - [_LOWER] = LAYOUT( - KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12 , - TILD, EXLM, AT, HASH, DLR, PERC, _______, _______, CIRC, AMPR, ASTR, LPRN, RPRN, PIPE , - _______, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0 , _______, - _______, XXXXXXX, XXXXXXX, XXXXXXX, MINS, UNDS, _______, _______, PLUS, EQL, LBRC, RBRC, XXXXXXX, _______, - _______, _______, _______, _______, _______, KC_ESC ,_______, _______,KC_BSPC, _______, _______, _______, _______, _______ - ), - - /* Raise - * ,----------------------------------------------------------------------------------------------------------------------. - * | F11 | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F12 | - * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| - * | ~ | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | | | - * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| - * | | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | | - * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| - * | |||||||| [ | ] | - | _ | | | | + | = |||||||||||||||||||||| | - * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| - * | | | | |||||||| | ESC | |||||||| | BKSP | |||||||| | | | | - * ,----------------------------------------------------------------------------------------------------------------------. - */ - [_RAISE] = LAYOUT( - KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12 , - TILD, EXLM, AT, HASH, DLR, PERC, _______, _______, CIRC, AMPR, ASTR, LPRN, RPRN, PIPE , - _______, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0 , _______, - _______, XXXXXXX, LBRC, RBRC, MINS, UNDS, _______, _______, PLUS, EQL, XXXXXXX, XXXXXXX, XXXXXXX, _______, - _______, _______, _______, _______, _______, KC_ESC ,_______, _______,KC_BSPC, _______, _______, _______, _______, _______ - ), - - /* Adjust - * ,----------------------------------------------------------------------------------------------------------------------. - * | | | | | | | US | | JP | | | | | | | - * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | | | | | - * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| - * | | HOME |PAGEDN|PAGEUP| END |||||||| | | | LEFT | DOWN | UP | RIGHT|||||||| | - * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| - * | | | { | } | | | | | | | | { | } | | | - * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| - * | | | | |||||||| | | |||||||| | | |||||||| | | | | - * ,----------------------------------------------------------------------------------------------------------------------. - */ - [_ADJUST] = LAYOUT( - _______, _______, _______, _______, _______, _______, US , JP, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, XXXXXXX, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, _______, - _______, _______, LCBR, RCBR, _______, _______, _______, _______, _______, _______, LCBR, RCBR, _______, _______, - _______, _______, _______, _______, _______, _______,_______, _______,_______, _______, _______, _______, _______, _______ - )}; -// clang-format on - -#ifdef AUDIO_ENABLE -float tone_qwerty[][2] = SONG(QWERTY_SOUND); -#endif - -#define JP_LAYOUT true -#define US_LAYOUT false - -#ifdef MASTER_LEFT -bool LAYOUT_STATUS = US_LAYOUT; -#else -bool LAYOUT_STATUS = JP_LAYOUT; -#endif - -bool SHIFT_PRESSED = false; - -void persistent_default_layer_set(uint16_t default_layer) { - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); -} - -#define SEND_STRING_RESTORE(STR) (SHIFT_PRESSED ? SEND_STRING(STR SS_DOWN(X_LSFT)) : SEND_STRING(STR SS_UP(X_LSFT))) - -#define KEY(CODE) (record->event.pressed ? SEND_STRING(SS_DOWN(X_##CODE)) : SEND_STRING_RESTORE(SS_UP(X_##CODE))) - -#define KEY_SHIFT(CODE) (record->event.pressed ? SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_##CODE)) : SEND_STRING_RESTORE(SS_UP(X_##CODE))) - -#define KEY_UPSHIFT(CODE) (record->event.pressed ? SEND_STRING(SS_UP(X_LSFT) SS_DOWN(X_##CODE)) : SEND_STRING_RESTORE(SS_UP(X_##CODE))) - -#define SHIFT_DU(CODE_DOWN, CODE_UP) (SHIFT_PRESSED ? CODE_DOWN : CODE_UP) -#define CASE_US(CODE, US, JP) \ - case CODE: \ - (LAYOUT_STATUS == JP_LAYOUT ? JP : US); \ - return false; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - CASE_US(CSTM_0, KEY(0), SHIFT_DU(KEY_SHIFT(9), KEY(0))); - CASE_US(CSTM_1, KEY(1), KEY(1)); - CASE_US(CSTM_2, KEY(2), SHIFT_DU(KEY_UPSHIFT(LBRACKET), KEY(2))); - CASE_US(CSTM_3, KEY(3), KEY(3)); - CASE_US(CSTM_4, KEY(4), KEY(4)); - CASE_US(CSTM_5, KEY(5), KEY(5)); - CASE_US(CSTM_6, KEY(6), SHIFT_DU(KEY_UPSHIFT(EQUAL), KEY(6))); - CASE_US(CSTM_7, KEY(7), SHIFT_DU(KEY_SHIFT(6), KEY(7))); - CASE_US(CSTM_8, KEY(8), SHIFT_DU(KEY_SHIFT(QUOTE), KEY(8))); - CASE_US(CSTM_9, KEY(9), SHIFT_DU(KEY_SHIFT(8), KEY(9))); - CASE_US(DEL, KEY(DELETE), KEY_UPSHIFT(BSPACE)); - CASE_US(TILD, KEY_SHIFT(GRAVE), KEY_SHIFT(EQUAL)); - CASE_US(EXLM, KEY_SHIFT(1), KEY_SHIFT(1)); - CASE_US(AT, KEY_SHIFT(2), KEY(LBRACKET)); - CASE_US(HASH, KEY_SHIFT(3), KEY_SHIFT(3)); - CASE_US(DLR, KEY_SHIFT(4), KEY_SHIFT(4)); - CASE_US(PERC, KEY_SHIFT(5), KEY_SHIFT(5)); - CASE_US(CIRC, KEY_SHIFT(6), KEY(EQUAL)); - CASE_US(AMPR, KEY_SHIFT(7), KEY_SHIFT(6)); - CASE_US(ASTR, KEY_SHIFT(8), KEY_SHIFT(QUOTE)); - CASE_US(LPRN, KEY_SHIFT(9), KEY_SHIFT(8)); - CASE_US(RPRN, KEY_SHIFT(0), KEY_SHIFT(9)); - CASE_US(LBRC, KEY(LBRACKET), SHIFT_DU(KEY_SHIFT(RBRACKET), KEY(RBRACKET))); - CASE_US(RBRC, KEY(RBRACKET), SHIFT_DU(KEY_SHIFT(NONUS_HASH), KEY(NONUS_HASH))); - CASE_US(LCBR, KEY_SHIFT(LBRACKET), KEY_SHIFT(RBRACKET)); - CASE_US(RCBR, KEY_SHIFT(RBRACKET), KEY_SHIFT(NONUS_HASH)); - CASE_US(GRV, KEY(GRAVE), SHIFT_DU(KEY_SHIFT(EQUAL), KEY_SHIFT(LBRACKET))); - CASE_US(BSLS, KEY(BSLASH), SHIFT_DU(KEY_SHIFT(INT3), KEY(INT3))); - CASE_US(PIPE, KEY_SHIFT(BSLASH), KEY_SHIFT(INT3)); - CASE_US(MINS, KEY(MINUS), SHIFT_DU(KEY_SHIFT(INT1), KEY(MINUS))); - CASE_US(UNDS, KEY_SHIFT(MINUS), KEY_SHIFT(INT1)); - CASE_US(EQL, KEY(EQUAL), SHIFT_DU(KEY_SHIFT(SCOLON), KEY_SHIFT(MINUS))); - CASE_US(PLUS, KEY_SHIFT(EQUAL), KEY_SHIFT(SCOLON)); - CASE_US(SCLN, KEY(SCOLON), SHIFT_DU(KEY_UPSHIFT(QUOTE), KEY(SCOLON))); - CASE_US(QUOT, KEY(QUOTE), SHIFT_DU(KEY_SHIFT(2), KEY_SHIFT(7))); - case JP: - if (record->event.pressed) { - LAYOUT_STATUS = JP_LAYOUT; - } - return false; - break; - case US: - if (record->event.pressed) { - LAYOUT_STATUS = US_LAYOUT; - } - return false; - break; - case SHIFT: - if (record->event.pressed) { - SEND_STRING(SS_DOWN(X_LSFT)); - SHIFT_PRESSED = true; - } else { - SEND_STRING(SS_UP(X_LSFT)); - SHIFT_PRESSED = false; - } - return false; - break; - case LOWER: - if (record->event.pressed) { - layer_on(_LOWER); - } else { - layer_off(_LOWER); - } - update_tri_layer(_LOWER, _RAISE, _ADJUST); - return false; - break; - case RAISE: - if (record->event.pressed) { - layer_on(_RAISE); - } else { - layer_off(_RAISE); - } - update_tri_layer(_LOWER, _RAISE, _ADJUST); - return false; - break; - case ADJUST: - if (record->event.pressed) { - layer_on(_ADJUST); - } else { - layer_off(_ADJUST); - } - return false; - break; - } - return true; -} diff --git a/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/m47ch4ns_keymap.json b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/m47ch4ns_keymap.json deleted file mode 100644 index 1f5eee601462..000000000000 --- a/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/m47ch4ns_keymap.json +++ /dev/null @@ -1 +0,0 @@ -{"keyboard":"ergodash/rev1","keymap":"m47ch4ns_keymap","layout":"LAYOUT_3key_1us","layers":[["KC_ESC","KC_1","KC_2","KC_3","KC_4","KC_5","KC_NO","KC_NO","KC_6","KC_7","KC_8","KC_9","KC_0","KC_GRV","KC_TAB","KC_Q","KC_W","KC_E","KC_R","KC_T","KC_NO","KC_NO","KC_Y","KC_U","KC_I","KC_O","KC_P","KC_BSLS","KC_LCTL","KC_A","KC_S","KC_D","KC_F","KC_G","KC_NO","KC_NO","KC_H","KC_J","KC_K","KC_L","KC_SCLN","KC_QUOT","KC_LSFT","KC_Z","KC_X","KC_C","KC_V","KC_B","KC_LSFT","KC_RSFT","KC_N","KC_M","KC_COMM","KC_DOT","KC_SLSH","KC_RSFT","KC_LSFT","ANY(ADJUST)","KC_LALT","KC_LGUI","ANY(LOWER)","KC_SPC","KC_ENT","ANY(RAISE)","KC_RGUI","KC_RALT","ANY(ADJUST)","KC_RSFT"],["KC_F11","KC_F1","KC_F2","KC_F3","KC_F4","KC_F5","KC_TRNS","KC_TRNS","KC_F6","KC_F7","KC_F8","KC_F9","KC_F10","KC_F12","KC_TRNS","KC_EXLM","KC_AT","KC_HASH","KC_DLR","KC_PERC","KC_TRNS","KC_TRNS","KC_CIRC","KC_AMPR","KC_ASTR","KC_LPRN","KC_RPRN","KC_PIPE","KC_TRNS","KC_1","KC_2","KC_3","KC_4","KC_5","KC_TRNS","KC_TRNS","KC_6","KC_7","KC_8","KC_9","KC_0","KC_TRNS","KC_TRNS","KC_NO","KC_NO","KC_NO","KC_MINS","KC_UNDS","KC_TRNS","KC_TRNS","KC_PLUS","KC_EQL","KC_LBRC","KC_RBRC","KC_NO","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_ESC","KC_BSPC","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS"],["KC_F11","KC_F1","KC_F2","KC_F3","KC_F4","KC_F5","KC_TRNS","KC_TRNS","KC_F6","KC_F7","KC_F8","KC_F9","KC_F10","KC_F12","KC_TRNS","KC_EXLM","KC_AT","KC_HASH","KC_DLR","KC_PERC","KC_TRNS","KC_TRNS","KC_CIRC","KC_AMPR","KC_ASTR","KC_LPRN","KC_RPRN","KC_PIPE","KC_TRNS","KC_1","KC_2","KC_3","KC_4","KC_5","KC_TRNS","KC_TRNS","KC_6","KC_7","KC_8","KC_9","KC_0","KC_TRNS","KC_TRNS","KC_NO","KC_LBRC","KC_RBRC","KC_MINS","KC_UNDS","KC_TRNS","KC_TRNS","KC_PLUS","KC_EQL","KC_NO","KC_NO","KC_NO","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_ESC","KC_BSPC","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS"],["KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_HOME","KC_PGDN","KC_PGUP","KC_END","KC_TRNS","KC_TRNS","KC_TRNS","KC_LEFT","KC_DOWN","KC_UP","KC_RGHT","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_LCBR","KC_RCBR","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS"]],"author":"","notes":""} \ No newline at end of file diff --git a/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/readme.md b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/readme.md deleted file mode 100644 index 598f258e1c0c..000000000000 --- a/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/readme.md +++ /dev/null @@ -1,73 +0,0 @@ -# m47ch4n's keymap for Ergodash rev1 - -This is the m47ch4n's keymap configuration for Ergodash rev1. -There are four layers, QWERTY(default), LOWER, RAISE and ADJSUT. - -## Layers - -### Qwerty - -``` -,----------------------------------------------------------------------------------------------------------------------. -| ESC | 1 | 2 | 3 | 4 | 5 | ZKHK | | ZKHK | 6 | 7 | 8 | 9 | 0 | ` | -|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| -| TAB | Q | W | E | R | T | MHEN | |HENKAN| Y | U | I | O | P | \ | -|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| -| CTRL | A | S | D | F | G | EISU |<-- ONLY FOR MAC -->| KANA | H | J | K | L | ; | ' | -|------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| -| SHIFT| Z | X | C | V | B | SHIFT| | SHIFT| N | M | , | . | / | SHIFT| -|-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| -| SHIFT|ADJUST| ALT | GUI |||||||| LOWER| SPACE| |||||||| | ENTER| RAISE|||||||| GUI | ALT |ADJUST| SHIFT| -,----------------------------------------------------------------------------------------------------------------------. -``` - -### Lower - -``` -,----------------------------------------------------------------------------------------------------------------------. -| F11 | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F12 | -|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| -| ~ | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | | | -|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| -| | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | | -|------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| -| |||||||||||||||||||||| - | _ | | | | + | = | [ | ] |||||||| | -|-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| -| | | | |||||||| | ESC | |||||||| | BKSP | |||||||| | | | | -,----------------------------------------------------------------------------------------------------------------------. -``` - -### Raise - -``` -,----------------------------------------------------------------------------------------------------------------------. -| F11 | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F12 | -|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| -| ~ | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | | | -|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| -| | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | | -|------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| -| |||||||| [ | ] | - | _ | | | | + | = |||||||||||||||||||||| | -|-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| -| | | | |||||||| | ESC | |||||||| | BKSP | |||||||| | | | | -,----------------------------------------------------------------------------------------------------------------------. -``` - -### Adjust - -``` -,----------------------------------------------------------------------------------------------------------------------. -| | | | | | | US | | JP | | | | | | | -|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| -| | | | | | | | | | | | | | | | -|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| -| | HOME |PAGEDN|PAGEUP| END |||||||| | | | LEFT | DOWN | UP | RIGHT|||||||| | -|------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| -| | | { | } | | | | | | | | { | } | | | -|-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| -| | | | |||||||| | | |||||||| | | |||||||| | | | | -,----------------------------------------------------------------------------------------------------------------------. -``` - -If your pc connect this keyboard with JIS(JP) layout, you should press JP MODE key. - diff --git a/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/rules.mk b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/rules.mk deleted file mode 100644 index bb9e33b08297..000000000000 --- a/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/rules.mk +++ /dev/null @@ -1,3 +0,0 @@ -BACKLIGHT_ENABLE = no -RGBLIGHT_ENABLE = no -AUDIO_ENABLE = no diff --git a/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/config.h b/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/config.h deleted file mode 100644 index 2493fe09e224..000000000000 --- a/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/config.h +++ /dev/null @@ -1,30 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#pragma once - -/* Select hand configuration */ - -#define MASTER_LEFT -// #define MASTER_RIGHT -// #define EE_HANDS - -#define LEADER_PER_KEY_TIMING -#define LEADER_TIMEOUT 250 diff --git a/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/keymap.c b/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/keymap.c deleted file mode 100644 index e197874ab576..000000000000 --- a/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/keymap.c +++ /dev/null @@ -1,199 +0,0 @@ -#include QMK_KEYBOARD_H - - -enum layers { - _WINDOWS, - _LINUX, - _NUMPAD, - _LOWER, - _RAISE, - _ADJUST, -}; - -enum custom_keycodes { - WINDOWS = SAFE_RANGE, - LINUX, - NUMPAD, - LOWER, - RAISE, - ADJUST -}; - -#define CTL_ENT MT(MOD_RCTL, KC_PENT) -#define NUMPAD MO(_NUMPAD) -#define SHELL LCA(KC_T) - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - /* Windows Qwerty - * .---------------------------------------------------------------------------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | - | | = | 6 | 7 | 8 | 9 | 0 |BSpace | - * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| - * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ | - * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| - * | Esc | A | S | D | F | G | Home | | Del | H | J | K | L | : | ' | - * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| - * | Shift | Z | X | C | V | B | - | | = | N | M | , | . | / | Shift | - * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| - * | LCtrl | LGUI | LAlt |Numpad ||||||||| Space | Lower | Enter ||||||||| Enter | Raise |BSpace ||||||||| F5 | RAlt | RGui |Ctl/Ent| - * .---------------------------------------------------------------------------------------------------------------------------------------. - */ - [_WINDOWS] = LAYOUT( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_HOME, KC_DEL, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MINS, KC_EQL, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - KC_LCTL, KC_LGUI, KC_LALT, NUMPAD, KC_SPC, LOWER, KC_ENT, KC_ENT, RAISE, KC_BSPC, KC_F5, KC_RALT, KC_RGUI, CTL_ENT - ), - - /* Linux Qwerty - * .---------------------------------------------------------------------------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | - | | = | 6 | 7 | 8 | 9 | 0 |BSpace | - * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| - * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ | - * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| - * | Esc | A | S | D | F | G | Home | | Del | H | J | K | L | : | ' | - * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| - * | Shift | Z | X | C | V | B | - | | = | N | M | , | . | / | Shift | - * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| - * | LCtrl | LGUI | LAlt |Numpad ||||||||| Space | Lower | Enter ||||||||| Enter | Raise |BSpace ||||||||| Shell | RAlt | RGui |Ctl/Ent| - * .---------------------------------------------------------------------------------------------------------------------------------------. - */ - [_LINUX] = LAYOUT( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_HOME, KC_DEL, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MINS, KC_EQL, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - KC_LCTL, KC_LGUI, KC_LALT, NUMPAD, KC_SPC, LOWER, KC_ENT, KC_ENT, RAISE, KC_BSPC, SHELL, KC_RALT, KC_RGUI, CTL_ENT - ), - - /* Numpad - * .---------------------------------------------------------------------------------------------------------------------------------------. - * |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|NumLock| / | * | - |XXXXXXX| - * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| - * |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX| 7 | 8 | 9 | |XXXXXXX| - * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+ + +-------| - * |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX| 4 | 5 | 6 | |XXXXXXX| - * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| - * |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX| 1 | 2 | 3 | |XXXXXXX| - * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+ Enter +-------| - * |XXXXXXX|XXXXXXX|XXXXXXX|Numpad |||||||||XXXXXXX|XXXXXXX|XXXXXXX|||||||||XXXXXXX|XXXXXXX|XXXXXXX||||||||| 0 | . | | Enter | - * .---------------------------------------------------------------------------------------------------------------------------------------. - */ - [_NUMPAD] = LAYOUT( - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, KC_BSPC, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, NUMPAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_0, KC_PDOT, KC_PENT, KC_PENT - ), - - /* Lower - * .---------------------------------------------------------------------------------------------------------------------------------------. - * | F11 | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F12 | - * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| - * | | | | ( | { | [ | | | | ] | } | ) | | | | - * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| - * | | | | | |PageUp | | | | | | | | | | - * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| - * | |VolDown| VolUp | | |PageDwn| | | | | | | | | | - * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| - * | | | | ||||||||| | Lower | ||||||||| | Raise | ||||||||| | | | | - * .---------------------------------------------------------------------------------------------------------------------------------------. - */ - [_LOWER] = LAYOUT( - KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12, - _______, _______, _______, KC_LPRN, KC_LCBR, KC_LBRC, _______, _______, KC_RBRC, KC_RCBR, KC_RPRN, _______, _______, _______, - _______, _______, _______, _______, _______, KC_PGUP, _______, _______, _______, _______, _______, _______, _______, _______, - KC_CAPS, KC_VOLD, KC_VOLU, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______, _______, KC_CAPS, - _______, _______, _______, _______, _______, LOWER, _______, _______, RAISE, _______, _______, _______, _______, _______ - ), - - /* Raise - * .---------------------------------------------------------------------------------------------------------------------------------------. - * | F11 | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F12 | - * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| - * | | | | ( | { | [ | | | | ] | } | ) | | | | - * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| - * | | | | | | | End | | | Left | Down | Up | Right | | | - * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| - * | | | | | | | | | | | | | | | | - * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| - * | | | | ||||||||| | Lower | ||||||||| | Raise | ||||||||| | | | | - * .---------------------------------------------------------------------------------------------------------------------------------------. - */ - [_RAISE] = LAYOUT( - KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12, - _______, _______, _______, KC_LPRN, KC_LCBR, KC_LBRC, _______, _______, KC_RBRC, KC_RCBR, KC_RPRN, _______, _______, _______, - _______, _______, _______, _______, _______, _______, KC_END, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, - KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_MPLY, KC_CAPS, - _______, _______, _______, _______, _______, LOWER, _______, _______, RAISE, _______, _______, _______, _______, _______ - ), - - /* Adjust - * .---------------------------------------------------------------------------------------------------------------------------------------. - * |XXXXXXX|Windows| Linux |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| - * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| - * |XXXXXXX|XXXXXXX|XXXXXXX| Cycle |On/Off |XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|On/Off | Cycle |XXXXXXX|XXXXXXX|XXXXXXX| - * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| - * | Reset |XXXXXXX|XXXXXXX|Breathe| Inc |XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|Hue inc|Sat inc| Inc |XXXXXXX|XXXXXXX| - * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| - * |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| Dec |XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|Hue dec|Sat dec| Dec |XXXXXXX|XXXXXXX| - * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| - * |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|||||||||XXXXXXX| Lower |XXXXXXX|||||||||XXXXXXX| Raise |XXXXXXX|||||||||XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| - * .---------------------------------------------------------------------------------------------------------------------------------------. - */ - [_ADJUST] = LAYOUT( - XXXXXXX, WINDOWS, LINUX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, BL_STEP, BL_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, XXXXXXX, XXXXXXX, XXXXXXX, - QK_BOOT, XXXXXXX, XXXXXXX, BL_BRTG, BL_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DOWN, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX - ) -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case WINDOWS: - if (record->event.pressed) { - set_single_persistent_default_layer(_WINDOWS); - } - return false; - break; - case LINUX: - if (record->event.pressed) { - set_single_persistent_default_layer(_LINUX); - } - return false; - break; - case LOWER: - if (record->event.pressed) { - layer_on(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } else { - layer_off(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } - return false; - break; - case RAISE: - if (record->event.pressed) { - layer_on(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } else { - layer_off(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } - return false; - break; - case ADJUST: - if (record->event.pressed) { - layer_on(_ADJUST); - } else { - layer_off(_ADJUST); - } - return false; - break; - } - return true; -} diff --git a/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/readme.md b/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/readme.md deleted file mode 100644 index 7ab665a8d419..000000000000 --- a/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/readme.md +++ /dev/null @@ -1,89 +0,0 @@ -# ShadowProgr's layout for ErgoDash - -There are 2 different QWERTY base layers for use with Windows and Linux OSes. Beside those 2 there are also a numpad layer and 3 modifier layers (lower, raise and adjust). - -## Layouts -### Windows -``` -.---------------------------------------------------------------------------------------------------------------------------------------. -| ` | 1 | 2 | 3 | 4 | 5 | - | | = | 6 | 7 | 8 | 9 | 0 |BSpace | -|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| -| Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ | -|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| -| Esc | A | S | D | F | G | Home | | Del | H | J | K | L | : | ' | -|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| -| Shift | Z | X | C | V | B | - | | = | N | M | , | . | / | Shift | -|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| -| LCtrl | LGUI | LAlt |Numpad ||||||||| Space | Lower | Enter ||||||||| Enter | Raise |BSpace ||||||||| F5 | RAlt | RGui |Ctl/Ent| -.---------------------------------------------------------------------------------------------------------------------------------------. -``` -### Linux -``` -.---------------------------------------------------------------------------------------------------------------------------------------. -| ` | 1 | 2 | 3 | 4 | 5 | - | | = | 6 | 7 | 8 | 9 | 0 |BSpace | -|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| -| Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ | -|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| -| Esc | A | S | D | F | G | Home | | Del | H | J | K | L | : | ' | -|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| -| Shift | Z | X | C | V | B | - | | = | N | M | , | . | / | Shift | -|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| -| LCtrl | LGUI | LAlt |Numpad ||||||||| Space | Lower | Enter ||||||||| Enter | Raise |BSpace ||||||||| Shell | RAlt | RGui |Ctl/Ent| -.---------------------------------------------------------------------------------------------------------------------------------------. -``` -### Numpad -``` -.---------------------------------------------------------------------------------------------------------------------------------------. -|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|NumLock| / | * | - |XXXXXXX| -|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| -|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX| 7 | 8 | 9 | |XXXXXXX| -|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+ + +-------| -|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX| 4 | 5 | 6 | |XXXXXXX| -|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| -|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX| 1 | 2 | 3 | |XXXXXXX| -|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+ Enter +-------| -|XXXXXXX|XXXXXXX|XXXXXXX|Numpad |||||||||XXXXXXX|XXXXXXX|XXXXXXX|||||||||XXXXXXX|XXXXXXX|XXXXXXX||||||||| 0 | . | | Enter | -.---------------------------------------------------------------------------------------------------------------------------------------. -``` -### Lower -``` -.---------------------------------------------------------------------------------------------------------------------------------------. -| F11 | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F12 | -|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| -| | | | ( | { | [ | | | | ] | } | ) | | | | -|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| -| | | | | |PageUp | | | | | | | | | | -|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| -| |VolDown| VolUp | | |PageDwn| | | | | | | | | | -|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| -| | | | ||||||||| | Lower | ||||||||| | Raise | ||||||||| | | | | -.---------------------------------------------------------------------------------------------------------------------------------------. -``` -### Raise -``` -.---------------------------------------------------------------------------------------------------------------------------------------. -| F11 | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F12 | -|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| -| | | | ( | { | [ | | | | ] | } | ) | | | | -|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| -| | | | | | | End | | | Left | Down | Up | Right | | | -|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| -| | | | | | | | | | | | | | | | -|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| -| | | | ||||||||| | Lower | ||||||||| | Raise | ||||||||| | | | | -.---------------------------------------------------------------------------------------------------------------------------------------. -``` -### Adjust -``` -.---------------------------------------------------------------------------------------------------------------------------------------. -|XXXXXXX|Windows| Linux |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| -|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| -|XXXXXXX|XXXXXXX|XXXXXXX| Cycle |On/Off |XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|On/Off | Cycle |XXXXXXX|XXXXXXX|XXXXXXX| -|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| -| Reset |XXXXXXX|XXXXXXX|Breathe| Inc |XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|Hue inc|Sat inc| Inc |XXXXXXX|XXXXXXX| -|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| -|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| Dec |XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|Hue dec|Sat dec| Dec |XXXXXXX|XXXXXXX| -|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| -|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|||||||||XXXXXXX| Lower |XXXXXXX|||||||||XXXXXXX| Raise |XXXXXXX|||||||||XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| -.---------------------------------------------------------------------------------------------------------------------------------------. -``` \ No newline at end of file diff --git a/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/rules.mk b/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/rules.mk deleted file mode 100644 index 30d8419904e9..000000000000 --- a/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/rules.mk +++ /dev/null @@ -1,3 +0,0 @@ -BACKLIGHT_ENABLE = yes -RGBLIGHT_ENABLE = yes -AUDIO_ENABLE = no \ No newline at end of file diff --git a/keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/config.h b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/config.h deleted file mode 100644 index 818ea7d4af48..000000000000 --- a/keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/config.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright 2021 omkbd - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#define RGB_MATRIX_FRAMEBUFFER_EFFECTS -//#define USE_MATRIX_I2C - -/* Select hand configuration */ - -// #define MASTER_LEFT -// #define MASTER_RIGHT -#define EE_HANDS diff --git a/keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/keymap.c b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/keymap.c deleted file mode 100644 index e23ba19d7a16..000000000000 --- a/keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/keymap.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright 2021 omkbd - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H - -enum layer_number { - _QWERTY = 0, - _NAV, - _SYMBOL, - _MEDIA -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - [_QWERTY] = LAYOUT( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, - KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, - KC_LCTL, KC_LALT, KC_LGUI, MO(2), MO(1), KC_SPC, KC_SPC, MO(1), MO(2), KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT -), - -[_NAV] = LAYOUT( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, - KC_TRNS, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_TRNS, KC_TRNS, - KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_PGUP, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END -), - -[_SYMBOL] = LAYOUT( - KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_UNDS, KC_PLUS, KC_BSPC, - KC_TRNS, KC_NO, KC_P7, KC_P8, KC_P9, KC_NO, KC_LPRN, KC_RPRN, KC_UNDS, KC_PLUS, KC_NO, KC_LCBR, KC_RCBR, KC_PIPE, - KC_ESC, KC_NO, KC_P4, KC_P5, KC_P6, KC_NO, KC_LCBR, KC_RCBR, KC_MINS, KC_EQL, KC_COLN, KC_DQUO, KC_TRNS, KC_TRNS, - KC_TRNS, KC_NO, KC_P1, KC_P2, KC_P3, KC_NO, KC_LBRC, KC_RBRC, KC_LT, KC_GT, KC_QUES, KC_TRNS, KC_UP, KC_TRNS, - KC_TRNS, KC_TRNS, KC_P0, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT -), - -[_MEDIA] = LAYOUT( - KC_NO, KC_SCRL, KC_PAUS, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MRWD, KC_MPLY, KC_MFFD, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, - RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_NO, KC_NO, KC_NO, KC_NO, KC_MPLY, KC_NO, KC_NO, KC_NO, - KC_NO, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_NO, RGB_M_P, RGB_M_B, RGB_M_SW, RGB_M_G, KC_NO, KC_NO, KC_MUTE, KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLU, KC_NO, - KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_MRWD, KC_VOLD, KC_MFFD -) - -}; diff --git a/keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/rules.mk b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/rules.mk deleted file mode 100644 index 8110dbaa1f9f..000000000000 --- a/keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/rules.mk +++ /dev/null @@ -1,3 +0,0 @@ -RGB_MATRIX_ENABLE = yes -EXTRAKEY_ENABLE = yes -VIA_ENABLE = yes diff --git a/keyboards/orthodox/keymaps/rfvizarra/config.h b/keyboards/orthodox/keymaps/rfvizarra/config.h deleted file mode 100644 index 92b3713350c1..000000000000 --- a/keyboards/orthodox/keymaps/rfvizarra/config.h +++ /dev/null @@ -1,41 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert -Copyright 2017 Art Ortenburger - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - - -#ifdef AUDIO_ENABLE -#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \ - SONG(COLEMAK_SOUND), \ - SONG(DVORAK_SOUND) \ -} -#endif - -#define USE_I2C - -/* Select hand configuration */ - -// #define MASTER_LEFT -// #define MASTER_RIGHT -#define EE_HANDS - -#endif diff --git a/keyboards/orthodox/keymaps/rfvizarra/keymap.c b/keyboards/orthodox/keymaps/rfvizarra/keymap.c deleted file mode 100644 index af9f8d5e20c7..000000000000 --- a/keyboards/orthodox/keymaps/rfvizarra/keymap.c +++ /dev/null @@ -1,134 +0,0 @@ -/* -This is the keymap for the keyboard - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert -Copyright 2017 Art Ortenburger - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include QMK_KEYBOARD_H - -extern keymap_config_t keymap_config; - -// Each layer gets a name for readability, which is then used in the keymap matrix below. -// The underscores don't mean anything - you can have a layer called STUFF or any other name. -// Layer names don't all need to be of the same length, obviously, and you can also skip them -// entirely and just use numbers. -#define _QWERTY 0 -#define _COLEMAK 1 -#define _DVORAK 2 -#define _LOWER 3 -#define _RAISE 4 -#define _NAV 5 -#define _NAV2 6 -#define _MEDIA 7 -#define _ADJUST 16 - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - COLEMAK, - DVORAK -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - [_QWERTY] = LAYOUT( - KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, - KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LGUI, KC_LALT, MO(_MEDIA) , KC_DEL, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - MO(_NAV),KC_Z, KC_X, KC_C, KC_V, KC_B, MO(_LOWER), KC_LSFT, CTL_T(KC_ENT), KC_RALT, KC_SPC, MO(_RAISE), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LGUI - ), - - [_COLEMAK] = LAYOUT( - KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, - KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_UP, KC_DOWN, KC_LEFT, KC_RIGHT, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, - KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(_LOWER), KC_SPACE, KC_BSPC, KC_DEL, KC_ENT, MO(_RAISE), KC_K, KC_M, KC_COMM, KC_DOT, KC_SLASH, KC_LGUI - ), - - [_DVORAK] = LAYOUT( - KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, - KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_UP, KC_DOWN, KC_LEFT, KC_RIGHT, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, - KC_LCTL, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, MO(_LOWER), KC_SPACE, KC_BSPC, KC_DEL, KC_ENT, MO(_RAISE), KC_B, KC_M, KC_W, KC_V, KC_Z, KC_LGUI - ), - - [_LOWER] = LAYOUT( - KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_LCTL, _______, _______, KC_RCTL, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, _______, _______, _______, _______, _______, KC_F12, KC_HOME, KC_COMM, KC_DOT, KC_END, _______ - ), - - [_RAISE] = LAYOUT( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, _______, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, _______, _______, _______, _______, _______, KC_F12, KC_PGUP, KC_COMM, KC_DOT, KC_PGDN, _______ - ), - - [_NAV] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ - ), - - [_NAV2] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ - ), - - [_MEDIA] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_MPLY, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ - ), - - [_ADJUST] = LAYOUT( - _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, AU_ON, AU_OFF, AG_NORM, _______, _______, _______, _______, AG_SWAP, QWERTY , COLEMAK, DVORAK, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY - ) - - -}; - -layer_state_t layer_state_set_user(layer_state_t state) { - state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); - state = update_tri_layer_state(state, _LOWER, _NAV, _NAV2); - return state; -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case QWERTY: - if (record->event.pressed) { - set_single_persistent_default_layer(_QWERTY); - } - return false; - break; - case COLEMAK: - if (record->event.pressed) { - set_single_persistent_default_layer(_COLEMAK); - } - return false; - break; - case DVORAK: - if (record->event.pressed) { - set_single_persistent_default_layer(_DVORAK); - } - return false; - break; - } - return true; -} - diff --git a/keyboards/orthodox/keymaps/rfvizarra/readme.md b/keyboards/orthodox/keymaps/rfvizarra/readme.md deleted file mode 100644 index 10a60ebfd345..000000000000 --- a/keyboards/orthodox/keymaps/rfvizarra/readme.md +++ /dev/null @@ -1,19 +0,0 @@ -# A personal Orthodox Layout - -![Orthodox](https://i.imgur.com/RQ5SKj4.jpg) - -This is the layout for my daily driver orthodox. It's based on a custom handwire keyboard that I've been using for quite some time. It's based on Plank's/Let's split layouts for the lower/raise layers. I added the shift, control/enter, alt/altgr and del to the thumb cluster. - -To build the firmware run from qmk's project folder - - make orthodox/rev3:rfvizarra - -And to flash it, run - - make orthodox/rev3:rfvizarra:avrdude - -reset your keyboard pro micro while connected to the PC with a micro usb cable. - -Repeat on both halves. - -See [install build tools](https://docs.qmk.fm/install-build-tools) then the [build/compile instructions](https://docs.qmk.fm/build-compile-instructions) for more information. diff --git a/keyboards/p3d/q4z/keymaps/rjboone/config.h b/keyboards/p3d/q4z/keymaps/rjboone/config.h deleted file mode 100644 index 9264f33bae94..000000000000 --- a/keyboards/p3d/q4z/keymaps/rjboone/config.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright 2021 rjboone - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#pragma once - -#undef TAPPING_TERM -#define TAPPING_TERM 300 - -#define COMBO_TERM 50 diff --git a/keyboards/p3d/q4z/keymaps/rjboone/keymap.c b/keyboards/p3d/q4z/keymaps/rjboone/keymap.c deleted file mode 100644 index c54ec014ec95..000000000000 --- a/keyboards/p3d/q4z/keymaps/rjboone/keymap.c +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright 2021 rjboone - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include QMK_KEYBOARD_H - -enum layers{ - _BASE, - _NUM_SYM, - _NAV, - _GAME -}; - -enum combo_events { - COMBO_BSPC, - COMBO_NUMBAK, - COMBO_TAB, - COMBO_ESC, - COMBO_DEL, -}; - -#define KC_GA LGUI_T(KC_A) -#define KC_AS LALT_T(KC_S) -#define KC_CD LCTL_T(KC_D) -#define KC_SF LSFT_T(KC_F) -#define KC_SJ RSFT_T(KC_J) -#define KC_CK RCTL_T(KC_K) -#define KC_AL RALT_T(KC_L) -#define KC_GSCLN RGUI_T(KC_SCLN) - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_BASE] = LAYOUT( - KC_1, KC_2, KC_3, KC_4, KC_5, - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, - KC_A, KC_S, KC_D, KC_SF, KC_G, KC_H, KC_SJ, KC_K, KC_L, KC_SCLN, - KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, - KC_LCTL, KC_LALT, KC_LGUI, LT(_NUM_SYM, KC_ENT), KC_SPC, MO(_NAV), TG(_GAME), KC_SLSH - ), - - [_NUM_SYM] = LAYOUT( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, - KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_LBRC, KC_RBRC, KC_EQL, KC_TRNS, KC_TRNS, KC_QUOT, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RSFT, KC_TRNS, KC_TRNS, KC_BSLS - ), - - [_NAV] = LAYOUT( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS - ), - - [_GAME] = LAYOUT( - KC_1, KC_2, KC_3, KC_4, KC_5, - KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, KC_NO, KC_NO, KC_NO, - KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, KC_NO, KC_NO, KC_NO, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_NO, KC_NO, KC_NO, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_ENT, KC_NO, TG(_GAME), KC_NO - ), -}; - -#ifdef COMBO_ENABLE -const uint16_t PROGMEM combo_bspc[] = {KC_O, KC_P, COMBO_END}; -const uint16_t PROGMEM combo_numbak[] = {KC_0, KC_9, COMBO_END}; -const uint16_t PROGMEM combo_tab[] = {KC_A, KC_S, COMBO_END}; -const uint16_t PROGMEM combo_esc[] = {KC_Q, KC_W, COMBO_END}; -const uint16_t PROGMEM combo_del[] = {KC_MINS, KC_EQL, COMBO_END}; - -combo_t key_combos[] = { - [COMBO_BSPC] = COMBO(combo_bspc,KC_BSPC), - [COMBO_NUMBAK] = COMBO(combo_numbak,KC_BSPC), - [COMBO_TAB] = COMBO(combo_tab,KC_TAB), - [COMBO_ESC] = COMBO(combo_esc,KC_ESC), - [COMBO_DEL] = COMBO(combo_del,KC_DEL), - -}; -#endif - -layer_state_t layer_state_set_user(layer_state_t state) { - -#ifdef COMBO_ENABLE - switch(get_highest_layer(state)) { - case _GAME: - combo_disable(); - break; - default: - combo_enable(); - break; - } -#endif // COMBO_ENABLE - - return state; -} diff --git a/keyboards/p3d/q4z/keymaps/rjboone/readme.md b/keyboards/p3d/q4z/keymaps/rjboone/readme.md deleted file mode 100644 index 29f2d31f6ff4..000000000000 --- a/keyboards/p3d/q4z/keymaps/rjboone/readme.md +++ /dev/null @@ -1 +0,0 @@ -# Default Le Chiffre Keymap diff --git a/keyboards/p3d/q4z/keymaps/rjboone/rules.mk b/keyboards/p3d/q4z/keymaps/rjboone/rules.mk deleted file mode 100644 index ab1e438182a3..000000000000 --- a/keyboards/p3d/q4z/keymaps/rjboone/rules.mk +++ /dev/null @@ -1 +0,0 @@ -COMBO_ENABLE = yes diff --git a/keyboards/pierce/keymaps/durken1/config.h b/keyboards/pierce/keymaps/durken1/config.h deleted file mode 100644 index ecc59f31bd3d..000000000000 --- a/keyboards/pierce/keymaps/durken1/config.h +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright 2022 durken (https://github.com/durken1/) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -// default but important -#define TAPPING_TERM 220 - -// Enable rapid switch from tap to hold, disables double tap hold auto-repeat. -#define QUICK_TAP_TERM 0 - -#define PERMISSIVE_HOLD - -// Combo settings -#define COMBO_TERM 35 - -#ifdef PS2_DRIVER_USART -#define PS2_CLOCK_PIN D5 -#define PS2_DATA_PIN D2 - -/* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */ -/* set DDR of CLOCK as input to be slave */ -#define PS2_MOUSE_ROTATE 270 // compensate for east-facing device orientation -#define PS2_USART_INIT() do { \ - PS2_CLOCK_DDR &= ~(1<. - */ - -#include QMK_KEYBOARD_H -#include "keymap_swedish.h" - -enum layers { - BASE, - MBO, - SYM, - NUM, - FN -}; - -enum combos { - WF_ARNG, - EI_ADIA, - UK_ODIA -}; - -#if defined PS2_MOUSE_ENABLE -#include "ps2_mouse.h" -#endif - -#if defined AUTO_BUTTONS && defined PS2_MOUSE_ENABLE - -static uint16_t auto_buttons_timer; -extern int tp_buttons; // mousekey button state set in action.c and used in ps2_mouse.c - -void ps2_mouse_moved_user(report_mouse_t *mouse_report) { - if (auto_buttons_timer) { - auto_buttons_timer = timer_read(); - } else { - if (!tp_buttons) { - layer_on(MBO); - auto_buttons_timer = timer_read(); - } - } -} - -void matrix_scan_user(void) { - if (auto_buttons_timer && (timer_elapsed(auto_buttons_timer) > AUTO_BUTTONS_TIMEOUT)) { - if (!tp_buttons) { - layer_off(MBO); - auto_buttons_timer = 0; - } - } -} - -#endif // defined AUTO_BUTTONS && defined PS2_MOUSE_ENABLE - -// Left-hand home row mods -#define GUI_A LGUI_T(KC_A) -#define ALT_R LALT_T(KC_R) -#define SFT_S LSFT_T(KC_S) -#define CTRL_T LCTL_T(KC_T) - -// Right-hand home row mods -#define CTL_N RCTL_T(KC_N) -#define SFT_E RSFT_T(KC_E) -#define ALT_I LALT_T(KC_I) -#define GUI_O LGUI_T(KC_O) - -#define NUM_SPC LT(NUM, KC_SPC) -#define FN_ENT LT(FN, KC_ENT) -#define SYM_BSP LT(SYM, KC_BSPC) - -const uint16_t PROGMEM arng_combo[] = {ALT_R, SFT_S, COMBO_END}; -const uint16_t PROGMEM adia_combo[] = {SFT_E, ALT_I, COMBO_END}; -const uint16_t PROGMEM odia_combo[] = {SE_U, SE_K, COMBO_END}; - -combo_t key_combos[] = { - [WF_ARNG] = COMBO(arng_combo, SE_ARNG), - [EI_ADIA] = COMBO(adia_combo, SE_ADIA), - [UK_ODIA] = COMBO(odia_combo, SE_ODIA) -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [BASE] = LAYOUT_split_3x5_3( - // BASE - //,--------------------------------------------, ,--------------------------------------------. - SE_Q, SE_W, SE_F, SE_P, SE_B, SE_Y, SE_L, SE_U, SE_K, SE_QUOT, - //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| - GUI_A, ALT_R, SFT_S, CTRL_T, SE_G, SE_M, CTL_N, SFT_E, ALT_I, GUI_O, - //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| - SE_Z, SE_X, SE_C, SE_D, SE_V, SE_J, SE_H, SE_COMM, SE_DOT, SE_MINS, - //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - KC_ESC, NUM_SPC, KC_TAB, FN_ENT, SYM_BSP, KC_DEL - //`--------------------------' '--------------------------' - - ), - - - [MBO] = LAYOUT_split_3x5_3( - // Mouse - //,--------------------------------------------, ,--------------------------------------------. - _______, _______, _______, _______, _______, KC_BTN1, KC_BTN2, _______, _______, _______, - //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| - _______, _______, _______, _______, _______, KC_BTN3, _______, _______, _______, _______, - //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - _______, _______, _______, _______, KC_BSPC, _______ - //`--------------------------' '--------------------------' - - ), - - [SYM] = LAYOUT_split_3x5_3( - // Symbols - //,--------------------------------------------, ,--------------------------------------------. - SE_SECT, SE_ACUT, SE_SLSH, SE_TILD, _______, _______, SE_PIPE, SE_BSLS, SE_DIAE, SE_CIRC, - //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| - SE_EXLM, SE_DLR, SE_LPRN, SE_LBRC, _______, _______, SE_RBRC, SE_RPRN, SE_HASH, SE_QUES, - //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| - _______, SE_PERC, SE_LCBR, SE_LABK, _______, _______, SE_RABK, SE_RCBR, SE_AMPR, _______, - //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - SE_AT, SE_EQL, SE_DQUO, _______, _______, _______ - //`--------------------------' '--------------------------' - ), - - [NUM] = LAYOUT_split_3x5_3( - // Numbers - //,--------------------------------------------, ,--------------------------------------------. - _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, SE_7, SE_8, SE_9, SE_QUOT, - //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| - SE_PLUS, SE_MINS, SE_ASTR, SE_SLSH, SE_CIRC, _______, SE_4, SE_5, SE_6, _______, - //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| - _______, _______, KC_VOLD, KC_VOLU, _______, KC_SPC, SE_1, SE_2, SE_3, _______, - //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - _______, _______, _______, SE_COMM, SE_0, SE_DOT - //`--------------------------' '--------------------------' - ), - - [FN] = LAYOUT_split_3x5_3( - // FN - //,--------------------------------------------, ,--------------------------------------------. - _______, _______, _______, _______, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, - //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| - KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, KC_F4, KC_F5, KC_F6, KC_F11, - //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| - _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F12, - //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - KC_PSCR, KC_CAPS, _______, _______, _______, _______ - //`--------------------------' '--------------------------' - ) -}; diff --git a/keyboards/pierce/keymaps/durken1/rules.mk b/keyboards/pierce/keymaps/durken1/rules.mk deleted file mode 100644 index bea18c02d1ff..000000000000 --- a/keyboards/pierce/keymaps/durken1/rules.mk +++ /dev/null @@ -1,4 +0,0 @@ -EXTRAKEY_ENABLE = yes -TRACKPOINT = yes -AUTO_BUTTONS = yes -COMBO_ENABLE = yes diff --git a/keyboards/playkbtw/pk60/keymaps/rfvizarra/keymap.c b/keyboards/playkbtw/pk60/keymaps/rfvizarra/keymap.c deleted file mode 100644 index b6988e1cdc51..000000000000 --- a/keyboards/playkbtw/pk60/keymaps/rfvizarra/keymap.c +++ /dev/null @@ -1,29 +0,0 @@ -#include QMK_KEYBOARD_H - - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - [0] = LAYOUT_minila( - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRAVE, KC_BSPC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_DEL, - KC_LCTL, KC_LGUI, KC_LALT, MO(1), KC_SPC, MO(2), KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT - ), - - [1] = LAYOUT_minila( - QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, - _______, RGB_TOG, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, - _______, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, RGB_RMOD, _______, BL_DOWN, BL_TOGG, BL_UP, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, - _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_MPLY - ), - - [2] = LAYOUT_minila( - _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, - _______, RGB_TOG, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, - _______, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, RGB_RMOD, _______, BL_DOWN, BL_TOGG, BL_UP, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, - _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END - ), -}; diff --git a/keyboards/playkbtw/pk60/keymaps/rfvizarra/readme.md b/keyboards/playkbtw/pk60/keymaps/rfvizarra/readme.md deleted file mode 100644 index cd9a22108796..000000000000 --- a/keyboards/playkbtw/pk60/keymaps/rfvizarra/readme.md +++ /dev/null @@ -1,11 +0,0 @@ -# A personal keymap for Play Keyboard60 based on the minila layout - -![Mininla layout](https://i.imgur.com/K7ONE1k.jpg) - -To build the firmware use - - make playkbtw/pk60:rfvizarra - -or if you prefer to use docker - - util/docker_build.sh playkbtw/pk60:rfvizarra diff --git a/keyboards/ploopyco/trackball_nano/keymaps/maddie/keymap.c b/keyboards/ploopyco/trackball_nano/keymaps/maddie/keymap.c deleted file mode 100644 index 370eb95aa032..000000000000 --- a/keyboards/ploopyco/trackball_nano/keymaps/maddie/keymap.c +++ /dev/null @@ -1,86 +0,0 @@ -/* Copyright 2021 Colin Lam (Ploopy Corporation) - * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) - * Copyright 2019 Sunjun Kim - * Copyright 2019 Hiroyuki Okada - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include QMK_KEYBOARD_H - -// Configuration options -#define SCROLL_TIMEOUT 25 -#define DELTA_X_THRESHOLD 60 -#define DELTA_Y_THRESHOLD 15 - -bool scroll_enabled = false; -bool lock_state = false; - -// State -static int8_t delta_x = 0; -static int8_t delta_y = 0; - -// Dummy -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {{{ KC_NO }}}; - -report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) { - if (scroll_enabled) { - delta_x += mouse_report.x; - delta_y += mouse_report.y; - - if (delta_x > DELTA_X_THRESHOLD) { - mouse_report.h = 1; - delta_x = 0; - } else if (delta_x < -DELTA_X_THRESHOLD) { - mouse_report.h = -1; - delta_x = 0; - } - - if (delta_y > DELTA_Y_THRESHOLD) { - mouse_report.v = -1; - delta_y = 0; - } else if (delta_y < -DELTA_Y_THRESHOLD) { - mouse_report.v = 1; - delta_y = 0; - } - mouse_report.x = 0; - mouse_report.y = 0; - } - return mouse_report; -} - -void keyboard_post_init_user(void) { - lock_state = host_keyboard_led_state().num_lock; -} - -bool led_update_user(led_t led_state) { - static uint8_t lock_count = 0; - static uint16_t scroll_timer = 0; - - if (timer_elapsed(scroll_timer) > SCROLL_TIMEOUT) { - scroll_timer = timer_read(); - lock_count = 0; - } - - if (led_state.num_lock != lock_state) { - lock_count++; - - if (lock_count == 2) { - scroll_enabled = !scroll_enabled; - lock_count = 0; - } - } - - lock_state = led_state.num_lock; - return true; -} diff --git a/keyboards/ploopyco/trackball_nano/keymaps/maddie/readme.md b/keyboards/ploopyco/trackball_nano/keymaps/maddie/readme.md deleted file mode 100644 index 3a597e38d812..000000000000 --- a/keyboards/ploopyco/trackball_nano/keymaps/maddie/readme.md +++ /dev/null @@ -1 +0,0 @@ -toggles scroll mode when numlock is double-tapped within 25ms. add a macro or something, unless you have ungodly fast fingers. diff --git a/keyboards/primekb/prime_o/keymaps/reasonsandreasons/config.h b/keyboards/primekb/prime_o/keymaps/reasonsandreasons/config.h deleted file mode 100644 index 4bcfa2ce5c62..000000000000 --- a/keyboards/primekb/prime_o/keymaps/reasonsandreasons/config.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright 2018 Jumail Mundekkat - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#define TAPPING_TERM 200 - -// place overrides here diff --git a/keyboards/primekb/prime_o/keymaps/reasonsandreasons/keymap.c b/keyboards/primekb/prime_o/keymaps/reasonsandreasons/keymap.c deleted file mode 100644 index 2f0290dc0334..000000000000 --- a/keyboards/primekb/prime_o/keymaps/reasonsandreasons/keymap.c +++ /dev/null @@ -1,174 +0,0 @@ -/* Copyright 2018 Jumail Mundekkat - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H - -#define L1BS LT(2, KC_BSPC) -#define LSUP LSFT_T(KC_UP) -#define CTLL LCTL_T(KC_LEFT) -#define ECTL LCTL_T(KC_ESC) -#define ALLM ALL_T(KC_MINS) -#define SCLS LT(3, KC_SCLN) - -// Establishes tap dance keys -enum { - TD_SPC_ENT = 0 -}; - -tap_dance_action_t tap_dance_actions[] = { - [TD_SPC_ENT] = ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_ENT) - -}; - -// Defines the keycodes used by our macros in process_record_user -enum custom_keycodes { - QMKBEST = SAFE_RANGE, - QMKURL -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* BASE - * ,---------------------------------------------------------------------------------------------------------------, - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | NMLK | / | * | - | - * | | | | | | | | | | | | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * | Tab | Q | W | E | R | T | Y | U | I | O | P | \ | 7 | 8 | 9 | + | - * | | | | | | | | | | | | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * | Esc | A | S | D | F | G | H | J | K | L | ; | ' | 4 | 5 | 6 | = | - * | Ctrl | | | | | | | | | | | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * | | Z | X | C | V | B | N | M | , | . | / | Up | 1 | 2 | 3 | | - * | Shift| | | | | | | | | | | Shift| | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+ Enter| - * | - | | | | Backspace | Space | | | Left | Down | Right| 0 | . | | - * | ALL | Ctrl | Alt | GUI | Fn1 | | GUI | Alt | Ctrl | | | | | | - * `---------------------------------------------------------------------------------------------------------------' - */ - - [0] = LAYOUT( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, KC_7, KC_8, KC_9, KC_PPLS, - ECTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SCLS, KC_QUOT, KC_4, KC_5, KC_6, KC_PEQL, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, LSUP, KC_1, KC_2, KC_3, KC_ENT, - ALLM, KC_LCTL, KC_LALT, KC_LGUI, L1BS, L1BS, KC_SPC, KC_SPC, KC_RGUI, KC_RALT, CTLL, KC_DOWN, KC_RIGHT, KC_0, KC_PDOT, KC_ENT - ), - -/* GAME - * ,---------------------------------------------------------------------------------------------------------------, - * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | NMLK | / | * | - | - * | ` | | | | | | | | | | | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * | Tab | Q | W | E | R | T | Y | U | I | O | P | ' | 7 | 8 | 9 | + | - * | | | | | | | | | | | | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * | Caps | A | S | D | F | G | H | J | K | L | ; | Rtrn | 4 | 5 | 6 | = | - * | | | | | | | | | | | | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * | | Z | X | C | V | B | N | M | , | . | / | Up | 1 | 2 | 3 | | - * | Shift| | | | | | | | | | | | | | | | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+ Enter| - * | | | | | Space | Backspace | | | Left | Down | Right| 0 | . | | - * | Fn1 | Ctrl | Alt | Alt | | | GUI | DF(0)| | | | | | | - * `---------------------------------------------------------------------------------------------------------------' - */ - - [1] = LAYOUT( - QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT, KC_7, KC_8, KC_9, KC_PPLS, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, KC_4, KC_5, KC_6, KC_PEQL, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_1, KC_2, KC_3, KC_ENT, - MO(2), KC_LCTL, KC_LALT, KC_LALT, KC_SPC, KC_SPC, KC_BSPC, KC_BSPC, KC_RGUI, DF(0), KC_LEFT, KC_DOWN, KC_RIGHT, KC_0, KC_PDOT, KC_ENT - ), - -/* SYMBOL - * ,---------------------------------------------------------------------------------------------------------------, - * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | | | | - * | | | | | | | | | | | | | | | | | - * |------+-------------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | # | [ | < | > | ] | _ | | | | | | | | | - * | | | | | | | | | | | | | | | | | - * |------+------|------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | ~ | ( | { | } | ) | @ | - | | | | | | | - * | | | | | | | | | | | | | | | | | - * |------+------|------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | | | | | | - * | | | | | | | | | | | | | | | | | - * |------+------|------+------+------+------+------+------+------+------+------+------+------+------+------+ | - * | | | | | | Enter | | | | | | | | | - * | | | | | | | | | | | | | | | - * `---------------------------------------------------------------------------------------------------------------' - */ - - [2] = LAYOUT( - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, - _______, _______, _______, KC_HASH, KC_LBRC, KC_LT, KC_GT, KC_RBRC, KC_UNDS, KC_PIPE, _______, _______, _______, _______, _______, _______, - _______, _______, _______, KC_TILD, KC_LPRN, KC_LCBR, KC_RCBR, KC_RPRN, KC_AT, KC_MINS, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, KC_ENT, KC_ENT, _______, _______, _______, _______, _______, _______, _______, _______ - ), - -/* SYSTEM - * ,---------------------------------------------------------------------------------------------------------------, - * | | | | | | | | | | | | | | | | | - * | | | | | | | | | | | | | | | | | - * |------+-------------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * | | PgUp | Home | Up | End | | | Vol- | Vol+ | Mute | | | | | | | - * | | | | | | | | | | | | | | | | | - * |------+------|------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * | | PgDn | Left | Down |Right | | | Play | Prev | Next | | | | | | QK_BOOT| - * | | | | | | | | | | | | | | | | | - * |------+------|------+------+------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | | | | | | - * | | | | | | | | | | | | | | | | | - * |------+------|------+------+------+------+------+------+------+------+------+------+------+------+------+ BL | - * | | | | | | | | | | | | | BL | TGGL | - * | GAME | | | | | | | | | | | | STEP | | - * `---------------------------------------------------------------------------------------------------------------' - */ - - [3] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, KC_PGUP, KC_HOME, KC_UP, KC_END, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, _______, _______, _______, - _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_MPLY, KC_MRWD, KC_MFFD, _______, _______, _______, _______, _______, QK_BOOT, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_TOGG, - DF(1), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_STEP, BL_TOGG - ), - -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case QMKBEST: - if (record->event.pressed) { - // when keycode QMKBEST is pressed - SEND_STRING("QMK is the best thing ever!"); - } else { - // when keycode QMKBEST is released - } - break; - case QMKURL: - if (record->event.pressed) { - // when keycode QMKURL is pressed - SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER)); - } else { - // when keycode QMKURL is released - } - break; - } - return true; -} diff --git a/keyboards/primekb/prime_o/keymaps/reasonsandreasons/readme.md b/keyboards/primekb/prime_o/keymaps/reasonsandreasons/readme.md deleted file mode 100644 index e14e989e3226..000000000000 --- a/keyboards/primekb/prime_o/keymaps/reasonsandreasons/readme.md +++ /dev/null @@ -1,5 +0,0 @@ -![reasonsandreasons Layout Image](https://imgur.com/a/xIpn2U5) - -# reasonsandreasons's Prime_O Layout - -This is a relatively simple layout for the Prime_O, designed for mostly typing use and occasional gaming. I'm still testing it and there will likely be minor changes, but most of the bones of it will likely stay the same. diff --git a/keyboards/primekb/prime_o/keymaps/reasonsandreasons/rules.mk b/keyboards/primekb/prime_o/keymaps/reasonsandreasons/rules.mk deleted file mode 100644 index 645e8d523f60..000000000000 --- a/keyboards/primekb/prime_o/keymaps/reasonsandreasons/rules.mk +++ /dev/null @@ -1,20 +0,0 @@ -# Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# -BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite -MOUSEKEY_ENABLE = no # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = no # Console for debug(+400) -COMMAND_ENABLE = no # Commands for debug and configuration -NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -MIDI_ENABLE = no # MIDI controls -AUDIO_ENABLE = no # Audio output on port C6 -UNICODE_ENABLE = no # Unicode -BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. -TAP_DANCE_ENABLE=yes # Enable Tap Dance - -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/psuieee/pluto12/keymaps/wymcg/keymap.c b/keyboards/psuieee/pluto12/keymaps/wymcg/keymap.c deleted file mode 100644 index 96499b8789c9..000000000000 --- a/keyboards/psuieee/pluto12/keymaps/wymcg/keymap.c +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2021-22 Will McGLoughlin (wymcg) -// SPDX-License-Identifier: GPL-2.0-or-later - -#include QMK_KEYBOARD_H - -// Defines names for use in layer keycodes and the keymap -enum layer_names { - _BASE, - _NAV, - _PROD -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_BASE] = LAYOUT( - KC_MUTE, KC_MPRV, KC_MPLY, KC_MNXT, - TO(_NAV), G(KC_1), G(KC_2), G(KC_3), - TO(_PROD), G(KC_4), G(KC_5), G(KC_6) - ), - [_NAV] = LAYOUT( - TO(_BASE), KC_HOME, KC_UP, KC_END, - A(KC_TAB), KC_LEFT, KC_DOWN, KC_RIGHT, - G(KC_TAB), KC_PGDN, KC_PGUP, MO(_BASE) - ), - [_PROD] = LAYOUT( - TO(_BASE), KC_NO, KC_NO, KC_NO, - C(KC_Z), C(KC_X), C(KC_C), C(KC_V), - C(KC_A), C(KC_LEFT), C(KC_RIGHT),MO(_BASE) - ) -}; - -bool encoder_update_user(uint8_t index, bool clockwise) { - switch (biton32(layer_state)) { - case _BASE: - if (clockwise) { - tap_code(KC_VOLU); - } else { - tap_code(KC_VOLD); - } - break; - case _NAV: - if (clockwise) { - tap_code16(C(G(KC_RIGHT))); - } else { - tap_code16(C(G(KC_LEFT))); - } - break; - case _PROD: - if (clockwise) { - tap_code16(C(KC_Y)); - } else { - tap_code16(C(KC_Z)); - } - break; - } - return false; -} diff --git a/keyboards/psuieee/pluto12/keymaps/wymcg/readme.md b/keyboards/psuieee/pluto12/keymaps/wymcg/readme.md deleted file mode 100644 index 60d2f19be3cc..000000000000 --- a/keyboards/psuieee/pluto12/keymaps/wymcg/readme.md +++ /dev/null @@ -1 +0,0 @@ -# wymcg's custom keymap diff --git a/keyboards/qvex/lynepad2/keymaps/mcrosson/keymap.c b/keyboards/qvex/lynepad2/keymaps/mcrosson/keymap.c deleted file mode 100644 index ead8ab40a6da..000000000000 --- a/keyboards/qvex/lynepad2/keymaps/mcrosson/keymap.c +++ /dev/null @@ -1,142 +0,0 @@ -/* -Copyright 2023 QVEX Tech - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include QMK_KEYBOARD_H - -#define RGB_HUE_LAYER0 0 //default layer -#define RGB_HUE_LAYER1 50 -#define RGB_HUE_LAYER2 100 -#define RGB_HUE_LAYER3 150 -#define RGB_HUE_LAYER4 200 - - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT //Default - ( - KC_MS_BTN4, KC_MS_BTN2, KC_MS_UP, KC_MS_BTN1, - KC_MS_BTN5, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, - KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2, - - KC_VOLU, KC_VOLD, KC_MPRV, KC_MNXT, //joystick up, down, left, right - KC_MPLY, MO(4) //joystick center push, thumbwheel push - ), - - [1] = LAYOUT //KiCad - ( - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, - - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right - XXXXXXX, MO(4) //joystick center push, thumbwheel push - ), - - [2] = LAYOUT - ( - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, - - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right - XXXXXXX, MO(4) //joystick center push, thumbwheel push - ), - - [3] = LAYOUT - ( - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, - - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right - XXXXXXX, MO(4) //joystick center push, thumbwheel push - ), - - [4] = LAYOUT - ( - TO(0), TO(1), TO(2), TO(3), - BL_TOGG, BL_STEP, XXXXXXX, XXXXXXX, - QK_RBT, EE_CLR, QK_BOOT, - - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right - RGB_TOG, XXXXXXX //joystick center push, thumbwheel push - ) -}; - -#if defined(ENCODER_MAP_ENABLE) -const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { - [0] = { - ENCODER_CCW_CW(KC_VOLD, KC_VOLU), - ENCODER_CCW_CW(KC_MS_WH_DOWN, KC_MS_WH_UP) - }, - - [1] = { - ENCODER_CCW_CW(XXXXXXX, XXXXXXX), - ENCODER_CCW_CW(XXXXXXX, XXXXXXX) - }, - - [2] = { - ENCODER_CCW_CW(XXXXXXX, XXXXXXX), - ENCODER_CCW_CW(XXXXXXX, XXXXXXX) - }, - - [3] = { - ENCODER_CCW_CW(XXXXXXX, XXXXXXX), - ENCODER_CCW_CW(XXXXXXX, XXXXXXX) - }, - - [4] = { - ENCODER_CCW_CW(RGB_VAD, RGB_VAI), - ENCODER_CCW_CW(XXXXXXX, XXXXXXX) - } -}; -#endif - -//set only hue, retain saturation, and value -void rgblight_sethue_noeeprom(uint8_t hue) { - //only if rgb led ring is on - if (rgblight_get_mode()) { - rgblight_sethsv_noeeprom(hue,rgblight_get_sat(),rgblight_get_val()); - } -} - -//set correct layer hue on layer change -layer_state_t layer_state_set_user(layer_state_t state) { - switch (get_highest_layer(state)) { - case 1: - rgblight_sethue_noeeprom(RGB_HUE_LAYER1); - break; - case 2: - rgblight_sethue_noeeprom(RGB_HUE_LAYER2); - break; - case 3: - rgblight_sethue_noeeprom(RGB_HUE_LAYER3); - break; - case 4: - rgblight_sethue_noeeprom(RGB_HUE_LAYER4); - break; - default: - rgblight_sethue_noeeprom(RGB_HUE_LAYER0); - break; - - } - return state; -} - -//set default layer hue upon init -void keyboard_post_init_user(void) { - rgblight_init(); - rgblight_sethue_noeeprom(RGB_HUE_LAYER0); -} \ No newline at end of file diff --git a/keyboards/qvex/lynepad2/keymaps/mcrosson/rules.mk b/keyboards/qvex/lynepad2/keymaps/mcrosson/rules.mk deleted file mode 100644 index a40474b4d5c7..000000000000 --- a/keyboards/qvex/lynepad2/keymaps/mcrosson/rules.mk +++ /dev/null @@ -1 +0,0 @@ -ENCODER_MAP_ENABLE = yes \ No newline at end of file diff --git a/keyboards/redscarf_iiplus/verd/keymaps/alittlepeace/keymap.c b/keyboards/redscarf_iiplus/verd/keymaps/alittlepeace/keymap.c deleted file mode 100644 index e6019db2ee02..000000000000 --- a/keyboards/redscarf_iiplus/verd/keymaps/alittlepeace/keymap.c +++ /dev/null @@ -1,81 +0,0 @@ -/* Copyright 2019 Andy Lee - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include QMK_KEYBOARD_H - -// Defines the keycodes used by our macros in process_record_user -enum custom_keycodes { - KC_P00 = SAFE_RANGE, - -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - [0] = LAYOUT_60_ansi_numpad_split0( - QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, TG(1), KC_PSLS, KC_PAST, KC_PMNS, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_INS, KC_HOME, KC_PGUP, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_DEL, KC_END, KC_PGDN, KC_PPLS, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, C(S(KC_TAB)), KC_UP, LCTL(KC_TAB), - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(2), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PENT - ), - - [1] = LAYOUT_60_ansi_numpad_split0( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, - _______, _______, _______, _______, _______, _______, _______, _______, KC_0, KC_P00, KC_DOT, _______ - ), - - [2] = LAYOUT_60_ansi_numpad_split0( - _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ - ), -}; -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case KC_P00: - if (record->event.pressed) { - SEND_STRING("00"); - } - break; - case TG(1): - if (record->event.pressed) { - tap_code(KC_NUM_LOCK); - return true; - } - break; - - } - return true; -} - -void matrix_init_user (void) { - if (!host_keyboard_led_state ().num_lock) { - tap_code(KC_NUM_LOCK); - } -} - -bool led_update_user(led_t led_state) { - if (led_state.num_lock) { - layer_on(1); - } else { - layer_off(1); - } - return true; -} diff --git a/keyboards/reviung/reviung41/keymaps/ciutadellla/config.h b/keyboards/reviung/reviung41/keymaps/ciutadellla/config.h deleted file mode 100644 index 1d7ad67a6290..000000000000 --- a/keyboards/reviung/reviung41/keymaps/ciutadellla/config.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright 2021 @Ciutadellla - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once -#define RGBLIGHT_LAYERS - // /*== or choose animations ==*/ - #define RGBLIGHT_EFFECT_BREATHING - #define RGBLIGHT_EFFECT_RAINBOW_MOOD - #define RGBLIGHT_EFFECT_RAINBOW_SWIRL - -#define TAPPING_TERM 200 -#define UNICODE_SELECTED_MODES UNICODE_MODE_MACOS, UNICODE_MODE_LINUX, UNICODE_MODE_WINCOMPOSE diff --git a/keyboards/reviung/reviung41/keymaps/ciutadellla/keymap.c b/keyboards/reviung/reviung41/keymaps/ciutadellla/keymap.c deleted file mode 100644 index a4279821ccc1..000000000000 --- a/keyboards/reviung/reviung41/keymaps/ciutadellla/keymap.c +++ /dev/null @@ -1,333 +0,0 @@ -/* Copyright 2021 @Ciutadellla - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - - - #include QMK_KEYBOARD_H - - enum layer_names { - _BASE, - _LOWER, - _RAISE, - _MOVE, - _ADJUST - }; - - //UNICODES - #include "process_unicode.h" - - enum unicode_names { - CKC_EUR, - N_TILDE, - COMB_ACUTE_ACCENT, - GRINNING_FACE, // 😃 - BEAMING_FACE, // 😁 - GRINNING_FACE_WITH_SWEAT, // 😅 - ROLLING_LAUGHING, // 🤣 - FACE_TEARS_JOY, // 😂 - WINKING_FACE, // 😉 - SMILING_FACE_HALO, // 😇 - SMILING_FACE_HEARTS, // 🥰 - SMILING_FACE_HEART_EYES, // 😍 - FACE_BLOWING_KISS, // 😘 - FACE_SAVORING_FOOD, // 😋 - ZANY_FACE, // 🤪 - HUGGING_FACE, // 🤗 - SHUSHING_FACE, // 🤫 - THINKING_FACE, // 🤔 - FACE_RAISED_EYEBROW, // 🤨 - NEUTRAL_FACE, // 😐 - SMIRKING_FACE, // 😏 - FACE_ROLLING_EYES, // 🙄 - PENSIVE_FACE, // 😔 - FACE_VOMITING, // 🤮 - WOOZY_FACE, // 🥴 - PLEADING_FACE, // 🥺 - LOUDLY_CRYING_FACE, // 😭 - DISAPPOINTED_FACE, // 😞 - FACE_SYMBOLS_MOUTH, // 🤬 - SMILING_FACE_HORNS, // 😈 - SKULL, // 💀 - PILE_POO, // 💩 - GHOST, // 👻 - ALIEN_MONSTER, // 👾 - RED_HEART, // ❤ - BOMB, // 💣 - WAVING_HAND, // 👋 - OK_HAND, // 👌 - CLAPPING_HANDS, // 👏 - EYES, // 👀 - MAN_FACEPALMING, // 🤦 - TURTLE, // 🐢 - SNAKE, // 🐍 - SPOUTING_WHALE, // 🐳 - DRAGON, // 🐉 - TREX, // 🦖 - THUMBSDOWN, // 👍 - THUMBSUP, // 👎 - }; - - //https://unicode-table.com/en/#00F1 - const uint32_t unicode_map[] PROGMEM = { - [CKC_EUR] = 0x20AC, //€ - [N_TILDE] = 0x00F1, // ñ - [COMB_ACUTE_ACCENT] = 0x0301, // ´ - [GRINNING_FACE] = 0x1F603, - [BEAMING_FACE] = 0x1F601, - [GRINNING_FACE_WITH_SWEAT] = 0x1F605, - [ROLLING_LAUGHING] = 0x1F923, - [FACE_TEARS_JOY] = 0x1F602, - [WINKING_FACE] = 0x1F609, - [SMILING_FACE_HALO] = 0x1F607, - [SMILING_FACE_HEARTS] = 0x1F970, - [SMILING_FACE_HEART_EYES] = 0x1F60D, - [FACE_BLOWING_KISS] = 0x1F618, - [FACE_SAVORING_FOOD] = 0x1F60B, - [ZANY_FACE] = 0x1F92A, - [HUGGING_FACE] = 0x1F917, - [SHUSHING_FACE] = 0x1F92B, - [THINKING_FACE] = 0x1F914, - [FACE_RAISED_EYEBROW] = 0x1F928, - [NEUTRAL_FACE] = 0x1F610, - [SMIRKING_FACE] = 0x1F60F, - [FACE_ROLLING_EYES] = 0x1F644, - [PENSIVE_FACE] = 0x1F614, - [FACE_VOMITING] = 0x1F92E, - [WOOZY_FACE] = 0x1F974, - [PLEADING_FACE] = 0x1F97A, - [LOUDLY_CRYING_FACE] = 0x1F62D, - [DISAPPOINTED_FACE] = 0x1F61E, - [FACE_SYMBOLS_MOUTH] = 0x1F92C, - [SMILING_FACE_HORNS] = 0x1F608, - [SKULL] = 0x1F480, - [PILE_POO] = 0x1F4A9, - [GHOST] = 0x1F47B, - [ALIEN_MONSTER] = 0x1F47E, - [RED_HEART] = 0x2764, - [BOMB] = 0x1F4A3, - [WAVING_HAND] = 0x1F44B, - [OK_HAND] = 0x1F44C, - [CLAPPING_HANDS] = 0x1F44F, - [EYES] = 0x1F440, - [MAN_FACEPALMING] = 0x1F926, - [TURTLE] = 0x1F422, - [SNAKE] = 0x1F40D, - [SPOUTING_WHALE] = 0x1F433, - [DRAGON] = 0x1F409, - [TREX] = 0x1F996, - [THUMBSDOWN] = 0x1F44E, - [THUMBSUP] = 0x1F44D, - }; - - - void matrix_init_user(void){ - set_unicode_input_mode(UNICODE_MODE_MACOS); - } - - - // Shortcut to make keymap more readable - #define KC_OSX_EJECT 0x66 - #define LOCK_OSX LSFT(LCTL(KC_OSX_EJECT)) - #define SLEEP_OSX LALT(LGUI(KC_OSX_EJECT)) - #define KC_C_LF RCTL(KC_LEFT) // control + left - #define KC_C_RT RCTL(KC_RGHT) // control + right - - // tap dance declarations - enum { - _TD_TAB_ESC = 0, - _TD_BSPC_WDEL, - _TD_SFT_CAPS, - _TD_SPC_ENT, - _TD_N_NTILDE, - _TD_CTRL_LANG, - _TD_SCLN_NTILDE - }; - - #define TD_TAB_ESC TD(_TD_TAB_ESC) - #define TD_BSPC_WDEL TD(_TD_BSPC_WDEL) - #define TD_SFT_CAPS TD(_TD_SFT_CAPS) - #define TD_SPC_ENT TD(_TD_SPC_ENT) - #define TD_N_NTILDE TD(_TD_N_NTILDE) - #define TD_CTRL_LANG TD(_TD_CTRL_LANG) - #define TD_SCLN_NTILDE TD(_TD_SCLN_NTILDE) //TP with costum keycodes has to be a funtion - - void td_scln_ntilde(tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - register_code(KC_SCLN); - unregister_code(KC_SCLN); - } else { - send_unicode_string("ñ"); - } - reset_tap_dance(state); - } - - // Tap Dance Definitions - tap_dance_action_t tap_dance_actions[] = { - [_TD_TAB_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_TAB, KC_ESC), - [_TD_BSPC_WDEL] = ACTION_TAP_DANCE_DOUBLE(KC_BSPC, LALT(KC_BSPC)), - [_TD_SFT_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS), - [_TD_SPC_ENT] = ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_ENT), - [_TD_CTRL_LANG] = ACTION_TAP_DANCE_DOUBLE(KC_LCTL, LCTL(LSFT(KC_SPACE))), - [_TD_SCLN_NTILDE] = ACTION_TAP_DANCE_FN(td_scln_ntilde), - }; - - - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - - /* Qwerty 0 - * ,-----------------------------------------+ +-----------------------------------------. - * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp | - * |------+------+------+------+------+------+ +------+------+------+------+------+------| - * |CtlLNG| A | S | D | F | G | | H | J | K | L | ; | " | - * |------+------+------+------+------+------+ +------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | | N | M | , | . | / | Shift| - * |------+------+------+------+------+------+ +------+------+------+------+------+------| - * | GUI | Lower| Space | Raise| Alt | - * +-------------/ \--------------+ - */ - [_BASE] = LAYOUT_reviung41(TD_TAB_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, TD_BSPC_WDEL, TD_CTRL_LANG, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, TD_SCLN_NTILDE, KC_QUOT, TD_SFT_CAPS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_ENT), KC_LGUI, MO(1), TD_SPC_ENT, MO(2), LT(4,KC_NO)), - - - /* LOWER 1 - * ,-----------------------------------------+ +-----------------------------------------. - * | Tab | ! | @ | # | $ | % | | ^ | & | * | () | ) | Del | - * |------+------+------+------+------+------+ +------+------+------+------+------+------| - * | Ctl | _ | + | {} | } | | | | LEFT | DOWN | UP | RIGHT| ´ | " | - * |------+------+------+------+------+------+ +------+------+------+------+------+------| - * | Shift| Esc | Gui | Alt | = | "" | | HOME | END | PGUP | PDOWN| / | Shft | - * |------+------+------+------+------+------+ +------+------+------+------+------+------| - * | GUI | Lower| Space | Raise| Alt | - * +-------------/ \--------------+ - */ - [_LOWER] = LAYOUT_reviung41(KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_ESC, KC_LGUI, KC_LALT, KC_LCTL, KC_TRNS, KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_PSCR, MT(MOD_LSFT | MOD_RSFT,KC_SPC), KC_TRNS, KC_TRNS, KC_ENT, MO(3), KC_TRNS), - - /* Raise 2 - * ,-----------------------------------------+ +-----------------------------------------. - * | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | DEL | - * |------+------+------+------+------+------+ +------+------+------+------+------+------| - * | | MINS | EQL | LBRC | RBRC | BSLS | | F1 | F2 | F3 | F4 | F5 | F6 | - * |------+------+------+------+------+------+ +------+------+------+------+------+------| - * | | | | | | QUOT | | F7 | F8 | F9 | F10 | F11 | F12 | - * |------+------+------+------+------+------+ +------+------+------+------+------+------| - * | ____ | MO(3)| BSPC | ____ | ____ | - * +-------------/ \--------------+ - */ - - // [_RAISE] = LAYOUT_reviung41( - // KC_TRNS, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, KC_DEL, - // KC_TRNS, KC_LPRN, KC_RPRN, KC_LT, KC_GT, KC_AMPR, KC_PMNS, KC_PPLS, KC_HASH, KC_PERC, KC_COLN, KC_PEQL, - // KC_TRNS, KC_LCBR, KC_RCBR, KC_SLSH, KC_INT1, KC_PIPE, KC_PSLS, KC_PAST, KC_PCMM, KC_PDOT, KC_HASH, KC_PENT, - // KC_TRNS, MO(3), KC_BSPC, KC_TRNS, KC_TRNS - // ), - - [_RAISE] = LAYOUT_reviung41( - KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_P7, KC_P8, KC_P9, KC_P0, KC_PPLS, KC_PMNS, - KC_COLN, KC_DQUO, KC_LCBR, KC_RCBR, KC_LT, KC_GT, KC_P4, KC_P5, KC_P6, KC_PERC, KC_PAST, KC_PSLS, - KC_AMPR, KC_PIPE, KC_LPRN, KC_RPRN, KC_LBRC, KC_RBRC, KC_P1, KC_P2, KC_P3, KC_PCMM, KC_PDOT, KC_PEQL, - KC_TRNS, MO(3), KC_PENT, KC_TRNS, KC_TRNS - ), - - - /* _MOVE 3 - * ,---------------------------------------------------+ +------------------------------------------. - * | | | | | | | | | WHD | WHU | | | LOCK | - * |-------+-------+-------+---------+-------+---------+ +------+------+------+------+------+-------| - * | | | | | | | | M_L | M_D | M_I | M_R | | SLEEP | - * |-------+-------+-------+---------+-------+---------+ +------+------+------+------+------+-------| - * | | | | | SCRLFT| SCRRGHT | | M_B1 | M_B2| M0 | M2 | | QK_BOOT | - * |-------+-------+-------+---------+-------+---------+ +------+------+------+------+------+-------| - * | ____ | ____ | BSPC | ____ | ____ | - * +-------------/ \--------------+ - */ - [_MOVE] = LAYOUT_reviung41(KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_ACL2, LOCK_OSX, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_ACL0, SLEEP_OSX, KC_F13, KC_F14, KC_F15, KC_F16, KC_C_LF, KC_C_RT, KC_BTN1, KC_BTN2, KC_BTN3, KC_BTN4, KC_BTN5, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - /* _ADJUST 4 - * ,----------------------------------------+ +---------------------------------------------------. - * | 😃 | 😅 | 🤣 | 😉 | 😇 | 🥰 | | RGBUP | HUEUP | RGB_MOD | BRIU | PLAY | VOLU | - * |------+-----+------+------+------+------+ +-------+--------+----------+-------+-------+------| - * | 😍 | 😘 | 🙄 | 😔 | 😭 | 💩 | | RGBDWN| HUEDWN | RGB_TOG | BRID | STOP | VOLD | - * |------+-----+------+------+------+------+ +-------+--------+----------+--------+------+------| - * | 👍 | 👎 | 👏 | 👀 | 🤦 | 👻 | | RGB_TG| | | | | MUTE | - * |------+------+------+------+------+------+ +-------+--------+----------+--------+------+------| - * | GUI | Lower| BSPC | Raise| Alt | - * +-------------/ \--------------+ - */ - - [_ADJUST] = LAYOUT_reviung41(UM(GRINNING_FACE), UM(GRINNING_FACE_WITH_SWEAT), UM(ROLLING_LAUGHING), UM(WINKING_FACE), UM(SMILING_FACE_HALO), UM(SMILING_FACE_HEARTS), RGB_VAI, RGB_HUI, RGB_MOD, KC_BRIU, KC_MPLY, KC_VOLU, UM(SMILING_FACE_HEART_EYES), UM(FACE_BLOWING_KISS), UM(FACE_ROLLING_EYES), UM(PENSIVE_FACE), UM(LOUDLY_CRYING_FACE), UM(PILE_POO), RGB_VAD, RGB_HUD, RGB_RMOD, KC_BRID, KC_MSTP, KC_VOLD, UM(THUMBSUP), UM(THUMBSDOWN), UM(CLAPPING_HANDS), UM(EYES), UM(MAN_FACEPALMING), UM(GHOST), RGB_TOG, RGB_SAD, RGB_SAI, RGB_SPD, RGB_SPI, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) - - }; - - - - #ifdef RGBLIGHT_ENABLE - // RGB LED Indicators - const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {0, 11, HSV_RED} // Light 1 LED, starting with LED 0 - ); - - // RGB LED Indicators - const rgblight_segment_t PROGMEM my_base_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {0, 11, HSV_CYAN} // Light 1 LED, starting with LED 0 - ); - - const rgblight_segment_t PROGMEM my_lower_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {0, 11, HSV_GREEN} // Light 1 LED, starting with LED 1 - ); - - // RGB LED Indicators - const rgblight_segment_t PROGMEM my_rise_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {0, 11, HSV_MAGENTA} // Light 1 LED, starting with LED 0 - ); - - // RGB LED Indicators - const rgblight_segment_t PROGMEM my_MOVE_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {0, 11, HSV_YELLOW} // Light 1 LED, starting with LED 0 - ); - - - // RGB LED Indicators - const rgblight_segment_t PROGMEM my_ADJUST_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {0, 11, HSV_AZURE} // Light 1 LED, starting with LED 0 - ); - - // Now define the array of layers. Later layers take precedence - const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( - my_base_layer, // 0 - my_lower_layer, // 1 - my_rise_layer, // 2 - my_MOVE_layer, // 3 - my_ADJUST_layer, // 4 - my_capslock_layer // 5 - ); - - // Enable the LED layers - void keyboard_post_init_user(void) { - rgblight_layers = my_rgb_layers; - } - - layer_state_t layer_state_set_user(layer_state_t state) { - rgblight_set_layer_state(1, layer_state_cmp(state, _LOWER)); - rgblight_set_layer_state(2, layer_state_cmp(state, _RAISE)); - rgblight_set_layer_state(3, layer_state_cmp(state, _MOVE)); - rgblight_set_layer_state(4, layer_state_cmp(state, _ADJUST)); - return state; - } - - bool led_update_user(led_t led_state) { - rgblight_set_layer_state(5, led_state.caps_lock); - return true; - } - #endif - diff --git a/keyboards/reviung/reviung41/keymaps/ciutadellla/rules.mk b/keyboards/reviung/reviung41/keymaps/ciutadellla/rules.mk deleted file mode 100644 index eeafc1200622..000000000000 --- a/keyboards/reviung/reviung41/keymaps/ciutadellla/rules.mk +++ /dev/null @@ -1,10 +0,0 @@ -# MCU name -MCU = atmega32u4 -BOOTLOADER = atmel-dfu -MOUSEKEY_ENABLE = yes # Mouse keys -CONSOLE_ENABLE = no # Console for debug -COMMAND_ENABLE = no # Commands for debug and configuration -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow -UNICODEMAP_ENABLE = yes # Unicode -TAP_DANCE_ENABLE = yes diff --git a/keyboards/rgbkb/mun/keymaps/xulkal2/config.h b/keyboards/rgbkb/mun/keymaps/xulkal2/config.h deleted file mode 100644 index b34b40c7859c..000000000000 --- a/keyboards/rgbkb/mun/keymaps/xulkal2/config.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * ---------------------------------------------------------------------------- - * "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 we meet some day, and - * you think this stuff is worth it, you can buy me a beer in return. David Rauseo - * ---------------------------------------------------------------------------- - */ - -#pragma once - -// Xulkal custom stuff -#undef QUICK_TAP_TERM - -#undef TAPPING_TERM -#define TAPPING_TERM 175 - -#define SPACE_CADET_MODIFIER_CARRYOVER -#define LSPO_KEYS KC_LSFT, KC_TRNS, KC_LBRC -#define RSPC_KEYS KC_RSFT, KC_TRNS, KC_RBRC -#define LCPO_KEYS KC_LCTL, KC_TRNS, KC_MINS -#define RCPC_KEYS KC_RCTL, KC_TRNS, KC_EQL - -// No need for the single versions when multi performance isn't a problem =D -#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE -#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS -#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS -#undef ENABLE_RGB_MATRIX_SPLASH -#undef ENABLE_RGB_MATRIX_SOLID_SPLASH - -// 20m timeout (20m * 60s * 1000mil) -// #define RGB_MATRIX_TIMEOUT 1200000 -#define RGB_MATRIX_SLEEP -#define OLED_SCROLL_TIMEOUT 20000 -#define ONESHOT_TAP_TOGGLE 2 - -#define RGB_MATRIX_HUE_STEP 8 -#define RGB_MATRIX_SAT_STEP 8 -#define RGB_MATRIX_VAL_STEP 8 -#define RGB_MATRIX_SPD_STEP 8 - -#define ENCODER_RESOLUTION 2 diff --git a/keyboards/rgbkb/mun/keymaps/xulkal2/keymap.c b/keyboards/rgbkb/mun/keymaps/xulkal2/keymap.c deleted file mode 100644 index eefb59e676aa..000000000000 --- a/keyboards/rgbkb/mun/keymaps/xulkal2/keymap.c +++ /dev/null @@ -1,248 +0,0 @@ -/* - * ---------------------------------------------------------------------------- - * "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 we meet some day, and - * you think this stuff is worth it, you can buy me a beer in return. David Rauseo - * ---------------------------------------------------------------------------- - */ - -#include QMK_KEYBOARD_H -#include "common_oled.h" - -enum keymap_layers { - _QWERTY, - _FUNCTION, - _ADJUST -}; - -enum keymap_keycodes { - // Disables touch processing - TCH_TOG = SAFE_RANGE, - MENU_BTN, - MENU_UP, - MENU_DN, - RGB_RST -}; - -// Default Layers -#define QWERTY DF(_QWERTY) - -// Momentary Layers -#define FN OSL(_FUNCTION) -#define ADJ OSL(_ADJUST) - -// clang-format off -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* QWERTY - * .--------------------------------------------------------------. .--------------------------------------------------------------. - * | `~/ESC | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | Bckspc | - * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| - * | Tab | Q | W | E | R | T | | | | Y | U | I | O | P | \ | - * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| - * | Caps | A | S | D | F | G | Play | | MN BTN | H | J | K | L | : | Enter | - * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| - * | Shft[ | Z | X | C | V | B | { | | } | N | M | , | . | / | Shft] | - * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| - * | Ctrl- | Win | Alt | Del | Space | | ADJ | | FN | | Space | '" | Alt | App | Ctrl= | - * '--------+--------+--------+--------|--------+--------+--------' '--------+--------+--------+--------+--------+--------+--------' - * |--------+--------+--------+--------+--------. .--------+--------+--------+--------+--------| - * | VolDn | VolUp | Next | Play | Prev | Touch Encoder Touch Encoder | RgbHuI | RgbHuD | RgbMdD | RgbTog | RgbMdI | - * '--------+--------+--------+--------+--------' '--------+--------+--------+--------+--------' - */ - [_QWERTY] = LAYOUT( - QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_NO, KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_MPLY, MENU_BTN,KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, - SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LCBR, KC_RCBR, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC, - SC_LCPO, KC_LGUI, KC_LALT, KC_DEL, KC_SPC, KC_NO, ADJ, FN, KC_NO, KC_SPC, KC_QUOTE,KC_RALT, KC_APP, SC_RCPC, - - KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY, KC_MPRV, RGB_HUI, RGB_HUD, RGB_RMOD,RGB_TOG, RGB_MOD - ), - - /* Function - * .--------------------------------------------------------------. .--------------------------------------------------------------. - * | F12 | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | - * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| - * | | SPDI | SAI | VAI | HUI | RGBMD | | | | | | PrtScr | ScrLck | PseBrk | | - * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| - * | | SPDD | SAD | VAD | HUD | RGBRMD | | | | | | Ins | Home | PgUp | | - * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| - * | | RGBRST | | | | RGBTOG | | | | | | Del | End | PgDn | | - * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| - * | | | | | | | | | | | Play | Prev | Next | VolUp | VolDn | - * '--------+--------+--------+--------+--------+--------+--------' '--------+--------+--------+--------+--------+--------+--------' - * |--------+--------+--------+--------+--------. .--------+--------+--------+--------+--------| - * | | | | | | Touch Encoder Touch Encoder | | | | | | - * '--------+--------+--------+--------+--------' '--------+--------+--------+--------+--------' - */ - [_FUNCTION] = LAYOUT( - KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, - _______, RGB_SPI, RGB_SAI, RGB_VAI, RGB_HUI, RGB_MOD, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, - _______, RGB_SPD, RGB_SAD, RGB_VAD, RGB_HUD, RGB_RMOD,_______, _______, _______, _______, KC_INS, KC_HOME, KC_PGUP, _______, - _______, RGB_RST, _______, _______, _______, RGB_TOG, _______, _______, _______, _______, KC_DEL, KC_END, KC_PGDN, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MPRV, KC_MNXT, KC_VOLU, KC_VOLD, - - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ - ), - - /* Adjust - * .--------------------------------------------------------------. .--------------------------------------------------------------. - * | | | | | | | | | | | NumLck | / | * | - | Del | - * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| - * | | Home | Up | End | Reset | T_TOG | | | | | 7 | 8 | 9 | + | | - * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| - * | | Left | Down | Right | | | | | | | 4 | 5 | 6 | + | | - * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| - * | | | | | | EepRst | | | | | 1 | 2 | 3 | Enter | | - * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| - * | | | | | | | | | | | | 0 | . | Enter | | - * '--------+--------+--------+--------+--------+--------+--------' '--------+--------+--------+--------+--------+--------+--------' - * Encoder 1 Encoder 2 Encoder 3 Encoder 4 - * .-----------------------------------. .-----------------------------------. - * | | | | | | | | | | - * |--------+--------+--------+--------+--------. .--------+--------+--------+--------+--------| - * | | | | | | Touch Encoder Touch Encoder | | | | | | - * '--------+--------+--------+--------+--------' '--------+--------+--------+--------+--------' - */ - [_ADJUST] = LAYOUT( - KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, KC_DEL, - _______, KC_HOME, KC_UP, KC_END, QK_BOOT, TCH_TOG, _______, _______, _______, KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, _______, - _______, KC_LEFT, KC_DOWN, KC_RIGHT,_______, _______, _______, _______, _______, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, - _______, _______, _______, _______, _______, EE_CLR, _______, _______, _______, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_KP_0, KC_PDOT, KC_PENT, _______, - - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ - ) -}; -// clang-format on - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) - { - case MENU_BTN: - if (record->event.pressed) { - rgb_menu_selection(); - } - return false; - case MENU_UP: - if (record->event.pressed) { - rgb_menu_action(true); - } - return false; - case MENU_DN: - if (record->event.pressed) { - rgb_menu_action(false); - } - return false; - case RGB_RST: - if (record->event.pressed) { - eeconfig_update_rgb_matrix_default(); - } - return false; - case TCH_TOG: - if (record->event.pressed) { - touch_encoder_toggle(); - } - return false; // Skip all further processing of this key - default: - return true; - } -} - -//#define MATRIX_SCAN_DEBUG -#if !defined(MATRIX_SCAN_DEBUG) -static void render_layer(void) { - // Host Keyboard Layer Status - oled_write_P(PSTR("Layer"), false); - switch (get_highest_layer(layer_state)) { - case _QWERTY: - oled_write_ln_P(PSTR("BASE "), false); - break; - case _FUNCTION: - oled_write_ln_P(PSTR("FUNC "), false); - break; - case _ADJUST: - oled_write_ln_P(PSTR("ADJS "), false); - break; - } -} - -static void render_leds(void) -{ - // Host Keyboard LED Status - led_t led_state = host_keyboard_led_state(); - oled_write_P(led_state.num_lock ? PSTR("NUMLK") : PSTR(" "), false); - oled_write_P(led_state.caps_lock ? PSTR("CAPLK") : PSTR(" "), false); - oled_write_P(led_state.scroll_lock ? PSTR("SCRLK") : PSTR(" "), false); -} - -static void render_touch(void) -{ - // Host Touch LED Status - oled_write_P(touch_encoder_is_on() ? PSTR("TOUCH") : PSTR(" "), false); - oled_write_P(touch_encoder_is_calibrating() ? PSTR("CLBRT") : PSTR(" "), false); -} -#else -static uint32_t scan_counter = 0; -static uint32_t scan_value = 0; -static uint16_t scan_timer = 1000; - -void do_counters(void) { - scan_counter++; - uint16_t now = sync_timer_read(); - if (timer_expired(now, scan_timer)) - { - scan_timer += 1000; - scan_value = (scan_value + scan_counter) / 2; - scan_counter = 0; - } -} - -void matrix_scan_user(void) { - do_counters(); -} - -void matrix_slave_scan_user(void) { - do_counters(); -} - -void render_debug_scan(void) { - static char buffer[6] = {0}; - snprintf(buffer, sizeof(buffer), "%5d", scan_value); - oled_write_ln_P(buffer, false); -} -#endif - -bool oled_task_user(void) { -#if !defined(MATRIX_SCAN_DEBUG) - if (is_keyboard_left()) { - render_layer(); - oled_write_P(PSTR(" "), false); - render_leds(); - oled_write_P(PSTR(" "), false); - render_touch(); - } - else { - render_rgb_menu(); - } -#else - oled_write_P(PSTR(" "), false); - render_debug_scan(); -#endif - oled_set_cursor(0, 12); - render_icon(); - return false; -} - -oled_rotation_t oled_init_user(oled_rotation_t rotation) { - return OLED_ROTATION_270; -} - -#ifdef ENCODER_MAP_ENABLE -const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { - [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(MENU_DN, MENU_UP), ENCODER_CCW_CW(MENU_DN, MENU_UP) }, - [1] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) }, - [2] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) } -}; -#endif diff --git a/keyboards/rgbkb/mun/keymaps/xulkal2/rules.mk b/keyboards/rgbkb/mun/keymaps/xulkal2/rules.mk deleted file mode 100644 index e6b71e56d178..000000000000 --- a/keyboards/rgbkb/mun/keymaps/xulkal2/rules.mk +++ /dev/null @@ -1,5 +0,0 @@ -MOUSEKEY_ENABLE = yes # using for mouse wheel up and down, more granular than page up/down - -OPT_DEFS += -DRGB_UNLIMITED_POWER - -ENCODER_MAP_ENABLE = yes diff --git a/keyboards/rgbkb/sol/keymaps/brianweyer/keymap.c b/keyboards/rgbkb/sol/keymaps/brianweyer/keymap.c deleted file mode 100644 index 194ec4de2f0f..000000000000 --- a/keyboards/rgbkb/sol/keymaps/brianweyer/keymap.c +++ /dev/null @@ -1,272 +0,0 @@ -#include QMK_KEYBOARD_H -#ifdef PROTOCOL_LUFA -#include "lufa.h" -#include "split_util.h" -#endif - -extern keymap_config_t keymap_config; - -#ifdef RGBLIGHT_ENABLE -//Following line allows macro to read current RGB settings -extern rgblight_config_t rgblight_config; -#endif - -// Each layer gets a name for readability, which is then used in the keymap matrix below. -// The underscores don't mean anything - you can have a layer called STUFF or any other name. -// Layer names don't all need to be of the same length, obviously, and you can also skip them -// entirely and just use numbers. -enum layer_number { - _QWERTY = 0, - _FN, - _ADJ -}; - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - FN, - ADJ, - RGBRST -}; - - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* QWERTY - * ,------------------------------------------------. ,------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | - | | = | 6 | 7 | 8 | 9 | 0 | Bspc | - * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------| - * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ | - * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------| - * | Esc | A | S | D | F | G | | | | H | J | K | L | ; | ' | - * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | | | | N | M | , | . | / | Shift| - * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| - * | Ctrl | Alt | FN | LGui | RGB | Spc | Del | | Bspc | Spc | Adj | LGui | FN | Alt | Ctrl | - * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| - * | Spc | Ent | | Ent | Spc | - * `-------------' `-------------' - */ - [_QWERTY] = LAYOUT( - //,--------+--------+--------+--------+--------+--------+--+--------+. ,--------+--+--------+--------+--------+--------+--------+--------+ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, - //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------| - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------| - KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, _______, _______, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------| - SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, _______, _______, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC, - //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------| - KC_LCTL, KC_LALT, FN, KC_LGUI, RGB_MOD, KC_SPC, KC_DEL, KC_BSPC, KC_SPC, ADJ, KC_LGUI, FN, KC_LALT, KC_LCTL, - //|--------+--------+--------+--------+--------+--+--------+--------| |--------+--+--------+--------+--------+--------+--------+--------| - KC_SPC, KC_ENT, KC_ENT, KC_SPC - // |--------+--------| |--------+-----------+ - ), - - /* FN - * ,------------------------------------------------. ,------------------------------------------------. - * | F1 | F2 | F3 | F4 | F5 | F6 | | | | F7 | F8 | F9 | F10 | F11 | F12 | - * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------| - * | | | | Up | | | | | | | | | | | | - * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------| - * | | | Left | Down | Right| | | | | Play | Next | Mute | V-Up |V-Down| | - * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| - * | | | | | | | | | | | | | | | | - * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| - * | | | | | | | | | | | | | | | | - * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| - * | | | | | | - * `-------------' `-------------' - */ - [_FN] = LAYOUT( - //,--------+--------+--------+--------+--------+--------+--+--------+. ,--------+--+--------+--------+--------+--------+--------+--------+ - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, - //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------| - _______, _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------| - _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, - //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------| - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------| - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - //|--------+--------+--------+--------+--------+--+--------+--------| |--------+--+--------+--------+--------+--------+--------+--------| - _______, _______, _______, _______ - // |--------+--------| |--------+-----------+ - ), - - /* ADJ - * ,------------------------------------------------. ,------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------| - * | | Sat+ | Val+ | Hue+ |Speed+|Toggle| | | | | | | | | | - * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------| - * | | Sat- | Val- | Hue- |Speed-|Reset | | | | |QWERTY| COLE | | | | - * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| - * | | | | | | | | | | | | | | | | - * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| - * | | | | | | | | | | | | | | | | - * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| - * | | | | | | - * `-------------' `-------------' - */ - - [_ADJ] = LAYOUT( - //,--------+--------+--------+--------+--------+--------+--+--------+. ,--------+--+--------+--------+--------+--------+--------+--------+ - QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, - //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------| - _______, RGB_SAI, RGB_VAI, RGB_HUI, RGB_SPI, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, - //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------| - _______, RGB_SAD, RGB_VAD, RGB_HUD, RGB_SPD, RGBRST, _______, _______, _______, _______, _______, _______, _______, _______, - //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------| - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------| - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - //|--------+--------+--------+--------+--------+--+--------+--------| |--------+--------+--+--------+--------+--------+--------+--------| - _______, _______, _______, _______ - // |--------+--------| |--------+--------+ - ) -}; - - -// define variables for reactive RGB -bool TOG_STATUS = false; -int RGB_current_mode; - -#ifdef ENCODER_ENABLE -bool encoder_update_user(uint8_t index, bool clockwise) { - if (index == 0) { /* First encoder */ - if (clockwise) { - tap_code(KC_VOLU); - } else { - tap_code(KC_VOLD); - } - } else if (index == 1) { /* Second encoder*/ - if (clockwise) { - tap_code(KC_UP); - } else { - tap_code(KC_DOWN); - } - } - return true; -} -#endif - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - - switch (keycode) { - case QWERTY: - if (record->event.pressed) { - set_single_persistent_default_layer(_QWERTY); - } - return false; - break; - case FN: - if (record->event.pressed) { - layer_on(_FN); - } else { - layer_off(_FN); - } - return false; - break; - case ADJ: - if (record->event.pressed) { - layer_on(_ADJ); - } else { - layer_off(_ADJ); - } - return false; - break; - //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released - case RGBRST: - #ifdef RGBLIGHT_ENABLE - if (record->event.pressed) { - eeconfig_update_rgblight_default(); - rgblight_enable(); - RGB_current_mode = rgblight_config.mode; - } - #endif - break; - } - return true; -} - -void matrix_init_user(void) { -#ifdef RGBLIGHT_ENABLE - RGB_current_mode = rgblight_config.mode; -#endif -} - - -// OLED Driver Logic -#ifdef OLED_ENABLE - -oled_rotation_t oled_init_user(oled_rotation_t rotation) { - if (!is_keyboard_master()) - return OLED_ROTATION_180; // flip 180 for offhand - return rotation; -} - -static void render_logo(void) { - static const char PROGMEM sol_logo[] = { - 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94, - 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4, - 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0}; - - oled_write_P(sol_logo, false); -} - -//assign the right code to your layers for OLED display -#define L_BASE 0 -#define L_FN (1<<_FN) -#define L_ADJ (1<<_ADJ) -#define L_ADJ_TRI (L_ADJ|L_FN) - -static void render_status(void) { - // Render to mode icon - static const char PROGMEM mode_logo[4][4] = { - {0x95,0x96,0x0a,0}, - {0xb5,0xb6,0x0a,0}, - {0x97,0x98,0x0a,0}, - {0xb7,0xb8,0x0a,0} }; - - if (keymap_config.swap_lalt_lgui != false) { - oled_write_P(mode_logo[0], false); - oled_write_P(mode_logo[1], false); - } else { - oled_write_P(mode_logo[2], false); - oled_write_P(mode_logo[3], false); - } - - // Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below - - oled_write_P(PSTR("Layer: "), false); - switch (layer_state) { - case L_BASE: - oled_write_P(PSTR("Laser \n"), false); - break; - case L_FN: - oled_write_P(PSTR("Function \n"), false); - break; - case L_ADJ: - case L_ADJ_TRI: - oled_write_P(PSTR("Adjustment\n"), false); - break; - default: - oled_write_P(PSTR("Undefined \n"), false); - } - - // Host Keyboard LED Status - led_t led_state = host_keyboard_led_state(); - oled_write_P(led_state.num_lock ? PSTR("NUMLOCK ") : PSTR(" "), false); - oled_write_P(led_state.caps_lock ? PSTR("CAPS ") : PSTR(" "), false); - oled_write_P(led_state.scroll_lock ? PSTR("SCLK ") : PSTR(" "), false); -} - -bool oled_task_user(void) { - if (is_keyboard_master()) - render_status(); - else - render_logo(); - - return false; -} - -#endif diff --git a/keyboards/rgbkb/sol/keymaps/brianweyer/rules.mk b/keyboards/rgbkb/sol/keymaps/brianweyer/rules.mk deleted file mode 100644 index f9832323b439..000000000000 --- a/keyboards/rgbkb/sol/keymaps/brianweyer/rules.mk +++ /dev/null @@ -1,15 +0,0 @@ -# Overridden build options from rev1 - -# RGB Options -LED_MIRRORED = no # Mirror LEDs across halves (enable DIP 1 on slave, and DIP 2 and 3 on master) - -# Misc -OLED_ENABLE = yes # Enable the OLED Driver - - - - - -# Do not edit past here - -include keyboards/$(KEYBOARD)/post_rules.mk diff --git a/keyboards/rgbkb/zen/rev1/keymaps/jwlawrence/config.h b/keyboards/rgbkb/zen/rev1/keymaps/jwlawrence/config.h deleted file mode 100644 index ca7d19afabb6..000000000000 --- a/keyboards/rgbkb/zen/rev1/keymaps/jwlawrence/config.h +++ /dev/null @@ -1,42 +0,0 @@ -/* -Copyright 2017 Danny Nguyen - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#pragma once - -// place overrides here - -/* Select hand configuration */ - -#define MASTER_LEFT -// #define MASTER_RIGHT -// #define EE_HANDS - -#undef RGBLED_NUM -#define RGBLIGHT_EFFECT_BREATHING -#define RGBLIGHT_EFFECT_RAINBOW_MOOD -#define RGBLIGHT_EFFECT_RAINBOW_SWIRL -#define RGBLIGHT_EFFECT_SNAKE -#define RGBLIGHT_EFFECT_KNIGHT -#define RGBLIGHT_EFFECT_CHRISTMAS -#define RGBLIGHT_EFFECT_STATIC_GRADIENT -#define RGBLIGHT_EFFECT_RGB_TEST -#define RGBLIGHT_EFFECT_ALTERNATING -#define RGBLIGHT_EFFECT_TWINKLE -#define RGBLED_NUM 16 -#define RGBLIGHT_HUE_STEP 8 -#define RGBLIGHT_SAT_STEP 8 -#define RGBLIGHT_VAL_STEP 8 diff --git a/keyboards/rgbkb/zen/rev1/keymaps/jwlawrence/keymap.c b/keyboards/rgbkb/zen/rev1/keymaps/jwlawrence/keymap.c deleted file mode 100644 index ece995075bc5..000000000000 --- a/keyboards/rgbkb/zen/rev1/keymaps/jwlawrence/keymap.c +++ /dev/null @@ -1,97 +0,0 @@ -#include QMK_KEYBOARD_H - -extern keymap_config_t keymap_config; - -// Each layer gets a name for readability, which is then used in the keymap matrix below. -// The underscores don't mean anything - you can have a layer called STUFF or any other name. -// Layer names don't all need to be of the same length, obviously, and you can also skip them -// entirely and just use numbers. -#define _QWERTY 0 -#define _NAV 2 - - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - NAV, - -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - /* Qwerty - * ,-----------------------------------------. .-----------------------------------------. - * | GESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * |CAPS(NAV)|A | S | D | F | G | | H | J | K | L | ; | " | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | | N | M | , | . | / |Shift | - * |------+------+------+------+------+------+------..-----+------+------+------+------+------+------| - * | Ctrl | Alt | GUI | GUI | NAV |Space |Delete||Enter|Space | NAV | - | = |RGBTOG|Enter | - * `------------------------------------------------''-----------------------------------------------' - */ - [_QWERTY] = LAYOUT( - QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - LT(_NAV, KC_CAPS),KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - KC_LCTL, KC_LALT, KC_LGUI, KC_LGUI, MO(_NAV), KC_SPC, KC_DEL, KC_ENT, KC_SPACE, MO(_NAV), KC_MINS, KC_EQL, RGB_TOG, KC_ENT - ), - - /* NAV - * ,-----------------------------------------. .-----------------------------------------. - * | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | |RGBSAI|RGBVAI|RGBSAD| QK_BOOT| [ | | ] | Pgup | Up | Pgdn |Insert| Home | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | |RGBHUD|RGBVAD|RGBHUI|RGBMOD| | | | Left | Down | Right|Delete| End | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * |Shift | | | | | | | NKRO | | | Pause| Back | Next | - * |------+------+------+------+------+------+------..-----+------+------+------+------+------+------| - * | Ctrl | Alt | GUI | | | | || | | | | Mute | VOLUP| VOLDN| - * `------------------------------------------------''-----------------------------------------------' - */ - [_NAV] = LAYOUT( - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, - _______, RGB_SAI, RGB_VAI, RGB_SAD, QK_BOOT, KC_LBRC, KC_RBRC, KC_PGUP, KC_UP, KC_PGDN, KC_INS, KC_HOME, - _______, RGB_HUD, RGB_VAD, RGB_HUI, RGB_MOD, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_END, - KC_LSFT, _______, _______, _______, _______, _______, MAGIC_TOGGLE_NKRO, _______, _______, KC_MPLY, KC_MPRV, KC_MNXT, - KC_LCTL, KC_LALT, KC_LGUI, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLU, KC_VOLD - ), - -}; - -#ifdef AUDIO_ENABLE -float tone_qwerty[][2] = SONG(QWERTY_SOUND); -float tone_colemak[][2] = SONG(COLEMAK_SOUND); -#endif - -void persistant_default_layer_set(uint16_t default_layer) { - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case QWERTY: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_qwerty); - #endif - persistant_default_layer_set(1UL<<_QWERTY); - } - return false; - break; - //case COLEMAK: - //if (record->event.pressed) { - //#ifdef AUDIO_ENABLE - //PLAY_SONG(tone_colemak); - //#endif - //persistant_default_layer_set(1UL<<_COLEMAK); - //} - //return false; - //break; - } - return true; -} diff --git a/keyboards/rgbkb/zen/rev1/keymaps/jwlawrence/rules.mk b/keyboards/rgbkb/zen/rev1/keymaps/jwlawrence/rules.mk deleted file mode 100644 index 1e3cebb14515..000000000000 --- a/keyboards/rgbkb/zen/rev1/keymaps/jwlawrence/rules.mk +++ /dev/null @@ -1 +0,0 @@ -RGBLIGHT_ENABLE = yes diff --git a/keyboards/rgbkb/zen/rev1/keymaps/samae/config.h b/keyboards/rgbkb/zen/rev1/keymaps/samae/config.h deleted file mode 100644 index b3521279cf0c..000000000000 --- a/keyboards/rgbkb/zen/rev1/keymaps/samae/config.h +++ /dev/null @@ -1,35 +0,0 @@ -/* -Copyright 2017 Danny Nguyen - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#pragma once - - -/* Select hand configuration */ - -// #define MASTER_LEFT -// #define MASTER_RIGHT -#define EE_HANDS - -#undef RGBLED_NUM -#define RGBLIGHT_EFFECT_BREATHING -#define RGBLIGHT_EFFECT_RAINBOW_MOOD -#define RGBLIGHT_EFFECT_RGB_TEST -#define RGBLIGHT_EFFECT_STATIC_GRADIENT -#define RGBLED_NUM 16 -#define RGBLIGHT_HUE_STEP 4 -#define RGBLIGHT_SAT_STEP 4 -#define RGBLIGHT_VAL_STEP 8 diff --git a/keyboards/rgbkb/zen/rev1/keymaps/samae/keymap.c b/keyboards/rgbkb/zen/rev1/keymaps/samae/keymap.c deleted file mode 100644 index 19289846b65d..000000000000 --- a/keyboards/rgbkb/zen/rev1/keymaps/samae/keymap.c +++ /dev/null @@ -1,79 +0,0 @@ - /* Copyright 2020 Martin J. Potier - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General 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 QMK_KEYBOARD_H - -// Each layer gets a name for readability, which is then used in the keymap matrix below. -// The underscores don't mean anything - you can have a layer called STUFF or any other name. -// Layer names don't all need to be of the same length, obviously, and you can also skip them -// entirely and just use numbers. -enum layer_number { - _QWERTY = 0, - _NAV -}; - - -enum custom_keycodes { - QWERTY = SAFE_RANGE, - NAV, - -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - /* Qwerty - * ,-----------------------------------------. .-----------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * |DELETE| A | S | D | F | G | | H | J | K | L | ; | " | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | | N | M | , | . | / |RGBMOD| - * |------+------+------+------+------+------+------. .--------+------+------+------+------+------+------| - * | Ctrl | GUI | Alt |RGBTOG| NAV |Space | ESC | |Enter|Space/NAV| AltGr| NAV | | - | = | - * `------------------------------------------------' '--------------------------------------------------' - */ - [_QWERTY] = LAYOUT( - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_DEL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RGB_MOD, - KC_LCTL, KC_LGUI, KC_LALT, RGB_TOG, MO(_NAV), KC_SPC, QK_GESC, KC_ENT, LT(_NAV, KC_SPACE), KC_RALT, MO(_NAV), _______, KC_MINS, KC_EQL - ), - - /* NAV - * ,-----------------------------------------. .-----------------------------------------. - * | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | |RGBSAI|RGBVAI|RGBSAD| | [ | | ] | Pgup | Up | Pgdn |Insert| Home | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | |RGBHUD|RGBVAD|RGBHUI| | | | | Left | Down | Right|Delete| End | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * |Shift | | | | | | | | | | Pause| Back | Next | - * |------+------+------+------+------+------+------. .------+------+------+------+------+------+------| - * | Ctrl | GUI | Alt |RGBMOD| | | | | QK_BOOT| | | | Mute | VOLUP| VOLDN| - * `------------------------------------------------' '------------------------------------------------' - */ - [_NAV] = LAYOUT( - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, - _______, RGB_SAI, RGB_VAI, RGB_SAD, _______, KC_LBRC, KC_RBRC, KC_PGUP, KC_UP, KC_PGDN, KC_INS, KC_HOME, - _______, RGB_HUD, RGB_VAD, RGB_HUI, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_END, - KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MPRV, KC_MNXT, - KC_LCTL, KC_LGUI, KC_LALT, RGB_MOD, _______, _______, _______, QK_BOOT, _______, _______, _______, KC_MUTE, KC_VOLU, KC_VOLD - ), - -}; diff --git a/keyboards/rgbkb/zen/rev1/keymaps/samae/rules.mk b/keyboards/rgbkb/zen/rev1/keymaps/samae/rules.mk deleted file mode 100644 index 1e3cebb14515..000000000000 --- a/keyboards/rgbkb/zen/rev1/keymaps/samae/rules.mk +++ /dev/null @@ -1 +0,0 @@ -RGBLIGHT_ENABLE = yes diff --git a/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/config.h b/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/config.h deleted file mode 100644 index d1fbe29c539c..000000000000 --- a/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/config.h +++ /dev/null @@ -1,41 +0,0 @@ -/* -Copyright 2019 starcalleramethyst - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#pragma once - -/* Select hand configuration */ - -#define MASTER_LEFT -// #define MASTER_RIGHT -// #define EE_HANDS - -#undef RGBLED_NUM -#define RGBLIGHT_EFFECT_BREATHING -#define RGBLIGHT_EFFECT_RAINBOW_MOOD -#define RGBLIGHT_EFFECT_RAINBOW_SWIRL -#define RGBLIGHT_EFFECT_SNAKE -#define RGBLIGHT_EFFECT_KNIGHT -#define RGBLIGHT_EFFECT_CHRISTMAS -#define RGBLIGHT_EFFECT_STATIC_GRADIENT -#define RGBLIGHT_EFFECT_RGB_TEST -#define RGBLIGHT_EFFECT_ALTERNATING -#define RGBLIGHT_EFFECT_TWINKLE -#define RGBLED_NUM 16 -#define RGBLIGHT_HUE_STEP 8 -#define RGBLIGHT_SAT_STEP 8 -#define RGBLIGHT_VAL_STEP 8 -#define TAPPING_TERM 200 diff --git a/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/keymap.c b/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/keymap.c deleted file mode 100644 index 47e8e3fa2446..000000000000 --- a/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/keymap.c +++ /dev/null @@ -1,148 +0,0 @@ -#include QMK_KEYBOARD_H - -uint16_t copy_paste_timer; - -enum custom_keycodes { - S_H = SAFE_RANGE, // slack here - S_H_P, // slack here + paste - T_H_B, // ticket header bike - T_H_T, // ticket header tread - E_OP, // email open - E_CL, // email close - E_FU, // email follow up - E_SS, // email service schedule - SCRN_C, // screen clip - DC_C, // double click + copy - KC_CCCV, // one key copy/paste - -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - - case S_H: - if (record->event.pressed) { - SEND_STRING("@HERE"); - } - break; - - case S_H_P: - if (record->event.pressed) { - SEND_STRING("@HERE" SS_TAP(X_SPC) SS_LCTL("v")); - } - break; - - case T_H_B: - if (record->event.pressed) { - SEND_STRING("Your Peloton Bike - "); - } - break; - - case T_H_T: - if (record->event.pressed) { - SEND_STRING("Your Peloton Tread - "); - } - break; - - case E_OP: - if (record->event.pressed) { - // when keycode E_OP is pressed - SEND_STRING("Hi , "SS_TAP(X_ENTER)SS_TAP(X_ENTER)"Thank you for contacting Peloton."SS_TAP(X_ENTER)SS_TAP(X_ENTER)); - } -break; - - case E_CL: - if (record->event.pressed) { - SEND_STRING("Please let me know if you have any other questions."SS_TAP(X_ENTER)SS_TAP(X_ENTER)"Thank you for being the best part of Peloton."); - } -break; - - case E_FU: - if (record->event.pressed) { - SEND_STRING("I will be personally watching this issue and will reach out to you after this is complete to make sure everything went smoothly."SS_TAP(X_ENTER)SS_TAP(X_ENTER)); - } -break; - - case E_SS: - if (record->event.pressed) { - SEND_STRING("Please click here to schedule your service."SS_TAP(X_ENTER)SS_TAP(X_ENTER)); - } -break; - - case SCRN_C: - if (record->event.pressed) { - tap_code16(C(S(KC_F5))); - } -break; - - case DC_C: - if (record->event.pressed) { - tap_code(KC_BTN1); - tap_code(KC_BTN1); - tap_code16(C(KC_C)); - } -break; - - case KC_CCCV: // One key copy/paste - if (record->event.pressed) { - copy_paste_timer = timer_read(); - } else { - if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy - tap_code16(C(KC_C)); - } else { // Tap, paste - tap_code16(C(KC_V)); - } - } -break; - - } - return true; -}; - -//Tap Dance Declarations -enum { - TD_SPC_DOT = 0 -}; - -//Tap Dance Definitions -tap_dance_action_t tap_dance_actions[] = { - //Tap once for Esc, twice for Caps Lock - [TD_SPC_DOT] = ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_PDOT) -// Other declarations would go here, separated by commas, if you have them -}; - - - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - [0] = LAYOUT( -QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, -KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, -KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, -KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_SENT, -KC_CCCV, KC_LGUI, KC_LALT, RGB_TOG, MO(1), TD(TD_SPC_DOT), KC_BSPC, KC_ENT, TD(TD_SPC_DOT), MO(2), KC_MINS, KC_EQL, KC_PGUP, KC_PGDN), - - [1] = LAYOUT( -KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, -KC_TRNS, RGB_SAI, RGB_VAI, RGB_SAD, QK_BOOT, KC_LBRC, KC_RBRC, KC_PGUP, KC_UP, KC_PGDN, KC_INS, KC_HOME, -KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_END, -KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MAGIC_TOGGLE_NKRO, KC_TRNS, KC_TRNS, KC_MPLY, KC_MPRV, KC_MNXT, -KC_NO, KC_LGUI, KC_LALT, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLU, KC_VOLD), - -/* [2] = LAYOUT( -QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,KC_7, KC_8, KC_9, KC_0, KC_BSLS, -KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, -KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, -KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, -KC_LCTL, KC_LGUI, KC_LALT, KC_NO, TO(0), KC_SPC, KC_BSPC, KC_ENT, KC_SPC, TO(0), KC_MINS, KC_EQL, KC_PGUP, KC_PGDN), -*/ - [2] = LAYOUT( -KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, -KC_NO, KC_NO, KC_NO, KC_NO, S_H_P, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, -KC_NO, E_CL, E_FU, E_OP, S_H, SCRN_C, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, -KC_NO, DC_C, E_SS, T_H_T, T_H_B, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, -KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO) - -}; - - diff --git a/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/rules.mk b/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/rules.mk deleted file mode 100644 index 8e3e21514283..000000000000 --- a/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/rules.mk +++ /dev/null @@ -1,3 +0,0 @@ -RGBLIGHT_ENABLE = yes -TAP_DANCE_ENABLE = yes -MOUSEKEY_ENABLE = yes \ No newline at end of file diff --git a/keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/keymap.c b/keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/keymap.c deleted file mode 100644 index ca2be62a1948..000000000000 --- a/keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/keymap.c +++ /dev/null @@ -1,151 +0,0 @@ -/* Copyright 2019 Josef Adamcik - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include QMK_KEYBOARD_H - -enum katana_layers { - /* _M_XYZ = Mac Os, _W_XYZ = Win/Linux */ - _M_COLEMAK, - _M_QWERTY, - _W_COLEMAK, - _W_QWERTY, - _NUMB, - _SYMB, - _M_EXT, - _W_EXT -}; - -enum katana_keycodes { - M_COLEMAK = SAFE_RANGE, - M_QWERTY, - W_COLEMAK, - W_QWERTY -}; - -#define K_SPCFN LT(_SYMB, KC_SPACE) /* Tap for space, hold for symbols layer */ -#define K_BSPFN LT(_SYMB, KC_BSPC) /* Tap for backspace, hold for symbols layer */ -/* Linux/win variants */ -#define W_LEFT_MOD MT(MOD_RCTL, KC_LEFT) -#define W_DOWN_MOD MT(MOD_RALT, KC_DOWN) -#define W_UP_MOD MT(MOD_RGUI, KC_UP) -#define W_UNDO LCTL(KC_Z) -#define W_CUT LCTL(KC_X) -#define W_COPY LCTL(KC_C) -#define W_PASTE LCTL(KC_V) -#define W_PRVWD LCTL(KC_LEFT) -#define W_NXTWD LCTL(KC_RIGHT) -#define W_LSTRT KC_HOME -#define W_LEND KC_END -/* Mac variants */ -#define M_LEFT_MOD MT(MOD_RGUI, KC_LEFT) -#define M_DOWN_MOD MT(MOD_RALT, KC_DOWN) -#define M_UP_MOD MT(MOD_RCTL, KC_UP) -#define M_UNDO LGUI(KC_Z) -#define M_CUT LGUI(KC_X) -#define M_COPY LGUI(KC_C) -#define M_PASTE LGUI(KC_V) -#define M_PRVWD LALT(KC_LEFT) -#define M_NXTWD LALT(KC_RIGHT) -#define M_LSTRT LGUI(KC_LEFT) -#define M_LEND LGUI(KC_RIGHT) - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[_M_COLEMAK] = LAYOUT( - KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, TG(_NUMB),KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, - KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_LBRC, KC_RBRC, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, - MO(_M_EXT),KC_A, KC_R, KC_S, KC_T, KC_D, KC_MINS, KC_QUOT, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_EQL, KC_DEL, KC_BSLS, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - MO(_SYMB), KC_LCTL, KC_LALT, KC_LGUI, K_BSPFN, KC_ENT, KC_SPACE, M_LEFT_MOD,M_DOWN_MOD,M_UP_MOD, KC_RIGHT,MO(_SYMB) -), -[_M_QWERTY] = LAYOUT( - KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, TG(_NUMB),KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, - MO(_M_EXT),KC_A, KC_S, KC_D, KC_F, KC_G, KC_MINS, KC_QUOT, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_EQL, KC_DEL, KC_BSLS, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - MO(_SYMB), KC_LCTL, KC_LALT, KC_LGUI, K_BSPFN, KC_ENT, KC_SPACE, M_LEFT_MOD,M_DOWN_MOD,M_UP_MOD, KC_RIGHT,MO(_SYMB) -), -[_W_COLEMAK] = LAYOUT( - KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, TG(_NUMB),KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, - KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_LBRC, KC_RBRC, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, - MO(_W_EXT),KC_A, KC_R, KC_S, KC_T, KC_D, KC_MINS, KC_QUOT, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_EQL, KC_DEL, KC_BSLS, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - MO(_SYMB), KC_LGUI, KC_LALT, KC_LCTL, K_BSPFN, KC_ENT, KC_SPACE, W_LEFT_MOD,W_DOWN_MOD,W_UP_MOD, KC_RIGHT,MO(_SYMB) -), -[_W_QWERTY] = LAYOUT( - KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, TG(_NUMB),KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, - MO(_W_EXT),KC_A, KC_S, KC_D, KC_F, KC_G, KC_MINS, KC_QUOT, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_EQL, KC_DEL, KC_BSLS, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - MO(_SYMB), KC_LGUI, KC_LALT, KC_LCTL, K_BSPFN, KC_ENT, KC_SPACE, W_LEFT_MOD,W_DOWN_MOD,W_UP_MOD, KC_RIGHT,MO(_SYMB) -), -[_NUMB] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, _______,_______, KC_PSLS, KC_PAST, KC_PMNS, _______, _______, - _______, _______, _______, KC_MS_U, _______, _______, _______, _______,_______, KC_7, KC_8, KC_9, KC_PPLS, _______, - _______, KC_BTN2, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______,_______, KC_4, KC_5, KC_6, KC_PPLS, _______, - _______, _______, KC_ACL0, KC_ACL1, KC_ACL2, _______, _______, _______, _______,_______, KC_1, KC_2, KC_3, KC_PENT, _______, - _______, _______, _______, _______, KC_BTN1, _______, KC_P0, KC_PDOT, _______, _______, _______, _______ -), -[_SYMB] = LAYOUT( - QK_BOOT, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, - _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_VOLD, KC_VOLU, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, - _______, KC_PLUS, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_MPRV, KC_MPLY, KC_MNXT, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______, - _______, _______, _______, _______, KC_DEL, _______, _______, _______, _______, _______, _______, _______ -), -[_M_EXT] = LAYOUT( - QK_BOOT,M_COLEMAK,M_QWERTY,W_COLEMAK,W_QWERTY,_______,_______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, M_PRVWD, KC_UP, M_NXTWD, _______, _______, - _______, KC_LALT, KC_LCTL, KC_LSFT, _______, KC_CAPS, _______, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL, _______, - _______, M_UNDO, M_CUT, M_COPY, M_PASTE, _______, _______, _______, _______, _______, M_LSTRT, _______, M_LEND, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ -), -[_W_EXT] = LAYOUT( - QK_BOOT,M_COLEMAK,M_QWERTY,W_COLEMAK,W_QWERTY,_______,_______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, W_PRVWD, KC_UP, W_NXTWD, _______, _______, - _______, KC_LALT, KC_LCTL, KC_LSFT, _______, KC_CAPS, _______, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL, _______, - _______, W_UNDO, W_CUT, W_COPY, W_PASTE, _______, _______, _______, _______, _______, W_LSTRT, _______, W_LEND, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ -) -}; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case M_QWERTY: - if (record->event.pressed) { - set_single_persistent_default_layer(_M_QWERTY); - } - return false; - break; - case M_COLEMAK: - if (record->event.pressed) { - set_single_persistent_default_layer(_M_COLEMAK); - } - return false; - break; - case W_QWERTY: - if (record->event.pressed) { - set_single_persistent_default_layer(_W_QWERTY); - } - return false; - break; - case W_COLEMAK: - if (record->event.pressed) { - set_single_persistent_default_layer(_W_COLEMAK); - } - return false; - break; - } - return true; -} diff --git a/keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/readme.md b/keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/readme.md deleted file mode 100644 index 5d72b1defa02..000000000000 --- a/keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/readme.md +++ /dev/null @@ -1,23 +0,0 @@ -![Multi OS Katana60 layout image](https://i.imgur.com/1w2OA1o.png) - -# Multi OS Katana60 layout - -Based on the default Katana60 layout, customized by [Josef Adamcik](https://josef-adamcik.cz) with several basic layers (Colemak vs Qwerty, Mac OS vs Linux/Win) - -- Supports 4 default layers: Colemak Mac, Qwerty Mac, Colemak Win/Linux, Qwerty Win/Linux. Switching between default layers is persisted. For more details about Mac vs Win/Linux see below. -- There are arrows mapped to the right side of the bottom row on Katana6O. I kept this mapping but modified it a bit - when you press and hold any of the first three arrow keys it acts as a modifier (CMD, OPT, CTRL). If you just tap it, it acts as an arrow. - -## Mac versus Win/Linux layers: - -- Modifiers are ordered differently. Mac version has (from the middle to the outside): CMD, ALT, CTRL, Win/Linux version has CTRL, ALT, CMD. It's meant to make switching between platforms easier. -- Extend layer is different, so the keys which represent shortcuts ("previous/next word" and "copy", "paste", "cut", "undo") work properly. - -## More details - reasons for some choices in this layout - -I use Mac for work and Ubuntu at home. So I would like to stay compatible with both systems. The main problem is the modifiers. Firstly, they tend to be ordered differently on Mac keyboards. Secondly, the main modifier on Mac is CMD (equivalent to WIn or SUPER on other keyboards). The same role is played by CTRL on Windows and Linux. Most of IDE’s or editors (Android Studio, VS Code, SublimeText) follow this habit in their OS-specific keymaps. - -I am a user of the Colemak layout. But I would like to have the ability to switch to qwerty. That would allow my other people to use my keyboard occasionally. - -I am a heavy user of keyboard shortcuts. So I need the layout to support my needs. Some keyboard layout has modifiers only on one side of the keyboard or they hide some of them (CMD) under a key combination. I tend to press the modifiers for a key shortcut with the opposite hand to the one which presses the letter. - -Layout in [keyboard-layout-editor.com](http://www.keyboard-layout-editor.com/#/gists/14d62ee67d36621c37888783fa29b107) diff --git a/keyboards/rominronin/katana60/rev1/keymaps/rominronin/config.h b/keyboards/rominronin/katana60/rev1/keymaps/rominronin/config.h deleted file mode 100644 index 08c51f6cb50c..000000000000 --- a/keyboards/rominronin/katana60/rev1/keymaps/rominronin/config.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright 2017 Baris Tosun - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -// place overrides here - -#endif diff --git a/keyboards/rominronin/katana60/rev1/keymaps/rominronin/keymap.c b/keyboards/rominronin/katana60/rev1/keymaps/rominronin/keymap.c deleted file mode 100644 index 615de932f89f..000000000000 --- a/keyboards/rominronin/katana60/rev1/keymaps/rominronin/keymap.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright 2017 Baris Tosun - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include QMK_KEYBOARD_H - -// MacOS based definitions. -#define K_SPCFN LT(SYMB, KC_SPACE) // Tap for space, hold for symbols layer -#define K_PRVWD LALT(KC_LEFT) // Previous word -#define K_NXTWD LALT(KC_RIGHT) // Next word -#define K_LSTRT LGUI(KC_LEFT) // Start of line -#define K_LEND LGUI(KC_RIGHT) // End of line -#define UNDO LGUI(KC_Z) // UNDO -#define CUT LGUI(KC_X) // CUT -#define COPY LGUI(KC_C) // COPY -#define PASTE LGUI(KC_V) // PASTE - - -#define BASE 0 // Default -#define NUMB 1 // Numbers -#define SYMB 2 // Symbols -#define CURS 3 // Text Editing - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[BASE] = LAYOUT( /* Base */ - KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, DF(1), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, - KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_LBRC, KC_RBRC, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, KC_BSPC, - MO(3), KC_A, KC_R, KC_S, KC_T, KC_G, KC_HOME, KC_PGUP, KC_M, KC_N, KC_E, KC_I, KC_O, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_END, KC_DEL, KC_PGDN, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - MO(2), KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, KC_ENT, K_SPCFN, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,MO(2) - ), -[NUMB] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, DF(0), KC_PSLS, KC_PAST, KC_PMNS, _______, _______, _______, _______, - _______, _______, _______, KC_MS_U, _______, _______, _______, KC_7, KC_8, KC_9, KC_PPLS, _______, _______, _______, - _______, KC_BTN2, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_4, KC_5, KC_6, KC_PPLS, _______, _______, _______, - _______, _______, KC_ACL0, KC_ACL1, KC_ACL2, _______, _______, _______, KC_1, KC_2, KC_3, KC_PENT, _______, _______, _______, - _______, _______, _______, _______, KC_BTN1, _______, KC_P0, KC_PDOT, KC_PENT, _______, _______, _______ - ), -[SYMB] = LAYOUT( - QK_BOOT, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, - _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_VOLD, KC_VOLU, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, - _______, KC_PLUS, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_MPRV, KC_MPLY, KC_MNXT, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______, - _______, _______, _______, _______, KC_DEL, _______, _______, _______, _______, _______, _______, _______ - ), -[CURS] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, KC_WH_U, _______, _______, _______, _______, _______, _______, K_PRVWD, KC_UP, K_NXTWD, _______, _______, - _______, KC_LCTL, KC_WH_D, KC_LSFT, _______, _______, _______, _______, KC_BSPC, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL, _______, - _______, UNDO, CUT, COPY, PASTE, _______, _______, _______, _______, _______, K_LSTRT, _______, K_LEND, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ - ) - -}; diff --git a/keyboards/rominronin/katana60/rev1/keymaps/rominronin/readme.md b/keyboards/rominronin/katana60/rev1/keymaps/rominronin/readme.md deleted file mode 100644 index 9647426f7028..000000000000 --- a/keyboards/rominronin/katana60/rev1/keymaps/rominronin/readme.md +++ /dev/null @@ -1,5 +0,0 @@ -# RominRonin's keymap for katana60 - -My own personal daily layout. OS keys are oriented for MacOS and the keys are in COLEMAK Mod-DH layout. - -# TODO: references to extend layer and symbol layers \ No newline at end of file diff --git a/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/keymap.c b/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/keymap.c deleted file mode 100644 index 6919b4699075..000000000000 --- a/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/keymap.c +++ /dev/null @@ -1,79 +0,0 @@ -/* Copyright 2019 rominronin - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include QMK_KEYBOARD_H - -// MacOS based definitions. -#define K_SPCFN LT(SYMB, KC_SPACE) // Tap for space, hold for symbols layer -#define K_PRVWD LALT(KC_LEFT) // Previous word -#define K_NXTWD LALT(KC_RIGHT) // Next word -#define K_LSTRT LGUI(KC_LEFT) // Start of line -#define K_LEND LGUI(KC_RIGHT) // End of line -#define UNDO LGUI(KC_Z) // UNDO -#define CUT LGUI(KC_X) // CUT -#define COPY LGUI(KC_C) // COPY -#define PASTE LGUI(KC_V) // PASTE - -enum layer_names { - BASE, - NUMB, - SYMB, - CURS, - BASE2, -}; - -// Defines the keycodes used by our macros in process_record_user -enum custom_keycodes { - QMKBEST = SAFE_RANGE, - QMKURL -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [BASE] = LAYOUT_7u_a(/* Base */ - KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, DF(4), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, - KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_LBRC, KC_RBRC, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, KC_BSPC, - MO(3), KC_A, KC_R, KC_S, KC_T, KC_G, KC_HOME, KC_PGUP, KC_M, KC_N, KC_E, KC_I, KC_O, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_END, KC_DEL, KC_PGDN, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - KC_LCTL, KC_LALT, KC_LGUI, K_SPCFN, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT - ), - [NUMB] = LAYOUT_7u_a( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PEQL, KC_PSLS, KC_PAST, _______, _______, - _______, _______, _______, KC_MS_U, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, _______, - DF(0), KC_BTN2, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_PPLS, _______, - _______, _______, KC_ACL0, KC_ACL1, KC_ACL2, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______, - _______, _______, _______, KC_P0, KC_PDOT, KC_PENT, _______, _______ - ), - [SYMB] = LAYOUT_7u_a( - QK_BOOT, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, - _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_VOLD, KC_VOLU, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, - _______, KC_PLUS, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_MPRV, KC_MPLY, KC_MNXT, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______, - _______, _______, _______, KC_DEL, _______, _______, _______, _______ - ), - [CURS] = LAYOUT_7u_a( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, K_PRVWD, KC_UP, K_NXTWD, _______, _______, - _______, _______, KC_LCTL, KC_LALT, KC_LSFT, _______, _______, _______, KC_BSPC, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL, _______, - _______, UNDO, CUT, COPY, PASTE, _______, _______, _______, _______, _______, K_LSTRT, _______, K_LEND, _______, _______, - _______, _______, _______, DF(1), _______, _______, _______, _______ - ), - [BASE2] = LAYOUT_7u_a(/* Base */ - KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, DF(0), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, - KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_LBRC, KC_RBRC, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, KC_BSPC, - KC_CAPS, KC_A, KC_R, KC_S, KC_T, KC_G, KC_HOME, KC_PGUP, KC_M, KC_N, KC_E, KC_I, KC_O, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_END, KC_DEL, KC_PGDN, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - KC_LCTL, KC_LALT, KC_LGUI, KC_SPACE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT - ) -}; diff --git a/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/readme.md b/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/readme.md deleted file mode 100644 index 6d0bbe8b2d15..000000000000 --- a/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/readme.md +++ /dev/null @@ -1 +0,0 @@ -# The default keymap for katana60_rev2 diff --git a/keyboards/ungodly/launch_pad/keymaps/warzone/keymap.c b/keyboards/ungodly/launch_pad/keymaps/warzone/keymap.c deleted file mode 100644 index e3292dd30c89..000000000000 --- a/keyboards/ungodly/launch_pad/keymaps/warzone/keymap.c +++ /dev/null @@ -1,270 +0,0 @@ -/* Copyright 2020 Ungodly Design - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include QMK_KEYBOARD_H -#include "analog.h" -#include "qmk_midi.h" - -/* Force Numlock on */ -void matrix_init_user (void) { - if (!host_keyboard_led_state().num_lock) { - tap_code(KC_NUM_LOCK); - } -} - -// Tap Dance declarations -enum { - TD_ESC_TAB, - TD_NUMLOCK_L1, - TD_3_L0 -}; - -// Tap Dance definitions -tap_dance_action_t tap_dance_actions[] = { - // Tap once for Escape, twice for Number 4 (armor plates in warzone) - [TD_ESC_TAB] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_TAB), - [TD_3_L0] = ACTION_TAP_DANCE_LAYER_TOGGLE(KC_3, 1), - [TD_NUMLOCK_L1] = ACTION_TAP_DANCE_LAYER_TOGGLE(KC_NUM_LOCK, 1), -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Keymap _BL: (Base Layer) Default Numpad Layer - * ,-------------------. - * | NV | / | * |BK/FN| - * |----|----|----|-----| - * | 7 | 8 | 9 | - | - * |----|----|----|-----| - * | 4 | 5 | 6 | + | - * |----|----|----|-----| - * | 1 | 2 | 3 | En | - * |----|----|----|-----| - * | 0 | 0 | . | En | - * `--------------------' - */ - [0] = LAYOUT_ortho_5x4( - TD(TD_NUMLOCK_L1), KC_PSLS, KC_PAST, LT(2, KC_BSPC), - KC_P7, KC_P8, KC_P9, KC_PMNS, - KC_P4, KC_P5, KC_P6, KC_PPLS, - KC_P1, KC_P2, KC_P3, KC_PENT, - KC_P0, KC_P0, KC_PDOT, KC_PENT - ), - /* Keymap _WAR: (Warzone Layer) Default Numpad Layer for COD Warzone N00BS - * ,-------------------. - * | R | F | V | Spc | - * |----|----|----|-----| - * | E | D | C | Alt | - * |----|----|----|-----| - * | W | S | X | 4 | - * |----|----|----|-----| - * | Q | A | Z | 3 | - * |----|----|----|-----| - * | Esc|Ctrl|Shift| M | - * `--------------------' - */ - [1] = LAYOUT_ortho_5x4( - KC_R, KC_F, KC_V, KC_SPACE, - KC_E, KC_D, KC_C, KC_LALT, - KC_W, KC_S, KC_X, KC_4, - KC_Q, KC_A, KC_Z, TD(TD_3_L0), - TD(TD_ESC_TAB), KC_LCTL, KC_LSFT, KC_M - ), - /* Keymap _FN: RGB Function Layer - * ,-------------------. - * |LAYR| | |RTOG| - * |----|----|----|----| - * |HUD |HUI | |RGBP| - * |----|----|----|----| - * |SAD |SAI | |RMOD| - * |----|----|----|----| - * |VAD |VAS | | | - * |----|----|----|----| - * |RST |RST | | | - * `-------------------' - */ - [2] = LAYOUT_ortho_5x4( - KC_LUP, XXXXXXX, XXXXXXX, RGB_TOG, - RGB_HUD, RGB_HUI, XXXXXXX, RGB_M_P, - RGB_SAD, RGB_SAI, XXXXXXX, RGB_MOD, - RGB_VAD, RGB_VAI, XXXXXXX, XXXXXXX, - QK_BOOT, QK_BOOT, XXXXXXX, XXXXXXX - ), -}; - -// (Optional) Rotary Encoder, Volume Control -bool encoder_update_user(uint8_t index, bool clockwise) { - if (clockwise) { - tap_code(KC_VOLU); - } else { - tap_code(KC_VOLD); - } - return true; -} - -// Potentiometer Slider, MIDI Control -uint8_t divisor = 0; -void slider(void){ - if (divisor++) { // only run the slider function 1/256 times it's called - return; - } - midi_send_cc(&midi_device, 2, 0x3E, 0x7F - (analogReadPin(SLIDER_PIN) >> 3)); -} - -void matrix_scan_user(void) { - slider(); -} - -// 0.91" OLED, 128x32 resolution -#ifdef OLED_ENABLE -oled_rotation_t oled_init_user(oled_rotation_t rotation) { - return OLED_ROTATION_180; -} - -static void render_rocket_logo(void) { - static const char PROGMEM rocket_logo[]={ - // Rocket Screen - // 'home', 128x32px - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x80, 0x80, 0xc0, 0x40, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x20, 0x50, 0x50, 0x90, - 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x10, 0x10, 0xf0, 0x10, 0x10, 0x08, 0x08, 0x08, 0x04, 0x04, - 0x04, 0xfc, 0xfc, 0xfc, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0xfc, 0x7c, 0x7e, 0x7e, 0x7f, - 0x81, 0x81, 0x81, 0x81, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, - 0xff, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0x01, 0x01, 0x01, 0xf9, 0x01, 0xf9, 0x01, - 0xf9, 0x01, 0xf9, 0x01, 0x01, 0x01, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe6, - 0xe6, 0xe6, 0xe6, 0xe6, 0xff, 0x8c, 0x52, 0x52, 0x52, 0xde, 0x84, 0x08, 0x84, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x04, - 0x05, 0x05, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0x04, 0x04, 0x07, 0x04, 0x04, 0x08, 0x08, 0x08, 0x10, 0x10, - 0x10, 0x1f, 0x1f, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x20, 0x20, 0x40, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7f, - 0x7f, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x40, 0x40, 0x40, 0x4a, 0x44, 0x4a, 0x40, - 0x4f, 0x40, 0x4f, 0x40, 0x40, 0x40, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x9c, - 0x9c, 0x9c, 0x9c, 0x1c, 0xff, 0x31, 0x4a, 0x4a, 0x4a, 0x7b, 0x10, 0x21, 0x10, 0x21, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - }; - oled_write_raw_P(rocket_logo, sizeof(rocket_logo)); -} -static void render_warzone_logo(void) { - static const char PROGMEM warzone_logo[]={ - // Home Screen - // 'warzone_bit', 128x32px - 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe0, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x00, 0xe0, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfe, - 0xfc, 0xf0, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x7f, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x80, 0x00, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xf8, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x1f, - 0x07, 0x01, 0x00, 0x00, 0x00, 0x03, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf0, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x1f, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, - 0xff, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x00, 0x80, 0xe0, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x07, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x03, 0x03, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfe, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x03, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x01, 0x0f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x00, 0x03, 0x1f, 0x3f, 0x3f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x3f, 0x3f, - 0x1f, 0x07, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x1f, 0x3f, 0x3f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x07, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x0f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x00 - }; - oled_write_raw_P(warzone_logo, sizeof(warzone_logo)); -} -static void render_light_logo(void) { - static const char PROGMEM light_logo[]={ - // RGB Screen - // 'rgb', 128x32px - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x9c, 0x80, 0x80, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, - 0x80, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x20, 0x50, 0x50, 0x90, - 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0x80, 0x00, 0x00, 0xe0, 0x19, 0x04, 0x62, 0x11, 0x09, 0x04, 0x04, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x02, 0x04, 0x19, 0x10, 0x10, 0xf0, 0x00, 0x00, 0xf0, 0x00, 0xf0, 0xe0, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x24, 0x04, - 0x07, 0xe4, 0x24, 0x24, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x04, - 0x05, 0x05, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x88, 0x30, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0x40, 0x60, 0x30, 0x98, 0x08, 0x08, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x0f, 0x07, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x22, 0x24, - 0x24, 0xc4, 0x44, 0x22, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1d, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, - 0x02, 0x03, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - }; - oled_write_raw_P(light_logo, sizeof(light_logo)); -} - -bool oled_task_user(void) { - switch (get_highest_layer(layer_state)) { - case 0: - render_rocket_logo(); - break; - case 1: - render_warzone_logo(); - break; - case 2: - render_light_logo(); - break; - default: - // Or use the write_ln shortcut over adding '\n' to the end of your string - oled_write_ln_P(PSTR(" UND"), false); - break; - } - return false; -} -#endif diff --git a/keyboards/ungodly/launch_pad/keymaps/warzone/rules.mk b/keyboards/ungodly/launch_pad/keymaps/warzone/rules.mk deleted file mode 100644 index 791d5ab50213..000000000000 --- a/keyboards/ungodly/launch_pad/keymaps/warzone/rules.mk +++ /dev/null @@ -1,2 +0,0 @@ -VIA_ENABLE = yes -TAP_DANCE_ENABLE = yes diff --git a/keyboards/waterfowl/keymaps/cyanduck/keymap.c b/keyboards/waterfowl/keymaps/cyanduck/keymap.c deleted file mode 100644 index ac52c7454df8..000000000000 --- a/keyboards/waterfowl/keymaps/cyanduck/keymap.c +++ /dev/null @@ -1,129 +0,0 @@ -/* Copyright 2022 CyanDuck -* -* This program is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General 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 QMK_KEYBOARD_H - -// Defines names for use in layer keycodes and the keymap -enum layer_names { - _COLEMAKDH, - _NAVNUM, - _SYM, - _FUNC, - _GAME -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Colemak-DH - * - * ,----------------------------------. ,----------------------------------. - * | Q | W | F | P | B | | J | L | U | Y | ; | - * |------+------+------+------+------| |------+------+------+------+------| - * | A | R | S | T | G | | M | N | E | I | O | - * |------+------+------+------+------| ,-----. ,-----. |------+------+------+------+------| - * | Z | X | C | D | V | | 2 | | 3 | | K | H | , | . | / | - * `----------------------------------' `-----' `-----' `----------------------------------' - * ,-----. ,--------------------. ,--------------------. ,-----. - * | 1 | | DEL | SPACE | TAB | | TO(0) | BS | ENTER | | 4 | - * `-----' `--------------------' `--------------------' `-----' - */ -[_COLEMAKDH] = LAYOUT( - KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, - KC_A, MT(MOD_LALT, KC_R), MT(MOD_LCTL, KC_S), MT(MOD_LSFT, KC_T), KC_G, KC_M, MT(MOD_LSFT, KC_N), MT(MOD_LCTL, KC_E), MT(MOD_LALT, KC_I), KC_O, - KC_Z, KC_X, KC_C, MT(MOD_LGUI, KC_D), KC_V, KC_K, MT(MOD_LGUI, KC_H), KC_COMM, KC_DOT, KC_SLSH, - KC_1, LT(3,KC_DEL), LT(1,KC_SPC), KC_TAB, KC_2, KC_3, TO(0), KC_BSPC, LT(2,KC_ENT), KC_4 -), - -/* NAVNUM - * - * ,----------------------------------. ,----------------------------------. - * | ESC | PgUp | UP | PgDn | TO(4)| | / | 7 | 8 | 9 | - | - * |------+------+------+------+------| |------+------+------+------+------| - * | Home | Left | Down | Right| End | | = | 4 | 5 | 6 | + | - * |------+------+------+------+------| ,-----. ,-----. |------+------+------+------+------| - * | | | INS | TO(2)| | | 2 | | 3 | | 0 | 1 | 2 | 3 | * | - * `----------------------------------' `-----' `-----' `----------------------------------' - * ,-----. ,--------------------. ,--------------------. ,-----. - * | 1 | | DEL | SPACE | MO(3)| | TO(0) | BS | ENTER | | 4 | - * `-----' `--------------------' `--------------------' `-----' - */ -[_NAVNUM] = LAYOUT( - KC_ESC, KC_PGUP, KC_UP, KC_PGDN, TO(4), KC_SLSH, KC_7, KC_8, KC_9, KC_MINS, - KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_EQL, KC_4, KC_5, KC_6, KC_PLUS, - KC_NO, KC_NO, KC_INS, TO(2), KC_NO, KC_0, KC_1, KC_2, KC_3, KC_ASTR, - KC_1, LT(3,KC_DEL), LT(1,KC_SPC), KC_ESC, KC_2, KC_3, TO(0), KC_BSPC, LT(2,KC_ENT), KC_4 -), - -/* SYM - * - * ,----------------------------------. ,----------------------------------. - * | % | @ | [ | ] | \ | | ¦ | ¬ | ^ | | | - * |------+------+------+------+------| |------+------+------+------+------| - * | # | ! | ( | ) | | | | _ | ' | " | ~ | ` | - * |------+------+------+------+------| ,-----. ,-----. |------+------+------+------+------| - * | $ | £ | { | } | & | | 2 | | 3 | | TO(1)| | | | | - * `----------------------------------' `-----' `-----' `----------------------------------' - * ,-----. ,--------------------. ,--------------------. ,-----. - * | 1 | | DEL | SPACE | TAB | | TO(0) | BS | ENTER | | 4 | - * `-----' `--------------------' `--------------------' `-----' - */ -[_SYM] = LAYOUT( - KC_PERC, S(KC_QUOT), KC_LBRC, KC_RBRC, KC_NUBS, RALT(KC_GRV), S(KC_GRV), KC_CIRC, KC_NO, KC_NO, - KC_NONUS_HASH, KC_EXLM, KC_LPRN, KC_RPRN, S(KC_NUBS), KC_UNDS, KC_QUOT, S(KC_2), S(KC_NUHS), KC_GRV, - KC_DLR, S(KC_3), KC_LCBR, KC_RCBR, KC_AMPR, TO(1), KC_NO, KC_NO, KC_NO, KC_NO, - KC_1, LT(3,KC_DEL), LT(1,KC_SPC), KC_TAB, KC_2, KC_3, TO(0), KC_BSPC, LT(2,KC_ENT), KC_4 -), - -/* FUNC - * - * ,----------------------------------. ,----------------------------------. - * | | | | | | | | F7 | F8 | F9 | F11 | - * |------+------+------+------+------| |------+------+------+------+------| - * | | | | | | | | F4 | F5 | F6 | F12 | - * |------+------+------+------+------| ,-----. ,-----. |------+------+------+------+------| - * | Reset| | | | | | 2 | | 3 | | F10 | F1 | F2 | F3 | F13 | - * `----------------------------------' `-----' `-----' `----------------------------------' - * ,-----. ,--------------------. ,--------------------. ,-----. - * | 1 | | DEL | SPACE | TAB | | TO(0) | BS | ENTER | | 4 | - * `-----' `--------------------' `--------------------' `-----' - */ -[_FUNC] = LAYOUT( - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F11, - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F4, KC_F5, KC_F6, KC_F12, - QK_BOOT, KC_NO, KC_NO, KC_NO, KC_NO, KC_F10, KC_F1, KC_F2, KC_F3, KC_F13, - KC_1, LT(3,KC_DEL), LT(1,KC_SPC), KC_TAB, KC_2, KC_3, TO(0), KC_BSPC, LT(2,KC_ENT), KC_4 -), - -/* GAME - * - * ,----------------------------------. ,----------------------------------. - * | ESC | Q | W | E | R | | | | | | | - * |------+------+------+------+------| |------+------+------+------+------| - * |Shift | A | S | D | F | | | | | | | - * |------+------+------+------+------| ,-----. ,-----. |------+------+------+------+------| - * | Ctrl | Z | X | C | V | | 2 | | 3 | | | | | | | - * `----------------------------------' `-----' `-----' `----------------------------------' - * ,-----. ,--------------------. ,--------------------. ,-----. - * | 1 | | T | SPACE | TAB | | TO(0) | BS | ENTER | | 4 | - * `-----' `--------------------' `--------------------' `-----' - */ -[_GAME] = LAYOUT( - KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_1, KC_T, KC_SPC, KC_TAB, KC_2, KC_3, TO(0), KC_BSPC, LT(2,KC_ENT), KC_4 -), -}; diff --git a/keyboards/wilba_tech/zeal60/keymaps/tusing/README.md b/keyboards/wilba_tech/zeal60/keymaps/tusing/README.md deleted file mode 100644 index 1fbd7457420c..000000000000 --- a/keyboards/wilba_tech/zeal60/keymaps/tusing/README.md +++ /dev/null @@ -1,79 +0,0 @@ -# RGB Underglow Strip on the Zeal60: A Guide - - - -## Requirements - -- WS2812B RGB strip, preferably 60 LEDs/meter -- Wire, solder -- Tape, hot glue, or some sort of adhesive - -## A. Connecting the strip -You might find the [**full PCB image**](https://cdn.shopify.com/s/files/1/0490/7329/files/zeal60jumpers.png) helpful. Ignore the red boxes! - -1. Connect V+ to the receiving end of the thermistor labeled F1; connect GND to the board's GND pin. (*Avoid connecting +V to the board's +5V pin* - you will likely overload the thermistor, and you will limit your maximum brightness.) - - - -2. Connect DI to PB0. - - - -3. Should look something like this when finished: - - - -*Optional:* To allow considerably more light to escape, consider angling the strip outwards by using some sort of fulcrum under the strip. (I used a thick wire.) - -## B. Enabling the strip -1. If it is not present already, add the following to your ***keymap's*** ```Makefile```: - - ```Makefile - RGBLIGHT_ENABLE = yes - AUDIO_ENABLE = no #Underglow animations cannot be used with audio. - ``` -2. If it is not present already, add the following to your *keymap's* ```config.h```, and edit the values as necessary: - - ```c - // Set up RGB underglow. - #define WS2812_DI_PIN B0 // The pin your RGB strip is wired to - #define RGBLED_NUM 35 // Number of LEDs - #define RGBLIGHT_HUE_STEP 5 // How much each press of rgb_hue changes hue - #define RGBLIGHT_SAT_STEP 10 // How much each press of rgb_sat changes sat - #define RGBLIGHT_VAL_STEP 10 // How much each press of rgb_val changes val - ``` -3. If they are not present already, add the following keycodes to your keymap to control the RGB strip: ```RGB_TOG``` (on/off), ```RGB_MOD``` (step through modes), ```RGB_HUI```, ```RGB_HUD```, ```RGB_SAI```, ```RGB_SAD```, ```RGB_VAI```, ```RGB_VAD``` (HSV increase/decrease). Add these to your keymap. - -## C. Dealing with current limits -USB 2.0 ports on laptops provide up to 500mA max, but USB 3.0 ports can provide up to 900mA; USB 3.1 up to 1.5A; and powered USB hubs even more. We can run our keyboard at a higher brightness if we draw more power. **The Zeal60 uses 500mA at max brightness.** This means that **you have about 400mA remaining for the strip to use on a USB 3.0 port**; 1000mA free on a USB 3.1 port, so on and so forth. - -***Warning:*** **This means you will need to turn *off* your RGB strip before connecting to a USB 2.0 port**, as USB 2.0 cannot sustain the current necessary! - -1. If not present already, add the following to your keymap's ```config.h```. Change the numbers based on your needs. The ones below are safe underestimates. - - ```c - // Enable current limiting for RGB underglow. - #define RGBSTRIP_CURRENT_LIMIT 400 // Strip current limit in mA. (USB amperage - 500mA for keyboard) - #define RGBSTRIP_MAX_CURRENT_PER_LIGHT 50 // mA per light when at max brightness. - ``` - *Example:* I use a USB port capable of providing 1800 mA. The keyboard uses 500mA, so my personal value (in the `tusing` keymap) for `RGBSTRIP_CURRENT_LIMIT` is 1300. The particular WS2812B RGB strip I have uses a maximum of 60 mA per LED, so that is my personal value for `RGBSTRIP_MAX_CURRENT_PER_LIGHT`. -2. Toggle on the LED strip (```RGB_TOG```) and step through animations (```RGB_MOD```) to test it out! - -## D. Sources and resources -### A. Connecting the strip. -* [In-depth description of connecting an RGB strip to the GH60](https://www.reddit.com/r/MechanicalKeyboards/comments/4d5or2/my_first_custom_build_satan_gh60_rbg_underglow_in/d1nz3o7/) -* [32U4 Pinout](https://40.media.tumblr.com/93b6bbd4113418c2b45459bb177e67c5/tumblr_mi49a20QMB1s5t695o1_1280.png) -* [Redditor describes connecting RGB strips on his Satan GH60](https://www.reddit.com/r/MechanicalKeyboards/comments/4hbjw4/finally_finished_my_satan_gh60_also_granite_o/d2qn8zx/?context=3) -* [Another Redditor on RGB with the Satan GH60](https://www.reddit.com/r/MechanicalKeyboards/comments/4ewzdx/gh60_satan_with_the_rgb_mod/d251uu6/ ) - -### B. Enabling the strip. -* [QMK Wiki portion on underglow](https://github.com/jackhumbert/qmk_firmware/wiki#rgb-under-glow-mod) -* [Planck ```Makefile```, ```config.h```, and ```keymap.c``` config example](https://github.com/jackhumbert/qmk_firmware/tree/master/keyboards/planck/keymaps/yang) -* [Video demonstrating keycode functions and RGB modes on a KC60](https://www.youtube.com/watch?v=VKrpPAHlisY) - -### C. Dealing with current limits. -* [Discussion of cutting jumpers and adding resistors to lower current from Zeal60](https://www.reddit.com/r/MechanicalKeyboards/comments/5hou92/photos_zeal60_lets_just_say_santa_came_early_this/db23qid/) -* [A selection of 900mA-1.5A current hold fuses - look for an SMD 0805-sized fuse.](https://goo.gl/748avG) -* [Video detailing technique to solder 0805 resistors](https://www.youtube.com/watch?v=PU7wLcuqc-I&t=123s&list=FLheMlKEVQ5cmVXazUt6HrxQ&index=2) -* [QMK feature request to implement max power draw limits in ```config.h```](https://github.com/jackhumbert/qmk_firmware/issues/954) -* [Commit enabling max power draw limits in ```config.h```](https://github.com/jackhumbert/qmk_firmware/commit/83e613ad239459582ae28f78b6c81535b9b138d7) diff --git a/keyboards/wilba_tech/zeal60/keymaps/tusing/config.h b/keyboards/wilba_tech/zeal60/keymaps/tusing/config.h deleted file mode 100644 index e797f8194132..000000000000 --- a/keyboards/wilba_tech/zeal60/keymaps/tusing/config.h +++ /dev/null @@ -1,45 +0,0 @@ -#pragma once - -/* Enable/disable LEDs based on layout. */ -#undef RGB_BACKLIGHT_USE_SPLIT_BACKSPACE -#define RGB_BACKLIGHT_USE_SPLIT_BACKSPACE 0 - -#undef RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT -#define RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT 0 - -#undef RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT -#define RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT 0 - -#undef RGB_BACKLIGHT_USE_7U_SPACEBAR -#define RGB_BACKLIGHT_USE_7U_SPACEBAR 0 - -#undef RGB_BACKLIGHT_USE_ISO_ENTER -#define RGB_BACKLIGHT_USE_ISO_ENTER 0 - -#undef RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS -#define RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS 0 - -// Set up RGB underglow. -#define WS2812_DI_PIN B0 // The pin your RGB strip is wired to -#define RGBLIGHT_EFFECT_BREATHING -#define RGBLIGHT_EFFECT_RAINBOW_MOOD -#define RGBLIGHT_EFFECT_RAINBOW_SWIRL -#define RGBLIGHT_EFFECT_SNAKE -#define RGBLIGHT_EFFECT_KNIGHT -#define RGBLIGHT_EFFECT_CHRISTMAS -#define RGBLIGHT_EFFECT_STATIC_GRADIENT -#define RGBLIGHT_EFFECT_RGB_TEST -#define RGBLIGHT_EFFECT_ALTERNATING -#define RGBLIGHT_EFFECT_TWINKLE -#define RGBLED_NUM 35 // Number of LEDs -#define RGBLIGHT_HUE_STEP 5 // How much each press of rgb_hue changes hue -#define RGBLIGHT_SAT_STEP 10 // How much each press of rgb_sat changes sat -#define RGBLIGHT_VAL_STEP 10 // How much each press of rgb_val changes val - -// Enable current limiting for RGB underglow. -#define RGBSTRIP_CURRENT_LIMIT 1300 // Strip current limit in mA. (USB amperage - 500mA for keyboard) -#define RGBSTRIP_MAX_CURRENT_PER_LIGHT 40 // mA per light when at max brightness. - -// Scale brightnes according to BRIGHTNESS_CORRECTION_TABLE in quantum/rgblight.c. -// This allows to mitigate uneven brightness from LED underglow strips. -// #define LED_BRIGHTNESS_CORRECTION diff --git a/keyboards/wilba_tech/zeal60/keymaps/tusing/keymap.c b/keyboards/wilba_tech/zeal60/keymaps/tusing/keymap.c deleted file mode 100644 index 21cb2cd73fcc..000000000000 --- a/keyboards/wilba_tech/zeal60/keymaps/tusing/keymap.c +++ /dev/null @@ -1,48 +0,0 @@ -// Default layout for Zeal60 -#include QMK_KEYBOARD_H - -// For readability. -#define _x_ KC_NO -#define AUD_PRV LCTL(KC_MPRV) // Previous music track -#define AUD_PLY LCTL(KC_MPLY) // Pause music -#define AUD_NXT LCTL(KC_MNXT) // Next music track - -// Zeal60-specific keys: -// EF_INC, EF_DEC, // next/previous backlight effect -// H1_INC, H1_DEC, // Color 1 hue increase/decrease -// S1_INC, S1_DEC, // Color 1 saturation increase/decrease -// H2_INC, H2_DEC, // Color 2 hue increase/decrease -// S2_INC, S2_DEC, // Color 2 saturation increase/decrease -// BR_INC, BR_DEC, // backlight brightness increase/decrease - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -// Default layer: Pressing caps-lock momentarily switches to Layer 1. -// This is the default layer. Pressing an empty keycode on another layer will take you here. - [0] = { - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC}, - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS}, - {MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, _x_ }, - {KC_LSFT, _x_ , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, _x_ }, - {KC_LCTL, KC_LGUI, KC_LALT, _x_ , _x_ , _x_ , _x_ , KC_SPC, _x_ , _x_ , KC_LEFT, KC_UP, KC_DOWN, KC_RGHT} - }, - -// Layer 1: Pressing enter switches to layer 2, where backlight controls live. -// This is a momentary layer: once you let go of caps, you'll be back in layer 1. - [1] = { - {KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL }, - {_______, KC_VOLD, KC_MUTE, KC_VOLU, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, KC_INS, KC_DEL, _______}, - {_______, AUD_PRV, AUD_PLY, AUD_NXT, _______, _______, _______, _______, _______, _______, _______, _______, TO(2) , _x_ }, - {KC_CAPS, _x_ , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _x_ }, - {KC_RCTL, KC_RGUI, KC_RALT, _x_ , _x_ , _x_ , _x_ , _______, _x_ , _x_ , KC_HOME, KC_PGUP, KC_PGDN, KC_END} - }, - -// Layer 2: Zeal60 and backlight configuration. (Get here quickly by pressing Caps+Enter from Layer 1.) -// This is a persistent layer. Get back to the default layer by pressing enter. - [2] = { - {QK_BOOT, EF_DEC, EF_INC, BR_DEC, BR_INC, ES_DEC, ES_INC, _______, _______, _______, _______, _______, _______, _______}, - {_______, H1_DEC, H1_INC, S1_DEC, S1_INC, _______, _______, _______, _______, _______, _______, _______, _______, _______}, - {_______, H2_DEC, H2_INC, S2_DEC, S2_INC, _______, _______, _______, _______, _______, _______, _______, TO(0) , _x_ }, - {RGB_MOD, _x_ , RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, _______, _______, _______, _______, _______, _______, _______, _x_ }, - {RGB_TOG, RGB_VAD, RGB_VAI, _x_ , _x_ , _x_ , _x_ , _______, _x_ , _x_ , _______, _______, _______, _______} - } -}; diff --git a/keyboards/wilba_tech/zeal60/keymaps/tusing/rules.mk b/keyboards/wilba_tech/zeal60/keymaps/tusing/rules.mk deleted file mode 100644 index 762905da03f9..000000000000 --- a/keyboards/wilba_tech/zeal60/keymaps/tusing/rules.mk +++ /dev/null @@ -1,6 +0,0 @@ -# Build Options -# change to "no" to disable the options, or define them in the Makefile in -# the appropriate keymap folder that will get included automatically -# -RGBLIGHT_ENABLE = yes -AUDIO_ENABLE = no # Underglow cannot be used with audio. diff --git a/keyboards/winkeyless/bface/keymaps/kpeatt/keymap.c b/keyboards/winkeyless/bface/keymaps/kpeatt/keymap.c deleted file mode 100644 index a74ec3570114..000000000000 --- a/keyboards/winkeyless/bface/keymaps/kpeatt/keymap.c +++ /dev/null @@ -1,75 +0,0 @@ -/* -Copyright 2017 Kyle Peatt - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include QMK_KEYBOARD_H - -#define ______ KC_TRNS - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - /* Qwerty - * ,-----------------------------------------------------------------------------------------. - * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bkspc | - * |-----------------------------------------------------------------------------------------+ - * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | - * |-----------------------------------------------------------------------------------------+ - * | Caps/FN | A | S | D | F | G | H | J | K | L | ; | ' | Enter | - * |-----------------------------------------------------------------------------------------+ - * | Shift | Z | X | C | V | B | N | M | , | . | / | RShift | - * |-----------------------------------------------------------------------------------------+ - * | Ctrl | GUI | Alt | Space | Alt | GUI | Ctrl | Fn | - * `-----------------------------------------------------------------------------------------' - */ - - [0] = LAYOUT_60_ansi( - QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, - LT(1, KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, - KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_RCTL, MO(1) - ), - - /* FN Layer - * ,-----------------------------------------------------------------------------------------. - * | `~ | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | - * |-----------------------------------------------------------------------------------------+ - * | | | Up | | | | | | | |RGBMOD| Val+| Val- |RBGTOG| - * |-----------------------------------------------------------------------------------------+ - * | | Left| Down|Right| | | | | Sat+| Sat-| Hue+| Hue-| | - * |-----------------------------------------------------------------------------------------+ - * | | | | | | | | | | | | | | | - * |-----------------------------------------------------------------------------------------+ - * | | | | | | | | | | - * `-----------------------------------------------------------------------------------------' - */ - - [1] = LAYOUT_60_ansi( - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ______, - ______,______,KC_UP,______,______,______,______,______,______,______,RGB_MOD,RGB_VAI,RGB_VAD,RGB_TOG, - ______,KC_LEFT,KC_DOWN,KC_RGHT,______, ______, ______,______,RGB_SAI,RGB_SAD,RGB_HUI,RGB_HUD,______, - ______,______,______,______,______, ______, ______,______,______,______,______, ______, - ______,______,______, ______, ______,______,______,______ - ), - /* You can copy this layer as base for a new fn layer * / - [n] = LAYOUT_60_ansi( - ______,______,______,______,______,______,______,______,______,______,______,______,______,______, - ______,______,______,______,______,______,______,______,______,______,______,______,______,______, - ______,______,______,______,______,______,______,______,______,______,______,______,______, - ______,______,______,______,______,______,______,______,______,______,______, ______, - ______,______,______, ______, ______,______,______,______ - ), // */ -}; diff --git a/keyboards/winkeyless/bface/keymaps/kpeatt/readme.md b/keyboards/winkeyless/bface/keymaps/kpeatt/readme.md deleted file mode 100644 index a7eef1e5fcfb..000000000000 --- a/keyboards/winkeyless/bface/keymaps/kpeatt/readme.md +++ /dev/null @@ -1,10 +0,0 @@ -kpeatt's bface layout -====================== - -## Keyboard Notes -- This is for a clone bface PCB that is no longer for sale as far as I can tell. [Used to be sold on KBDFans](https://www.aliexpress.com/item/bface-60-RGB-underground-copy-pcb-from-china-gh60-pcb-Customize-keyboard-PCB/32731084597.html). -- To put in reset mode hold `left ctrl` while inserting the USB cable -- Use flashing instructions in the main `bface` directory - -### Build -To build this keymap, run `make bface:kpeatt` from the qmk_firmware directory. diff --git a/keyboards/winkeyless/bface/keymaps/p3lim/README.md b/keyboards/winkeyless/bface/keymaps/p3lim/README.md deleted file mode 100644 index 94e84e7f2210..000000000000 --- a/keyboards/winkeyless/bface/keymaps/p3lim/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# p3lim's b.face layout - -![](https://user-images.githubusercontent.com/26496/61170794-bf8a2c80-a56e-11e9-893f-f1766e7a9a04.png) - -My layout using the winkeyless b.face X2 PCB. - -### Building & Flashing - -- Set up QMK - - `pip install --user qmk` - - `qmk setup` -- Add udev rules if on Linux - - Follow the docs: -- Build and flash - - `qmk flash -kb winkeyless/bface -km p3lim` -- Hold bottom-left key while connecting to put in flashing mode - -### Layout notes - -The keys indicated with a gray color in the image above was not supported by the layout so a custom matrix was made. -The two additional keys were on pins 22+41 and 22+42, C3+B1 and C3+B2, which is mapped to col 10 row 1 and col 10 row 2 in the matrix. diff --git a/keyboards/winkeyless/bface/keymaps/p3lim/keymap.c b/keyboards/winkeyless/bface/keymaps/p3lim/keymap.c deleted file mode 100644 index f702810f9c2a..000000000000 --- a/keyboards/winkeyless/bface/keymaps/p3lim/keymap.c +++ /dev/null @@ -1,188 +0,0 @@ -/* -Copyright 2019-2021 Adrian L Lange - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include QMK_KEYBOARD_H - -#define LAYOUT_p3lim(\ - K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, \ - K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC3, \ - K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KB2, KC2, KD2, \ - K01, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KB1, KC1, \ - K00, K10, K20, K56, K57, KB0, KC0 \ -){ \ - { K00, K10, K20, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB0, KC0, KC_NO, KC_NO }, \ - { K01, K11, K21, K31, K41, K51, KC_NO, KC_NO, KC_NO, KC_NO, KA1, KB1, KC1, KC_NO, KC_NO }, \ - { K02, K12, K22, K32, K42, K52, KC_NO, KC_NO, KC_NO, KC_NO, KA2, KB2, KC2, KD2, KC_NO }, \ - { K03, K13, K23, K33, K43, K53, KC_NO, KC_NO, KC_NO, KC_NO, KA3, KB3, KC3, KC_NO, KC_NO }, \ - { K04, K14, K24, K34, K44, K54, KC_NO, KC_NO, KC_NO, KC_NO, KA4, KB4, KC4, KC_NO, KE4 }, \ - { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ - { KC_NO, K16, K26, K36, K46, K56, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB6, KC6, KD6, KE6 }, \ - { KC_NO, K17, K27, K37, K47, K57, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB7, KC7, KD7, KE7 } \ -} - -enum my_keycodes { - C_ESC0 = SAFE_RANGE, // layer 0 esc - C_ESC1, // layer 1 esc - C_NO1, // æ, requires RCTL to be a compose key in software - C_NO2, // ø, requires RCTL to be a compose key in software - C_NO3 // å, requires RCTL to be a compose key in software -}; - -// use compiler macros for simpler stuff -#define C_KVM1 LCA(KC_1) -#define C_KVM2 LCA(KC_2) -#define C_KVM3 LCA(KC_3) -#define C_KVM4 LCA(KC_4) - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* QWERTY - * ,-----------------------------------------------------------------------------------------. - * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bkspc | - * |-----------------------------------------------------------------------------------------+ - * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | | - * |---------------------------------------------------------------------------------| Enter | - * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' | \ | | - * |-----------------------------------------------------------------------------------------+ - * | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Del | - * |-----------------------------------------------------------------------------------------+ - * | FN1 | Alt | GUI | Space | FN2 | Alt | Ctrl | - * `-----------------------------------------------------------------------------------------' - */ - [0] = LAYOUT_p3lim( - C_ESC0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, - KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_DEL, - MO(1), KC_LALT, KC_LGUI, KC_SPC, MO(2), KC_RGUI, KC_RCTL - ), - - /* FN1 - * ,-----------------------------------------------------------------------------------------. - * | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | - * |-----------------------------------------------------------------------------------------+ - * | Caps | Home| Up | End | PgUp| | | | | | | | | | - * |---------------------------------------------------------------------------------| | - * | | Left| Down|Right| PgDn|PrtSc| | | | | | | | | - * |-----------------------------------------------------------------------------------------+ - * | | KVM1| KVM2| KVM3| KVM4| | | | | | | | | - * |-----------------------------------------------------------------------------------------+ - * | | | | | | | | - * `-----------------------------------------------------------------------------------------' - */ - [1] = LAYOUT_p3lim( - C_ESC1, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, - KC_CAPS, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, _______, _______, _______, _______, _______, _______, _______, - _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_PSCR, _______, _______, _______, _______, _______, _______, _______, _______, - _______, C_KVM1, C_KVM2, C_KVM3, C_KVM4, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, KC_NO, _______, _______ - ), - - /* FN2 - * ,-----------------------------------------------------------------------------------------. - * | | | | | | | | | | | | | | | - * |-----------------------------------------------------------------------------------------+ - * | | | | | | | | | | | | Å | | | - * |---------------------------------------------------------------------------------| | - * | | | | | | | | | | | Ø | Æ | | | - * |-----------------------------------------------------------------------------------------+ - * | | | | | | | | | | | | | | - * |-----------------------------------------------------------------------------------------+ - * | | | | | | | | - * `-----------------------------------------------------------------------------------------' - */ - [2] = LAYOUT_p3lim( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, C_NO3, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, C_NO2, C_NO1, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - KC_NO, _______, _______, _______, _______, _______, _______ - ), - /* - [n] = LAYOUT_p3lim( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______ - ), - */ -}; - -static bool grave_esc_shifted = false; - -bool process_record_user(uint16_t keycode, keyrecord_t *record){ - const uint8_t mods = get_mods(); - uint8_t shifted = mods & MOD_MASK_SHIFT; - - switch(keycode){ - case C_ESC0: // layer 0 - if(record->event.pressed){ - grave_esc_shifted = shifted; - register_code(shifted ? KC_GRAVE : KC_ESCAPE); - } else - unregister_code(grave_esc_shifted ? KC_GRAVE : KC_ESCAPE); - return false; - case C_ESC1: // layer 1 - if(record->event.pressed){ - grave_esc_shifted = shifted; - register_code(shifted ? KC_ESCAPE : KC_GRAVE); - } else - unregister_code(grave_esc_shifted ? KC_ESCAPE : KC_GRAVE); - return false; - case C_NO1: // æ - if(record->event.pressed){ - // we use shift for A and E to make it capitalized, no need to handle it here - tap_code(KC_RCTL); - tap_code(KC_A); - tap_code(KC_E); - } - return false; - case C_NO2: // ø - // the "/" symbol can't be shifted, so we have to deal with that - if(record->event.pressed){ - if(shifted){ - unregister_code(KC_LSFT); // reset the shift state, I always use LSFT personally - tap_code(KC_RCTL); - tap_code(KC_SLSH); - tap_code16(S(KC_O)); - register_code(KC_LSFT); // enable the shift state again to keep state consistent - } else { - tap_code(KC_RCTL); - tap_code(KC_SLSH); - tap_code(KC_O); - } - } - return false; - case C_NO3: // å - // the "o" symbol can't be shifted, so we have to deal with that - if(record->event.pressed){ - if(shifted){ - unregister_code(KC_LSFT); // reset the shift state, I always use LSFT personally - tap_code(KC_RCTL); - tap_code(KC_O); - tap_code16(S(KC_A)); - register_code(KC_LSFT); // enable the shift state again to keep state consistent - } else { - tap_code(KC_RCTL); - tap_code(KC_O); - tap_code(KC_A); - } - } - return false; - } - return true; -} diff --git a/keyboards/winkeyless/bface/keymaps/p3lim/rules.mk b/keyboards/winkeyless/bface/keymaps/p3lim/rules.mk deleted file mode 100644 index e0ed6f0c2d6f..000000000000 --- a/keyboards/winkeyless/bface/keymaps/p3lim/rules.mk +++ /dev/null @@ -1 +0,0 @@ -RGBLIGHT_ENABLE = no diff --git a/keyboards/wren/keymaps/walterhanley/config.h b/keyboards/wren/keymaps/walterhanley/config.h deleted file mode 100644 index 3dd5b47c160c..000000000000 --- a/keyboards/wren/keymaps/walterhanley/config.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright 2021 Walter Hanley - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -// Lower board power consumption to boost compatibility -#define USB_MAX_POWER_CONSUMPTION 250 diff --git a/keyboards/wren/keymaps/walterhanley/keymap.c b/keyboards/wren/keymaps/walterhanley/keymap.c deleted file mode 100644 index bf6afc9ac666..000000000000 --- a/keyboards/wren/keymaps/walterhanley/keymap.c +++ /dev/null @@ -1,170 +0,0 @@ -/* Copyright 2021 Walter Hanley - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include QMK_KEYBOARD_H - -// Cmd-tab tablesetting -bool is_cmd_tab_active = false; -uint16_t cmd_tab_timer = 0; - -// Alt-tab tablesetting -bool is_alt_tab_active = false; -uint16_t alt_tab_timer = 0; - -// Defines keycode alias -#define ECTL LCTL_T(KC_ESC) -#define EGUI LGUI_T(KC_ESC) -#define DELSYM LT(_SYMBOL, KC_DEL) -#define SCLNAV LT(_NAV, KC_SCLN) -#define TGNLCK TG(_NLCK) - -// Defines names for use in layer keycodes and the keymap -enum layer_names { - _MAC, - _WIN, - _NLCK, - _SYMBOL, - _NAV -}; - -// Defines the keycodes used by our macros in process_record_user -enum custom_keycodes { - NSEAL = SAFE_RANGE, -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Mac */ - [_MAC] = LAYOUT( - KC_PSLS, KC_7, KC_8, KC_9, KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, KC_INS, KC_HOME, KC_PGUP, KC_NO, - KC_PAST, KC_4, KC_5, KC_6, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_NO, - KC_PMNS, KC_1, KC_2, KC_3, ECTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SCLNAV, KC_QUOT, KC_NO, KC_UP, KC_NO, KC_NO, - KC_PPLS, KC_0, KC_DOT, KC_ENT, SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, - TGNLCK, KC_LALT, KC_LGUI, KC_BSPC, KC_ENT, KC_SPC, DELSYM, KC_RGUI, KC_RALT, KC_MUTE - ), - - /* Windows */ - [_WIN] = LAYOUT( - KC_PSLS, KC_7, KC_8, KC_9, KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, KC_INS, KC_HOME, KC_PGUP, KC_NO, - KC_PAST, KC_4, KC_5, KC_6, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_NO, - KC_PMNS, KC_1, KC_2, KC_3, EGUI, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SCLNAV, KC_QUOT, KC_NO, KC_UP, KC_NO, KC_NO, - KC_PPLS, KC_0, KC_DOT, KC_ENT, SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, - TGNLCK, KC_LALT, KC_LCTL, KC_BSPC, KC_ENT, KC_SPC, DELSYM, KC_RCTL, KC_RALT, KC_MUTE - ), - - /* In-Keyboard Numlock */ - [_NLCK] = LAYOUT( - KC_PSLS, KC_HOME, KC_UP, KC_PGUP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - KC_PAST, KC_LEFT, KC_5, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - KC_PMNS, KC_END, KC_DOWN, KC_PGDN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - KC_PPLS, KC_INS, KC_DOT, KC_ENT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - TGNLCK, _______, _______, _______, _______, _______, _______, _______, _______, _______ - ), - - /* Symbols, F-Keys, and Text Macros */ - [_SYMBOL] = LAYOUT( - NSEAL, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, KC_UNDS, KC_LCBR, KC_LBRC, _______, _______, KC_RBRC, KC_RCBR, KC_MINS, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ - ), - - /* Nav Cluster and Settings*/ - [_NAV] = LAYOUT( - DF(_MAC), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - DF(_WIN), _______, _______, _______, _______, KC_PGUP, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ - ) -}; - -bool encoder_update_user(uint8_t index, bool clockwise) { - if (index == 0) { /* First encoder */ - // Encoder functionality for _MAC layer - if (IS_LAYER_ON(_MAC)) - { - if (clockwise) { - if (!is_cmd_tab_active) { - is_cmd_tab_active = true; - register_code(KC_LGUI); - } - cmd_tab_timer = timer_read(); - tap_code16(KC_TAB); - } else { - if (!is_cmd_tab_active) { - is_cmd_tab_active = true; - register_code(KC_LGUI); - } - cmd_tab_timer = timer_read(); - tap_code16(S(KC_TAB)); - } - } - // Encoder functionality for _WIN layer - else if (IS_LAYER_ON(_WIN)) { - if (clockwise) { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - tap_code16(KC_TAB); - } else { - if (!is_alt_tab_active) { - is_alt_tab_active = true; - register_code(KC_LALT); - } - alt_tab_timer = timer_read(); - tap_code16(S(KC_TAB)); - } - } - } else if (index == 1) { /* Second encoder */ - if (clockwise) { - tap_code(KC_VOLU); - } else { - tap_code(KC_VOLD); - } - } - return true; -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case NSEAL: - if (record->event.pressed) { - // when keycode NSEAL is pressed - SEND_STRING("What the fuck did you just fucking say about me, you little bitch? I'll have you know I graduated top of my class in the Navy Seals, and I've been involved in numerous secret raids on Al-Quaeda, and I have over 300 confirmed kills. I am trained in gorilla warfare and I'm the top sniper in the entire US armed forces. You are nothing to me but just another target. I will wipe you the fuck out with precision the likes of which has never been seen before on this Earth, mark my fucking words. You think you can get away with saying that shit to me over the Internet? Think again, fucker. As we speak I am contacting my secret network of spies across the USA and your IP is being traced right now so you better prepare for the storm, maggot. The storm that wipes out the pathetic little thing you call your life. You're fucking dead, kid. I can be anywhere, anytime, and I can kill you in over seven hundred ways, and that's just with my bare hands. Not only am I extensively trained in unarmed combat, but I have access to the entire arsenal of the United States Marine Corps and I will use it to its full extent to wipe your miserable ass off the face of the continent, you little shit. If only you could have known what unholy retribution your little 'clever' comment was about to bring down upon you, maybe you would have held your fucking tongue. But you couldn't, you didn't, and now you're paying the price, you goddamn idiot. I will shit fury all over you and you will drown in it. You're fucking dead, kiddo."); - } else { - // when keycode NSEAL is released - } - break; - } - return true; -} - -void matrix_scan_user(void) { - if (is_cmd_tab_active) { - if (timer_elapsed(cmd_tab_timer) > 1000) { - unregister_code(KC_LGUI); - is_cmd_tab_active = false; - } - } - if (is_alt_tab_active) { - if (timer_elapsed(alt_tab_timer) > 1000) { - unregister_code(KC_LALT); - is_alt_tab_active = false; - } - } -} diff --git a/keyboards/wren/keymaps/walterhanley/readme.md b/keyboards/wren/keymaps/walterhanley/readme.md deleted file mode 100644 index 27e32360dc4d..000000000000 --- a/keyboards/wren/keymaps/walterhanley/readme.md +++ /dev/null @@ -1,12 +0,0 @@ -![Author's Layout](https://github.com/walterhanley/wren-keyboard/blob/main/images/author-layout.png?raw=true) - -# Author's Wren Layout - -This is my personal Wren layout, which includes a few layers and macros that -I find useful. It started as a clone of the default keymap, but will likely -diverge more as time goes on. - -Please note that this layout preserves the entire keyboard matrix, but only -includes keycodes for a numpad/nav cluster configuration. Depending on your -configuration, you may need to replace some of the existing KC_NO values -with actual keycodes. From 01b1274ff0e1200c30d528360dc16477a9feaf38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=AB=E3=82=BF=E3=83=BC=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=83=91=E3=83=BC?= <76888457+filterpaper@users.noreply.github.com> Date: Mon, 19 Feb 2024 19:18:20 +0800 Subject: [PATCH 24/35] Refactor: group kbdfans keyboards (#22764) Move two kbdfans keyboard into kbdfans folder --- data/mappings/keyboard_aliases.hjson | 6 +++++ keyboards/{ => kbdfans}/epoch80/info.json | 0 .../epoch80/keymaps/default/keymap.c | 0 .../epoch80/keymaps/iso/keymap.c | 0 .../epoch80/keymaps/tsangan/keymap.c | 0 .../epoch80/keymaps/via/keymap.c | 0 .../epoch80/keymaps/via/rules.mk | 0 .../epoch80/keymaps/wkl/keymap.c | 0 keyboards/{ => kbdfans}/epoch80/readme.md | 4 ++-- keyboards/{ => kbdfans}/epoch80/rules.mk | 0 keyboards/{ => kbdfans}/jm60/board.h | 0 keyboards/{ => kbdfans}/jm60/chconf.h | 0 keyboards/{ => kbdfans}/jm60/config.h | 0 keyboards/{ => kbdfans}/jm60/info.json | 0 keyboards/{ => kbdfans}/jm60/jm60.c | 0 .../jm60/keymaps/default/keymap.c | 3 +++ .../kbdfans/jm60/keymaps/poker3/keymap.c | 24 +++++++++++++++++++ .../{ => kbdfans}/jm60/ld/jm60_bootloader.ld | 0 keyboards/{ => kbdfans}/jm60/mcuconf.h | 0 keyboards/{ => kbdfans}/jm60/readme.md | 2 +- keyboards/{ => kbdfans}/jm60/rules.mk | 0 21 files changed, 36 insertions(+), 3 deletions(-) rename keyboards/{ => kbdfans}/epoch80/info.json (100%) rename keyboards/{ => kbdfans}/epoch80/keymaps/default/keymap.c (100%) rename keyboards/{ => kbdfans}/epoch80/keymaps/iso/keymap.c (100%) rename keyboards/{ => kbdfans}/epoch80/keymaps/tsangan/keymap.c (100%) rename keyboards/{ => kbdfans}/epoch80/keymaps/via/keymap.c (100%) rename keyboards/{ => kbdfans}/epoch80/keymaps/via/rules.mk (100%) rename keyboards/{ => kbdfans}/epoch80/keymaps/wkl/keymap.c (100%) rename keyboards/{ => kbdfans}/epoch80/readme.md (92%) rename keyboards/{ => kbdfans}/epoch80/rules.mk (100%) rename keyboards/{ => kbdfans}/jm60/board.h (100%) rename keyboards/{ => kbdfans}/jm60/chconf.h (100%) rename keyboards/{ => kbdfans}/jm60/config.h (100%) rename keyboards/{ => kbdfans}/jm60/info.json (100%) rename keyboards/{ => kbdfans}/jm60/jm60.c (100%) rename keyboards/{ => kbdfans}/jm60/keymaps/default/keymap.c (97%) create mode 100644 keyboards/kbdfans/jm60/keymaps/poker3/keymap.c rename keyboards/{ => kbdfans}/jm60/ld/jm60_bootloader.ld (100%) rename keyboards/{ => kbdfans}/jm60/mcuconf.h (100%) rename keyboards/{ => kbdfans}/jm60/readme.md (96%) rename keyboards/{ => kbdfans}/jm60/rules.mk (100%) diff --git a/data/mappings/keyboard_aliases.hjson b/data/mappings/keyboard_aliases.hjson index af97c39f0ce9..29a7a719f38e 100644 --- a/data/mappings/keyboard_aliases.hjson +++ b/data/mappings/keyboard_aliases.hjson @@ -185,6 +185,9 @@ "eek": { "target": "eek/silk_down" }, + "epoch80": { + "target": "kbdfans/epoch80" + }, "era/klein": { "target": "era/sirind/klein_sd" }, @@ -311,6 +314,9 @@ "jj50": { "target": "kprepublic/jj50" }, + "jm60": { + "target": "kbdfans/jm60" + }, "jones": { "target": "jones/v03_1" }, diff --git a/keyboards/epoch80/info.json b/keyboards/kbdfans/epoch80/info.json similarity index 100% rename from keyboards/epoch80/info.json rename to keyboards/kbdfans/epoch80/info.json diff --git a/keyboards/epoch80/keymaps/default/keymap.c b/keyboards/kbdfans/epoch80/keymaps/default/keymap.c similarity index 100% rename from keyboards/epoch80/keymaps/default/keymap.c rename to keyboards/kbdfans/epoch80/keymaps/default/keymap.c diff --git a/keyboards/epoch80/keymaps/iso/keymap.c b/keyboards/kbdfans/epoch80/keymaps/iso/keymap.c similarity index 100% rename from keyboards/epoch80/keymaps/iso/keymap.c rename to keyboards/kbdfans/epoch80/keymaps/iso/keymap.c diff --git a/keyboards/epoch80/keymaps/tsangan/keymap.c b/keyboards/kbdfans/epoch80/keymaps/tsangan/keymap.c similarity index 100% rename from keyboards/epoch80/keymaps/tsangan/keymap.c rename to keyboards/kbdfans/epoch80/keymaps/tsangan/keymap.c diff --git a/keyboards/epoch80/keymaps/via/keymap.c b/keyboards/kbdfans/epoch80/keymaps/via/keymap.c similarity index 100% rename from keyboards/epoch80/keymaps/via/keymap.c rename to keyboards/kbdfans/epoch80/keymaps/via/keymap.c diff --git a/keyboards/epoch80/keymaps/via/rules.mk b/keyboards/kbdfans/epoch80/keymaps/via/rules.mk similarity index 100% rename from keyboards/epoch80/keymaps/via/rules.mk rename to keyboards/kbdfans/epoch80/keymaps/via/rules.mk diff --git a/keyboards/epoch80/keymaps/wkl/keymap.c b/keyboards/kbdfans/epoch80/keymaps/wkl/keymap.c similarity index 100% rename from keyboards/epoch80/keymaps/wkl/keymap.c rename to keyboards/kbdfans/epoch80/keymaps/wkl/keymap.c diff --git a/keyboards/epoch80/readme.md b/keyboards/kbdfans/epoch80/readme.md similarity index 92% rename from keyboards/epoch80/readme.md rename to keyboards/kbdfans/epoch80/readme.md index a78f9ce87bac..b029b5bd9942 100644 --- a/keyboards/epoch80/readme.md +++ b/keyboards/kbdfans/epoch80/readme.md @@ -11,10 +11,10 @@ The board was also sold in a zFrontier groupbuy under the name Dolch.CR 80. Make example for this keyboard (after setting up your build environment): - make epoch80:default + make kbdfans/epoch80:default Flashing example for this keyboard: - make epoch80:default:flash + make kbdfans/epoch80:default:flash See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/epoch80/rules.mk b/keyboards/kbdfans/epoch80/rules.mk similarity index 100% rename from keyboards/epoch80/rules.mk rename to keyboards/kbdfans/epoch80/rules.mk diff --git a/keyboards/jm60/board.h b/keyboards/kbdfans/jm60/board.h similarity index 100% rename from keyboards/jm60/board.h rename to keyboards/kbdfans/jm60/board.h diff --git a/keyboards/jm60/chconf.h b/keyboards/kbdfans/jm60/chconf.h similarity index 100% rename from keyboards/jm60/chconf.h rename to keyboards/kbdfans/jm60/chconf.h diff --git a/keyboards/jm60/config.h b/keyboards/kbdfans/jm60/config.h similarity index 100% rename from keyboards/jm60/config.h rename to keyboards/kbdfans/jm60/config.h diff --git a/keyboards/jm60/info.json b/keyboards/kbdfans/jm60/info.json similarity index 100% rename from keyboards/jm60/info.json rename to keyboards/kbdfans/jm60/info.json diff --git a/keyboards/jm60/jm60.c b/keyboards/kbdfans/jm60/jm60.c similarity index 100% rename from keyboards/jm60/jm60.c rename to keyboards/kbdfans/jm60/jm60.c diff --git a/keyboards/jm60/keymaps/default/keymap.c b/keyboards/kbdfans/jm60/keymaps/default/keymap.c similarity index 97% rename from keyboards/jm60/keymaps/default/keymap.c rename to keyboards/kbdfans/jm60/keymaps/default/keymap.c index 2bb26fccf6da..d063afa0fd35 100644 --- a/keyboards/jm60/keymaps/default/keymap.c +++ b/keyboards/kbdfans/jm60/keymaps/default/keymap.c @@ -1,3 +1,6 @@ +// Copyright QMK +// SPDX-License-Identifier: GPL-2.0+ + #include QMK_KEYBOARD_H enum layer_names { diff --git a/keyboards/kbdfans/jm60/keymaps/poker3/keymap.c b/keyboards/kbdfans/jm60/keymaps/poker3/keymap.c new file mode 100644 index 000000000000..ee1583eab73b --- /dev/null +++ b/keyboards/kbdfans/jm60/keymaps/poker3/keymap.c @@ -0,0 +1,24 @@ +#include QMK_KEYBOARD_H + +enum layer_names { + _BL, + _FL +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BL] = LAYOUT_60_ansi( + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, + MO(_FL), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL + ), + + [_FL] = LAYOUT_60_ansi( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, + _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SCRL, KC_PAUS, _______, + KC_CAPS, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, KC_DEL, _______, + _______, KC_APP, _______, _______, _______, _______, KC_END, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; diff --git a/keyboards/jm60/ld/jm60_bootloader.ld b/keyboards/kbdfans/jm60/ld/jm60_bootloader.ld similarity index 100% rename from keyboards/jm60/ld/jm60_bootloader.ld rename to keyboards/kbdfans/jm60/ld/jm60_bootloader.ld diff --git a/keyboards/jm60/mcuconf.h b/keyboards/kbdfans/jm60/mcuconf.h similarity index 100% rename from keyboards/jm60/mcuconf.h rename to keyboards/kbdfans/jm60/mcuconf.h diff --git a/keyboards/jm60/readme.md b/keyboards/kbdfans/jm60/readme.md similarity index 96% rename from keyboards/jm60/readme.md rename to keyboards/kbdfans/jm60/readme.md index bb790d6d07f7..545124f3aaa6 100644 --- a/keyboards/jm60/readme.md +++ b/keyboards/kbdfans/jm60/readme.md @@ -8,7 +8,7 @@ A compact 60% keyboard with full RGB led support. Make example for this keyboard (after setting up your build environment): - make jm60:default + make kbdfans/jm60:default See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/jm60/rules.mk b/keyboards/kbdfans/jm60/rules.mk similarity index 100% rename from keyboards/jm60/rules.mk rename to keyboards/kbdfans/jm60/rules.mk From 8779d5a10e61079508dbd58a7039f9deb4f3d680 Mon Sep 17 00:00:00 2001 From: rookiebwoy <81021475+rookiebwoy@users.noreply.github.com> Date: Mon, 19 Feb 2024 12:23:33 +0100 Subject: [PATCH 25/35] Late9 keymaps update, added VIA support (#22801) --- keyboards/rookiebwoy/late9/readme.md | 12 +- keyboards/rookiebwoy/late9/rev1/info.json | 9 +- .../late9/rev1/keymaps/default/keymap.c | 24 +- .../late9/rev1/keymaps/multitap/keymap.c | 235 ------------------ .../late9/rev1/keymaps/multitap/readme.md | 3 - .../late9/rev1/keymaps/multitap/rules.mk | 2 - .../late9/rev1/keymaps/via/keymap.c | 84 +++++++ .../late9/rev1/keymaps/via/rules.mk | 1 + keyboards/rookiebwoy/late9/rev1/rules.mk | 15 +- 9 files changed, 110 insertions(+), 275 deletions(-) delete mode 100644 keyboards/rookiebwoy/late9/rev1/keymaps/multitap/keymap.c delete mode 100644 keyboards/rookiebwoy/late9/rev1/keymaps/multitap/readme.md delete mode 100644 keyboards/rookiebwoy/late9/rev1/keymaps/multitap/rules.mk create mode 100644 keyboards/rookiebwoy/late9/rev1/keymaps/via/keymap.c create mode 100644 keyboards/rookiebwoy/late9/rev1/keymaps/via/rules.mk diff --git a/keyboards/rookiebwoy/late9/readme.md b/keyboards/rookiebwoy/late9/readme.md index 9815391cbd54..bc6dfab57e2c 100644 --- a/keyboards/rookiebwoy/late9/readme.md +++ b/keyboards/rookiebwoy/late9/readme.md @@ -5,11 +5,9 @@ The LATE-9 is a multi-tap input keyboard based on mobile phones from the late '9 ![LATE-9](https://i.imgur.com/QXycTC3h.jpg "LATE-9 first proto") -See the project repository for gerbers. - * Keyboard maintainer: [rookiebwoy](https://github.com/rookiebwoy) * Hardware supported: ProMicro, _Elite-C (not tested)_ -* Project repository: [LATE-9 on github](https://github.com/rookiebwoy/late-9) +* Hardware Availability: LATE-9 is open source, check the [project repository](https://github.com/rookiebwoy/late-9) for gerbers. Make example for this keyboard (after setting up your build environment): @@ -19,9 +17,9 @@ Flashing example for this keyboard: make rookiebwoy/late9/rev1:default:flash +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). -When asked by the terminal, short with a metal wire the pins on the backside of the board highlighted as `RST` (one is the `RESET` and the other one is `GROUND`) to enter the bootloader and let the OS detects the device. -After installing this firmware you can use Bootmagic to enter the bootloader while plugging in your LATE-9. By default it's the button on the upper-left of the keyboard. - -See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). +## Bootloader +When asked by the terminal, short with a metal wire the pins on the backside of the board highlighted as `RST` (one is the `RESET` and the other one is `GROUND`) to enter the bootloader and let the OS detects the device.\ +After installing this firmware you can use Bootmagic to enter the bootloader while plugging in your LATE-9. By default it's the button on the upper-left of the keyboard. \ No newline at end of file diff --git a/keyboards/rookiebwoy/late9/rev1/info.json b/keyboards/rookiebwoy/late9/rev1/info.json index 05d0934b9647..48f3cff840d6 100644 --- a/keyboards/rookiebwoy/late9/rev1/info.json +++ b/keyboards/rookiebwoy/late9/rev1/info.json @@ -4,8 +4,8 @@ "url": "https://github.com/rookiebwoy/late-9)", "maintainer": "rookiebwoy", "usb": { - "vid": "0xFEED", - "pid": "0x3777", + "vid": "0x6961", + "pid": "0x3032", "device_version": "0.1.0" }, "tapping": { @@ -19,6 +19,11 @@ "rows": ["B4", "E6", "D7", "B3", "B2", "B6"] }, "diode_direction": "ROW2COL", + "features": { + "bootmagic": true, + "nkro": true, + "oled": true + }, "processor": "atmega32u4", "bootloader": "caterina", "layouts": { diff --git a/keyboards/rookiebwoy/late9/rev1/keymaps/default/keymap.c b/keyboards/rookiebwoy/late9/rev1/keymaps/default/keymap.c index bed15eb57e5d..f93958fe8f3a 100644 --- a/keyboards/rookiebwoy/late9/rev1/keymaps/default/keymap.c +++ b/keyboards/rookiebwoy/late9/rev1/keymaps/default/keymap.c @@ -22,23 +22,23 @@ enum layers { }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap _BL: Base Layer +/* BL: Base Layer * ,-----------------------. * |MO(OP) | ↑ | BSPC | * | | | | - * |-------|-------|-------| + * |-------+-------+-------| * | <- | ↓ | -> | * | | | | - * |-------|-------|-------| + * |-------+-------+-------| * | 1 | 2 | 3 | * | | | | - * |-------|-------|-------| + * |-------+-------+-------| * | 4 | 5 | 6 | * | | | | - * |-------|-------|-------| + * |-------+-------+-------| * | 7 | 8 | 9 | * | | | | - * |-------|-------|-------| + * |-------+-------+-------| * | 0 | . | = | * | | | | * `-----------------------' @@ -52,23 +52,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_P0, KC_PDOT, KC_PEQL ), -/* Keymap _OP: Operators Layer +/* OP: Operators Layer * ,-----------------------. * |MO(OP) | ↑ | BSPC | * | | | | - * |-------|-------|-------| + * |-------+-------+-------| * | <- | ↓ | -> | * | | | | - * |-------|-------|-------| + * |-------+-------+-------| * | / | * | - | * | | | | - * |-------|-------|-------| + * |-------+-------+-------| * | ( | ) | + | * | | | | - * |-------|-------|-------| + * |-------+-------+-------| * | & | % | ^ | * | | | | - * |-------|-------|-------| + * |-------+-------+-------| * | | | . | = | * | | | | * `-----------------------' diff --git a/keyboards/rookiebwoy/late9/rev1/keymaps/multitap/keymap.c b/keyboards/rookiebwoy/late9/rev1/keymaps/multitap/keymap.c deleted file mode 100644 index e378fb4921f9..000000000000 --- a/keyboards/rookiebwoy/late9/rev1/keymaps/multitap/keymap.c +++ /dev/null @@ -1,235 +0,0 @@ -/* Copyright 2021 rookiebwoy - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include QMK_KEYBOARD_H - -// Layers declarations -enum layers { - _BL -}; - -// Tap Dance declarations -enum { - TD_PNCT, - TD_ABC, - TD_DEF, - TD_GHI, - TD_JKL, - TD_MNO, - TD_PQRS, - TD_TUV, - TD_WXYZ, - TD_SPACE, - TD_UPRCS, -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap _BL: Base Layer - * ,-----------------------. - * |ENTER | ↑ | BSPC | - * | | | | - * |-------|-------|-------| - * | <- | ↓ | -> | - * | | | | - * |-------|-------|-------| - * | 1 .,' | 2 | 3 | - * |?!-:;/ | abc | def | - * |-------|-------|-------| - * | 4 | 5 | 6 | - * | ghi | jkl | mno | - * |-------|-------|-------| - * | 7 | 8 | 9 | - * | pqrs | tuv | wxyz | - * |-------|-------|-------| - * | * | 0 | CAPS | - * | | space | | - * `-----------------------' - */ - [_BL] = LAYOUT( - KC_ENT, KC_UP, KC_BSPC, - KC_LEFT, KC_DOWN, KC_RIGHT, - TD(TD_PNCT), TD(TD_ABC), TD(TD_DEF), - TD(TD_GHI), TD(TD_JKL), TD(TD_MNO), - TD(TD_PQRS), TD(TD_TUV), TD(TD_WXYZ), - KC_PAST, TD(TD_SPACE), TD(TD_UPRCS) - ), -}; - -// Tap Dance cycles -void dance_1 (tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - if (state->interrupted || !state->pressed) return tap_code(KC_DOT); - else return tap_code(KC_1); - } else if (state->count == 2) { - tap_code (KC_COMM); - } else if (state->count == 3) { - tap_code(KC_QUOT); - } else if (state->count == 4) { - tap_code16(KC_QUES); - } else if (state->count == 5) { - tap_code16(KC_EXLM); - } else if (state->count == 6) { - tap_code(KC_MINS); - } else if (state->count == 7) { - tap_code16(KC_COLN); - } else if (state->count == 8) { - tap_code(KC_SCLN); - } else if (state->count == 9) { - tap_code(KC_SLSH); - } else { - reset_tap_dance (state); - } -} - -void dance_2 (tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - if (state->interrupted || !state->pressed) return tap_code(KC_A); - else return tap_code(KC_2); - } else if (state->count == 2) { - tap_code (KC_B); - } else if (state->count == 3) { - tap_code(KC_C); - } else { - reset_tap_dance (state); - } -} - -void dance_3 (tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - if (state->interrupted || !state->pressed) return tap_code(KC_D); - else return tap_code(KC_3); - } else if (state->count == 2) { - tap_code (KC_E); - } else if (state->count == 3) { - tap_code(KC_F); - } else { - reset_tap_dance (state); - } -} - -void dance_4 (tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - if (state->interrupted || !state->pressed) return tap_code(KC_G); - else return tap_code(KC_4); - } else if (state->count == 2) { - tap_code (KC_H); - } else if (state->count == 3) { - tap_code(KC_I); - } else { - reset_tap_dance (state); - } -} - -void dance_5 (tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - if (state->interrupted || !state->pressed) return tap_code(KC_J); - else return tap_code(KC_5); - } else if (state->count == 2) { - tap_code (KC_K); - } else if (state->count == 3) { - tap_code(KC_L); - } else { - reset_tap_dance (state); - } -} - -void dance_6 (tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - if (state->interrupted || !state->pressed) return tap_code(KC_M); - else return tap_code(KC_6); - } else if (state->count == 2) { - tap_code (KC_N); - } else if (state->count == 3) { - tap_code(KC_O); - } else { - reset_tap_dance (state); - } -} - -void dance_7 (tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - if (state->interrupted || !state->pressed) return tap_code(KC_P); - else return tap_code(KC_7); - } else if (state->count == 2) { - tap_code (KC_Q); - } else if (state->count == 3) { - tap_code(KC_R); - } else if (state->count == 4) { - tap_code(KC_S); - } else { - reset_tap_dance (state); - } -} - -void dance_8 (tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - if (state->interrupted || !state->pressed) return tap_code(KC_T); - else return tap_code(KC_8); - } else if (state->count == 2) { - tap_code (KC_U); - } else if (state->count == 3) { - tap_code(KC_V); - } else { - reset_tap_dance (state); - } -} - -void dance_9 (tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - if (state->interrupted || !state->pressed) return tap_code(KC_W); - else return tap_code(KC_9); - } else if (state->count == 2) { - tap_code (KC_X); - } else if (state->count == 3) { - tap_code(KC_Y); - } else if (state->count == 4) { - tap_code(KC_Z); - } else { - reset_tap_dance (state); - } -} - -void dance_0 (tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - if (state->interrupted || !state->pressed) return tap_code(KC_SPACE); - else return tap_code(KC_0); - } else { - reset_tap_dance (state); - } -} - -void dance_maiusc (tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - if (state->interrupted || !state->pressed) return set_oneshot_mods(MOD_BIT(KC_LSFT)); - else return tap_code(KC_CAPS); - } else { - reset_tap_dance (state); - } -} - -// Tap Dance actions -tap_dance_action_t tap_dance_actions[] = { - [TD_PNCT] = ACTION_TAP_DANCE_FN (dance_1), - [TD_ABC] = ACTION_TAP_DANCE_FN (dance_2), - [TD_DEF] = ACTION_TAP_DANCE_FN (dance_3), - [TD_GHI] = ACTION_TAP_DANCE_FN (dance_4), - [TD_JKL] = ACTION_TAP_DANCE_FN (dance_5), - [TD_MNO] = ACTION_TAP_DANCE_FN (dance_6), - [TD_PQRS] = ACTION_TAP_DANCE_FN (dance_7), - [TD_TUV] = ACTION_TAP_DANCE_FN (dance_8), - [TD_WXYZ] = ACTION_TAP_DANCE_FN (dance_9), - [TD_SPACE] = ACTION_TAP_DANCE_FN (dance_0), - [TD_UPRCS] = ACTION_TAP_DANCE_FN (dance_maiusc), -}; diff --git a/keyboards/rookiebwoy/late9/rev1/keymaps/multitap/readme.md b/keyboards/rookiebwoy/late9/rev1/keymaps/multitap/readme.md deleted file mode 100644 index 2b5136c2b8ec..000000000000 --- a/keyboards/rookiebwoy/late9/rev1/keymaps/multitap/readme.md +++ /dev/null @@ -1,3 +0,0 @@ -# LATE-9 multitap keymap - -This is the intended LATE-9 layout with multitap `ON` and old mobile phone look-a-like layout.. diff --git a/keyboards/rookiebwoy/late9/rev1/keymaps/multitap/rules.mk b/keyboards/rookiebwoy/late9/rev1/keymaps/multitap/rules.mk deleted file mode 100644 index 4141c3e7a422..000000000000 --- a/keyboards/rookiebwoy/late9/rev1/keymaps/multitap/rules.mk +++ /dev/null @@ -1,2 +0,0 @@ -# Enable Tap Dance feature -TAP_DANCE_ENABLE = yes diff --git a/keyboards/rookiebwoy/late9/rev1/keymaps/via/keymap.c b/keyboards/rookiebwoy/late9/rev1/keymaps/via/keymap.c new file mode 100644 index 000000000000..f93958fe8f3a --- /dev/null +++ b/keyboards/rookiebwoy/late9/rev1/keymaps/via/keymap.c @@ -0,0 +1,84 @@ +/* Copyright 2021 rookiebwoy + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + +// Layers declarations +enum layers { + _BL, + _OL +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* BL: Base Layer + * ,-----------------------. + * |MO(OP) | ↑ | BSPC | + * | | | | + * |-------+-------+-------| + * | <- | ↓ | -> | + * | | | | + * |-------+-------+-------| + * | 1 | 2 | 3 | + * | | | | + * |-------+-------+-------| + * | 4 | 5 | 6 | + * | | | | + * |-------+-------+-------| + * | 7 | 8 | 9 | + * | | | | + * |-------+-------+-------| + * | 0 | . | = | + * | | | | + * `-----------------------' + */ + [_BL] = LAYOUT( + MO(1), KC_UP, KC_BSPC, + KC_LEFT, KC_DOWN, KC_RIGHT, + KC_P1, KC_P2, KC_P3, + KC_P4, KC_P5, KC_P6, + KC_P7, KC_P8, KC_P9, + KC_P0, KC_PDOT, KC_PEQL + ), + +/* OP: Operators Layer + * ,-----------------------. + * |MO(OP) | ↑ | BSPC | + * | | | | + * |-------+-------+-------| + * | <- | ↓ | -> | + * | | | | + * |-------+-------+-------| + * | / | * | - | + * | | | | + * |-------+-------+-------| + * | ( | ) | + | + * | | | | + * |-------+-------+-------| + * | & | % | ^ | + * | | | | + * |-------+-------+-------| + * | | | . | = | + * | | | | + * `-----------------------' + */ + [_OL] = LAYOUT( + MO(1), KC_UP, KC_BSPC, + KC_LEFT, KC_DOWN, KC_RIGHT, + KC_PSLS, KC_PAST, KC_PMNS, + LSFT(KC_9), LSFT(KC_0), KC_PPLS, + LSFT(KC_7), LSFT(KC_5), LSFT(KC_6), + LSFT(KC_BSLS), KC_PDOT, KC_PEQL + ), +}; \ No newline at end of file diff --git a/keyboards/rookiebwoy/late9/rev1/keymaps/via/rules.mk b/keyboards/rookiebwoy/late9/rev1/keymaps/via/rules.mk new file mode 100644 index 000000000000..036bd6d1c3ec --- /dev/null +++ b/keyboards/rookiebwoy/late9/rev1/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes \ No newline at end of file diff --git a/keyboards/rookiebwoy/late9/rev1/rules.mk b/keyboards/rookiebwoy/late9/rev1/rules.mk index 874033acc902..6e7633bfe015 100644 --- a/keyboards/rookiebwoy/late9/rev1/rules.mk +++ b/keyboards/rookiebwoy/late9/rev1/rules.mk @@ -1,14 +1 @@ -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite -MOUSEKEY_ENABLE = no # Mouse keys -EXTRAKEY_ENABLE = no # Audio control and System control -CONSOLE_ENABLE = no # Console for debug -COMMAND_ENABLE = no # Commands for debug and configuration -NKRO_ENABLE = yes # Enable N-Key Rollover -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality -RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow -AUDIO_ENABLE = no # Audio output - -OLED_ENABLE = yes +# This file intentionally left blank From f9feeb981978313a8ab45c9595e44f5bceb324fc Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Mon, 19 Feb 2024 15:37:51 +0000 Subject: [PATCH 26/35] OS Detection - Entire file should not be wrapped with ifdef (#23108) --- quantum/os_detection.c | 70 +++++++++++++++++++----------------------- quantum/os_detection.h | 18 +++++------ 2 files changed, 39 insertions(+), 49 deletions(-) diff --git a/quantum/os_detection.c b/quantum/os_detection.c index b674f05b3546..96b026e2471c 100644 --- a/quantum/os_detection.c +++ b/quantum/os_detection.c @@ -16,24 +16,32 @@ #include "os_detection.h" -#ifdef OS_DETECTION_ENABLE - -# include -# include "timer.h" -# ifdef OS_DETECTION_KEYBOARD_RESET -# include "quantum.h" -# endif +#include +#include "timer.h" +#ifdef OS_DETECTION_KEYBOARD_RESET +# include "quantum.h" +#endif -# ifdef OS_DETECTION_DEBUG_ENABLE -# include "eeconfig.h" -# include "eeprom.h" -# include "print.h" +#ifdef OS_DETECTION_DEBUG_ENABLE +# include "eeconfig.h" +# include "eeprom.h" +# include "print.h" -# define STORED_USB_SETUPS 50 -# define EEPROM_USER_OFFSET (uint8_t*)EECONFIG_SIZE +# define STORED_USB_SETUPS 50 +# define EEPROM_USER_OFFSET (uint8_t*)EECONFIG_SIZE static uint16_t usb_setups[STORED_USB_SETUPS]; -# endif +#endif + +#ifndef OS_DETECTION_DEBOUNCE +# define OS_DETECTION_DEBOUNCE 200 +#endif + +// 2s should always be more than enough (otherwise, you may have other issues) +#if OS_DETECTION_DEBOUNCE > 2000 +# undef OS_DETECTION_DEBOUNCE +# define OS_DETECTION_DEBOUNCE 2000 +#endif struct setups_data_t { uint8_t count; @@ -50,18 +58,6 @@ struct setups_data_t setups_data = { .cnt_ff = 0, }; -# ifndef OS_DETECTION_DEBOUNCE -# define OS_DETECTION_DEBOUNCE 200 -# endif - -// 2s should always be more than enough (otherwise, you may have other issues) -# if OS_DETECTION_DEBOUNCE > 2000 -# undef OS_DETECTION_DEBOUNCE -# define OS_DETECTION_DEBOUNCE 2000 -# endif - -typedef uint16_t debouncing_t; - static volatile os_variant_t detected_os = OS_UNSURE; static os_variant_t reported_os = OS_UNSURE; @@ -89,13 +85,13 @@ void os_detection_task(void) { } } } -# ifdef OS_DETECTION_KEYBOARD_RESET +#ifdef OS_DETECTION_KEYBOARD_RESET // resetting the keyboard on the USB device state change callback results in instability, so delegate that to this task // only take action if it's been stable at least once, to avoid issues with some KVMs else if (current_usb_device_state == USB_DEVICE_STATE_INIT && reported_usb_device_state != USB_DEVICE_STATE_INIT) { soft_reset_keyboard(); } -# endif +#endif } __attribute__((weak)) bool process_detected_host_os_kb(os_variant_t detected_os) { @@ -108,9 +104,9 @@ __attribute__((weak)) bool process_detected_host_os_user(os_variant_t detected_o // Some collected sequences of wLength can be found in tests. void process_wlength(const uint16_t w_length) { -# ifdef OS_DETECTION_DEBUG_ENABLE +#ifdef OS_DETECTION_DEBUG_ENABLE usb_setups[setups_data.count] = w_length; -# endif +#endif setups_data.count++; setups_data.last_wlength = w_length; if (w_length == 0x2) { @@ -174,23 +170,23 @@ void os_detection_notify_usb_device_state_change(enum usb_device_state usb_devic debouncing = true; } -# if defined(SPLIT_KEYBOARD) && defined(SPLIT_DETECTED_OS_ENABLE) +#if defined(SPLIT_KEYBOARD) && defined(SPLIT_DETECTED_OS_ENABLE) void slave_update_detected_host_os(os_variant_t os) { detected_os = os; last_time = timer_read_fast(); debouncing = true; } -# endif +#endif -# ifdef OS_DETECTION_DEBUG_ENABLE +#ifdef OS_DETECTION_DEBUG_ENABLE void print_stored_setups(void) { -# ifdef CONSOLE_ENABLE +# ifdef CONSOLE_ENABLE uint8_t cnt = eeprom_read_byte(EEPROM_USER_OFFSET); for (uint16_t i = 0; i < cnt; ++i) { uint16_t* addr = (uint16_t*)EEPROM_USER_OFFSET + i * sizeof(uint16_t) + sizeof(uint8_t); xprintf("i: %d, wLength: 0x%02X\n", i, eeprom_read_word(addr)); } -# endif +# endif } void store_setups_in_eeprom(void) { @@ -201,6 +197,4 @@ void store_setups_in_eeprom(void) { } } -# endif // OS_DETECTION_DEBUG_ENABLE - -#endif +#endif // OS_DETECTION_DEBUG_ENABLE diff --git a/quantum/os_detection.h b/quantum/os_detection.h index 470f30943a6f..b8cd89833595 100644 --- a/quantum/os_detection.h +++ b/quantum/os_detection.h @@ -16,11 +16,9 @@ #pragma once -#ifdef OS_DETECTION_ENABLE - -# include -# include -# include "usb_device_state.h" +#include +#include +#include "usb_device_state.h" typedef enum { OS_UNSURE, @@ -40,13 +38,11 @@ void os_detection_task(void); bool process_detected_host_os_kb(os_variant_t os); bool process_detected_host_os_user(os_variant_t os); -# if defined(SPLIT_KEYBOARD) && defined(SPLIT_DETECTED_OS_ENABLE) +#if defined(SPLIT_KEYBOARD) && defined(SPLIT_DETECTED_OS_ENABLE) void slave_update_detected_host_os(os_variant_t os); -# endif +#endif -# ifdef OS_DETECTION_DEBUG_ENABLE +#ifdef OS_DETECTION_DEBUG_ENABLE void print_stored_setups(void); void store_setups_in_eeprom(void); -# endif - -#endif // OS_DETECTION_ENABLE +#endif From 59dd706aef9dee7f749c68075b6a28cb98078581 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Mon, 19 Feb 2024 19:48:59 +0000 Subject: [PATCH 27/35] Fix make clean test:os_detection (#23112) --- quantum/os_detection/tests/os_detection.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/quantum/os_detection/tests/os_detection.cpp b/quantum/os_detection/tests/os_detection.cpp index 11e93fdea8fe..a9f671156b83 100644 --- a/quantum/os_detection/tests/os_detection.cpp +++ b/quantum/os_detection/tests/os_detection.cpp @@ -45,6 +45,8 @@ os_variant_t check_sequence(const std::vector &w_lengths) { bool process_detected_host_os_kb(os_variant_t os) { reported_count = reported_count + 1; reported_os = os; + + return true; } void assert_not_reported(void) { From f3ceefd0b8035684b547975c51918b5531a512c2 Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Mon, 19 Feb 2024 23:56:41 +0000 Subject: [PATCH 28/35] code format --- drivers/painter/gc9xxx/qp_gc9107_opcodes.h | 40 +++++++++++----------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/drivers/painter/gc9xxx/qp_gc9107_opcodes.h b/drivers/painter/gc9xxx/qp_gc9107_opcodes.h index ed35e66dabdf..e9b308eb49b8 100644 --- a/drivers/painter/gc9xxx/qp_gc9107_opcodes.h +++ b/drivers/painter/gc9xxx/qp_gc9107_opcodes.h @@ -6,29 +6,29 @@ // Quantum Painter GC9107 command opcodes //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#define GC9107_GET_POWER_MODE 0x0A // Get power mode -#define GC9107_GET_MADCTL 0x0B // Get MADCTL -#define GC9107_GET_PIXEL_FMT 0x0C // Get pixel format -#define GC9107_GET_IMAGE_FMT 0x0D // Get image format -#define GC9107_GET_SIGNAL_MODE 0x0E // Get signal mode -#define GC9107_GET_DIAG_RESULT 0x0F // Get self-diagnostic results +#define GC9107_GET_POWER_MODE 0x0A // Get power mode +#define GC9107_GET_MADCTL 0x0B // Get MADCTL +#define GC9107_GET_PIXEL_FMT 0x0C // Get pixel format +#define GC9107_GET_IMAGE_FMT 0x0D // Get image format +#define GC9107_GET_SIGNAL_MODE 0x0E // Get signal mode +#define GC9107_GET_DIAG_RESULT 0x0F // Get self-diagnostic results -#define GC9107_SET_FRAME_RATE 0xA8 // Set frame rate -#define GC9107_SET_COMPLEMENT_RGB 0xAC // Set complement Principle RGB -#define GC9107_SET_BLANK_PORCH 0xAD // Set blank porch control, 0;front_porch[6:0],0;back_porch[6:0] -#define GC9107_SET_FUNCTION_CTL1 0xB1 // Set access to AVDD_VCL_CLK and VGH_VGL_CLK commands -#define GC9107_SET_FUNCTION_CTL2 0xB2 // Set access to VGH, VGH control commands -#define GC9107_SET_FUNCTION_CTL3 0xB3 // Set access to Gamma control commands -#define GC9107_SET_DISPLAY_INVERSION 0xB4 // Set Display Inversion control -#define GC9107_SET_FUNCTION_CTL6 0xB6 // Set access to commands SET_FRAME_RATE, SET_COMPLEMENT_RGB and SET_BLANK_PORCH -#define GC9107_SET_CUSTOM_ID_INFO 0xD3 // Set customized display id information -#define GC9107_AVDD_VCL_CLK 0xE3 // AVDD_CLK -#define GC9107_SET_VGH 0xE8 // Set VGH -#define GC9107_SET_VGL 0xE9 // Set VGL -#define GC9107_SET_VGH_VGL_CLK 0xEA // Set VGH and VGL clock divisors +#define GC9107_SET_FRAME_RATE 0xA8 // Set frame rate +#define GC9107_SET_COMPLEMENT_RGB 0xAC // Set complement Principle RGB +#define GC9107_SET_BLANK_PORCH 0xAD // Set blank porch control, 0;front_porch[6:0],0;back_porch[6:0] +#define GC9107_SET_FUNCTION_CTL1 0xB1 // Set access to AVDD_VCL_CLK and VGH_VGL_CLK commands +#define GC9107_SET_FUNCTION_CTL2 0xB2 // Set access to VGH, VGH control commands +#define GC9107_SET_FUNCTION_CTL3 0xB3 // Set access to Gamma control commands +#define GC9107_SET_DISPLAY_INVERSION 0xB4 // Set Display Inversion control +#define GC9107_SET_FUNCTION_CTL6 0xB6 // Set access to commands SET_FRAME_RATE, SET_COMPLEMENT_RGB and SET_BLANK_PORCH +#define GC9107_SET_CUSTOM_ID_INFO 0xD3 // Set customized display id information +#define GC9107_AVDD_VCL_CLK 0xE3 // AVDD_CLK +#define GC9107_SET_VGH 0xE8 // Set VGH +#define GC9107_SET_VGL 0xE9 // Set VGL +#define GC9107_SET_VGH_VGL_CLK 0xEA // Set VGH and VGL clock divisors //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// GC9107 Parameter constants +// GC9107 Parameter constants // Parameter values for // GC9107_SET_PIXEL_FORMAT From 12450d7f9a122cff7256a92d697cc0e81face297 Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Tue, 20 Feb 2024 00:03:06 +0000 Subject: [PATCH 29/35] Revert "Fix make clean test:os_detection (#23112)" This reverts commit 59dd706aef9dee7f749c68075b6a28cb98078581. --- quantum/os_detection/tests/os_detection.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/quantum/os_detection/tests/os_detection.cpp b/quantum/os_detection/tests/os_detection.cpp index a9f671156b83..11e93fdea8fe 100644 --- a/quantum/os_detection/tests/os_detection.cpp +++ b/quantum/os_detection/tests/os_detection.cpp @@ -45,8 +45,6 @@ os_variant_t check_sequence(const std::vector &w_lengths) { bool process_detected_host_os_kb(os_variant_t os) { reported_count = reported_count + 1; reported_os = os; - - return true; } void assert_not_reported(void) { From 29bc2d82c301753ece8273c1cc6e6e451f5b8769 Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Tue, 20 Feb 2024 00:04:21 +0000 Subject: [PATCH 30/35] Revert "Fixup boardsource/equals (#23106)" This reverts commit 35602bc5b936732852bb71208509f5d383526d59. --- keyboards/boardsource/equals/48/info.json | 47 +++++++++++++++++++ keyboards/boardsource/equals/60/info.json | 47 +++++++++++++++++++ keyboards/boardsource/equals/avr/info.json | 47 +++++++++++++++++++ keyboards/boardsource/equals/avr/rules.mk | 1 - keyboards/boardsource/equals/equals.c | 46 ++---------------- keyboards/boardsource/equals/info.json | 54 ++-------------------- keyboards/boardsource/equals/readme.md | 2 +- keyboards/boardsource/equals/ui.c | 40 ++++++++++++++++ 8 files changed, 191 insertions(+), 93 deletions(-) delete mode 100644 keyboards/boardsource/equals/avr/rules.mk create mode 100644 keyboards/boardsource/equals/ui.c diff --git a/keyboards/boardsource/equals/48/info.json b/keyboards/boardsource/equals/48/info.json index 054779f6fe1a..63561f4c5979 100644 --- a/keyboards/boardsource/equals/48/info.json +++ b/keyboards/boardsource/equals/48/info.json @@ -14,6 +14,53 @@ "pin": "GP21" }, "rgb_matrix": { + "driver": "ws2812", + "max_brightness": 150, + "animations": { + "alphas_mods": true, + "band_pinwheel_sat": true, + "band_pinwheel_val": true, + "band_sat": true, + "band_spiral_sat": true, + "band_spiral_val": true, + "band_val": true, + "breathing": true, + "cycle_all": true, + "cycle_left_right": true, + "cycle_out_in": true, + "cycle_out_in_dual": true, + "cycle_pinwheel": true, + "cycle_spiral": true, + "cycle_up_down": true, + "digital_rain": true, + "dual_beacon": true, + "gradient_left_right": true, + "gradient_up_down": true, + "hue_breathing": true, + "hue_pendulum": true, + "hue_wave": true, + "jellybean_raindrops": true, + "multisplash": true, + "pixel_flow": true, + "pixel_fractal": true, + "pixel_rain": true, + "rainbow_beacon": true, + "rainbow_moving_chevron": true, + "rainbow_pinwheels": true, + "raindrops": true, + "solid_multisplash": true, + "solid_reactive": true, + "solid_reactive_cross": true, + "solid_reactive_multicross": true, + "solid_reactive_multinexus": true, + "solid_reactive_multiwide": true, + "solid_reactive_nexus": true, + "solid_reactive_simple": true, + "solid_reactive_wide": true, + "solid_splash": true, + "splash": true, + "typing_heatmap": true + }, "layout": [ { "flags": 2, "x": 220, "y": 17 }, { "flags": 2, "x": 172, "y": 17 }, diff --git a/keyboards/boardsource/equals/60/info.json b/keyboards/boardsource/equals/60/info.json index da3fc3691a64..355e434b4e5d 100644 --- a/keyboards/boardsource/equals/60/info.json +++ b/keyboards/boardsource/equals/60/info.json @@ -14,6 +14,53 @@ "pin": "GP21" }, "rgb_matrix": { + "driver": "ws2812", + "max_brightness": 150, + "animations": { + "alphas_mods": true, + "band_pinwheel_sat": true, + "band_pinwheel_val": true, + "band_sat": true, + "band_spiral_sat": true, + "band_spiral_val": true, + "band_val": true, + "breathing": true, + "cycle_all": true, + "cycle_left_right": true, + "cycle_out_in": true, + "cycle_out_in_dual": true, + "cycle_pinwheel": true, + "cycle_spiral": true, + "cycle_up_down": true, + "digital_rain": true, + "dual_beacon": true, + "gradient_left_right": true, + "gradient_up_down": true, + "hue_breathing": true, + "hue_pendulum": true, + "hue_wave": true, + "jellybean_raindrops": true, + "multisplash": true, + "pixel_flow": true, + "pixel_fractal": true, + "pixel_rain": true, + "rainbow_beacon": true, + "rainbow_moving_chevron": true, + "rainbow_pinwheels": true, + "raindrops": true, + "solid_multisplash": true, + "solid_reactive": true, + "solid_reactive_cross": true, + "solid_reactive_multicross": true, + "solid_reactive_multinexus": true, + "solid_reactive_multiwide": true, + "solid_reactive_nexus": true, + "solid_reactive_simple": true, + "solid_reactive_wide": true, + "solid_splash": true, + "splash": true, + "typing_heatmap": true + }, "layout": [ { "flags": 2, "x": 220, "y": 17 }, { "flags": 2, "x": 172, "y": 17 }, diff --git a/keyboards/boardsource/equals/avr/info.json b/keyboards/boardsource/equals/avr/info.json index 942feba4ecd8..bbade34e6383 100644 --- a/keyboards/boardsource/equals/avr/info.json +++ b/keyboards/boardsource/equals/avr/info.json @@ -13,6 +13,53 @@ "pin": "C6" }, "rgb_matrix": { + "driver": "ws2812", + "max_brightness": 150, + "animations": { + "alphas_mods": true, + "band_pinwheel_sat": true, + "band_pinwheel_val": true, + "band_sat": true, + "band_spiral_sat": true, + "band_spiral_val": true, + "band_val": true, + "breathing": true, + "cycle_all": true, + "cycle_left_right": true, + "cycle_out_in": true, + "cycle_out_in_dual": true, + "cycle_pinwheel": true, + "cycle_spiral": true, + "cycle_up_down": true, + "digital_rain": true, + "dual_beacon": true, + "gradient_left_right": true, + "gradient_up_down": true, + "hue_breathing": true, + "hue_pendulum": true, + "hue_wave": true, + "jellybean_raindrops": true, + "multisplash": true, + "pixel_flow": true, + "pixel_fractal": true, + "pixel_rain": true, + "rainbow_beacon": true, + "rainbow_moving_chevron": true, + "rainbow_pinwheels": true, + "raindrops": true, + "solid_multisplash": true, + "solid_reactive": true, + "solid_reactive_cross": true, + "solid_reactive_multicross": true, + "solid_reactive_multinexus": true, + "solid_reactive_multiwide": true, + "solid_reactive_nexus": true, + "solid_reactive_simple": true, + "solid_reactive_wide": true, + "solid_splash": true, + "splash": true, + "typing_heatmap": true + }, "layout": [ { "flags": 2, "x": 220, "y": 17 }, { "flags": 2, "x": 172, "y": 17 }, diff --git a/keyboards/boardsource/equals/avr/rules.mk b/keyboards/boardsource/equals/avr/rules.mk deleted file mode 100644 index 6e7633bfe015..000000000000 --- a/keyboards/boardsource/equals/avr/rules.mk +++ /dev/null @@ -1 +0,0 @@ -# This file intentionally left blank diff --git a/keyboards/boardsource/equals/equals.c b/keyboards/boardsource/equals/equals.c index 074fa3df3e2d..8eb933e70d21 100644 --- a/keyboards/boardsource/equals/equals.c +++ b/keyboards/boardsource/equals/equals.c @@ -1,54 +1,18 @@ // Copyright 2023 @boardsource // SPDX-License-Identifier: GPL-2.0-or-later - #include "quantum.h" +__attribute__((weak)) void ui_init(void) {}; +__attribute__((weak)) void ui_task(void) {}; #ifdef QUANTUM_PAINTER_ENABLE -#include "qp.h" -#include "qp_st7735.h" -#include "graphics/thintel15.qff.c" - -static painter_device_t oled; -static painter_font_handle_t font; - -__attribute__((weak)) void ui_init(void) { - oled = qp_st7735_make_spi_device(128, 160, OLED_CS_PIN, OLED_DC_PIN, OLED_RST_PIN, 8, 0); - font = qp_load_font_mem(font_thintel15); - qp_init(oled, QP_ROTATION_0); - qp_rect(oled, 0, 0, 130, 162, 0, 0, 0, true); - qp_rect(oled, 20, 20, 108, 60, 55, 55, 55, true); - qp_rect(oled, 20, 80, 108, 120, 55, 55, 55, true); - qp_flush(oled); -} - -__attribute__((weak)) void ui_task(void) { - static const char *text = "Layer:"; - int16_t width = qp_textwidth(font, text); - qp_drawtext(oled, 20, 140, font, text); - - switch (get_highest_layer(layer_state)) { - case 0: - qp_drawtext(oled, (20 + width), 140, font, "QWERTY"); - break; - case 1: - qp_drawtext(oled, (20 + width), 140, font, "SYMBOL"); - break; - case 2: - qp_drawtext(oled, (20 + width), 140, font, "NUMBER"); - break; - default: - qp_drawtext(oled, (20 + width), 140, font, "_PANIC_"); - break; - } -} - void keyboard_post_init_kb(void) { + // Init the display ui_init(); keyboard_post_init_user(); } void housekeeping_task_kb(void) { + // Draw the display ui_task(); - housekeeping_task_user(); } -#endif // QUANTUM_PAINTER_ENABLE +#endif //QUANTUM_PAINTER_ENABLE diff --git a/keyboards/boardsource/equals/info.json b/keyboards/boardsource/equals/info.json index c6d6245dbfc5..bed8ec2640c5 100644 --- a/keyboards/boardsource/equals/info.json +++ b/keyboards/boardsource/equals/info.json @@ -4,64 +4,18 @@ "diode_direction": "COL2ROW", "features": { "bootmagic": true, + "command": false, + "console": false, "extrakey": true, "mousekey": true, "nkro": true, "rgb_matrix": true }, + "url": "", "usb": { "device_version": "1.0.0", "pid": "0x7688", "vid": "0x4273" - }, - "rgb_matrix": { - "driver": "ws2812", - "max_brightness": 150, - "sleep": true, - "animations": { - "alphas_mods": true, - "band_pinwheel_sat": true, - "band_pinwheel_val": true, - "band_sat": true, - "band_spiral_sat": true, - "band_spiral_val": true, - "band_val": true, - "breathing": true, - "cycle_all": true, - "cycle_left_right": true, - "cycle_out_in": true, - "cycle_out_in_dual": true, - "cycle_pinwheel": true, - "cycle_spiral": true, - "cycle_up_down": true, - "digital_rain": true, - "dual_beacon": true, - "gradient_left_right": true, - "gradient_up_down": true, - "hue_breathing": true, - "hue_pendulum": true, - "hue_wave": true, - "jellybean_raindrops": true, - "multisplash": true, - "pixel_flow": true, - "pixel_fractal": true, - "pixel_rain": true, - "rainbow_beacon": true, - "rainbow_moving_chevron": true, - "rainbow_pinwheels": true, - "raindrops": true, - "solid_multisplash": true, - "solid_reactive": true, - "solid_reactive_cross": true, - "solid_reactive_multicross": true, - "solid_reactive_multinexus": true, - "solid_reactive_multiwide": true, - "solid_reactive_nexus": true, - "solid_reactive_simple": true, - "solid_reactive_wide": true, - "solid_splash": true, - "splash": true, - "typing_heatmap": true - } } + } diff --git a/keyboards/boardsource/equals/readme.md b/keyboards/boardsource/equals/readme.md index 82d24b18145d..9c5d48f5c297 100644 --- a/keyboards/boardsource/equals/readme.md +++ b/keyboards/boardsource/equals/readme.md @@ -3,7 +3,7 @@ ![equals](https://i.imgur.com/c3adFqsh.jpeg) * Keyboard Maintainer: [Cole Smith](https://github.com/boardsource) -* Hardware Supported: Equals PCB w/ RP2040 or Equals Kit w/ Pro Micro +* Hardware Supported: Equals PCB w/ RP2040 * Hardware Availability: [boardsource](https://boardsource.xyz) Make example for this keyboard (after setting up your build environment): diff --git a/keyboards/boardsource/equals/ui.c b/keyboards/boardsource/equals/ui.c new file mode 100644 index 000000000000..f953fc4c8896 --- /dev/null +++ b/keyboards/boardsource/equals/ui.c @@ -0,0 +1,40 @@ +// Copyright 2023 Cole Smith (@boardsource) +// SPDX-License-Identifier: GPL-2.0-or-later +#include +#include "qp.h" +#include "qp_st7735.h" +#include "graphics/thintel15.qff.c" + +static painter_device_t oled; +static painter_font_handle_t font; + +__attribute__((weak)) void ui_init(void) { + oled = qp_st7735_make_spi_device(128, 160, OLED_CS_PIN, OLED_DC_PIN, OLED_RST_PIN, 8, 0); + font = qp_load_font_mem(font_thintel15); + qp_init(oled, QP_ROTATION_0); + qp_rect(oled, 0, 0, 130, 162, 0, 0, 0, true); + qp_rect(oled, 20, 20, 108, 60, 55, 55, 55, true); + qp_rect(oled, 20, 80, 108, 120, 55, 55, 55, true); + qp_flush(oled); +} + +__attribute__((weak)) void ui_task(void) { + static const char *text = "Layer:"; + int16_t width = qp_textwidth(font, text); + qp_drawtext(oled, 20, 140, font, text); + + switch (get_highest_layer(layer_state)) { + case 0: + qp_drawtext(oled, (20 + width), 140, font, "QWERTY"); + break; + case 1: + qp_drawtext(oled, (20 + width), 140, font, "SYMBOL"); + break; + case 2: + qp_drawtext(oled, (20 + width), 140, font, "NUMBER"); + break; + default: + qp_drawtext(oled, (20 + width), 140, font, "_PANIC_"); + break; + } +} From 44302416c0cad9d526f9859feef3cf126e569bbe Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Tue, 20 Feb 2024 00:04:22 +0000 Subject: [PATCH 31/35] Revert "Manual user keymap removal (#23104)" This reverts commit 9b957f08d8214f2d1508bec99029325a91940924. --- .../gergoplex/keymaps/georgepetri/combos.def | 11 + .../gergoplex/keymaps/georgepetri/config.h | 31 + .../keymaps/georgepetri/gergoplex.def | 7 + .../gergoplex/keymaps/georgepetri/keymap.c | 212 +++++ .../gergoplex/keymaps/georgepetri/readme.md | 6 + .../gergoplex/keymaps/georgepetri/rules.mk | 20 + .../gergoplex/keymaps/tgrosinger/combos.def | 11 + .../gergoplex/keymaps/tgrosinger/config.h | 4 + .../keymaps/tgrosinger/gergoplex.def | 17 + .../gergoplex/keymaps/tgrosinger/keymap.c | 286 +++++++ .../gergoplex/keymaps/tgrosinger/readme.md | 12 + .../gergoplex/keymaps/tgrosinger/rules.mk | 18 + keyboards/geonworks/w1_at/keymaps/zq/keymap.c | 119 +++ .../geonworks/w1_at/keymaps/zq/readme.md | 21 + keyboards/geonworks/w1_at/keymaps/zq/rules.mk | 1 + .../p65/ansi/keymaps/achrovisual/keymap.c | 56 ++ .../p65/ansi/keymaps/achrovisual/readme.md | 1 + .../keymaps/achrovisual/rgb_matrix_user.inc | 72 ++ .../p65/ansi/keymaps/achrovisual/rules.mk | 1 + .../gmmk2/p65/ansi/keymaps/thekorn/keymap.c | 44 + .../gmmk2/p65/ansi/keymaps/thekorn/readme.md | 1 + .../pro/rev1/iso/keymaps/chofstede/keymap.c | 107 +++ .../pro/rev1/iso/keymaps/chofstede/readme.md | 8 + .../rev1/iso/keymaps/falkecarlsen/keymap.c | 72 ++ .../rev1/iso/keymaps/falkecarlsen/readme.md | 8 + .../solder/keymaps/dangjoeltang/keymap.c | 232 +++++ .../solder/keymaps/dangjoeltang/readme.md | 9 + .../think65/solder/keymaps/yt/config.h | 19 + .../think65/solder/keymaps/yt/keymap.c | 139 +++ .../think65/solder/keymaps/yt/readme.md | 3 + .../think65/solder/keymaps/yt/rules.mk | 5 + .../hadron/ver3/keymaps/sebaslayout/keymap.c | 43 + .../hadron/ver3/keymaps/sebaslayout/readme.md | 7 + .../handwired/aim65/keymaps/bonnee/keymap.c | 42 + .../baredev/rev1/keymaps/manoshu/keymap.c | 99 +++ .../baredev/rev1/keymaps/manoshu/readme.md | 16 + .../handwired/bento/keymaps/cbc02009/keymap.c | 42 + .../4x5_5/keymaps/ssedrick/keymap.c | 89 ++ .../5x6/keymaps/nabos/config.h | 21 + .../5x6/keymaps/nabos/keymap.c | 75 ++ .../5x6/keymaps/squirrel/config.h | 49 ++ .../5x6/keymaps/squirrel/keymap.c | 106 +++ .../5x6/keymaps/squirrel/rules.mk | 1 + .../6x6/keymaps/happysalada/keymap.c | 167 ++++ .../k_numpad17/keymaps/karlssn/keymap.c | 61 ++ .../k_numpad17/keymaps/karlssn/rules.mk | 1 + .../lagrange/keymaps/dpapavas/config.h | 22 + .../lagrange/keymaps/dpapavas/keymap.c | 202 +++++ .../lagrange/keymaps/dpapavas/rules.mk | 4 + .../handwired/marauder/keymaps/orvia/keymap.c | 199 +++++ .../handwired/marauder/keymaps/orvia/rules.mk | 3 + .../handwired/pteron/keymaps/FSund/keymap.c | 116 +++ .../pteron/keymaps/alzafacon/config.h | 22 + .../pteron/keymaps/alzafacon/keymap.c | 120 +++ .../pteron/keymaps/alzafacon/readme.md | 4 + .../pteron/keymaps/alzafacon/rules.mk | 2 + .../selene/keymaps/bpendragon/keymap.c | 43 + .../steamvan/keymaps/jmdaly/keymap.c | 64 ++ .../steamvan/keymaps/jmdaly/readme.md | 1 + .../handwired/z150/keymaps/zyxx/keymap.c | 65 ++ .../helix/rev2/keymaps/fraanrosi/config.h | 64 ++ .../helix/rev2/keymaps/fraanrosi/keymap.c | 288 +++++++ .../helix/rev2/keymaps/fraanrosi/readme.md | 40 + .../helix/rev2/keymaps/fraanrosi/rules.mk | 24 + keyboards/helix/rev2/keymaps/froggy/config.h | 50 ++ .../helix/rev2/keymaps/froggy/helixfont.h | 235 +++++ keyboards/helix/rev2/keymaps/froggy/keymap.c | 696 +++++++++++++++ keyboards/helix/rev2/keymaps/froggy/readme.md | 83 ++ keyboards/helix/rev2/keymaps/froggy/rules.mk | 27 + .../helix/rev2/keymaps/froggy_106/config.h | 47 + .../helix/rev2/keymaps/froggy_106/helixfont.h | 235 +++++ .../helix/rev2/keymaps/froggy_106/keymap.c | 810 ++++++++++++++++++ .../helix/rev2/keymaps/froggy_106/readme.md | 85 ++ .../helix/rev2/keymaps/froggy_106/rules.mk | 27 + keyboards/hotdox76v2/keymaps/dancxjo/config.h | 6 + keyboards/hotdox76v2/keymaps/dancxjo/keymap.c | 177 ++++ keyboards/hotdox76v2/keymaps/dancxjo/rules.mk | 4 + .../hs60/v2/hhkb/keymaps/goatmaster/config.h | 22 + .../hs60/v2/hhkb/keymaps/goatmaster/keymap.c | 71 ++ .../hs60/v2/hhkb/keymaps/goatmaster/readme.md | 6 + .../hs60/v2/hhkb/keymaps/goatmaster/rules.mk | 1 + .../keymaps/oncesavedgaming/keymap.c | 23 + .../lfk78/keymaps/ca178858/keymap.c | 136 +++ .../lfk78/keymaps/ca178858/readme.md | 1 + .../lfk78/keymaps/ca178858/rules.mk | 3 + .../lfk87/keymaps/ca178858/keymap.c | 170 ++++ .../lfk87/keymaps/ca178858/readme.md | 1 + .../lfk87/keymaps/ca178858/rules.mk | 2 + .../mini1800/keymaps/ca178858/keymap.c | 108 +++ .../mini1800/keymaps/ca178858/rules.mk | 1 + .../mercutio/keymaps/fearless_spiff/config.h | 28 + .../mercutio/keymaps/fearless_spiff/keymap.c | 301 +++++++ .../mercutio/keymaps/fearless_spiff/readme.md | 29 + .../mercutio/keymaps/fearless_spiff/rules.mk | 7 + .../keymaps/fearless_spiff_en/config.h | 19 + .../keymaps/fearless_spiff_en/keymap.c | 293 +++++++ .../keymaps/fearless_spiff_en/readme.md | 22 + .../keymaps/fearless_spiff_en/rules.mk | 3 + keyboards/mehkee96/keymaps/johann/keymap.c | 80 ++ .../minimacro5/keymaps/kabraxcis/keymap.c | 63 ++ keyboards/minimacro5/keymaps/voaraq/keymap.c | 63 ++ .../karina/keymaps/voltex/keymap.c | 70 ++ keyboards/mitosis/keymaps/carvac_dv/keymap.c | 123 +++ keyboards/mitosis/keymaps/carvac_dv/rules.mk | 1 + keyboards/mitosis/keymaps/nzen/keymap.c | 207 +++++ keyboards/mitosis/keymaps/nzen/readme.md | 75 ++ keyboards/mitosis/keymaps/nzen/rules.mk | 8 + keyboards/miuni32/keymaps/adam-lee/config.h | 8 + keyboards/miuni32/keymaps/adam-lee/keymap.c | 60 ++ keyboards/miuni32/keymaps/adam-lee/readme.md | 1 + keyboards/miuni32/keymaps/adam-lee/rules.mk | 18 + .../keymaps/cassdelacruzmunoz/config.h | 22 + .../keymaps/cassdelacruzmunoz/keymap.c | 173 ++++ .../keymaps/cassdelacruzmunoz/readme.md | 19 + keyboards/mt/mt980/keymaps/walker/config.h | 5 + keyboards/mt/mt980/keymaps/walker/keymap.c | 168 ++++ keyboards/mt/mt980/keymaps/walker/rules.mk | 1 + .../nack/keymaps/farfalleflickan/keymap.c | 203 +++++ .../nack/keymaps/farfalleflickan/keymap.h | 116 +++ .../nack/keymaps/farfalleflickan/readme.md | 1 + .../tb16_rgb/keymaps/ningjx/keymap.c | 37 + .../nibble/keymaps/snailmap/keymap.c | 543 ++++++++++++ .../nibble/keymaps/snailmap/readme.md | 36 + .../nibble/keymaps/snailmap/rules.mk | 5 + .../tidbit/keymaps/snailmap_lite/keymap.c | 289 +++++++ .../tidbit/keymaps/snailmap_lite/rules.mk | 7 + keyboards/numatreus/keymaps/yohewi/keymap.c | 61 ++ .../mini/keymaps/toyoshimahidenori/config.h | 27 + .../mini/keymaps/toyoshimahidenori/keymap.c | 141 +++ .../mini/keymaps/toyoshimahidenori/readme.md | 62 ++ .../mini/keymaps/toyoshimahidenori/rules.mk | 3 + .../mini/keymaps/yoshimaru46/config.h | 27 + .../mini/keymaps/yoshimaru46/keymap.c | 111 +++ .../mini/keymaps/yoshimaru46/readme.md | 4 + .../mini/keymaps/yoshimaru46/rules.mk | 4 + .../ergodash/rev1/keymaps/m47ch4n/config.h | 27 + .../ergodash/rev1/keymaps/m47ch4n/keymap.c | 219 +++++ .../rev1/keymaps/m47ch4n/m47ch4ns_keymap.json | 1 + .../ergodash/rev1/keymaps/m47ch4n/readme.md | 73 ++ .../ergodash/rev1/keymaps/m47ch4n/rules.mk | 3 + .../rev1/keymaps/shadowprogr/config.h | 30 + .../rev1/keymaps/shadowprogr/keymap.c | 199 +++++ .../rev1/keymaps/shadowprogr/readme.md | 89 ++ .../rev1/keymaps/shadowprogr/rules.mk | 3 + .../5x6_5x8/keymaps/derekhsu/config.h | 26 + .../5x6_5x8/keymaps/derekhsu/keymap.c | 60 ++ .../5x6_5x8/keymaps/derekhsu/rules.mk | 3 + keyboards/orthodox/keymaps/rfvizarra/config.h | 41 + keyboards/orthodox/keymaps/rfvizarra/keymap.c | 134 +++ .../orthodox/keymaps/rfvizarra/readme.md | 19 + keyboards/p3d/q4z/keymaps/rjboone/config.h | 21 + keyboards/p3d/q4z/keymaps/rjboone/keymap.c | 107 +++ keyboards/p3d/q4z/keymaps/rjboone/readme.md | 1 + keyboards/p3d/q4z/keymaps/rjboone/rules.mk | 1 + keyboards/pierce/keymaps/durken1/config.h | 69 ++ keyboards/pierce/keymaps/durken1/keymap.c | 159 ++++ keyboards/pierce/keymaps/durken1/rules.mk | 4 + .../playkbtw/pk60/keymaps/rfvizarra/keymap.c | 29 + .../playkbtw/pk60/keymaps/rfvizarra/readme.md | 11 + .../trackball_nano/keymaps/maddie/keymap.c | 86 ++ .../trackball_nano/keymaps/maddie/readme.md | 1 + .../keymaps/reasonsandreasons/config.h | 21 + .../keymaps/reasonsandreasons/keymap.c | 174 ++++ .../keymaps/reasonsandreasons/readme.md | 5 + .../keymaps/reasonsandreasons/rules.mk | 20 + .../psuieee/pluto12/keymaps/wymcg/keymap.c | 56 ++ .../psuieee/pluto12/keymaps/wymcg/readme.md | 1 + .../qvex/lynepad2/keymaps/mcrosson/keymap.c | 142 +++ .../qvex/lynepad2/keymaps/mcrosson/rules.mk | 1 + .../verd/keymaps/alittlepeace/keymap.c | 81 ++ .../reviung41/keymaps/ciutadellla/config.h | 25 + .../reviung41/keymaps/ciutadellla/keymap.c | 333 +++++++ .../reviung41/keymaps/ciutadellla/rules.mk | 10 + keyboards/rgbkb/mun/keymaps/xulkal2/config.h | 42 + keyboards/rgbkb/mun/keymaps/xulkal2/keymap.c | 248 ++++++ keyboards/rgbkb/mun/keymaps/xulkal2/rules.mk | 5 + .../rgbkb/sol/keymaps/brianweyer/keymap.c | 272 ++++++ .../rgbkb/sol/keymaps/brianweyer/rules.mk | 15 + .../zen/rev1/keymaps/jwlawrence/config.h | 42 + .../zen/rev1/keymaps/jwlawrence/keymap.c | 97 +++ .../zen/rev1/keymaps/jwlawrence/rules.mk | 1 + .../rgbkb/zen/rev1/keymaps/samae/config.h | 35 + .../rgbkb/zen/rev1/keymaps/samae/keymap.c | 79 ++ .../rgbkb/zen/rev1/keymaps/samae/rules.mk | 1 + .../rev1/keymaps/starcalleramethyst/config.h | 41 + .../rev1/keymaps/starcalleramethyst/keymap.c | 148 ++++ .../rev1/keymaps/starcalleramethyst/rules.mk | 3 + .../rev1/keymaps/josefadamcik/keymap.c | 151 ++++ .../rev1/keymaps/josefadamcik/readme.md | 23 + .../katana60/rev1/keymaps/rominronin/config.h | 24 + .../katana60/rev1/keymaps/rominronin/keymap.c | 65 ++ .../rev1/keymaps/rominronin/readme.md | 5 + .../rev2/keymaps/rominronin_7u/keymap.c | 79 ++ .../rev2/keymaps/rominronin_7u/readme.md | 1 + .../launch_pad/keymaps/warzone/keymap.c | 270 ++++++ .../launch_pad/keymaps/warzone/rules.mk | 2 + keyboards/waterfowl/keymaps/cyanduck/keymap.c | 129 +++ .../zeal60/keymaps/tusing/README.md | 79 ++ .../wilba_tech/zeal60/keymaps/tusing/config.h | 45 + .../wilba_tech/zeal60/keymaps/tusing/keymap.c | 48 ++ .../wilba_tech/zeal60/keymaps/tusing/rules.mk | 6 + .../winkeyless/bface/keymaps/kpeatt/keymap.c | 75 ++ .../winkeyless/bface/keymaps/kpeatt/readme.md | 10 + .../winkeyless/bface/keymaps/p3lim/README.md | 21 + .../winkeyless/bface/keymaps/p3lim/keymap.c | 188 ++++ .../winkeyless/bface/keymaps/p3lim/rules.mk | 1 + keyboards/wren/keymaps/walterhanley/config.h | 20 + keyboards/wren/keymaps/walterhanley/keymap.c | 170 ++++ keyboards/wren/keymaps/walterhanley/readme.md | 12 + 209 files changed, 14964 insertions(+) create mode 100644 keyboards/gboards/gergoplex/keymaps/georgepetri/combos.def create mode 100644 keyboards/gboards/gergoplex/keymaps/georgepetri/config.h create mode 100644 keyboards/gboards/gergoplex/keymaps/georgepetri/gergoplex.def create mode 100644 keyboards/gboards/gergoplex/keymaps/georgepetri/keymap.c create mode 100644 keyboards/gboards/gergoplex/keymaps/georgepetri/readme.md create mode 100644 keyboards/gboards/gergoplex/keymaps/georgepetri/rules.mk create mode 100644 keyboards/gboards/gergoplex/keymaps/tgrosinger/combos.def create mode 100644 keyboards/gboards/gergoplex/keymaps/tgrosinger/config.h create mode 100644 keyboards/gboards/gergoplex/keymaps/tgrosinger/gergoplex.def create mode 100644 keyboards/gboards/gergoplex/keymaps/tgrosinger/keymap.c create mode 100644 keyboards/gboards/gergoplex/keymaps/tgrosinger/readme.md create mode 100644 keyboards/gboards/gergoplex/keymaps/tgrosinger/rules.mk create mode 100644 keyboards/geonworks/w1_at/keymaps/zq/keymap.c create mode 100644 keyboards/geonworks/w1_at/keymaps/zq/readme.md create mode 100644 keyboards/geonworks/w1_at/keymaps/zq/rules.mk create mode 100644 keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/keymap.c create mode 100644 keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/readme.md create mode 100644 keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/rgb_matrix_user.inc create mode 100644 keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/rules.mk create mode 100644 keyboards/gmmk/gmmk2/p65/ansi/keymaps/thekorn/keymap.c create mode 100644 keyboards/gmmk/gmmk2/p65/ansi/keymaps/thekorn/readme.md create mode 100644 keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/keymap.c create mode 100644 keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/readme.md create mode 100644 keyboards/gmmk/pro/rev1/iso/keymaps/falkecarlsen/keymap.c create mode 100644 keyboards/gmmk/pro/rev1/iso/keymaps/falkecarlsen/readme.md create mode 100644 keyboards/gray_studio/think65/solder/keymaps/dangjoeltang/keymap.c create mode 100644 keyboards/gray_studio/think65/solder/keymaps/dangjoeltang/readme.md create mode 100644 keyboards/gray_studio/think65/solder/keymaps/yt/config.h create mode 100644 keyboards/gray_studio/think65/solder/keymaps/yt/keymap.c create mode 100644 keyboards/gray_studio/think65/solder/keymaps/yt/readme.md create mode 100644 keyboards/gray_studio/think65/solder/keymaps/yt/rules.mk create mode 100644 keyboards/hadron/ver3/keymaps/sebaslayout/keymap.c create mode 100644 keyboards/hadron/ver3/keymaps/sebaslayout/readme.md create mode 100644 keyboards/handwired/aim65/keymaps/bonnee/keymap.c create mode 100644 keyboards/handwired/baredev/rev1/keymaps/manoshu/keymap.c create mode 100644 keyboards/handwired/baredev/rev1/keymaps/manoshu/readme.md create mode 100644 keyboards/handwired/bento/keymaps/cbc02009/keymap.c create mode 100644 keyboards/handwired/dactyl_manuform/4x5_5/keymaps/ssedrick/keymap.c create mode 100644 keyboards/handwired/dactyl_manuform/5x6/keymaps/nabos/config.h create mode 100644 keyboards/handwired/dactyl_manuform/5x6/keymaps/nabos/keymap.c create mode 100644 keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/config.h create mode 100644 keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/keymap.c create mode 100644 keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/rules.mk create mode 100644 keyboards/handwired/dactyl_manuform/6x6/keymaps/happysalada/keymap.c create mode 100644 keyboards/handwired/k_numpad17/keymaps/karlssn/keymap.c create mode 100644 keyboards/handwired/k_numpad17/keymaps/karlssn/rules.mk create mode 100644 keyboards/handwired/lagrange/keymaps/dpapavas/config.h create mode 100644 keyboards/handwired/lagrange/keymaps/dpapavas/keymap.c create mode 100644 keyboards/handwired/lagrange/keymaps/dpapavas/rules.mk create mode 100644 keyboards/handwired/marauder/keymaps/orvia/keymap.c create mode 100644 keyboards/handwired/marauder/keymaps/orvia/rules.mk create mode 100644 keyboards/handwired/pteron/keymaps/FSund/keymap.c create mode 100644 keyboards/handwired/pteron/keymaps/alzafacon/config.h create mode 100644 keyboards/handwired/pteron/keymaps/alzafacon/keymap.c create mode 100644 keyboards/handwired/pteron/keymaps/alzafacon/readme.md create mode 100644 keyboards/handwired/pteron/keymaps/alzafacon/rules.mk create mode 100644 keyboards/handwired/selene/keymaps/bpendragon/keymap.c create mode 100644 keyboards/handwired/steamvan/keymaps/jmdaly/keymap.c create mode 100644 keyboards/handwired/steamvan/keymaps/jmdaly/readme.md create mode 100644 keyboards/handwired/z150/keymaps/zyxx/keymap.c create mode 100644 keyboards/helix/rev2/keymaps/fraanrosi/config.h create mode 100644 keyboards/helix/rev2/keymaps/fraanrosi/keymap.c create mode 100644 keyboards/helix/rev2/keymaps/fraanrosi/readme.md create mode 100644 keyboards/helix/rev2/keymaps/fraanrosi/rules.mk create mode 100644 keyboards/helix/rev2/keymaps/froggy/config.h create mode 100644 keyboards/helix/rev2/keymaps/froggy/helixfont.h create mode 100644 keyboards/helix/rev2/keymaps/froggy/keymap.c create mode 100644 keyboards/helix/rev2/keymaps/froggy/readme.md create mode 100644 keyboards/helix/rev2/keymaps/froggy/rules.mk create mode 100644 keyboards/helix/rev2/keymaps/froggy_106/config.h create mode 100644 keyboards/helix/rev2/keymaps/froggy_106/helixfont.h create mode 100644 keyboards/helix/rev2/keymaps/froggy_106/keymap.c create mode 100644 keyboards/helix/rev2/keymaps/froggy_106/readme.md create mode 100644 keyboards/helix/rev2/keymaps/froggy_106/rules.mk create mode 100644 keyboards/hotdox76v2/keymaps/dancxjo/config.h create mode 100644 keyboards/hotdox76v2/keymaps/dancxjo/keymap.c create mode 100644 keyboards/hotdox76v2/keymaps/dancxjo/rules.mk create mode 100644 keyboards/hs60/v2/hhkb/keymaps/goatmaster/config.h create mode 100644 keyboards/hs60/v2/hhkb/keymaps/goatmaster/keymap.c create mode 100644 keyboards/hs60/v2/hhkb/keymaps/goatmaster/readme.md create mode 100644 keyboards/hs60/v2/hhkb/keymaps/goatmaster/rules.mk create mode 100644 keyboards/lazydesigners/dimple/staggered/keymaps/oncesavedgaming/keymap.c create mode 100644 keyboards/lfkeyboards/lfk78/keymaps/ca178858/keymap.c create mode 100644 keyboards/lfkeyboards/lfk78/keymaps/ca178858/readme.md create mode 100644 keyboards/lfkeyboards/lfk78/keymaps/ca178858/rules.mk create mode 100644 keyboards/lfkeyboards/lfk87/keymaps/ca178858/keymap.c create mode 100644 keyboards/lfkeyboards/lfk87/keymaps/ca178858/readme.md create mode 100644 keyboards/lfkeyboards/lfk87/keymaps/ca178858/rules.mk create mode 100644 keyboards/lfkeyboards/mini1800/keymaps/ca178858/keymap.c create mode 100644 keyboards/lfkeyboards/mini1800/keymaps/ca178858/rules.mk create mode 100644 keyboards/mechwild/mercutio/keymaps/fearless_spiff/config.h create mode 100644 keyboards/mechwild/mercutio/keymaps/fearless_spiff/keymap.c create mode 100644 keyboards/mechwild/mercutio/keymaps/fearless_spiff/readme.md create mode 100644 keyboards/mechwild/mercutio/keymaps/fearless_spiff/rules.mk create mode 100644 keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/config.h create mode 100644 keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/keymap.c create mode 100644 keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/readme.md create mode 100644 keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/rules.mk create mode 100644 keyboards/mehkee96/keymaps/johann/keymap.c create mode 100644 keyboards/minimacro5/keymaps/kabraxcis/keymap.c create mode 100644 keyboards/minimacro5/keymaps/voaraq/keymap.c create mode 100644 keyboards/misonoworks/karina/keymaps/voltex/keymap.c create mode 100644 keyboards/mitosis/keymaps/carvac_dv/keymap.c create mode 100644 keyboards/mitosis/keymaps/carvac_dv/rules.mk create mode 100644 keyboards/mitosis/keymaps/nzen/keymap.c create mode 100644 keyboards/mitosis/keymaps/nzen/readme.md create mode 100644 keyboards/mitosis/keymaps/nzen/rules.mk create mode 100644 keyboards/miuni32/keymaps/adam-lee/config.h create mode 100644 keyboards/miuni32/keymaps/adam-lee/keymap.c create mode 100644 keyboards/miuni32/keymaps/adam-lee/readme.md create mode 100644 keyboards/miuni32/keymaps/adam-lee/rules.mk create mode 100644 keyboards/miuni32/keymaps/cassdelacruzmunoz/config.h create mode 100644 keyboards/miuni32/keymaps/cassdelacruzmunoz/keymap.c create mode 100644 keyboards/miuni32/keymaps/cassdelacruzmunoz/readme.md create mode 100644 keyboards/mt/mt980/keymaps/walker/config.h create mode 100644 keyboards/mt/mt980/keymaps/walker/keymap.c create mode 100644 keyboards/mt/mt980/keymaps/walker/rules.mk create mode 100644 keyboards/nack/keymaps/farfalleflickan/keymap.c create mode 100644 keyboards/nack/keymaps/farfalleflickan/keymap.h create mode 100644 keyboards/nack/keymaps/farfalleflickan/readme.md create mode 100644 keyboards/ning/tiny_board/tb16_rgb/keymaps/ningjx/keymap.c create mode 100644 keyboards/nullbitsco/nibble/keymaps/snailmap/keymap.c create mode 100644 keyboards/nullbitsco/nibble/keymaps/snailmap/readme.md create mode 100644 keyboards/nullbitsco/nibble/keymaps/snailmap/rules.mk create mode 100644 keyboards/nullbitsco/tidbit/keymaps/snailmap_lite/keymap.c create mode 100644 keyboards/nullbitsco/tidbit/keymaps/snailmap_lite/rules.mk create mode 100644 keyboards/numatreus/keymaps/yohewi/keymap.c create mode 100644 keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/config.h create mode 100644 keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/keymap.c create mode 100644 keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/readme.md create mode 100644 keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/rules.mk create mode 100644 keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/config.h create mode 100644 keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/keymap.c create mode 100644 keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/readme.md create mode 100644 keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/rules.mk create mode 100644 keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/config.h create mode 100644 keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/keymap.c create mode 100644 keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/m47ch4ns_keymap.json create mode 100644 keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/readme.md create mode 100644 keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/rules.mk create mode 100644 keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/config.h create mode 100644 keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/keymap.c create mode 100644 keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/readme.md create mode 100644 keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/rules.mk create mode 100644 keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/config.h create mode 100644 keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/keymap.c create mode 100644 keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/rules.mk create mode 100644 keyboards/orthodox/keymaps/rfvizarra/config.h create mode 100644 keyboards/orthodox/keymaps/rfvizarra/keymap.c create mode 100644 keyboards/orthodox/keymaps/rfvizarra/readme.md create mode 100644 keyboards/p3d/q4z/keymaps/rjboone/config.h create mode 100644 keyboards/p3d/q4z/keymaps/rjboone/keymap.c create mode 100644 keyboards/p3d/q4z/keymaps/rjboone/readme.md create mode 100644 keyboards/p3d/q4z/keymaps/rjboone/rules.mk create mode 100644 keyboards/pierce/keymaps/durken1/config.h create mode 100644 keyboards/pierce/keymaps/durken1/keymap.c create mode 100644 keyboards/pierce/keymaps/durken1/rules.mk create mode 100644 keyboards/playkbtw/pk60/keymaps/rfvizarra/keymap.c create mode 100644 keyboards/playkbtw/pk60/keymaps/rfvizarra/readme.md create mode 100644 keyboards/ploopyco/trackball_nano/keymaps/maddie/keymap.c create mode 100644 keyboards/ploopyco/trackball_nano/keymaps/maddie/readme.md create mode 100644 keyboards/primekb/prime_o/keymaps/reasonsandreasons/config.h create mode 100644 keyboards/primekb/prime_o/keymaps/reasonsandreasons/keymap.c create mode 100644 keyboards/primekb/prime_o/keymaps/reasonsandreasons/readme.md create mode 100644 keyboards/primekb/prime_o/keymaps/reasonsandreasons/rules.mk create mode 100644 keyboards/psuieee/pluto12/keymaps/wymcg/keymap.c create mode 100644 keyboards/psuieee/pluto12/keymaps/wymcg/readme.md create mode 100644 keyboards/qvex/lynepad2/keymaps/mcrosson/keymap.c create mode 100644 keyboards/qvex/lynepad2/keymaps/mcrosson/rules.mk create mode 100644 keyboards/redscarf_iiplus/verd/keymaps/alittlepeace/keymap.c create mode 100644 keyboards/reviung/reviung41/keymaps/ciutadellla/config.h create mode 100644 keyboards/reviung/reviung41/keymaps/ciutadellla/keymap.c create mode 100644 keyboards/reviung/reviung41/keymaps/ciutadellla/rules.mk create mode 100644 keyboards/rgbkb/mun/keymaps/xulkal2/config.h create mode 100644 keyboards/rgbkb/mun/keymaps/xulkal2/keymap.c create mode 100644 keyboards/rgbkb/mun/keymaps/xulkal2/rules.mk create mode 100644 keyboards/rgbkb/sol/keymaps/brianweyer/keymap.c create mode 100644 keyboards/rgbkb/sol/keymaps/brianweyer/rules.mk create mode 100644 keyboards/rgbkb/zen/rev1/keymaps/jwlawrence/config.h create mode 100644 keyboards/rgbkb/zen/rev1/keymaps/jwlawrence/keymap.c create mode 100644 keyboards/rgbkb/zen/rev1/keymaps/jwlawrence/rules.mk create mode 100644 keyboards/rgbkb/zen/rev1/keymaps/samae/config.h create mode 100644 keyboards/rgbkb/zen/rev1/keymaps/samae/keymap.c create mode 100644 keyboards/rgbkb/zen/rev1/keymaps/samae/rules.mk create mode 100644 keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/config.h create mode 100644 keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/keymap.c create mode 100644 keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/rules.mk create mode 100644 keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/keymap.c create mode 100644 keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/readme.md create mode 100644 keyboards/rominronin/katana60/rev1/keymaps/rominronin/config.h create mode 100644 keyboards/rominronin/katana60/rev1/keymaps/rominronin/keymap.c create mode 100644 keyboards/rominronin/katana60/rev1/keymaps/rominronin/readme.md create mode 100644 keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/keymap.c create mode 100644 keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/readme.md create mode 100644 keyboards/ungodly/launch_pad/keymaps/warzone/keymap.c create mode 100644 keyboards/ungodly/launch_pad/keymaps/warzone/rules.mk create mode 100644 keyboards/waterfowl/keymaps/cyanduck/keymap.c create mode 100644 keyboards/wilba_tech/zeal60/keymaps/tusing/README.md create mode 100644 keyboards/wilba_tech/zeal60/keymaps/tusing/config.h create mode 100644 keyboards/wilba_tech/zeal60/keymaps/tusing/keymap.c create mode 100644 keyboards/wilba_tech/zeal60/keymaps/tusing/rules.mk create mode 100644 keyboards/winkeyless/bface/keymaps/kpeatt/keymap.c create mode 100644 keyboards/winkeyless/bface/keymaps/kpeatt/readme.md create mode 100644 keyboards/winkeyless/bface/keymaps/p3lim/README.md create mode 100644 keyboards/winkeyless/bface/keymaps/p3lim/keymap.c create mode 100644 keyboards/winkeyless/bface/keymaps/p3lim/rules.mk create mode 100644 keyboards/wren/keymaps/walterhanley/config.h create mode 100644 keyboards/wren/keymaps/walterhanley/keymap.c create mode 100644 keyboards/wren/keymaps/walterhanley/readme.md diff --git a/keyboards/gboards/gergoplex/keymaps/georgepetri/combos.def b/keyboards/gboards/gergoplex/keymaps/georgepetri/combos.def new file mode 100644 index 000000000000..a9205c028a09 --- /dev/null +++ b/keyboards/gboards/gergoplex/keymaps/georgepetri/combos.def @@ -0,0 +1,11 @@ +// List any combo dictionaries you want loaded to your device below! + +// QMK wide includes +//#include "combos/germ-vim-helpers.def" +#include "combos/germ-mouse-keys.def" + +// User includes +#include "gergoplex.def" + +// Word completion +// #include "combos/eng-combos.def" diff --git a/keyboards/gboards/gergoplex/keymaps/georgepetri/config.h b/keyboards/gboards/gergoplex/keymaps/georgepetri/config.h new file mode 100644 index 000000000000..e2c27583fab4 --- /dev/null +++ b/keyboards/gboards/gergoplex/keymaps/georgepetri/config.h @@ -0,0 +1,31 @@ +/* +Copyright 2012 Jun Wako +Copyright 2013 Oleg Kostyuk + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +// Copy and worked on with love from the EZ team + +#pragma once + +#define HOLD_ON_OTHER_KEY_PRESS_PER_KEY + +#undef DEBOUNCE +#define DEBOUNCE 25 + +#define COMBO_ALLOW_ACTION_KEYS +#define COMBO_VARIABLE_LEN + +#define TAPPING_TERM_PER_KEY diff --git a/keyboards/gboards/gergoplex/keymaps/georgepetri/gergoplex.def b/keyboards/gboards/gergoplex/keymaps/georgepetri/gergoplex.def new file mode 100644 index 000000000000..d50d431c8b7a --- /dev/null +++ b/keyboards/gboards/gergoplex/keymaps/georgepetri/gergoplex.def @@ -0,0 +1,7 @@ +// Gergoplex specfic combos + +COMB(hjEnt, KC_ENT, KC_H, KC_J) +COMB(loDel, KC_DEL, KC_L, KC_O) +COMB(pscBspace, KC_BSPC, KC_P, KC_SCLN) +COMB(sdEsc, KC_ESC, KC_D, KC_F) +COMB(fgEsc, KC_ESC, KC_F, KC_G) diff --git a/keyboards/gboards/gergoplex/keymaps/georgepetri/keymap.c b/keyboards/gboards/gergoplex/keymaps/georgepetri/keymap.c new file mode 100644 index 000000000000..44c570b42cd2 --- /dev/null +++ b/keyboards/gboards/gergoplex/keymaps/georgepetri/keymap.c @@ -0,0 +1,212 @@ +/* Copyright 2021 Jane Bernhardt + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* Good on you for modifying your layout! if you don't have + * time to read the QMK docs, a list of keycodes can be found at + * https://github.com/qmk/qmk_firmware/blob/master/docs/keycodes.md + */ + +#include QMK_KEYBOARD_H +#include "g/keymap_combo.h" + +enum { + _ALPHA, // default + _GAME, // gaming + _SPECIAL, // special characters + _NUMBERS // numbers/function/motion +}; + +typedef enum { + TD_NONE, + TD_UNKNOWN, + TD_SINGLE_TAP, + TD_DOUBLE_TAP, + TD_TRIPLE_TAP +} td_state_t; + +typedef struct { + bool is_press_action; + td_state_t state; +} td_tap_t; + +enum { + GAME +}; + +td_state_t cur_dance(tap_dance_state_t *state); + +void ql_finished(tap_dance_state_t *state, void *user_data); +void ql_reset(tap_dance_state_t *state, void *user_data); + +#define KC_CTL_A MT(MOD_LCTL, KC_A) // Tap for A, hold for Control +#define KC_SFT_Z MT(MOD_RSFT, KC_Z) // Tap for Z, hold for Shift +#define KC_SFT_SL MT(MOD_RSFT, KC_SLSH) // Tap for slash, hold for Shift +#define KC_SPE_SPC LT(_SPECIAL, KC_SPC) // Tap for Space, hold for Special layer +#define KC_NUM_SPC LT(_NUMBERS, KC_SPC) // Tap for Space, hold for Numbers layer + + /* Combomap + * + * ,-------------------------------. ,-------------------------------. + * | | | | | | | | | | | | + * |-------+-----+-----+-----+-----| |-----+-----+-----+-DEL-+-BSPC--| + * | | | ESC ESC | | ENT | | | | + * |-------+-----+-----+-RMB-+-LMB-| |-----+-----+-----+-----+-------| + * | | | | | | | | | | | | + * `-------------------------------' `-------------------------------' + * .-----------------. .-----------------. + * | | | | | | | | + * '-----------------' '-----------------' + */ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Alpha layer + * + * ,-------------------------------. ,-------------------------------. + * | Q | W | E | R | T | | Y | U | I | O | P | + * |-------+-----+-----+-----+-----| |-----+-----+-----+-----+-------| + * | CTRL A| S | D | F | G | | H | J | K | L | ; | + * |-------+-----+-----+-----+-----| |-----+-----+-----+-----+-------| + * | SHFT Z| X | C | V | B | | N | M | , | . |SHFT / | + * `-------------------------------' `-------------------------------' + * .----------------------. .----------------------. + * | META | ALT | SPC SPE | | SPC NUM | TAB | SHFT | + * '----------------------' '----------------------' + */ + [_ALPHA] = LAYOUT_split_3x5_3( + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, + KC_CTL_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, + KC_SFT_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, TD(GAME), KC_DOT, KC_SFT_SL, + KC_LGUI, KC_LALT, KC_SPE_SPC, KC_NUM_SPC, KC_TAB, KC_RSFT), + + /* Gaming layer + * + * ,-------------------------------. ,-------------------------------. + * | ~ | Q | W | E | R | | Y | U | I | O | P | + * |-------+-----+-----+-----+-----| |-----+-----+-----+-----+-------| + * | CTRL | A | S | D | F | | H | J | K | L | ; | + * |-------+-----+-----+-----+-----| |-----+-----+-----+-----+-------| + * | SHFT | Z | X | C | V | | N | M | , | . |SHFT / | + * `-------------------------------' `-------------------------------' + * .------------------. .----------------------. + * | META | ALT | SPC | | SPC NUM | TAB | SHFT | + * '------------------' '----------------------' + */ + [_GAME] = LAYOUT_split_3x5_3( + KC_TILD, KC_Q, KC_W, KC_E, KC_R, KC_Y, KC_U, KC_I, KC_O, KC_P, + KC_LCTL , KC_A, KC_S, KC_D, KC_F, KC_H, KC_J, KC_K, KC_L, KC_SCLN, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_N, KC_M, TD(GAME), KC_DOT, KC_SFT_SL, + KC_LGUI, KC_LALT, KC_SPC, KC_NUM_SPC, KC_TAB, KC_RSFT), + + /* Special characters layer + * + * ,-------------------------------. ,-------------------------------. + * | ! | @ | { | } | | | | ` | - | = | / | \ | + * |-------+-----+-----+-----+-----| |-----+-----+-----+-----+-------| + * | # | $ | ( | ) | | | LFT | DWN | UP | RGT | ' | + * |-------+-----+-----+-----+-----| |-----+-----+-----+-----+-------| + * | % | ^ | [ | ] | | | & | ~ | + | * | | + * `-------------------------------' `-------------------------------' + * .-------------------. .-----------------. + * | | | | | | " | _ | + * '-------------------' '-----------------' + */ + [_SPECIAL] = LAYOUT_split_3x5_3( + KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_GRV, KC_MINS, KC_EQL , KC_SLSH, KC_BSLS, + KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_QUOT, + KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TRNS, KC_AMPR, KC_TILD, KC_PLUS, KC_ASTR, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LSFT(KC_QUOTE), LSFT(KC_MINS)), + + /* Numbers/Function/Motion layer + * + * ,-------------------------------. ,-------------------------------. + * | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | + * |-------+-----+-----+-----+-----| |-----+-----+-----+-----+-------| + * | F1 | F2 | F3 | F4 | F5 | | | | | | | + * |-------+-----+-----+-----+-----| |-----+-----+-----+-----+-------| + * | F6 | F7 | F8 | F9 | F10 | | MLFT| MDWN| MUP | MRGT| | + * `-------------------------------' `-------------------------------' + * .-----------------. .-----------------. + * | F11 | F12 | | | | | | + * '-----------------' '-----------------' + */ + [_NUMBERS] = LAYOUT_split_3x5_3( + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_TRNS, + KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) +}; + +bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_CTL_A: + return false; + default: + return true; + } +} + +td_state_t cur_dance(tap_dance_state_t *state) { + if (state->count == 1) + return TD_SINGLE_TAP; + if (state->count == 2) + return TD_DOUBLE_TAP; + else if (state->count == 3) + return TD_TRIPLE_TAP; + return TD_UNKNOWN; +} + +static td_tap_t ql_tap_state = { + .is_press_action = true, + .state = TD_NONE +}; + +void ql_finished(tap_dance_state_t *state, void *user_data) { + ql_tap_state.state = cur_dance(state); + switch (ql_tap_state.state) { + case TD_SINGLE_TAP: + tap_code(KC_COMMA); + break; + case TD_DOUBLE_TAP: + tap_code(KC_COMMA); + tap_code(KC_COMMA); + break; + case TD_TRIPLE_TAP: + if (layer_state_is(_GAME)) + layer_off(_GAME); + else + layer_on(_GAME); + break; + default: + break; + } +} + +void ql_reset(tap_dance_state_t *state, void *user_data) { + ql_tap_state.state = TD_NONE; +} + +tap_dance_action_t tap_dance_actions[] = { + [GAME] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ql_finished, ql_reset) +}; + +uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QK_TAP_DANCE ... QK_TAP_DANCE_MAX: + return 275; + default: + return TAPPING_TERM; + } +} diff --git a/keyboards/gboards/gergoplex/keymaps/georgepetri/readme.md b/keyboards/gboards/gergoplex/keymaps/georgepetri/readme.md new file mode 100644 index 000000000000..7c8a6f202348 --- /dev/null +++ b/keyboards/gboards/gergoplex/keymaps/georgepetri/readme.md @@ -0,0 +1,6 @@ +# George Petri's Gergoplex layout +Vim and programming focused layout. +``` +qmk compile -kb gboards/gergoplex -km georgepetri +qmk flash -kb gboards/gergoplex -km georgepetri +``` diff --git a/keyboards/gboards/gergoplex/keymaps/georgepetri/rules.mk b/keyboards/gboards/gergoplex/keymaps/georgepetri/rules.mk new file mode 100644 index 000000000000..74d02c23bd54 --- /dev/null +++ b/keyboards/gboards/gergoplex/keymaps/georgepetri/rules.mk @@ -0,0 +1,20 @@ +#---------------------------------------------------------------------------- +# make gboards/gergoplex:default:flash +# Make sure you have dfu-programmer installed! +#---------------------------------------------------------------------------- + +#Debug options +VERBOSE = no +DEBUG_MATRIX_SCAN_RATE = no +DEBUG_MATRIX = no +CONSOLE_ENABLE = no + +#Combos! +COMBO_ENABLE = yes +VPATH += keyboards/gboards/ + +ifeq ($(strip $(DEBUG_MATRIX)), yes) + OPT_DEFS += -DDEBUG_MATRIX +endif + +TAP_DANCE_ENABLE = yes diff --git a/keyboards/gboards/gergoplex/keymaps/tgrosinger/combos.def b/keyboards/gboards/gergoplex/keymaps/tgrosinger/combos.def new file mode 100644 index 000000000000..ef953d53f59a --- /dev/null +++ b/keyboards/gboards/gergoplex/keymaps/tgrosinger/combos.def @@ -0,0 +1,11 @@ +// List any combo dictionaries you want loaded to your device below! + +// QMK wide includes +//#include "combos/germ-vim-helpers.def" +//#include "combos/germ-mouse-keys.def" + +// User includes +#include "gergoplex.def" + +// Word completion +// #include "combos/eng-combos.def" diff --git a/keyboards/gboards/gergoplex/keymaps/tgrosinger/config.h b/keyboards/gboards/gergoplex/keymaps/tgrosinger/config.h new file mode 100644 index 000000000000..1b30cc73b3d2 --- /dev/null +++ b/keyboards/gboards/gergoplex/keymaps/tgrosinger/config.h @@ -0,0 +1,4 @@ +#pragma once + +#define COMBO_ALLOW_ACTION_KEYS +#define COMBO_VARIABLE_LEN diff --git a/keyboards/gboards/gergoplex/keymaps/tgrosinger/gergoplex.def b/keyboards/gboards/gergoplex/keymaps/tgrosinger/gergoplex.def new file mode 100644 index 000000000000..c7a93ed294e5 --- /dev/null +++ b/keyboards/gboards/gergoplex/keymaps/tgrosinger/gergoplex.def @@ -0,0 +1,17 @@ +// Gergoplex specfic combos + +COMB(qwGrav, KC_GRV, KC_W, KC_Q) +COMB(wsEsc, KC_ESC, KC_W, KC_S) +COMB(sdBackspace, KC_BSPC, KC_S, KC_D) +COMB(dfTab, KC_TAB, KC_D, KC_F) +COMB(cvEnter, KC_ENT, KC_C, KC_V) + +COMB(ioMinus, KC_MINS, KC_I, KC_O) +COMB(opBackslash, KC_BSLS, KC_O, KC_P) +COMB(hjLess, KC_LT, KC_H, KC_J) +COMB(klGreat, KC_GT, KC_K, KC_L) +COMB(jkColon, KC_COLN, KC_J, KC_K) +COMB(mcUnder, KC_UNDS, KC_M, KC_COMM) +COMB(nmQuote, KC_QUOT, KC_N, KC_M) + +SUBS(pasta, "I'd just like to interject for a moment.", KC_H, KC_J, KC_K, KC_L) diff --git a/keyboards/gboards/gergoplex/keymaps/tgrosinger/keymap.c b/keyboards/gboards/gergoplex/keymaps/tgrosinger/keymap.c new file mode 100644 index 000000000000..74c0899fdb14 --- /dev/null +++ b/keyboards/gboards/gergoplex/keymaps/tgrosinger/keymap.c @@ -0,0 +1,286 @@ +/* Copyright 2022 Tony Grosinger + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H +#include "g/keymap_combo.h" + +enum { + _ALPHA, // Default + _SYMB, // Symbols + _NUMB, // Numbers + _ARROWS, // Arrows and OS + _TMUX, // TMUX Nav layer + _POPOS, // Gnome Shell, aka PopOS +}; + + +// Macros +enum custom_keycodes { + TMUX_NEW = SAFE_RANGE, + TMUX_ZOOM, + TMUX_SCROLL, + TMUX_PN_LT, + TMUX_PN_UP, + TMUX_PN_DN, + TMUX_PN_RT, + TMUX_WN_LT, + TMUX_WN_RT, + TMUX_SP_VT, + TMUX_SP_HZ, + VIM_CLIP_CP, + VIM_CLIP_PST, + VIM_MACRO, +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case TMUX_NEW: + if (record->event.pressed) { + tap_code16(C(KC_B)); + SEND_STRING("c"); + } + break; + case TMUX_ZOOM: + if (record->event.pressed) { + tap_code16(C(KC_B)); + SEND_STRING("z"); + } + break; + case TMUX_SCROLL: + if (record->event.pressed) { + tap_code16(C(KC_B)); + SEND_STRING("["); + } + break; + case TMUX_PN_LT: + if (record->event.pressed) { + tap_code16(C(KC_B)); + tap_code(KC_LEFT); + } + break; + case TMUX_PN_DN: + if (record->event.pressed) { + tap_code16(C(KC_B)); + tap_code(KC_DOWN); + } + break; + case TMUX_PN_UP: + if (record->event.pressed) { + tap_code16(C(KC_B)); + tap_code(KC_UP); + } + break; + case TMUX_PN_RT: + if (record->event.pressed) { + tap_code16(C(KC_B)); + tap_code(KC_RIGHT); + } + break; + case TMUX_WN_LT: + if (record->event.pressed) { + tap_code16(C(KC_B)); + SEND_STRING("p"); + } + break; + case TMUX_WN_RT: + if (record->event.pressed) { + tap_code16(C(KC_B)); + SEND_STRING("n"); + } + break; + case TMUX_SP_VT: + if (record->event.pressed) { + tap_code16(C(KC_B)); + SEND_STRING("%"); + } + break; + case TMUX_SP_HZ: + if (record->event.pressed) { + tap_code16(C(KC_B)); + SEND_STRING("\""); + } + break; + case VIM_CLIP_CP: + if (record->event.pressed) { + tap_code16(S(KC_QUOTE)); + tap_code16(S(KC_EQUAL)); + tap_code(KC_Y); + } + break; + case VIM_CLIP_PST: + if (record->event.pressed) { + tap_code16(S(KC_QUOTE)); + tap_code16(S(KC_EQUAL)); + tap_code(KC_P); + } + break; + case VIM_MACRO: + if (record->event.pressed) { + tap_code16(S(KC_2)); + tap_code(KC_Q); + } + break; + /* + case LAYRMOD: + // Act as a mod key if held, or toggle a layer if tapped + // replace KC_LCTL with desired mod, and _TARGET with desired layer name / number + if (record->event.pressed) { + uint8_t key_timer = timer_read(); + register_mods(MOD_BIT(KC_LCTL)); + } else { + unregister_mods(MOD_BIT(KC_LCTL)); + if (timer_elapsed(key_timer) < 200) { + layer_invert(_TARGET); + } + } + return false; + break; + */ + } + return true; +} + +/* Combos + * + * ,-----------------------------. ,-----------------------------. + * | ` | | | | | | MINS | BSLH | + * |-----+----ESC----+-----+-----| |-----+-----+-----+-----------| + * | | BSPC TAB | | | LES COLN GRT | | + * |-----+-----+-----+--RMB+-LMB-| |-----+-----+-----+-----------| + * | | | ENT | | | QUO UNDR | | | + * `-----+-----+-----+-----+-----' `-----------------------------' + * .-------------------------. .-------------------. + * | | | | | | | | + * '-------------------------' '-------------------' + */ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap 0: Default layer + * ,------------------------------. ,----------------------------------. + * | Q | W | E | R | T | | Y | U | I | O | P | + * |------+-----+-----+-----+-----| |-----+-----+-----+-------+--------| + * |CTRL/A| S | D | F | G | | H | J | K | L | CTRL/; | + * |------+-----+-----+-----+-----| |-----+-----+-----+-------+--------| + * |SHFT/Z|ALT/X| C | V | B | | N | M | < | ALT/> | SHFT/? | + * `------+-----+-----+------+----' `----------------------------------' + * .-----------------. .----------------------. + * | |GUI |SPC(NUM)| |SPC(SYM)|TMUX | PopOS | + * '-----------------' '----------------------' + */ + [_ALPHA] = LAYOUT_split_3x5_3( + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, + MT(MOD_LCTL, KC_A),KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, MT(MOD_LCTL, KC_SCLN), + MT(MOD_LSFT, KC_Z),MT(MOD_LALT, KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, MT(MOD_LALT, KC_DOT), MT(MOD_RSFT, KC_SLSH), + + KC_NO, KC_LGUI, LT(_NUMB, KC_SPC), // Left + LT(_SYMB, KC_SPC), MO(_TMUX), MO(_POPOS) // Right + ), + + /* Keymap 1: Symbols layer + * ,------------------------------. ,-------------------------------. + * | ! | @ | # | $ | % | | ^ | & | * | + | = | + * |------+-----+-----+-----+-----| |-----+-----+-----+-----+-------| + * | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | + * |------+-----+-----+-----+-----| |-----+-----+-----+-----+-------| + * | | | | | | | | | | F11 | F12 | + * `------+-----+-----+-----+-----' `-------------------------------' + * .-----------------. .-----------------. + * | | DEL | MO3 | | HLD | SPC | | + * '-----------------' '-----------------' + */ + [_SYMB] = LAYOUT_split_3x5_3( + KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_PLUS, KC_EQL, + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F11, KC_F12, + KC_NO, KC_DEL, MO(_ARROWS), KC_TRNS, KC_SPC, KC_NO + ), + + /* Keymap 2: Number layer + * ,------------------------------. ,-------------------------------. + * | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | + * |------+-----+-----+-----+-----| |-----+-----+-----+-----+-------| + * | CTRL | | ( | ) | | | | 4 | 7 | 6 | | + * |------+-----+-----+-----+-----| |-----+-----+-----+-----+-------| + * | SHFT | | [ | ] | | | | 1 | 2 | 3 | . | + * `------+-----+-----+-----+-----' `-------------------------------' + * .-----------------. .-----------------. + * | | | HLD | | MO3 | 0 | | + * '-----------------' '-----------------' + */ + [_NUMB] = LAYOUT_split_3x5_3( + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, + KC_LCTL, KC_NO, KC_LPRN, KC_RPRN, KC_NO, KC_NO, KC_4, KC_5, KC_6, KC_NO, + KC_LSFT, KC_NO, KC_LBRC, KC_RBRC, KC_NO, KC_NO, KC_1, KC_2, KC_3, KC_DOT, + KC_NO,KC_NO,KC_TRNS, MO(_ARROWS),KC_0,KC_NO + ), + + /* Keymap 3: Arrows and OS + * ,------------------------------. ,------------------------------------. + * | | | | | | | | | | | | + * |------+-----+-----+-----+-----| |-------+-------+------+-------+-----| + * | CTRL |HOME | PUP | | | | LEFT | DOWN | UP | RIGHT | | + * |------+-----+-----+-----+-----| |-------+-------+------+-------+-----| + * | SHFT |END | PDN | | | | | | | | | + * `------+-----+-----+-----+-----' `------------------------------------' + * .-----------------. .-----------------. + * | | | HLD | | HLD | | | + * '-----------------' '-----------------' + */ + [_ARROWS] = LAYOUT_split_3x5_3( + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_LCTL, KC_HOME, KC_PGUP, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, + KC_LSFT, KC_END, KC_PGDN, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO,KC_NO,KC_TRNS, KC_TRNS,KC_NO,KC_NO + ), + + /* Keymap 4: Tmux navigation layer + * ,----------------------------------. ,---------------------------------------. + * | Vi Mcr | | | | SP VT | | Vi Ynk| | | | Vi PT | + * |--------+-----+-----+-----+-------| |-------+-------+-------+-------+-------| + * | | SCRL| | | | | PN LT | PN DN | PN UP | PN RT | SP HZ | + * |--------+-----+-----+-----+-------| |-------+-------+-------+-------+-------| + * | ZOOM | KILL| NEW | | | | W LT | | | W RT | | + * `--------+-----+-----+-----+-------' `---------------------------------------' + * .-----------------. .-----------------. + * | | | | | | HLD | | + * '-----------------' '-----------------' + */ + [_TMUX] = LAYOUT_split_3x5_3( + VIM_MACRO, KC_NO, KC_NO, KC_NO, TMUX_SP_VT, VIM_CLIP_CP, KC_NO, KC_NO, KC_NO, VIM_CLIP_PST, + KC_NO, TMUX_SCROLL, KC_NO, KC_NO, KC_NO, TMUX_PN_LT, TMUX_PN_DN, TMUX_PN_UP, TMUX_PN_RT, TMUX_SP_HZ, + TMUX_ZOOM, KC_NO, TMUX_NEW, KC_NO, KC_NO, TMUX_WN_LT, KC_NO, KC_NO, TMUX_WN_RT, KC_NO, + KC_NO,KC_NO,KC_NO, KC_NO,KC_TRNS,KC_NO + ), + + /* Keymap 5: Gnome Shell (PopOS) + * ,------------------------------. ,--------------------------------------. + * | | | | | | | MV-DWN| D-DWN | D-UP | MV-UP | Flip | + * |------+-----+-----+-----+-----| |-------+-------+-------+-------+------| + * | | | | | | | W-L | W-DWN | W-UP | W-R | | + * |------+-----+-----+-----+-----| |-------+-------+-------+-------+------| + * | | | | | | | Scrns | Apps | Close | | | + * `------+-----+-----+-----+-----' `--------------------------------------' + * .-----------------. .-----------------. + * | | | | | | | HLD | + * '-----------------' '-----------------' + */ + [_POPOS] = LAYOUT_split_3x5_3( + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, SGUI(KC_J), LCTL(LGUI(KC_J)), LCTL(LGUI(KC_K)), SGUI(KC_K), LGUI(KC_O), + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, LGUI(KC_H), LGUI(KC_J), LGUI(KC_K), LGUI(KC_L), KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, LGUI(KC_D), LGUI(KC_A), LGUI(KC_Q), KC_NO, KC_NO, + KC_NO,KC_NO,KC_NO, KC_NO,KC_NO,KC_TRNS + ), +}; diff --git a/keyboards/gboards/gergoplex/keymaps/tgrosinger/readme.md b/keyboards/gboards/gergoplex/keymaps/tgrosinger/readme.md new file mode 100644 index 000000000000..0a53aa1cbfa8 --- /dev/null +++ b/keyboards/gboards/gergoplex/keymaps/tgrosinger/readme.md @@ -0,0 +1,12 @@ +# GergoPlex + +This keymap I created for the GergoPlex with a focus on: + +- Keeping keys close to their normal locations when possible (number/symbol rows) +- Work well for vim, tmux, and Ubuntu default desktop shortcuts +- Work okay for OSx shortcuts + +## Firmware Building + + util/docker_build.sh gboards/gergoplex:tgrosinger + util/docker_build.sh gboards/gergoplex:tgrosinger:flash diff --git a/keyboards/gboards/gergoplex/keymaps/tgrosinger/rules.mk b/keyboards/gboards/gergoplex/keymaps/tgrosinger/rules.mk new file mode 100644 index 000000000000..620cab16c03f --- /dev/null +++ b/keyboards/gboards/gergoplex/keymaps/tgrosinger/rules.mk @@ -0,0 +1,18 @@ +#---------------------------------------------------------------------------- +# make gboards/gergoplex:default:flash +# Make sure you have dfu-programmer installed! +#---------------------------------------------------------------------------- + +#Debug options +VERBOSE = no +DEBUG_MATRIX_SCAN_RATE = no +DEBUG_MATRIX = no +CONSOLE_ENABLE = no + +#Combos! +COMBO_ENABLE = yes +VPATH += keyboards/gboards/ + +ifeq ($(strip $(DEBUG_MATRIX)), yes) + OPT_DEFS += -DDEBUG_MATRIX +endif diff --git a/keyboards/geonworks/w1_at/keymaps/zq/keymap.c b/keyboards/geonworks/w1_at/keymaps/zq/keymap.c new file mode 100644 index 000000000000..eba9aedb8f24 --- /dev/null +++ b/keyboards/geonworks/w1_at/keymaps/zq/keymap.c @@ -0,0 +1,119 @@ +/* Copyright 2021 Zhi Quan + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + +enum custom_keycodes { + KC_P00 = SAFE_RANGE +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = LAYOUT_all( /* Base */ + KC_F1, KC_F2, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, TG(2), KC_PSLS, KC_PAST, KC_PMNS, + KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS, + KC_F5, KC_F6, KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_F7, KC_F8, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_P1, KC_P2, KC_P3, KC_PENT, + KC_F9, KC_F10, KC_LCTL, KC_LCMD, KC_SPC, KC_ROPT, MO(1), KC_P0, KC_P00, KC_PDOT, KC_PENT), + +[1] = LAYOUT_all( /* FN */ + KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_VOLD, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, QK_BOOT, KC_HOME, KC_UP, KC_PGUP, KC_VOLU, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_MUTE, KC_RGHT, KC_VOLU, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_DOWN, KC_PGDN, KC_MPLY, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY), + +[2] = LAYOUT_all( /* Numpad */ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_UP, KC_PGUP, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, XXXXXXX, KC_RGHT, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_DOWN, KC_PGDN, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +[3] = LAYOUT_all( /* Empty for dynamic keymaps */ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch(keycode) { + case KC_P00: + if (record->event.pressed) { + tap_code(KC_P0); + tap_code(KC_P0); + } + return false; + break; + case KC_ESC: + if (record->event.pressed) { + // Turn on capslock indicator. + writePin(LED_CAPS_LOCK_PIN, LED_PIN_ON_STATE); + } else { + // Turn off capslock indicator. + writePin(LED_CAPS_LOCK_PIN, !LED_PIN_ON_STATE); + } + } + return true; +} + +// Customized function so that numlock and capslock indicator are no longer controlled by the host. +bool led_update_user(led_t led_state) { +#if defined(LED_NUM_LOCK_PIN) || defined(LED_CAPS_LOCK_PIN) || defined(LED_SCROLL_LOCK_PIN) || defined(LED_COMPOSE_PIN) || defined(LED_KANA_PIN) +# if LED_PIN_ON_STATE == 0 + // invert the whole thing to avoid having to conditionally !led_state.x later + led_state.raw = ~led_state.raw; +# endif + +// # ifdef LED_NUM_LOCK_PIN +// writePin(LED_NUM_LOCK_PIN, led_state.num_lock); +// # endif +// # ifdef LED_CAPS_LOCK_PIN +// writePin(LED_CAPS_LOCK_PIN, led_state.caps_lock); +// # endif +# ifdef LED_SCROLL_LOCK_PIN + writePin(LED_SCROLL_LOCK_PIN, led_state.scroll_lock); +# endif +# ifdef LED_COMPOSE_PIN + writePin(LED_COMPOSE_PIN, led_state.compose); +# endif +# ifdef LED_KANA_PIN + writePin(LED_KANA_PIN, led_state.kana); +# endif +#endif + + // Return false to let led_update_kb fall through. + return false; +} + +// Customized function to manage numlock indicator based on layer. +layer_state_t layer_state_set_user(layer_state_t state) { + switch (get_highest_layer(state)) { + // Base layer + case 0: + // Turn on numlock indicator. + writePin(LED_NUM_LOCK_PIN, LED_PIN_ON_STATE); + break; + + // Numpad navigation layer + case 2: + // Turn off numlock indicator. + writePin(LED_NUM_LOCK_PIN, !LED_PIN_ON_STATE); + break; + } + + return state; +} \ No newline at end of file diff --git a/keyboards/geonworks/w1_at/keymaps/zq/readme.md b/keyboards/geonworks/w1_at/keymaps/zq/readme.md new file mode 100644 index 000000000000..103130b161ac --- /dev/null +++ b/keyboards/geonworks/w1_at/keymaps/zq/readme.md @@ -0,0 +1,21 @@ +# Personal W1-AT keymap +The main highlights are as follows: +* VIA support enabled +* Enter bootloader mode using Fn + \ +* Grave key (` and ~) in place of Esc key +* Esc in place of CapsLock key +* Use NumLock LED indicator on layers: ON in layer 0, OFF in layer 2 (workaround for macOS since there is no NumLock key) +* Use CapsLock LED indicator on Esc key + + +## Layer 0 (Base) +--- +![Layer 0](https://i.imgur.com/l1OKSBB.png) + +## Layer 1 (Function) +--- +![Layer 1](https://i.imgur.com/RdzVyvb.png) + +## Layer 2 (Numpad Navigation) +--- +![Layer 2](https://i.imgur.com/xKVnQaK.png) \ No newline at end of file diff --git a/keyboards/geonworks/w1_at/keymaps/zq/rules.mk b/keyboards/geonworks/w1_at/keymaps/zq/rules.mk new file mode 100644 index 000000000000..036bd6d1c3ec --- /dev/null +++ b/keyboards/geonworks/w1_at/keymaps/zq/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes \ No newline at end of file diff --git a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/keymap.c b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/keymap.c new file mode 100644 index 000000000000..8ca676273bee --- /dev/null +++ b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/keymap.c @@ -0,0 +1,56 @@ +/* Copyright 2022 Eugenio Pastoral + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +enum custom_layers { + _BL, + _FL, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: Base Layer (Default Layer) + */ +[_BL] = LAYOUT( + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT), + + /* Keymap _FL: Function Layer + */ +[_FL] = LAYOUT( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, RGB_TOG, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, RGB_HUI, RGB_HUD, RGB_SPD, RGB_SPI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, RGB_VAI, _______, + EE_CLR, _______, _______, QK_BOOT, _______, _______, RGB_RMOD, RGB_VAD, RGB_MOD) +}; + +// Turns side LEDs to white for caps lock and layer indicators. +bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + if (host_keyboard_led_state().caps_lock || get_highest_layer(layer_state | default_layer_state)) { + for (uint8_t i = led_min; i < led_max; i++) { + if (HAS_FLAGS(g_led_config.flags[i], 0x02)) { // 0x02 == LED_FLAG_UNDERGLOW + rgb_matrix_set_color(i, 0xff, 0xff, 0xff); + } + } + } + return false; +}; diff --git a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/readme.md b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/readme.md new file mode 100644 index 000000000000..4f80a5b95663 --- /dev/null +++ b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/readme.md @@ -0,0 +1 @@ +# ANSI GMMKV2 65% Layout diff --git a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/rgb_matrix_user.inc b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/rgb_matrix_user.inc new file mode 100644 index 000000000000..2966fe25862a --- /dev/null +++ b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/rgb_matrix_user.inc @@ -0,0 +1,72 @@ + /* Copyright 2022 Eugenio Pastoral + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +RGB_MATRIX_EFFECT(SOLID_UNDERGLOW) +RGB_MATRIX_EFFECT(HOLOGRAPHICS_UNDERGLOW) + +#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS + +// This is a side lights only configuration where the solid color is following the current HSV setting. +static bool SOLID_UNDERGLOW(effect_params_t* params) { + RGB_MATRIX_USE_LIMITS(led_min, led_max); + + RGB rgb = rgb_matrix_hsv_to_rgb(rgb_matrix_config.hsv); + for (uint8_t i = led_min; i < led_max; i++) { + if (HAS_FLAGS(g_led_config.flags[i], 0x02)) { // 0x02 == LED_FLAG_UNDERGLOW + rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); + } else { + rgb_matrix_set_color(i, 0x00, 0x00, 0x00); + } + } + return rgb_matrix_check_finished_leds(led_max); +} + +// This is a side lights only configuration where the color is set to a static gradient. +static bool HOLOGRAPHICS_UNDERGLOW(effect_params_t* params) { + RGB_MATRIX_USE_LIMITS(led_min, led_max); + + for (uint8_t i = led_min; i < led_max; i++) { + if (HAS_FLAGS(g_led_config.flags[i], 0x02)) { // 0x02 == LED_FLAG_UNDERGLOW + // RIGHT-HAND SIDE LEDS || LEFT-HAND SIDE LEDS + if (i == 67 || i == 77) { + rgb_matrix_set_color(i, 0xff, 0x00, 0xee); + } else if (i == 68 || i == 78) { + rgb_matrix_set_color(i, 0xcc, 0x00, 0xff); + } else if (i == 69 || i == 79) { + rgb_matrix_set_color(i, 0x9e, 0x00, 0xff); + } else if (i == 70 || i == 80) { + rgb_matrix_set_color(i, 0x70, 0x00, 0xff); + } else if (i == 71 || i == 81) { + rgb_matrix_set_color(i, 0x52, 0x00, 0xff); + } else if (i == 72 || i == 82) { + rgb_matrix_set_color(i, 0x33, 0x00, 0xff); + } else if (i == 73 || i == 83) { + rgb_matrix_set_color(i, 0x00, 0x38, 0xff); + } else if (i == 74 || i == 84) { + rgb_matrix_set_color(i, 0x00, 0x57, 0xff); + } else if (i == 75 || i == 85) { + rgb_matrix_set_color(i, 0x00, 0x85, 0xff); + } else if (i == 76 || i == 86) { + rgb_matrix_set_color(i, 0x00, 0xb2, 0xff); + } else { + rgb_matrix_set_color(i, 0x00, 0x00, 0x00); + } + } + } + return rgb_matrix_check_finished_leds(led_max); +} + +#endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS diff --git a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/rules.mk b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/rules.mk new file mode 100644 index 000000000000..6245023e803f --- /dev/null +++ b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/achrovisual/rules.mk @@ -0,0 +1 @@ +RGB_MATRIX_CUSTOM_USER = yes diff --git a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/thekorn/keymap.c b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/thekorn/keymap.c new file mode 100644 index 000000000000..c5f90e3fee09 --- /dev/null +++ b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/thekorn/keymap.c @@ -0,0 +1,44 @@ +/* Copyright 2021 Glorious, LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +enum custom_layers { + _BL, + _FL, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: Base Layer (Default Layer) + */ +[_BL] = LAYOUT( + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT), + + /* Keymap _FL: Function Layer + */ +[_FL] = LAYOUT( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_INS, + RGB_M_P, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, RGB_HUI, RGB_HUD, RGB_SPD, RGB_SPI, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, RGB_VAI, RGB_TOG, + KC_MUTE, KC_VOLU, KC_VOLD, QK_BOOT, _______, _______, RGB_RMOD, RGB_VAD, RGB_MOD) +}; diff --git a/keyboards/gmmk/gmmk2/p65/ansi/keymaps/thekorn/readme.md b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/thekorn/readme.md new file mode 100644 index 000000000000..4f80a5b95663 --- /dev/null +++ b/keyboards/gmmk/gmmk2/p65/ansi/keymaps/thekorn/readme.md @@ -0,0 +1 @@ +# ANSI GMMKV2 65% Layout diff --git a/keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/keymap.c b/keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/keymap.c new file mode 100644 index 000000000000..971e0821a323 --- /dev/null +++ b/keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/keymap.c @@ -0,0 +1,107 @@ +/* Copyright 2021 Glorious, LLC + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include QMK_KEYBOARD_H + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Prt Rotary(Mute) +// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc Del +// Tab Q W E R T Y U I O P [ ] PgUp +// Caps A S D F G H J K L ; " # Enter PgDn +// Sh_L / Z X C V B N M , . ? Sh_R Up End +// Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right + + + // The FN key by default maps to a momentary toggle to layer 1 to provide access to the QK_BOOT key (to put the board into bootloader mode). Without + // this mapping, you have to open the case to hit the button on the bottom of the PCB (near the USB cable attachment) while plugging in the USB + // cable to get the board into bootloader mode - definitely not fun when you're working on your QMK builds. Remove this and put it back to KC_RGUI + // if that's your preference. + // + // To put the keyboard in bootloader mode, use FN+backspace. If you accidentally put it into bootloader, you can just unplug the USB cable and + // it'll be back to normal when you plug it back in. + // + // This keyboard defaults to 6KRO instead of NKRO for compatibility reasons (some KVMs and BIOSes are incompatible with NKRO). + // Since this is, among other things, a "gaming" keyboard, a key combination to enable NKRO on the fly is provided for convenience. + // Press Fn+N to toggle between 6KRO and NKRO. This setting is persisted to the EEPROM and thus persists between restarts. + [0] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_MUTE, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGUP, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT( + _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_PSCR, _______, + _______, RGB_TOG, RGB_M_P, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______, + _______, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, _______, _______, + _______, _______, _______, RGB_HUI, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, RGB_MOD, _______, + _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI + ), + + +}; +// clang-format on + +#ifdef ENCODER_ENABLE +bool encoder_update_user(uint8_t index, bool clockwise) { + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + return false; +} +#endif + +bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + static uint32_t cycle_led_timer = 0; + static uint8_t current_value = 0; + static uint8_t left_side_leds[8] = {68, 71, 74, 77, 81, 84, 88, 92}; + static uint8_t right_side_leds[8] = {69, 72, 75, 78, 82, 85, 89, 93}; + + if (host_keyboard_led_state().caps_lock) { + if (timer_elapsed32(cycle_led_timer) > 500) { + current_value = current_value == 0 ? 255 : 0; + cycle_led_timer = timer_read32(); + } + HSV tempHSV = {.h = 0, .s = 255, .v = current_value}; + RGB tempRGB = hsv_to_rgb(tempHSV); + for (uint8_t i = 0; i < ARRAY_SIZE(left_side_leds); i++) { + rgb_matrix_set_color(left_side_leds[i], tempRGB.r, tempRGB.g, tempRGB.b); + rgb_matrix_set_color(right_side_leds[i], tempRGB.r, tempRGB.g, tempRGB.b); + } + } + + static uint8_t l2_functions[26] = {6, 7, 8, 12, 13, 14, 15, 16, 18, 23, 28, 34, 38, 39, 44, 50, 56, 61, 66, 70, 80, 86, 94, 95, 96, 98}; + switch(get_highest_layer(layer_state)){ // special handling per layer + case 2: //layer one + break; + case 1: + for (uint8_t i = 0; i < ARRAY_SIZE(l2_functions); i++) { + RGB_MATRIX_INDICATOR_SET_COLOR(l2_functions[i], 255, 0, 0); + } + break; + default: + break; + break; + } + return false; +} diff --git a/keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/readme.md b/keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/readme.md new file mode 100644 index 000000000000..da66c447adad --- /dev/null +++ b/keyboards/gmmk/pro/rev1/iso/keymaps/chofstede/readme.md @@ -0,0 +1,8 @@ +# chofstede GMMK Pro layout + +- Added Print-Screen to FN+POS1 +- Added Insert to FN+# +- The LED bars on the left and right side of the keyboard blink red when CAPS Lock is enabled +- All mapped keys light up red when FN is being pressed + + diff --git a/keyboards/gmmk/pro/rev1/iso/keymaps/falkecarlsen/keymap.c b/keyboards/gmmk/pro/rev1/iso/keymaps/falkecarlsen/keymap.c new file mode 100644 index 000000000000..694fd80e197b --- /dev/null +++ b/keyboards/gmmk/pro/rev1/iso/keymaps/falkecarlsen/keymap.c @@ -0,0 +1,72 @@ +/* Copyright 2021 Glorious, LLC + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include QMK_KEYBOARD_H + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Prt Rotary(Mute) +// ~ 1 2 3 4 5 6 7 8 9 0 - (=) BackSpc Del +// Tab Q W E R T Y U I O P [ ] PgUp +// Caps A S D F G H J K L ; " # Enter PgDn +// Sh_L / Z X C V B N M , . ? Sh_R Up End +// Ct_L Win_L Alt_L SPACE Alt_R FN Ct_R Left Down Right + + + // The FN key by default maps to a momentary toggle to layer 1 to provide access to the QK_BOOT key (to put the board into bootloader mode). Without + // this mapping, you have to open the case to hit the button on the bottom of the PCB (near the USB cable attachment) while plugging in the USB + // cable to get the board into bootloader mode - definitely not fun when you're working on your QMK builds. Remove this and put it back to KC_RGUI + // if that's your preference. + // + // To put the keyboard in bootloader mode, use FN+backspace. If you accidentally put it into bootloader, you can just unplug the USB cable and + // it'll be back to normal when you plug it back in. + // + // This keyboard defaults to 6KRO instead of NKRO for compatibility reasons (some KVMs and BIOSes are incompatible with NKRO). + // Since this is, among other things, a "gaming" keyboard, a key combination to enable NKRO on the fly is provided for convenience. + // Press Fn+N to toggle between 6KRO and NKRO. This setting is persisted to the EEPROM and thus persists between restarts. + [0] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_MPLY, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGUP, + MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN, + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT( + _______, KC_BRID, KC_BRIU, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_MSTP, KC_MNXT, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______, + _______, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, RGB_VAD, RGB_TOG, RGB_VAI, RGB_HUI, _______, NK_TOGG, _______, _______, _______, _______, _______, RGB_MOD, _______, + _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI + ), + + +}; +// clang-format on + +#ifdef ENCODER_ENABLE +bool encoder_update_user(uint8_t index, bool clockwise) { + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + return false; +} +#endif diff --git a/keyboards/gmmk/pro/rev1/iso/keymaps/falkecarlsen/readme.md b/keyboards/gmmk/pro/rev1/iso/keymaps/falkecarlsen/readme.md new file mode 100644 index 000000000000..4239e0dcb8da --- /dev/null +++ b/keyboards/gmmk/pro/rev1/iso/keymaps/falkecarlsen/readme.md @@ -0,0 +1,8 @@ +# Falke Carlsen keymap for GMMK PRO ISO +Based on the default keymap, inheriting rotary encoder and LED configs without modification. + +## Changes: +- Fixes layer 1 of top-row to correspond to 'Keychron ISO Q1 & K2 Dye-Sub PBT Nordic' printed legend multimedia keys. +- Adds early 2010s Ducky layer 1 mouse-emulation to WASD with left+right click and scroll in the 2x4 cluster. +- Remaps default keymaps LED-handling to 2nd-row due to addition of mouse-emulation. +- Swap layer 0 rotary encoder click to play/pause, and layer 1 click to next. diff --git a/keyboards/gray_studio/think65/solder/keymaps/dangjoeltang/keymap.c b/keyboards/gray_studio/think65/solder/keymaps/dangjoeltang/keymap.c new file mode 100644 index 000000000000..884efb7b960b --- /dev/null +++ b/keyboards/gray_studio/think65/solder/keymaps/dangjoeltang/keymap.c @@ -0,0 +1,232 @@ +/* Copyright 2021 Qiaowei Tang + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + + + /* + * LED ranges for Think6.5v2 2U + * These values were derived from manual testing. Derived from keymaps/rys. + * ┌───────┬───────┬─────────────┬───────────────────────────────────────────┐ + * │ 00 01 │ 02 03 │ 04 05 06 07 │ 08 09 10 11 12 13 14 15 16 17 18 19 20 21 │ + * │ badge │ badge │    (?)     │              underglow (?)                │ + * │  bar │ icon │         │                               │ + * └───────┴───────┴─────────────┴───────────────────────────────────────────┘ + */ + +// Define the LED ranges start, end +#define THINK65_LED_RANGE_OFF 0, 0 +#define THINK65_LED_RANGE_CAPS 0, 2 +#define THINK65_LED_RANGE_BADGE 0, 4 +#define THINK65_LED_RANGE_UNDERGLOW 4, 22 +#define THINK65_LED_RANGE_ALL 0, 22 + +// Turn the LEDs off by setting HSV to 0, 0, 0 +#define THINK65_LEDS_OFF 0, 0, 0 + +// Caps Lock indicator LED +#define THINK65_LEDS_CAPS 0, 0, 255 + +#define THINK65_LED_STATE_OFF 0x0 // 0b00000000 +#define THINK65_LED_STATE_CAPS 0x1 // 0b00000001 +#define THINK65_LED_STATE_BADGE 0x2 // 0b00000010 +#define THINK65_LED_STATE_CAPS_AND_BADGE 0x3 // 0b00000011 + +// Define each LED range as a bit flag +#define THINK65_LED_CAPS_RANGE_BIT 0 +#define THINK65_LED_BADGE_RANGE_BIT 1 + +// Setup some keycodes to control cycling and range toggling +enum { + KVM_SW1 = SAFE_RANGE, + KVM_SW2, + CYC_LED, + TOG_BDG +}; + +// setup the user EEPROM space we need +typedef union { + uint8_t raw; + struct { + uint8_t current_led_state:8; + }; +} user_config_t; + +user_config_t user_config; + +// toggle one of the range flag bits +void toggle_led_state(unsigned int led_range) { + if (led_range >= THINK65_LED_CAPS_RANGE_BIT && led_range <= THINK65_LED_BADGE_RANGE_BIT) { + user_config.current_led_state ^= 1 << led_range; + } +} + +// set one of the range flag bits +void set_led_state(unsigned int led_range) { + if (led_range >= THINK65_LED_CAPS_RANGE_BIT && led_range <= THINK65_LED_BADGE_RANGE_BIT) { + user_config.current_led_state |= 1 << led_range; + } +} + +// clear one of the range flag bits +void clear_led_state(unsigned int led_range) { + if (led_range >= THINK65_LED_CAPS_RANGE_BIT && led_range <= THINK65_LED_BADGE_RANGE_BIT) { + user_config.current_led_state &= ~(1 << led_range); + } +} + +// cycle LED states: Off -> Esc -> Badge -> Underglow -> Esc+Badge -> Esc+Underglow -> Badge+Underglow -> All +void cycle_led_state(void) { + switch(user_config.current_led_state) { + case THINK65_LED_STATE_OFF: + user_config.current_led_state = THINK65_LED_STATE_CAPS; + break; + case THINK65_LED_STATE_CAPS: + user_config.current_led_state = THINK65_LED_STATE_BADGE; + break; + case THINK65_LED_STATE_BADGE: + user_config.current_led_state = THINK65_LED_STATE_CAPS_AND_BADGE; + break; + case THINK65_LED_STATE_CAPS_AND_BADGE: + user_config.current_led_state = THINK65_LED_STATE_OFF; + break; + default: + break; + } +} + +void apply_led_state(void) { + uint8_t h = rgblight_get_hue(); + uint8_t s = rgblight_get_sat(); + uint8_t v = rgblight_get_val(); + + // Set the RGB ranges based on the current state + switch(user_config.current_led_state) { + case THINK65_LED_STATE_OFF: + rgblight_sethsv_range(THINK65_LEDS_OFF, THINK65_LED_RANGE_ALL); + break; + case THINK65_LED_STATE_CAPS: + rgblight_sethsv_range(THINK65_LEDS_OFF, THINK65_LED_RANGE_BADGE); + rgblight_sethsv_range(THINK65_LEDS_CAPS, THINK65_LED_RANGE_CAPS); + break; + case THINK65_LED_STATE_BADGE: + rgblight_sethsv_range(THINK65_LEDS_OFF, THINK65_LED_RANGE_CAPS); + rgblight_sethsv_range(h, s, v, THINK65_LED_RANGE_BADGE); + break; + case THINK65_LED_STATE_CAPS_AND_BADGE: + rgblight_sethsv_range(h, s, v, THINK65_LED_RANGE_BADGE); + rgblight_sethsv_range(THINK65_LEDS_CAPS, THINK65_LED_RANGE_CAPS); + break; + default: + break; + } +} + +void keyboard_post_init_user(void) { + user_config.raw = eeconfig_read_user(); + + if (user_config.current_led_state >= THINK65_LED_STATE_OFF && user_config.current_led_state <= THINK65_LED_STATE_CAPS_AND_BADGE) { + // If the current state read from user EEPROM is valid, apply it + apply_led_state(); + } else { + // Setup a new default state of off + user_config.current_led_state = THINK65_LED_STATE_OFF; + apply_led_state(); + eeconfig_update_user(user_config.raw); + } +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KVM_SW1: + if (record->event.pressed) { + SEND_STRING(SS_TAP(X_RCTL) SS_TAP(X_RCTL) "1"); + } else {} + break; + case KVM_SW2: + if(record->event.pressed) { + SEND_STRING(SS_TAP(X_RCTL) SS_TAP(X_RCTL) "2"); + } else {} + break; + case CYC_LED: + if (record->event.pressed) { + cycle_led_state(); + apply_led_state(); + eeconfig_update_user(user_config.raw); + } + break; + case TOG_BDG: + if (record->event.pressed) { + toggle_led_state(THINK65_LED_BADGE_RANGE_BIT); + apply_led_state(); + eeconfig_update_user(user_config.raw); + } + break; + case KC_CAPS: + if (!record->event.pressed) { + // connect capslock LED control to the badge LEDs + host_keyboard_led_state().caps_lock ? set_led_state(THINK65_LED_CAPS_RANGE_BIT) : clear_led_state(THINK65_LED_CAPS_RANGE_BIT); + apply_led_state(); + eeconfig_update_user(user_config.raw); + } + break; + } + return true; +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Base Layer + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐ + * │Esc│! 1│@ 2│# 3│$ 4│% 5│^ 6│& 7│* 8│( 9│) 0│_ -│+ =│ Bckspc│` ~│ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤ + * │Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │{ [│} ]│| \│Del│ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ + * │HyCaps│ A │ S │ D │ F │ G │ H │ J │ K │ L │: ;│" '│ Enter│ │ + * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ │ + * │Shift │ Z │ X │ C │ V │ B │ N │ M │< ,│> .│? /│ Shift│ Up│ │ + * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤ + * │Ctrl│ Opt│ Cmd│ Space │Cmd │FnPy│ │Lef│Dow│Rig│ + * └────┴────┴────┴────────────────────────┴────┴────┴─┴───┴───┴───┘ + */ + [0] = LAYOUT_65_ansi_blocker( + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, XXXXXXX, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, XXXXXXX, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + /* + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬────────┬───┐ + * │RST│ F1│ F2│ F3│ F4│ F5│ F6│ F7│ F8│ F9│F10│F11│F12│        │SW1│ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬──────┼───┤ + * │ TOG │PLN│MOD│HU+│HU-│SA+│SA-│VA+│VA-│ │ │Hom│End│ │SW2│ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴──────┼───┤ + * │ │CYC│BDG│UGL│CAP│ │ │ │ │ │ │ │ │ │ + * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬────┤ │ + * │ │ │ │ │ │ │ │ │ │ │ │ │Vol+│ │ + * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼────┼───┤ + * │ │ │ │ │ │ │ │ │Vol-│ │ + * └────┴────┴────┴────────────────────────┴────┴────┴─┴───┴────┴───┘ + */ + [1] = LAYOUT_65_ansi_blocker( + QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KVM_SW1, + TOG_BDG, RGB_M_P, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, KC_HOME, KC_END, _______, KVM_SW2, + _______, CYC_LED, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, + _______, _______, _______, _______, _______, _______, _______, KC_VOLD, _______ + ), + +}; + diff --git a/keyboards/gray_studio/think65/solder/keymaps/dangjoeltang/readme.md b/keyboards/gray_studio/think65/solder/keymaps/dangjoeltang/readme.md new file mode 100644 index 000000000000..520e7e0752e3 --- /dev/null +++ b/keyboards/gray_studio/think65/solder/keymaps/dangjoeltang/readme.md @@ -0,0 +1,9 @@ +# dangjoeltang's Think6.5v2 keymap + +My personal keymap for the Think6.5v2. Using the `LAYOUT_65_ansi_blocker` LAYOUT for a 2U blocker version. I added functionality to enable the Caps-lock indicator LED above the badge. This functionality shipped with the original board; however, for those who reflash their boards using the default `gray_studio/think65/solder` keymaps that functionality disappeared. + +## [Base Layer](http://www.keyboard-layout-editor.com/#/gists/9c6a905a643b77249958f28662348f53) +![Base Layer](https://imgur.com/Gyim08a) + +## [Function Layer](http://www.keyboard-layout-editor.com/#/gists/1c061d3664ea5caf5cb64c759339278d) +![Function Layer](https://imgur.com/H2Yqnv3) diff --git a/keyboards/gray_studio/think65/solder/keymaps/yt/config.h b/keyboards/gray_studio/think65/solder/keymaps/yt/config.h new file mode 100644 index 000000000000..6bdff5008e44 --- /dev/null +++ b/keyboards/gray_studio/think65/solder/keymaps/yt/config.h @@ -0,0 +1,19 @@ +/* Copyright 2022 Yt Liu + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#define RGBLIGHT_LAYERS diff --git a/keyboards/gray_studio/think65/solder/keymaps/yt/keymap.c b/keyboards/gray_studio/think65/solder/keymaps/yt/keymap.c new file mode 100644 index 000000000000..d4d6a7157af9 --- /dev/null +++ b/keyboards/gray_studio/think65/solder/keymaps/yt/keymap.c @@ -0,0 +1,139 @@ +/* Copyright 2021 Qiaowei Tang + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + + + /* + * LED ranges for Think6.5v2 2U + * These values were derived from manual testing. Derived from keymaps/rys. + * ┌───────┬───────┬─────────────┬───────────────────────────────────────────┐ + * │ 00 01 │ 02 03 │ 04 05 06 07 │ 08 09 10 11 12 13 14 15 16 17 18 19 20 21 │ + * │ badge │ badge │    (?)     │              underglow (?)                │ + * │  bar │ icon │         │                               │ + * └───────┴───────┴─────────────┴───────────────────────────────────────────┘ + */ + + +// Setup some layers to control mac/win layouts +#include QMK_KEYBOARD_H + +enum bs_layers { + _WIN, + _MAC, + _FN, + _BLANC +}; + +// Setup some keycodes to control cycling and range toggling +enum bs_keycodes { + WIN = SAFE_RANGE, + MAC +}; + +// Light LEDs 6 to 9 and 12 to 15 red when caps lock is active. Hard to ignore! +const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0, 4, HSV_WHITE} // Light 4 LEDs, starting with LED 12 +); + +// Now define the array of layers. Later layers take precedence +const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( + my_capslock_layer // Overrides other layers +); + +void keyboard_post_init_user(void) { + // Enable the LED layers + rgblight_layers = my_rgb_layers; +}; + +bool led_update_user(led_t led_state) { + rgblight_set_layer_state(0, led_state.caps_lock); + return true; +}; + +layer_state_t default_layer_state_set_user(layer_state_t state) { + if (get_highest_layer(state) == _MAC) { + rgblight_mode_noeeprom(6); + } else { + rgblight_mode_noeeprom(9); + } + return state; +} + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Win Layer + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐ + * │Esc│! 1│@ 2│# 3│$ 4│% 5│^ 6│& 7│* 8│( 9│) 0│_ -│+ =│ Bckspc│pup│ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤ + * │Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │{ [│} ]│| \│pdw│ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ + * │lTCap │ A │ S │ D │ F │ G │ H │ J │ K │ L │: ;│" '│ Enter│ │ + * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ │ + * │Shift │ Z │ X │ C │ V │ B │ N │ M │< ,│> .│? /│ Shift│ Up│ │ + * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴───┴┬─┬───┼───┼───┤ + * │Ctrl│ win│ alt│ Space │ Func │ │Lef│Dow│Rig│ + * └────┴────┴────┴────────────────────────┴─────────┴─┴───┴───┴───┘ + */ + [_WIN] = LAYOUT_65_ansi_blocker( + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, + LT(_FN, KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, _______, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, _______, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_1, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT + ), + /* Mac Layer + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐ + * │Esc│! 1│@ 2│# 3│$ 4│% 5│^ 6│& 7│* 8│( 9│) 0│_ -│+ =│ Bckspc│pup│ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤ + * │Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │{ [│} ]│| \│pdw│ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ + * │lTCap │ A │ S │ D │ F │ G │ H │ J │ K │ L │: ;│" '│ Enter│ │ + * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ │ + * │Shift │ Z │ X │ C │ V │ B │ N │ M │< ,│> .│? /│ Shift│ Up│ │ + * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴───┴┬─┬───┼───┼───┤ + * │Ctrl│ Opt│ Cmd│ Space │ Func │ │Lef│Dow│Rig│ + * └────┴────┴────┴────────────────────────┴─────────┴─┴───┴───┴───┘ + */ + [_MAC] = LAYOUT_65_ansi_blocker( + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, + LT(_FN, KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, _______, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, _______, + KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_1, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT + ), + /* Fn Layer + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬────────┬───┐ + * │lck│ F1│ F2│ F3│ F4│ F5│ F6│ F7│ F8│ F9│F10│F11│F12│ delete │mac│ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬──────┼───┤ + * │ TOG │MB1│MSU│MB2│MDU│ │ │ │UP │ │Hom│pgu│End│ │win│ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴──────┼───┤ + * │MO(2) │MSL│MSD│MSR│MWD│ │ │Lft│Dwn│rgt│END│pgd│ reset │ │ + * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬────┤ │ + * │ RGB_mod│F13│F14│F15│F16│F17│F18│F19│F20│F21│F22│F23 │Bri+│ │ + * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼────┼───┤ + * │Vold│Mute│Volu│ │ │ │ │ │Bri-│ │ + * └────┴────┴────┴────────────────────────┴────┴────┴─┴───┴────┴───┘ + */ + [_FN] = LAYOUT_65_ansi_blocker( + QK_LOCK, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, MAC, + RGB_TOG, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_MS_WH_UP, _______, _______, _______, KC_UP, _______, KC_HOME, KC_PGUP, _______, _______, WIN, + _______, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_DOWN, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_END, KC_PGDN, QK_BOOT, _______, + RGB_MOD, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_BRIU, _______, + KC_VOLD, KC_MUTE, KC_VOLU, _______, _______, _______, _______, KC_BRID, _______ + ), + +}; + + diff --git a/keyboards/gray_studio/think65/solder/keymaps/yt/readme.md b/keyboards/gray_studio/think65/solder/keymaps/yt/readme.md new file mode 100644 index 000000000000..84286c5e342f --- /dev/null +++ b/keyboards/gray_studio/think65/solder/keymaps/yt/readme.md @@ -0,0 +1,3 @@ +# YT45's Think6.5v2 keymap + +My personal keymap for the Think6.5v2. Using the dangjoeltang as a the base and adding a quick switch from mac to win layouts. also with indication of the current layer with RGB lights. diff --git a/keyboards/gray_studio/think65/solder/keymaps/yt/rules.mk b/keyboards/gray_studio/think65/solder/keymaps/yt/rules.mk new file mode 100644 index 000000000000..378684852980 --- /dev/null +++ b/keyboards/gray_studio/think65/solder/keymaps/yt/rules.mk @@ -0,0 +1,5 @@ +LTO_ENABLE = yes +VIA_ENABLE = yes +MOUSEKEY_ENABLE = yes +KEY_LOCK_ENABLE = yes +CONSOLE_ENABLE = no \ No newline at end of file diff --git a/keyboards/hadron/ver3/keymaps/sebaslayout/keymap.c b/keyboards/hadron/ver3/keymaps/sebaslayout/keymap.c new file mode 100644 index 000000000000..fcae7f07c6c3 --- /dev/null +++ b/keyboards/hadron/ver3/keymaps/sebaslayout/keymap.c @@ -0,0 +1,43 @@ +#include QMK_KEYBOARD_H +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PSCR, + KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_P7, KC_P8, KC_P9, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_SCLN, KC_P4, KC_P5, KC_P6, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_SLSH, KC_P1, KC_P2, KC_P3, + KC_LCTL, KC_LGUI, KC_LALT, MO(1), KC_SPC, KC_SPC, KC_SPC, MO(1), KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), +/* Primary + * ,------+------+------+------+------+------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | PRTSN| + * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------. + * | ˜ | Q | W | E | R | T | Y | U | I | O | P | BKSP | 7 | 8 | 9 | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | A | S | D | F | G | H | J | K | L | ' | ; | 4 | 5 | 6 | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | Up | /? | 1 | 2 | 3 | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Alt | GUI | Raise| Space | Raise| Ctrl | Left | Down |Right | 0 | . | Enter| + * `--------------------------------------------------------------------------------------------------------' + */ + LAYOUT( + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F11, KC_F12, KC_TRNS, KC_HOME, KC_INS, KC_PGUP, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_DEL, KC_PGDN, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), +/* Secondary + * ,------+------+------+------+------+------------------------------------------------. + * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | | + * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------. + * | | | | | | | | | | F11 | F12 | | Home | Ins | PgUP | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | End | Del | PgDN | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | Vol+ | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | Vol- | | | | | + * `--------------------------------------------------------------------------------------------------------' + */ +}; + diff --git a/keyboards/hadron/ver3/keymaps/sebaslayout/readme.md b/keyboards/hadron/ver3/keymaps/sebaslayout/readme.md new file mode 100644 index 000000000000..ce6974ce0968 --- /dev/null +++ b/keyboards/hadron/ver3/keymaps/sebaslayout/readme.md @@ -0,0 +1,7 @@ +![Hadron v3 Layout Image](https://i.imgur.com/Mi5L57j.png) + +# My Custome Hadron Layout + ++ Moved numpad to the right ++ changed F row to standard numbers ++ Bottom row subject to change diff --git a/keyboards/handwired/aim65/keymaps/bonnee/keymap.c b/keyboards/handwired/aim65/keymaps/bonnee/keymap.c new file mode 100644 index 000000000000..7884841b21ad --- /dev/null +++ b/keyboards/handwired/aim65/keymaps/bonnee/keymap.c @@ -0,0 +1,42 @@ +/* Copyright 2021 Matteo Bonora + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +#define CTESC LCTL_T(KC_ESC) + +enum layer_names { + BL, + FL +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [BL] = LAYOUT( + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_RGUI, + CTESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + LT(FL, KC_SPC) + ), + + [FL] = LAYOUT( + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, + KC_TAB, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______ + ) +}; diff --git a/keyboards/handwired/baredev/rev1/keymaps/manoshu/keymap.c b/keyboards/handwired/baredev/rev1/keymaps/manoshu/keymap.c new file mode 100644 index 000000000000..82277e215843 --- /dev/null +++ b/keyboards/handwired/baredev/rev1/keymaps/manoshu/keymap.c @@ -0,0 +1,99 @@ +/* Copyright 2021 Fernando "ManoShu" Rodrigues + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + +#include "keymap_brazilian_abnt2.h" +#include "sendstring_brazilian_abnt2.h" + +enum { + LAYER_BASE, + LAYER_FUNCTIONS +}; + +#define L_FUNCT MO(LAYER_FUNCTIONS) +#define W_CHOLD LGUI_T(KC_CAPS) + +//Combination keycodes +#define KC_PSBR C(KC_PAUSE) // Ctrl+Pause/Break +#define KC_SNIP SGUI(BR_S) // Screen Snip (GUI + Shift + S) +#define KC_WRUN G(BR_R) // Run (GUI + R) +#define KC_WLCK G(BR_L) // Lock (GUI + L) +#define KC_WDSK G(BR_D) // Desktop (GUI + D) +#define KC_WEXP G(BR_E) // Explorer (GUI + E) +#define KC_WPSE G(KC_PAUSE) // System Properties (GUI + Pause) +#define KC_WMGP G(BR_EQL) // Magnify (+) +#define KC_WMGM G(BR_MINS) // Magnify (-) + +enum custom_keycodes { + KC_WPRN = SAFE_RANGE, // Project (P) + KC_WSPC // Input Select (Space) +}; + +layer_state_t layer_state_set_user(layer_state_t state) { + if (get_highest_layer(state) == LAYER_BASE) { + unregister_mods(MOD_MASK_GUI); + } + return state; +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if(keycode == KC_WPRN || keycode == KC_WSPC) { + if (record->event.pressed) { + + register_code(KC_LGUI); + + if(keycode == KC_WPRN) { + tap_code(KC_P); + } else if (keycode == KC_WSPC) { + tap_code(KC_SPACE); + } + } + } + return true; +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [LAYER_BASE] = LAYOUT( + /* ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ */ + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + /* ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┴─────────┤ */ + BR_QUOT, BR_1, BR_2, BR_3, BR_4, BR_5, BR_6, BR_7, BR_8, BR_9, BR_0, BR_MINS, BR_EQL, KC_BSPC, + /* ├─────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬──────────────┤ */ + KC_TAB, BR_Q, BR_W, BR_E, BR_R, BR_T, BR_Y, BR_U, BR_I, BR_O, BR_P, BR_ACUT, BR_LBRC, KC_ENT, + /* ├──────────────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬ ┤ */ + W_CHOLD, BR_A, BR_S, BR_D, BR_F, BR_G, BR_H, BR_J, BR_K, BR_L, BR_CCED, BR_TILD, BR_RBRC, + /* ├───────────┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴─────────┴─┬─────────┤ */ + KC_LSFT, BR_BSLS, BR_Z, BR_X, BR_C, BR_V, BR_B, BR_N, BR_M, BR_COMM, BR_DOT, BR_SCLN, BR_SLSH, KC_UP, + /* ├───────────┼─────────┴─┬───────┴───┬─────┴─────────┴─────────┴─────────┴─────────┴─────────┴───────┬─┴───────┬─┴───────┬─┴───────┬─────────┼─────────┤ */ + KC_LCTL, L_FUNCT, KC_LALT, KC_SPC, KC_APP, KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT + /* └───────────┴───────────┴───────────┴───────────────────────────────────────────────────────────────┴─────────┴─────────┴─────────┴─────────┴─────────┘ */ + ), + [LAYER_FUNCTIONS] = LAYOUT( + /* ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ */ + QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSBR, KC_SNIP, + /* ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┴─────────┤ */ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WMGM, KC_WMGP, _______, + /* ├─────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬──────────────┤ */ + _______, KC_MPLY, KC_MUTE, KC_WEXP, KC_WRUN, _______, _______, _______, _______, _______, KC_WPRN, _______, _______, _______, + /* ├──────────────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬ ┤ */ + _______, KC_MPRV, KC_MNXT, KC_WDSK, _______, _______, _______, _______, _______, KC_WLCK, _______, _______, _______, + /* ├───────────┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴─────────┴─┬─────────┤ */ + _______, _______, KC_VOLU, KC_VOLD, KC_CALC, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, + /* ├───────────┼─────────┴─┬───────┴───┬─────┴─────────┴─────────┴─────────┴─────────┴─────────┴───────┬─┴───────┬─┴───────┬─┴───────┬─────────┼─────────┤ */ + _______, _______, _______, KC_WSPC, _______, KC_INS, KC_HOME, KC_PGDN, KC_END + /* └───────────┴───────────┴───────────┴───────────────────────────────────────────────────────────────┴─────────┴─────────┴─────────┴─────────┴─────────┘ */ + ) +}; \ No newline at end of file diff --git a/keyboards/handwired/baredev/rev1/keymaps/manoshu/readme.md b/keyboards/handwired/baredev/rev1/keymaps/manoshu/readme.md new file mode 100644 index 000000000000..1852a0fbc208 --- /dev/null +++ b/keyboards/handwired/baredev/rev1/keymaps/manoshu/readme.md @@ -0,0 +1,16 @@ +![BareDev Layout Image](https://i.imgur.com/FXye4Hn.png) + +# ManoShu's custom layout + +Has all the functions of a ABNT TKL keyboard, sans right shift. + +Basic media functions also included. + +Trying to emulate where notebooks/smaller OEM keyboard put the function key, for this reason the GUI key was moved and it can be used by holding the Caps Lock key. + +To not use the new GUI position very often, commonly used GUI + [X] commands are sent using `SEND_STRING()`, `(un)register_code()` and `tap_code()`. + +## Why you didn't used `LT(FUNCTIONS, KC_LGUI)` on the GUI/FN key? +Because I don't want rely on the tapping term to determine I will send either KC_HOME or snap the active window to the left. + +If there is a better way to solve this, please let me know. \ No newline at end of file diff --git a/keyboards/handwired/bento/keymaps/cbc02009/keymap.c b/keyboards/handwired/bento/keymaps/cbc02009/keymap.c new file mode 100644 index 000000000000..57c107b9fc94 --- /dev/null +++ b/keyboards/handwired/bento/keymaps/cbc02009/keymap.c @@ -0,0 +1,42 @@ +/* Copyright 2019 cbc02009 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + + +/* LAYER 1 + * ,---------------+-------. + * |KC_MPRV|KC_MNXT|KC_MUTE| + * |-------+-------+-------, + * |KC_MPLY|KC_MSTP|KC_MUTE| + * `-------+-------+-------' + */ +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT(KC_MPRV, KC_MNXT, KC_MUTE, KC_MPLY, KC_MSTP, KC_MUTE) +}; + +#ifdef ENCODER_ENABLE +#include "encoder.h" +bool encoder_update_user(uint8_t index, bool clockwise) { + if (index == 0) { /* First encoder */ + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + } + return true; +} +#endif diff --git a/keyboards/handwired/dactyl_manuform/4x5_5/keymaps/ssedrick/keymap.c b/keyboards/handwired/dactyl_manuform/4x5_5/keymaps/ssedrick/keymap.c new file mode 100644 index 000000000000..5774ab7f3bd6 --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/4x5_5/keymaps/ssedrick/keymap.c @@ -0,0 +1,89 @@ +// Copyright 2022 Shem Sedrick (@ssedrick) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H +#include "print.h" + +enum key_layers { + _BASE, + _COLEMAK, + _RAISE, + _LOWER +}; + +enum layer_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, +}; + +#define RAISE TT(_RAISE) +#define LOWER MO(_LOWER) +#define SH_ESC SFT_T(KC_ESC) +#define UNDSC RSFT(KC_MINS) +#define MAC_LOCK C(G(KC_D)) +#define ____ KC_TRANSPARENT + +#undef TAPPING_TOGGLE +#define TAPPING_TOGGLE 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT( + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, + KC_LCBR, KC_RCBR, KC_QUOT, KC_GRV, + SH_ESC, KC_LGUI, KC_TAB, KC_RSFT, KC_SPC, KC_ENT, + RAISE, KC_LCTL, KC_BSPC, LOWER + ), + + [_COLEMAK] = LAYOUT( + KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, + KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, + KC_LCBR, KC_RCBR, KC_QUOT, KC_GRV, + ____, ____, ____, ____, ____, ____, + ____, ____, ____, ____ + ), + + [_RAISE] = LAYOUT( + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, + S(KC_9), S(KC_0), KC_LBRC, KC_RBRC, KC_EQL, KC_MINS, KC_4, KC_5, KC_6, KC_QUOT, + QK_RBT, QK_BOOT, ____, ____, ____, ____, KC_1, KC_2, KC_3, ____, + MAC_LOCK, ____, KC_0, KC_DOT, + ____, ____, ____, ____, ____, ____, + ____, ____, ____, ____ + ), + + [_LOWER] = LAYOUT( + KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, + S(KC_9), S(KC_0), KC_LBRC, KC_RBRC, KC_EQL, UNDSC, KC_MINS, KC_EQL, KC_BSLS, KC_PIPE, + KC_MNXT, KC_MPLY, KC_VOLU, KC_VOLD, ____, ____, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, + ____, ____, QWERTY, COLEMAK, + ____, ____, ____, ____, ____, ____, + ____, ____, ____, ____ + ) +}; + + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + // If console is enabled, it will print the matrix position and status of each key pressed +#ifdef CONSOLE_ENABLE + uprintf("KL: kc: 0x%04X, col: %u, row: %u, pressed: %d, time: %u, interrupt: %d, count: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed, record->event.time, record->tap.interrupted, record->tap.count); +#endif + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + set_single_persistent_default_layer(_BASE); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + set_single_persistent_default_layer(_COLEMAK); + } + return false; + break; + } + return true; +} + diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/nabos/config.h b/keyboards/handwired/dactyl_manuform/5x6/keymaps/nabos/config.h new file mode 100644 index 000000000000..2ab0c912a342 --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/5x6/keymaps/nabos/config.h @@ -0,0 +1,21 @@ +/* +Copyright 2022 Nabos + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#pragma once + +#define EE_HANDS + diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/nabos/keymap.c b/keyboards/handwired/dactyl_manuform/5x6/keymaps/nabos/keymap.c new file mode 100644 index 000000000000..d118eec92abf --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/5x6/keymaps/nabos/keymap.c @@ -0,0 +1,75 @@ +/* +Copyright 2022 Nabos + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ +#include QMK_KEYBOARD_H + +enum layer_names { + _QWERTY, + _FUNCTIONS, + _NUMPAD, + _GAMING +}; + +#define FUNCTIONS MO(_FUNCTIONS) +#define NUMPAD MO(_NUMPAD) +#define GAMING TG(_GAMING) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QWERTY] = LAYOUT_5x6( + QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 ,KC_RBRC, + KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P ,KC_LBRC, + KC_PGUP, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L ,KC_SCLN,KC_QUOT, + KC_PGDN, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M ,KC_COMM,KC_DOT,KC_SLSH,_______, + KC_LEFT,KC_RIGHT, KC_DOWN,KC_UP , + KC_LSFT,KC_SPC , KC_ENT ,KC_BSPC, + KC_LGUI,KC_LALT, FUNCTIONS,KC_RALT, + KC_DEL ,GAMING , NUMPAD ,KC_RCTL + ), + + [_FUNCTIONS] = LAYOUT_5x6( + KC_F12 , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 ,KC_F10 ,KC_F11 , + _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, + _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, + _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, + _______,_______, _______,_______, + _______,_______, _______,_______, + _______,_______, _______,_______, + _______,_______, _______,_______ + ), + + [_NUMPAD] = LAYOUT_5x6( + _______,_______,_______,_______,_______,_______, _______,KC_NUM ,_______,_______,KC_MINS,KC_EQL , + _______,_______,_______,_______,_______,_______, _______,KC_KP_7,KC_KP_8,KC_KP_9,_______,_______, + _______,_______,_______,_______,_______,_______, _______,KC_KP_4,KC_KP_5,KC_KP_6,_______,_______, + _______,_______,_______,_______,_______,_______, _______,KC_KP_1,KC_KP_2,KC_KP_3,_______,KC_PSCR, + _______,_______, KC_KP_0,KC_PDOT, + _______,_______, KC_PENT,_______, + _______,_______, _______,_______, + _______,_______, _______,_______ + ), + + [_GAMING] = LAYOUT_5x6( + _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, + KC_T ,KC_TAB , KC_Q , KC_W , KC_E , KC_R , _______,_______,_______,_______,_______,_______, + KC_G ,KC_LSFT, KC_A , KC_S , KC_D , KC_F , _______,_______,_______,_______,_______,_______, + KC_B ,KC_LCTL, KC_Z , KC_X , KC_C , KC_V , _______,_______,_______,_______,_______,_______, + _______,_______, _______,_______, + _______,_______, _______,_______, + _______,_______, _______,_______, + _______,_______, _______,_______ + ) +}; + diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/config.h b/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/config.h new file mode 100644 index 000000000000..e97810f8bc39 --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/config.h @@ -0,0 +1,49 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + + +#pragma once + +#define MASTER_LEFT +// #define MASTER_RIGHT +//#define EE_HANDS + +// Mouse +#undef MOUSEKEY_INTERVAL +#define MOUSEKEY_INTERVAL 15 +#undef MOUSEKEY_TIME_TO_MAX +#define MOUSEKEY_TIME_TO_MAX 60 +#undef MOUSEKEY_WHEEL_MAX_SPEED +#define MOUSEKEY_WHEEL_MAX_SPEED 3 + +// RGB backlight +#undef WS2812_DI_PIN +#define WS2812_DI_PIN D3 +#undef RGBLED_NUM +#define RGBLED_NUM 30 +#define RGBLIGHT_EFFECT_BREATHING +#define RGBLIGHT_EFFECT_RAINBOW_MOOD +#define RGBLIGHT_EFFECT_RAINBOW_SWIRL +#define RGBLIGHT_EFFECT_SNAKE +#define RGBLIGHT_EFFECT_KNIGHT +#define RGBLIGHT_EFFECT_CHRISTMAS +#define RGBLIGHT_EFFECT_STATIC_GRADIENT +#define RGBLIGHT_EFFECT_RGB_TEST +#define RGBLIGHT_EFFECT_ALTERNATING +#define RGBLIGHT_EFFECT_TWINKLE +#define RGBLIGHT_LIMIT_VAL 95 +#define RGBLIGHT_SPLIT diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/keymap.c b/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/keymap.c new file mode 100644 index 000000000000..c4887a3dbb55 --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/keymap.c @@ -0,0 +1,106 @@ +/* A standard layout for the Dactyl Manuform 5x6 Keyboard */ + +#include QMK_KEYBOARD_H + +enum layer_names { + _MAC, + _WINDOWS, + _MOUSE, + _ARROWS, + _SYMBOLS, + _NUMBERS, + _MEDIA, +}; + +#define RAISE MO(_RAISE) +#define LOWER MO(_LOWER) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_MAC] = LAYOUT_5x6( + KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 ,KC_GRAVE, + KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P ,KC_MINS, + KC_BSPC, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L ,KC_SCLN,KC_QUOT, + KC_LSFT, CTL_T(KC_Z) , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_BSLS, + KC_LALT,KC_LCTL, KC_DEL, KC_PMNS, + KC_SPC, MO(_ARROWS), MO(_MOUSE), KC_ENT, + KC_LCMD, MO(_SYMBOLS), KC_EQL, KC_RALT, + KC_LALT, MO(_NUMBERS), MO(_MEDIA), KC_EJCT + ), + + [_WINDOWS] = LAYOUT_5x6( + + _______,_______, _______ ,_______,_______ ,_______, _______,_______,_______,_______,_______,_______, + _______,_______,_______,_______,_______,_______, _______, _______ , _______ , _______ ,_______,_______, + _______,_______,_______,_______,_______ ,_______, _______, _______ , _______ , _______ ,_______,_______, + _______,_______,_______,_______,_______,_______, _______, _______ , _______ , _______ ,_______ ,_______, + KC_LCMD,KC_LALT, _______, _______, + _______,_______, _______,_______, + KC_LCTL,_______, _______,_______, + _______,_______, _______,_______ + + ), + + [_MOUSE] = LAYOUT_5x6( + + KC_F11,KC_F1, KC_F2 ,KC_F3,KC_F4 ,KC_F5, KC_F6,KC_F7,KC_F8,KC_F9,KC_F10,KC_F12, + _______,_______,_______,KC_WH_U,_______,_______, _______, _______ , KC_MS_U , _______ ,_______,_______, + _______,_______,KC_WH_L,KC_WH_D,KC_WH_R ,_______, KC_BTN1, KC_MS_L , KC_MS_D , KC_MS_R ,_______,_______, + _______,_______,KC_ACL0,KC_ACL1,KC_ACL2,_______, _______, KC_BTN2 , _______ , _______ ,_______ ,_______, + _______,_______, _______, QK_BOOT, + KC_BTN1,KC_BTN2, _______,_______, + _______,KC_BTN2, _______,_______, + _______,_______, _______,_______ + + ), + [_ARROWS] = LAYOUT_5x6( + + QK_BOOT,_______, _______ ,_______,_______ ,TG(_WINDOWS), _______,_______,_______,_______,_______,_______, + _______,_______,_______,_______,_______,_______, _______, KC_HOME , KC_UP , KC_END ,_______,_______, + _______,_______,_______,_______,_______ ,_______, KC_HOME, KC_LEFT , KC_DOWN , KC_RIGHT ,KC_END,_______, + _______,_______,_______,_______,_______,_______, _______, KC_PGDN , _______ , KC_PGUP ,_______ ,_______, + QK_BOOT,_______, _______, _______, + _______,_______, _______,_______, + _______,_______, _______,_______, + _______,_______, _______,_______ + + ), + [_SYMBOLS] = LAYOUT_5x6( + + _______,_______, _______ ,_______,_______ ,_______, KC_CIRC,KC_CIRC,KC_LABK,KC_RABK,_______,_______, + _______,_______,_______,_______,_______,_______, KC_LABK, KC_AT , KC_LCBR , KC_RCBR ,KC_HASH,KC_RABK, + _______,_______,_______,_______,_______ ,_______, KC_PERC, KC_EQL , KC_LPRN , KC_RPRN ,KC_DLR,KC_AMPR, + _______,_______,_______,_______,_______,_______, KC_TILD, KC_GRAVE , KC_LBRC , KC_RBRC ,KC_PIPE ,KC_EXLM, + _______,_______, KC_PPLS, KC_PMNS, + _______,_______, _______,_______, + _______,_______, _______,_______, + _______,_______, _______,_______ + + ), + [_NUMBERS] = LAYOUT_5x6( + + QK_BOOT,_______, _______ ,_______,_______ ,_______, KC_PSLS,KC_PAST,KC_PPLS,KC_PMNS,_______,_______, + _______,_______,_______,KC_PSLS,KC_PAST,_______, _______, KC_7 , KC_8 , KC_9 ,_______,_______, + _______,_______,_______,KC_PMNS,KC_PPLS ,_______, _______, KC_4 , KC_5 , KC_6 ,_______,_______, + _______,_______,_______,_______,_______,_______, _______, KC_1 , KC_2 , KC_3 ,_______ ,_______, + _______,_______, KC_0, KC_DOT, + _______,_______, _______,_______, + _______,_______, _______,_______, + _______,_______, _______,_______ + + ), + [_MEDIA] = LAYOUT_5x6( + + KC_MSTP,KC_MPRV, KC_MPLY ,KC_MNXT,_______ ,_______, _______,_______,_______,_______,_______,_______, + _______,_______,_______,_______,KC_VOLU,_______, RGB_SPI, _______ , _______ , _______ ,_______,_______, + _______,_______,_______,_______,KC_VOLD ,_______, RGB_TOG, RGB_MODE_FORWARD , RGB_HUI , RGB_SAI ,RGB_VAI,_______, + _______,_______,_______,_______,KC_MUTE,_______, RGB_SPD, RGB_MODE_REVERSE , RGB_HUD , RGB_SAD ,RGB_VAD ,_______, + _______,_______, _______, _______, + _______,_______, _______,_______, + _______,_______, _______,_______, + _______,_______, _______,_______ + + ), +}; + + diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/rules.mk b/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/rules.mk new file mode 100644 index 000000000000..1e3cebb14515 --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/rules.mk @@ -0,0 +1 @@ +RGBLIGHT_ENABLE = yes diff --git a/keyboards/handwired/dactyl_manuform/6x6/keymaps/happysalada/keymap.c b/keyboards/handwired/dactyl_manuform/6x6/keymaps/happysalada/keymap.c new file mode 100644 index 000000000000..d96ae996a590 --- /dev/null +++ b/keyboards/handwired/dactyl_manuform/6x6/keymaps/happysalada/keymap.c @@ -0,0 +1,167 @@ +/* +Copyright 2021 Raphael Megzari + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include QMK_KEYBOARD_H + +enum custom_layers { + _COLEMAK_DH, + _LEFT, + _LEFT_UP, + _RIGHT, + _RIGHT_UP, + _QWERTY +}; + +#define COLMAK TO(_COLEMAK_DH) +#define QWERTY TO(_QWERTY) + +enum custom_keycodes { + EQ_SUP = SAFE_RANGE, + INF_EQ, + SUP_EQ, + INF_MIN, + MIN_SUP, + PIPE_R, + SUP_SUP, + INF_INF, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_COLEMAK_DH] = LAYOUT_6x6( + + _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, + _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, + QWERTY ,KC_Q ,KC_W ,KC_F ,KC_P ,KC_K , KC_Z ,KC_L ,KC_U ,KC_Y ,KC_COLN,_______, + _______,KC_A ,KC_R ,KC_S ,KC_T ,KC_G , KC_M ,KC_N ,KC_E ,KC_I ,KC_O ,_______, + KC_LSFT,KC_J ,KC_B ,KC_C ,KC_D ,KC_V , KC_X ,KC_H ,KC_COMM,KC_DOT ,KC_QUES,KC_RSFT, + KC_K ,KC_V , KC_X ,KC_Z , + LT(_RIGHT_UP,KC_BSPC),LSFT_T(KC_ESC), LT(_LEFT, KC_ENT),LT(_LEFT_UP,KC_SPC), + _______,LCTL_T(KC_DEL), LGUI_T(KC_TAB),_______, + _______,_______, _______,_______ + ), + + [_QWERTY] = LAYOUT_6x6( + + _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, + _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, + COLMAK ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T , KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,_______, + _______,KC_A ,KC_S ,KC_D ,KC_F ,KC_G , KC_H ,KC_J ,KC_K ,KC_L ,KC_COLN,_______, + KC_LSFT,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B , KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_QUES,KC_RSFT, + _______,_______, _______,_______, + LT(_RIGHT_UP,KC_BSPC),LSFT_T(KC_ESC), LT(_LEFT, KC_ENT),LT(_LEFT_UP,KC_SPC), + _______,LCTL_T(KC_DEL), LGUI_T(KC_TAB),_______, + _______,_______, _______,_______ + ), + + [_LEFT] = LAYOUT_6x6( + + _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, + _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, + _______,_______,KC_PLUS,KC_CIRC,KC_AMPR,_______, _______,KC_EQL ,KC_PERC,KC_HASH,_______,_______, + _______,_______,KC_TILD,KC_DQUO,KC_PIPE,_______, _______,KC_LPRN,KC_LCBR,KC_LBRC,_______,_______, + _______,_______,KC_BSLS,KC_ASTR,KC_SLSH,_______, _______,KC_RPRN,KC_RCBR,KC_RBRC,_______,_______, + _______,_______, _______,_______, + _______,_______, _______,_______, + _______,_______, _______,_______, + _______,_______, _______,_______ + ), + + [_LEFT_UP] = LAYOUT_6x6( + + _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, + _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, + _______,_______,KC_LABK,KC_MINS,KC_RABK,_______, _______,KC_7 ,KC_8 ,KC_9 ,_______,_______, + _______,_______,KC_UNDS,KC_QUOT,KC_DLR ,KC_GRV , _______,KC_4 ,KC_5 ,KC_6 ,KC_0 ,_______, + _______,_______,KC_SCLN,KC_AT ,KC_EXLM,_______, _______,KC_1 ,KC_2 ,KC_3 ,_______,_______, + _______,_______, _______,_______, + _______,_______, _______,_______, + _______,_______, _______,_______, + _______,_______, _______,_______ + ), + + [_RIGHT] = LAYOUT_6x6( + + _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, + _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, + _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, + _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, + _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, + _______,_______, _______,_______, + _______,_______, _______,_______, + _______,_______, _______,_______, + _______,_______, _______,_______ + ), + + [_RIGHT_UP] = LAYOUT_6x6( + + _______,_______,_______,_______,_______,_______, _______,_______ ,_______ ,_______ ,_______,_______, + _______,_______,_______,_______,_______,_______, _______,_______ ,_______ ,_______ ,_______,_______, + _______,_______,INF_INF,_______,SUP_SUP,_______, _______,LCTL(KC_LEFT),KC_UP ,LCTL(KC_RGHT),_______,_______, + _______,_______,MIN_SUP,EQ_SUP ,PIPE_R ,_______, _______,KC_LEFT ,KC_DOWN ,KC_RGHT ,LGUI(KC_UP),_______, + _______,_______,INF_MIN,INF_EQ ,_______,_______, _______,_______ ,KC_CAPS ,_______ ,_______,_______, + _______,_______, _______ ,_______ , + _______,_______, _______,_______, + _______,_______, _______,_______, + _______,_______, _______,_______ + ), + + +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch(keycode) { + case PIPE_R: + if (record->event.pressed) { + SEND_STRING("|> "); + } + break; + case EQ_SUP: + if (record->event.pressed) { + SEND_STRING("=> "); + } + break; + case INF_EQ: + if (record->event.pressed) { + SEND_STRING("<= "); + } + break; + case MIN_SUP: + if (record->event.pressed) { + SEND_STRING("-> "); + } + break; + case INF_MIN: + if (record->event.pressed) { + SEND_STRING("<- "); + } + break; + case INF_INF: + if (record->event.pressed) { + SEND_STRING("<<"); + } + break; + case SUP_SUP: + if (record->event.pressed) { + SEND_STRING(">>"); + } + break; + } + return true; +} + + diff --git a/keyboards/handwired/k_numpad17/keymaps/karlssn/keymap.c b/keyboards/handwired/k_numpad17/keymaps/karlssn/keymap.c new file mode 100644 index 000000000000..fdbc3c8a3917 --- /dev/null +++ b/keyboards/handwired/k_numpad17/keymaps/karlssn/keymap.c @@ -0,0 +1,61 @@ +#include QMK_KEYBOARD_H + +//Tap Dance Declarations +enum { + TD_DOT_COMMAS = 0 +}; + +//Tap Dance Definitions +tap_dance_action_t tap_dance_actions[] = { + //Tap once for Esc, twice for Caps Lock + [TD_DOT_COMMAS] = ACTION_TAP_DANCE_DOUBLE(KC_DOT, KC_COMMA) +// Other declarations would go here, separated by commas, if you have them +}; + +//In Layer declaration, add tap dance item in place of a key code + + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + * ,-------------------. + * |bcsp| / | * | - | + * |----|----|----|----| + * | 7 | 8 | 9 | | + * |----|----|----| + | + * | 4 | 5 | 6 | | + * |----|----|----|----| + * | 1 | 2 | 3 | | + * |----|----|----| En | + * | FN/0 | . | | + * `-------------------' + */ + + [0] = LAYOUT_numpad_5x4( + KC_BSPC, KC_PSLS, KC_PAST, KC_PMNS, + KC_P7, KC_P8, KC_P9, + KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_P1, KC_P2, KC_P3, + LT(1, KC_P0), TD(TD_DOT_COMMAS), KC_PENT + ), + /* + * ,-------------------. + * | F10| F11| F12| - | + * |----|----|----|----| + * | F7 | F8 | F9 | | + * |----|----|----| vol| + * | F4 | F5 | F6 | + | + * |----|----|----|----| + * | F1 | F2 | F3 | vol| + * |----|----|----| - | + * | FN | . | | + * `-------------------' + */ + [1] = LAYOUT_numpad_5x4( + KC_F10, KC_F11, KC_F12, KC_NO, + KC_F7, KC_F8, KC_F9, + KC_F4, KC_F5, KC_F6, KC_VOLU, + KC_F1, KC_F2, KC_F3, + KC_NO, KC_PDOT, KC_VOLD + ) +}; diff --git a/keyboards/handwired/k_numpad17/keymaps/karlssn/rules.mk b/keyboards/handwired/k_numpad17/keymaps/karlssn/rules.mk new file mode 100644 index 000000000000..e5ddcae8d927 --- /dev/null +++ b/keyboards/handwired/k_numpad17/keymaps/karlssn/rules.mk @@ -0,0 +1 @@ +TAP_DANCE_ENABLE = yes diff --git a/keyboards/handwired/lagrange/keymaps/dpapavas/config.h b/keyboards/handwired/lagrange/keymaps/dpapavas/config.h new file mode 100644 index 000000000000..0114d6c7f928 --- /dev/null +++ b/keyboards/handwired/lagrange/keymaps/dpapavas/config.h @@ -0,0 +1,22 @@ +/* Copyright 2020 Dimitris Papavasiliou + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General 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 + +#undef TAPPING_TERM +#define TAPPING_TERM 175 +#define TAPPING_TERM_PER_KEY +#define PERMISSIVE_HOLD_PER_KEY diff --git a/keyboards/handwired/lagrange/keymaps/dpapavas/keymap.c b/keyboards/handwired/lagrange/keymaps/dpapavas/keymap.c new file mode 100644 index 000000000000..8d2ecd9c791d --- /dev/null +++ b/keyboards/handwired/lagrange/keymaps/dpapavas/keymap.c @@ -0,0 +1,202 @@ +/* Copyright 2020 Dimitris Papavasiliou + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General 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 QMK_KEYBOARD_H + +#define CAPS_SFT MT(MOD_LSFT, KC_CAPS) +#define QUOT_SFT MT(MOD_RSFT, KC_QUOT) +#define PSCR_SFT MT(MOD_LSFT, KC_PSCR) +#define PAUSE_SFT MT(MOD_RSFT, KC_PAUSE) +#define F_SFT MT(MOD_LSFT, KC_F) +#define J_SFT MT(MOD_RSFT, KC_J) +#define PGUP_GUI MT(MOD_LGUI, KC_PGUP) +#define END_GUI MT(MOD_LGUI, KC_END) +#define UP_GUI MT(MOD_RGUI, KC_UP) +#define LEFT_GUI MT(MOD_RGUI, KC_LEFT) +#define EQL_CTL MT(MOD_RCTL, KC_EQL) +#define MINS_CTL MT(MOD_LCTL, KC_MINS) +#define BSPC_ALT LALT_T(KC_BSPC) +#define ENT_ALT LALT_T(KC_ENT) +#define SPC_ALT RALT_T(KC_SPC) +#define DEL_ALT RALT_T(KC_DEL) + +enum tapdance_keycodes { + TD_LEFT, + TD_RGHT, + TD_C_X +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + /* Left hand */ /* Right hand */ + + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_ESC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + CAPS_SFT, KC_A, KC_S, KC_D, F_SFT, KC_G, KC_H, J_SFT, KC_K, KC_L, KC_SCLN, QUOT_SFT, + PSCR_SFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, PAUSE_SFT, + + TD(TD_LEFT), KC_INS, KC_LBRC, MINS_CTL, BSPC_ALT, DEL_ALT, TD(TD_C_X), TD(TD_C_X), ENT_ALT, SPC_ALT, EQL_CTL, KC_RBRC, KC_DEL, TD(TD_RGHT), + KC_HOME, PGUP_GUI, END_GUI, LEFT_GUI, UP_GUI, KC_RGHT, + KC_PGDN, KC_DOWN + ), + + [1] = LAYOUT( + /* Left hand */ /* Right hand */ + + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F11, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS + ), +}; + +/* The following helper macros define tap dances that support + * separated press, release, tap and double-tap functions. */ + +#define STEPS(DANCE) [DANCE] = ACTION_TAP_DANCE_FN_ADVANCED( \ + NULL, \ + dance_ ## DANCE ## _finished, \ + dance_ ## DANCE ## _reset) + +#define CHOREOGRAPH(DANCE, PRESS, RELEASE, TAP, DOUBLETAP) \ + static bool dance_ ## DANCE ## _pressed; \ + \ + void dance_ ## DANCE ## _finished(tap_dance_state_t *state, void *user_data) { \ + if (state->count == 1) { \ + if (state->pressed) { \ + dance_ ## DANCE ## _pressed = true; \ + PRESS; \ + } else { \ + TAP; \ + } \ + } else if (state->count == 2) { \ + if (!state->pressed) { \ + DOUBLETAP; \ + } \ + } \ + } \ + \ + void dance_ ## DANCE ## _reset(tap_dance_state_t *state, void *user_data) { \ + if (state->count == 1) { \ + if (dance_ ## DANCE ## _pressed) { \ + RELEASE; \ + dance_ ## DANCE ## _pressed = false; \ + } \ + } \ + } + +/* Define dance for left palm key. */ + +CHOREOGRAPH(TD_LEFT, + layer_invert(1), /* Temporarily toggle layer when held. */ + layer_invert(1), + + /* Press and release both shifts on tap, to change + * keyboard layout (i.e. language). */ + + SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_RSFT) + SS_UP(X_LSFT) SS_UP(X_RSFT)), + + layer_invert(1)); /* Toggle layer (permanently) on + * double-tap. */ + +/* Define dance for right palm key. */ + +CHOREOGRAPH(TD_RGHT, + layer_invert(1), /* Same as above */ + layer_invert(1), + /* Send a complex macro: C-x C-s Mod-t up. (Save in + * Emacs, switch to terminal and recall previous command, + * hopefully a compile command.) */ + SEND_STRING(SS_DOWN(X_LCTL) SS_TAP(X_X) SS_TAP(X_S) SS_UP(X_LCTL) + SS_DOWN(X_LGUI) SS_TAP(X_T) SS_UP(X_LGUI) SS_TAP(X_UP)), + layer_invert(1)); + +/* This facilitates C-x chords in Emacs. Used as a modifier along + * with, say, the s-key, it saves, by sending C-x C-s. When tapped it + * just sends C-x. */ + +CHOREOGRAPH(TD_C_X, + SEND_STRING(SS_DOWN(X_LCTL) SS_TAP(X_X)), + SEND_STRING(SS_UP(X_LCTL)), + SEND_STRING(SS_DOWN(X_LCTL) SS_TAP(X_X) SS_UP(X_LCTL)),); + +tap_dance_action_t tap_dance_actions[] = { + STEPS(TD_LEFT), STEPS(TD_RGHT), STEPS(TD_C_X) +}; + +/* Set a longer tapping term for palm keys to allow comfortable + * permanent layer toggle. Also set an essentially infinite tapping + * term for certain mod-tap keys one tends to keep pressed (such as + * space, backspace, etc.). This prevents sending the modifier + * keycode by accident (allowing re-tap to get repeated key-press) + * and, in combination with permissive hold, they can still be used + * fine as modifiers. */ + +uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case TD(TD_LEFT): + case TD(TD_RGHT): + return 250; + case BSPC_ALT: + case UP_GUI: + case LEFT_GUI: + return 5000; + default: + return TAPPING_TERM; + } +} + +bool get_permissive_hold(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case TD(TD_LEFT): + case TD(TD_RGHT): + case BSPC_ALT: + case UP_GUI: + case LEFT_GUI: + return true; + default: + return false; + } +} + +/* Use the first LED to indicate the active layer. */ + +layer_state_t layer_state_set_user(layer_state_t state) { + writePin(D0, (get_highest_layer(state) > 0)); + + return state; +} + +/* Cycle through the LEDs after initialization. */ + +void keyboard_post_init_user(void) { + const pin_t pins[] = {D0, D1, D2}; + uint8_t i, j; + + for (i = 0 ; i < ARRAY_SIZE(pins) + 2 ; i += 1) { + for (j = 0 ; j < ARRAY_SIZE(pins); j += 1) { + setPinOutput(pins[j]); + writePin(pins[j], (j == i || j == i - 1)); + } + + wait_ms(100); + } +} diff --git a/keyboards/handwired/lagrange/keymaps/dpapavas/rules.mk b/keyboards/handwired/lagrange/keymaps/dpapavas/rules.mk new file mode 100644 index 000000000000..42f42f627acc --- /dev/null +++ b/keyboards/handwired/lagrange/keymaps/dpapavas/rules.mk @@ -0,0 +1,4 @@ +# Enable additional features. + +DEBOUNCE_TYPE = sym_defer_pk +TAP_DANCE_ENABLE = yes diff --git a/keyboards/handwired/marauder/keymaps/orvia/keymap.c b/keyboards/handwired/marauder/keymaps/orvia/keymap.c new file mode 100644 index 000000000000..53463fa002a1 --- /dev/null +++ b/keyboards/handwired/marauder/keymaps/orvia/keymap.c @@ -0,0 +1,199 @@ +/* Copyright 2021 BB-66 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H +bool is_alt_tab_active = false; +uint16_t alt_tab_timer = 0; + +char wpm_str[4]; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PAUS, KC_PSCR, KC_SCRL, KC_ESC, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NUM, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_KP_4, KC_KP_5, KC_KP_6, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_KP_0, KC_KP_DOT + ), + [1] = LAYOUT( + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO + ), + [2] = LAYOUT( + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO + ), + [3] = LAYOUT( + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO + ), + +}; + + +#ifdef OLED_ENABLE +// WPM-responsive animation stuff here +# define IDLE_FRAMES 5 +# define IDLE_SPEED 20 // below this wpm value your animation will idle + +// #define PREP_FRAMES 1 // uncomment if >1 + +# define TAP_FRAMES 2 +# define TAP_SPEED 40 // above this wpm value typing animation to trigger + +# define ANIM_FRAME_DURATION 200 // how long each frame lasts in ms +// #define SLEEP_TIMER 60000 // should sleep after this period of 0 wpm, needs fixing +# define ANIM_SIZE 610 // number of bytes in array, minimize for adequate firmware size, max is 1024 + +uint32_t anim_timer = 0; +uint32_t anim_sleep = 0; +uint8_t current_idle_frame = 0; +// uint8_t current_prep_frame = 0; // uncomment if PREP_FRAMES >1 +uint8_t current_tap_frame = 0; + +// Code containing pixel art, contains: +// 5 idle frames, 1 prep frame, and 2 tap frames + +// To make your own pixel art: +// save a png/jpeg of an 128x32 image (resource: https://www.pixilart.com/draw ) +// follow this guide up to and including "CONVERT YOUR IMAGE" https://docs.splitkb.com/hc/en-us/articles/360013811280-How-do-I-convert-an-image-for-use-on-an-OLED-display- +// replace numbers in brackets with your own +// if you start getting errors when compiling make sure you didn't accedentally delete a bracket +static void render_anim(void) { + static const char PROGMEM idle[IDLE_FRAMES][ANIM_SIZE] = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x82, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x01, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x34, 0xc4, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0d, 0x31, 0xc1, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; + static const char PROGMEM prep[][ANIM_SIZE] = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64, 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; + static const char PROGMEM tap[TAP_FRAMES][ANIM_SIZE] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64, 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x98, 0xc0, 0x88, 0x88, 0x8c, 0x9c, 0x1c, 0x1e, 0x0e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0f, 0x0f, 0x07, 0x03, 0x03, 0x61, 0xf0, 0xf8, 0xfc, 0x60, 0x01, 0x01, 0x01, 0x3c, 0x78, 0xf8, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + }; + + // assumes 1 frame prep stage + void animation_phase(void) { + if (get_current_wpm() <= IDLE_SPEED) { + current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES; + oled_write_raw_P(idle[abs((IDLE_FRAMES - 1) - current_idle_frame)], ANIM_SIZE); + } + if (get_current_wpm() > IDLE_SPEED && get_current_wpm() < TAP_SPEED) { + // oled_write_raw_P(prep[abs((PREP_FRAMES-1)-current_prep_frame)], ANIM_SIZE); // uncomment if IDLE_FRAMES >1 + oled_write_raw_P(prep[0], ANIM_SIZE); // remove if IDLE_FRAMES >1 + } + if (get_current_wpm() >= TAP_SPEED) { + current_tap_frame = (current_tap_frame + 1) % TAP_FRAMES; + oled_write_raw_P(tap[abs((TAP_FRAMES - 1) - current_tap_frame)], ANIM_SIZE); + } + } + if (get_current_wpm() != 000) { + oled_on(); // not essential but turns on animation OLED with any alpha keypress + if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { + anim_timer = timer_read32(); + animation_phase(); + } + anim_sleep = timer_read32(); + } else { + if (timer_elapsed32(anim_sleep) > OLED_TIMEOUT) { + oled_off(); + } else { + if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { + anim_timer = timer_read32(); + animation_phase(); + } + } + } +} + +// Used to draw on to the oled screen +bool oled_task_user(void) { + render_anim(); // renders pixelart + + oled_set_cursor(0, 0); // sets cursor to (row, column) using charactar spacing (4 rows, 21 full columns on a 128x32 screen, anything more will overflow back to the top) + uint8_t n = get_current_wpm(); + wpm_str[3] = '\0'; + wpm_str[2] = '0' + n % 10; + wpm_str[1] = (n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' '; + wpm_str[0] = n / 10 ? '0' + n / 10 : ' '; + oled_write_P(PSTR("WPM:"), false); + oled_write(wpm_str, false); + + led_t led_state = host_keyboard_led_state(); // caps lock stuff, prints CAPS on new line if caps led is on + oled_set_cursor(0, 1); + oled_write_P(led_state.caps_lock ? PSTR("CAPS") : PSTR(" "), false); + oled_set_cursor(0, 2); + oled_write_P(led_state.num_lock ? PSTR("NUM") : PSTR(" "), false); + oled_set_cursor(4, 2); + oled_write_P(led_state.scroll_lock ? PSTR("SCLK") : PSTR(" "), false); + oled_set_cursor(0, 3); + switch (get_highest_layer(layer_state)) { + case 0: + oled_write_P(PSTR("Base Layer\n"), false); + break; + case 1: + oled_write_P(PSTR("Base Enhanced\n"), false); + break; + case 2: + oled_write_P(PSTR("Gaming\n"), false); + break; + case 3: + oled_write_P(PSTR("Gaming Enh\n"), false); + break; + default: + oled_write_ln_P(PSTR("Undefined"), false); + } + oled_set_cursor(17, 3); + oled_write_P(PSTR("NKRO"), keymap_config.nkro); + return false; +} +#endif diff --git a/keyboards/handwired/marauder/keymaps/orvia/rules.mk b/keyboards/handwired/marauder/keymaps/orvia/rules.mk new file mode 100644 index 000000000000..e39f8c6e9e80 --- /dev/null +++ b/keyboards/handwired/marauder/keymaps/orvia/rules.mk @@ -0,0 +1,3 @@ +VIA_ENABLE = yes +OLED_ENABLE = yes +WPM_ENABLE = yes # WPM counting Enable diff --git a/keyboards/handwired/pteron/keymaps/FSund/keymap.c b/keyboards/handwired/pteron/keymaps/FSund/keymap.c new file mode 100644 index 000000000000..14ad23cd43e1 --- /dev/null +++ b/keyboards/handwired/pteron/keymaps/FSund/keymap.c @@ -0,0 +1,116 @@ +#include QMK_KEYBOARD_H + +enum pteron_layers { + _QWERTY, + _LOWER, + _RAISE, + _ADJUST +}; + +#define LOWER MO(_LOWER) +#define RAISE MO(_RAISE) + +// alt gr +#undef G +#define G(kc) RALT(kc) + +// custom keycodes +// use F_ prefix to avoid problems + +// NB! I use Norwegian keyboard layout on my machines, so the keymap probably +// doesn't make much sense for US/ANSI users + +#define F_FSLH S(KC_7) // forward slash +#define F_BSLH KC_EQL // backward slash +#define F_EQL S(KC_0) // equals sign +#define F_APOS KC_BSLS // ' +#define F_TIMES S(KC_BSLS) // * +#define F_PLUS KC_MINS // + +#define F_QUEST S(KC_MINS) // ? +#define F_HAT S(KC_RBRC) // ^ +#define F_TILD G(KC_RBRC) // ~ +#define F_UML KC_RBRC // ¨ (umlaut) +#define F_SECT S(KC_GRV) // section sign ("law sign") (shifted key below esc) +#define F_GRAVE S(KC_EQL) +#define F_ACUTE G(KC_EQL) + +#define KC_AA KC_LBRC +#define KC_OE KC_SCLN +#define KC_AE KC_QUOT + +// brackets +#define F_SBRL G(KC_8) // square bracket left +#define F_SBRR G(KC_9) // square bracket right +#define F_CBRL G(KC_7) // curly bracket left +#define F_CBRR G(KC_0) // curly bracket right +#define F_RBRL S(KC_8) // round bracket left +#define F_RBRR S(KC_9) // round bracket right +#define F_ABRL KC_NUBS // angle bracket left +#define F_ABRR S(KC_NUBS) // angle bracket right + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* QWERTY + * +-----------------------------------------+ +-----------------------------------------+ + * | Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Å | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Ctrl | A | S | D | F | G | | H | J | K | L | Ø | Æ | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Shft | Z | X | C | V | B | | N | M | , | . | - | Shft | + * +---------------------------+------+------+-------------+ +-------------+------+------+---------------------------+ + * | LOWR | Spc | Alt | Win | | Win | Alt | Spc | RISE | + * +---------------------------+ +---------------------------+ + */ + +[_QWERTY] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_AA, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_OE, KC_AE, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + LOWER, KC_SPC, KC_LALT, KC_LGUI, KC_RGUI, KC_RALT, KC_ENT, RAISE + ), + +/* LOWER + * +-----------------------------------------+ +-----------------------------------------+ + * | | | | | | | | | | | | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | | | | | | | \ | / | [ | ] | = | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | F1 | F2 | F3 | F4 | F5 | | < | > | ( | ) | * | ~ | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | F6 | F7 | F8 | F9 | F10 | | F11 | F12 | { | } | + | | + * +---------------------------+------+------+-------------+ +-------------+------+------+---------------------------+ + * | | | | | | | | | | + * +---------------------------+ +---------------------------+ + */ + +[_LOWER] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, F_BSLH, F_FSLH, F_SBRL, F_SBRR, F_EQL, KC_DEL, + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, F_ABRL, F_ABRR, F_RBRL, F_RBRR, F_TIMES, F_TILD, + _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, F_CBRL, F_CBRR, F_PLUS, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ), + +[_RAISE] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_AA, + F_SECT, S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), F_QUEST, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, F_APOS, + _______, S(KC_6), G(KC_2), G(KC_3), G(KC_4), G(KC_5), F_HAT, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ), + +[_ADJUST] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, F_UML, F_GRAVE, F_ACUTE, _______, QK_BOOT, _______, _______, _______, _______, KC_PSCR, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; + +layer_state_t layer_state_set_user(layer_state_t state) { + return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); +} diff --git a/keyboards/handwired/pteron/keymaps/alzafacon/config.h b/keyboards/handwired/pteron/keymaps/alzafacon/config.h new file mode 100644 index 000000000000..3bc36a62ae50 --- /dev/null +++ b/keyboards/handwired/pteron/keymaps/alzafacon/config.h @@ -0,0 +1,22 @@ + /* Copyright 2021 Fidel Coria + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +/* override diode direction from keyboard config */ +/* COL2ROW or ROW2COL */ +#undef DIODE_DIRECTION +#define DIODE_DIRECTION COL2ROW diff --git a/keyboards/handwired/pteron/keymaps/alzafacon/keymap.c b/keyboards/handwired/pteron/keymaps/alzafacon/keymap.c new file mode 100644 index 000000000000..1d030599fd88 --- /dev/null +++ b/keyboards/handwired/pteron/keymaps/alzafacon/keymap.c @@ -0,0 +1,120 @@ + /* Copyright 2021 Fidel Coria + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +enum pteron_layers { + _QWERTY, + _LOWER, + _RAISE, + _ADJUST +}; + + +#define LOWER MO(_LOWER) +#define RAISE MO(_RAISE) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * +-----------------------------------------+ +-----------------------------------------+ + * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Esc | A | S | D | F | G | | H | J | K | L | ; | " | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter | + * +-------------+------+------+------+------| |------+------+------+------+-------------+ + * |Lower | SPC | Alt | GUI | | Alt | GUI | SPC |Raise | + * +---------------------------+ +---------------------------+ + */ +[_QWERTY] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, + LOWER, KC_SPC, KC_LALT, KC_LGUI, KC_RALT, KC_RGUI, KC_SPC, RAISE +), + +/* Lower + * +-----------------------------------------+ +-----------------------------------------+ + * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | | F12 |ISO ~ |ISO | | | | | + * +-------------+------+------+------+------| |------+------+------+------+-------------+ + * | | | | | | Next | Vol- | Vol+ | Play | + * +---------------------------+ +---------------------------+ + */ +[_LOWER] = LAYOUT( + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______, + _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY +), + +/* Raise + * +-----------------------------------------+ +-----------------------------------------+ + * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | | F12 |ISO # |ISO / | | | | + * +-------------+------+------+------+------| |------+------+------+------+-------------+ + * | | | | | | Next | Vol- | Vol+ | Play | + * +---------------------------+ +---------------------------+ + */ +[_RAISE] = LAYOUT( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, + _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY +), + +/* Adjust (Lower + Raise) + * +-----------------------------------------+ +-----------------------------------------+ + * | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | Reset| | | | | | | | | | | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | | |Aud on|AudOff|AGnorm| |AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|MusOff|MidiOn| |MidOff| | | | | | + * +-------------+------+------+------+------| |------+------+------+------+-------------+ + * | | | | | | | | | | + * +---------------------------+ +---------------------------+ + */ +[_ADJUST] = LAYOUT( + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + _______, QK_BOOT, DB_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ +) + +}; + +layer_state_t layer_state_set_user(layer_state_t state) { + return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); +} diff --git a/keyboards/handwired/pteron/keymaps/alzafacon/readme.md b/keyboards/handwired/pteron/keymaps/alzafacon/readme.md new file mode 100644 index 000000000000..0bc5f2704fde --- /dev/null +++ b/keyboards/handwired/pteron/keymaps/alzafacon/readme.md @@ -0,0 +1,4 @@ +# alzafacon pteron layout + +This keymap is for builds with elite-c controllers. +Also notice `DIODE_DIRECTION COL2ROW`. I prefer to hand-wire this way. diff --git a/keyboards/handwired/pteron/keymaps/alzafacon/rules.mk b/keyboards/handwired/pteron/keymaps/alzafacon/rules.mk new file mode 100644 index 000000000000..03323308e775 --- /dev/null +++ b/keyboards/handwired/pteron/keymaps/alzafacon/rules.mk @@ -0,0 +1,2 @@ +# for elite-c +BOOTLOADER = atmel-dfu diff --git a/keyboards/handwired/selene/keymaps/bpendragon/keymap.c b/keyboards/handwired/selene/keymaps/bpendragon/keymap.c new file mode 100644 index 000000000000..4723250e3547 --- /dev/null +++ b/keyboards/handwired/selene/keymaps/bpendragon/keymap.c @@ -0,0 +1,43 @@ +/* Copyright 2020 Bpendragon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +enum custom_keycodes { + DBL_0 = SAFE_RANGE, +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case DBL_0: + if(record->event.pressed) { + SEND_STRING("00"); + } + break; + } + return true; +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT ( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, KC_MUTE, KC_MPRV, KC_MNXT, KC_MPLY, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, DBL_0, KC_PDOT + ) +}; diff --git a/keyboards/handwired/steamvan/keymaps/jmdaly/keymap.c b/keyboards/handwired/steamvan/keymaps/jmdaly/keymap.c new file mode 100644 index 000000000000..21ba0e5b3d51 --- /dev/null +++ b/keyboards/handwired/steamvan/keymaps/jmdaly/keymap.c @@ -0,0 +1,64 @@ +/* Copyright 2019 John M Daly + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. + +enum { + // Layers + _L1, + _L2, + _L3, + _L4, + _L5 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_L1] = LAYOUT_standard( /* Qwerty */ + LT(_L5, KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(_L2, KC_QUOT), + SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC, + MO(_L2), KC_LGUI, MO(_L3), KC_ENT, LT(_L2, KC_SPC), KC_RALT, KC_BSLS, MO(_L4) + ), + [_L2] = LAYOUT_standard( /* LAYER 2 */ + KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, + _______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, + _______, KC_ESC, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_LBRC, KC_RBRC, KC_MNXT, _______, + _______, KC_LGUI, _______, _______, _______, _______, _______, MO(_L4) + ), + [_L3] = LAYOUT_standard( /* LAYER 3 */ + KC_MINS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, + KC_EQL, KC_PIPE, KC_TILD, KC_UNDS, KC_PLUS, LSFT(KC_LBRC), LSFT(KC_RBRC), KC_4, KC_5, KC_6, KC_VOLU, KC_INS, + _______, RGB_TOG, RGB_MOD, RGB_RMOD, KC_DQUO, _______, KC_0, KC_1, KC_2, KC_3, KC_VOLD, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ), + [_L4] = LAYOUT_standard( /* LAYER 4 */ + QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_PGUP, _______, + KC_ESC, _______, _______, _______, _______, _______, _______, KC_F5, KC_F6, KC_HOME, KC_END, _______, + KC_LSFT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_F9, KC_F10, KC_PGDN, KC_F12, _______, + _______, KC_LSFT, KC_B, KC_SPC, KC_C, _______, _______, _______ + ), + [_L5] = LAYOUT_standard( /* LAYER 5 */ + _______, LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), LGUI(KC_MINS), + KC_ESC, _______, _______, _______, _______, _______, _______, KC_F5, KC_F6, KC_HOME, KC_END, _______, + KC_LSFT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_F9, KC_F10, KC_PGDN, KC_F12, _______, + _______, KC_LSFT, KC_B, KC_SPC, KC_C, _______, _______, _______ + ) +}; diff --git a/keyboards/handwired/steamvan/keymaps/jmdaly/readme.md b/keyboards/handwired/steamvan/keymaps/jmdaly/readme.md new file mode 100644 index 000000000000..5aeae7064f13 --- /dev/null +++ b/keyboards/handwired/steamvan/keymaps/jmdaly/readme.md @@ -0,0 +1 @@ +# jmdaly's keymap for the steamvan diff --git a/keyboards/handwired/z150/keymaps/zyxx/keymap.c b/keyboards/handwired/z150/keymaps/zyxx/keymap.c new file mode 100644 index 000000000000..76ee90d9dc09 --- /dev/null +++ b/keyboards/handwired/z150/keymaps/zyxx/keymap.c @@ -0,0 +1,65 @@ +/* Copyright 2020 DmNosachev + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _BASE, + _FN1 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* + * ,---------------------------------------------------------------------------------------------------------------------------. + * | F1 | F2 | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Backspace| ~` | ScrLk | FN1 | + * |---------------------------------------------------------------------------------------------------------------------------| + * | F3 | F4 | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | |Home | ↑ |PgUp |PrnSc| + * |--------------------------------------------------------------------------------------------- ------------------------| + * | F5 | F6 | Ctrl | A | S | D | F | G | H | J | K | L | ;: | '" | Enter | ← | ↓ | → | wh+ | + * |---------------------------------------------------------------------------------------------------------------------------| + * | F7 | F8 | Shift | Z | X | C | V | B | N | M | , | . | /? | Shift | |\ |End | |PgDn | wh- | + * |---------------------------------------------------------------------------------------------------------------------- | + * | F9 | F10 | Alt |FN1 | Space | Alt | Ins | Del | | + * `---------------------------------------------------------------------------------------------------------------------------' +*/ + [_BASE] = LAYOUT( + KC_F1, KC_F2, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV, KC_SCRL, MO(_FN1), + KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_HOME, KC_UP, KC_PGUP, KC_PSCR, + KC_F5, KC_F6, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_LEFT, KC_DOWN, KC_RGHT, KC_WH_U, + KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_BSLS, KC_END, KC_NO, KC_PGDN, KC_WH_D, + KC_F9, KC_F10,KC_LALT, MO(_FN1), KC_SPC, KC_RALT, KC_INS, KC_DEL + ), +/* + * ,---------------------------------------------------------------------------------------------------------------------------. + * |reset| | | F11 | F12 | au+ | au- | clk | clk+| clk-| clkr| | | | | Delete |NumLk| / | FN1 | + * |---------------------------------------------------------------------------------------------------------------------------| + * | | | | | mlb | m↑ | mrb | | | | | | | | | | 7 | 8 | 9 | * | + * |--------------------------------------------------------------------------------------------- ------------------------| + * | | | | | m← | m↓ | m→ | | | | | | | | | 4 | 5 | 6 | - | + * |---------------------------------------------------------------------------------------------------------------------------| + * | | | | | | | | | | | | | | | | 1 | 2 | 3 | + | + * |---------------------------------------------------------------------------------------------------------------------- | + * | | | |FN1 | | CapsLock| 0 Ins | . Del | | + * `---------------------------------------------------------------------------------------------------------------------------' +*/ + [_FN1] = LAYOUT( + QK_BOOT, _______, _______, KC_F11, KC_F12, AU_ON, AU_OFF, CK_TOGG, CK_UP, CK_DOWN, CK_RST, _______, _______, _______, _______, KC_DEL, KC_NUM, KC_PSLS, _______, + _______, _______, _______, _______, KC_BTN1, KC_MS_U, KC_BTN2, _______, _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PAST, + _______, _______, _______ , _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_PMNS, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PPLS, + _______, _______, _______, _______, _______, KC_CAPS, KC_P0, KC_PDOT + ) +}; diff --git a/keyboards/helix/rev2/keymaps/fraanrosi/config.h b/keyboards/helix/rev2/keymaps/fraanrosi/config.h new file mode 100644 index 000000000000..6c816d0accd6 --- /dev/null +++ b/keyboards/helix/rev2/keymaps/fraanrosi/config.h @@ -0,0 +1,64 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert +Copyright 2021 Franco Rosi + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#pragma once + +// place overrides here + +// If you need more program area, try select and reduce rgblight modes to use. + +#ifndef LED_ANIMATIONS +# define LED_ANIMATIONS +#endif + +// Selection of RGBLIGHT MODE to use. +#if defined(LED_ANIMATIONS) + #define RGBLIGHT_EFFECT_BREATHING + #define RGBLIGHT_EFFECT_RAINBOW_MOOD + #define RGBLIGHT_EFFECT_RAINBOW_SWIRL + #define RGBLIGHT_EFFECT_SNAKE + #define RGBLIGHT_EFFECT_KNIGHT + #define RGBLIGHT_EFFECT_CHRISTMAS + #define RGBLIGHT_EFFECT_STATIC_GRADIENT + #define RGBLIGHT_EFFECT_RGB_TEST + #define RGBLIGHT_EFFECT_ALTERNATING + #define RGBLIGHT_EFFECT_TWINKLE +#endif + +#undef RGBLIGHT_HUE_STEP +#define RGBLIGHT_HUE_STEP 4 + +#ifdef MOUSEKEY_ENABLE + #undef MOUSEKEY_INTERVAL + #define MOUSEKEY_INTERVAL 20 + + #undef MOUSEKEY_TIME_TO_MAX + #define MOUSEKEY_TIME_TO_MAX 40 + + #undef MOUSEKEY_MAX_SPEED + #define MOUSEKEY_MAX_SPEED 6 + + #undef MOUSEKEY_MOVE_DELTA + #define MOUSEKEY_MOVE_DELTA 5 + + #undef MOUSEKEY_DELAY + #define MOUSEKEY_DELAY 0 +#endif diff --git a/keyboards/helix/rev2/keymaps/fraanrosi/keymap.c b/keyboards/helix/rev2/keymaps/fraanrosi/keymap.c new file mode 100644 index 000000000000..1bd43ab24a0a --- /dev/null +++ b/keyboards/helix/rev2/keymaps/fraanrosi/keymap.c @@ -0,0 +1,288 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert +Copyright 2021 Franco Rosi + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ +#include QMK_KEYBOARD_H + +// Following line allows macro to read current RGB settings +#ifdef RGBLIGHT_ENABLE +uint8_t RGB_current_mode; +HSV CURRENT_COLOR; +bool caps_is_active = false; +/*Here I set the first rgb mode*/ +void keyboard_post_init_user(void) { + rgblight_enable(); // Enables RGB, without saving settings + rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 3); + RGB_current_mode = rgblight_get_mode(); + rgblight_sethsv(HSV_RED); + CURRENT_COLOR = rgblight_get_hsv(); +} +#endif + +extern uint8_t is_master; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +enum layer_number { + _QWERTY = 0, + _LOWER, + _RAISE +}; + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + LOWER, + RAISE, + RGBRST, + RGB_1, + RGB_2, + RGB_3, + RGB_4, + RGB_5, + RGB_6, + RGB_7, + RGB_8, + RGB_9 +}; + +#define LOWER MO(1) +#define RAISE MO(2) + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Qwerty + * ,-----------------------------------------. ,-----------------------------------------. + * | | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | CAPS | A | S | D | F | G | | H | J | K | L | Ñ |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * |Shift | Z | X | C | V | B | { | } | N | M | , | . | - |Shift | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Esc | Win | Alt |Raise |Lower |Space |Space |Alt Gr| Left | Up | Down |Right | Ctrl | + * `-------------------------------------------------------------------------------------------------' + */ + [_QWERTY] = LAYOUT( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_QUOT, KC_NUHS, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_ESC, KC_LGUI, KC_LALT, MO(2), MO(1), KC_SPC, KC_SPC, KC_RALT, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, KC_RCTL + ), + + /*Lower + * ,-----------------------------------------. ,-----------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | | Mute | Play |Mouse1|Mouse2| | |Print | |Insert|' ? \ | ¿ ¡ | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | |Shine+|Shine-| Vol -| Vol +| | | |Mouse↑| | ´ ¨ |+ * ~ | | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | | < > | | | | | | |Mouse←|Mouse↓|Mouse→| | | | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | Home |PageUp|PageDn| End | | + * `-------------------------------------------------------------------------------------------------' + */ + [_LOWER] = LAYOUT( + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_TRNS, KC_MUTE, KC_MPLY, KC_BTN1, KC_BTN2, KC_TRNS, KC_PSCR, KC_TRNS, KC_INS, KC_MINS, KC_EQL, KC_TRNS, + KC_NO, KC_BRID, KC_BRIU, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_LBRC, KC_RBRC, KC_TRNS, + KC_TRNS, KC_NUBS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_PGDN, KC_END, KC_TRNS + ), + + /* Raise + * ,-----------------------------------------. ,-----------------------------------------. + * | | | | | | | | | | | | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | RGB1 | RGB2 | RGB3 | RGB4 |RGB ON| | | | MODE+| MODE-| | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | RGB5 | RGB6 | RGB7 | RGB8 | RGB9 | | | | HUE+ | HUE- | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | | MODE+| MODE-| HUE+ | HUE- | | Reset| | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | | | + * `-------------------------------------------------------------------------------------------------' + */ + [_RAISE] = LAYOUT( + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + RGB_1, RGB_2, RGB_3, RGB_4, RGB_TOG, KC_NO, KC_NO, RGB_MOD, RGB_RMOD,KC_NO, KC_NO, KC_NO, + RGB_5, RGB_6, RGB_7, RGB_8, RGB_9, KC_NO, KC_NO, RGB_HUI, RGB_HUD, KC_NO, KC_NO, KC_NO, + KC_NO, RGB_MOD, RGB_RMOD,RGB_HUI, RGB_HUD, KC_NO, QK_BOOT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO + ) +}; + +// define variables for reactive RGB +bool TOG_STATUS = false; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case LOWER: + if (record->event.pressed) { + // not sure how to have keyboard check mode and set it to a variable, so my work around + // uses another variable that would be set to true after the first time a reactive key is pressed. + if (TOG_STATUS) { // TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false + } else { + TOG_STATUS = !TOG_STATUS; + #ifdef RGBLIGHT_ENABLE + if (!caps_is_active) { + RGB_current_mode = rgblight_get_mode(); + CURRENT_COLOR = rgblight_get_hsv(); + } + rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT); + rgblight_sethsv(HSV_BLUE); + #endif + } + layer_on(_LOWER); + } else { + #ifdef RGBLIGHT_ENABLE + if (!caps_is_active) { + rgblight_mode(RGB_current_mode); + rgblight_sethsv(CURRENT_COLOR.h, CURRENT_COLOR.s, CURRENT_COLOR.v); + } else { + rgblight_mode(RGBLIGHT_MODE_ALTERNATING); + rgblight_sethsv(HSV_WHITE); + } + #endif + TOG_STATUS = false; + layer_off(_LOWER); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + // not sure how to have keyboard check mode and set it to a variable, so my work around + // uses another variable that would be set to true after the first time a reactive key is pressed. + if (TOG_STATUS) { // TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false + } else { + TOG_STATUS = !TOG_STATUS; + #ifdef RGBLIGHT_ENABLE + if (!caps_is_active) { + RGB_current_mode = rgblight_get_mode(); + CURRENT_COLOR = rgblight_get_hsv(); + } + rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT); + rgblight_sethsv(HSV_RED); + #endif + } + layer_on(_RAISE); + } else { + #ifdef RGBLIGHT_ENABLE + if (!caps_is_active) { + rgblight_mode(RGB_current_mode); + rgblight_sethsv(CURRENT_COLOR.h, CURRENT_COLOR.s, CURRENT_COLOR.v); + } else { + rgblight_mode(RGBLIGHT_MODE_ALTERNATING); + rgblight_sethsv(HSV_WHITE); + } + #endif + layer_off(_RAISE); + TOG_STATUS = false; + } + return false; + break; + //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released + case RGB_1 ... RGB_9: + if (record->event.pressed) { + rgblight_sethsv(CURRENT_COLOR.h, CURRENT_COLOR.s, CURRENT_COLOR.v); + //this to have each custom mode separately, but sharing logic + switch(keycode){ + case RGB_1: + rgblight_mode(RGBLIGHT_MODE_RAINBOW_MOOD + 1); + break; + case RGB_2: + rgblight_mode(RGBLIGHT_MODE_KNIGHT); + break; + case RGB_3: + rgblight_mode(RGBLIGHT_MODE_SNAKE); + break; + case RGB_4: + rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 3); + break; + case RGB_5: + rgblight_mode(RGBLIGHT_MODE_TWINKLE + 5); + break; + case RGB_6: + rgblight_mode(RGBLIGHT_MODE_BREATHING + 3); + break; + case RGB_7: + rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT); + break; + case RGB_8: + rgblight_mode(RGBLIGHT_MODE_STATIC_GRADIENT + 5); + break; + case RGB_9: + rgblight_mode(RGBLIGHT_MODE_CHRISTMAS); + break; + } + RGB_current_mode = rgblight_get_mode(); + CURRENT_COLOR = rgblight_get_hsv(); + } + return false; + break; + case RGB_TOG ... RGB_HUD: + if (record->event.pressed) { + rgblight_sethsv(CURRENT_COLOR.h, CURRENT_COLOR.s, CURRENT_COLOR.v); + rgblight_mode(RGB_current_mode); + process_rgb(keycode, record); + RGB_current_mode = rgblight_get_mode(); + CURRENT_COLOR = rgblight_get_hsv(); + } + return false; + break; + case KC_CAPS: + if (record->event.pressed) { + register_code(KC_CAPS); + caps_is_active = !caps_is_active; + if (caps_is_active) { + CURRENT_COLOR = rgblight_get_hsv(); + rgblight_mode(RGBLIGHT_MODE_ALTERNATING); + rgblight_sethsv(HSV_WHITE); + } else if (!caps_is_active) { + unregister_code(KC_CAPS); + rgblight_mode(RGB_current_mode); + rgblight_sethsv(CURRENT_COLOR.h, CURRENT_COLOR.s, CURRENT_COLOR.v); + } + } + return false; + break; + case RGBRST: + #ifdef RGBLIGHT_ENABLE + if (record->event.pressed) { + eeconfig_update_rgblight_default(); + rgblight_enable(); + RGB_current_mode = rgblight_get_mode(); + } + #endif + break; + } + return true; +} + +void matrix_init_user(void) { +#ifdef RGBLIGHT_ENABLE + RGB_current_mode = rgblight_get_mode(); + CURRENT_COLOR = rgblight_get_hsv(); +#endif +} diff --git a/keyboards/helix/rev2/keymaps/fraanrosi/readme.md b/keyboards/helix/rev2/keymaps/fraanrosi/readme.md new file mode 100644 index 000000000000..71f71bbb99fa --- /dev/null +++ b/keyboards/helix/rev2/keymaps/fraanrosi/readme.md @@ -0,0 +1,40 @@ + +## Fraanrosi +A **Latin American Spanish** keymap for Helix/rev2/under, 5 rows. +Designed to be as simple and more touch typing oriented as possible. +It was inspired by a DELL Latitude E5470. + +## Layers + +The Helix obviously does not have enough keys compared to a typical keyboard. +The keymap has multiple layers, moving extra keys to different layers. + +|Priority|Layer ID|Layer Name|Contents| +| ---- | ---- | --- | --- | +||0|Qwerty|Qwerty layout (Base)| +||1|Lower|Symbols, media, function keys and mouse.(Blue)| +||2|Raise|Underglow RGB config(Red)| + +Keymap : http://www.keyboard-layout-editor.com/#/gists/4cd7b4ccda1de5cf9edc56d29b64da30 +### First layer (qwerty). + +It contains the "**Ñ**" letter. +"Caps Lock" key toggle an RGB mode, to alert. +@ is typed with AltGr+q +![first-layer](https://i.imgur.com/BaVDVdB.png) +### Second layer (Lower). + +While "Lower" key is pressed, the RBG mode remains BLUE. +It has the "Symbols, media, function keys and mouse" features. +It completes the rest of the needed qwerty and F keys. +![second-layer](https://i.imgur.com/HbDVTfp.png) +### Third layer (Raise). + +While "Raise" key is pressed, the RBG mode remains RED. +This is the underglow RGB's layer , where can be controlled the modes and hue. +With reset button for the micros. +![third-layer](https://i.imgur.com/MF8jjbu.png) +### All the layers. + ![all-the-layers](https://i.imgur.com/jn1VI4V.png) + + diff --git a/keyboards/helix/rev2/keymaps/fraanrosi/rules.mk b/keyboards/helix/rev2/keymaps/fraanrosi/rules.mk new file mode 100644 index 000000000000..688813ce399a --- /dev/null +++ b/keyboards/helix/rev2/keymaps/fraanrosi/rules.mk @@ -0,0 +1,24 @@ +# QMK Standard Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +# See TOP/keyboards/helix/rules.mk for a list of options that can be set. +# See TOP/docs/config_options.md for more information. +# +SPLIT_KEYBOARD = yes +LTO_ENABLE = yes # if firmware size over limit, try this option +MOUSEKEY_ENABLE = yes # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +# AUDIO_ENABLE = yes # Audio output on port C6 +# Helix Spacific Build Options +# you can uncomment and edit follows 7 Variables +# jp: 以下の7つの変数を必要に応じて編集し、コメントアウトをはずします。 +# OLED_ENABLE = no # OLED_ENABLE +# LOCAL_GLCDFONT = no # use each keymaps "helixfont.h" insted of "common/glcdfont.c" +# LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.) +# LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.) +LED_ANIMATIONS = yes # LED animations +# IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone) + +LED_BACK_ENABLE = no +LED_UNDERGLOW_ENABLE = yes diff --git a/keyboards/helix/rev2/keymaps/froggy/config.h b/keyboards/helix/rev2/keymaps/froggy/config.h new file mode 100644 index 000000000000..fea362bcd614 --- /dev/null +++ b/keyboards/helix/rev2/keymaps/froggy/config.h @@ -0,0 +1,50 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#undef TAPPING_TERM +#define TAPPING_TERM 200 +#define ONESHOT_TAP_TOGGLE 5 /* Tapping this number of times holds the key until tapped this number of times again. */ +#define ONESHOT_TIMEOUT 5000 /* Time (in ms) before the one shot key is released */ + +// the froggy keymap does not use the right hand side, so sync_timer is not needed +#define DISABLE_SYNC_TIMER +// For the same reason, the following are also not needed +#undef SPLIT_LAYER_STATE_ENABLE +#undef SPLIT_LED_STATE_ENABLE + +// If you need more program area, try select and reduce rgblight modes to use. + +// Selection of RGBLIGHT MODE to use. +#if defined(LED_ANIMATIONS) + #define RGBLIGHT_EFFECT_BREATHING + #define RGBLIGHT_EFFECT_RAINBOW_MOOD + #define RGBLIGHT_EFFECT_RAINBOW_SWIRL + #define RGBLIGHT_EFFECT_SNAKE + #define RGBLIGHT_EFFECT_KNIGHT + #define RGBLIGHT_EFFECT_CHRISTMAS + #define RGBLIGHT_EFFECT_STATIC_GRADIENT + //#define RGBLIGHT_EFFECT_RGB_TEST + //#define RGBLIGHT_EFFECT_ALTERNATING +#endif + +#endif /* CONFIG_USER_H */ diff --git a/keyboards/helix/rev2/keymaps/froggy/helixfont.h b/keyboards/helix/rev2/keymaps/froggy/helixfont.h new file mode 100644 index 000000000000..5360eace95b6 --- /dev/null +++ b/keyboards/helix/rev2/keymaps/froggy/helixfont.h @@ -0,0 +1,235 @@ +// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0. +// See gfxfont.h for newer custom bitmap font info. + +#pragma once + +#include "progmem.h" + +// Standard ASCII 5x7 font + +static const unsigned char font[] PROGMEM = { +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, +0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, +0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, +0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, +0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, +0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, +0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, +0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, +0x00, 0x18, 0x24, 0x18, 0x00, 0x00, +0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, +0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, +0x26, 0x29, 0x79, 0x29, 0x26, 0x00, +0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, +0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, +0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, +0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, +0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, +0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, +0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, +0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, +0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, +0x60, 0x60, 0x60, 0x60, 0x60, 0x00, +0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, +0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, +0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, +0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, +0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, +0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, +0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, +0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, +0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, +0x00, 0x07, 0x00, 0x07, 0x00, 0x00, +0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, +0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, +0x23, 0x13, 0x08, 0x64, 0x62, 0x00, +0x36, 0x49, 0x56, 0x20, 0x50, 0x00, +0x00, 0x08, 0x07, 0x03, 0x00, 0x00, +0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, +0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, +0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, +0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, +0x00, 0x80, 0x70, 0x30, 0x00, 0x00, +0x08, 0x08, 0x08, 0x08, 0x08, 0x00, +0x00, 0x00, 0x60, 0x60, 0x00, 0x00, +0x20, 0x10, 0x08, 0x04, 0x02, 0x00, +0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, +0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, +0x72, 0x49, 0x49, 0x49, 0x46, 0x00, +0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, +0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, +0x27, 0x45, 0x45, 0x45, 0x39, 0x00, +0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, +0x41, 0x21, 0x11, 0x09, 0x07, 0x00, +0x36, 0x49, 0x49, 0x49, 0x36, 0x00, +0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, +0x00, 0x00, 0x14, 0x00, 0x00, 0x00, +0x00, 0x40, 0x34, 0x00, 0x00, 0x00, +0x00, 0x08, 0x14, 0x22, 0x41, 0x00, +0x14, 0x14, 0x14, 0x14, 0x14, 0x00, +0x00, 0x41, 0x22, 0x14, 0x08, 0x00, +0x02, 0x01, 0x59, 0x09, 0x06, 0x00, +0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, +0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, +0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, +0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, +0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, +0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, +0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, +0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, +0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, +0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, +0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, +0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, +0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, +0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, +0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, +0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, +0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, +0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, +0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, +0x26, 0x49, 0x49, 0x49, 0x32, 0x00, +0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, +0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, +0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, +0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, +0x63, 0x14, 0x08, 0x14, 0x63, 0x00, +0x03, 0x04, 0x78, 0x04, 0x03, 0x00, +0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, +0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, +0x02, 0x04, 0x08, 0x10, 0x20, 0x00, +0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, +0x04, 0x02, 0x01, 0x02, 0x04, 0x00, +0x40, 0x40, 0x40, 0x40, 0x40, 0x00, +0xFC, 0xFE, 0x02, 0x82, 0x82, 0x82, +0x82, 0x82, 0x82, 0xC2, 0x82, 0x02, +0x02, 0xFE, 0x00, 0x00, 0xFE, 0xFE, +0x02, 0x62, 0x62, 0x62, 0x62, 0xE2, +0x62, 0x62, 0xE2, 0x02, 0x02, 0xFC, +0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, +0x30, 0x40, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x80, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x40, 0x00, 0x00, 0x24, 0xA4, +0xA4, 0xBC, 0xA4, 0x24, 0x24, 0x00, +0x00, 0x00, 0x24, 0xA4, 0x24, 0x24, +0x3C, 0x04, 0x04, 0x00, 0x00, 0x00, +0xB8, 0xA4, 0xA4, 0xA4, 0xBC, 0x00, +0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, +0x00, 0x44, 0x44, 0x44, 0xDC, 0x44, +0x04, 0x3C, 0x00, 0x00, 0x00, 0x00, +0xFC, 0xFE, 0xFE, 0x7E, 0x7E, 0x7E, +0x7E, 0x7E, 0x7E, 0x3E, 0x7E, 0xFE, +0xFE, 0xFE, 0x00, 0x00, 0xFE, 0xFE, +0xFE, 0x9E, 0x9E, 0x9E, 0x9E, 0x1E, +0x9E, 0x9E, 0x1E, 0xFE, 0xFE, 0xFC, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x08, 0x36, 0x41, 0x00, 0x00, +0x00, 0x00, 0x77, 0x00, 0x00, 0x00, +0x00, 0x41, 0x36, 0x08, 0x00, 0x00, +0x02, 0x01, 0x02, 0x04, 0x02, 0x00, +0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, +0x7F, 0x7F, 0x40, 0x41, 0x41, 0x41, +0x41, 0x41, 0x41, 0x41, 0x41, 0x40, +0x40, 0x7F, 0x00, 0x00, 0x7F, 0x7F, +0x40, 0x40, 0x40, 0x40, 0x40, 0x41, +0x40, 0x40, 0x43, 0x40, 0x40, 0x7F, +0x00, 0x00, 0x00, 0xF0, 0xFB, 0xFB, +0x00, 0x50, 0x60, 0xFF, 0xFC, 0x3C, +0x1E, 0x0E, 0x0C, 0xFC, 0xF8, 0xE8, +0xE8, 0xE8, 0x30, 0x00, 0x00, 0x00, +0x00, 0x00, 0x02, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x02, 0x02, 0x0D, 0x02, +0x02, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x57, 0x50, +0x57, 0x54, 0x57, 0x10, 0x50, 0x00, +0x00, 0x00, 0x97, 0x94, 0x97, 0x94, +0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, +0xE4, 0x14, 0xF4, 0x94, 0xF7, 0x00, +0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, +0x00, 0x38, 0xA4, 0xA4, 0xA5, 0x3C, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x7F, 0x7F, 0x7F, 0x7E, 0x7E, 0x7E, +0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7F, +0x7F, 0x7F, 0x00, 0x00, 0x7F, 0x7F, +0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7E, +0x7F, 0x7F, 0x7C, 0x7F, 0x7F, 0x7F, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0xFE, 0xFE, 0x02, 0x62, 0x62, 0x62, +0xE2, 0x62, 0x62, 0x62, 0xC2, 0x02, +0x02, 0xFE, 0x00, 0x00, 0xFE, 0xFE, +0x02, 0x82, 0xC2, 0xE2, 0xF2, 0x82, +0x82, 0x82, 0x82, 0x02, 0x02, 0xFE, +0x00, 0x00, 0x00, 0x07, 0x7F, 0xDF, +0x00, 0x05, 0x03, 0x7F, 0x1F, 0x1E, +0x3C, 0x38, 0x18, 0x1F, 0x0F, 0x0D, +0x0D, 0x0D, 0x06, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x20, 0x20, 0x50, +0x8C, 0x50, 0x20, 0x20, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x80, 0x80, +0x40, 0x30, 0x40, 0x80, 0x89, 0x09, +0x06, 0x09, 0x09, 0x00, 0x00, 0x00, +0x00, 0x00, 0x1C, 0x12, 0x12, 0x12, +0x1E, 0x10, 0x10, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0xFF, 0x00, 0x73, +0x84, 0xE7, 0x94, 0x94, 0x94, 0x67, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0xFE, 0xFE, 0xFE, 0x9E, 0x9E, 0x9E, +0x1E, 0x9E, 0x9E, 0x9E, 0x3E, 0xFE, +0xFE, 0xFE, 0x00, 0x00, 0xFE, 0xFE, +0xFE, 0x7E, 0x3E, 0x1E, 0x0E, 0x7E, +0x7E, 0x7E, 0x7E, 0xFE, 0xFE, 0xFE, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x3F, 0x7F, 0x40, 0x46, 0x46, 0x46, +0x47, 0x46, 0x46, 0x46, 0x43, 0x40, +0x40, 0x7F, 0x00, 0x00, 0x7F, 0x7F, +0x40, 0x41, 0x43, 0x47, 0x4F, 0x41, +0x41, 0x41, 0x41, 0x40, 0x40, 0x3F, +0x00, 0x00, 0x00, 0x00, 0x00, 0x07, +0x06, 0x01, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x04, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x06, 0x01, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x08, 0x08, +0x36, 0x08, 0x08, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x1F, 0x00, 0x0E, +0x10, 0x1C, 0x12, 0x12, 0x12, 0x12, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x3F, 0x7F, 0x7F, 0x79, 0x79, 0x79, +0x78, 0x79, 0x79, 0x79, 0x7C, 0x7F, +0x7F, 0x7F, 0x00, 0x00, 0x7F, 0x7F, +0x7F, 0x7E, 0x7C, 0x78, 0x70, 0x7E, +0x7E, 0x7E, 0x7E, 0x7F, 0x7F, 0x3F, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/keyboards/helix/rev2/keymaps/froggy/keymap.c b/keyboards/helix/rev2/keymaps/froggy/keymap.c new file mode 100644 index 000000000000..1680147157de --- /dev/null +++ b/keyboards/helix/rev2/keymaps/froggy/keymap.c @@ -0,0 +1,696 @@ +#include QMK_KEYBOARD_H +#include + +#define MIN(x, y) (((x) < (y)) ? (x) : (y)) +#define MAX(x, y) (((x) > (y)) ? (x) : (y)) + +#define LAYOUT_half( \ + L00, L01, L02, L03, L04, L05, \ + L10, L11, L12, L13, L14, L15, \ + L20, L21, L22, L23, L24, L25, \ + L30, L31, L32, L33, L34, L35, L36, \ + L40, L41, L42, L43, L44, L45, L46 \ +) { \ + { L00, L01, L02, L03, L04, L05, KC_NO }, \ + { L10, L11, L12, L13, L14, L15, KC_NO }, \ + { L20, L21, L22, L23, L24, L25, KC_NO }, \ + { L30, L31, L32, L33, L34, L35, L36 }, \ + { L40, L41, L42, L43, L44, L45, L46 }, \ + { _______, _______, _______, _______, _______, _______, KC_NO }, \ + { _______, _______, _______, _______, _______, _______, KC_NO }, \ + { _______, _______, _______, _______, _______, _______, KC_NO }, \ + { _______, _______, _______, _______, _______, _______, _______ }, \ + { _______, _______, _______, _______, _______, _______, _______ } \ +} + +#define DELAY_TIME 75 +static uint16_t key_timer; +static uint16_t tap_timer; +static uint16_t delay_registered_code; +static uint8_t delay_mat_row; +static uint8_t delay_mat_col; +static bool delay_key_stat; +static bool delay_key_pressed; +static bool tapping_key; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _BASE 0 +#define _OPT 1 +#define _FUNC 2 +#define _SYM 3 +#define _NUM 4 + +bool RGBAnimation = false; //Flag for LED Layer color Refresh. + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + EISU, + KANA, + RGBRST, + RGBOFF, + RGB1, + RGB2, + RGB3, + OPT_TAP_SP, + DESKTOP, + MAC, + WIN, +}; + +enum macro_keycodes { + KC_SAMPLEMACRO, +}; + +//Macros +#define M_SAMPLE M(KC_SAMPLEMACRO) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Base + * ,-----------------------------------------. + * | C+z | ; | [ | ( | < | { | + * |------+------+------+------+------+------| + * | KANA | P | K | R | A | F | + * |------+------+------+------+------+------| + * | BS | D | T | H | E | O | + * |------+------+------+------+------+------+------. + * | Shift| Y | S | N | I | U |Space | + * |------+------+------+------+------+------+------| + * | Ctrl | Alt | Gui | Sym | Num | OPT | Ent | + * `------------------------------------------------' + */ + [_BASE] = LAYOUT_half( + LCTL(KC_Z), KC_SCLN, KC_LBRC, KC_LPRN, KC_LT, KC_LCBR, + KANA, KC_P, KC_K, KC_R, KC_A, KC_F, + KC_BSPC, KC_D, KC_T, KC_H, KC_E, KC_O, + OSM(MOD_LSFT), KC_Y, KC_S, KC_N, KC_I, KC_U, KC_SPC, + OSM(MOD_LCTL), OSM(MOD_LALT), OSM(MOD_LGUI), MO(_SYM), MO(_NUM), OPT_TAP_SP, KC_ENT ), + + /* Opt + * ,-----------------------------------------. + * | Esc | : | ] | ) | > | } | + * |------+------+------+------+------+------| + * | EISU| J | M | B | ' | Tab | + * |------+------+------+------+------+------| + * | . | V | C | L | Z | Q | + * |------+------+------+------+------+------+------. + * | | X | G | W | - | Del | Esc | + * |------+------+------+------+------+------+------| + * | | | | , | DTOP | | | + * `------------------------------------------------' + */ + [_OPT] = LAYOUT_half( + KC_ESC, KC_COLN,KC_RBRC, KC_RPRN,KC_GT, KC_RCBR, + EISU, KC_J, KC_M, KC_B, KC_QUOT, KC_TAB, + KC_DOT, KC_V, KC_C, KC_L, KC_Z, KC_Q, + _______, KC_X, KC_G, KC_W, KC_MINUS, KC_DEL, KC_ESC, + _______, _______,_______, KC_COMM,DESKTOP, _______, _______ + ), + + /* Func + * ,-----------------------------------------. + * |RGBRST| Hue | | RST | Mac | Win | + * |------+------+------+------+------+------| + * | RGB1 | VAL+ | F7 | F8 | F9 | | + * |------+------+------+------+------+------| + * | RGB2 | VAL- | F4 | F5 | F6 | F12 | + * |------+------+------+------+------+------+------. + * | RGB3 | F10 | F1 | F2 | F3 | F11 | | + * |------+------+------+------+------+------+------| + * |RGBOFF| | | | | | | + * `------------------------------------------------' + */ + [_FUNC] = LAYOUT_half( + RGBRST,RGB_HUI, _______, QK_BOOT, MAC, WIN, + RGB1, RGB_VAI, KC_F7, KC_F8, KC_F9, _______, + RGB2, RGB_VAD, KC_F4, KC_F5, KC_F6, KC_F12, + RGB3, KC_F10, KC_F1, KC_F2, KC_F3, KC_F11, _______, + RGBOFF,_______, _______, _______, _______, _______, _______ + ), + + /* Sym + * ,-----------------------------------------. + * | Ins | GRV | | PU | PD | ^ | + * |------+------+------+------+------+------| + * | | \ | # | = | ? | % | + * |------+------+------+------+------+------| + * | | $ | upA | @ | ! | | | + * |------+------+------+------+------+------+------. + * | CL | <- | dwA | -> | _ | & | | + * |------+------+------+------+------+------+------| + * | | | PS | | ~ | | | + * `------------------------------------------------' + */ + [_SYM] = LAYOUT_half( + KC_INS, KC_GRV, _______, KC_PGUP, KC_PGDN, KC_CIRC, + _______, KC_BSLS, KC_HASH, KC_EQL, KC_QUES, KC_PERC, + _______, KC_DLR, KC_UP, KC_AT, KC_EXLM, KC_PIPE, + KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT,KC_UNDS, KC_AMPR, _______, + _______, _______, KC_PSCR, _______, KC_TILD, _______, _______ + ), + + /* Raise + * ,-----------------------------------------. + * | | | Func | home | End | | + * |------+------+------+------+------+------| + * | | * | 7 | 8 | 9 | - | + * |------+------+------+------+------+------| + * | . | / | 4 | 5 | 6 | + | + * |------+------+------+------+------+------+------. + * | LN | 0 | 1 | 2 | 3 |C+S+F1| | + * |------+------+------+------+------+------+------| + * | | | | , | | | | + * `------------------------------------------------' + */ + [_NUM] = LAYOUT_half( + _______, _______, OSL(_FUNC), KC_HOME, KC_END, _______, + _______, KC_ASTR, KC_P7, KC_P8, KC_P9, KC_MINS, + KC_PDOT, KC_SLSH, KC_P4, KC_P5, KC_P6, KC_PLUS, + KC_NUM, KC_P0, KC_P1, KC_P2, KC_P3, LCTL(S(KC_F1)), _______, + _______, _______, KC_PDOT, KC_COMM, _______, _______, _______ + ) +}; + +#ifdef AUDIO_ENABLE + +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_plover[][2] = SONG(PLOVER_SOUND); +float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); +#endif + +// define variables for reactive RGB +//bool TOG_STATUS = false; +int RGB_current_mode; + +void persistent_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool find_mairix(uint16_t keycode, uint8_t *row, uint8_t *col){ + for(uint8_t i=0; ievent.key.col; + row = record->event.key.row; + if (record->event.pressed && ((row < 5 && is_keyboard_master()) || (row >= 5 && !is_keyboard_master()))) { + int end = keybuf_end; + keybufs[end].col = col; + keybufs[end].row = row % 5; + keybufs[end].frame = 0; + keybuf_end ++; + } + #endif + + if(tap_timer&&keycode!=OPT_TAP_SP){ + tapping_key = true; + } + + if(keycode==delay_registered_code){ + if (!record->event.pressed){ + unregister_delay_code(); + } + } + + switch (keycode) { + case KC_SCLN: + case KC_LBRC: + case KC_LPRN: + case KC_LT: + case KC_LCBR: + case KC_P: + case KC_K: + case KC_R: + case KC_A: + case KC_F: + case KC_BSPC: + case KC_D: + case KC_T: + case KC_H: + case KC_E: + case KC_O: + case KC_Y: + case KC_S: + case KC_N: + case KC_I: + case KC_U: + case LCTL(KC_Z): + case KC_SPC: + if (record->event.pressed) { + register_delay_code(_BASE); + if(find_mairix(keycode, &delay_mat_row, &delay_mat_col)){ + key_timer = timer_read(); + delay_key_stat = true; + delay_key_pressed = true; + } + }else{ + delay_key_pressed = false; + } + return false; + break; + case OPT_TAP_SP: + if (record->event.pressed) { + tapping_key = false; + register_delay_code(_OPT); + layer_on(_OPT); + tap_timer = timer_read(); + }else{ + layer_off(_OPT); + if(tapping_key==false && timer_elapsed(tap_timer) < TAPPING_TERM){ + SEND_STRING(" "); + } + tap_timer = 0; + } + return false; + break; + case EISU: + if (record->event.pressed) { + if(keymap_config.swap_lalt_lgui==false){ + register_code(KC_LNG2); + }else{ + SEND_STRING(SS_LALT("`")); + } + } else { + unregister_code(KC_LNG2); + } + return false; + break; + case KANA: + if (record->event.pressed) { + if(keymap_config.swap_lalt_lgui==false){ + register_code(KC_LNG1); + }else{ + SEND_STRING(SS_LALT("`")); + } + } else { + unregister_code(KC_LNG1); + } + return false; + break; + case DESKTOP: + if (record->event.pressed) { + if(keymap_config.swap_lalt_lgui==false){ + register_code(KC_F11); + }else{ + SEND_STRING(SS_LGUI("d")); + } + } else { + unregister_code(KC_F11); + } + return false; + break; + case RGBRST: + #ifdef RGBLIGHT_ENABLE + if (record->event.pressed) { + eeconfig_update_rgblight_default(); + rgblight_enable(); + RGB_current_mode = rgblight_get_mode(); + RGBAnimation = false; + } + #endif + break; + case RGBOFF: + #ifdef RGBLIGHT_ENABLE + if (record->event.pressed) { + rgblight_disable(); + } + #endif + break; + case RGB1: + #ifdef RGBLIGHT_ENABLE + if (record->event.pressed) { + RGBAnimation = true; + rgblight_mode(RGBLIGHT_MODE_RAINBOW_MOOD); + RGB_current_mode = rgblight_get_mode(); + } + #endif + break; + case RGB2: + #ifdef RGBLIGHT_ENABLE + if (record->event.pressed) { + RGBAnimation = true; + rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 1); + RGB_current_mode = rgblight_get_mode(); + } + #endif + break; + case RGB3: + #ifdef RGBLIGHT_ENABLE + if (record->event.pressed) { + RGBAnimation = true; + rgblight_mode(RGBLIGHT_MODE_KNIGHT); + RGB_current_mode = rgblight_get_mode(); + } + #endif + break; + case MAC: + if (record->event.pressed) { + keymap_config.swap_lalt_lgui = false; + keymap_config.swap_ralt_rgui = false; + #ifdef AUDIO_ENABLE + PLAY_SONG(ag_norm_song); + #endif + } + break; + case WIN: + if (record->event.pressed) { + keymap_config.swap_lalt_lgui = true; + keymap_config.swap_ralt_rgui = true; + #ifdef AUDIO_ENABLE + PLAY_SONG(ag_swap_song); + #endif + } + break; + } + return true; +} + + +//keyboard start-up code. Runs once when the firmware starts up. +void matrix_init_user(void) { + #ifdef RGBLIGHT_ENABLE + RGB_current_mode = rgblight_get_mode(); + #endif +} + + +//assign the right code to your layers for OLED display +#define L_BASE 0 +#define L_OPT 2 +#define L_FUNC 4 +#define L_SYM 8 +#define L_NUM 16 +#define L_FNLAYER 64 +#define L_NUMLAY 128 +#define L_NLOWER 136 +#define L_NFNLAYER 192 +#define L_MOUSECURSOR 256 + +// LED Effect +#ifdef RGBLIGHT_ENABLE +unsigned char rgb[7][5][3]; +void led_ripple_effect(char r, char g, char b) { + static int scan_count = -10; + static int keys[] = { 6, 6, 6, 7, 7 }; + static int keys_sum[] = { 0, 6, 12, 18, 25 }; + + if (scan_count == -1) { + rgblight_enable_noeeprom(); + rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT); + } else if (scan_count >= 0 && scan_count < 5) { + for (unsigned char c=keybuf_begin; c!=keybuf_end; c++) { + int i = c; + // FIXME: + + int y = scan_count; + int dist_y = abs(y - keybufs[i].row); + for (int x=0; x= 6 && scan_count <= 10) { + int y = scan_count - 6; + for (int x=0; x= 12) { scan_count = 0; } +} +#endif + +uint8_t layer_state_old; + +//runs every scan cycle (a lot) +void matrix_scan_user(void) { + if(delay_key_stat && (timer_elapsed(key_timer) > DELAY_TIME)){ + register_delay_code(_BASE); + if(!delay_key_pressed){ + unregister_delay_code(); + } + } + + if(layer_state_old != layer_state){ + switch (layer_state) { + case L_BASE: + break; + case L_OPT: + register_delay_code(_OPT); + break; + case L_NUM: + register_delay_code(_NUM); + break; + case L_SYM: + register_delay_code(_SYM); + break; + case L_FUNC: + register_delay_code(_FUNC); + break; + } + layer_state_old = layer_state; + } + + #ifdef RGBLIGHT_ENABLE + if(!RGBAnimation){ + switch (layer_state) { + case L_BASE: + #ifdef RGBLED_BACK + led_ripple_effect(0,112,127); + #else + rgblight_setrgb(0,112,127); + #endif + break; + case L_OPT: + #ifdef RGBLED_BACK + led_ripple_effect(127,0,100); + #else + rgblight_setrgb(127,0,100); + #endif + break; + case L_NUM: + #ifdef RGBLED_BACK + led_ripple_effect(127,23,0); + #else + rgblight_setrgb(127,23,0); + #endif + break; + case L_SYM: + #ifdef RGBLED_BACK + led_ripple_effect(0,127,0); + #else + rgblight_setrgb(0,127,0); + #endif + break; + case L_FUNC: + #ifdef RGBLED_BACK + led_ripple_effect(127,0,61); + #else + rgblight_setrgb(127,0,61); + #endif + break; + } + } + #endif +} + +//OLED update loop +#ifdef OLED_ENABLE + +oled_rotation_t oled_init_user(oled_rotation_t rotation) { + return OLED_ROTATION_0; +} + +// Render to OLED +void render_status(void) { + + // froggy logo + static char logo[4][1][17]= + { + { + {0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0} + }, + { + {0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,0} + }, + { + {0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,0} + }, + { + {0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0} + } + }; + + static char indctr[8][2][4]= + { + // white icon + { + {0x60,0x61,0x62,0}, + {0x63,0x64,0} + }, + { + {0x80,0x81,0x82,0}, + {0x83,0x84,0} + }, + { + {0xa0,0xa1,0xa2,0}, + {0xa3,0xa4,0} + }, + { + {0xc0,0xc1,0xc2,0}, + {0xc3,0xc4,0} + }, + // Black icon + { + {0x75,0x76,0x77,0}, + {0x78,0x79,0} + }, + { + {0x95,0x96,0x97,0}, + {0x98,0x99,0} + }, + { + {0xb5,0xb6,0xb7,0}, + {0xb8,0xb9,0} + }, + { + {0xd5,0xd6,0xd7,0}, + {0xd8,0xd9,0} + }, + }; + + int rown = 0; + int rowf = 0; + int rowa = 0; + int rows = 0; + + //Set Indicator icon + led_t led_state = host_keyboard_led_state(); + if (led_state.num_lock) { rown = 4; } else { rown = 0; } + if (led_state.caps_lock) { rowa = 4; } else { rowa = 0; } + if (led_state.scroll_lock) { rows = 4; } else { rows = 0; } + if (layer_state == L_FUNC) { rowf = 4; } + + oled_write(indctr[rown] [0], false); + oled_write(indctr[rowf] [1], false); + oled_write(logo [0] [0], false); + oled_write(indctr[rown+1][0], false); + oled_write(indctr[rowf+1][1], false); + oled_write(logo [1] [0], false); + oled_write(indctr[rowa+2][0], false); + oled_write(indctr[rows+2][1], false); + oled_write(logo [2] [0], false); + oled_write(indctr[rowa+3][0], false); + oled_write(indctr[rows+3][1], false); + oled_write(logo [3] [0], false); + +} + +bool oled_task_user(void) { + +#if DEBUG_TO_SCREEN + if (debug_enable) { + return; + } +#endif + + if (is_keyboard_master()) { + render_status(); + } + return false; +} + +#endif // end of OLED_ENABLE diff --git a/keyboards/helix/rev2/keymaps/froggy/readme.md b/keyboards/helix/rev2/keymaps/froggy/readme.md new file mode 100644 index 000000000000..624e738a6c93 --- /dev/null +++ b/keyboards/helix/rev2/keymaps/froggy/readme.md @@ -0,0 +1,83 @@ +Froggy -one hand Helix- +====== + +![Imgur](https://i.imgur.com/S1Dw3XW.jpg) + +## Features +It is a one-handed keyboard with reference to Frogpad. Layout Designed by タクマ ([@humid](https://twitter.com/humid)). + +## Layout +### Base +``` +,-----------------------------------------. +| C+z | ; | [ | ( | < | { | +|------+------+------+------+------+------| +| KANA | P | K | R | A | F | +|------+------+------+------+------+------| +| BS | D | T | H | E | O | +|------+------+------+------+------+------+------. +| Shift| Y | S | N | I | U | Space| +|------+------+------+------+------+------+------| +| Ctrl | Alt | win | Sym | Num | OPT | Ent | +`------------------------------------------------' +``` + +### Opt +``` +,-----------------------------------------. +| Esc | : | ] | ) | > | } | +|------+------+------+------+------+------| +| EISU | J | M | B | ' | Tab | +|------+------+------+------+------+------| +| . | V | C | L | Z | Q | +|------+------+------+------+------+------+------. +| | X | G | W | - | Del | Esc | +|------+------+------+------+------+------+------| +| | | | , | DTOP | | | +`------------------------------------------------' +``` + +### Num +``` +,-----------------------------------------. +| | | Func | home | End | | +|------+------+------+------+------+------| +| | * | 7 | 8 | 9 | - | +|------+------+------+------+------+------| +| . | / | 4 | 5 | 6 | + | +|------+------+------+------+------+------+------. +| LN | 0 | 1 | 2 | 3 |C+S+F1| | +|------+------+------+------+------+------+------| +| | | | , | | | | +`------------------------------------------------' +``` + +### Sym +``` +,-----------------------------------------. +| Ins | GRV | | PU | PD | ^ | +|------+------+------+------+------+------| +| | \ | # | = | ? | % | +|------+------+------+------+------+------| +| | $ | upA | @ | ! | | | +|------+------+------+------+------+------+------. +| CL | <- | dwA | -> | _ | & | | +|------+------+------+------+------+------+------| +| | | PS | | ~ | | | + `-----------------------------------------------' +``` + +### Func +``` +,-----------------------------------------. +|RGBRST| Hue | | RST | Mac | Win | +|------+------+------+------+------+------| +| RGB1 | VAL+ | F7 | F8 | F9 | | +|------+------+------+------+------+------| +| RGB2 | VAL- | F4 | F5 | F6 | F12 | +|------+------+------+------+------+------+------. +| RGB3 | F10 | F1 | F2 | F3 | F11 | | +|------+------+------+------+------+------+------| +|RGBOFF| | | | | | | +`------------------------------------------------' +``` diff --git a/keyboards/helix/rev2/keymaps/froggy/rules.mk b/keyboards/helix/rev2/keymaps/froggy/rules.mk new file mode 100644 index 000000000000..048ecefff38f --- /dev/null +++ b/keyboards/helix/rev2/keymaps/froggy/rules.mk @@ -0,0 +1,27 @@ +# QMK Standard Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +# See TOP/keyboards/helix/rules.mk for a list of options that can be set. +# See TOP/docs/config_options.md for more information. +# +LTO_ENABLE = no # if firmware size over limit, try this option +SPLIT_KEYBOARD = yes + +# Helix Spacific Build Options +# you can uncomment and edit follows 7 Variables +# jp: 以下の7つの変数を必要に応じて編集し、コメントアウトをはずします。 +OLED_ENABLE = yes # OLED_ENABLE +LOCAL_GLCDFONT = yes # use each keymaps "helixfont.h" insted of "common/glcdfont.c" +LED_BACK_ENABLE = yes # LED backlight (Enable WS2812 RGB underlight.) +LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.) +LED_ANIMATIONS = yes # LED animations +# IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone) + +# OLED_ENABLE が yes のとき +# OLED_SELECT が core ならば QMK 標準の oled_dirver.c を使用します。 +# OLED_SELECT が core 以外ならば従来どおり helix/local_drivers/ssd1306.c を使用します。 +# If OLED_ENABLE is 'yes' +# If OLED_SELECT is 'core', use QMK standard oled_dirver.c. +# If OLED_SELECT is other than 'core', use helix/local_drivers/ssd1306.c. +OLED_SELECT = core diff --git a/keyboards/helix/rev2/keymaps/froggy_106/config.h b/keyboards/helix/rev2/keymaps/froggy_106/config.h new file mode 100644 index 000000000000..9affa1d296ad --- /dev/null +++ b/keyboards/helix/rev2/keymaps/froggy_106/config.h @@ -0,0 +1,47 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#pragma once + +#undef TAPPING_TERM +#define TAPPING_TERM 200 +#define ONESHOT_TAP_TOGGLE 5 /* Tapping this number of times holds the key until tapped this number of times again. */ +#define ONESHOT_TIMEOUT 5000 /* Time (in ms) before the one shot key is released */ + +// the froggy keymap does not use the right hand side, so sync_timer is not needed +#define DISABLE_SYNC_TIMER +// For the same reason, the following are also not needed +#undef SPLIT_LAYER_STATE_ENABLE +#undef SPLIT_LED_STATE_ENABLE + +// If you need more program area, try select and reduce rgblight modes to use. + +// Selection of RGBLIGHT MODE to use. +#if defined(LED_ANIMATIONS) + #define RGBLIGHT_EFFECT_BREATHING + #define RGBLIGHT_EFFECT_RAINBOW_MOOD + #define RGBLIGHT_EFFECT_RAINBOW_SWIRL + #define RGBLIGHT_EFFECT_SNAKE + #define RGBLIGHT_EFFECT_KNIGHT + #define RGBLIGHT_EFFECT_CHRISTMAS + #define RGBLIGHT_EFFECT_STATIC_GRADIENT + //#define RGBLIGHT_EFFECT_RGB_TEST + //#define RGBLIGHT_EFFECT_ALTERNATING +#endif diff --git a/keyboards/helix/rev2/keymaps/froggy_106/helixfont.h b/keyboards/helix/rev2/keymaps/froggy_106/helixfont.h new file mode 100644 index 000000000000..3a79a1937ba7 --- /dev/null +++ b/keyboards/helix/rev2/keymaps/froggy_106/helixfont.h @@ -0,0 +1,235 @@ +// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0. +// See gfxfont.h for newer custom bitmap font info. + +#pragma once + +#include "progmem.h" + +// Standard ASCII 5x7 font + +static const unsigned char font[] PROGMEM = { +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, +0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, +0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, +0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, +0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, +0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, +0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, +0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, +0x00, 0x18, 0x24, 0x18, 0x00, 0x00, +0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, +0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, +0x26, 0x29, 0x79, 0x29, 0x26, 0x00, +0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, +0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, +0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, +0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, +0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, +0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, +0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, +0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, +0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, +0x60, 0x60, 0x60, 0x60, 0x60, 0x00, +0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, +0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, +0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, +0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, +0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, +0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, +0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, +0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, +0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, +0x00, 0x07, 0x00, 0x07, 0x00, 0x00, +0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, +0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, +0x23, 0x13, 0x08, 0x64, 0x62, 0x00, +0x36, 0x49, 0x56, 0x20, 0x50, 0x00, +0x00, 0x08, 0x07, 0x03, 0x00, 0x00, +0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, +0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, +0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, +0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, +0x00, 0x80, 0x70, 0x30, 0x00, 0x00, +0x08, 0x08, 0x08, 0x08, 0x08, 0x00, +0x00, 0x00, 0x60, 0x60, 0x00, 0x00, +0x20, 0x10, 0x08, 0x04, 0x02, 0x00, +0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, +0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, +0x72, 0x49, 0x49, 0x49, 0x46, 0x00, +0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, +0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, +0x27, 0x45, 0x45, 0x45, 0x39, 0x00, +0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, +0x41, 0x21, 0x11, 0x09, 0x07, 0x00, +0x36, 0x49, 0x49, 0x49, 0x36, 0x00, +0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, +0x00, 0x00, 0x14, 0x00, 0x00, 0x00, +0x00, 0x40, 0x34, 0x00, 0x00, 0x00, +0x00, 0x08, 0x14, 0x22, 0x41, 0x00, +0x14, 0x14, 0x14, 0x14, 0x14, 0x00, +0x00, 0x41, 0x22, 0x14, 0x08, 0x00, +0x02, 0x01, 0x59, 0x09, 0x06, 0x00, +0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, +0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, +0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, +0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, +0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, +0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, +0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, +0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, +0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, +0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, +0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, +0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, +0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, +0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, +0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, +0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, +0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, +0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, +0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, +0x26, 0x49, 0x49, 0x49, 0x32, 0x00, +0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, +0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, +0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, +0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, +0x63, 0x14, 0x08, 0x14, 0x63, 0x00, +0x03, 0x04, 0x78, 0x04, 0x03, 0x00, +0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, +0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, +0x02, 0x04, 0x08, 0x10, 0x20, 0x00, +0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, +0x04, 0x02, 0x01, 0x02, 0x04, 0x00, +0x40, 0x40, 0x40, 0x40, 0x40, 0x00, +0xFC, 0xFE, 0x02, 0x82, 0x82, 0x82, +0x82, 0x82, 0x82, 0xC2, 0x82, 0x02, +0x02, 0xFE, 0x00, 0x00, 0xFE, 0xFE, +0x02, 0x62, 0x62, 0x62, 0x62, 0xE2, +0x62, 0x62, 0xE2, 0x02, 0x02, 0xFC, +0x00, 0x00, 0x00, 0xF0, 0xFC, 0xFC, +0xFC, 0x00, 0xFC, 0xFC, 0xF0, 0x80, +0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, +0x30, 0x40, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x20, 0x00, 0x00, 0x24, 0xA4, +0xA4, 0xBC, 0xA4, 0x24, 0x24, 0x00, +0x00, 0x00, 0x24, 0xA4, 0x24, 0x24, +0x3C, 0x04, 0x04, 0x00, 0x00, 0x00, +0xB8, 0xA4, 0xA4, 0xA4, 0xBC, 0x00, +0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, +0x00, 0x44, 0x44, 0x44, 0xDC, 0x44, +0x04, 0x3C, 0x00, 0x00, 0x00, 0x00, +0xFC, 0xFE, 0xFE, 0x7E, 0x7E, 0x7E, +0x7E, 0x7E, 0x7E, 0x3E, 0x7E, 0xFE, +0xFE, 0xFE, 0x00, 0x00, 0xFE, 0xFE, +0xFE, 0x9E, 0x9E, 0x9E, 0x9E, 0x1E, +0x9E, 0x9E, 0x1E, 0xFE, 0xFE, 0xFC, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x08, 0x36, 0x41, 0x00, 0x00, +0x00, 0x00, 0x77, 0x00, 0x00, 0x00, +0x00, 0x41, 0x36, 0x08, 0x00, 0x00, +0x02, 0x01, 0x02, 0x04, 0x02, 0x00, +0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, +0x7F, 0x7F, 0x40, 0x41, 0x41, 0x41, +0x41, 0x41, 0x41, 0x41, 0x41, 0x40, +0x40, 0x7F, 0x00, 0x00, 0x7F, 0x7F, +0x40, 0x40, 0x40, 0x40, 0x40, 0x41, +0x40, 0x40, 0x43, 0x40, 0x40, 0x7F, +0x00, 0x20, 0x3C, 0x3E, 0x3E, 0x3E, +0x3E, 0x00, 0x3E, 0x3E, 0x3E, 0x3E, +0x38, 0x00, 0x00, 0xF0, 0xFB, 0xFB, +0x00, 0x50, 0x60, 0xFF, 0xFC, 0x3C, +0x1E, 0x0E, 0x0C, 0xFC, 0xF8, 0xE8, +0xE8, 0xE8, 0x30, 0x00, 0x00, 0x00, +0x00, 0x00, 0x02, 0x00, 0x00, 0x00, +0x00, 0x04, 0x04, 0x1B, 0x04, 0x04, +0x00, 0x00, 0x00, 0x00, 0x57, 0x50, +0x57, 0x54, 0x57, 0x10, 0x50, 0x00, +0x00, 0x00, 0x97, 0x94, 0x97, 0x94, +0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, +0xE4, 0x14, 0xF4, 0x94, 0xF7, 0x00, +0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, +0x00, 0x38, 0xA4, 0xA4, 0xA5, 0x3C, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x7F, 0x7F, 0x7F, 0x7E, 0x7E, 0x7E, +0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7F, +0x7F, 0x7F, 0x00, 0x00, 0x7F, 0x7F, +0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7E, +0x7F, 0x7F, 0x7C, 0x7F, 0x7F, 0x7F, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0xFE, 0xFE, 0x02, 0x62, 0x62, 0x62, +0xE2, 0x62, 0x62, 0x62, 0xC2, 0x02, +0x02, 0xFE, 0x00, 0x00, 0xFE, 0xFE, +0x02, 0x82, 0xC2, 0xE2, 0xF2, 0x82, +0x82, 0x82, 0x82, 0x02, 0x02, 0xFE, +0x00, 0x00, 0x00, 0x3C, 0x66, 0x66, +0x66, 0x66, 0x66, 0x66, 0x66, 0x66, +0x00, 0x00, 0x00, 0x07, 0x7F, 0xDF, +0x00, 0x05, 0x03, 0x7F, 0x1F, 0x1E, +0x3C, 0x38, 0x18, 0x1F, 0x0F, 0x0D, +0x0D, 0x0D, 0x06, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x20, 0x20, 0x50, +0x8C, 0x50, 0x20, 0x20, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x09, 0x09, +0x06, 0x09, 0x09, 0x00, 0x00, 0x00, +0x00, 0x00, 0x1C, 0x12, 0x12, 0x12, +0x1E, 0x10, 0x10, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0xFF, 0x00, 0x73, +0x84, 0xE7, 0x94, 0x94, 0x94, 0x67, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0xFE, 0xFE, 0xFE, 0x9E, 0x9E, 0x9E, +0x1E, 0x9E, 0x9E, 0x9E, 0x3E, 0xFE, +0xFE, 0xFE, 0x00, 0x00, 0xFE, 0xFE, +0xFE, 0x7E, 0x3E, 0x1E, 0x0E, 0x7E, +0x7E, 0x7E, 0x7E, 0xFE, 0xFE, 0xFE, +0x00, 0x00, 0x00, 0x3C, 0x66, 0x66, +0x60, 0x60, 0x60, 0x60, 0x60, 0x60, +0x00, 0x00, 0x00, 0x07, 0x7F, 0xDF, +0x00, 0x00, 0xE0, 0xF8, 0xFC, 0xFC, +0xFC, 0xFC, 0xFC, 0xFC, 0xF0, 0x80, +0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, +0x3F, 0x7F, 0x40, 0x46, 0x46, 0x46, +0x47, 0x46, 0x46, 0x46, 0x43, 0x40, +0x40, 0x7F, 0x00, 0x00, 0x7F, 0x7F, +0x40, 0x41, 0x43, 0x47, 0x4F, 0x41, +0x41, 0x41, 0x41, 0x40, 0x40, 0x3F, +0x00, 0x00, 0x00, 0x3E, 0x73, 0x60, +0x70, 0x3E, 0x07, 0x03, 0x67, 0x3E, +0x00, 0x00, 0x00, 0x00, 0x00, 0x07, +0x06, 0x01, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x04, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x08, 0x08, +0x36, 0x08, 0x08, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x1F, 0x00, 0x0E, +0x10, 0x1C, 0x12, 0x12, 0x12, 0x12, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x3F, 0x7F, 0x7F, 0x79, 0x79, 0x79, +0x78, 0x79, 0x79, 0x79, 0x7C, 0x7F, +0x7F, 0x7F, 0x00, 0x00, 0x7F, 0x7F, +0x7F, 0x7E, 0x7C, 0x78, 0x70, 0x7E, +0x7E, 0x7E, 0x7E, 0x7F, 0x7F, 0x3F, +0x00, 0x00, 0x00, 0x03, 0x03, 0x03, +0x03, 0x3F, 0x63, 0x63, 0x63, 0x3F, +0x00, 0x00, 0x00, 0x00, 0x00, 0x07, +0x00, 0x00, 0x07, 0x1F, 0x3F, 0x0F, +0x07, 0x0F, 0x3F, 0x3F, 0x0F, 0x00, +0x03, 0x06, 0x00, 0xF0, 0xFB, 0xFB, +}; diff --git a/keyboards/helix/rev2/keymaps/froggy_106/keymap.c b/keyboards/helix/rev2/keymaps/froggy_106/keymap.c new file mode 100644 index 000000000000..d0a17cb4ae64 --- /dev/null +++ b/keyboards/helix/rev2/keymaps/froggy_106/keymap.c @@ -0,0 +1,810 @@ +#include QMK_KEYBOARD_H +#include "keymap_japanese.h" +#include + +#define LAYOUT_half( \ + L00, L01, L02, L03, L04, L05, \ + L10, L11, L12, L13, L14, L15, \ + L20, L21, L22, L23, L24, L25, \ + L30, L31, L32, L33, L34, L35, L36, \ + L40, L41, L42, L43, L44, L45, L46 \ +) { \ + { L00, L01, L02, L03, L04, L05, KC_NO }, \ + { L10, L11, L12, L13, L14, L15, KC_NO }, \ + { L20, L21, L22, L23, L24, L25, KC_NO }, \ + { L30, L31, L32, L33, L34, L35, L36 }, \ + { L40, L41, L42, L43, L44, L45, L46 }, \ + { _______, _______, _______, _______, _______, _______, KC_NO }, \ + { _______, _______, _______, _______, _______, _______, KC_NO }, \ + { _______, _______, _______, _______, _______, _______, KC_NO }, \ + { _______, _______, _______, _______, _______, _______, _______ }, \ + { _______, _______, _______, _______, _______, _______, _______ } \ +} + +#define DELAY_TIME 75 +static uint16_t key_timer; +static uint16_t tap_timer; +static uint16_t delay_registered_code; +static uint8_t delay_registered_layer; +static uint8_t delay_mat_row; +static uint8_t delay_mat_col; +static bool delay_key_stat; +static bool delay_key_pressed; +static bool tapping_key; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +enum layer_number { + _BASE = 0, + _BASE_106, + _OPT, + _OPT_106, + _SYM, + _SYM_106, + _NUM, + _NUM_106, + _FUNC, + _LAYER_NUM, +}; +bool RGBAnimation = false; //Flag for LED Layer color Refresh. + +typedef union { + uint32_t raw; + struct { + bool mac_mode:1; + }; +} user_config_t; +user_config_t user_config; + +#define IS_MODE_106() ((default_layer_state & (1UL << _BASE_106)) != 0) +#define IS_MODE_MAC() (user_config.mac_mode) +#ifndef MAX +#define MAX(X, Y) ((X) > (Y) ? (X) : (Y)) +#endif +#ifndef MIN +#define MIN(X, Y) ((X) < (Y) ? (X) : (Y)) +#endif + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + EISU, + KANA, + RGBRST, + RGBOFF, + RGB1, + RGB2, + RGB3, + OPT_TAP_SP, + DESKTOP, + MAC, + WIN, + L_SYM, + L_NUM, + TO_106, + TO_101, +}; + +enum macro_keycodes { + KC_SAMPLEMACRO, +}; + +//Macros +#define M_SAMPLE M(KC_SAMPLEMACRO) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Base + * ,-----------------------------------------. + * | C+z | ; | [ | ( | < | { | + * |------+------+------+------+------+------| + * | KANA | P | K | R | A | F | + * |------+------+------+------+------+------| + * | BS | D | T | H | E | O | + * |------+------+------+------+------+------+------. + * | Shift| Y | S | N | I | U |Space | + * |------+------+------+------+------+------+------| + * | Ctrl | Alt | Gui | Sym | Num | OPT | Ent | + * `------------------------------------------------' + */ + [_BASE] = LAYOUT_half( + LCTL(KC_Z), KC_SCLN, KC_LBRC, KC_LPRN, KC_LT, KC_LCBR, + KANA, KC_P, KC_K, KC_R, KC_A, KC_F, + KC_BSPC, KC_D, KC_T, KC_H, KC_E, KC_O, + OSM(MOD_LSFT), KC_Y, KC_S, KC_N, KC_I, KC_U, KC_SPC, + OSM(MOD_LCTL), OSM(MOD_LALT), OSM(MOD_LGUI), L_SYM, L_NUM, OPT_TAP_SP, KC_ENT + ), + [_BASE_106] = LAYOUT_half( + LCTL(KC_Z), JP_SCLN, JP_LBRC, JP_LPRN, JP_LABK, JP_LCBR, + KANA, KC_P, KC_K, KC_R, KC_A, KC_F, + KC_BSPC, KC_D, KC_T, KC_H, KC_E, KC_O, + OSM(MOD_LSFT), KC_Y, KC_S, KC_N, KC_I, KC_U, KC_SPC, + OSM(MOD_LCTL), OSM(MOD_LALT), OSM(MOD_LGUI), L_SYM, L_NUM, OPT_TAP_SP, KC_ENT + ), + + /* Opt + * ,-----------------------------------------. + * | Esc | : | ] | ) | > | } | + * |------+------+------+------+------+------| + * | EISU| J | M | B | ' | Tab | + * |------+------+------+------+------+------| + * | . | V | C | L | Z | Q | + * |------+------+------+------+------+------+------. + * | | X | G | W | - | Del | Esc | + * |------+------+------+------+------+------+------| + * | | | | , | DTOP | | | + * `------------------------------------------------' + */ + [_OPT] = LAYOUT_half( + KC_ESC, KC_COLN,KC_RBRC, KC_RPRN,KC_GT, KC_RCBR, + EISU, KC_J, KC_M, KC_B, KC_QUOT, KC_TAB, + KC_DOT, KC_V, KC_C, KC_L, KC_Z, KC_Q, + _______, KC_X, KC_G, KC_W, KC_MINUS, KC_DEL, KC_ESC, + _______, _______,_______, KC_COMM,DESKTOP, _______, _______ + ), + [_OPT_106] = LAYOUT_half( + KC_ESC, JP_COLN,JP_RBRC, JP_RPRN,JP_RABK, JP_RCBR, + EISU, KC_J, KC_M, KC_B, JP_QUOT, KC_TAB, + KC_DOT, KC_V, KC_C, KC_L, KC_Z, KC_Q, + _______, KC_X, KC_G, KC_W, JP_MINS, KC_DEL, KC_ESC, + _______, _______,_______, KC_COMM,DESKTOP, _______, _______ + ), + + /* Sym + * ,-----------------------------------------. + * | Ins | GRV | | PU | PD | ^ | + * |------+------+------+------+------+------| + * | | \ | # | = | ? | % | + * |------+------+------+------+------+------| + * | | $ | upA | @ | ! | | | + * |------+------+------+------+------+------+------. + * | CL | <- | dwA | -> | _ | & | | + * |------+------+------+------+------+------+------+ + * | | | PS | | ~ | | | + * `------------------------------------------------' + */ + [_SYM] = LAYOUT_half( + KC_INS, KC_GRV, _______, KC_PGUP, KC_PGDN, KC_CIRC, + _______, KC_BSLS, KC_HASH, KC_EQL, KC_QUES, KC_PERC, + _______, KC_DLR, KC_UP, KC_AT, KC_EXLM, KC_PIPE, + KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT,KC_UNDS, KC_AMPR, _______, + _______, _______, KC_PSCR, _______, KC_TILD, _______, _______ + ), + [_SYM_106] = LAYOUT_half( + KC_INS, JP_GRV, _______, KC_PGUP, KC_PGDN, JP_CIRC, + _______, JP_BSLS, JP_HASH, JP_EQL, JP_QUES, JP_PERC, + _______, JP_DLR, KC_UP, JP_AT, JP_EXLM, JP_PIPE, + KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT,JP_UNDS, JP_AMPR, _______, + _______, _______, KC_PSCR, _______, JP_TILD, _______, _______ + ), + + /* Raise + * ,-----------------------------------------. + * | | | Func | home | End | | + * |------+------+------+------+------+------| + * | | * | 7 | 8 | 9 | - | + * |------+------+------+------+------+------| + * | . | / | 4 | 5 | 6 | + | + * |------+------+------+------+------+------+------. + * | LN | 0 | 1 | 2 | 3 |C+S+F1| | + * |------+------+------+------+------+------+------| + * | | | . | , | | | | + * `------------------------------------------------' + */ + [_NUM] = LAYOUT_half( + _______, _______, OSL(_FUNC), KC_HOME, KC_END, _______, + _______, KC_ASTR, KC_P7, KC_P8, KC_P9, KC_MINS, + KC_DOT, KC_SLSH, KC_P4, KC_P5, KC_P6, KC_PLUS, + KC_NUM, KC_P0, KC_P1, KC_P2, KC_P3, LCTL(S(KC_F1)), _______, + _______, _______, KC_PDOT, KC_COMM, _______, _______, _______ + ), + [_NUM_106] = LAYOUT_half( + _______, _______, OSL(_FUNC), KC_HOME, KC_END, _______, + _______, JP_ASTR, KC_P7, KC_P8, KC_P9, JP_MINS, + KC_DOT, JP_SLSH, KC_P4, KC_P5, KC_P6, JP_PLUS, + KC_NUM, KC_P0, KC_P1, KC_P2, KC_P3, LCTL(S(KC_F1)), _______, + _______, _______, KC_PDOT, JP_COMM, _______, _______, _______ + ), + + /* Func + * ,-----------------------------------------. + * |RGBRST| Hue |To101 | RST | Mac | Win | + * |------+------+------+------+------+------| + * | RGB1 | VAL+ | F7 | F8 | F9 |To106 | + * |------+------+------+------+------+------| + * | RGB2 | VAL- | F4 | F5 | F6 | F12 | + * |------+------+------+------+------+------+------. + * | RGB3 | F10 | F1 | F2 | F3 | F11 | | + * |------+------+------+------+------+------+------| + * |RGBOFF| | | | | | | + * `------------------------------------------------' + */ + [_FUNC] = LAYOUT_half( + RGBRST,RGB_HUI, TO_101, QK_BOOT, MAC, WIN, + RGB1, RGB_VAI, KC_F7, KC_F8, KC_F9, TO_106, + RGB2, RGB_VAD, KC_F4, KC_F5, KC_F6, KC_F12, + RGB3, KC_F10, KC_F1, KC_F2, KC_F3, KC_F11, _______, + RGBOFF,_______, _______, _______, _______, _______, _______ + ) +}; + +void set_mac_mode(bool enable) { + if(enable){ + user_config.mac_mode = true; + keymap_config.swap_lalt_lgui = false; + keymap_config.swap_ralt_rgui = false; + }else{ + user_config.mac_mode = false; + keymap_config.swap_lalt_lgui = true; + keymap_config.swap_ralt_rgui = true; + } + eeconfig_update_user(user_config.raw); +} + +void eeconfig_init_user(void) { + user_config.raw = 0; + eeconfig_update_user(user_config.raw); +} + +void keyboard_post_init_user(void) { + user_config.raw = eeconfig_read_user(); + set_mac_mode(user_config.mac_mode); +} + +bool find_mairix(uint16_t keycode, uint8_t *row, uint8_t *col){ + int base_keymap = IS_MODE_106() ? _BASE_106 : _BASE; + for(uint8_t i=0; ievent.key.col; + row = record->event.key.row; + if (record->event.pressed && ((row < 5 && is_keyboard_master()) || (row >= 5 && !is_keyboard_master()))) { + int end = keybuf_end; + keybufs[end].col = col; + keybufs[end].row = row % 5; + keybufs[end].frame = 0; + keybuf_end ++; + } + #endif + + if(tap_timer&&keycode!=OPT_TAP_SP){ + tapping_key = true; + } + + if(keycode==delay_registered_code){ + if (!record->event.pressed){ + unregister_delay_code(); + } + } + + switch (keycode) { + case KC_SCLN: + case KC_LBRC: + case KC_LPRN: + case KC_LT: + case KC_LCBR: + case KC_P: + case KC_K: + case KC_R: + case KC_A: + case KC_F: + case KC_BSPC: + case KC_D: + case KC_T: + case KC_H: + case KC_E: + case KC_O: + case KC_Y: + case KC_S: + case KC_N: + case KC_I: + case KC_U: + case LCTL(KC_Z): + case KC_SPC: + //case JP_SCLN: // == KC_SCLN + case JP_LBRC: + case JP_LPRN: + //case JP_LABK: // == KC_LT + case JP_LCBR: + if (IS_MODE_106()) { + if (keycode == KC_LBRC || keycode == KC_LPRN || keycode == KC_LCBR) + break; + }else{ + if (keycode == JP_LBRC || keycode == JP_LPRN || keycode == JP_LCBR) + break; + } + if (record->event.pressed) { + if (IS_MODE_106()) + register_delay_code(_BASE_106); + else + register_delay_code(_BASE); + if(find_mairix(keycode, &delay_mat_row, &delay_mat_col)){ + key_timer = timer_read(); + delay_key_stat = true; + delay_key_pressed = true; + } + }else{ + delay_key_pressed = false; + } + return false; + break; + case L_SYM: + if (record->event.pressed) { + if (IS_MODE_106()) { + register_delay_code(_SYM_106); + layer_on(_SYM_106); + }else{ + register_delay_code(_SYM); + layer_on(_SYM); + } + }else{ + layer_off(_SYM); + layer_off(_SYM_106); + if(delay_registered_layer == _SYM || delay_registered_layer == _SYM_106) { + unregister_delay_code(); + } + } + return false; + break; + case L_NUM: + if (record->event.pressed) { + if (IS_MODE_106()) { + register_delay_code(_NUM_106); + layer_on(_NUM_106); + }else{ + register_delay_code(_NUM); + layer_on(_NUM); + } + }else{ + layer_off(_NUM); + layer_off(_NUM_106); + if(delay_registered_layer == _NUM || delay_registered_layer == _NUM_106) { + unregister_delay_code(); + } + } + return false; + break; + case OPT_TAP_SP: + if (record->event.pressed) { + tapping_key = false; + if (IS_MODE_106()) { + register_delay_code(_OPT_106); + layer_on(_OPT_106); + }else{ + register_delay_code(_OPT); + layer_on(_OPT); + } + tap_timer = timer_read(); + }else{ + layer_off(_OPT); + layer_off(_OPT_106); + if(tapping_key==false && timer_elapsed(tap_timer) < TAPPING_TERM){ + SEND_STRING(" "); + }else if(delay_registered_layer == _OPT || delay_registered_layer == _OPT_106) { + unregister_delay_code(); + } + tap_timer = 0; + } + return false; + break; + case EISU: + if (record->event.pressed) { + if(IS_MODE_MAC()){ + register_code(KC_LNG2); + }else{ + SEND_STRING(SS_LALT("`")); + } + } else { + unregister_code(KC_LNG2); + } + return false; + break; + case KANA: + if (record->event.pressed) { + if(IS_MODE_MAC()){ + register_code(KC_LNG1); + }else{ + SEND_STRING(SS_LALT("`")); + } + } else { + unregister_code(KC_LNG1); + } + return false; + break; + case DESKTOP: + if (record->event.pressed) { + if(IS_MODE_MAC()){ + register_code(KC_F11); + }else{ + SEND_STRING(SS_LGUI("d")); + } + } else { + unregister_code(KC_F11); + } + return false; + break; + case RGBRST: + #ifdef RGBLIGHT_ENABLE + if (record->event.pressed) { + eeconfig_update_rgblight_default(); + rgblight_enable(); + RGBAnimation = false; + } + #endif + break; + case RGBOFF: + #ifdef RGBLIGHT_ENABLE + if (record->event.pressed) { + rgblight_disable(); + } + #endif + break; + case RGB1: + #ifdef RGBLIGHT_ENABLE + if (record->event.pressed) { + RGBAnimation = true; + rgblight_mode(RGBLIGHT_MODE_RAINBOW_MOOD); + } + #endif + break; + case RGB2: + #ifdef RGBLIGHT_ENABLE + if (record->event.pressed) { + RGBAnimation = true; + rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 1); + } + #endif + break; + case RGB3: + #ifdef RGBLIGHT_ENABLE + if (record->event.pressed) { + RGBAnimation = true; + rgblight_mode(RGBLIGHT_MODE_KNIGHT); + } + #endif + break; + case MAC: + if (record->event.pressed) { + set_mac_mode(true); + } + break; + case WIN: + if (record->event.pressed) { + set_mac_mode(false); + } + break; + case TO_101: + if (record->event.pressed) { + if (IS_MODE_106()) { + set_single_persistent_default_layer(_BASE); + } + } + break; + case TO_106: + if (record->event.pressed) { + if (!IS_MODE_106()) { + set_single_persistent_default_layer(_BASE_106); + } + } + break; + } + return true; +} + +// LED Effect +#ifdef RGBLIGHT_ENABLE +unsigned char rgb[7][5][3]; +void led_ripple_effect(char r, char g, char b) { + static int scan_count = -10; + static int keys[] = { 6, 6, 6, 7, 7 }; + static int keys_sum[] = { 0, 6, 12, 18, 25 }; + + if (scan_count == -1) { + rgblight_enable_noeeprom(); + rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT); + } else if (scan_count >= 0 && scan_count < 5) { + for (unsigned char c=keybuf_begin; c!=keybuf_end; c++) { + int i = c; + // FIXME: + + int y = scan_count; + int dist_y = abs(y - keybufs[i].row); + for (int x=0; x= 6 && scan_count <= 10) { + int y = scan_count - 6; + for (int x=0; x= 12) { scan_count = 0; } +} +#endif + +layer_state_t layer_state_old; + +//runs every scan cycle (a lot) +void matrix_scan_user(void) { + if(delay_key_stat && (timer_elapsed(key_timer) > DELAY_TIME)){ + if (IS_MODE_106()) + register_delay_code(_BASE_106); + else + register_delay_code(_BASE); + if(!delay_key_pressed){ + unregister_delay_code(); + } + } + + if(layer_state_old != layer_state){ + for (int8_t i = _LAYER_NUM-1; i > _BASE_106; i--) { + if(IS_LAYER_ON(i)){ + register_delay_code(i); + break; + } + } + layer_state_old = layer_state; + } + + #ifdef RGBLIGHT_ENABLE + if(!RGBAnimation){ + if(IS_LAYER_ON(_FUNC)){ + #ifdef RGBLED_BACK + led_ripple_effect(127,23,0); + #else + rgblight_setrgb(127,23,0); + #endif + }else if(IS_LAYER_ON(_NUM)||IS_LAYER_ON(_NUM_106)){ + #ifdef RGBLED_BACK + led_ripple_effect(127,0,61); + #else + rgblight_setrgb(127,0,61); + #endif + }else if(IS_LAYER_ON(_SYM)||IS_LAYER_ON(_SYM_106)){ + #ifdef RGBLED_BACK + led_ripple_effect(0,127,0); + #else + rgblight_setrgb(0,127,0); + #endif + }else if(IS_LAYER_ON(_OPT)||IS_LAYER_ON(_OPT_106)){ + #ifdef RGBLED_BACK + led_ripple_effect(127,0,100); + #else + rgblight_setrgb(127,0,100); + #endif + } else { + #ifdef RGBLED_BACK + led_ripple_effect(0,112,127); + #else + rgblight_setrgb(0,112,127); + #endif + } + } + #endif +} + +//OLED update loop +#ifdef OLED_ENABLE + +// Render to OLED +void render_status(void) { + + // froggy logo + static char logo[4][17]= + { + {0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0}, + {0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,0}, + {0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,0}, + {0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0}, + }; + + static char modectl[4][2][4]= + { + { + {0x65,0x66,0x67,0}, //WIN + {0x85,0x86,0x87,0}, //WIN + }, + { + {0xa5,0xa6,0xa7,0}, //US(101) + {0xc5,0xc6,0xc7,0}, //US(101) + }, + { + {0xbd,0xbe,0xbf,0}, //MAC + {0xdd,0xde,0xdf,0}, //MAC + }, + { + {0xba,0xbb,0xbc,0}, //JP(106) + {0xda,0xdb,0xdc,0}, //JP(106) + }, + }; + + static char indctr[8][2][4]= + { + // white icon + { + {0x60,0x61,0x62,0}, //NUM + {0x63,0x64,0} //FUNC + }, + { + {0x80,0x81,0x82,0}, //NUM + {0x83,0x84,0} //FUNC + }, + { + {0xa0,0xa1,0xa2,0}, //CAPS + {0xa3,0xa4,0} //SCLK + }, + { + {0xc0,0xc1,0xc2,0}, //CAPS + {0xc3,0xc4,0} //SCLK + }, + // Black icon + { + {0x75,0x76,0x77,0}, //NUM + {0x78,0x79,0} //FUNC + }, + { + {0x95,0x96,0x97,0}, //NUM + {0x98,0x99,0} //FUNC + }, + { + {0xb5,0xb6,0xb7,0}, //CAPS + {0xb8,0xb9,0} //SCLK + }, + { + {0xd5,0xd6,0xd7,0}, //CAPS + {0xd8,0xd9,0} //SCLK + }, + }; + + int rown = 0; + int rowf = 0; + int rowa = 0; + int rows = 0; + int rowm = 0; + int rowj = 1; + + //Set Indicator icon + led_t led_state = host_keyboard_led_state(); + if (led_state.num_lock) { rown = 4; } + if (led_state.caps_lock) { rowa = 4; } + if (led_state.scroll_lock) { rows = 4; } + if (IS_LAYER_ON(_FUNC)) { rowf = 4; } + + //Set Mode icon + if (IS_MODE_MAC()) { rowm = 2; } + if (IS_MODE_106()) { rowj = 3; } + + oled_write(indctr[rown] [0], false); + oled_write(indctr[rowf] [1], false); + oled_write(modectl[rowm] [0], false); + oled_write(logo[0], false); + oled_write(indctr[rown+1][0], false); + oled_write(indctr[rowf+1][1], false); + oled_write(modectl[rowm] [1], false); + oled_write(logo[1], false); + oled_write(indctr[rowa+2][0], false); + oled_write(indctr[rows+2][1], false); + oled_write(modectl[rowj] [0], false); + oled_write(logo[2], false); + oled_write(indctr[rowa+3][0], false); + oled_write(indctr[rows+3][1], false); + oled_write(modectl[rowj] [1], false); + oled_write(logo[3], false); + +} + +bool oled_task_user(void) { + +#if DEBUG_TO_SCREEN + if (debug_enable) { + return; + } +#endif + + if (is_keyboard_master()) { + render_status(); + } + return false; +} + +#endif // end of OLED_ENABLE + +// Local Variables: +// mode: c++ +// truncate-lines: t +// indent-tabs-mode: nil +// End: diff --git a/keyboards/helix/rev2/keymaps/froggy_106/readme.md b/keyboards/helix/rev2/keymaps/froggy_106/readme.md new file mode 100644 index 000000000000..911fb404321c --- /dev/null +++ b/keyboards/helix/rev2/keymaps/froggy_106/readme.md @@ -0,0 +1,85 @@ +Froggy -one hand Helix- with 106-key mode +====== + +![Imgur](https://i.imgur.com/S1Dw3XW.jpg) + +## Features +It is a one-handed keyboard with reference to Frogpad. Layout Designed by タクマ ([@humid](https://twitter.com/humid)). + +This keymap has 106-key mode, This is usable when keyboard setting of OS is OADG 106/109 keyboard. + +## Layout +### Base +``` +,-----------------------------------------. +| C+z | ; | [ | ( | < | { | +|------+------+------+------+------+------| +| KANA | P | K | R | A | F | +|------+------+------+------+------+------| +| BS | D | T | H | E | O | +|------+------+------+------+------+------+------. +| Shift| Y | S | N | I | U | Space| +|------+------+------+------+------+------+------| +| Ctrl | Alt | win | Sym | Num | OPT | Ent | +`------------------------------------------------' +``` + +### Opt +``` +,-----------------------------------------. +| Esc | : | ] | ) | > | } | +|------+------+------+------+------+------| +| EISU | J | M | B | ' | Tab | +|------+------+------+------+------+------| +| . | V | C | L | Z | Q | +|------+------+------+------+------+------+------. +| | X | G | W | - | Del | Esc | +|------+------+------+------+------+------+------| +| | | | , | DTOP | | | +`------------------------------------------------' +``` + +### Num +``` +,-----------------------------------------. +| | | Func | home | End | | +|------+------+------+------+------+------| +| | * | 7 | 8 | 9 | - | +|------+------+------+------+------+------| +| . | / | 4 | 5 | 6 | + | +|------+------+------+------+------+------+------. +| LN | 0 | 1 | 2 | 3 |C+S+F1| | +|------+------+------+------+------+------+------| +| | | | , | | | | +`------------------------------------------------' +``` + +### Sym +``` +,-----------------------------------------. +| Ins | GRV | | PU | PD | ^ | +|------+------+------+------+------+------| +| | \ | # | = | ? | % | +|------+------+------+------+------+------| +| | $ | upA | @ | ! | | | +|------+------+------+------+------+------+------. +| CL | <- | dwA | -> | _ | & | | +|------+------+------+------+------+------+------| +| | | PS | | ~ | | | + `-----------------------------------------------' +``` + +### Func +``` +,-----------------------------------------. +|RGBRST| Hue | to101| RST | Mac | Win | +|------+------+------+------+------+------| +| RGB1 | VAL+ | F7 | F8 | F9 | to106| +|------+------+------+------+------+------| +| RGB2 | VAL- | F4 | F5 | F6 | F12 | +|------+------+------+------+------+------+------. +| RGB3 | F10 | F1 | F2 | F3 | F11 | | +|------+------+------+------+------+------+------| +|RGBOFF| | | | | | | +`------------------------------------------------' +``` diff --git a/keyboards/helix/rev2/keymaps/froggy_106/rules.mk b/keyboards/helix/rev2/keymaps/froggy_106/rules.mk new file mode 100644 index 000000000000..b77e8af4f2ae --- /dev/null +++ b/keyboards/helix/rev2/keymaps/froggy_106/rules.mk @@ -0,0 +1,27 @@ +# QMK Standard Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +# See TOP/keyboards/helix/rules.mk for a list of options that can be set. +# See TOP/docs/config_options.md for more information. +# +LTO_ENABLE = yes # if firmware size over limit, try this option +SPLIT_KEYBOARD = yes + +# Helix Spacific Build Options +# you can uncomment and edit follows 7 Variables +# jp: 以下の7つの変数を必要に応じて編集し、コメントアウトをはずします。 +OLED_ENABLE = yes # OLED_ENABLE +LOCAL_GLCDFONT = yes # use each keymaps "helixfont.h" insted of "common/glcdfont.c" +LED_BACK_ENABLE = yes # LED backlight (Enable WS2812 RGB underlight.) +LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.) +LED_ANIMATIONS = yes # LED animations +# IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone) + +# OLED_ENABLE が yes のとき +# OLED_SELECT が core ならば QMK 標準の oled_dirver.c を使用します。 +# OLED_SELECT が core 以外ならば従来どおり helix/local_drivers/ssd1306.c を使用します。 +# If OLED_ENABLE is 'yes' +# If OLED_SELECT is 'core', use QMK standard oled_dirver.c. +# If OLED_SELECT is other than 'core', use helix/local_drivers/ssd1306.c. +OLED_SELECT = core diff --git a/keyboards/hotdox76v2/keymaps/dancxjo/config.h b/keyboards/hotdox76v2/keymaps/dancxjo/config.h new file mode 100644 index 000000000000..fac328091d30 --- /dev/null +++ b/keyboards/hotdox76v2/keymaps/dancxjo/config.h @@ -0,0 +1,6 @@ +// Copyright 2023 Travis Reed (@dancxjo) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once +#define DYNAMIC_KEYMAP_LAYER_COUNT 5 +#define EE_HANDS diff --git a/keyboards/hotdox76v2/keymaps/dancxjo/keymap.c b/keyboards/hotdox76v2/keymaps/dancxjo/keymap.c new file mode 100644 index 000000000000..1f55685de060 --- /dev/null +++ b/keyboards/hotdox76v2/keymaps/dancxjo/keymap.c @@ -0,0 +1,177 @@ +// Copyright 2023 Travis Reed (@dancxjo) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +enum layer { + _ENGRAM = 0, + _QWERTY, + _ENGRAM_SHIFT, + _FUNCTION, + _MEDIA +}; + +/* Combines the compose key (right super) and the AltGr */ +#define KC_COMP MT(MOD_RALT, KC_RGUI) +#define KC_SCMP MT(MOD_RSFT | MOD_RALT, KC_RGUI) + +#define KC_STAB MT(MOD_LSFT, KC_TAB) + +/* Use a fake shift layer since Engram switches level 2 assignments */ +#define KC_PSFT MO(_ENGRAM_SHIFT) + +#define KC_FUNC TT(_FUNCTION) +#define KC_MEDI TT(_MEDIA) + +/* Easily switch between MacOS & other OSes*/ +#define KC_HLM1 LM(1, MOD_LCTL) +#define KC_HLM2 LM(1, MOD_LGUI) +#define KC_SHM1 LM(1, MOD_LCTL | MOD_LSFT) +#define KC_SHM2 LM(1, MOD_LGUI | MOD_LSFT) +#define KC_STRN RSFT(KC_TRNS) + +#define KC_FORW LGUI(KC_TAB) +#define KC_BACK LGUI(LSFT(KC_TAB)) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Differs slightly from official Engram in that {} are the level 1 and [] are the level 2 */ + [_ENGRAM] = LAYOUT_ergodox_pretty( + KC_LCBR, KC_1, KC_2, KC_3, KC_4, KC_5, CG_NORM, KC_PAUSE, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RCBR, + KC_TAB, KC_B, KC_Y, KC_O, KC_U, KC_QUOT, KC_AT, KC_HASH, KC_DQUO, KC_L, KC_D, KC_W, KC_V, KC_Z, + KC_CAPS, KC_C, KC_I, KC_E, KC_A, KC_COMM, KC_DOT, KC_H, KC_T, KC_S, KC_N, KC_Q, + KC_PSFT, KC_G, KC_X, KC_J, KC_K, KC_MINS, KC_SLSH, KC_PSCR, KC_QUES, KC_R, KC_M, KC_F, KC_P, KC_PSFT, + KC_HLM1, KC_FUNC, KC_MEDI, KC_LALT, KC_HLM2, KC_RGUI, KC_RALT, KC_MEDI, KC_FUNC,KC_HLM1, + KC_INS, KC_HOME, KC_END, KC_DEL, + KC_PGUP, KC_PGDN, + KC_ENT, KC_ESC, KC_LSFT, KC_RSFT, KC_BSPC, KC_SPC + ), + [_ENGRAM_SHIFT] = LAYOUT_ergodox_pretty( + KC_LBRC, KC_PIPE, KC_EQL, KC_TILD, KC_PLUS, KC_LT, CG_SWAP, KC_STRN, KC_GT, KC_CIRC, KC_AMPR, KC_PERC, KC_ASTR, KC_RBRC, + KC_STRN, RSFT(KC_B), RSFT(KC_Y), RSFT(KC_O), RSFT(KC_U), KC_LPRN, KC_GRV, KC_DLR, KC_RPRN, RSFT(KC_L), RSFT(KC_D), RSFT(KC_W), RSFT(KC_V), RSFT(KC_Z), + KC_STRN, RSFT(KC_C), RSFT(KC_I), RSFT(KC_E), RSFT(KC_A), KC_SCLN, KC_COLN, RSFT(KC_H), RSFT(KC_T), RSFT(KC_S), RSFT(KC_N), RSFT(KC_Q), + KC_TRNS, RSFT(KC_G), RSFT(KC_X), RSFT(KC_J), RSFT(KC_K), KC_UNDS, KC_BSLS, KC_STRN, KC_EXLM, RSFT(KC_R), RSFT(KC_M), RSFT(KC_F), RSFT(KC_P), KC_TRNS, + KC_SHM1, KC_STRN, KC_STRN, KC_STRN, KC_SHM2, KC_STRN, KC_STRN, KC_STRN, KC_STRN, KC_SHM1, + KC_STRN, KC_STRN, KC_HYPR, KC_STRN, + KC_STRN, KC_STRN, + KC_SHM1, KC_STRN, KC_STRN, KC_SHM2, KC_STRN, KC_STRN + ), + [_QWERTY] = LAYOUT_ergodox_pretty( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_TRNS, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_TRNS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_EQL, KC_TRNS, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + [_FUNCTION] = LAYOUT_ergodox_pretty( + KC_PSCR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_BRID, KC_BRIU, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PWR, + KC_APP, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, TG(1), TG(1), KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_SLEP, + KC_SCRL, KC_F21, KC_F22, KC_F23, KC_F24, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WAKE, + KC_PAUS, KC_UNDO, KC_CUT, KC_COPY, KC_PSTE, KC_NO, CG_SWAP, CG_NORM, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, QK_BOOT, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + RGB_SAD, RGB_HUD, RGB_HUI, RGB_SAI, + RGB_RMOD, RGB_MOD, + RGB_SPD, RGB_VAD, KC_TRNS, KC_TRNS, RGB_VAI, RGB_SPI + ), + [_MEDIA] = LAYOUT_ergodox_pretty( + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WREF, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_WREF, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_UP, KC_PGDN, KC_MSEL, KC_NO, + KC_NO, KC_NO, KC_WSTP, KC_MYCM, KC_WSCH, KC_FIND, KC_WHOM, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO, KC_NO, + KC_LSFT, KC_NO, KC_NO, KC_CALC, KC_NO, KC_WFAV, KC_NO, KC_NO, KC_NO, KC_HOME, KC_MAIL, KC_END, KC_NO, KC_NO, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_MUTE, KC_EJCT, KC_MSTP, KC_MPLY, + KC_MPRV, KC_MNXT, + KC_MRWD, KC_VOLD, KC_TRNS, KC_TRNS, KC_VOLU, KC_MFFD + ) +}; + +char* get_layer_name(uint8_t layer, bool capitalized) { + char *layer_name = "Unknown "; + + switch (layer) { + case _ENGRAM: + case _ENGRAM_SHIFT: + if (capitalized) { + layer_name = "ENGRAM "; + } else { + layer_name = "engram "; + } + break; + case _QWERTY: + if (capitalized) { + layer_name = "QWERTY "; + } else { + layer_name = "qwerty "; + } + break; + case _MEDIA: + layer_name = "Media+ "; + break; + case _FUNCTION: + layer_name = "Function"; + break; + } + return layer_name; +} + +void render_locks(led_t led_state) { + oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false); + oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false); + oled_write_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false); +} + +void render_mods(uint8_t modifiers, uint8_t layer) { + oled_write_P(modifiers & MOD_MASK_GUI ? PSTR("Super") : PSTR(" "), false); + oled_write_P(PSTR(" "), false); + oled_write_P(modifiers & MOD_MASK_ALT ? PSTR("Alt") : PSTR(" "), false); + oled_write_P(PSTR(" "), false); + oled_write_P(modifiers & MOD_MASK_CTRL ? PSTR("Ctl") : PSTR(" "), false); + oled_write_P(PSTR(" "), false); + + if (layer == _ENGRAM_SHIFT) { + oled_write_P(PSTR("Pseudo"), false); + } else { + oled_write_P(modifiers & MOD_MASK_SHIFT ? PSTR("Shift ") : PSTR(" "), false); + } +} + +char* get_helm_key(void) { + if (keymap_config.swap_lctl_lgui) { + return "Super"; + } else { + return "Control"; + } +} + +bool oled_task_user(void) { + uint8_t layer = get_highest_layer(layer_state); + uint8_t modifiers = get_mods()|get_oneshot_mods(); + led_t led_state = host_keyboard_led_state(); + + bool real_shifted = modifiers & MOD_MASK_SHIFT; + bool pseudo_shifted = layer == _ENGRAM_SHIFT; + bool shifted = real_shifted || pseudo_shifted; + bool caps = led_state.caps_lock; + bool capitalized = (caps && !shifted) || (!caps && shifted); + + oled_write_P(PSTR("Layer: "), false); + oled_write(get_layer_name(layer, capitalized), false); + oled_write_P(PSTR("\n"), false); + + // Only the master knows if we've swapped the gui and ctl key + if (is_keyboard_master()) { + oled_write_P(PSTR(" Helm: "), false); + oled_write(get_helm_key(), false); + } + + oled_write_P(PSTR("\n"), false); + + render_mods(modifiers, layer); + oled_write_P(PSTR("\n"), false); + + render_locks(led_state); + + return false; +} diff --git a/keyboards/hotdox76v2/keymaps/dancxjo/rules.mk b/keyboards/hotdox76v2/keymaps/dancxjo/rules.mk new file mode 100644 index 000000000000..bc20eb20b7ce --- /dev/null +++ b/keyboards/hotdox76v2/keymaps/dancxjo/rules.mk @@ -0,0 +1,4 @@ +COMMAND_ENABLE = yes +VIA_ENABLE = yes +EXTRAKEY_ENABLE = no +MOUSEKEY_ENABLE = no diff --git a/keyboards/hs60/v2/hhkb/keymaps/goatmaster/config.h b/keyboards/hs60/v2/hhkb/keymaps/goatmaster/config.h new file mode 100644 index 000000000000..50c76489e656 --- /dev/null +++ b/keyboards/hs60/v2/hhkb/keymaps/goatmaster/config.h @@ -0,0 +1,22 @@ +/* +Copyright 2018 Yiancar + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ +#pragma once + +/* Include overwrites for specific keymap */ + +#undef RGB_BACKLIGHT_CAPS_LOCK_INDICATOR +#define RGB_BACKLIGHT_CAPS_LOCK_INDICATOR { .color = { .h = 0, .s = 255 }, .index = 3-1 } //red diff --git a/keyboards/hs60/v2/hhkb/keymaps/goatmaster/keymap.c b/keyboards/hs60/v2/hhkb/keymaps/goatmaster/keymap.c new file mode 100644 index 000000000000..374dc6ad4b5e --- /dev/null +++ b/keyboards/hs60/v2/hhkb/keymaps/goatmaster/keymap.c @@ -0,0 +1,71 @@ +/* Copyright 2018 Yiancar + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + +//This is the HHKB version of the PCB + +enum macro_keys { + KC_EML = SAFE_RANGE +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = LAYOUT_60_hhkb( /* Base */ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSLS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL ), + +[1] = LAYOUT_60_hhkb( /* FN */ + QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, + KC_TRNS, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, BR_DEC, BR_INC, ES_DEC, ES_INC, KC_UP, KC_TRNS, KC_DEL, + KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, + KC_TRNS, KC_TRNS, S1_DEC, S1_INC, S2_DEC, S2_INC, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), + +[2] = LAYOUT_60_hhkb( /* Empty for dynamic keymaps */ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), + +[3] = LAYOUT_60_hhkb( /* Empty for dynamic keymaps */ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), +}; + +void matrix_init_user(void) { + //user initialization +} + +void matrix_scan_user(void) { + //user matrix +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_EML: //use "KC_EML" as keycode in layers above to call macro + if (!record->event.pressed) { + send_string_with_delay_P(PSTR("example@email.com"), 10); //change email value here + } + break; + } + return true; +} diff --git a/keyboards/hs60/v2/hhkb/keymaps/goatmaster/readme.md b/keyboards/hs60/v2/hhkb/keymaps/goatmaster/readme.md new file mode 100644 index 000000000000..ea9803cc0bbb --- /dev/null +++ b/keyboards/hs60/v2/hhkb/keymaps/goatmaster/readme.md @@ -0,0 +1,6 @@ +The default keymap for HHKB HS60 V2. VIA support enabled. +========================================================= + +![Layout image](https://imgur.com/usbrQWL.png) + +Default layer is normal HHKB with 7U space. Fn layer is used for RGB functions, Volume control and arrow cluster \ No newline at end of file diff --git a/keyboards/hs60/v2/hhkb/keymaps/goatmaster/rules.mk b/keyboards/hs60/v2/hhkb/keymaps/goatmaster/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/hs60/v2/hhkb/keymaps/goatmaster/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/lazydesigners/dimple/staggered/keymaps/oncesavedgaming/keymap.c b/keyboards/lazydesigners/dimple/staggered/keymaps/oncesavedgaming/keymap.c new file mode 100644 index 000000000000..e490d6890072 --- /dev/null +++ b/keyboards/lazydesigners/dimple/staggered/keymaps/oncesavedgaming/keymap.c @@ -0,0 +1,23 @@ +/* Copyright 2021 LAZYDESIGNERS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT(KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, RSFT(KC_SLSH), KC_DEL, KC_ESC, KC_LALT, KC_SPC, LT(1,KC_SPC), KC_RALT, KC_RGUI, KC_LCTL), + [1] = LAYOUT(KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, QK_BOOT, RGB_SPI, RGB_SPD, RGB_M_P, RGB_M_B, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, KC_SCLN, KC_NO, KC_LSFT, RGB_TOG, RGB_MOD, RGB_RMOD, RGB_HUI, RGB_HUD, RGB_VAI, RGB_VAD, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, MO(2), KC_NO, KC_LEFT, KC_DOWN, KC_RGHT), + [2] = LAYOUT(KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO) +}; diff --git a/keyboards/lfkeyboards/lfk78/keymaps/ca178858/keymap.c b/keyboards/lfkeyboards/lfk78/keymaps/ca178858/keymap.c new file mode 100644 index 000000000000..80e267e45865 --- /dev/null +++ b/keyboards/lfkeyboards/lfk78/keymaps/ca178858/keymap.c @@ -0,0 +1,136 @@ +#include QMK_KEYBOARD_H + +enum keymap_layout { + VANILLA = 0, // matches MF68 layout + CS_GO, // 0x08 + FUNC, // 0x10 + SETTINGS, // 0x20 +}; + +enum { + TD_ESC_FUNC = 0, + TD_ESC_CTRL, + TD_SPC_SPAM +}; + +bool spam_space = false; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap BASE: (Base Layer) Default Layer + * ,---------. ,------------------------------------------------------------. ,---------. + * |Vol-|Vol+| |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| | Ins|PgUp| + * |---------| |------------------------------------------------------------| |---------| + * | F3 | F4 | |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del|PgDn| + * |---------| |------------------------------------------------------------| `---------' + * | F5 | F6 | |Control | A| S| D| F| G| H| J| K| L| ;| '|Return | + * |---------| |------------------------------------------------------------| ,----. + * | F7 | F8 | |Shift | Z| X| C| V| B| N| M| ,| .| /| Shift | | Up | + * |---------| |-------------------------------------------------------------------------. + * | F9 | F10| |Func|Alt |Cmd | Space |Cmd |Alt |Func | |Lft| Dn |Rig | + * `---------' `------------------------------------------------------' `-------------' + */ + [VANILLA] = LAYOUT_split_rshift( + KC_VOLD, KC_VOLU, QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, LALT(KC_F5), KC_PGUP, + KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN, + KC_F5, KC_F6, TD(TD_ESC_FUNC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(CS_GO), KC_UP, + KC_F9, KC_F10, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT + ), + + [CS_GO] = LAYOUT_split_rshift( + _______, _______, QK_GESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, KC_LCTL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + /* Keymap FUNCTION: Function Layer + * ,---------. ,-------------------------------------------------------------. ,---------. + * | V- | V+ | | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | Ins|Home| + * |---------| |-------------------------------------------------------------| |---------| + * | | | |Tab | |PgU| | | | | | Up| | | | | | | Del|End | + * |---------| |-------------------------------------------------------------| `---------' + * | | | |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | | + * |---------| |-------------------------------------------------------------| ,----. + * | | | |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up | + * |---------| |--------------------------------------------------------------------------. + * | | F10| |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig | + * `---------' `------------------------------------------------------' `-------------' + */ + [FUNC] = LAYOUT_split_rshift( + _______, _______, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, TO(CS_GO), KC_HOME, + _______, _______, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_END, + _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, + _______, _______, _______, XXXXXXX, KC_DEL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), XXXXXXX, _______, + _______, _______, _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______ + ), + + /* Keymap SETTINGS: Settings Layer + * ,---------. ,-----------------------------------------------------------. ,-------------. + * | | | |FN0 |BL0|BL1|BL2|BL3| | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+| + * |---------| |-----------------------------------------------------------| |-------------| + * | | | |Debug| | | | | | | | | | | | |RGBTst| |RGB Mode|Val-| + * |---------| |-----------------------------------------------------------| `-------------' + * | | | |LayrClr|Hz+|MS+| | | | | | | | | | RST | + * |---------| |-----------------------------------------------------------| ,----. + * | | | |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+| + * |---------| |------------------------------------------------------------------------. + * | | | | | | | Print Debug | | | | |Sat-|Hue-|Sat+| + * `---------' `------------------------------------------------------' `--------------' + */ + [SETTINGS] = LAYOUT_split_rshift( + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DOWN, BL_UP, BL_TOGG, RGB_TOG, RGB_VAI, + XXXXXXX, XXXXXXX, DB_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_VAD, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SAD, RGB_HUD, RGB_SAI + ) +}; + +void tap_space_spam_finished(tap_dance_state_t *state, void *user_data) { + if (get_mods() & (MOD_BIT(KC_LGUI))) { + return; + } + if (state->pressed) { + spam_space = true; + } + tap_code(KC_SPC); +} + +void tap_space_spam_reset(tap_dance_state_t *state, void *user_data) { + spam_space = false; + unregister_code(KC_SPC); +} + +void tap_esc_func_finished(tap_dance_state_t *state, void *user_data) { + if (state->pressed) { + layer_on(FUNC); + } else { + tap_code(KC_ESC); + } +} + +void tap_esc_func_reset(tap_dance_state_t *state, void *user_data) { + layer_off(FUNC); +} + +tap_dance_action_t tap_dance_actions[] = { + [TD_ESC_FUNC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_esc_func_finished, tap_esc_func_reset), + [TD_SPC_SPAM] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_space_spam_finished, tap_space_spam_reset), +}; + +void matrix_scan_user(void) { + if (spam_space && !(get_mods() & (MOD_BIT(KC_LGUI)))) { + tap_code(KC_SPC); + } +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if ((layer_state & (1 << CS_GO)) && (keycode == 44)) { + if (get_mods() & (MOD_BIT(KC_LGUI))) { + return false; + } + } + return true; +} diff --git a/keyboards/lfkeyboards/lfk78/keymaps/ca178858/readme.md b/keyboards/lfkeyboards/lfk78/keymaps/ca178858/readme.md new file mode 100644 index 000000000000..85b7b1a8d281 --- /dev/null +++ b/keyboards/lfkeyboards/lfk78/keymaps/ca178858/readme.md @@ -0,0 +1 @@ +# The default keymap for bluepad diff --git a/keyboards/lfkeyboards/lfk78/keymaps/ca178858/rules.mk b/keyboards/lfkeyboards/lfk78/keymaps/ca178858/rules.mk new file mode 100644 index 000000000000..732bfcfa8f58 --- /dev/null +++ b/keyboards/lfkeyboards/lfk78/keymaps/ca178858/rules.mk @@ -0,0 +1,3 @@ +AUDIO_ENABLE = no +TAP_DANCE_ENABLE = yes +WATCHDOG_ENABLE = yes # Resets keyboard if matrix_scan isn't run every 250ms diff --git a/keyboards/lfkeyboards/lfk87/keymaps/ca178858/keymap.c b/keyboards/lfkeyboards/lfk87/keymaps/ca178858/keymap.c new file mode 100644 index 000000000000..3be46837c1d7 --- /dev/null +++ b/keyboards/lfkeyboards/lfk87/keymaps/ca178858/keymap.c @@ -0,0 +1,170 @@ +#include QMK_KEYBOARD_H + +enum keymap_layout { + VANILLA = 0, // matches MF68 layout + DEFAULT_WKL, // 0x02 Function in CapsLock location, gui key disabled + DEFAULT_OSX, // 0x04 Function in CapsLock location, gui/alt swapped for OSX + CS_GO, // 0x08 Function in CapsLock location, gui/alt swapped for OSX + FUNC, // 0x10 + SETTINGS, // 0x20 +}; + +enum { + TD_ESC_FUNC = 0, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap VANILLA: (Base Layer) Default Layer + * ,-----------------------------------------------------------------------------. + * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus| + * |-----------------------------------------------------------| |--------------| + * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp| + * |-----------------------------------------------------------| |--------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn| + * |-----------------------------------------------------------| `--------------' + * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return | + * |-----------------------------------------------------------| ,----. + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up | + * |-----------------------------------------------------------| ,-------------. + * |Ctrl|Gui |Alt | Space |ALT |GUI |CTRL |Func| |Lft| Dn |Rig | + * `-----------------------------------------------------------' `-------------' + */ + [VANILLA] = LAYOUT_tkl_ansi( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), MO(SETTINGS), KC_LEFT, KC_DOWN, KC_RGHT + ), + + /* Keymap DEFAULT_TKL: (Base Layer) Default Layer + * ,-----------------------------------------------------------------------------. + * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus| + * |-----------------------------------------------------------| |--------------| + * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp| + * |-----------------------------------------------------------| |--------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn| + * |-----------------------------------------------------------| `--------------' + * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return | + * |-----------------------------------------------------------| ,----. + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up | + * |-----------------------------------------------------------| ,-------------. + * |Ctrl| |Alt | Space |ALT | |CTRL |Func| |Lft| Dn |Rig | + * `-----------------------------------------------------------' `-------------' + */ + [DEFAULT_WKL] = LAYOUT_tkl_ansi( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT + ), + + /* Keymap DEFAULT_OSX: (Base Layer) Default Layer + * ,-----------------------------------------------------------------------------. + * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus| + * |-----------------------------------------------------------| |--------------| + * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp| + * |-----------------------------------------------------------| |--------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn| + * |-----------------------------------------------------------| `--------------' + * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return | + * |-----------------------------------------------------------| ,----. + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up | + * |-----------------------------------------------------------| ,-------------. + * |Ctrl| Opt |Cmd | Space |Cmd |Opt |CTRL |Func| |Lft| Dn |Rig | + * `-----------------------------------------------------------' `-------------' + */ + [DEFAULT_OSX] = LAYOUT_tkl_ansi( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_SCRL, KC_PAUS, LALT(KC_F5), + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, + TD(TD_ESC_FUNC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), MO(SETTINGS), KC_LEFT, KC_DOWN, KC_RGHT + ), + + [CS_GO] = LAYOUT_tkl_ansi( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_LCTL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + /* Keymap FUNCTION: Function Layer + * ,-------------------------------------------------------------. ,--------------. + * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus| + * |-------------------------------------------------------------| |--------------| + * | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | | | | + * |-------------------------------------------------------------| |--------------| + * |Tab | |PgU| | | | | | Up| | | | | | | | | | + * |-------------------------------------------------------------| `--------------' + * |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | | + * |-------------------------------------------------------------| ,----. + * |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up | + * |-------------------------------------------------------------' ,-------------. + * |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig | + * `------------------------------------------------------' `-------------' + */ + [FUNC] = LAYOUT_tkl_ansi( + KC_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, TO(CS_GO), _______, _______, + XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, + _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, + _______, XXXXXXX, KC_DEL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), _______, + _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______, _______ + ), + + /* Keymap SETTINGS: Settings Layer + * ,-----------------------------------------------------------. ,-------------. + * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus| + * |-------------------------------------------------------------| |--------------| + * |LayClr| | | | | | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+| + * |-----------------------------------------------------------| |-------------| + * |Debug| | | | | | | | | | | | |LEDTst| |RGB Mode|Val-| + * |-----------------------------------------------------------| `-------------' + * |AU_TOGG|Hz+|MS+| | | | | | | | | | RST | + * |-----------------------------------------------------------| ,----. + * |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+| + * |------------------------------------------------------------------------. + * | | | | Print Debug | | | | |Sat-|Hue-|Sat+| + * `------------------------------------------------------' `--------------' + */ + [SETTINGS] = LAYOUT_tkl_ansi( + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DOWN, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DOWN, BL_UP, BL_TOGG, RGB_TOG, RGB_VAI, XXXXXXX, + MU_NEXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_VAD, XXXXXXX, + AU_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, RGB_SAD, RGB_HUD, RGB_SAI + ) +}; + +void tap_esc_func_finished(tap_dance_state_t *state, void *user_data) { + if (state->pressed) { + layer_on(FUNC); + } else { + tap_code(KC_ESC); + } +} + +void tap_esc_func_reset(tap_dance_state_t *state, void *user_data) { + layer_off(FUNC); +} + +tap_dance_action_t tap_dance_actions[] = { + [TD_ESC_FUNC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_esc_func_finished, tap_esc_func_reset), +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if ((layer_state & (1 << CS_GO)) && (keycode == 44)) { + if (get_mods() & (MOD_BIT(KC_LGUI))) { + return false; + } + } + return true; +} diff --git a/keyboards/lfkeyboards/lfk87/keymaps/ca178858/readme.md b/keyboards/lfkeyboards/lfk87/keymaps/ca178858/readme.md new file mode 100644 index 000000000000..56742f3b282c --- /dev/null +++ b/keyboards/lfkeyboards/lfk87/keymaps/ca178858/readme.md @@ -0,0 +1 @@ +# The default keymap for LFK87 diff --git a/keyboards/lfkeyboards/lfk87/keymaps/ca178858/rules.mk b/keyboards/lfkeyboards/lfk87/keymaps/ca178858/rules.mk new file mode 100644 index 000000000000..eb12c33f4a36 --- /dev/null +++ b/keyboards/lfkeyboards/lfk87/keymaps/ca178858/rules.mk @@ -0,0 +1,2 @@ +TAP_DANCE_ENABLE = yes +WATCHDOG_ENABLE = yes # Resets keyboard if matrix_scan isn't run every 250ms diff --git a/keyboards/lfkeyboards/mini1800/keymaps/ca178858/keymap.c b/keyboards/lfkeyboards/mini1800/keymaps/ca178858/keymap.c new file mode 100644 index 000000000000..9e3927f54578 --- /dev/null +++ b/keyboards/lfkeyboards/mini1800/keymaps/ca178858/keymap.c @@ -0,0 +1,108 @@ +#include QMK_KEYBOARD_H + +enum keymap_layout { + VANILLA = 0, // matches MF68 layout + FUNC, // 0x08 + SETTINGS, // 0x10 +}; + +enum { + TD_ESC_FUNC = 0, + TD_ESC_CTRL, + TD_SPC_SPAM +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap VANILLA: (Base Layer) Default Layer + * ,-----------------------------------------------------------------------------. + * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus| + * |-----------------------------------------------------------| |--------------| + * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp| + * |-----------------------------------------------------------| |--------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn| + * |-----------------------------------------------------------| `--------------' + * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return | + * |-----------------------------------------------------------| ,----. + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up | + * |-----------------------------------------------------------| ,-------------. + * |Ctrl|Gui |Alt | Space |ALT |GUI |Func|CTRL | |Lft| Dn |Rig | + * `-----------------------------------------------------------' `-------------' + */ + [VANILLA] = LAYOUT( + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS, + TD(TD_ESC_FUNC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, LALT(KC_F5), + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT + ), + + /* Keymap FUNCTION: Function Layer + * ,-------------------------------------------------------------. ,--------------. + * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus| + * |-------------------------------------------------------------| |--------------| + * | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | | | | + * |-------------------------------------------------------------| |--------------| + * |Tab | |PgU| | | | | | Up| | | | | | | | | | + * |-------------------------------------------------------------| `--------------' + * |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | | + * |-------------------------------------------------------------| ,----. + * |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up | + * |-------------------------------------------------------------' ,-------------. + * |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig | + * `------------------------------------------------------' `-------------' + */ + [FUNC] = LAYOUT( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______, _______, _______, _______, + XXXXXXX, KC_HOME, KC_UP, KC_END, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, + _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, + _______, XXXXXXX, KC_DEL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, TG(SETTINGS), _______, _______, _______, _______, _______, + _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + /* Keymap SETTINGS: Settings Layer + * ,-----------------------------------------------------------. ,-------------. + * |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus| + * |-------------------------------------------------------------| |--------------| + * |FN0 | | | | | | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+| + * |-----------------------------------------------------------| |-------------| + * |MuMode| | | | | | | | | | | | |LEDTst| |RGB Mode|Val-| + * |-----------------------------------------------------------| `-------------' + * |AudTgl |Hz+|MS+| | | | | | | | | | RST | + * |-----------------------------------------------------------| ,----. + * |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+| + * |--------------------------------------------------------------------------. + * | | | | | | | | | |Sat-|Hue-|Sat+| + * `----------------------------------------------------------------------------' + */ + [SETTINGS] = LAYOUT( + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DOWN, BL_UP, BL_TOGG, RGB_TOG, RGB_VAI, XXXXXXX, XXXXXXX, + MU_NEXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_VAD, XXXXXXX, XXXXXXX, + AU_TOGG, KC_F1, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SAD, RGB_HUD, RGB_SAI, XXXXXXX, XXXXXXX + ) +}; + +void tap_esc_func_finished(tap_dance_state_t *state, void *user_data) { + if (state->pressed) { + layer_on(FUNC); + } else { + tap_code(KC_ESC); + } +} + +void tap_esc_func_reset(tap_dance_state_t *state, void *user_data) { + layer_off(FUNC); +} + +tap_dance_action_t tap_dance_actions[] = { + [TD_ESC_FUNC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_esc_func_finished, tap_esc_func_reset), +}; + +void matrix_init_user(void) { + // This keymap only has a single base layer, so reset the default if needed + if (eeconfig_read_default_layer() > 1) { + eeconfig_update_default_layer(1); + default_layer_set(1); + } +} diff --git a/keyboards/lfkeyboards/mini1800/keymaps/ca178858/rules.mk b/keyboards/lfkeyboards/mini1800/keymaps/ca178858/rules.mk new file mode 100644 index 000000000000..e5ddcae8d927 --- /dev/null +++ b/keyboards/lfkeyboards/mini1800/keymaps/ca178858/rules.mk @@ -0,0 +1 @@ +TAP_DANCE_ENABLE = yes diff --git a/keyboards/mechwild/mercutio/keymaps/fearless_spiff/config.h b/keyboards/mechwild/mercutio/keymaps/fearless_spiff/config.h new file mode 100644 index 000000000000..f29c91f9e000 --- /dev/null +++ b/keyboards/mechwild/mercutio/keymaps/fearless_spiff/config.h @@ -0,0 +1,28 @@ +/* Copyright 2022 Fearless Spiff + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#define TAPPING_TERM 180 + +#define MK_KINETIC_SPEED +#define MOUSEKEY_DELAY 8 +#define MOUSEKEY_INTERVAL 5 +#define MOUSEKEY_MOVE_DELTA 1 +#define MOUSEKEY_INITIAL_SPEED 3 +#define MOUSEKEY_BASE_SPEED 120 +#define MOUSEKEY_DECELERATED_SPEED 100 +#define MOUSEKEY_ACCELERATED_SPEED 1000 diff --git a/keyboards/mechwild/mercutio/keymaps/fearless_spiff/keymap.c b/keyboards/mechwild/mercutio/keymaps/fearless_spiff/keymap.c new file mode 100644 index 000000000000..76438f9dc3b9 --- /dev/null +++ b/keyboards/mechwild/mercutio/keymaps/fearless_spiff/keymap.c @@ -0,0 +1,301 @@ +/* Copyright 2021 Kyle McCreery + * Copyright 2021 Jonavin Eng + * Copyright 2022 Fearless Spiff + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H +#include "keymap_german.h" + +// OLED setup for bongocat +#define IDLE_FRAMES 5 +#define IDLE_SPEED 30 +#define TAP_FRAMES 2 +#define TAP_SPEED 40 +#define ANIM_FRAME_DURATION 200 +#define ANIM_SIZE 512 + +#define LABEL_LENGTH 8 + +#define KC_CAD LALT(LCTL(KC_DEL)) +#define KC_TEAMS_CAM C(S(KC_O)) +#define KC_TEAMS_MUTE C(S(KC_M)) + +enum layers { + QWERT, + FN_1, + FN_2, + FN_MOUSE +}; + +enum custom_user_keycodes { + KC_ENC = SAFE_RANGE +}; + +static long int oled_timeout = 1800000; // 30 minutes +bool gui_on = true; +char wpm_str[10]; +uint32_t anim_timer = 0; +uint32_t anim_sleep = 0; +uint8_t current_idle_frame = 0; +uint8_t current_tap_frame = 0; + +// Tap Dance declarations +enum { + TD_TAB_ESC, +}; + +// Tap Dance definitions +tap_dance_action_t tap_dance_actions[] = { + // Tap once for Tab, twice for Esc + [TD_TAB_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_TAB, KC_ESC), +}; + +typedef struct { + char label_top[LABEL_LENGTH]; + char label_mid[LABEL_LENGTH]; + char label_bottom[LABEL_LENGTH]; + uint16_t keycode; +} encoder_key; + +static const encoder_key PROGMEM encoder_keys[] = { + // list of key codes that will be scrolled through by encoder and description + // Be aware that it only works when using one char less than defined. In this case 7 max. No idea why? + {"Teams", "Toggle", "Mic", KC_TEAMS_MUTE}, + {"Teams", "Toggle", "Cam", KC_TEAMS_CAM}, + {"Ctrl", "Alt", "Del", KC_CAD}, + {"Caps", "Lock", "", KC_CAPS_LOCK}, + {"Pause", "", "", KC_PAUSE}, + {"PrtScr", "", "", KC_PSCR}, + {"Insert", "", "", KC_INS}, + {"Play", "", "", KC_MEDIA_PLAY_PAUSE} +}; + +#define NUMBER_OF_ENCODER_KEYS ARRAY_SIZE(encoder_keys) + +static uint8_t selected_encoder_key_id = 0; +static encoder_key selected_encoder_key; + +static void set_selected_encoder_key(uint8_t idx) { + // make a copy from PROGMEM + memcpy_P (&selected_encoder_key, &encoder_keys[idx], sizeof selected_encoder_key); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_ENC: + if (record->event.pressed) { + tap_code16(selected_encoder_key.keycode); + } + break; + } + return true; +} + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [QWERT] = LAYOUT_all( + KC_ENC, + TD(TD_TAB_ESC), KC_Q, KC_W, KC_E, KC_R, KC_T, DE_Z, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + MO(FN_1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, DE_PLUS, KC_ENT, + KC_LSFT, DE_LABK, DE_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, LT(FN_2,KC_SPC), LT(FN_2,KC_SPC), LT(FN_2,KC_SPC), KC_RALT, DE_MINS, KC_RCTL ), + + [FN_1] = LAYOUT_all( + KC_MUTE, + QK_GESC, _______, _______, _______, DE_LCBR, DE_RCBR, _______, DE_UDIA, KC_UP, DE_ODIA, DE_QUES, KC_DEL, + _______, DE_ADIA, DE_SS, _______, DE_LPRN, DE_RPRN, _______, KC_LEFT, KC_DOWN, KC_RIGHT, DE_HASH, _______, + _______, _______, DE_CIRC, DE_ACUT, _______, DE_LBRC, DE_RBRC, KC_HOME, KC_END, DE_QUOT, DE_DQUO, DE_EQL, + _______, _______, _______, MO(FN_MOUSE), MO(FN_MOUSE), MO(FN_MOUSE), DE_BSLS, DE_SLSH, DE_TILD ), + + [FN_2] = LAYOUT_all( + _______, + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_BSPC, + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_COMM, KC_DOT, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______ ), + + [FN_MOUSE] = LAYOUT_all( + _______, + _______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_MS_U, KC_BTN2, KC_BTN3, _______, + _______, _______, _______, _______, KC_ACL0, _______, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______ ) +}; + +#ifdef ENCODER_ENABLE + bool encoder_update_user(uint8_t index, bool clockwise) { + if (clockwise) { + if (IS_LAYER_ON(QWERT) && selected_encoder_key_id < NUMBER_OF_ENCODER_KEYS-1) { + selected_encoder_key_id ++; + set_selected_encoder_key(selected_encoder_key_id); + } + if (IS_LAYER_ON(FN_1)) { + tap_code16(KC_PGDN); + } + if (IS_LAYER_ON(FN_2)) { + tap_code(KC_VOLU); + } + } else { + if (IS_LAYER_ON(QWERT) && selected_encoder_key_id > 0) { + selected_encoder_key_id --; + set_selected_encoder_key(selected_encoder_key_id); + } + if (IS_LAYER_ON(FN_1)) { + tap_code16(KC_PGUP); + } + if (IS_LAYER_ON(FN_2)) { + tap_code(KC_VOLD); + } + } + return false; + } +#endif + +#ifdef OLED_ENABLE + oled_rotation_t oled_init_user(oled_rotation_t rotation) { + set_selected_encoder_key(selected_encoder_key_id); + + return OLED_ROTATION_180; // flips the display 180 degrees + } + + static void render_anim(void) { + + // Idle animation + static const char PROGMEM idle[IDLE_FRAMES][ANIM_SIZE] = { + + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,16,8,8,4,4,4,8,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,100,130,2,2,2,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64, + 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,56,4,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,7, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + }, + + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,16,8,8,4,4,4,8,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,100,130,2,2,2,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64, + 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,56,4,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8, + 7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + }, + + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,64,64,64,64,32,32,32,32,16,8,4,2,2,4,24,96,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,194,1,1,2,2,4,4,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,96,0,129,130,130,132,8,16,32,64,128,0,0,0,0,128,128,128,128,64,64,64,64,32, + 32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,25,6,0,0,0,0,0,0,0,24,24,24,27,3,0,64,160,34,36,20,18,18,18,11,8,8,8,8,5,5,9,9,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,7,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + }, + + { + 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64, + 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8, + 7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + }, + + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,8,4,2,2,2,4,56,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,226,1,1,2,2,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64,64,64, + 32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,7,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + } + + }; + + // Prep animation + static const char PROGMEM prep[][ANIM_SIZE] = { + + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,129,128,128,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,0,1,225,26,6,9,49,53,1,138,124,0,0,128,128,128,128,64,64, + 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,24,6,5,152,153,132,195,124,65,65,64,64,32,33,34,18,17,17,17,9,8,8,8,8,4,4,4,4,4,4,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + } + + }; + + // Typing animation + static const char PROGMEM tap[TAP_FRAMES][ANIM_SIZE] = { + + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,248,248,248,248,0,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,129,128,128,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,0,1,1,2,4,8,16,32,67,135,7,1,0,184,188,190,159, + 95,95,79,76,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,24,6,5,152,153,132,67,124,65,65,64,64,32,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,61,124,252,252,252,252,252,60,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1, + 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + }, + + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,0,1,225,26,6,9,49,53,1,138,124,0,0,128,128,128,128,64,64,64,64,32, + 32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,0,0,0,0,0,0,0,0,1,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,4,4,4,4,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,122,122,121,121,121,121,57,49,2,2,4,4,8,8,8,136,136,135,128, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + } + + }; + + void animation_phase(void) { + if (get_current_wpm() <= IDLE_SPEED) { + current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES; + oled_write_raw_P(idle[abs((IDLE_FRAMES-1)-current_idle_frame)], ANIM_SIZE); + } + + if (get_current_wpm() > IDLE_SPEED && get_current_wpm() < TAP_SPEED) { + oled_write_raw_P(prep[0], ANIM_SIZE); + } + + if (get_current_wpm() >= TAP_SPEED) { + current_tap_frame = (current_tap_frame + 1) % TAP_FRAMES; + oled_write_raw_P(tap[abs((TAP_FRAMES-1)-current_tap_frame)], ANIM_SIZE); + } + } + + if (get_current_wpm() != 000) { + oled_on(); + + if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { + anim_timer = timer_read32(); + animation_phase(); + } + + anim_sleep = timer_read32(); + } else { + if (timer_elapsed32(anim_sleep) > oled_timeout) { + oled_off(); + } else { + if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { + anim_timer = timer_read32(); + animation_phase(); + } + } + } + } + + bool oled_task_user(void) { + + render_anim(); + + oled_set_cursor(0,0); + oled_write(selected_encoder_key.label_top, false); + + oled_set_cursor(0,1); + oled_write(selected_encoder_key.label_mid, false); + + oled_set_cursor(0,2); + oled_write(selected_encoder_key.label_bottom, false); + + /* hide wpm display for now + oled_set_cursor(13,3); + oled_write_P(PSTR("WPM: "), false); + oled_write(get_u8_str(get_current_wpm(), ' '), false); + */ + + return false; + } + + void suspend_power_down_user(void) { + oled_off(); + } +#endif diff --git a/keyboards/mechwild/mercutio/keymaps/fearless_spiff/readme.md b/keyboards/mechwild/mercutio/keymaps/fearless_spiff/readme.md new file mode 100644 index 000000000000..85b3490608a7 --- /dev/null +++ b/keyboards/mechwild/mercutio/keymaps/fearless_spiff/readme.md @@ -0,0 +1,29 @@ +Fearless Spiff's Custom Mercutio Keymap + - "Programmer"-centric and German layout based keymap + - Based on Bongocat and Jonavin keymap + +Features + - Fancy Bongocat! Yay! (borrowed from bongocat obviously) + - Encoder selectable key codes and displayed on OLED (borrowed and multi-line-enhanced from Jonavin) + - Change encoder_keys in keymap.c to assign your desired key selection + - Additional encoder functionality + - While holding FN_1, page up and down + - While holding FN_2, volume up and down + - Mouse controls by holding Caps-Space + - Use my templates for your own layout overview at [Keyboard Layout Editor](http://www.keyboard-layout-editor.com) using my gist [here](https://gist.github.com/FearlessSpiff) + - Shout out to [KMonad](https://github.com/kmonad/kmonad) which enabled my laptop keyboard to behave like my Mercutio! + +QWERT Layer +![image](https://user-images.githubusercontent.com/1927259/148683284-04932e15-a34d-451e-b657-335780033f36.png) + +FN_1 Layer +![image](https://user-images.githubusercontent.com/1927259/157032746-8aa68e1c-27b9-4cf5-88ed-a071d8238f56.png) + +FN_2 layer +![image](https://user-images.githubusercontent.com/1927259/148683306-364bc59c-b41b-4092-b93b-d7b4fc58567b.png) + +FN_MOUSE layer +![image](https://user-images.githubusercontent.com/1927259/157032817-83922578-8932-42bf-a2d2-f785136b4d4e.png) + + + diff --git a/keyboards/mechwild/mercutio/keymaps/fearless_spiff/rules.mk b/keyboards/mechwild/mercutio/keymaps/fearless_spiff/rules.mk new file mode 100644 index 000000000000..fc0ec2815382 --- /dev/null +++ b/keyboards/mechwild/mercutio/keymaps/fearless_spiff/rules.mk @@ -0,0 +1,7 @@ +WPM_ENABLE = yes +TAP_DANCE_ENABLE = yes +VIA_ENABLE = no +MOUSEKEY_ENABLE = yes +EXTRAKEY_ENABLE = yes # Audio control and System control +KEY_LOCK_ENABLE = no +CONSOLE_ENABLE = no diff --git a/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/config.h b/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/config.h new file mode 100644 index 000000000000..9d588ed8c08f --- /dev/null +++ b/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/config.h @@ -0,0 +1,19 @@ +/* Copyright 2022 Fearless Spiff + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#define TAPPING_TERM 180 diff --git a/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/keymap.c b/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/keymap.c new file mode 100644 index 000000000000..c79c00a707f5 --- /dev/null +++ b/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/keymap.c @@ -0,0 +1,293 @@ +/* Copyright 2021 Kyle McCreery + * Copyright 2021 Jonavin Eng + * Copyright 2022 Fearless Spiff + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H +#include "keymap_german.h" + +// OLED setup for bongocat +#define IDLE_FRAMES 5 +#define IDLE_SPEED 30 +#define TAP_FRAMES 2 +#define TAP_SPEED 40 +#define ANIM_FRAME_DURATION 200 +#define ANIM_SIZE 512 + +#define LABEL_LENGTH 8 + +#define KC_CAD LALT(LCTL(KC_DEL)) +#define KC_TEAMS_CAM C(S(KC_O)) +#define KC_TEAMS_MUTE C(S(KC_M)) + +enum layers { + QWERT, + FN_1, + FN_2 +}; + +enum custom_user_keycodes { + KC_ENC = SAFE_RANGE +}; + +static long int oled_timeout = 1800000; // 30 minutes +bool gui_on = true; +char wpm_str[10]; +uint32_t anim_timer = 0; +uint32_t anim_sleep = 0; +uint8_t current_idle_frame = 0; +uint8_t current_tap_frame = 0; + +// Tap Dance declarations +enum { + TD_TAB_ESC, +}; + +// Tap Dance definitions +tap_dance_action_t tap_dance_actions[] = { + // Tap once for Tab, twice for Esc + [TD_TAB_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_TAB, KC_ESC), +}; + +typedef struct { + char label_top[LABEL_LENGTH]; + char label_mid[LABEL_LENGTH]; + char label_bottom[LABEL_LENGTH]; + uint16_t keycode; +} encoder_key; + +static const encoder_key PROGMEM encoder_keys[] = { + // list of key codes that will be scrolled through by encoder and description + // Be aware that it only works when using one char less than defined. In this case 7 max. No idea why? + {"Teams", "Toggle", "Mic", KC_TEAMS_MUTE}, + {"Teams", "Toggle", "Cam", KC_TEAMS_CAM}, + {"Ctrl", "Alt", "Del", KC_CAD}, + {"Caps", "Lock", "", KC_CAPS_LOCK}, + {"Pause", "", "", KC_PAUSE}, + {"PrtScr", "", "", KC_PSCR}, + {"Insert", "", "", KC_INS}, + {"Play", "", "", KC_MEDIA_PLAY_PAUSE} +}; + +#define NUMBER_OF_ENCODER_KEYS ARRAY_SIZE(encoder_keys) + +static uint8_t selected_encoder_key_id = 0; +static encoder_key selected_encoder_key; + +static void set_selected_encoder_key(uint8_t idx) { + // make a copy from PROGMEM + memcpy_P (&selected_encoder_key, &encoder_keys[idx], sizeof selected_encoder_key); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_ENC: + if (record->event.pressed) { + tap_code16(selected_encoder_key.keycode); + } + break; + } + return true; +} + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [QWERT] = LAYOUT_all( + KC_ENC, + TD(TD_TAB_ESC), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + LT(1,KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_PLUS, KC_ENT, + KC_LSFT, KC_LABK, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, + KC_LCTL, KC_LGUI, LT(2,KC_LALT), KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(2), KC_RCTL ), + + [FN_1] = LAYOUT_all( + KC_MUTE, + QK_GESC, _______, KC_UP, _______, KC_LCBR, KC_RCBR, _______, _______, KC_UP, _______, KC_QUES, KC_DEL, + _______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_LPRN, KC_RPRN, KC_QUES, KC_LEFT, KC_DOWN, KC_LABK, KC_RABK, _______, + _______, KC_BSLS, KC_SLSH, KC_PIPE, _______, KC_LBRC, KC_RBRC, KC_HOME, KC_END, KC_QUOT, KC_DQUO, KC_EQL, + _______, _______, _______, _______, _______, _______, KC_BSLS, KC_SLSH, KC_TILD ), + + [FN_2] = LAYOUT_all( + _______, + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_AMPR, KC_PERC, KC_ASTR, KC_LPRN, KC_RPRN, _______, _______, + _______, _______, KC_MINS, KC_PLUS, KC_BSLS, KC_SLSH, KC_SCLN, KC_COLN, KC_QUES, KC_LBRC, KC_RBRC, KC_DOT, + KC_DQUO, KC_QUOT, KC_DQUO, _______, _______, _______, _______, _______, KC_PIPE ) +}; + +#ifdef ENCODER_ENABLE + bool encoder_update_user(uint8_t index, bool clockwise) { + if (clockwise) { + if (IS_LAYER_ON(QWERT) && selected_encoder_key_id < NUMBER_OF_ENCODER_KEYS-1) { + selected_encoder_key_id ++; + set_selected_encoder_key(selected_encoder_key_id); + } + if (IS_LAYER_ON(FN_1)) { + tap_code16(KC_PGDN); + } + if (IS_LAYER_ON(FN_2)) { + tap_code(KC_VOLU); + } + } else { + if (IS_LAYER_ON(QWERT) && selected_encoder_key_id > 0) { + selected_encoder_key_id --; + set_selected_encoder_key(selected_encoder_key_id); + } + if (IS_LAYER_ON(FN_1)) { + tap_code16(KC_PGUP); + } + if (IS_LAYER_ON(FN_2)) { + tap_code(KC_VOLD); + } + } + return false; + } +#endif + +#ifdef OLED_ENABLE + oled_rotation_t oled_init_user(oled_rotation_t rotation) { + set_selected_encoder_key(selected_encoder_key_id); + + return OLED_ROTATION_180; // flips the display 180 degrees + } + + static void render_anim(void) { + + // Idle animation + static const char PROGMEM idle[IDLE_FRAMES][ANIM_SIZE] = { + + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,16,8,8,4,4,4,8,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,100,130,2,2,2,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64, + 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,56,4,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,7, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + }, + + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,16,8,8,4,4,4,8,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,100,130,2,2,2,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64, + 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,56,4,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8, + 7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + }, + + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,64,64,64,64,32,32,32,32,16,8,4,2,2,4,24,96,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,194,1,1,2,2,4,4,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,96,0,129,130,130,132,8,16,32,64,128,0,0,0,0,128,128,128,128,64,64,64,64,32, + 32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,25,6,0,0,0,0,0,0,0,24,24,24,27,3,0,64,160,34,36,20,18,18,18,11,8,8,8,8,5,5,9,9,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,7,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + }, + + { + 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64, + 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8, + 7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + }, + + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,8,4,2,2,2,4,56,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,226,1,1,2,2,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,192,193,193,194,4,8,16,32,64,128,0,0,0,128,128,128,128,64,64,64,64, + 32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,0,0,0,0,0,12,12,12,13,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,2,2,4,4,8,8,8,8,8,7,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + } + + }; + + // Prep animation + static const char PROGMEM prep[][ANIM_SIZE] = { + + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,129,128,128,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,0,1,225,26,6,9,49,53,1,138,124,0,0,128,128,128,128,64,64, + 64,64,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,24,6,5,152,153,132,195,124,65,65,64,64,32,33,34,18,17,17,17,9,8,8,8,8,4,4,4,4,4,4,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + } + + }; + + // Typing animation + static const char PROGMEM tap[TAP_FRAMES][ANIM_SIZE] = { + + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,248,248,248,248,0,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,129,128,128,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,0,1,1,2,4,8,16,32,67,135,7,1,0,184,188,190,159, + 95,95,79,76,32,32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,24,6,5,152,153,132,67,124,65,65,64,64,32,33,34,18,17,17,17,9,8,8,8,8,4,4,8,8,16,16,16,16,16,17,15,1,61,124,252,252,252,252,252,60,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,2,2,1,1,1, + 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + }, + + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,0,0,0,0,0,128,64,64,32,32,32,32,16,16,16,16,8,4,2,1,1,2,12,48,64,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,225,0,0,1,1,2,2,1,0,0,0,0,128,128,0,0,0,0,0,0,0,0,0,128,0,48,48,0,0,1,225,26,6,9,49,53,1,138,124,0,0,128,128,128,128,64,64,64,64,32, + 32,32,32,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,112,12,3,0,0,0,0,0,0,0,0,0,0,1,1,0,64,160,33,34,18,17,17,17,9,8,8,8,8,4,4,4,4,4,4,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,128,128,128,64,64,64,64,64,32,32,32,32,32,16,16,16,16,16,8,8,8,8,8,4,4,4,4,4,2,3,122,122,121,121,121,121,57,49,2,2,4,4,8,8,8,136,136,135,128, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + } + + }; + + void animation_phase(void) { + if (get_current_wpm() <= IDLE_SPEED) { + current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES; + oled_write_raw_P(idle[abs((IDLE_FRAMES-1)-current_idle_frame)], ANIM_SIZE); + } + + if (get_current_wpm() > IDLE_SPEED && get_current_wpm() < TAP_SPEED) { + oled_write_raw_P(prep[0], ANIM_SIZE); + } + + if (get_current_wpm() >= TAP_SPEED) { + current_tap_frame = (current_tap_frame + 1) % TAP_FRAMES; + oled_write_raw_P(tap[abs((TAP_FRAMES-1)-current_tap_frame)], ANIM_SIZE); + } + } + + if (get_current_wpm() != 000) { + oled_on(); + + if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { + anim_timer = timer_read32(); + animation_phase(); + } + + anim_sleep = timer_read32(); + } else { + if (timer_elapsed32(anim_sleep) > oled_timeout) { + oled_off(); + } else { + if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { + anim_timer = timer_read32(); + animation_phase(); + } + } + } + } + + bool oled_task_user(void) { + + render_anim(); + + oled_set_cursor(0,0); + oled_write(selected_encoder_key.label_top, false); + + oled_set_cursor(0,1); + oled_write(selected_encoder_key.label_mid, false); + + oled_set_cursor(0,2); + oled_write(selected_encoder_key.label_bottom, false); + + /* hide wpm display for now + oled_set_cursor(13,3); + oled_write_P(PSTR("WPM: "), false); + oled_write(get_u8_str(get_current_wpm(), ' '), false); + */ + + return false; + } + + void suspend_power_down_user(void) { + oled_off(); + } +#endif diff --git a/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/readme.md b/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/readme.md new file mode 100644 index 000000000000..dea71bf358ce --- /dev/null +++ b/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/readme.md @@ -0,0 +1,22 @@ +Fearless Spiff's Custom Mercutio Keymap + - "Programmer"-centric and German layout based keymap + - Based on Bongocat and Jonavin keymap + +Features + - Fancy Bongocat! Yay! (borrowed from bongocat obviously) + - Encoder selectable key codes and displayed on OLED (borrowed and multi-line-enhanced from Jonavin) + - Change encoder_keys in keymap.c to assign your desired key selection + - Additional encoder functionality + - While holding FN_1, page up and down + - While holding FN_2, volume up and down + - Use my templates for your own layout overview at [Keyboard Layout Editor](http://www.keyboard-layout-editor.com) using my gist [here](https://gist.github.com/FearlessSpiff) + +QWERT Layer +![image](https://user-images.githubusercontent.com/1927259/148683284-04932e15-a34d-451e-b657-335780033f36.png) + +FN_1 Layer +![image](https://user-images.githubusercontent.com/1927259/148683299-f2c80403-3f29-4ba8-9fc4-957729f30b05.png) + +FN_2 layer +![image](https://user-images.githubusercontent.com/1927259/148683306-364bc59c-b41b-4092-b93b-d7b4fc58567b.png) + diff --git a/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/rules.mk b/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/rules.mk new file mode 100644 index 000000000000..4775e0e11d0a --- /dev/null +++ b/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/rules.mk @@ -0,0 +1,3 @@ +WPM_ENABLE = yes +TAP_DANCE_ENABLE = yes +MOUSEKEY_ENABLE = no diff --git a/keyboards/mehkee96/keymaps/johann/keymap.c b/keyboards/mehkee96/keymaps/johann/keymap.c new file mode 100644 index 000000000000..30fdb742c412 --- /dev/null +++ b/keyboards/mehkee96/keymaps/johann/keymap.c @@ -0,0 +1,80 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Layer 0, default layer +____________________________________________________________________________________________________________________________________________________________________________ +| | | | | | | | | | | | | | | | | | | | +| ESC* | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | P SCN | HOME | DEL | INSERT | P Up | P Down | +|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________| +| | | | | | | | | | | | | | | BACK | NUM | | | Play | +| ~` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | _ - | = + | \ | SPACE | LOCK | / | * | Pause | +|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________| +| | | | | | | | | | | | [ | ] | | | | | | +| TAB | Q | W | E | R | T | Y | U | I | O | P | { | } | | \ | 7 | 8 | 9 | Next | +|____________|________|________|________|________|________|________|________|________|________|________|________|________|_____________|________|________|________|________| +| | | | | | | | | | | ; | ' | | | | | | +| CAPS LOCK | A | S | D | F | G | H | J | K | L | : | " | ENTER | 4 | 5 | 6 | - | +|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________| +| | | | | | | | | , | . | / | | | | | | | +| SHIFT | Z | X | C | V | B | N | M | < | > | ? | SHIFT | UP | 1 | 2 | 3 | + | +|__________________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________|________| +| | | | | | | MO | | | | | | | +| CTRL | LGUI | L ALT | SPACE | R ALT | RGUI | _FN | LEFT | DOWN | RIGHT | 0 | . | ENTER | +|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________| +*/ + + + + LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_HOME, KC_DEL, KC_INS, KC_PGUP, KC_PGDN, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NUM, KC_PSLS, KC_PAST, KC_MPLY, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_MNXT, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PMNS, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PPLS, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + + + + /* Layer 1, function layer +____________________________________________________________________________________________________________________________________________________________________________ +| | | | | | | | | | | | | | | VOL | VOL | | | | +| QK_BOOT | | | | | | | | | | | | | MUTE | DOWN | UP | | | | +|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________| +| | | | | | | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | | | | | | +|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________| +| | RGB | | RGB | HUE | HUE | SATUR. | SATUR. | VALUE | VALUE | | | | | | | | | +| | TOGGLE | | MODE |INCREASE| DCRSE |INCREASE| DCRSE |INCREASE| DCRSE | | | | | | | | | +|____________|________|________|________|________|________|________|________|________|________|________|________|________|_____________|________|________|________|________| +| BACKLIGHT | | | | | | | | | | | | | | | | | +| TOGGLE | | | | | | | | | | | | | | | | | +|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________| +| | | | |BACKLHT |BACKLHT |BACKLHT | | | | | | | | | | | | +| | | | | DCRSE |TOGGLE |INCREASE| | | | | | | | | | | | +|_________|________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________|________| +| | | | | | | | | | | | | | +| | | | | | | | | | | | | | +|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________| +BL_TOGG, BL_DOWN,BL_UP changes the in-switch LEDs +*/ + + + LAYOUT( + QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_TOG, _______, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, + BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______ , _______, _______, BL_DOWN, BL_TOGG, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), +}; + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} diff --git a/keyboards/minimacro5/keymaps/kabraxcis/keymap.c b/keyboards/minimacro5/keymaps/kabraxcis/keymap.c new file mode 100644 index 000000000000..6b7026ce205a --- /dev/null +++ b/keyboards/minimacro5/keymaps/kabraxcis/keymap.c @@ -0,0 +1,63 @@ +/* Copyright 2020 dezlidezlidezli + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +enum layers { + _MAIN, +}; + +bool encoder_update_user(uint8_t index, bool clockwise) { + if (index == 0) { /* First encoder*/ + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + } else if (index == 1) { /* Second encoder*/ + if (clockwise) { + tap_code(KC_3); + } else { + tap_code(KC_4); + } + } else if (index == 2) { /* Third encoder*/ + if (clockwise) { + tap_code(KC_5); + } else { + tap_code(KC_6); + } + } else if (index == 3) { /* Fourth encoder*/ + if (clockwise) { + tap_code(KC_7); + } else { + tap_code(KC_8); + } + } else if (index == 4) { /* Fifth encoder*/ + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + } + return true; +} + +// +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_MAIN] = LAYOUT_ortho_1x5( + KC_CAPS, KC_MNXT, KC_MPLY, KC_MPRV, KC_CAPS + ) +}; diff --git a/keyboards/minimacro5/keymaps/voaraq/keymap.c b/keyboards/minimacro5/keymaps/voaraq/keymap.c new file mode 100644 index 000000000000..9af37167dc12 --- /dev/null +++ b/keyboards/minimacro5/keymaps/voaraq/keymap.c @@ -0,0 +1,63 @@ +/* Copyright 2020 dezlidezlidezli + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +enum layers { + _MAIN, +}; + +bool encoder_update_user(uint8_t index, bool clockwise) { + if (index == 0) { /* First encoder*/ + if (clockwise) { + tap_code(KC_1); + } else { + tap_code(KC_2); + } + } else if (index == 1) { /* Second encoder*/ + if (clockwise) { + tap_code(KC_3); + } else { + tap_code(KC_4); + } + } else if (index == 2) { /* Third encoder*/ + if (clockwise) { + tap_code(KC_5); + } else { + tap_code(KC_6); + } + } else if (index == 3) { /* Fourth encoder*/ + if (clockwise) { + tap_code(KC_7); + } else { + tap_code(KC_8); + } + } else if (index == 4) { /* Fifth encoder*/ + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + } + return true; +} + +// +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //buttion closest to usb is first + [_MAIN] = LAYOUT_ortho_1x5( + KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MUTE + ) +}; diff --git a/keyboards/misonoworks/karina/keymaps/voltex/keymap.c b/keyboards/misonoworks/karina/keymaps/voltex/keymap.c new file mode 100644 index 000000000000..f06522f92a01 --- /dev/null +++ b/keyboards/misonoworks/karina/keymaps/voltex/keymap.c @@ -0,0 +1,70 @@ +/* +Copyright 2020 MisonoWorks + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include QMK_KEYBOARD_H + +enum layers { + DEFAULT, + SUPER, + META, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [DEFAULT] = LAYOUT( + KC_TRNS, KC_TRNS, + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, + KC_LALT, MO(SUPER), KC_SPC, KC_BSPC, MO(META), KC_LCTL + ), + + [SUPER] = LAYOUT( + KC_ESC, KC_TRNS, + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, + KC_MINS, KC_EQL, KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_QUOT, KC_SCLN, + KC_LSFT, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SLSH, KC_BSLS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS, KC_TRNS + ), + + [META] = LAYOUT( + KC_TRNS, KC_TRNS, + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, + KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, + KC_LSFT, KC_LEFT, KC_DOWN, KC_RGHT, KC_PPLS, KC_P2, KC_P0, KC_P1, KC_TRNS, KC_TRNS, + RGB_TOG, RGB_SAI, RGB_HUI, RGB_VAI, KC_TRNS, RGB_MOD + ) + +}; + +bool encoder_update_user(uint8_t index, bool clockwise) { + if (index == 0) { + if (clockwise) { + tap_code(KC_MS_LEFT); + } else { + tap_code(KC_MS_RIGHT); + } + } + else if (index == 1) { + if (clockwise) { + tap_code(KC_MS_U); + } else { + tap_code(KC_MS_D); + } + } + return true; +} diff --git a/keyboards/mitosis/keymaps/carvac_dv/keymap.c b/keyboards/mitosis/keymaps/carvac_dv/keymap.c new file mode 100644 index 000000000000..842556324f85 --- /dev/null +++ b/keyboards/mitosis/keymaps/carvac_dv/keymap.c @@ -0,0 +1,123 @@ +// This is the Dvorak-friendly layout for the Mitosis by CarVac (/u/CarVac) +// It features space on the left thumb, shift on the right thumb, a +// number layer with all the numbers on the home row, and a function layer +// that provides mouse keys among other things. + +#include QMK_KEYBOARD_H + +enum mitosis_layers +{ + _STD, + _NUM, + _FN +}; + + +//Mousekeys +#define MOUSEKEY_DELAY 300 +#define MOUSEKEY_INTERNAL 50 +#define MOUSEKEY_MAX_SPEED 20 +#define MOUSEKEY_TIME_TO_MAX 30 +#define MOUSEKEY_WHEEL_MAX_SPEED 8 +#define MOUSEKEY_WHEEL_TIME_TO_MAX 40 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* QWERTY + * .--------------------------------------------..--------------------------------------------. + * | Q | W | E | R | T || Y | U | I | O | P | + * |--------+--------+--------+--------+--------||--------+--------+--------+--------+--------| + * | A | S | D | F | G || J | H | K | L | ; | + * |--------+--------+--------+--------+--------||--------+--------+--------+--------+--------| + * | Z | X | C | V | B || N | M | , | . | / | + * '--------+--------+--------+--------+--------||--------+--------+--------+--------+--------' + * | PGUP | TAB | LCTRL | SPACE || LSHIFT | ENTER | UP | PSCR | + * |--------+--------+--------+--------||--------+--------+--------+--------| + * | PGDN | LGUI | LALT | FN || NUM | LEFT | DOWN | RIGHT | + * '-----------------------------------''-----------------------------------' + */ + [_STD] = LAYOUT( /* Standard; as compatible with dvorak and qwerty as possible */ + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, + KC_PGUP, KC_TAB, KC_LCTL, KC_SPC, KC_LSFT, KC_ENT, KC_UP, KC_PSCR, + KC_PGDN, KC_LGUI, KC_LALT, MO(_FN), MO(_NUM), KC_LEFT, KC_DOWN, KC_RGHT + ), + + /* Number layout, for data entry and programming purposes (Dvorak result in parens) + * .--------------------------------------------..--------------------------------------------. + * | TAB | (,<) | (.>) | - ([{) | = (]}) || ] (=+) | pad * | pad + | pad - | [ (/?) | + * |--------+--------+--------+--------+--------||--------+--------+--------+--------+--------| + * | 1 | 2 | 3 | 4 | 5 || 6 | 7 | 8 | 9 | 0 | + * |--------+--------+--------+--------+--------||--------+--------+--------+--------+--------| + * | F1 | F2 | F3 | F4 | F5 || F6 | F7 | F8 | F9 | F10 | + * '--------+--------+--------+--------+--------||--------+--------+--------+--------+--------' + * | F11 | F12 | | || | | | | + * |--------+--------+--------+--------||--------+--------+--------+--------| + * | | | | || | | | | + * '-----------------------------------''-----------------------------------' + */ + [_NUM] = LAYOUT( /* Number layout along the home row for maximum speed*/ + KC_TAB, _______, _______, KC_MINS, KC_EQL, KC_RBRC, KC_PAST, KC_PPLS, KC_PMNS, KC_LBRC, + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, + KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ), + + + /* Fn layout, for typing purposes (Dvorak result in parens) + * .--------------------------------------------..--------------------------------------------. + * | ` | | MS_U | | || WH_U | WH_L | BTN3 | WH_R | [ (/?) | + * |--------+--------+--------+--------+--------||--------+--------+--------+--------+--------| + * | ESC | MS_L | MS_D | MS_R | || WH_D | BTN1 | BTN2 | | ' (-_) | + * |--------+--------+--------+--------+--------||--------+--------+--------+--------+--------| + * | APP | MPRV | MPLY | MSTP | MNXT || | BSPC | DEL | INS | \ | + * '--------+--------+--------+--------+--------||--------+--------+--------+--------+--------' + * | VOLU | | | || | | PGUP | | + * |--------+--------+--------+--------||--------+--------+--------+--------| + * | VOLD | | | || | HOME | PGDN | END | + * '-----------------------------------''-----------------------------------' + */ + [_FN] = LAYOUT( /* Function Layer, primary alternative layer featuring numpad on right hand, + cursor keys on left hand, and all symbols*/ + KC_GRV, _______, KC_MS_U, _______, _______, KC_WH_U, KC_WH_L, KC_BTN3, KC_WH_R, KC_LBRC, + KC_ESC, KC_MS_L, KC_MS_D, KC_MS_R, _______, KC_WH_D, KC_BTN1, KC_BTN2, _______, KC_QUOT, + KC_APP, KC_MPRV, KC_MPLY, KC_MSTP, KC_MNXT, _______, KC_BSPC, KC_DEL, KC_INS, KC_BSLS, + KC_VOLU, _______, _______, _______, _______, _______, KC_PGUP, _______, + KC_VOLD, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END + ), + + /* blank key layout template + * .--------------------------------------------..--------------------------------------------. + * | | | | | || | | | | | + * |--------+--------+--------+--------+--------||--------+--------+--------+--------+--------| + * | | | | | || | | | | | + * |--------+--------+--------+--------+--------||--------+--------+--------+--------+--------| + * | | | | | || | | | | | + * '--------+--------+--------+--------+--------||--------+--------+--------+--------+--------' + * | | | | || | | | | + * |--------+--------+--------+--------||--------+--------+--------+--------| + * | | | | || | | | | + * '-----------------------------------''-----------------------------------' + */ + +}; + +void matrix_scan_user(void) { + uint8_t layer = get_highest_layer(layer_state); + + switch (layer) { + case _STD: + set_led_off; + break; + case _FN: + set_led_blue; + break; + case _NUM: + set_led_red; + break; + default: + break; + } +}; diff --git a/keyboards/mitosis/keymaps/carvac_dv/rules.mk b/keyboards/mitosis/keymaps/carvac_dv/rules.mk new file mode 100644 index 000000000000..6c605daecf53 --- /dev/null +++ b/keyboards/mitosis/keymaps/carvac_dv/rules.mk @@ -0,0 +1 @@ +MOUSEKEY_ENABLE = yes diff --git a/keyboards/mitosis/keymaps/nzen/keymap.c b/keyboards/mitosis/keymaps/nzen/keymap.c new file mode 100644 index 000000000000..07816067b422 --- /dev/null +++ b/keyboards/mitosis/keymaps/nzen/keymap.c @@ -0,0 +1,207 @@ + + +#include QMK_KEYBOARD_H + +enum mitosis_layers +{ + _QWERTY, + _WORKMAN, + _NUMBERS, + _PUNCT, + _MOUSE, + _LAYERS, + _GAMING, + _UNICODE, + _NUMPAD +}; + + +//Mousekeys +#define MOUSEKEY_DELAY 300 +#define MOUSEKEY_INTERNAL 50 +#define MOUSEKEY_MAX_SPEED 20 +#define MOUSEKEY_TIME_TO_MAX 30 +#define MOUSEKEY_WHEEL_MAX_SPEED 8 +#define MOUSEKEY_WHEEL_TIME_TO_MAX 40 + +// Fillers to make layering more clear +#define XXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // https://github.com/nhou7/qmk_firmware_amj40/blob/master/doc/keycode.txt + /* QWERTY + ['Q', 'W', 'E', 'R', 'T',// 'Y', 'U', 'I', 'O', 'P' ], + ['A', 'S', 'D', 'F', 'G',// 'H', 'J', 'K', 'L', '; :' ], + ['Z', 'X', 'C', 'V', 'B',// 'N', 'M', ', <', '. >', '\' "' ], + [ 'back', 'del', 'ctrl', 'L_n',// 'L_p', 'ctrl', 'ent', 'back', ], + [ 'alt', '0', 'shif', 'spac',// 'spac', 'shif', 'cap', 'alt', ] + */ + [_QWERTY] = LAYOUT( + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_QUOTE, + KC_BSPC, KC_DELETE, KC_LCTL, TG( 2 ), TG( 3 ), KC_RCTL, KC_ENTER, KC_BSPC, + KC_LALT, KC_0, KC_LSFT, KC_SPACE, KC_SPACE, KC_RSFT, KC_CAPS, KC_RALT + ), + /* + ['Q', 'D', 'R', 'W', 'B',/ ** / 'J', 'F', 'U', 'P', '; :' ], + ['A', 'S', 'H', 'T', 'G',/ ** / 'Y', 'N', 'E', 'O', 'I' ], + ['Z', 'X', 'M', 'C', 'V',/ ** / 'K', 'L', ', <', '. >', '\' "' ], + [ '', '', '', '',/ ** / '', '', '', '', ], + [ '', '4', '', '',/ ** / '', '', '', '', ] + */ + [_WORKMAN] = LAYOUT( + KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, + KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, + KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMMA, KC_DOT, KC_QUOTE, + _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_1, _______, _______, _______, _______, _______, _______ + ), + /* + ['9', '8', '7', '6', '5',/ ** / 'F2', 'pDn', *up* /, '*tab* /, 'pUp' ], + [' 4', ' 3', ' 2', ' 1', ' 0',/ ** / 'home', *lf* /, '*dn* /, *rt* /, 'end' ], + ['undo', 'cut', 'copy', 'paste', 'os',/ ** / 'D', '_', ',', '-', '.' ], + // -- + [ '', '', '', 'L_=6',/ ** / 'L_7', '', '', '', ], + [ '', '6', '', '',/ ** / '', '', '', '', ] + */ + [_NUMBERS] = LAYOUT( + KC_9, KC_8, KC_7, KC_6, KC_5, KC_F2, KC_PGDN, KC_UP, KC_TAB, KC_PGUP, + KC_4, KC_3, KC_2, KC_1, KC_0, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_END, + LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_LGUI, KC_D, KC_UNDERSCORE, KC_COMMA, KC_MINUS, KC_DOT, + _______, _______, _______, TG( 2 ), TG( 3 ), _______, _______, _______, + _______, KC_2, _______, _______, _______, _______, _______, _______ + ), + /* + [ '#', '@', '&', '.', ';',/ ** / '_', ',', '|', '^', '%' ], + [ '*', '+', '{', '(', ':',/ ** / '"', ')', '}', '-', '=' ], + [ '\\', '?', '<', '[', '$',/ ** / '~', ']', '>', '!', '/' ], + // -- + ['', '', '', 'L_8',/ ** / 'L_=7', '', '', '', ], + ['', '7', '', '',/ ** / '', '', '', '', ] + */ + [_PUNCT] = LAYOUT( + KC_HASH, KC_AT, KC_AMPERSAND, KC_DOT, KC_SCLN, KC_UNDERSCORE, KC_COMMA, KC_PIPE, KC_CIRCUMFLEX, KC_PERCENT, + KC_ASTERISK, KC_PLUS, KC_LCBR, KC_LPRN, KC_COLON, KC_DQUO, KC_RPRN, KC_RCBR, KC_MINUS, KC_EQUAL, + KC_BSLS, KC_QUESTION, KC_LT, KC_LBRC, KC_DOLLAR, KC_TILDE, KC_RBRC, KC_GT, KC_EXCLAIM, KC_SLASH, + _______, _______, _______, TG( 4 ), TG( 3 ), _______, _______, _______, + _______, KC_3, _______, _______, _______, _______, _______, _______ + ), + /* + ['F6', 'F7', 'F8', 'F9', 'F10',/ ** / 'app', 'mb1', 'mmU', 'mb2', 'mwU' ], + ['F1', 'F2', 'F3', 'F4', 'F5',/ ** / 'mnu', 'mmL', 'mmD', 'mmR', 'mwD' ], + ['F11', 'F12', '`', 'mute', 'ESC',/ ** / 'prtSc', 'scrLk', 'mwL', 'mwR', 'mb3' ], + // -- + [ '', '', '', 'L_=8',/ ** / 'L_9', '', '', '', ], + [ '', '8', '', '',/ ** / '', '', '', '', ] + */ + [_MOUSE] = LAYOUT( + KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_MENU, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_MS_WH_UP, + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_MENU, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_DOWN, + KC_F11, KC_F12, KC_GRAVE, KC_MUTE, KC_ESCAPE, KC_PSCR, KC_SCRL, KC_MS_WH_LEFT, KC_MS_WH_RIGHT, KC_MS_BTN3, + _______, _______, _______, TG( 4 ), TG( 5 ), _______, _______, _______, + _______, KC_4, _______, _______, _______, _______, _______, _______ + ), + /* + ['L_ma1', '!', 'L_dv2', '!', 'L_cl3',/ ** / 'L_wk4', '!', 'L_ar5', '!', '!' ], + ['!', '!', '!', '!', '!',/ ** / '!', '!', '!', '!', '!' ], + ['L_gmA', '!', 'L_ucB', '!', 'L_npC',/ ** / '!', '!', '!', '!', '!' ], + // -- + [ '', '', '', 'L_=9',/ ** / 'L_=9', '', '', '', ], + [ '', '9', '', '',/ ** / '', '', '', '', ] + */ + [_LAYERS] = LAYOUT( + KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, TG( 1 ), KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, + KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, + TG( 6 ), KC_EXCLAIM, TG( 7 ), KC_EXCLAIM, TG( 8 ), KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, KC_EXCLAIM, + _______, _______, _______, TG( 5 ), TG( 5 ), _______, _______, _______, + _______, KC_5, _______, _______, _______, _______, _______, _______ + ), + /* + ['Q', 'W', 'E', 'R', 'T',/ ** / 'P', 'Y', '\u2191'*up* /, 'K', '1' ], + ['A', 'S', 'D', 'F', 'G',/ ** / 'H', '\u2190'*lf* /, '\u2193'*dn* /, '\u2192'*rt* /, '2' ], + ['Z', 'X', 'C', 'V', 'B',/ ** / 'M', '*', '*', '*', '3' ], + // -- + [ '', '', '', 'L_=A',/ ** / 'A', '', '', '', ], + [ '', 'A', '', '',/ ** / '', '', '', '', ] + */ + [_GAMING] = LAYOUT( + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P, KC_Y, KC_UP, KC_K, KC_1, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_LEFT, KC_DOWN, KC_RIGHT, KC_2, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_M, KC_ASTERISK, KC_ASTERISK, KC_ASTERISK, KC_3, + _______, _______, _______, TG( 6 ), KC_6, _______, _______, _______, + _______, KC_6, _______, _______, _______, _______, _______, _______ + ), + /* + ['\u00a2'cent* /, '\u00bc'1/4* /, '\u00bd'1/2* /, '\u03a3'sum* /, '\u00d8'Oslash* /,/ ** / '\u250f'box ul* /, '\u2533'box um* /, '\u2513'box ur* /, '\u03bb'lambda* /, '\u2018'sm'dn* / ], + ['\u00F1'n~* /, '\u00a9'©* /, '\u00b0'degrees* /, '\u00b1'+-* /, '\u2b0f'arrow up* /,/ ** / '\u2523'box ml* /, '\u254B'box mm* /, '\u252B'box mr* /, '\u0394'delta* /, '\u2019'sm'up* / ], + ['\u00a1'down !* /, '\u00bf'down ?* /, '\u00d7'mult x* /, '\u00f7'div/ * /, '\u03c0'pi* /,/ ** / '\u2517'box ll* /, '\u253b'bos lm* /, '\u251b'box lr* /, '\u201c'sm"dn* /, '\u201d'sm"up* / ], + // -- + [ '', '', '', 'L_=B',/ ** / 'B', '', '', '', ], + [ '', 'B', '', '',/ ** / '', '', '', '', ] + */ + [_UNICODE] = LAYOUT( + UC(0x00A2), UC(0x00BC), UC(0x00BD), UC(0x03A3), UC(0x00D8), UC(0x250F), UC(0x2533), UC(0x2513), UC(0x03BB), UC(0x2018), + UC(0x00F1), UC(0x00A9), UC(0x00B0), UC(0x00B1), UC(0x2B0F), UC(0x2523), UC(0x254B), UC(0x252B), UC(0x0394), UC(0x2019), + UC(0x00A1), UC(0x00BF), UC(0x00D7), UC(0x00F7), UC(0x03C0), UC(0x2517), UC(0x253B), UC(0x251B), UC(0x201C), UC(0x201D), + _______, _______, _______, TG( 7 ), KC_7, _______, _______, _______, + _______, KC_7, _______, _______, _______, _______, _______, _______ + ), + /* + ['n-.', 'n-7', 'n-8', 'n-9', 'n--',/ ** / 'n-=', 'volU', 'volD', 'volU', 'volD' ], + ['n-0', 'n-4', 'n-5', 'n-6', 'n-+',/ ** / 'N-lck', 'BACK', 'MUTE', 'RGUI', 'paus' ], + ['n -*', 'n-1', 'n-2', 'n-3', 'n-/',/ ** / 'n-ent', 'PLAY', 'PREV', 'NEXT', 'insr' ], + // -- + [ '', '', '', 'L_=C',/ ** / 'C', '', '', '', ], + [ '', 'C', '', '',/ ** / '', '', '', '', ] + */ + [_NUMPAD] = LAYOUT( + KC_KP_DOT, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_MINUS, KC_KP_EQUAL, KC_AUDIO_VOL_UP, KC_AUDIO_VOL_DOWN, KC_VOLU, KC_VOLD, + KC_KP_0, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_PLUS, KC_NUM, KC_WWW_BACK, KC_AUDIO_MUTE, KC_RGUI, KC_PAUSE, + KC_KP_ASTERISK, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_SLASH, KC_KP_ENTER, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_PREV_TRACK, KC_MEDIA_NEXT_TRACK, KC_INSERT, + _______, _______, _______, TG( 8 ), KC_8, _______, _______, _______, + _______, KC_8, _______, _______, _______, _______, _______, _______ + )// , + /* + * / + [_] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ) + */ +}; + +void matrix_scan_user(void) { + uint8_t layer = get_highest_layer(layer_state); + + switch (layer) { + case _QWERTY: + case _WORKMAN: + set_led_off; + break; + case _NUMBERS: + set_led_blue; + break; + case _PUNCT: + set_led_red; + break; + case _MOUSE: + set_led_green; + break; + case _LAYERS: + set_led_yellow; + break; + case _UNICODE: + set_led_cyan; + break; + default: + break; + } +}; + +void matrix_init_user(void) { + set_unicode_input_mode(UNICODE_MODE_LINUX); // or UNICODE_MODE_WINCOMPOSE +}; diff --git a/keyboards/mitosis/keymaps/nzen/readme.md b/keyboards/mitosis/keymaps/nzen/readme.md new file mode 100644 index 000000000000..c11981bd4d51 --- /dev/null +++ b/keyboards/mitosis/keymaps/nzen/readme.md @@ -0,0 +1,75 @@ + +### personal layout: Nzen + +Levels + +* Qwerty, with quotes in place of slash question. +* Workman +* Numbers and navigation, left and right hands respectively +* Punctuation, mostly symmetric +* Function and mouse, l/r respectively +* Layer hub, to reach workman or upper layers +* Gaming, qwert and arrows +* Unicode, some numerics and one of the box styles +* Numpad and media, l/r respectively + +Bottom cluster is the same on all levels and mostly symmetric. The 'ring fingers' differ between the two sides. N is a number corresponding to the current layer. Toggle layer will be one down and one up. + +* back del/enter ctrl toggle-layer +* alt N/caps shift space + +You can preview the layout by cloning [this webpage](https://gitlab.com/Nzen/impatient-broth-nenem). The page imitates qmk's fallthrough. + +['Q', 'W', 'E', 'R', 'T',// 'Y', 'U', 'I', 'O', 'P' +['A', 'S', 'D', 'F', 'G',// 'H', 'J', 'K', 'L', '; :' +['Z', 'X', 'C', 'V', 'B',// 'N', 'M', ', <', '. >', '\' "' +[ 'back', 'del', 'ctrl', 'L_n',// 'L_p', 'ctrl', 'ent', 'back', +[ 'alt', '0', 'shif', 'spac',// 'spac', 'shif', 'cap', 'alt', + +['Q', 'D', 'R', 'W', 'B',/ ** / 'J', 'F', 'U', 'P', '; :' +['A', 'S', 'H', 'T', 'G',/ ** / 'Y', 'N', 'E', 'O', 'I' +['Z', 'X', 'M', 'C', 'V',/ ** / 'K', 'L', ', <', '. >', '\' "' +[ '', '', '', '',/ ** / '', '', '', '', +[ '', '4', '', '',/ ** / '', '', '', '', + +['9', '8', '7', '6', '5',/ ** / 'F2', 'pDn', *up* /, '*tab* /, 'pUp' +[' 4', ' 3', ' 2', ' 1', ' 0',/ ** / 'home', *lf* /, '*dn* /, *rt* /, 'end' +['undo', 'cut', 'copy', 'paste', 'os',/ ** / 'D', '_', ',', '-', '.' +[ '', '', '', 'L_=6',/ ** / 'L_7', '', '', '', +[ '', '6', '', '',/ ** / '', '', '', '', + +[ '#', '@', '&', '.', ';',/ ** / '_', ',', '|', '^', '%' +[ '*', '+', '{', '(', ':',/ ** / '"', ')', '}', '-', '=' +[ '\\', '?', '<', '[', '$',/ ** / '~', ']', '>', '!', '/' +['', '', '', 'L_8',/ ** / 'L_=7', '', '', '', +['', '7', '', '',/ ** / '', '', '', '', + +['F6', 'F7', 'F8', 'F9', 'F10',/ ** / 'app', 'mb1', 'mmU', 'mb2', 'mwU' +['F1', 'F2', 'F3', 'F4', 'F5',/ ** / 'mnu', 'mmL', 'mmD', 'mmR', 'mwD' +['F11', 'F12', '`', 'mute', 'ESC',/ ** / 'prtSc', 'scrLk', 'mwL', 'mwR', 'mb3' +[ '', '', '', 'L_=8',/ ** / 'L_9', '', '', '', +[ '', '8', '', '',/ ** / '', '', '', '', + +['L_ma1', '!', 'L_dv2', '!', 'L_cl3',/ ** / 'L_wk4', '!', 'L_ar5', '!', '!' +['!', '!', '!', '!', '!',/ ** / '!', '!', '!', '!', '!' +['L_gmA', '!', 'L_ucB', '!', 'L_npC',/ ** / '!', '!', '!', '!', '!' +[ '', '', '', 'L_=9',/ ** / 'L_=9', '', '', '', +[ '', '9', '', '',/ ** / '', '', '', '', + +['Q', 'W', 'E', 'R', 'T',/ ** / 'P', 'Y', '\u2191'*up* /, 'K', '1' +['A', 'S', 'D', 'F', 'G',/ ** / 'H', '\u2190'*lf* /, '\u2193'*dn* /, '\u2192'*rt* /, '2' +['Z', 'X', 'C', 'V', 'B',/ ** / 'M', '*', '*', '*', '3' +[ '', '', '', 'L_=A',/ ** / 'A', '', '', '', +[ '', 'A', '', '',/ ** / '', '', '', '', + +['\u00a2'cent* /, '\u00bc'1/4* /, '\u00bd'1/2* /, '\u03a3'sum* /, '\u00d8'Oslash* /,/ ** / '\u250f'box ul* /, '\u2533'box um* /, '\u2513'box ur* /, '\u03bb'lambda* /, '\u2018'sm'dn* / ], +['\u00F1'n~* /, '\u00a9'©* /, '\u00b0'degrees* /, '\u00b1'+-* /, '\u2b0f'arrow up* /,/ ** / '\u2523'box ml* /, '\u254B'box mm* /, '\u252B'box mr* /, '\u0394'delta* /, '\u2019'sm'up* / ], +['\u00a1'down !* /, '\u00bf'down ?* /, '\u00d7'mult x* /, '\u00f7'div/ * /, '\u03c0'pi* /,/ ** / '\u2517'box ll* /, '\u253b'bos lm* /, '\u251b'box lr* /, '\u201c'sm"dn* /, '\u201d'sm"up* / +[ '', '', '', 'L_=B',/ ** / 'B', '', '', '', +[ '', 'B', '', '',/ ** / '', '', '', '', + +['n-.', 'n-7', 'n-8', 'n-9', 'n--',/ ** / 'n-=', 'volU', 'volD', 'volU', 'volD' +['n-0', 'n-4', 'n-5', 'n-6', 'n-+',/ ** / 'N-lck', 'BACK', 'MUTE', 'RGUI', 'paus' +['n -*', 'n-1', 'n-2', 'n-3', 'n-/',/ ** / 'n-ent', 'PLAY', 'PREV', 'NEXT', 'insr' +[ '', '', '', 'L_=C',/ ** / 'C', '', '', '', +[ '', 'C', '', '',/ ** / '', '', '', '', diff --git a/keyboards/mitosis/keymaps/nzen/rules.mk b/keyboards/mitosis/keymaps/nzen/rules.mk new file mode 100644 index 000000000000..eaba18db9699 --- /dev/null +++ b/keyboards/mitosis/keymaps/nzen/rules.mk @@ -0,0 +1,8 @@ + + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration diff --git a/keyboards/miuni32/keymaps/adam-lee/config.h b/keyboards/miuni32/keymaps/adam-lee/config.h new file mode 100644 index 000000000000..df06a2620627 --- /dev/null +++ b/keyboards/miuni32/keymaps/adam-lee/config.h @@ -0,0 +1,8 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here + +#endif \ No newline at end of file diff --git a/keyboards/miuni32/keymaps/adam-lee/keymap.c b/keyboards/miuni32/keymaps/adam-lee/keymap.c new file mode 100644 index 000000000000..d6f5f40fddfd --- /dev/null +++ b/keyboards/miuni32/keymaps/adam-lee/keymap.c @@ -0,0 +1,60 @@ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Level 0: Default Layer + * ,---------------------------------------------------------------------------------------. + * | Q | W | E | R | T | Y | U | I | O | P | BSP | + * |---------------------------------------------------------------------------------------| + * | A | S | D | F | G | H | J | K | L | ENT |LT(1|,)| + * |---------------------------------------------------------------------------------------| + * |LT(3|Z)| X | C | V | SPC | B | N | M | RSFT |LT(2|.)| + * |---------------------------------------------------------------------------------------| + */ + [0] = LAYOUT( + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, LT(1, KC_COMMA), + LT(3, KC_Z), KC_X, KC_C, KC_V, KC_SPC, KC_B, KC_N, KC_M, KC_RSFT, LT(2, KC_DOT) + ), + /* Level 1: Numbers Layer + * ,---------------------------------------------------------------------------------------. + * | ESC | 7 | 8 | 9 | / | * | . | , | ( | ) | DEL | + * |---------------------------------------------------------------------------------------| + * | TAB | 4 | 5 | 6 | - | + | HOME | UP | END | PGUP | TRNS | + * |---------------------------------------------------------------------------------------| + * | LATL | 1 | 2 | 3 | 0 | LEFT | DOWN | RGHT | PGDN | RSHFT | + * |---------------------------------------------------------------------------------------| + */ + [1] = LAYOUT( + KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_DEL, + KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, + KC_LALT, KC_1, KC_2, KC_3, KC_0, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_RSFT + ), + /* Level 2: Symbols Layer + * ,---------------------------------------------------------------------------------------. + * | ! | @ | # | $ | % | ^ | & | * | - | + | = | + * |---------------------------------------------------------------------------------------| + * | { | } | [ | ] | TRNS | TRNS | \ | ; | : | ` | ? | + * |---------------------------------------------------------------------------------------| + * | LSFT | LCTL | L | T | TAB | N | TRNS | TRNS | RCTL | TRNS | + * |---------------------------------------------------------------------------------------| + */ + [2] = LAYOUT( + KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL, + KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, _______, _______, KC_BSLS, KC_SCLN, KC_COLN, KC_GRV, KC_QUES, + KC_LSFT, KC_LCTL, KC_L, KC_T, KC_TAB, KC_N, _______, _______, KC_RCTL, _______ + ), + /* Level 3: RGB Layer + * ,---------------------------------------------------------------------------------------. + * | QK_BOOT | TRNS | TRNS | TRNS | TRNS | F1 | F2 | F3 | F4 | F5 | F6 | + * |---------------------------------------------------------------------------------------| + * |RGB_TOG|RGB_MOD|RGB_HUI|RGB_HUD| NO |RGB_SAI|RGB_SAD|RGB_VAI|RGB_VAD| TRNS | TRNS | + * |---------------------------------------------------------------------------------------| + * | TRNS | TRNS | TRNS | TRNS | F7 | F8 | F9 | F10 | F11 | F12 | + * |---------------------------------------------------------------------------------------| + */ + [3] = LAYOUT( + QK_BOOT, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, + RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, KC_NO, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, + _______, _______, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 + ) +}; diff --git a/keyboards/miuni32/keymaps/adam-lee/readme.md b/keyboards/miuni32/keymaps/adam-lee/readme.md new file mode 100644 index 000000000000..4cff8ef5a3a2 --- /dev/null +++ b/keyboards/miuni32/keymaps/adam-lee/readme.md @@ -0,0 +1 @@ +# The default keymap for miuni32 \ No newline at end of file diff --git a/keyboards/miuni32/keymaps/adam-lee/rules.mk b/keyboards/miuni32/keymaps/adam-lee/rules.mk new file mode 100644 index 000000000000..1022078ba6c6 --- /dev/null +++ b/keyboards/miuni32/keymaps/adam-lee/rules.mk @@ -0,0 +1,18 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + diff --git a/keyboards/miuni32/keymaps/cassdelacruzmunoz/config.h b/keyboards/miuni32/keymaps/cassdelacruzmunoz/config.h new file mode 100644 index 000000000000..d057ce4f34b9 --- /dev/null +++ b/keyboards/miuni32/keymaps/cassdelacruzmunoz/config.h @@ -0,0 +1,22 @@ +/* Copyright 2020 Cassandra de la Cruz-Munoz cassandra.delacruzmunoz@gmaill.com @cassdelacruzmunoz +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see +*/ + +#pragma once + +// place overrides here +#define RGBLIGHT_LAYERS +#define RGBLIGHT_SLEEP +#define MIDI_ADVANCED diff --git a/keyboards/miuni32/keymaps/cassdelacruzmunoz/keymap.c b/keyboards/miuni32/keymaps/cassdelacruzmunoz/keymap.c new file mode 100644 index 000000000000..7d347edb6623 --- /dev/null +++ b/keyboards/miuni32/keymaps/cassdelacruzmunoz/keymap.c @@ -0,0 +1,173 @@ +/* Copyright 2020 Cassandra de la Cruz-Munoz cassandra.delacruzmunoz@gmaill.com @cassdelacruzmunoz +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see +*/ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Level 0: Default Layer + * ,---------------------------------------------------------------------------------------. + * | Q | W | E | R | T | Y | U | I | O | P | BSP | + * |---------------------------------------------------------------------------------------| + * | A | S | D | F | G | H | J | K | L | ENT |LT(1|,)| + * |---------------------------------------------------------------------------------------| + * | Z | X | C | V | SPC | B | N | M | RSFT | . | + * |---------------------------------------------------------------------------------------| + */ + [0] = LAYOUT( + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, LT(1, KC_COMMA), + KC_Z, KC_X, KC_C, KC_V, KC_SPC, KC_B, KC_N, KC_M, KC_RSFT, KC_DOT + ), + /* Level 1: Layers Layer + * ,---------------------------------------------------------------------------------------. + * | TO(2) | TO(3) | TO(4) | TO(5) | TO(6) | TO(7) | TO(8) | TO(9) | TO(10)| TO(11)| TO(12)| + * |---------------------------------------------------------------------------------------| + * | TO(13)| TO(14)| TO(15)| TO(16)| TO(17)| TO(18)| TO(19)| TO(20)| TO(21)| TO(22)| TRNS | + * |---------------------------------------------------------------------------------------| + * | TO(23)| TO(24)| TO(25)| TO(26)| | TO(27)| TO(28)| TO(29)| TO(30)| TO(31)| + * |---------------------------------------------------------------------------------------| + */ + [1] = LAYOUT( + TO(2), TO(3), TO(4), TO(5), TO(6),//TO(7), TO(8), TO(9), TO(10), TO(11), TO(12), + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + //TO(13), TO(14), TO(15), TO(16), TO(17), TO(18), TO(19), TO(20), TO(21), TO(22), _______, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, _______, + //TO(23), TO(24), TO(25), TO(26), KC_NO, TO(27), TO(28), TO(29), TO(30), TO(31) + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO + ), + /* Level 2: Numbers Layer + * ,---------------------------------------------------------------------------------------. + * | ESC | 7 | 8 | 9 | / | * | . | , | ( | ) | DEL | + * |---------------------------------------------------------------------------------------| + * | TAB | 4 | 5 | 6 | - | + | HOME | UP | END | PGUP | TG(2) | + * |---------------------------------------------------------------------------------------| + * | LALT | 1 | 2 | 3 | 0 | LEFT | DOWN | RGHT | PGDN | RSHFT | + * |---------------------------------------------------------------------------------------| + */ + [2] = LAYOUT( + KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_DEL, + KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_HOME, KC_UP, KC_END, KC_PGUP, TG(2), + KC_LALT, KC_1, KC_2, KC_3, KC_0, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_RSFT + ), + /* Level 3: Symbols Layer + * ,---------------------------------------------------------------------------------------. + * | ! | @ | # | $ | % | ^ | & | * | - | + | = | + * |---------------------------------------------------------------------------------------| + * | { | } | [ | ] | ' | | \ | ; | : | ` | TG(3) | + * |---------------------------------------------------------------------------------------| + * | LSFT | LCTL | | | TAB | | | | RCTL | ? | + * |---------------------------------------------------------------------------------------| + */ + [3] = LAYOUT( + KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL, + KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_QUOT, KC_NO, KC_BSLS, KC_SCLN, KC_COLN, KC_GRV, TG(3), + KC_LSFT, KC_LCTL, KC_NO, KC_NO, KC_TAB, KC_NO, KC_NO, KC_NO, KC_RCTL, KC_QUES + ), + /* Level 4: F-keys and Media Layer + * ,---------------------------------------------------------------------------------------. + * | QK_BOOT | MUTE | VOLU | MPLY | TRNS | F1 | F2 | F3 | F4 | F5 | F6 | + * |---------------------------------------------------------------------------------------| + * | LGUI | MPRV | VOLD | MNXT | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | TG(4) | + * |---------------------------------------------------------------------------------------| + * | TRNS | TRNS | TRNS | TRNS | F7 | F8 | F9 | F10 | F11 | F12 | + * |---------------------------------------------------------------------------------------| + */ + [4] = LAYOUT( + QK_BOOT, KC_MUTE, KC_VOLU, KC_MPLY, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, + KC_LGUI, KC_MPRV, KC_VOLD, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TG(4), + KC_NO, KC_NO, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 + ), + /* Level 5: Commands Layer + * ,---------------------------------------------------------------------------------------. + * | CUT | PSCR | BRIU | PWR | | | | | | | | + * |---------------------------------------------------------------------------------------| + * | COPY | FIND | BRID | SLEP | | | | | | | TG(5) | + * |---------------------------------------------------------------------------------------| + * | PSTE | | | WAKE | | | | | | | + * |---------------------------------------------------------------------------------------| + */ + [5] = LAYOUT( + KC_CUT, KC_PSCR, KC_BRIU, KC_PWR, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_COPY, KC_FIND, KC_BRID, KC_SLEP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TG(5), + KC_PSTE, KC_NO, KC_NO, KC_WAKE, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO + ), + /* Level 6: MIDI Layer + * ,---------------------------------------------------------------------------------------. + * | C1 | E1 | G1 | B1 | D2 | F2 | A2 | C3 | E3 | G3 | | + * |---------------------------------------------------------------------------------------| + * | D1 | F1 | A1 | C2 | E2 | G2 | B2 | D3 | F3 | A3 | TG(6) | + * |---------------------------------------------------------------------------------------| + * | OCTD | OCTU | TRNSD | TRNSU | | | | | | | + * |---------------------------------------------------------------------------------------| + */ + [6] = LAYOUT( + MI_C1, MI_E1, MI_G1, MI_B1, MI_D2, MI_F2, MI_A2, MI_C3, MI_E3, MI_G3, KC_NO, + MI_D1, MI_F1, MI_A1, MI_C2, MI_E2, MI_G2, MI_B2, MI_D3, MI_F3, MI_A3, TG(6), + MI_OCTD, MI_OCTU, MI_TRSD, MI_TRSU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO + ) +}; + +// Light LEDs 0 through 16 in white when keyboard layer 0 is active +const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0, 17, HSV_WHITE} +); +// Light LEDs 0 through 16 in blue when keyboard layer 1 is active +const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0, 17, HSV_BLUE} +); +// Light LEDs 0 through 16 in green when keyboard layer 2 is active +const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0, 17, HSV_GREEN} +); +// Light LEDs 0 through 16 in yellow when keyboard layer 3 is active +const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0, 17, HSV_YELLOW} +); +// Light LEDs 0 through 16 in red when keyboard layer 4 is active +const rgblight_segment_t PROGMEM my_layer4_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0, 17, HSV_RED} +); +// Light LEDs 0 through 16 in cyan when keyboard layer 5 is active +const rgblight_segment_t PROGMEM my_layer5_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0, 17, HSV_CYAN} +); +// Light LEDs 0 through 16 in orange when keyboard layer 6 is active +const rgblight_segment_t PROGMEM my_layer6_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0, 17, HSV_ORANGE} +); + +// Now define the array of layers. Later layers take precedence +const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( + my_layer0_layer, + my_layer1_layer, + my_layer2_layer, + my_layer3_layer, + my_layer4_layer, + my_layer5_layer, + my_layer6_layer +); + +void keyboard_post_init_user(void) { + // Enable the LED layers + rgblight_layers = my_rgb_layers; +} + +layer_state_t layer_state_set_user(layer_state_t state) { + for (int i = 0; i < 7; i++) { + rgblight_set_layer_state(i, layer_state_cmp(state, i)); + } + return state; +} diff --git a/keyboards/miuni32/keymaps/cassdelacruzmunoz/readme.md b/keyboards/miuni32/keymaps/cassdelacruzmunoz/readme.md new file mode 100644 index 000000000000..b9e42964cfd9 --- /dev/null +++ b/keyboards/miuni32/keymaps/cassdelacruzmunoz/readme.md @@ -0,0 +1,19 @@ +# Cass de la Cruz-Munoz's keymap for Miuni32 + +7 layers: + +* QUERTY +* Layer access +* Numberpad, navigation keys +* Symbols +* Function and media keys +* Assorted command keys +* MIDI keys + +![QUERTY](https://imgur.com/0B3Xl2D.png) +![Layers](https://imgur.com/Rb9KRgL.png) +![Numberpad & Navigation](https://imgur.com/psq5U5o.png) +![Symbols](https://imgur.com/nbxOjCG.png) +![Function & Media](https://imgur.com/AZe6Vib.png) +![Commands](https://imgur.com/Pl0NYbw.png) +![MIDI](https://imgur.com/c6BcDe2.png) diff --git a/keyboards/mt/mt980/keymaps/walker/config.h b/keyboards/mt/mt980/keymaps/walker/config.h new file mode 100644 index 000000000000..0bd39599381b --- /dev/null +++ b/keyboards/mt/mt980/keymaps/walker/config.h @@ -0,0 +1,5 @@ +#pragma once + +#define TAPPING_TERM 200 +#define ONESHOT_TAP_TOGGLE 5 +#define ONESHOT_TIMEOUT 5000 diff --git a/keyboards/mt/mt980/keymaps/walker/keymap.c b/keyboards/mt/mt980/keymaps/walker/keymap.c new file mode 100644 index 000000000000..f0817dd33d59 --- /dev/null +++ b/keyboards/mt/mt980/keymaps/walker/keymap.c @@ -0,0 +1,168 @@ +#include QMK_KEYBOARD_H + +bool numlock_on = true; + +typedef struct { + bool is_press_action; + int state; +} tap; + +enum { + SINGLE_TAP = 1, + SINGLE_HOLD = 2, + DOUBLE_TAP = 3, + DOUBLE_HOLD = 4, + TRIPLE_TAP = 5, + TRIPLE_HOLD = 6 +}; + +enum { + ALT_L1 = 0 +}; + +int cur_dance (tap_dance_state_t *state); +void alt_finished (tap_dance_state_t *state, void *user_data); +void alt_reset (tap_dance_state_t *state, void *user_data); + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_INS, KC_PSCR, KC_PGUP, KC_PGDN, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, + KC_LCTL, KC_LGUI, TD(ALT_L1), KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT), + + [1] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUSE, KC_SCRL, KC_HOME, KC_END, + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RGB_TOG, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, RGB_RMOD, RGB_VAD, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS) + +}; + +int cur_dance (tap_dance_state_t *state) { + if (state->count == 1) { + if (state->pressed) return SINGLE_HOLD; + else return SINGLE_TAP; + } + else if (state->count == 2) { + if (state->pressed) return DOUBLE_HOLD; + else return DOUBLE_TAP; + } + else if (state->count == 3) { + if (state->interrupted || !state->pressed) return TRIPLE_TAP; + else return TRIPLE_HOLD; + } + else return 8; +} + +static tap alttap_state = { + .is_press_action = true, + .state = 0 +}; + +void alt_finished (tap_dance_state_t *state, void *user_data) { + alttap_state.state = cur_dance(state); + switch (alttap_state.state) { + case SINGLE_TAP: set_oneshot_layer(1, ONESHOT_START); clear_oneshot_layer_state(ONESHOT_PRESSED); break; + case SINGLE_HOLD: register_code(KC_LALT); break; + case DOUBLE_TAP: set_oneshot_layer(1, ONESHOT_START); set_oneshot_layer(1, ONESHOT_PRESSED); break; + case DOUBLE_HOLD: register_code(KC_LALT); layer_on(1); break; + } +} + +void alt_reset (tap_dance_state_t *state, void *user_data) { + switch (alttap_state.state) { + case SINGLE_TAP: break; + case SINGLE_HOLD: unregister_code(KC_LALT); break; + case DOUBLE_TAP: break; + case DOUBLE_HOLD: layer_off(1); unregister_code(KC_LALT); break; + } + alttap_state.state = 0; +} + +tap_dance_action_t tap_dance_actions[] = { + [ALT_L1] = ACTION_TAP_DANCE_FN_ADVANCED(NULL,alt_finished, alt_reset) +}; + +bool led_update_keymap(led_t led_state) { + if (led_state.num_lock) { + numlock_on = true; + } + else { + numlock_on = false; + } +} + +bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { + + switch (keycode) { + case KC_TRNS: + case KC_NO: + /* Always cancel one-shot layer when another key gets pressed */ + if (record->event.pressed && is_oneshot_layer_active()) + clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED); + return true; + case QK_BOOT: + /* Don't allow reset from oneshot layer state */ + if (record->event.pressed && is_oneshot_layer_active()) { + clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED); + return false; + } + return true; + case KC_PPLS: + if (!numlock_on) { + if (is_oneshot_layer_active() || layer_state & 0x2) { + if (record->event.pressed) + register_code(KC_HOME); + else + unregister_code(KC_HOME); + clear_oneshot_layer_state(ONESHOT_START); + } + else { + if (record->event.pressed) + register_code(KC_PGUP); + else + unregister_code(KC_PGUP); + } + return false; + } + return true; + case KC_PENT: + if (!numlock_on) { + if (is_oneshot_layer_active() || layer_state & 0x2) { + if (record->event.pressed) + register_code(KC_END); + else + unregister_code(KC_END); + clear_oneshot_layer_state(ONESHOT_START); + } + else { + if (record->event.pressed) + register_code(KC_PGDN); + else + unregister_code(KC_PGDN); + } + return false; + } + return true; + case KC_NUM: + /* Shift + NumLock will be treated as shift-Insert */ + if ((keyboard_report->mods & MOD_BIT (KC_LSFT)) || (keyboard_report->mods & MOD_BIT (KC_RSFT))) { + if (record->event.pressed) { + register_code(KC_INS); + unregister_code(KC_INS); + } + return false; + } + else + return true; + default: + return true; + } + return true; +} diff --git a/keyboards/mt/mt980/keymaps/walker/rules.mk b/keyboards/mt/mt980/keymaps/walker/rules.mk new file mode 100644 index 000000000000..e5ddcae8d927 --- /dev/null +++ b/keyboards/mt/mt980/keymaps/walker/rules.mk @@ -0,0 +1 @@ +TAP_DANCE_ENABLE = yes diff --git a/keyboards/nack/keymaps/farfalleflickan/keymap.c b/keyboards/nack/keymaps/farfalleflickan/keymap.c new file mode 100644 index 000000000000..ec0b2434fa46 --- /dev/null +++ b/keyboards/nack/keymaps/farfalleflickan/keymap.c @@ -0,0 +1,203 @@ +/* Copyright 2020 farfalleflickan + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H +#include "keymap.h" + +#define ____ _______ + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + BASE, + NOGUI, + NUM, + FN +}; + +// Defines the keycodes used by our macros in process_record_user +enum custom_keycodes { + CK_LSFT = SAFE_RANGE, // Shift + CK_RALT, // AltGr + CK_BSPC_DEL, // Backspace or Del (if pressed with CK_LSFT or CK_RALT) + KK_RESET +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [BASE] = LAYOUT( +/* __________________________________________________________________________________________________________________________________________________________________________ + | \ \ \ \ \ \ \ \ \ \ \ \ \ \ */ +// | |----TAB-----|---Q--------|-----W------|-----E------|-----R------|----T-------|-----Y------|-----U------|----I-------|------O-----|----P-------|----Å-------|--( ¨^~ )---| + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, +// | |----ESC-----|---A--------|---S--------|----D-------|-----F------|-----G------|-----H------|-----J------|-----K------|-----L------|-----Ö------|-----Ä------|--( '* )----| + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, +// | |---SHIFT----|---Z--------|---X--------|----C-------|-----V------|-----B------|-----N------|------M-----|---( ,; )---|---( .: )---|---( -_ )---|----UP------|-BACKSPACE--| + CK_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, CK_BSPC_DEL, +// | |---CTRL-----|---ALT------|---META-----|----FN_1----|----------SPACE----------|----FN_2----|----AltGr---|--( <>| )---|---ENTER----|-LEFT-------|---DOWN-----|--RIGHT-----| + KC_LCTL, KC_LALT, KC_LGUI, MO(NUM), KC_SPC, KC_NO, MO(FN), CK_RALT, KC_NUBS, KC_ENT, KC_LEFT, KC_DOWN, KC_RIGHT +// \|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________| + ), + [NOGUI] = LAYOUT( +/* __________________________________________________________________________________________________________________________________________________________________________ + | \ \ \ \ \ \ \ \ \ \ \ \ \ \ */ +// | |----TAB-----|---Q--------|-----W------|-----E------|-----R------|----T-------|-----Y------|-----U------|----I-------|------O-----|----P-------|----Å-------|--( ¨^~ )---| + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, +// | |----ESC-----|---A--------|---S--------|----D-------|-----F------|-----G------|-----H------|-----J------|-----K------|-----L------|-----Ö------|-----Ä------|--( '* )----| + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, +// | |---SHIFT----|---Z--------|---X--------|----C-------|-----V------|-----B------|-----N------|------M-----|---( ,; )---|---( .: )---|---( -_ )---|----UP------|-BACKSPACE--| + CK_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, CK_BSPC_DEL, +// | |---CTRL-----|---ALT------|---META-----|----FN_1----|----------SPACE----------|----FN_2----|----AltGr---|--( <>| )---|---ENTER----|-LEFT-------|---DOWN-----|--RIGHT-----| + KC_LCTL, KC_LALT, KC_NO, MO(NUM), KC_SPC, KC_NO, TO(BASE), CK_RALT, KC_NUBS, KC_ENT, KC_LEFT, KC_DOWN, KC_RIGHT +// \|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________| + ), + [NUM] = LAYOUT( +/* __________________________________________________________________________________________________________________________________________________________________________ + | \ \ \ \ \ \ \ \ \ \ \ \ \ \ */ +// | |---TAB------|---( 1! )---|--( 2"@ )---|--( 3#£ )---|---( 4¤$ )--|--( 5%€ )---|---( 6& )---|--( 7/{ )---|--( 8([ )---|--( 9)] )---|--( 0=} )---|---( +?\ )--|---( ´` )---| + ____, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, +// | |----ESC-----|-----F1-----|-----F2-----|----F3------|----F4------|----F5------|-----F6-----|-----F7------|----F8-----|-----F9-----|-----F10----|----F11-----|----F12-----| + ____, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, +// | |---SHIFT----|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------| + ____, KC_P0, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_P6, KC_P7, KC_P8, KC_P9, KC_PGUP, KC_NO, +// | |---CTRL-----|---ALT------|---META-----|---FN_1-----|------------|------------|----FN_2----|--AltGr-----|---( §½ )---|------------|------------|------------|------------| + ____, ____, ____, TO(BASE), KC_NO, KC_NO, MO(FN), ____, KC_GRV, KC_PDOT, KC_HOME, KC_PGDN, KC_END +// \|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________| + ), + [FN] = LAYOUT( +/* __________________________________________________________________________________________________________________________________________________________________________ + | \ \ \ \ \ \ \ \ \ \ \ \ \ \ */ +// | |-RGB TOGGLE-|-CHANGE RGB-|-RGB HUE UP-|-RGB SAT UP-|------------|------------|------------|------------|------------|------------|------------|------------|-QK_BOOT KBD--| + RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KK_RESET, +// | |------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------| + MU_TOGG, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, +// | |------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|-RGB LIGHT +|------------| + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_VAI, KC_NO, +// | |------------|------------|------------|---FN_1-----|------------|------------|----FN_2----|------------|------------|------------|------------|-RGB LIGHT -|------------| + KC_NO, KC_NO, KC_NO, TO(BASE), KC_NO, KC_NO, TO(BASE), TO(NOGUI), KC_NO, KC_NO, KC_NO, RGB_VAD, KC_NO +// \|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________| + ) +}; + +// Interrupt bools +bool lshift = false, ralt = false; + +// Number of items that are saved in prev_kcs +uint8_t prev_indx = 0; +// Used to save the last 6 actual keycodes +uint16_t prev_kcs[6] = {0, 0, 0, 0, 0, 0}; + +/* +Used to add a keycode to a prev_kcs to remember it. +When full the last code gets discarded and replaced by +the new one. +*/ +void add_to_prev(uint16_t kc){ + for (int i=0; i0; i--){ + prev_kcs[i] = prev_kcs[i-1]; + } + prev_kcs[0] = kc; + } else { + prev_kcs[prev_indx] = kc; + prev_indx++; + } +} + +/* +Unregisters all codes saved in prev_kcs and resets prev_indx. +gets called on multiple occasions mainly when shift is released +and when frankenkeycodes are pressed. Prevents output of +wrong characters when really specific key combinations +that would never occur during normal usage are pressed. +*/ +void unreg_prev(void){ + if (prev_indx == 0) + return; + for (int i=0; ievent.pressed) { + unregister_code(KC_LSFT); + register_code(KC_LSFT); + lshift = true; + } else { + unreg_prev(); + unregister_code(KC_LSFT); + lshift = false; + } + return false; + break; + case CK_RALT: + if(record->event.pressed) { + unregister_code(KC_RALT); + register_code(KC_RALT); + ralt = true; + } else { + unreg_prev(); + unregister_code(KC_RALT); + ralt = false; + } + return false; + break; + case CK_BSPC_DEL: + if (ralt==true) { + RALT_NO(KC_BSPC,KC_DEL); + } else { + SHIFT_NO(KC_BSPC,KC_DEL); + } + break; + case KK_RESET: // Basically, turn off RGB before resetting + if (record->event.pressed) { + key_timer = timer_read32(); + #ifdef RGB_MATRIX_ENABLE + rgb_matrix_disable_noeeprom(); + #endif + } else { + if (timer_elapsed32(key_timer) >= 20) { + reset_keyboard(); + } + } + break; + default: + if(record->event.pressed) { + timer_timeout_keymap(); + if (lshift) + register_code(KC_LSFT); + else + unregister_code(KC_LSFT); + + if (ralt) + register_code(KC_ALGR); + else + unregister_code(KC_ALGR); + } + break; + } + return true; +} + +__attribute__((weak)) +void timer_timeout_keymap(void){ +} diff --git a/keyboards/nack/keymaps/farfalleflickan/keymap.h b/keyboards/nack/keymaps/farfalleflickan/keymap.h new file mode 100644 index 000000000000..212f45ffdb4a --- /dev/null +++ b/keyboards/nack/keymaps/farfalleflickan/keymap.h @@ -0,0 +1,116 @@ +/* Copyright 2020 farfalleflickan + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once +#include "quantum.h" + +void add_to_prev(uint16_t kc); +void unreg_prev(void); +void timer_timeout_keymap(void); +bool process_record_user(uint16_t keycode, keyrecord_t *record); + +// Normal shift status +#define SHIFT_NORM(kc1, kc2) \ +if (record->event.pressed) { \ + timer_timeout_keymap(); \ + if (lshift) { \ + register_code(KC_LSFT); \ + unregister_code(kc2); \ + register_code(kc2); \ + add_to_prev(kc2); \ + } else { \ + unregister_code(KC_LSFT); \ + unregister_code(kc1); \ + register_code(kc1); \ + } \ +} else { \ + unregister_code(kc1); \ + unregister_code(kc2); \ +} \ +return false; + +// Always shifted +#define SHIFT_ALL(kc1, kc2) \ +if (record->event.pressed) { \ + timer_timeout_keymap(); \ + register_code(KC_LSFT); \ + if (lshift) { \ + unregister_code(kc2); \ + register_code(kc2); \ + add_to_prev(kc2); \ + } else { \ + unregister_code(kc1); \ + register_code(kc1); \ + add_to_prev(kc1); \ + } \ +} else { \ + unregister_code(kc1); \ + unregister_code(kc2); \ + unreg_prev(); \ + if (lshift) \ + register_code(KC_LSFT); \ + else \ + unregister_code(KC_LSFT); \ +} \ +return false; + +// Never shifted +#define SHIFT_NO(kc1, kc2) \ +if (record->event.pressed) { \ + timer_timeout_keymap(); \ + unregister_code(KC_LSFT); \ + if (lshift) { \ + unregister_code(kc2); \ + register_code(kc2); \ + add_to_prev(kc2); \ + } else { \ + unregister_code(kc1); \ + register_code(kc1); \ + } \ +} else { \ + unregister_code(kc1); \ + unregister_code(kc2); \ + unreg_prev(); \ + if (lshift) \ + register_code(KC_LSFT); \ + else \ + unregister_code(KC_LSFT); \ +} \ +return false; + +//Never RALT +#define RALT_NO(kc1, kc2) \ +if (record->event.pressed) { \ + timer_timeout_keymap(); \ + unregister_code(KC_RALT); \ + if (ralt) { \ + unregister_code(kc2); \ + register_code(kc2); \ + add_to_prev(kc2); \ + } else { \ + unregister_code(kc1); \ + register_code(kc1); \ + } \ +} else { \ + unregister_code(kc1); \ + unregister_code(kc2); \ + unreg_prev(); \ + if (ralt) \ + register_code(KC_RALT); \ + else \ + unregister_code(KC_RALT); \ +} \ +return false; diff --git a/keyboards/nack/keymaps/farfalleflickan/readme.md b/keyboards/nack/keymaps/farfalleflickan/readme.md new file mode 100644 index 000000000000..fbe5c6f5e3cb --- /dev/null +++ b/keyboards/nack/keymaps/farfalleflickan/readme.md @@ -0,0 +1 @@ +# farfalleflickan's keymap for nack diff --git a/keyboards/ning/tiny_board/tb16_rgb/keymaps/ningjx/keymap.c b/keyboards/ning/tiny_board/tb16_rgb/keymaps/ningjx/keymap.c new file mode 100644 index 000000000000..e9529fe91e15 --- /dev/null +++ b/keyboards/ning/tiny_board/tb16_rgb/keymaps/ningjx/keymap.c @@ -0,0 +1,37 @@ +/* Copyright 2023 Ning (@ningjx) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + * ┌───┬───┬───┬───┐ + * │ 7 │ 8 │ 9 │RGB│ + * ├───┼───┼───┼───┤ + * │ 4 │ 5 │ 6 │MOD│ + * ├───┼───┼───┼───┤ + * │ 1 │ 2 │ 3 │ - │ + * ├───┼───┼───┼───┤ + * │ 0 │ . │Ent│ + │ + * └───┴───┴───┴───┘ + */ + [0] = LAYOUT_ortho_4x4( + KC_P7, KC_P8, KC_P9, RGB_TOG, + KC_P4, KC_P5, KC_P6, RGB_MODE_FORWARD, + KC_P1, KC_P2, KC_P3, KC_PMNS, + KC_P0, KC_PDOT, KC_PENT, KC_PPLS + ) +}; diff --git a/keyboards/nullbitsco/nibble/keymaps/snailmap/keymap.c b/keyboards/nullbitsco/nibble/keymaps/snailmap/keymap.c new file mode 100644 index 000000000000..a53335003f65 --- /dev/null +++ b/keyboards/nullbitsco/nibble/keymaps/snailmap/keymap.c @@ -0,0 +1,543 @@ +/* Copyright 2021 dogspace + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +enum custom_keycodes { + KC_CUST = SAFE_RANGE, +}; + +enum layer_names { + _MA, + _L1, + _L2, + _L3 +}; + +// NOTE: Default keymap layers were designed for ANSI split-space layout http://www.keyboard-layout-editor.com/#/gists/f28bd5ff4e62f69e89896df3a59671c6 +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_MA] = LAYOUT_ansi( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, + KC_MUTE, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, LCTL(KC_F), + KC_CAPS, MO(_L2), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_CALC, + TG(_L2), KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_WHOM, + MO(_L3), KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_L1), LCTL(KC_C), LCTL(KC_V), KC_LEFT, KC_DOWN, KC_RGHT + ), + [_L1] = LAYOUT_ansi( + KC_GRAVE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_UP, _______, _______, _______, _______, _______, _______, + _______, LCTL(KC_Z), KC_LCTL, KC_LSFT, _______, _______, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_END, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_PGDN, _______, _______, LCTL(KC_SLSH), _______, _______, _______, + _______, _______, _______, _______, _______, _______, LCTL(KC_X), _______, _______, _______, _______ + ), + [_L2] = LAYOUT_ansi( + KC_GRAVE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, _______, _______, _______, _______, _______, _______, KC_PAST, KC_7, KC_8, KC_9, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, KC_PPLS, KC_4, KC_5, KC_6, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, KC_PMNS, KC_1, KC_2, KC_3, _______, _______, _______, _______, + _______, _______, _______, _______, KC_0, KC_PSLS, _______, _______, _______, _______, _______ + ), + [_L3] = LAYOUT_ansi( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, + RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_SYRQ, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; + +#ifdef OLED_ENABLE +/*=========================================== OLED CONFIGURATION ===========================================*/ +bool oled_horizontal = true; // OLED rotation (true = horizontal, false = vertical) +bool ansi_layout = true; // ANSI or ISO layout (true = ANSI, false = ISO) +bool split_space = true; // Split spacebar (true = split spacebar, false = 6.25u or 7u spacebar) +bool three_mods_left = true; // Left mods layout (true = 3x 1.25u keys, false = 2x 1.5u keys) +bool three_mods_right = false; // Right mods layout (true = 3x 1u keys, false = 2x 1.5u keys) +bool graph_direction = true; // Graph movement (true = right to left, false = left to right) +float graph_top_wpm = 100.0; // Minimum WPM required to reach the top of the graph +int graph_refresh = 1000; // In milliseconds, determines the graph-line frequency +int icon_med_wpm = 50; // WPM required to display the medium snail +int icon_fast_wpm = 72; // WPM required to display the fast snail +// Layer names: Should be exactly 5 characters in length if vertical display, or 6 characters if horizontal +#define MA_LAYER_NAME "QWERTY" // Layer _MA name +#define L1_LAYER_NAME "ARROWS" // Layer _L1 name +#define L2_LAYER_NAME "NUMPAD" // Layer _L2 name +#define L3_LAYER_NAME "FUNCTN" // Layer _L3 name +/*================================================================================================================*/ +bool first_loop = true; +int timer = 0; +int wpm_limit = 20; +int max_wpm = -1; +int wpm_icon = -1; +int graph_lines[64]; + +// Set OLED rotation +oled_rotation_t oled_init_user(oled_rotation_t rotation) { + if (oled_horizontal) { + return OLED_ROTATION_180; + } else { + return OLED_ROTATION_90; + } +} + +// Toggles pixel on/off, converts horizontal coordinates to vertical equivalent if necessary +static void write_pixel(int x, int y, bool onoff) { + if (oled_horizontal) { + oled_write_pixel(x, y, onoff); + } else { + oled_write_pixel(y, 127 - x, onoff); + } +} + +// Draw static background image to OLED (keyboard with no bottom row) +static void render_background(void) { + if (oled_horizontal) { + static const char PROGMEM oled_keymap_horizontal[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x84, 0x80, 0x80, 0x80, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x04, 0x04, 0x84, 0x84, 0x84, 0x84, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + oled_write_raw_P(oled_keymap_horizontal, sizeof(oled_keymap_horizontal)); + } else { + static const char PROGMEM oled_keymap_vertical[] = { + 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, + 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, + 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, + 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, + 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + oled_write_raw_P(oled_keymap_vertical, sizeof(oled_keymap_vertical)); + } +} + +// Location of OLED keyboard's top left pixel, relative to the display +static const int keymap_template[2] = {41, 0}; +// Location of key highlights top left pixels, relative to keymap_template {X, Y, Key length in px} +static int keymap_coords[MATRIX_ROWS][MATRIX_COLS][3] = { + { {12, 15, 1}, {5, 0, 1}, {10, 0, 1}, {15, 0, 1}, {20, 0, 1}, {25, 0, 1}, {30, 0, 1}, {35, 0, 1}, {40, 0, 1}, {45, 0, 1}, {50, 0, 1}, {55, 0, 1}, {60, 0, 1}, {65, 0, 1}, {70, 0, 8}, {82, 0, 1} }, + { {0, 5, 1}, {5, 5, 5}, {14, 5, 1}, {19, 5, 1}, {24, 5, 1}, {29, 5, 1}, {34, 5, 1}, {39, 5, 1}, {44, 5, 1}, {49, 5, 1}, {54, 5, 1}, {59, 5, 1}, {64, 5, 1}, {69, 5, 1}, {74, 5, 4}, {82, 5, 1} }, + { {0, 10, 1}, {5, 10, 6}, {15, 10, 1}, {20, 10, 1}, {25, 10, 1}, {30, 10, 1}, {35, 10, 1}, {40, 10, 1}, {45, 10, 1}, {50, 10, 1}, {55, 10, 1}, {60, 10, 1}, {65, 10, 1}, {0, 0, 0}, {70, 10, 8}, {82, 10, 1} }, + { {0, 15, 1}, {5, 15, 8}, {17, 15, 1}, {22, 15, 1}, {27, 15, 1}, {32, 15, 1}, {37, 15, 1}, {42, 15, 1}, {47, 15, 1}, {52, 15, 1}, {57, 15, 1}, {62, 15, 1}, {67, 15, 6}, {0, 0, 0}, {77, 15, 1}, {82, 15, 1} }, + { {0, 20, 1}, {5, 20, 2}, {11, 20, 2}, {17, 20, 2}, {0, 0, 0}, {0, 0, 0}, {23, 20, 12}, {0, 0, 0}, {0, 0, 0}, {39, 20, 3}, {56, 20, 4}, {64, 20, 4}, {72, 20, 1}, {0, 0, 0}, {77, 20, 1}, {82, 20, 1} } +}; + +// Draw the bottom row of the keyboard (based on OLED config variables), update coordinates +static void render_fn_row(void) { + // Update locations of spacebar and modifier key highlights + if ((split_space == false) && (three_mods_left == false)) { + keymap_coords[4][1][2] = 3; + keymap_coords[4][2][0] = 12; + keymap_coords[4][2][2] = 3; + keymap_coords[4][3][0] = 0; + keymap_coords[4][3][1] = 0; + keymap_coords[4][3][2] = 0; + keymap_coords[4][6][0] = 19; + keymap_coords[4][6][2] = 34; + } else if ((split_space == false) && (three_mods_left == true)) { + keymap_coords[4][6][2] = 30; + } + if ((split_space == false) && (three_mods_right == true)) { + keymap_coords[4][9][0] = 57; + keymap_coords[4][9][2] = 1; + keymap_coords[4][10][0] = 62; + keymap_coords[4][10][2] = 1; + keymap_coords[4][11][0] = 67; + keymap_coords[4][11][2] = 1; + } + // Draw modifiers + for (int i = 0; i < 16; i++) { + if (keymap_coords[4][i][2] != 0) { + for (int p = 0; p < keymap_coords[4][i][2]; p++) { + int x = keymap_template[0] + keymap_coords[4][i][0] + 2 + p; + write_pixel(x, 22, true); + } + } + } + // Draw second line for split spacebar + if (split_space == true) { + for (int i = 0; i < 6; i++) { + int x = keymap_template[0] + 46 + 2 + i; + write_pixel(x, 22, true); + } + } +} + +// Update OLED keyboard with ISO layout, update coordinates +static void render_iso(void) { + for (int i = 0; i < 6; i++) { + // Turn off ANSI enter + write_pixel(keymap_template[0] + 73 + i, keymap_template[1] + 12, false); + if (i < 4) { + // Turn off part of ANSI left shift + write_pixel(keymap_template[0] + 10 + i, keymap_template[1] + 17, false); + // Draw vertical line for ISO enter + write_pixel(keymap_template[0] + 79, keymap_template[1] + 8 + i, true); + } + } + // Update locations of shift and grave key highlights + keymap_coords[3][1][2] = 3; + keymap_coords[1][14][0] = 70; + keymap_coords[1][14][1] = 10; + keymap_coords[1][14][2] = 1; +} + +// Toggles pixels surrounding key +static void render_keymap(uint8_t key_row, uint8_t key_col, bool onoff) { + int length = keymap_coords[key_row][key_col][2] + 4; + int left = keymap_coords[key_row][key_col][0] + keymap_template[0]; + int top = keymap_coords[key_row][key_col][1] + keymap_template[1]; + int right = left + length - 1; + int bottom = top + 4; + + // Special case 1 - Draw enter key on ISO layout, return + if ((ansi_layout == false) && (key_row == 2) && (key_col == 14)) { + for (int i = 0; i < 10; i++) { + write_pixel(keymap_template[0] + 81, keymap_template[1] + 5 + i, onoff); + if (i < 5) { + write_pixel(keymap_template[0] + 74, keymap_template[1] + 5 + i, onoff); + } + if (i < 6) { + write_pixel(keymap_template[0] + 75, keymap_template[1] + 9 + i, onoff); + } + if (i < 7) { + write_pixel(keymap_template[0] + 75 + i, keymap_template[1] + 5, onoff); + write_pixel(keymap_template[0] + 75 + i, keymap_template[1] + 14, onoff); + } + } + return; + } + // Draw top and bottom walls (horizontal for px) + for (int x = 0; x < length; x++) { + write_pixel(left + x, top, onoff); + write_pixel(left + x, bottom, onoff); + } + // Draw left and right walls (vertical for 5px) + for (int y = 0; y < 5; y++) { + write_pixel(left, top + y, onoff); + write_pixel(right, top + y, onoff); + } + // Special case 2 - Draw right spacebar on split-space layout + if ((split_space == true) && (key_row == 4) && (key_col == 6)) { + int start = keymap_template[0] + 46; + int stop = keymap_template[0] + 55; + for (int x = start; x < stop; x++) { + write_pixel(x, top, onoff); + write_pixel(x, bottom, onoff); + } + for (int y = 0; y < 5; y++) { + write_pixel(start, top + y, onoff); + write_pixel(stop, top + y, onoff); + } + } +} + +// Write active layer name +static void render_layer_state(void) { + if (oled_horizontal) { + oled_set_cursor(0, 0); + } else { + oled_set_cursor(0, 15); + } + switch (get_highest_layer(layer_state)) { + case _MA: + oled_write_P(PSTR(MA_LAYER_NAME), false); + break; + case _L1: + oled_write_P(PSTR(L1_LAYER_NAME), false); + break; + case _L2: + oled_write_P(PSTR(L2_LAYER_NAME), false); + break; + case _L3: + oled_write_P(PSTR(L3_LAYER_NAME), false); + break; + default: + oled_write("ERROR", false); + break; + } +} + +// Update WPM counters +static void render_wpm_counters(int current_wpm) { + int cursorposition_cur = 2; + int cursorposition_max = 1; + if (oled_horizontal == false) { + cursorposition_cur = 13; + cursorposition_max = 14; + } + + char wpm_counter[4]; + wpm_counter[3] = '\0'; + wpm_counter[2] = '0' + current_wpm % 10; + wpm_counter[1] = '0' + (current_wpm / 10) % 10; + wpm_counter[0] = '0' + (current_wpm / 100) % 10; + oled_set_cursor(0, cursorposition_cur); + oled_write(wpm_counter, false); + + if (current_wpm > max_wpm) { + max_wpm = current_wpm; + wpm_limit = max_wpm + 20; + oled_set_cursor(0, cursorposition_max); + oled_write(wpm_counter, false); + } +} + +// Update WPM snail icon +static void render_wpm_icon(int current_wpm) { + // wpm_icon is used to prevent unnecessary redraw + if ((current_wpm < icon_med_wpm) && (wpm_icon != 0)) { + wpm_icon = 0; + } else if ((current_wpm >= icon_med_wpm) && (current_wpm < icon_fast_wpm) && (wpm_icon != 1)) { + wpm_icon = 1; + } else if ((current_wpm >= icon_fast_wpm) && (wpm_icon != 2)) { + wpm_icon = 2; + } else { + return; + } + static const char PROGMEM snails[][2][24] = { + {{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0xA0, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00}, + {0x40, 0x60, 0x50, 0x4E, 0x51, 0x64, 0x4A, 0x51, 0x54, 0x49, 0x41, 0x62, 0x54, 0x49, 0x46, 0x41, 0x40, 0x30, 0x09, 0x04, 0x02, 0x01, 0x00, 0x00}}, + {{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x04, 0x98, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00}, + {0x60, 0x50, 0x54, 0x4A, 0x51, 0x64, 0x4A, 0x51, 0x55, 0x49, 0x41, 0x62, 0x54, 0x49, 0x46, 0x41, 0x21, 0x10, 0x0A, 0x08, 0x05, 0x02, 0x00, 0x00}}, + {{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x10, 0x10, 0x10, 0x20, 0x40, 0x40, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00}, + {0x60, 0x58, 0x54, 0x62, 0x49, 0x54, 0x52, 0x51, 0x55, 0x49, 0x62, 0x52, 0x4D, 0x45, 0x46, 0x22, 0x21, 0x11, 0x10, 0x0A, 0x08, 0x05, 0x02, 0x00}} + }; + if (oled_horizontal) { + oled_set_cursor(3, 1); + oled_write_raw_P(snails[wpm_icon][0], sizeof(snails[wpm_icon][0])); + oled_set_cursor(3, 2); + oled_write_raw_P(snails[wpm_icon][1], sizeof(snails[wpm_icon][1])); + } else { + oled_set_cursor(0, 11); + oled_write_raw_P(snails[wpm_icon][0], sizeof(snails[wpm_icon][0])); + oled_set_cursor(0, 12); + oled_write_raw_P(snails[wpm_icon][1], sizeof(snails[wpm_icon][1])); + } +} + +// Update WPM graph +static void render_wpm_graph(int current_wpm) { + int line_height = ((current_wpm / graph_top_wpm) * 7); + if (line_height > 7) { + line_height = 7; + } + // Count graph line pixels, return if nothing to draw + int pixel_count = line_height; + for (int i = 0; i < 63; i++) { + pixel_count += graph_lines[i]; + } + if (pixel_count == 0) { + return; + } + // Shift array elements left or right depending on graph_direction, append new graph line + if (graph_direction) { + for (int i = 0; i < 63; i++) { + graph_lines[i] = graph_lines[i + 1]; + } + graph_lines[63] = line_height; + } else { + for (int i = 63; i > 0; i--) { + graph_lines[i] = graph_lines[i - 1]; + } + graph_lines[0] = line_height; + } + // Draw all graph lines (left to right, bottom to top) + int draw_count, arrpos; + for (int x = 1; x <= 127; x += 2) { + arrpos = x / 2; + draw_count = graph_lines[arrpos]; + for (int y = 31; y >= 25; y--) { + if (draw_count > 0) { + write_pixel(x, y, true); + draw_count--; + } else { + write_pixel(x, y, false); + } + } + } +} + +// Call OLED functions +bool oled_task_user(void) { + // Draw OLED keyboard, prevent redraw + if (first_loop) { + render_background(); + render_fn_row(); + if (ansi_layout == false) { + render_iso(); + } + first_loop = false; + } + // Get current WPM, subtract 25% for accuracy and prevent large jumps caused by simultaneous keypresses + int current_wpm = get_current_wpm(); + // Note: This will most likely be removed once QMK's WPM calculation is updated + current_wpm -= current_wpm >> 2; + if (current_wpm > wpm_limit) { + current_wpm = max_wpm; + set_current_wpm(max_wpm); + } + // Write active layer name to display + render_layer_state(); + // Update WPM counters + render_wpm_counters(current_wpm); + // Update WPM snail icon + render_wpm_icon(current_wpm); + // Update WPM graph every graph_refresh milliseconds + if (timer_elapsed(timer) > graph_refresh) { + render_wpm_graph(current_wpm); + timer = timer_read(); + } + return false; +} +#endif + +// Called by QMK during key processing +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + // Forwards keystrokes from an external input device over UART/TRRS + process_record_remote_kb(keycode, record); + + #ifdef OLED_ENABLE + // Toggle pixels surrounding key + render_keymap(record->event.key.row, record->event.key.col, record->event.pressed); + #endif + + return true; +} + +// Rotary encoder - RGB and OLED settings +void change_RGB(bool clockwise) { + // While on any layer except default: // Rotary = RGB Mode + bool shift = get_mods() & MOD_MASK_SHIFT; // Rotary + Shift = OLED Brightness + bool ctrl = get_mods() & MOD_MASK_CTRL; // Rotary + Ctrl = RGB Brightness + bool gui = get_mods() & MOD_MASK_GUI; // Rotary + Gui = RGB Saturation + bool alt = get_mods() & MOD_MASK_ALT; // Rotary + Alt = RGB Hue + + if (clockwise) { + if (shift) { + int new_brightness = oled_get_brightness() + 10; + if (new_brightness < 255) { + oled_set_brightness(new_brightness); + } else { + oled_set_brightness(255); + } + } else if (ctrl) { + rgblight_increase_val(); + } else if (gui) { + rgblight_increase_sat(); + } else if (alt) { + rgblight_increase_hue(); + } else { + rgblight_step(); + } + } else { + if (shift) { + int new_brightness = oled_get_brightness() - 10; + if (new_brightness > 0) { + oled_set_brightness(new_brightness); + } else { + oled_set_brightness(0); + } + } else if (ctrl) { + rgblight_decrease_val(); + } else if (gui) { + rgblight_decrease_sat(); + } else if (alt) { + rgblight_decrease_hue(); + } else { + rgblight_step_reverse(); + } + } +} + +// Rotary encoder behavior - Change volume on default layer, RGB/OLED on other layers +bool encoder_update_user(uint8_t index, bool clockwise) { + if (layer_state_is(0)) { + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + } else { + change_RGB(clockwise); + } + return true; +} + +// Initialize remote keyboard, if connected +void matrix_init_user(void) { + matrix_init_remote_kb(); +} + +// Scan and parse keystrokes from remote keyboard, if connected +void matrix_scan_user(void) { + matrix_scan_remote_kb(); +} diff --git a/keyboards/nullbitsco/nibble/keymaps/snailmap/readme.md b/keyboards/nullbitsco/nibble/keymaps/snailmap/readme.md new file mode 100644 index 000000000000..5ea93b01afbd --- /dev/null +++ b/keyboards/nullbitsco/nibble/keymaps/snailmap/readme.md @@ -0,0 +1,36 @@ + +# SnailMap + +![KeySnail](https://i.imgur.com/yEQJyI2h.png) + +## :snail: Display + +- Mini keyboard that highlights the currently pressed keys +- Snail icon that changes based on the current WPM +- Current and max WPM counters +- Active layer name +- WPM graph + +## :gear: Customization + +The `OLED configuration variables` can be used to easily customize the display + +``` +oled_horizontal - Horizontal or vertical orientation +ansi_layout - ANSI or ISO layout +split_space - Bottom row spacebar +three_mods_left - Left modifier keys +three_mods_right - Right modifier keys +graph_direction - Graph movement direction +graph_refresh - Frequency of graph lines +graph_top_wpm - WPM required to reach the top of the graph +icon_med_wpm - WPM required to display the medium snail +icon_fast_wpm - WPM required to display the fast snail +MA_LAYER_NAME - Layer 0 display name +L1_LAYER_NAME - Layer 1 display name +L2_LAYER_NAME - Layer 2 display name +L3_LAYER_NAME - Layer 3 display name +``` +___ + +###### *Keymap created by* [dogspace](https://github.com/dogspace) diff --git a/keyboards/nullbitsco/nibble/keymaps/snailmap/rules.mk b/keyboards/nullbitsco/nibble/keymaps/snailmap/rules.mk new file mode 100644 index 000000000000..4e0f1b619a23 --- /dev/null +++ b/keyboards/nullbitsco/nibble/keymaps/snailmap/rules.mk @@ -0,0 +1,5 @@ +OLED_ENABLE = yes +WPM_ENABLE = yes +SPACE_CADET_ENABLE = no +GRAVE_ESC_ENABLE = no +MAGIC_ENABLE = no \ No newline at end of file diff --git a/keyboards/nullbitsco/tidbit/keymaps/snailmap_lite/keymap.c b/keyboards/nullbitsco/tidbit/keymaps/snailmap_lite/keymap.c new file mode 100644 index 000000000000..d14723df0348 --- /dev/null +++ b/keyboards/nullbitsco/tidbit/keymaps/snailmap_lite/keymap.c @@ -0,0 +1,289 @@ +/* Copyright 2021 dogspace + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +enum layer_names { + _LAY0, + _LAY1, + _LAY2, + _LAY3 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_LAY0] = LAYOUT( + KC_PSLS, KC_PAST, KC_PMNS, + KC_P7, KC_P8, KC_P9, KC_PPLS, + KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_P1, KC_P2, KC_P3, KC_PENT, + KC_P0, KC_P0, KC_PDOT, KC_PENT + ), + [_LAY1] = LAYOUT( + _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______ + ), + [_LAY2] = LAYOUT( + _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______ + ), + [_LAY3] = LAYOUT( + _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______ + ) +}; + +#ifdef ENCODER_MAP_ENABLE +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), }, + [1] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), }, + [2] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), }, + [3] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), }, +}; +#endif + +#ifdef OLED_ENABLE +/*=========================================== OLED CONFIGURATION ===========================================*/ +#define OLED_ROTATE true // OLED rotation (flip 180* from default orientation) +#define GRAPH_DIRECTION true // Graph movement (true = right to left, false = left to right) +#define GRAPH_TOP_WPM 100.0 // Minimum WPM required to reach the top of the graph +#define GRAPH_REFRESH 1000 // In milliseconds, determines the graph-line frequency +#define ICON_MED_WPM 10 // WPM required to display the medium snail +#define ICON_FAST_WPM 25 // WPM required to display the fast snail + +// Layer names: Should be exactly 5 characters in length if vertical display, or 6 characters if horizontal +#define MA_LAYER_NAME "LAY 0" // Layer _MA name +#define L1_LAYER_NAME "LAY 1" // Layer _L1 name +#define L2_LAYER_NAME "LAY 2" // Layer _L2 name +#define L3_LAYER_NAME "LAY 3" // Layer _L3 name + +#define CAPLCK_STR "CAPLK" // Caps Lock string +#define NUMLCK_STR "NUMLK" // Num Lock string +#define SCRLK_STR "SCRLK" // Scroll Lock string +#define EMPTY_STR " " // Empty string + +/*================================================================================================================*/ + +typedef struct oled_params { + bool first_loop : 1; + uint8_t wpm_icon : 7; + uint16_t timer; + uint8_t wpm_limit; + uint8_t max_wpm; + uint8_t graph_lines[32]; +} oled_params; + +oled_params oled_data; + +void oled_init_data(void) { + // Initialize oled params + oled_data.first_loop = true; + oled_data.wpm_icon = 5; + oled_data.timer = 0; + oled_data.wpm_limit = 20; + oled_data.max_wpm = 0; + + for (int i=0; i<32; i++) { + oled_data.graph_lines[i] = 0; + } +} + +// Set OLED rotation +oled_rotation_t oled_init_user(oled_rotation_t rotation) { + oled_init_data(); + return OLED_ROTATE ? OLED_ROTATION_270 : OLED_ROTATION_90; +} + +// Draw static background image to OLED (keyboard with no bottom row) +static void render_background(void) { + static const char PROGMEM nullbits_n_oled[] = { + 0x00, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xf0, 0xf0, 0xe0, 0x80, 0x20, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, + 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xe0, 0xe0, 0xe0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0xf0, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x07, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x07, 0x03, 0x00, + }; + oled_write_raw_P(nullbits_n_oled, sizeof(nullbits_n_oled)); +} + +// Toggles pixel on/off, converts horizontal coordinates to vertical equivalent if necessary +static void write_pixel(uint8_t x, uint8_t y, bool onoff) { + oled_write_pixel(y, 127 - x, onoff); +} + +// Write active layer name +static void render_layer_state(void) { + oled_set_cursor(0, 15); + switch (get_highest_layer(layer_state)) { + case _LAY0: + oled_write_P(PSTR(MA_LAYER_NAME), false); + break; + case _LAY1: + oled_write_P(PSTR(L1_LAYER_NAME), false); + break; + case _LAY2: + oled_write_P(PSTR(L2_LAYER_NAME), false); + break; + case _LAY3: + oled_write_P(PSTR(L3_LAYER_NAME), false); + break; + default: + oled_write("ERROR", false); + break; + } +} + +// Update WPM counters +static void render_wpm_counters(uint8_t current_wpm) { + uint8_t cursorposition_cur = 13; + uint8_t cursorposition_max = 14; + + oled_set_cursor(0, cursorposition_cur); + oled_write(get_u8_str(current_wpm, '0'), false); + + if (current_wpm > oled_data.max_wpm) { + oled_data.max_wpm = current_wpm; + oled_data.wpm_limit = oled_data.max_wpm + 20; + oled_set_cursor(0, cursorposition_max); + oled_write(get_u8_str(current_wpm, '0'), false); + } +} + +static void render_led_status(void) { + // Host Keyboard LED Status + led_t led_state = host_keyboard_led_state(); + oled_set_cursor(0, 8); + oled_write_P(led_state.caps_lock ? PSTR(CAPLCK_STR) : PSTR(EMPTY_STR), false); + oled_set_cursor(0, 9); + oled_write_P(led_state.num_lock ? PSTR(NUMLCK_STR) : PSTR(EMPTY_STR), false); + oled_set_cursor(0, 10); + oled_write_P(led_state.scroll_lock ? PSTR(SCRLK_STR) : PSTR(EMPTY_STR), false); +} + +// Update WPM snail icon +static void render_wpm_icon(uint8_t current_wpm) { + // wpm_icon is used to prevent unnecessary redraw + if ((current_wpm < ICON_MED_WPM) && (oled_data.wpm_icon != 0)) { + oled_data.wpm_icon = 0; + } else if ((current_wpm >= ICON_MED_WPM) && (current_wpm < ICON_FAST_WPM) && (oled_data.wpm_icon != 1)) { + oled_data.wpm_icon = 1; + } else if ((current_wpm >= ICON_FAST_WPM) && (oled_data.wpm_icon != 2)) { + oled_data.wpm_icon = 2; + } else { + return; + } + static const char PROGMEM snails[][2][24] = { + {{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0xA0, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00}, + {0x40, 0x60, 0x50, 0x4E, 0x51, 0x64, 0x4A, 0x51, 0x54, 0x49, 0x41, 0x62, 0x54, 0x49, 0x46, 0x41, 0x40, 0x30, 0x09, 0x04, 0x02, 0x01, 0x00, 0x00}}, + {{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x04, 0x98, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00}, + {0x60, 0x50, 0x54, 0x4A, 0x51, 0x64, 0x4A, 0x51, 0x55, 0x49, 0x41, 0x62, 0x54, 0x49, 0x46, 0x41, 0x21, 0x10, 0x0A, 0x08, 0x05, 0x02, 0x00, 0x00}}, + {{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x10, 0x10, 0x10, 0x20, 0x40, 0x40, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00}, + {0x60, 0x58, 0x54, 0x62, 0x49, 0x54, 0x52, 0x51, 0x55, 0x49, 0x62, 0x52, 0x4D, 0x45, 0x46, 0x22, 0x21, 0x11, 0x10, 0x0A, 0x08, 0x05, 0x02, 0x00}} + }; + oled_set_cursor(0, 11); + oled_write_raw_P(snails[oled_data.wpm_icon][0], sizeof(snails[oled_data.wpm_icon][0])); + oled_set_cursor(0, 12); + oled_write_raw_P(snails[oled_data.wpm_icon][1], sizeof(snails[oled_data.wpm_icon][1])); +} + +// Update WPM graph +static void render_wpm_graph(uint8_t current_wpm) { + uint8_t line_height = ((current_wpm / GRAPH_TOP_WPM) * 7); + if (line_height > 7) { + line_height = 7; + } + // Count graph line pixels, return if nothing to draw + uint8_t pixel_count = line_height; + for (int i = 0; i < 31; i++) { + pixel_count += oled_data.graph_lines[i]; + } + if (pixel_count == 0) { + return; + } + // Shift array elements left or right depending on GRAPH_DIRECTION pend new graph line + if (GRAPH_DIRECTION) { + for (int i = 0; i < 31; i++) { + oled_data.graph_lines[i] = oled_data.graph_lines[i + 1]; + } + oled_data.graph_lines[31] = line_height; + } else { + for (int i = 31; i > 0; i--) { + oled_data.graph_lines[i] = oled_data.graph_lines[i - 1]; + } + oled_data.graph_lines[0] = line_height; + } + // Draw all graph lines (left to right, bottom to top) + uint16_t draw_count, arrpos; + for (int x = 1; x <= 63; x += 2) { + arrpos = x / 2; + draw_count = oled_data.graph_lines[arrpos]; + for (int y = 31; y >= 25; y--) { + if (draw_count > 0) { + write_pixel(x, y, true); + draw_count--; + } else { + write_pixel(x, y, false); + } + } + } +} + +// Call OLED functions +bool oled_task_user(void) { + // Draw OLED keyboard, prevent redraw + if (oled_data.first_loop) { + render_background(); + oled_data.first_loop = false; + } + // Get current WPM, subtract 25% for accuracy and prevent large jumps caused by simultaneous keypresses + uint8_t current_wpm = get_current_wpm(); + // Write active layer name to display + render_layer_state(); + // Update WPM counters + render_wpm_counters(current_wpm); + // Update WPM snail icon + render_wpm_icon(current_wpm); + // Update LED status + render_led_status(); + // Update WPM graph every graph_refresh milliseconds + if (timer_elapsed(oled_data.timer) > GRAPH_REFRESH) { + render_wpm_graph(current_wpm); + oled_data.timer = timer_read(); + } + return false; +} +#endif + +bool wpm_keycode_user(uint16_t keycode) { + // Count all keycodes on the macropad + return true; +} + diff --git a/keyboards/nullbitsco/tidbit/keymaps/snailmap_lite/rules.mk b/keyboards/nullbitsco/tidbit/keymaps/snailmap_lite/rules.mk new file mode 100644 index 000000000000..605f034e1df8 --- /dev/null +++ b/keyboards/nullbitsco/tidbit/keymaps/snailmap_lite/rules.mk @@ -0,0 +1,7 @@ +OLED_ENABLE = yes +WPM_ENABLE = yes +VIA_ENABLE = yes +SPACE_CADET_ENABLE = no +GRAVE_ESC_ENABLE = no +MAGIC_ENABLE = no +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/numatreus/keymaps/yohewi/keymap.c b/keyboards/numatreus/keymaps/yohewi/keymap.c new file mode 100644 index 000000000000..5b53389f9865 --- /dev/null +++ b/keyboards/numatreus/keymaps/yohewi/keymap.c @@ -0,0 +1,61 @@ +#include QMK_KEYBOARD_H + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. + +enum layer_number { + _QWERTY, + _LOWER, + _RAISE, +}; + +enum custom_keycodes { + BASE = SAFE_RANGE, + LOWER, + RAISE, +}; + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* + * q w e r t || y u i o p + * a s d f g || h j k l ; + * z x c v b || n m , . \ + * esc tab ctl lw spc bspc|| GRV ent RS / alt - + */ + + [_QWERTY] = LAYOUT( /* Qwerty */ + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P , + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN , + SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, SFT_T(KC_BSLS) , + KC_ESC, KC_TAB, KC_LCTL, MO(_LOWER), KC_SPC, KC_BSPC, LALT(KC_GRV), KC_ENT, MO(_RAISE), KC_DOT, KC_RALT, KC_MINS ), + + + /* + * 1 2 3 4 5 || 6 7 8 9 0 + * # < > = - || _ + ENT + * [ ] ( ) & || ` . UP \ + * TRANS TRANS TRANS TRANS TRANS TRANS|| TRANS TRANS RS LEFT DPWM RGHT + */ + [_RAISE] = LAYOUT( /* [> RAISE <] */ + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0 , + KC_HASH, KC_LABK, KC_RABK, KC_EQL, KC_MINS, KC_UNDS, KC_PLUS, KC_TRNS, KC_TRNS, KC_ENT , + KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_AMPR, KC_GRV, KC_TRNS, KC_DOT, KC_UP, KC_BSLS , + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT ), + + /* + * ! @ # $ % || ^ & * ( ) + * F1 F2 F3 F4 F5 || F6 F7 F8 F9 F10 + * F11 F12 reset || , UP \ + * TRNS TRNS TRNS TRNS TRNS TRNS||TRNS TRNS TRNS LEFT DPWM RGHT + */ + + [_LOWER] = LAYOUT( /* [> LOWER <] */ + KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN , + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 , + KC_F11, KC_F12, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_TRNS, KC_QUOT, KC_UP, KC_BSLS , + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, TO(_QWERTY), KC_LEFT, KC_DOWN, KC_RGHT ) +}; diff --git a/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/config.h b/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/config.h new file mode 100644 index 000000000000..a597d848e2e6 --- /dev/null +++ b/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/config.h @@ -0,0 +1,27 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#pragma once + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS diff --git a/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/keymap.c b/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/keymap.c new file mode 100644 index 000000000000..8bc5d09d802b --- /dev/null +++ b/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/keymap.c @@ -0,0 +1,141 @@ +/* Copyright 2020 Toyoshima Hidenori +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see +*/ + +#include QMK_KEYBOARD_H + +enum layers { + _QWERTY, + _LOWER, + _RAISE, + _ADJUST, +}; + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + LOWER, + RAISE, + ADJUST, +}; + +#define EISU LALT(KC_GRV) +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Qwerty + * ,----------------------------------------------------------------------------------------------------------------------. + * | TAB | Q | W | E | R | T | - | | = | Y | U | I | O | P | \ | + * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| + * | Ctrl | A | S | D | F | G | [ | | ] | H | J | K | L | ; | ' | + * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | GUI | | GUI | N | M | , | . | / | Shift| + * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| + * | Ctrl | ESC | ALt | ESC |||||||| Shift| Raise| Space|||||||| enter| Lower| Bcspc|||||||| Left | Down | Up | Right| + * ,----------------------------------------------------------------------------------------------------------------------. + */ + [_QWERTY] = LAYOUT( + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MINS, KC_EQL , KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LBRC, KC_RBRC, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LGUI, KC_RGUI, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_ESC, KC_LALT, KC_ESC, KC_LSFT, RAISE, KC_SPC, KC_ENT, LOWER, KC_BSPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT + ), + + /* Lower + * ,----------------------------------------------------------------------------------------------------------------------. + * | ~ | 1 | 2 | 3 | 4 | 5 | _ | | + | 6 | 7 | 8 | 9 | 0 | | | + * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| + * | Ctrl | ^ | & | * | ( | ) | { | | } | Left | Down | Up | Right| : | " | + * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| + * | Shift| ! | @ | # | $ | % | GUI | | GUI | - | = | < | > | ? | Shift| + * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| + * | Ctrl | ESC | ALt | EISU |||||||| kana | Raise| Space|||||||| Enter| Lower|Delete|||||||| Home |PageDn|PageUp| End | + * ,----------------------------------------------------------------------------------------------------------------------. + */ + [_LOWER] = LAYOUT( + KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_UNDS, KC_PLUS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PIPE, + KC_LCTL, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_LCBR, KC_RCBR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_COLN, KC_DQT , + KC_LSFT, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_LGUI, KC_RGUI, KC_MINS, KC_EQL, KC_LT, KC_GT, KC_QUES, KC_RSFT, + KC_LCTL, KC_ESC, KC_LALT, KC_LNG2, KC_LNG1, RAISE, KC_SPC, KC_ENT, LOWER, KC_DEL, KC_HOME,KC_PGDN, KC_PGUP, KC_END + ), + + /* Raise + * ,----------------------------------------------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | _ | | + | 6 | 7 | 8 | 9 | 0 | | | + * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| + * | Ctrl | ^ | & | * | ( | ) | { | | } | Left | Down | Up | Right| : | " | + * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| + * | Shift| ! | @ | # | $ | % | GUI | | GUI | _ | + | < | > | ? | Shift| + * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| + * | Ctrl | ESC | ALt | EISU |||||||| kana | Raise| Space|||||||| Enter| Lower|Delete|||||||| Home |PageDn|PageUp| End | + * ,----------------------------------------------------------------------------------------------------------------------. + */ + [_RAISE] = LAYOUT( + KC_GRV , KC_1, KC_2, KC_3, KC_4, KC_5, KC_UNDS, KC_PLUS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PIPE, + KC_LCTL, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_LCBR, KC_RCBR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_COLN, KC_DQT , + KC_LSFT, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_LGUI, KC_RGUI, KC_UNDS, KC_PLUS, KC_LT, KC_GT, KC_QUES, KC_RSFT, + KC_LCTL, KC_ESC, KC_LALT, KC_LNG2, KC_LNG1, RAISE, KC_SPC, KC_ENT, LOWER, KC_DEL, KC_HOME, KC_PGDN, KC_PGUP, KC_END + ), + + /* Adjust + * ,----------------------------------------------------------------------------------------------------------------------. + * | | Reset|RGB ON| MODE| HUE-| HUE+| | | | SAT-| SAT+| VAL-| VAL+| | | + * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| + * | F1 | F2 | F3 | F4 | F5 | F6 | | | | F7 | F8 | F9 | F10 | F11 | F12 | + * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| + * | | | | |||||||| | | |||||||| | | |||||||| | | | | + * ,----------------------------------------------------------------------------------------------------------------------. + */ + [_ADJUST] = LAYOUT( + _______, QK_BOOT, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI,_______, _______, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, _______, + _______, _______, BL_TOGG, BL_BRTG, BL_UP , BL_DOWN,_______, _______, _______, _______, _______, _______, _______, _______, + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6 ,_______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + _______, _______, _______, _______, _______,_______,_______, _______,_______, _______, _______, _______, _______, _______ + ) +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + } + return true; +} diff --git a/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/readme.md b/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/readme.md new file mode 100644 index 000000000000..ebc13043a7e0 --- /dev/null +++ b/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/readme.md @@ -0,0 +1,62 @@ +# ToyoshimaHidenori's keymap for Ergodash mini + +This is the ToyoshimaHidenori's keymap configuration for Ergodash mini. +There are four layers, QWERTY(default), LOWER, RAISE and ADJSUT. + +## Layers + +### Qwerty + +``` +,----------------------------------------------------------------------------------------------------------------------. +| TAB | Q | W | E | R | T | - | | = | Y | U | I | O | P | \ | +|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| +| Ctrl | A | S | D | F | G | [ | | ] | H | J | K | L | ; | ' | +|------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| +| Shift| Z | X | C | V | B | GUI | | GUI | N | M | , | . | / | Shift| +|-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| +| Ctrl | ESC | ALt | ESC |||||||| Shift| Raise| Space|||||||| enter| Lower| Bcspc|||||||| Left | Down | Up | Right| +,----------------------------------------------------------------------------------------------------------------------. +``` + +### Lower + +``` +,----------------------------------------------------------------------------------------------------------------------. +| ~ | 1 | 2 | 3 | 4 | 5 | _ | | + | 6 | 7 | 8 | 9 | 0 | | | +|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| +| Ctrl | ^ | & | * | ( | ) | { | | } | Left | Down | Up | Right| : | " | +|------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| +| Shift| ! | @ | # | $ | % | GUI | | GUI | - | = | < | > | ? | Shift| +|-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| +| Ctrl | ESC | ALt | EISU |||||||| kana | Raise| Space|||||||| Enter| Lower|Delete|||||||| Home |PageDn|PageUp| End | +,----------------------------------------------------------------------------------------------------------------------. +``` + +### Raise + +``` +,----------------------------------------------------------------------------------------------------------------------. +| ` | 1 | 2 | 3 | 4 | 5 | _ | | + | 6 | 7 | 8 | 9 | 0 | | | +|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| +| Ctrl | ^ | & | * | ( | ) | { | | } | Left | Down | Up | Right| : | " | +|------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| +| Shift| ! | @ | # | $ | % | GUI | | GUI | _ | + | < | > | ? | Shift| +|-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| +| Ctrl | ESC | ALt | EISU |||||||| kana | Raise| Space|||||||| Enter| Lower|Delete|||||||| Home |PageDn|PageUp| End | +,----------------------------------------------------------------------------------------------------------------------. +``` + +### Adjust + +``` +,----------------------------------------------------------------------------------------------------------------------. +| | Reset|RGB ON| MODE| HUE-| HUE+| | | | SAT-| SAT+| VAL-| VAL+| | | +|------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| +| | | | | | | | | | | | +|------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| +| F1 | F2 | F3 | F4 | F5 | F6 | | | | F7 | F8 | F9 | F10 | F11 | F12 | +|-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| +| | | | |||||||| | | |||||||| | | |||||||| | | | | +,----------------------------------------------------------------------------------------------------------------------. +``` diff --git a/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/rules.mk b/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/rules.mk new file mode 100644 index 000000000000..11b62b9bffeb --- /dev/null +++ b/keyboards/omkbd/ergodash/mini/keymaps/toyoshimahidenori/rules.mk @@ -0,0 +1,3 @@ +BACKLIGHT_ENABLE = yes +RGBLIGHT_ENABLE = yes +AUDIO_ENABLE = no diff --git a/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/config.h b/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/config.h new file mode 100644 index 000000000000..a597d848e2e6 --- /dev/null +++ b/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/config.h @@ -0,0 +1,27 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#pragma once + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS diff --git a/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/keymap.c b/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/keymap.c new file mode 100644 index 000000000000..9636b761bcf3 --- /dev/null +++ b/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/keymap.c @@ -0,0 +1,111 @@ +/* Copyright 2021 Yoshihiro Saito + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ + +#include QMK_KEYBOARD_H + +enum layers { + _QWERTY, + _LOWER, + _RAISE, + _ADJUST, +}; + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + LOWER, + RAISE, + ADJUST, +}; + +// Shift + ( = < +const key_override_t left_paren_angle_bracket_override = ko_make_basic(MOD_MASK_SHIFT, KC_LEFT_PAREN, KC_LEFT_ANGLE_BRACKET); + +// Shift + ) = > +const key_override_t right_paren_angle_bracket_override = ko_make_basic(MOD_MASK_SHIFT, KC_RIGHT_PAREN, KC_RIGHT_ANGLE_BRACKET); + +const key_override_t **key_overrides = (const key_override_t *[]){ + &left_paren_angle_bracket_override, + &right_paren_angle_bracket_override, + NULL +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Qwerty */ + [_QWERTY] = LAYOUT( + QK_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LPRN, KC_RPRN, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LBRC, KC_RBRC, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_DEL, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, XXXXXXX, XXXXXXX, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LGUI, LOWER, CTL_T(KC_SPC), SC_SENT, RAISE, KC_RGUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX + ), + + /* Lower */ + [_LOWER] = LAYOUT( + XXXXXXX, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_F11, KC_GRV, KC_CIRC, KC_AMPR, KC_ASTR, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F12, KC_BSLS, KC_TILD, KC_MINS, KC_EQL, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX, XXXXXXX, KC_PIPE, KC_UNDS, KC_PLUS, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX + ), + + /* Raise */ + [_RAISE] = LAYOUT( + XXXXXXX, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, XXXXXXX, XXXXXXX, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX + ), + + /* Adjust */ + [_ADJUST] = LAYOUT( + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX ,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX ,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX ,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______ ,_______, _______, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX + ), +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + } + return true; +} diff --git a/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/readme.md b/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/readme.md new file mode 100644 index 000000000000..67a6ed9b90fa --- /dev/null +++ b/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/readme.md @@ -0,0 +1,4 @@ +# yoshimaru46's keymap for Ergodash mini + +This is the yoshimaru46's keymap configuration for Ergodash mini. +There are three layers, QWERTY(default), LOWER, and RAISE. diff --git a/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/rules.mk b/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/rules.mk new file mode 100644 index 000000000000..f85c6a4151a4 --- /dev/null +++ b/keyboards/omkbd/ergodash/mini/keymaps/yoshimaru46/rules.mk @@ -0,0 +1,4 @@ +BACKLIGHT_ENABLE = no +RGBLIGHT_ENABLE = no +AUDIO_ENABLE = no +KEY_OVERRIDE_ENABLE = yes diff --git a/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/config.h b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/config.h new file mode 100644 index 000000000000..a597d848e2e6 --- /dev/null +++ b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/config.h @@ -0,0 +1,27 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#pragma once + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS diff --git a/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/keymap.c b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/keymap.c new file mode 100644 index 000000000000..3b52ba975eb9 --- /dev/null +++ b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/keymap.c @@ -0,0 +1,219 @@ +#include QMK_KEYBOARD_H +#include "keymap_japanese.h" + +// clang-format off +enum layers { _QWERTY, _LOWER, _RAISE, _ADJUST }; + +enum custom_keycodes { JP = SAFE_RANGE, US, SHIFT, LOWER, RAISE, ADJUST, + CSTM_0, CSTM_1, CSTM_2, CSTM_3, CSTM_4, CSTM_5, CSTM_6, CSTM_7, CSTM_8, CSTM_9, + CIRC, AT, LBRC, RBRC, BSLS, AMPR, QUOT, LPRN, RPRN, EQL, TILD, PIPE, GRV, LCBR, + PLUS, ASTR, RCBR, UNDS, MINS, SCLN, COMM, DOT, SLSH, EXLM, HASH, DLR, PERC, DEL }; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Qwerty + * ,----------------------------------------------------------------------------------------------------------------------. + * | ESC | 1 | 2 | 3 | 4 | 5 | ZKHK | | ZKHK | 6 | 7 | 8 | 9 | 0 | ` | + * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| + * | TAB | Q | W | E | R | T | MHEN | |HENKAN| Y | U | I | O | P | \ | + * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| + * | CTRL | A | S | D | F | G | EISU | <- ONLY FOR MAC -> | KANA | H | J | K | L | ; | ' | + * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| + * | SHIFT| Z | X | C | V | B | SHIFT| | SHIFT| N | M | , | . | / | SHIFT| + * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| + * | SHIFT|ADJUST| ALT | GUI |||||||| LOWER| SPACE| |||||||| | ENTER| RAISE|||||||| GUI | ALT |ADJUST| SHIFT| + * ,----------------------------------------------------------------------------------------------------------------------. + */ + [_QWERTY] = LAYOUT( + KC_ESC, CSTM_1, CSTM_2, CSTM_3, CSTM_4, CSTM_5, JP_KANA, JP_KANA, CSTM_6, CSTM_7, CSTM_8, CSTM_9, CSTM_0, GRV , + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, JP_MHEN, JP_HENK, KC_Y, KC_U, KC_I, KC_O, KC_P, BSLS , + KC_LGUI, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LNG2, JP_LANG1,KC_H, KC_J, KC_K, KC_L, SCLN, QUOT , + SHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, SHIFT , SHIFT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SHIFT , + SHIFT, ADJUST, KC_LALT, KC_LCTL, LOWER, KC_SPC ,XXXXXXX, XXXXXXX,KC_ENT , RAISE, KC_LCTL, KC_LALT, ADJUST, SHIFT + ), + + /* Lower + * ,----------------------------------------------------------------------------------------------------------------------. + * | F11 | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F12 | + * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | | | + * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| + * | | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | | + * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| + * | |||||||||||||||||||||| - | _ | | | | + | = | [ | ] |||||||| | + * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| + * | | | | |||||||| | ESC | |||||||| | BKSP | |||||||| | | | | + * ,----------------------------------------------------------------------------------------------------------------------. + */ + [_LOWER] = LAYOUT( + KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12 , + TILD, EXLM, AT, HASH, DLR, PERC, _______, _______, CIRC, AMPR, ASTR, LPRN, RPRN, PIPE , + _______, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0 , _______, + _______, XXXXXXX, XXXXXXX, XXXXXXX, MINS, UNDS, _______, _______, PLUS, EQL, LBRC, RBRC, XXXXXXX, _______, + _______, _______, _______, _______, _______, KC_ESC ,_______, _______,KC_BSPC, _______, _______, _______, _______, _______ + ), + + /* Raise + * ,----------------------------------------------------------------------------------------------------------------------. + * | F11 | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F12 | + * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | | | + * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| + * | | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | | + * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| + * | |||||||| [ | ] | - | _ | | | | + | = |||||||||||||||||||||| | + * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| + * | | | | |||||||| | ESC | |||||||| | BKSP | |||||||| | | | | + * ,----------------------------------------------------------------------------------------------------------------------. + */ + [_RAISE] = LAYOUT( + KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12 , + TILD, EXLM, AT, HASH, DLR, PERC, _______, _______, CIRC, AMPR, ASTR, LPRN, RPRN, PIPE , + _______, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0 , _______, + _______, XXXXXXX, LBRC, RBRC, MINS, UNDS, _______, _______, PLUS, EQL, XXXXXXX, XXXXXXX, XXXXXXX, _______, + _______, _______, _______, _______, _______, KC_ESC ,_______, _______,KC_BSPC, _______, _______, _______, _______, _______ + ), + + /* Adjust + * ,----------------------------------------------------------------------------------------------------------------------. + * | | | | | | | US | | JP | | | | | | | + * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| + * | | HOME |PAGEDN|PAGEUP| END |||||||| | | | LEFT | DOWN | UP | RIGHT|||||||| | + * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| + * | | | { | } | | | | | | | | { | } | | | + * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| + * | | | | |||||||| | | |||||||| | | |||||||| | | | | + * ,----------------------------------------------------------------------------------------------------------------------. + */ + [_ADJUST] = LAYOUT( + _______, _______, _______, _______, _______, _______, US , JP, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, XXXXXXX, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, _______, + _______, _______, LCBR, RCBR, _______, _______, _______, _______, _______, _______, LCBR, RCBR, _______, _______, + _______, _______, _______, _______, _______, _______,_______, _______,_______, _______, _______, _______, _______, _______ + )}; +// clang-format on + +#ifdef AUDIO_ENABLE +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +#endif + +#define JP_LAYOUT true +#define US_LAYOUT false + +#ifdef MASTER_LEFT +bool LAYOUT_STATUS = US_LAYOUT; +#else +bool LAYOUT_STATUS = JP_LAYOUT; +#endif + +bool SHIFT_PRESSED = false; + +void persistent_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +#define SEND_STRING_RESTORE(STR) (SHIFT_PRESSED ? SEND_STRING(STR SS_DOWN(X_LSFT)) : SEND_STRING(STR SS_UP(X_LSFT))) + +#define KEY(CODE) (record->event.pressed ? SEND_STRING(SS_DOWN(X_##CODE)) : SEND_STRING_RESTORE(SS_UP(X_##CODE))) + +#define KEY_SHIFT(CODE) (record->event.pressed ? SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_##CODE)) : SEND_STRING_RESTORE(SS_UP(X_##CODE))) + +#define KEY_UPSHIFT(CODE) (record->event.pressed ? SEND_STRING(SS_UP(X_LSFT) SS_DOWN(X_##CODE)) : SEND_STRING_RESTORE(SS_UP(X_##CODE))) + +#define SHIFT_DU(CODE_DOWN, CODE_UP) (SHIFT_PRESSED ? CODE_DOWN : CODE_UP) +#define CASE_US(CODE, US, JP) \ + case CODE: \ + (LAYOUT_STATUS == JP_LAYOUT ? JP : US); \ + return false; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + CASE_US(CSTM_0, KEY(0), SHIFT_DU(KEY_SHIFT(9), KEY(0))); + CASE_US(CSTM_1, KEY(1), KEY(1)); + CASE_US(CSTM_2, KEY(2), SHIFT_DU(KEY_UPSHIFT(LBRACKET), KEY(2))); + CASE_US(CSTM_3, KEY(3), KEY(3)); + CASE_US(CSTM_4, KEY(4), KEY(4)); + CASE_US(CSTM_5, KEY(5), KEY(5)); + CASE_US(CSTM_6, KEY(6), SHIFT_DU(KEY_UPSHIFT(EQUAL), KEY(6))); + CASE_US(CSTM_7, KEY(7), SHIFT_DU(KEY_SHIFT(6), KEY(7))); + CASE_US(CSTM_8, KEY(8), SHIFT_DU(KEY_SHIFT(QUOTE), KEY(8))); + CASE_US(CSTM_9, KEY(9), SHIFT_DU(KEY_SHIFT(8), KEY(9))); + CASE_US(DEL, KEY(DELETE), KEY_UPSHIFT(BSPACE)); + CASE_US(TILD, KEY_SHIFT(GRAVE), KEY_SHIFT(EQUAL)); + CASE_US(EXLM, KEY_SHIFT(1), KEY_SHIFT(1)); + CASE_US(AT, KEY_SHIFT(2), KEY(LBRACKET)); + CASE_US(HASH, KEY_SHIFT(3), KEY_SHIFT(3)); + CASE_US(DLR, KEY_SHIFT(4), KEY_SHIFT(4)); + CASE_US(PERC, KEY_SHIFT(5), KEY_SHIFT(5)); + CASE_US(CIRC, KEY_SHIFT(6), KEY(EQUAL)); + CASE_US(AMPR, KEY_SHIFT(7), KEY_SHIFT(6)); + CASE_US(ASTR, KEY_SHIFT(8), KEY_SHIFT(QUOTE)); + CASE_US(LPRN, KEY_SHIFT(9), KEY_SHIFT(8)); + CASE_US(RPRN, KEY_SHIFT(0), KEY_SHIFT(9)); + CASE_US(LBRC, KEY(LBRACKET), SHIFT_DU(KEY_SHIFT(RBRACKET), KEY(RBRACKET))); + CASE_US(RBRC, KEY(RBRACKET), SHIFT_DU(KEY_SHIFT(NONUS_HASH), KEY(NONUS_HASH))); + CASE_US(LCBR, KEY_SHIFT(LBRACKET), KEY_SHIFT(RBRACKET)); + CASE_US(RCBR, KEY_SHIFT(RBRACKET), KEY_SHIFT(NONUS_HASH)); + CASE_US(GRV, KEY(GRAVE), SHIFT_DU(KEY_SHIFT(EQUAL), KEY_SHIFT(LBRACKET))); + CASE_US(BSLS, KEY(BSLASH), SHIFT_DU(KEY_SHIFT(INT3), KEY(INT3))); + CASE_US(PIPE, KEY_SHIFT(BSLASH), KEY_SHIFT(INT3)); + CASE_US(MINS, KEY(MINUS), SHIFT_DU(KEY_SHIFT(INT1), KEY(MINUS))); + CASE_US(UNDS, KEY_SHIFT(MINUS), KEY_SHIFT(INT1)); + CASE_US(EQL, KEY(EQUAL), SHIFT_DU(KEY_SHIFT(SCOLON), KEY_SHIFT(MINUS))); + CASE_US(PLUS, KEY_SHIFT(EQUAL), KEY_SHIFT(SCOLON)); + CASE_US(SCLN, KEY(SCOLON), SHIFT_DU(KEY_UPSHIFT(QUOTE), KEY(SCOLON))); + CASE_US(QUOT, KEY(QUOTE), SHIFT_DU(KEY_SHIFT(2), KEY_SHIFT(7))); + case JP: + if (record->event.pressed) { + LAYOUT_STATUS = JP_LAYOUT; + } + return false; + break; + case US: + if (record->event.pressed) { + LAYOUT_STATUS = US_LAYOUT; + } + return false; + break; + case SHIFT: + if (record->event.pressed) { + SEND_STRING(SS_DOWN(X_LSFT)); + SHIFT_PRESSED = true; + } else { + SEND_STRING(SS_UP(X_LSFT)); + SHIFT_PRESSED = false; + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + } else { + layer_off(_LOWER); + } + update_tri_layer(_LOWER, _RAISE, _ADJUST); + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + } else { + layer_off(_RAISE); + } + update_tri_layer(_LOWER, _RAISE, _ADJUST); + return false; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + } + return true; +} diff --git a/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/m47ch4ns_keymap.json b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/m47ch4ns_keymap.json new file mode 100644 index 000000000000..1f5eee601462 --- /dev/null +++ b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/m47ch4ns_keymap.json @@ -0,0 +1 @@ +{"keyboard":"ergodash/rev1","keymap":"m47ch4ns_keymap","layout":"LAYOUT_3key_1us","layers":[["KC_ESC","KC_1","KC_2","KC_3","KC_4","KC_5","KC_NO","KC_NO","KC_6","KC_7","KC_8","KC_9","KC_0","KC_GRV","KC_TAB","KC_Q","KC_W","KC_E","KC_R","KC_T","KC_NO","KC_NO","KC_Y","KC_U","KC_I","KC_O","KC_P","KC_BSLS","KC_LCTL","KC_A","KC_S","KC_D","KC_F","KC_G","KC_NO","KC_NO","KC_H","KC_J","KC_K","KC_L","KC_SCLN","KC_QUOT","KC_LSFT","KC_Z","KC_X","KC_C","KC_V","KC_B","KC_LSFT","KC_RSFT","KC_N","KC_M","KC_COMM","KC_DOT","KC_SLSH","KC_RSFT","KC_LSFT","ANY(ADJUST)","KC_LALT","KC_LGUI","ANY(LOWER)","KC_SPC","KC_ENT","ANY(RAISE)","KC_RGUI","KC_RALT","ANY(ADJUST)","KC_RSFT"],["KC_F11","KC_F1","KC_F2","KC_F3","KC_F4","KC_F5","KC_TRNS","KC_TRNS","KC_F6","KC_F7","KC_F8","KC_F9","KC_F10","KC_F12","KC_TRNS","KC_EXLM","KC_AT","KC_HASH","KC_DLR","KC_PERC","KC_TRNS","KC_TRNS","KC_CIRC","KC_AMPR","KC_ASTR","KC_LPRN","KC_RPRN","KC_PIPE","KC_TRNS","KC_1","KC_2","KC_3","KC_4","KC_5","KC_TRNS","KC_TRNS","KC_6","KC_7","KC_8","KC_9","KC_0","KC_TRNS","KC_TRNS","KC_NO","KC_NO","KC_NO","KC_MINS","KC_UNDS","KC_TRNS","KC_TRNS","KC_PLUS","KC_EQL","KC_LBRC","KC_RBRC","KC_NO","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_ESC","KC_BSPC","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS"],["KC_F11","KC_F1","KC_F2","KC_F3","KC_F4","KC_F5","KC_TRNS","KC_TRNS","KC_F6","KC_F7","KC_F8","KC_F9","KC_F10","KC_F12","KC_TRNS","KC_EXLM","KC_AT","KC_HASH","KC_DLR","KC_PERC","KC_TRNS","KC_TRNS","KC_CIRC","KC_AMPR","KC_ASTR","KC_LPRN","KC_RPRN","KC_PIPE","KC_TRNS","KC_1","KC_2","KC_3","KC_4","KC_5","KC_TRNS","KC_TRNS","KC_6","KC_7","KC_8","KC_9","KC_0","KC_TRNS","KC_TRNS","KC_NO","KC_LBRC","KC_RBRC","KC_MINS","KC_UNDS","KC_TRNS","KC_TRNS","KC_PLUS","KC_EQL","KC_NO","KC_NO","KC_NO","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_ESC","KC_BSPC","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS"],["KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_HOME","KC_PGDN","KC_PGUP","KC_END","KC_TRNS","KC_TRNS","KC_TRNS","KC_LEFT","KC_DOWN","KC_UP","KC_RGHT","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_LCBR","KC_RCBR","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS"]],"author":"","notes":""} \ No newline at end of file diff --git a/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/readme.md b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/readme.md new file mode 100644 index 000000000000..598f258e1c0c --- /dev/null +++ b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/readme.md @@ -0,0 +1,73 @@ +# m47ch4n's keymap for Ergodash rev1 + +This is the m47ch4n's keymap configuration for Ergodash rev1. +There are four layers, QWERTY(default), LOWER, RAISE and ADJSUT. + +## Layers + +### Qwerty + +``` +,----------------------------------------------------------------------------------------------------------------------. +| ESC | 1 | 2 | 3 | 4 | 5 | ZKHK | | ZKHK | 6 | 7 | 8 | 9 | 0 | ` | +|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| +| TAB | Q | W | E | R | T | MHEN | |HENKAN| Y | U | I | O | P | \ | +|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| +| CTRL | A | S | D | F | G | EISU |<-- ONLY FOR MAC -->| KANA | H | J | K | L | ; | ' | +|------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| +| SHIFT| Z | X | C | V | B | SHIFT| | SHIFT| N | M | , | . | / | SHIFT| +|-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| +| SHIFT|ADJUST| ALT | GUI |||||||| LOWER| SPACE| |||||||| | ENTER| RAISE|||||||| GUI | ALT |ADJUST| SHIFT| +,----------------------------------------------------------------------------------------------------------------------. +``` + +### Lower + +``` +,----------------------------------------------------------------------------------------------------------------------. +| F11 | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F12 | +|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| +| ~ | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | | | +|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| +| | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | | +|------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| +| |||||||||||||||||||||| - | _ | | | | + | = | [ | ] |||||||| | +|-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| +| | | | |||||||| | ESC | |||||||| | BKSP | |||||||| | | | | +,----------------------------------------------------------------------------------------------------------------------. +``` + +### Raise + +``` +,----------------------------------------------------------------------------------------------------------------------. +| F11 | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F12 | +|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| +| ~ | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | | | +|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| +| | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | | +|------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| +| |||||||| [ | ] | - | _ | | | | + | = |||||||||||||||||||||| | +|-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| +| | | | |||||||| | ESC | |||||||| | BKSP | |||||||| | | | | +,----------------------------------------------------------------------------------------------------------------------. +``` + +### Adjust + +``` +,----------------------------------------------------------------------------------------------------------------------. +| | | | | | | US | | JP | | | | | | | +|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| +| | | | | | | | | | | | | | | | +|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| +| | HOME |PAGEDN|PAGEUP| END |||||||| | | | LEFT | DOWN | UP | RIGHT|||||||| | +|------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| +| | | { | } | | | | | | | | { | } | | | +|-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| +| | | | |||||||| | | |||||||| | | |||||||| | | | | +,----------------------------------------------------------------------------------------------------------------------. +``` + +If your pc connect this keyboard with JIS(JP) layout, you should press JP MODE key. + diff --git a/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/rules.mk b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/rules.mk new file mode 100644 index 000000000000..bb9e33b08297 --- /dev/null +++ b/keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/rules.mk @@ -0,0 +1,3 @@ +BACKLIGHT_ENABLE = no +RGBLIGHT_ENABLE = no +AUDIO_ENABLE = no diff --git a/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/config.h b/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/config.h new file mode 100644 index 000000000000..2493fe09e224 --- /dev/null +++ b/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/config.h @@ -0,0 +1,30 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#pragma once + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +#define LEADER_PER_KEY_TIMING +#define LEADER_TIMEOUT 250 diff --git a/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/keymap.c b/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/keymap.c new file mode 100644 index 000000000000..e197874ab576 --- /dev/null +++ b/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/keymap.c @@ -0,0 +1,199 @@ +#include QMK_KEYBOARD_H + + +enum layers { + _WINDOWS, + _LINUX, + _NUMPAD, + _LOWER, + _RAISE, + _ADJUST, +}; + +enum custom_keycodes { + WINDOWS = SAFE_RANGE, + LINUX, + NUMPAD, + LOWER, + RAISE, + ADJUST +}; + +#define CTL_ENT MT(MOD_RCTL, KC_PENT) +#define NUMPAD MO(_NUMPAD) +#define SHELL LCA(KC_T) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Windows Qwerty + * .---------------------------------------------------------------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | - | | = | 6 | 7 | 8 | 9 | 0 |BSpace | + * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| + * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ | + * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| + * | Esc | A | S | D | F | G | Home | | Del | H | J | K | L | : | ' | + * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| + * | Shift | Z | X | C | V | B | - | | = | N | M | , | . | / | Shift | + * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| + * | LCtrl | LGUI | LAlt |Numpad ||||||||| Space | Lower | Enter ||||||||| Enter | Raise |BSpace ||||||||| F5 | RAlt | RGui |Ctl/Ent| + * .---------------------------------------------------------------------------------------------------------------------------------------. + */ + [_WINDOWS] = LAYOUT( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_HOME, KC_DEL, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MINS, KC_EQL, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, NUMPAD, KC_SPC, LOWER, KC_ENT, KC_ENT, RAISE, KC_BSPC, KC_F5, KC_RALT, KC_RGUI, CTL_ENT + ), + + /* Linux Qwerty + * .---------------------------------------------------------------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | - | | = | 6 | 7 | 8 | 9 | 0 |BSpace | + * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| + * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ | + * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| + * | Esc | A | S | D | F | G | Home | | Del | H | J | K | L | : | ' | + * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| + * | Shift | Z | X | C | V | B | - | | = | N | M | , | . | / | Shift | + * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| + * | LCtrl | LGUI | LAlt |Numpad ||||||||| Space | Lower | Enter ||||||||| Enter | Raise |BSpace ||||||||| Shell | RAlt | RGui |Ctl/Ent| + * .---------------------------------------------------------------------------------------------------------------------------------------. + */ + [_LINUX] = LAYOUT( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_HOME, KC_DEL, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MINS, KC_EQL, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LGUI, KC_LALT, NUMPAD, KC_SPC, LOWER, KC_ENT, KC_ENT, RAISE, KC_BSPC, SHELL, KC_RALT, KC_RGUI, CTL_ENT + ), + + /* Numpad + * .---------------------------------------------------------------------------------------------------------------------------------------. + * |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|NumLock| / | * | - |XXXXXXX| + * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| + * |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX| 7 | 8 | 9 | |XXXXXXX| + * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+ + +-------| + * |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX| 4 | 5 | 6 | |XXXXXXX| + * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| + * |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX| 1 | 2 | 3 | |XXXXXXX| + * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+ Enter +-------| + * |XXXXXXX|XXXXXXX|XXXXXXX|Numpad |||||||||XXXXXXX|XXXXXXX|XXXXXXX|||||||||XXXXXXX|XXXXXXX|XXXXXXX||||||||| 0 | . | | Enter | + * .---------------------------------------------------------------------------------------------------------------------------------------. + */ + [_NUMPAD] = LAYOUT( + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, KC_BSPC, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, NUMPAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_0, KC_PDOT, KC_PENT, KC_PENT + ), + + /* Lower + * .---------------------------------------------------------------------------------------------------------------------------------------. + * | F11 | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F12 | + * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| + * | | | | ( | { | [ | | | | ] | } | ) | | | | + * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| + * | | | | | |PageUp | | | | | | | | | | + * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| + * | |VolDown| VolUp | | |PageDwn| | | | | | | | | | + * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| + * | | | | ||||||||| | Lower | ||||||||| | Raise | ||||||||| | | | | + * .---------------------------------------------------------------------------------------------------------------------------------------. + */ + [_LOWER] = LAYOUT( + KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12, + _______, _______, _______, KC_LPRN, KC_LCBR, KC_LBRC, _______, _______, KC_RBRC, KC_RCBR, KC_RPRN, _______, _______, _______, + _______, _______, _______, _______, _______, KC_PGUP, _______, _______, _______, _______, _______, _______, _______, _______, + KC_CAPS, KC_VOLD, KC_VOLU, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______, _______, KC_CAPS, + _______, _______, _______, _______, _______, LOWER, _______, _______, RAISE, _______, _______, _______, _______, _______ + ), + + /* Raise + * .---------------------------------------------------------------------------------------------------------------------------------------. + * | F11 | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F12 | + * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| + * | | | | ( | { | [ | | | | ] | } | ) | | | | + * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| + * | | | | | | | End | | | Left | Down | Up | Right | | | + * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| + * | | | | | | | | | | | | | | | | + * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| + * | | | | ||||||||| | Lower | ||||||||| | Raise | ||||||||| | | | | + * .---------------------------------------------------------------------------------------------------------------------------------------. + */ + [_RAISE] = LAYOUT( + KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12, + _______, _______, _______, KC_LPRN, KC_LCBR, KC_LBRC, _______, _______, KC_RBRC, KC_RCBR, KC_RPRN, _______, _______, _______, + _______, _______, _______, _______, _______, _______, KC_END, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, + KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_MPLY, KC_CAPS, + _______, _______, _______, _______, _______, LOWER, _______, _______, RAISE, _______, _______, _______, _______, _______ + ), + + /* Adjust + * .---------------------------------------------------------------------------------------------------------------------------------------. + * |XXXXXXX|Windows| Linux |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| + * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| + * |XXXXXXX|XXXXXXX|XXXXXXX| Cycle |On/Off |XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|On/Off | Cycle |XXXXXXX|XXXXXXX|XXXXXXX| + * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| + * | Reset |XXXXXXX|XXXXXXX|Breathe| Inc |XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|Hue inc|Sat inc| Inc |XXXXXXX|XXXXXXX| + * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| + * |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| Dec |XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|Hue dec|Sat dec| Dec |XXXXXXX|XXXXXXX| + * |-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| + * |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|||||||||XXXXXXX| Lower |XXXXXXX|||||||||XXXXXXX| Raise |XXXXXXX|||||||||XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| + * .---------------------------------------------------------------------------------------------------------------------------------------. + */ + [_ADJUST] = LAYOUT( + XXXXXXX, WINDOWS, LINUX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, BL_STEP, BL_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, XXXXXXX, XXXXXXX, XXXXXXX, + QK_BOOT, XXXXXXX, XXXXXXX, BL_BRTG, BL_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_DOWN, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX + ) +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case WINDOWS: + if (record->event.pressed) { + set_single_persistent_default_layer(_WINDOWS); + } + return false; + break; + case LINUX: + if (record->event.pressed) { + set_single_persistent_default_layer(_LINUX); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + } + return true; +} diff --git a/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/readme.md b/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/readme.md new file mode 100644 index 000000000000..7ab665a8d419 --- /dev/null +++ b/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/readme.md @@ -0,0 +1,89 @@ +# ShadowProgr's layout for ErgoDash + +There are 2 different QWERTY base layers for use with Windows and Linux OSes. Beside those 2 there are also a numpad layer and 3 modifier layers (lower, raise and adjust). + +## Layouts +### Windows +``` +.---------------------------------------------------------------------------------------------------------------------------------------. +| ` | 1 | 2 | 3 | 4 | 5 | - | | = | 6 | 7 | 8 | 9 | 0 |BSpace | +|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| +| Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ | +|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| +| Esc | A | S | D | F | G | Home | | Del | H | J | K | L | : | ' | +|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| +| Shift | Z | X | C | V | B | - | | = | N | M | , | . | / | Shift | +|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| +| LCtrl | LGUI | LAlt |Numpad ||||||||| Space | Lower | Enter ||||||||| Enter | Raise |BSpace ||||||||| F5 | RAlt | RGui |Ctl/Ent| +.---------------------------------------------------------------------------------------------------------------------------------------. +``` +### Linux +``` +.---------------------------------------------------------------------------------------------------------------------------------------. +| ` | 1 | 2 | 3 | 4 | 5 | - | | = | 6 | 7 | 8 | 9 | 0 |BSpace | +|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| +| Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ | +|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| +| Esc | A | S | D | F | G | Home | | Del | H | J | K | L | : | ' | +|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| +| Shift | Z | X | C | V | B | - | | = | N | M | , | . | / | Shift | +|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| +| LCtrl | LGUI | LAlt |Numpad ||||||||| Space | Lower | Enter ||||||||| Enter | Raise |BSpace ||||||||| Shell | RAlt | RGui |Ctl/Ent| +.---------------------------------------------------------------------------------------------------------------------------------------. +``` +### Numpad +``` +.---------------------------------------------------------------------------------------------------------------------------------------. +|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|NumLock| / | * | - |XXXXXXX| +|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| +|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX| 7 | 8 | 9 | |XXXXXXX| +|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+ + +-------| +|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX| 4 | 5 | 6 | |XXXXXXX| +|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| +|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX| 1 | 2 | 3 | |XXXXXXX| +|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+ Enter +-------| +|XXXXXXX|XXXXXXX|XXXXXXX|Numpad |||||||||XXXXXXX|XXXXXXX|XXXXXXX|||||||||XXXXXXX|XXXXXXX|XXXXXXX||||||||| 0 | . | | Enter | +.---------------------------------------------------------------------------------------------------------------------------------------. +``` +### Lower +``` +.---------------------------------------------------------------------------------------------------------------------------------------. +| F11 | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F12 | +|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| +| | | | ( | { | [ | | | | ] | } | ) | | | | +|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| +| | | | | |PageUp | | | | | | | | | | +|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| +| |VolDown| VolUp | | |PageDwn| | | | | | | | | | +|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| +| | | | ||||||||| | Lower | ||||||||| | Raise | ||||||||| | | | | +.---------------------------------------------------------------------------------------------------------------------------------------. +``` +### Raise +``` +.---------------------------------------------------------------------------------------------------------------------------------------. +| F11 | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F12 | +|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| +| | | | ( | { | [ | | | | ] | } | ) | | | | +|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| +| | | | | | | End | | | Left | Down | Up | Right | | | +|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| +| | | | | | | | | | | | | | | | +|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| +| | | | ||||||||| | Lower | ||||||||| | Raise | ||||||||| | | | | +.---------------------------------------------------------------------------------------------------------------------------------------. +``` +### Adjust +``` +.---------------------------------------------------------------------------------------------------------------------------------------. +|XXXXXXX|Windows| Linux |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| +|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| +|XXXXXXX|XXXXXXX|XXXXXXX| Cycle |On/Off |XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|On/Off | Cycle |XXXXXXX|XXXXXXX|XXXXXXX| +|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| +| Reset |XXXXXXX|XXXXXXX|Breathe| Inc |XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|Hue inc|Sat inc| Inc |XXXXXXX|XXXXXXX| +|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| +|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| Dec |XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|Hue dec|Sat dec| Dec |XXXXXXX|XXXXXXX| +|-------+-------+-------+-------+-------+-------+-------+-----------------------+-------+-------+-------+-------+-------+-------+-------| +|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|||||||||XXXXXXX| Lower |XXXXXXX|||||||||XXXXXXX| Raise |XXXXXXX|||||||||XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| +.---------------------------------------------------------------------------------------------------------------------------------------. +``` \ No newline at end of file diff --git a/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/rules.mk b/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/rules.mk new file mode 100644 index 000000000000..30d8419904e9 --- /dev/null +++ b/keyboards/omkbd/ergodash/rev1/keymaps/shadowprogr/rules.mk @@ -0,0 +1,3 @@ +BACKLIGHT_ENABLE = yes +RGBLIGHT_ENABLE = yes +AUDIO_ENABLE = no \ No newline at end of file diff --git a/keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/config.h b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/config.h new file mode 100644 index 000000000000..818ea7d4af48 --- /dev/null +++ b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/config.h @@ -0,0 +1,26 @@ +/* Copyright 2021 omkbd + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#define RGB_MATRIX_FRAMEBUFFER_EFFECTS +//#define USE_MATRIX_I2C + +/* Select hand configuration */ + +// #define MASTER_LEFT +// #define MASTER_RIGHT +#define EE_HANDS diff --git a/keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/keymap.c b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/keymap.c new file mode 100644 index 000000000000..e23ba19d7a16 --- /dev/null +++ b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/keymap.c @@ -0,0 +1,60 @@ +/* Copyright 2021 omkbd + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +enum layer_number { + _QWERTY = 0, + _NAV, + _SYMBOL, + _MEDIA +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_QWERTY] = LAYOUT( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, + KC_LCTL, KC_LALT, KC_LGUI, MO(2), MO(1), KC_SPC, KC_SPC, MO(1), MO(2), KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT +), + +[_NAV] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, + KC_TRNS, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_TRNS, KC_TRNS, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_PGUP, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END +), + +[_SYMBOL] = LAYOUT( + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_UNDS, KC_PLUS, KC_BSPC, + KC_TRNS, KC_NO, KC_P7, KC_P8, KC_P9, KC_NO, KC_LPRN, KC_RPRN, KC_UNDS, KC_PLUS, KC_NO, KC_LCBR, KC_RCBR, KC_PIPE, + KC_ESC, KC_NO, KC_P4, KC_P5, KC_P6, KC_NO, KC_LCBR, KC_RCBR, KC_MINS, KC_EQL, KC_COLN, KC_DQUO, KC_TRNS, KC_TRNS, + KC_TRNS, KC_NO, KC_P1, KC_P2, KC_P3, KC_NO, KC_LBRC, KC_RBRC, KC_LT, KC_GT, KC_QUES, KC_TRNS, KC_UP, KC_TRNS, + KC_TRNS, KC_TRNS, KC_P0, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT +), + +[_MEDIA] = LAYOUT( + KC_NO, KC_SCRL, KC_PAUS, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MRWD, KC_MPLY, KC_MFFD, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, + RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_NO, KC_NO, KC_NO, KC_NO, KC_MPLY, KC_NO, KC_NO, KC_NO, + KC_NO, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, RGB_M_P, RGB_M_B, RGB_M_SW, RGB_M_G, KC_NO, KC_NO, KC_MUTE, KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLU, KC_NO, + KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_MRWD, KC_VOLD, KC_MFFD +) + +}; diff --git a/keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/rules.mk b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/rules.mk new file mode 100644 index 000000000000..8110dbaa1f9f --- /dev/null +++ b/keyboards/omkbd/runner3680/5x6_5x8/keymaps/derekhsu/rules.mk @@ -0,0 +1,3 @@ +RGB_MATRIX_ENABLE = yes +EXTRAKEY_ENABLE = yes +VIA_ENABLE = yes diff --git a/keyboards/orthodox/keymaps/rfvizarra/config.h b/keyboards/orthodox/keymaps/rfvizarra/config.h new file mode 100644 index 000000000000..92b3713350c1 --- /dev/null +++ b/keyboards/orthodox/keymaps/rfvizarra/config.h @@ -0,0 +1,41 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert +Copyright 2017 Art Ortenburger + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + + +#ifdef AUDIO_ENABLE +#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \ + SONG(COLEMAK_SOUND), \ + SONG(DVORAK_SOUND) \ +} +#endif + +#define USE_I2C + +/* Select hand configuration */ + +// #define MASTER_LEFT +// #define MASTER_RIGHT +#define EE_HANDS + +#endif diff --git a/keyboards/orthodox/keymaps/rfvizarra/keymap.c b/keyboards/orthodox/keymaps/rfvizarra/keymap.c new file mode 100644 index 000000000000..af9f8d5e20c7 --- /dev/null +++ b/keyboards/orthodox/keymaps/rfvizarra/keymap.c @@ -0,0 +1,134 @@ +/* +This is the keymap for the keyboard + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert +Copyright 2017 Art Ortenburger + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include QMK_KEYBOARD_H + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _NAV 5 +#define _NAV2 6 +#define _MEDIA 7 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_QWERTY] = LAYOUT( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LGUI, KC_LALT, MO(_MEDIA) , KC_DEL, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + MO(_NAV),KC_Z, KC_X, KC_C, KC_V, KC_B, MO(_LOWER), KC_LSFT, CTL_T(KC_ENT), KC_RALT, KC_SPC, MO(_RAISE), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LGUI + ), + + [_COLEMAK] = LAYOUT( + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, + KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_UP, KC_DOWN, KC_LEFT, KC_RIGHT, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, + KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(_LOWER), KC_SPACE, KC_BSPC, KC_DEL, KC_ENT, MO(_RAISE), KC_K, KC_M, KC_COMM, KC_DOT, KC_SLASH, KC_LGUI + ), + + [_DVORAK] = LAYOUT( + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, + KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_UP, KC_DOWN, KC_LEFT, KC_RIGHT, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, + KC_LCTL, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, MO(_LOWER), KC_SPACE, KC_BSPC, KC_DEL, KC_ENT, MO(_RAISE), KC_B, KC_M, KC_W, KC_V, KC_Z, KC_LGUI + ), + + [_LOWER] = LAYOUT( + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_LCTL, _______, _______, KC_RCTL, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, _______, _______, _______, _______, _______, KC_F12, KC_HOME, KC_COMM, KC_DOT, KC_END, _______ + ), + + [_RAISE] = LAYOUT( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, _______, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, _______, _______, _______, _______, _______, KC_F12, KC_PGUP, KC_COMM, KC_DOT, KC_PGDN, _______ + ), + + [_NAV] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [_NAV2] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [_MEDIA] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_MPLY, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [_ADJUST] = LAYOUT( + _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, AU_ON, AU_OFF, AG_NORM, _______, _______, _______, _______, AG_SWAP, QWERTY , COLEMAK, DVORAK, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY + ) + + +}; + +layer_state_t layer_state_set_user(layer_state_t state) { + state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); + state = update_tri_layer_state(state, _LOWER, _NAV, _NAV2); + return state; +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + set_single_persistent_default_layer(_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + set_single_persistent_default_layer(_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + set_single_persistent_default_layer(_DVORAK); + } + return false; + break; + } + return true; +} + diff --git a/keyboards/orthodox/keymaps/rfvizarra/readme.md b/keyboards/orthodox/keymaps/rfvizarra/readme.md new file mode 100644 index 000000000000..10a60ebfd345 --- /dev/null +++ b/keyboards/orthodox/keymaps/rfvizarra/readme.md @@ -0,0 +1,19 @@ +# A personal Orthodox Layout + +![Orthodox](https://i.imgur.com/RQ5SKj4.jpg) + +This is the layout for my daily driver orthodox. It's based on a custom handwire keyboard that I've been using for quite some time. It's based on Plank's/Let's split layouts for the lower/raise layers. I added the shift, control/enter, alt/altgr and del to the thumb cluster. + +To build the firmware run from qmk's project folder + + make orthodox/rev3:rfvizarra + +And to flash it, run + + make orthodox/rev3:rfvizarra:avrdude + +reset your keyboard pro micro while connected to the PC with a micro usb cable. + +Repeat on both halves. + +See [install build tools](https://docs.qmk.fm/install-build-tools) then the [build/compile instructions](https://docs.qmk.fm/build-compile-instructions) for more information. diff --git a/keyboards/p3d/q4z/keymaps/rjboone/config.h b/keyboards/p3d/q4z/keymaps/rjboone/config.h new file mode 100644 index 000000000000..9264f33bae94 --- /dev/null +++ b/keyboards/p3d/q4z/keymaps/rjboone/config.h @@ -0,0 +1,21 @@ +/* Copyright 2021 rjboone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#pragma once + +#undef TAPPING_TERM +#define TAPPING_TERM 300 + +#define COMBO_TERM 50 diff --git a/keyboards/p3d/q4z/keymaps/rjboone/keymap.c b/keyboards/p3d/q4z/keymaps/rjboone/keymap.c new file mode 100644 index 000000000000..c54ec014ec95 --- /dev/null +++ b/keyboards/p3d/q4z/keymaps/rjboone/keymap.c @@ -0,0 +1,107 @@ +/* Copyright 2021 rjboone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + +enum layers{ + _BASE, + _NUM_SYM, + _NAV, + _GAME +}; + +enum combo_events { + COMBO_BSPC, + COMBO_NUMBAK, + COMBO_TAB, + COMBO_ESC, + COMBO_DEL, +}; + +#define KC_GA LGUI_T(KC_A) +#define KC_AS LALT_T(KC_S) +#define KC_CD LCTL_T(KC_D) +#define KC_SF LSFT_T(KC_F) +#define KC_SJ RSFT_T(KC_J) +#define KC_CK RCTL_T(KC_K) +#define KC_AL RALT_T(KC_L) +#define KC_GSCLN RGUI_T(KC_SCLN) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT( + KC_1, KC_2, KC_3, KC_4, KC_5, + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, + KC_A, KC_S, KC_D, KC_SF, KC_G, KC_H, KC_SJ, KC_K, KC_L, KC_SCLN, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, + KC_LCTL, KC_LALT, KC_LGUI, LT(_NUM_SYM, KC_ENT), KC_SPC, MO(_NAV), TG(_GAME), KC_SLSH + ), + + [_NUM_SYM] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_LBRC, KC_RBRC, KC_EQL, KC_TRNS, KC_TRNS, KC_QUOT, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RSFT, KC_TRNS, KC_TRNS, KC_BSLS + ), + + [_NAV] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + [_GAME] = LAYOUT( + KC_1, KC_2, KC_3, KC_4, KC_5, + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, KC_NO, KC_NO, KC_NO, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, KC_NO, KC_NO, KC_NO, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_NO, KC_NO, KC_NO, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_ENT, KC_NO, TG(_GAME), KC_NO + ), +}; + +#ifdef COMBO_ENABLE +const uint16_t PROGMEM combo_bspc[] = {KC_O, KC_P, COMBO_END}; +const uint16_t PROGMEM combo_numbak[] = {KC_0, KC_9, COMBO_END}; +const uint16_t PROGMEM combo_tab[] = {KC_A, KC_S, COMBO_END}; +const uint16_t PROGMEM combo_esc[] = {KC_Q, KC_W, COMBO_END}; +const uint16_t PROGMEM combo_del[] = {KC_MINS, KC_EQL, COMBO_END}; + +combo_t key_combos[] = { + [COMBO_BSPC] = COMBO(combo_bspc,KC_BSPC), + [COMBO_NUMBAK] = COMBO(combo_numbak,KC_BSPC), + [COMBO_TAB] = COMBO(combo_tab,KC_TAB), + [COMBO_ESC] = COMBO(combo_esc,KC_ESC), + [COMBO_DEL] = COMBO(combo_del,KC_DEL), + +}; +#endif + +layer_state_t layer_state_set_user(layer_state_t state) { + +#ifdef COMBO_ENABLE + switch(get_highest_layer(state)) { + case _GAME: + combo_disable(); + break; + default: + combo_enable(); + break; + } +#endif // COMBO_ENABLE + + return state; +} diff --git a/keyboards/p3d/q4z/keymaps/rjboone/readme.md b/keyboards/p3d/q4z/keymaps/rjboone/readme.md new file mode 100644 index 000000000000..29f2d31f6ff4 --- /dev/null +++ b/keyboards/p3d/q4z/keymaps/rjboone/readme.md @@ -0,0 +1 @@ +# Default Le Chiffre Keymap diff --git a/keyboards/p3d/q4z/keymaps/rjboone/rules.mk b/keyboards/p3d/q4z/keymaps/rjboone/rules.mk new file mode 100644 index 000000000000..ab1e438182a3 --- /dev/null +++ b/keyboards/p3d/q4z/keymaps/rjboone/rules.mk @@ -0,0 +1 @@ +COMBO_ENABLE = yes diff --git a/keyboards/pierce/keymaps/durken1/config.h b/keyboards/pierce/keymaps/durken1/config.h new file mode 100644 index 000000000000..ecc59f31bd3d --- /dev/null +++ b/keyboards/pierce/keymaps/durken1/config.h @@ -0,0 +1,69 @@ +/* Copyright 2022 durken (https://github.com/durken1/) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +// default but important +#define TAPPING_TERM 220 + +// Enable rapid switch from tap to hold, disables double tap hold auto-repeat. +#define QUICK_TAP_TERM 0 + +#define PERMISSIVE_HOLD + +// Combo settings +#define COMBO_TERM 35 + +#ifdef PS2_DRIVER_USART +#define PS2_CLOCK_PIN D5 +#define PS2_DATA_PIN D2 + +/* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */ +/* set DDR of CLOCK as input to be slave */ +#define PS2_MOUSE_ROTATE 270 // compensate for east-facing device orientation +#define PS2_USART_INIT() do { \ + PS2_CLOCK_DDR &= ~(1<. + */ + +#include QMK_KEYBOARD_H +#include "keymap_swedish.h" + +enum layers { + BASE, + MBO, + SYM, + NUM, + FN +}; + +enum combos { + WF_ARNG, + EI_ADIA, + UK_ODIA +}; + +#if defined PS2_MOUSE_ENABLE +#include "ps2_mouse.h" +#endif + +#if defined AUTO_BUTTONS && defined PS2_MOUSE_ENABLE + +static uint16_t auto_buttons_timer; +extern int tp_buttons; // mousekey button state set in action.c and used in ps2_mouse.c + +void ps2_mouse_moved_user(report_mouse_t *mouse_report) { + if (auto_buttons_timer) { + auto_buttons_timer = timer_read(); + } else { + if (!tp_buttons) { + layer_on(MBO); + auto_buttons_timer = timer_read(); + } + } +} + +void matrix_scan_user(void) { + if (auto_buttons_timer && (timer_elapsed(auto_buttons_timer) > AUTO_BUTTONS_TIMEOUT)) { + if (!tp_buttons) { + layer_off(MBO); + auto_buttons_timer = 0; + } + } +} + +#endif // defined AUTO_BUTTONS && defined PS2_MOUSE_ENABLE + +// Left-hand home row mods +#define GUI_A LGUI_T(KC_A) +#define ALT_R LALT_T(KC_R) +#define SFT_S LSFT_T(KC_S) +#define CTRL_T LCTL_T(KC_T) + +// Right-hand home row mods +#define CTL_N RCTL_T(KC_N) +#define SFT_E RSFT_T(KC_E) +#define ALT_I LALT_T(KC_I) +#define GUI_O LGUI_T(KC_O) + +#define NUM_SPC LT(NUM, KC_SPC) +#define FN_ENT LT(FN, KC_ENT) +#define SYM_BSP LT(SYM, KC_BSPC) + +const uint16_t PROGMEM arng_combo[] = {ALT_R, SFT_S, COMBO_END}; +const uint16_t PROGMEM adia_combo[] = {SFT_E, ALT_I, COMBO_END}; +const uint16_t PROGMEM odia_combo[] = {SE_U, SE_K, COMBO_END}; + +combo_t key_combos[] = { + [WF_ARNG] = COMBO(arng_combo, SE_ARNG), + [EI_ADIA] = COMBO(adia_combo, SE_ADIA), + [UK_ODIA] = COMBO(odia_combo, SE_ODIA) +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [BASE] = LAYOUT_split_3x5_3( + // BASE + //,--------------------------------------------, ,--------------------------------------------. + SE_Q, SE_W, SE_F, SE_P, SE_B, SE_Y, SE_L, SE_U, SE_K, SE_QUOT, + //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| + GUI_A, ALT_R, SFT_S, CTRL_T, SE_G, SE_M, CTL_N, SFT_E, ALT_I, GUI_O, + //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| + SE_Z, SE_X, SE_C, SE_D, SE_V, SE_J, SE_H, SE_COMM, SE_DOT, SE_MINS, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_ESC, NUM_SPC, KC_TAB, FN_ENT, SYM_BSP, KC_DEL + //`--------------------------' '--------------------------' + + ), + + + [MBO] = LAYOUT_split_3x5_3( + // Mouse + //,--------------------------------------------, ,--------------------------------------------. + _______, _______, _______, _______, _______, KC_BTN1, KC_BTN2, _______, _______, _______, + //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| + _______, _______, _______, _______, _______, KC_BTN3, _______, _______, _______, _______, + //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, _______, _______, _______, KC_BSPC, _______ + //`--------------------------' '--------------------------' + + ), + + [SYM] = LAYOUT_split_3x5_3( + // Symbols + //,--------------------------------------------, ,--------------------------------------------. + SE_SECT, SE_ACUT, SE_SLSH, SE_TILD, _______, _______, SE_PIPE, SE_BSLS, SE_DIAE, SE_CIRC, + //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| + SE_EXLM, SE_DLR, SE_LPRN, SE_LBRC, _______, _______, SE_RBRC, SE_RPRN, SE_HASH, SE_QUES, + //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| + _______, SE_PERC, SE_LCBR, SE_LABK, _______, _______, SE_RABK, SE_RCBR, SE_AMPR, _______, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + SE_AT, SE_EQL, SE_DQUO, _______, _______, _______ + //`--------------------------' '--------------------------' + ), + + [NUM] = LAYOUT_split_3x5_3( + // Numbers + //,--------------------------------------------, ,--------------------------------------------. + _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, SE_7, SE_8, SE_9, SE_QUOT, + //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| + SE_PLUS, SE_MINS, SE_ASTR, SE_SLSH, SE_CIRC, _______, SE_4, SE_5, SE_6, _______, + //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| + _______, _______, KC_VOLD, KC_VOLU, _______, KC_SPC, SE_1, SE_2, SE_3, _______, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, _______, _______, SE_COMM, SE_0, SE_DOT + //`--------------------------' '--------------------------' + ), + + [FN] = LAYOUT_split_3x5_3( + // FN + //,--------------------------------------------, ,--------------------------------------------. + _______, _______, _______, _______, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, + //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| + KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, KC_F4, KC_F5, KC_F6, KC_F11, + //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| + _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F12, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_PSCR, KC_CAPS, _______, _______, _______, _______ + //`--------------------------' '--------------------------' + ) +}; diff --git a/keyboards/pierce/keymaps/durken1/rules.mk b/keyboards/pierce/keymaps/durken1/rules.mk new file mode 100644 index 000000000000..bea18c02d1ff --- /dev/null +++ b/keyboards/pierce/keymaps/durken1/rules.mk @@ -0,0 +1,4 @@ +EXTRAKEY_ENABLE = yes +TRACKPOINT = yes +AUTO_BUTTONS = yes +COMBO_ENABLE = yes diff --git a/keyboards/playkbtw/pk60/keymaps/rfvizarra/keymap.c b/keyboards/playkbtw/pk60/keymaps/rfvizarra/keymap.c new file mode 100644 index 000000000000..b6988e1cdc51 --- /dev/null +++ b/keyboards/playkbtw/pk60/keymaps/rfvizarra/keymap.c @@ -0,0 +1,29 @@ +#include QMK_KEYBOARD_H + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT_minila( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRAVE, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_DEL, + KC_LCTL, KC_LGUI, KC_LALT, MO(1), KC_SPC, MO(2), KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT + ), + + [1] = LAYOUT_minila( + QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, + _______, RGB_TOG, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, + _______, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, _______, BL_DOWN, BL_TOGG, BL_UP, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_MPLY + ), + + [2] = LAYOUT_minila( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, + _______, RGB_TOG, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, + _______, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_RMOD, _______, BL_DOWN, BL_TOGG, BL_UP, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END + ), +}; diff --git a/keyboards/playkbtw/pk60/keymaps/rfvizarra/readme.md b/keyboards/playkbtw/pk60/keymaps/rfvizarra/readme.md new file mode 100644 index 000000000000..cd9a22108796 --- /dev/null +++ b/keyboards/playkbtw/pk60/keymaps/rfvizarra/readme.md @@ -0,0 +1,11 @@ +# A personal keymap for Play Keyboard60 based on the minila layout + +![Mininla layout](https://i.imgur.com/K7ONE1k.jpg) + +To build the firmware use + + make playkbtw/pk60:rfvizarra + +or if you prefer to use docker + + util/docker_build.sh playkbtw/pk60:rfvizarra diff --git a/keyboards/ploopyco/trackball_nano/keymaps/maddie/keymap.c b/keyboards/ploopyco/trackball_nano/keymaps/maddie/keymap.c new file mode 100644 index 000000000000..370eb95aa032 --- /dev/null +++ b/keyboards/ploopyco/trackball_nano/keymaps/maddie/keymap.c @@ -0,0 +1,86 @@ +/* Copyright 2021 Colin Lam (Ploopy Corporation) + * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * Copyright 2019 Sunjun Kim + * Copyright 2019 Hiroyuki Okada + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + +// Configuration options +#define SCROLL_TIMEOUT 25 +#define DELTA_X_THRESHOLD 60 +#define DELTA_Y_THRESHOLD 15 + +bool scroll_enabled = false; +bool lock_state = false; + +// State +static int8_t delta_x = 0; +static int8_t delta_y = 0; + +// Dummy +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {{{ KC_NO }}}; + +report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) { + if (scroll_enabled) { + delta_x += mouse_report.x; + delta_y += mouse_report.y; + + if (delta_x > DELTA_X_THRESHOLD) { + mouse_report.h = 1; + delta_x = 0; + } else if (delta_x < -DELTA_X_THRESHOLD) { + mouse_report.h = -1; + delta_x = 0; + } + + if (delta_y > DELTA_Y_THRESHOLD) { + mouse_report.v = -1; + delta_y = 0; + } else if (delta_y < -DELTA_Y_THRESHOLD) { + mouse_report.v = 1; + delta_y = 0; + } + mouse_report.x = 0; + mouse_report.y = 0; + } + return mouse_report; +} + +void keyboard_post_init_user(void) { + lock_state = host_keyboard_led_state().num_lock; +} + +bool led_update_user(led_t led_state) { + static uint8_t lock_count = 0; + static uint16_t scroll_timer = 0; + + if (timer_elapsed(scroll_timer) > SCROLL_TIMEOUT) { + scroll_timer = timer_read(); + lock_count = 0; + } + + if (led_state.num_lock != lock_state) { + lock_count++; + + if (lock_count == 2) { + scroll_enabled = !scroll_enabled; + lock_count = 0; + } + } + + lock_state = led_state.num_lock; + return true; +} diff --git a/keyboards/ploopyco/trackball_nano/keymaps/maddie/readme.md b/keyboards/ploopyco/trackball_nano/keymaps/maddie/readme.md new file mode 100644 index 000000000000..3a597e38d812 --- /dev/null +++ b/keyboards/ploopyco/trackball_nano/keymaps/maddie/readme.md @@ -0,0 +1 @@ +toggles scroll mode when numlock is double-tapped within 25ms. add a macro or something, unless you have ungodly fast fingers. diff --git a/keyboards/primekb/prime_o/keymaps/reasonsandreasons/config.h b/keyboards/primekb/prime_o/keymaps/reasonsandreasons/config.h new file mode 100644 index 000000000000..4bcfa2ce5c62 --- /dev/null +++ b/keyboards/primekb/prime_o/keymaps/reasonsandreasons/config.h @@ -0,0 +1,21 @@ +/* Copyright 2018 Jumail Mundekkat + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#define TAPPING_TERM 200 + +// place overrides here diff --git a/keyboards/primekb/prime_o/keymaps/reasonsandreasons/keymap.c b/keyboards/primekb/prime_o/keymaps/reasonsandreasons/keymap.c new file mode 100644 index 000000000000..2f0290dc0334 --- /dev/null +++ b/keyboards/primekb/prime_o/keymaps/reasonsandreasons/keymap.c @@ -0,0 +1,174 @@ +/* Copyright 2018 Jumail Mundekkat + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +#define L1BS LT(2, KC_BSPC) +#define LSUP LSFT_T(KC_UP) +#define CTLL LCTL_T(KC_LEFT) +#define ECTL LCTL_T(KC_ESC) +#define ALLM ALL_T(KC_MINS) +#define SCLS LT(3, KC_SCLN) + +// Establishes tap dance keys +enum { + TD_SPC_ENT = 0 +}; + +tap_dance_action_t tap_dance_actions[] = { + [TD_SPC_ENT] = ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_ENT) + +}; + +// Defines the keycodes used by our macros in process_record_user +enum custom_keycodes { + QMKBEST = SAFE_RANGE, + QMKURL +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* BASE + * ,---------------------------------------------------------------------------------------------------------------, + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | NMLK | / | * | - | + * | | | | | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | \ | 7 | 8 | 9 | + | + * | | | | | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | ' | 4 | 5 | 6 | = | + * | Ctrl | | | | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | | Z | X | C | V | B | N | M | , | . | / | Up | 1 | 2 | 3 | | + * | Shift| | | | | | | | | | | Shift| | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+ Enter| + * | - | | | | Backspace | Space | | | Left | Down | Right| 0 | . | | + * | ALL | Ctrl | Alt | GUI | Fn1 | | GUI | Alt | Ctrl | | | | | | + * `---------------------------------------------------------------------------------------------------------------' + */ + + [0] = LAYOUT( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, KC_7, KC_8, KC_9, KC_PPLS, + ECTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SCLS, KC_QUOT, KC_4, KC_5, KC_6, KC_PEQL, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, LSUP, KC_1, KC_2, KC_3, KC_ENT, + ALLM, KC_LCTL, KC_LALT, KC_LGUI, L1BS, L1BS, KC_SPC, KC_SPC, KC_RGUI, KC_RALT, CTLL, KC_DOWN, KC_RIGHT, KC_0, KC_PDOT, KC_ENT + ), + +/* GAME + * ,---------------------------------------------------------------------------------------------------------------, + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | NMLK | / | * | - | + * | ` | | | | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | ' | 7 | 8 | 9 | + | + * | | | | | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | Caps | A | S | D | F | G | H | J | K | L | ; | Rtrn | 4 | 5 | 6 | = | + * | | | | | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | | Z | X | C | V | B | N | M | , | . | / | Up | 1 | 2 | 3 | | + * | Shift| | | | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+ Enter| + * | | | | | Space | Backspace | | | Left | Down | Right| 0 | . | | + * | Fn1 | Ctrl | Alt | Alt | | | GUI | DF(0)| | | | | | | + * `---------------------------------------------------------------------------------------------------------------' + */ + + [1] = LAYOUT( + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT, KC_7, KC_8, KC_9, KC_PPLS, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, KC_4, KC_5, KC_6, KC_PEQL, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_1, KC_2, KC_3, KC_ENT, + MO(2), KC_LCTL, KC_LALT, KC_LALT, KC_SPC, KC_SPC, KC_BSPC, KC_BSPC, KC_RGUI, DF(0), KC_LEFT, KC_DOWN, KC_RIGHT, KC_0, KC_PDOT, KC_ENT + ), + +/* SYMBOL + * ,---------------------------------------------------------------------------------------------------------------, + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | | | | + * | | | | | | | | | | | | | | | | | + * |------+-------------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | # | [ | < | > | ] | _ | | | | | | | | | + * | | | | | | | | | | | | | | | | | + * |------+------|------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | ~ | ( | { | } | ) | @ | - | | | | | | | + * | | | | | | | | | | | | | | | | | + * |------+------|------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | | | | | + * | | | | | | | | | | | | | | | | | + * |------+------|------+------+------+------+------+------+------+------+------+------+------+------+------+ | + * | | | | | | Enter | | | | | | | | | + * | | | | | | | | | | | | | | | + * `---------------------------------------------------------------------------------------------------------------' + */ + + [2] = LAYOUT( + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, + _______, _______, _______, KC_HASH, KC_LBRC, KC_LT, KC_GT, KC_RBRC, KC_UNDS, KC_PIPE, _______, _______, _______, _______, _______, _______, + _______, _______, _______, KC_TILD, KC_LPRN, KC_LCBR, KC_RCBR, KC_RPRN, KC_AT, KC_MINS, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, KC_ENT, KC_ENT, _______, _______, _______, _______, _______, _______, _______, _______ + ), + +/* SYSTEM + * ,---------------------------------------------------------------------------------------------------------------, + * | | | | | | | | | | | | | | | | | + * | | | | | | | | | | | | | | | | | + * |------+-------------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | | PgUp | Home | Up | End | | | Vol- | Vol+ | Mute | | | | | | | + * | | | | | | | | | | | | | | | | | + * |------+------|------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | | PgDn | Left | Down |Right | | | Play | Prev | Next | | | | | | QK_BOOT| + * | | | | | | | | | | | | | | | | | + * |------+------|------+------+------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | | | | | + * | | | | | | | | | | | | | | | | | + * |------+------|------+------+------+------+------+------+------+------+------+------+------+------+------+ BL | + * | | | | | | | | | | | | | BL | TGGL | + * | GAME | | | | | | | | | | | | STEP | | + * `---------------------------------------------------------------------------------------------------------------' + */ + + [3] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_PGUP, KC_HOME, KC_UP, KC_END, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, _______, _______, _______, + _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_MPLY, KC_MRWD, KC_MFFD, _______, _______, _______, _______, _______, QK_BOOT, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_TOGG, + DF(1), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_STEP, BL_TOGG + ), + +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QMKBEST: + if (record->event.pressed) { + // when keycode QMKBEST is pressed + SEND_STRING("QMK is the best thing ever!"); + } else { + // when keycode QMKBEST is released + } + break; + case QMKURL: + if (record->event.pressed) { + // when keycode QMKURL is pressed + SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER)); + } else { + // when keycode QMKURL is released + } + break; + } + return true; +} diff --git a/keyboards/primekb/prime_o/keymaps/reasonsandreasons/readme.md b/keyboards/primekb/prime_o/keymaps/reasonsandreasons/readme.md new file mode 100644 index 000000000000..e14e989e3226 --- /dev/null +++ b/keyboards/primekb/prime_o/keymaps/reasonsandreasons/readme.md @@ -0,0 +1,5 @@ +![reasonsandreasons Layout Image](https://imgur.com/a/xIpn2U5) + +# reasonsandreasons's Prime_O Layout + +This is a relatively simple layout for the Prime_O, designed for mostly typing use and occasional gaming. I'm still testing it and there will likely be minor changes, but most of the bones of it will likely stay the same. diff --git a/keyboards/primekb/prime_o/keymaps/reasonsandreasons/rules.mk b/keyboards/primekb/prime_o/keymaps/reasonsandreasons/rules.mk new file mode 100644 index 000000000000..645e8d523f60 --- /dev/null +++ b/keyboards/primekb/prime_o/keymaps/reasonsandreasons/rules.mk @@ -0,0 +1,20 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +TAP_DANCE_ENABLE=yes # Enable Tap Dance + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/psuieee/pluto12/keymaps/wymcg/keymap.c b/keyboards/psuieee/pluto12/keymaps/wymcg/keymap.c new file mode 100644 index 000000000000..96499b8789c9 --- /dev/null +++ b/keyboards/psuieee/pluto12/keymaps/wymcg/keymap.c @@ -0,0 +1,56 @@ +// Copyright 2021-22 Will McGLoughlin (wymcg) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _BASE, + _NAV, + _PROD +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT( + KC_MUTE, KC_MPRV, KC_MPLY, KC_MNXT, + TO(_NAV), G(KC_1), G(KC_2), G(KC_3), + TO(_PROD), G(KC_4), G(KC_5), G(KC_6) + ), + [_NAV] = LAYOUT( + TO(_BASE), KC_HOME, KC_UP, KC_END, + A(KC_TAB), KC_LEFT, KC_DOWN, KC_RIGHT, + G(KC_TAB), KC_PGDN, KC_PGUP, MO(_BASE) + ), + [_PROD] = LAYOUT( + TO(_BASE), KC_NO, KC_NO, KC_NO, + C(KC_Z), C(KC_X), C(KC_C), C(KC_V), + C(KC_A), C(KC_LEFT), C(KC_RIGHT),MO(_BASE) + ) +}; + +bool encoder_update_user(uint8_t index, bool clockwise) { + switch (biton32(layer_state)) { + case _BASE: + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + break; + case _NAV: + if (clockwise) { + tap_code16(C(G(KC_RIGHT))); + } else { + tap_code16(C(G(KC_LEFT))); + } + break; + case _PROD: + if (clockwise) { + tap_code16(C(KC_Y)); + } else { + tap_code16(C(KC_Z)); + } + break; + } + return false; +} diff --git a/keyboards/psuieee/pluto12/keymaps/wymcg/readme.md b/keyboards/psuieee/pluto12/keymaps/wymcg/readme.md new file mode 100644 index 000000000000..60d2f19be3cc --- /dev/null +++ b/keyboards/psuieee/pluto12/keymaps/wymcg/readme.md @@ -0,0 +1 @@ +# wymcg's custom keymap diff --git a/keyboards/qvex/lynepad2/keymaps/mcrosson/keymap.c b/keyboards/qvex/lynepad2/keymaps/mcrosson/keymap.c new file mode 100644 index 000000000000..ead8ab40a6da --- /dev/null +++ b/keyboards/qvex/lynepad2/keymaps/mcrosson/keymap.c @@ -0,0 +1,142 @@ +/* +Copyright 2023 QVEX Tech + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include QMK_KEYBOARD_H + +#define RGB_HUE_LAYER0 0 //default layer +#define RGB_HUE_LAYER1 50 +#define RGB_HUE_LAYER2 100 +#define RGB_HUE_LAYER3 150 +#define RGB_HUE_LAYER4 200 + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT //Default + ( + KC_MS_BTN4, KC_MS_BTN2, KC_MS_UP, KC_MS_BTN1, + KC_MS_BTN5, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, + KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2, + + KC_VOLU, KC_VOLD, KC_MPRV, KC_MNXT, //joystick up, down, left, right + KC_MPLY, MO(4) //joystick center push, thumbwheel push + ), + + [1] = LAYOUT //KiCad + ( + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, + + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right + XXXXXXX, MO(4) //joystick center push, thumbwheel push + ), + + [2] = LAYOUT + ( + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, + + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right + XXXXXXX, MO(4) //joystick center push, thumbwheel push + ), + + [3] = LAYOUT + ( + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, + + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right + XXXXXXX, MO(4) //joystick center push, thumbwheel push + ), + + [4] = LAYOUT + ( + TO(0), TO(1), TO(2), TO(3), + BL_TOGG, BL_STEP, XXXXXXX, XXXXXXX, + QK_RBT, EE_CLR, QK_BOOT, + + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, //joystick up, down, left, right + RGB_TOG, XXXXXXX //joystick center push, thumbwheel push + ) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { + [0] = { + ENCODER_CCW_CW(KC_VOLD, KC_VOLU), + ENCODER_CCW_CW(KC_MS_WH_DOWN, KC_MS_WH_UP) + }, + + [1] = { + ENCODER_CCW_CW(XXXXXXX, XXXXXXX), + ENCODER_CCW_CW(XXXXXXX, XXXXXXX) + }, + + [2] = { + ENCODER_CCW_CW(XXXXXXX, XXXXXXX), + ENCODER_CCW_CW(XXXXXXX, XXXXXXX) + }, + + [3] = { + ENCODER_CCW_CW(XXXXXXX, XXXXXXX), + ENCODER_CCW_CW(XXXXXXX, XXXXXXX) + }, + + [4] = { + ENCODER_CCW_CW(RGB_VAD, RGB_VAI), + ENCODER_CCW_CW(XXXXXXX, XXXXXXX) + } +}; +#endif + +//set only hue, retain saturation, and value +void rgblight_sethue_noeeprom(uint8_t hue) { + //only if rgb led ring is on + if (rgblight_get_mode()) { + rgblight_sethsv_noeeprom(hue,rgblight_get_sat(),rgblight_get_val()); + } +} + +//set correct layer hue on layer change +layer_state_t layer_state_set_user(layer_state_t state) { + switch (get_highest_layer(state)) { + case 1: + rgblight_sethue_noeeprom(RGB_HUE_LAYER1); + break; + case 2: + rgblight_sethue_noeeprom(RGB_HUE_LAYER2); + break; + case 3: + rgblight_sethue_noeeprom(RGB_HUE_LAYER3); + break; + case 4: + rgblight_sethue_noeeprom(RGB_HUE_LAYER4); + break; + default: + rgblight_sethue_noeeprom(RGB_HUE_LAYER0); + break; + + } + return state; +} + +//set default layer hue upon init +void keyboard_post_init_user(void) { + rgblight_init(); + rgblight_sethue_noeeprom(RGB_HUE_LAYER0); +} \ No newline at end of file diff --git a/keyboards/qvex/lynepad2/keymaps/mcrosson/rules.mk b/keyboards/qvex/lynepad2/keymaps/mcrosson/rules.mk new file mode 100644 index 000000000000..a40474b4d5c7 --- /dev/null +++ b/keyboards/qvex/lynepad2/keymaps/mcrosson/rules.mk @@ -0,0 +1 @@ +ENCODER_MAP_ENABLE = yes \ No newline at end of file diff --git a/keyboards/redscarf_iiplus/verd/keymaps/alittlepeace/keymap.c b/keyboards/redscarf_iiplus/verd/keymaps/alittlepeace/keymap.c new file mode 100644 index 000000000000..e6019db2ee02 --- /dev/null +++ b/keyboards/redscarf_iiplus/verd/keymaps/alittlepeace/keymap.c @@ -0,0 +1,81 @@ +/* Copyright 2019 Andy Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + +// Defines the keycodes used by our macros in process_record_user +enum custom_keycodes { + KC_P00 = SAFE_RANGE, + +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT_60_ansi_numpad_split0( + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, TG(1), KC_PSLS, KC_PAST, KC_PMNS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_INS, KC_HOME, KC_PGUP, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_DEL, KC_END, KC_PGDN, KC_PPLS, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, C(S(KC_TAB)), KC_UP, LCTL(KC_TAB), + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(2), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PENT + ), + + [1] = LAYOUT_60_ansi_numpad_split0( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, + _______, _______, _______, _______, _______, _______, _______, _______, KC_0, KC_P00, KC_DOT, _______ + ), + + [2] = LAYOUT_60_ansi_numpad_split0( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), +}; +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_P00: + if (record->event.pressed) { + SEND_STRING("00"); + } + break; + case TG(1): + if (record->event.pressed) { + tap_code(KC_NUM_LOCK); + return true; + } + break; + + } + return true; +} + +void matrix_init_user (void) { + if (!host_keyboard_led_state ().num_lock) { + tap_code(KC_NUM_LOCK); + } +} + +bool led_update_user(led_t led_state) { + if (led_state.num_lock) { + layer_on(1); + } else { + layer_off(1); + } + return true; +} diff --git a/keyboards/reviung/reviung41/keymaps/ciutadellla/config.h b/keyboards/reviung/reviung41/keymaps/ciutadellla/config.h new file mode 100644 index 000000000000..1d7ad67a6290 --- /dev/null +++ b/keyboards/reviung/reviung41/keymaps/ciutadellla/config.h @@ -0,0 +1,25 @@ +/* Copyright 2021 @Ciutadellla + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once +#define RGBLIGHT_LAYERS + // /*== or choose animations ==*/ + #define RGBLIGHT_EFFECT_BREATHING + #define RGBLIGHT_EFFECT_RAINBOW_MOOD + #define RGBLIGHT_EFFECT_RAINBOW_SWIRL + +#define TAPPING_TERM 200 +#define UNICODE_SELECTED_MODES UNICODE_MODE_MACOS, UNICODE_MODE_LINUX, UNICODE_MODE_WINCOMPOSE diff --git a/keyboards/reviung/reviung41/keymaps/ciutadellla/keymap.c b/keyboards/reviung/reviung41/keymaps/ciutadellla/keymap.c new file mode 100644 index 000000000000..a4279821ccc1 --- /dev/null +++ b/keyboards/reviung/reviung41/keymaps/ciutadellla/keymap.c @@ -0,0 +1,333 @@ +/* Copyright 2021 @Ciutadellla + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + + #include QMK_KEYBOARD_H + + enum layer_names { + _BASE, + _LOWER, + _RAISE, + _MOVE, + _ADJUST + }; + + //UNICODES + #include "process_unicode.h" + + enum unicode_names { + CKC_EUR, + N_TILDE, + COMB_ACUTE_ACCENT, + GRINNING_FACE, // 😃 + BEAMING_FACE, // 😁 + GRINNING_FACE_WITH_SWEAT, // 😅 + ROLLING_LAUGHING, // 🤣 + FACE_TEARS_JOY, // 😂 + WINKING_FACE, // 😉 + SMILING_FACE_HALO, // 😇 + SMILING_FACE_HEARTS, // 🥰 + SMILING_FACE_HEART_EYES, // 😍 + FACE_BLOWING_KISS, // 😘 + FACE_SAVORING_FOOD, // 😋 + ZANY_FACE, // 🤪 + HUGGING_FACE, // 🤗 + SHUSHING_FACE, // 🤫 + THINKING_FACE, // 🤔 + FACE_RAISED_EYEBROW, // 🤨 + NEUTRAL_FACE, // 😐 + SMIRKING_FACE, // 😏 + FACE_ROLLING_EYES, // 🙄 + PENSIVE_FACE, // 😔 + FACE_VOMITING, // 🤮 + WOOZY_FACE, // 🥴 + PLEADING_FACE, // 🥺 + LOUDLY_CRYING_FACE, // 😭 + DISAPPOINTED_FACE, // 😞 + FACE_SYMBOLS_MOUTH, // 🤬 + SMILING_FACE_HORNS, // 😈 + SKULL, // 💀 + PILE_POO, // 💩 + GHOST, // 👻 + ALIEN_MONSTER, // 👾 + RED_HEART, // ❤ + BOMB, // 💣 + WAVING_HAND, // 👋 + OK_HAND, // 👌 + CLAPPING_HANDS, // 👏 + EYES, // 👀 + MAN_FACEPALMING, // 🤦 + TURTLE, // 🐢 + SNAKE, // 🐍 + SPOUTING_WHALE, // 🐳 + DRAGON, // 🐉 + TREX, // 🦖 + THUMBSDOWN, // 👍 + THUMBSUP, // 👎 + }; + + //https://unicode-table.com/en/#00F1 + const uint32_t unicode_map[] PROGMEM = { + [CKC_EUR] = 0x20AC, //€ + [N_TILDE] = 0x00F1, // ñ + [COMB_ACUTE_ACCENT] = 0x0301, // ´ + [GRINNING_FACE] = 0x1F603, + [BEAMING_FACE] = 0x1F601, + [GRINNING_FACE_WITH_SWEAT] = 0x1F605, + [ROLLING_LAUGHING] = 0x1F923, + [FACE_TEARS_JOY] = 0x1F602, + [WINKING_FACE] = 0x1F609, + [SMILING_FACE_HALO] = 0x1F607, + [SMILING_FACE_HEARTS] = 0x1F970, + [SMILING_FACE_HEART_EYES] = 0x1F60D, + [FACE_BLOWING_KISS] = 0x1F618, + [FACE_SAVORING_FOOD] = 0x1F60B, + [ZANY_FACE] = 0x1F92A, + [HUGGING_FACE] = 0x1F917, + [SHUSHING_FACE] = 0x1F92B, + [THINKING_FACE] = 0x1F914, + [FACE_RAISED_EYEBROW] = 0x1F928, + [NEUTRAL_FACE] = 0x1F610, + [SMIRKING_FACE] = 0x1F60F, + [FACE_ROLLING_EYES] = 0x1F644, + [PENSIVE_FACE] = 0x1F614, + [FACE_VOMITING] = 0x1F92E, + [WOOZY_FACE] = 0x1F974, + [PLEADING_FACE] = 0x1F97A, + [LOUDLY_CRYING_FACE] = 0x1F62D, + [DISAPPOINTED_FACE] = 0x1F61E, + [FACE_SYMBOLS_MOUTH] = 0x1F92C, + [SMILING_FACE_HORNS] = 0x1F608, + [SKULL] = 0x1F480, + [PILE_POO] = 0x1F4A9, + [GHOST] = 0x1F47B, + [ALIEN_MONSTER] = 0x1F47E, + [RED_HEART] = 0x2764, + [BOMB] = 0x1F4A3, + [WAVING_HAND] = 0x1F44B, + [OK_HAND] = 0x1F44C, + [CLAPPING_HANDS] = 0x1F44F, + [EYES] = 0x1F440, + [MAN_FACEPALMING] = 0x1F926, + [TURTLE] = 0x1F422, + [SNAKE] = 0x1F40D, + [SPOUTING_WHALE] = 0x1F433, + [DRAGON] = 0x1F409, + [TREX] = 0x1F996, + [THUMBSDOWN] = 0x1F44E, + [THUMBSUP] = 0x1F44D, + }; + + + void matrix_init_user(void){ + set_unicode_input_mode(UNICODE_MODE_MACOS); + } + + + // Shortcut to make keymap more readable + #define KC_OSX_EJECT 0x66 + #define LOCK_OSX LSFT(LCTL(KC_OSX_EJECT)) + #define SLEEP_OSX LALT(LGUI(KC_OSX_EJECT)) + #define KC_C_LF RCTL(KC_LEFT) // control + left + #define KC_C_RT RCTL(KC_RGHT) // control + right + + // tap dance declarations + enum { + _TD_TAB_ESC = 0, + _TD_BSPC_WDEL, + _TD_SFT_CAPS, + _TD_SPC_ENT, + _TD_N_NTILDE, + _TD_CTRL_LANG, + _TD_SCLN_NTILDE + }; + + #define TD_TAB_ESC TD(_TD_TAB_ESC) + #define TD_BSPC_WDEL TD(_TD_BSPC_WDEL) + #define TD_SFT_CAPS TD(_TD_SFT_CAPS) + #define TD_SPC_ENT TD(_TD_SPC_ENT) + #define TD_N_NTILDE TD(_TD_N_NTILDE) + #define TD_CTRL_LANG TD(_TD_CTRL_LANG) + #define TD_SCLN_NTILDE TD(_TD_SCLN_NTILDE) //TP with costum keycodes has to be a funtion + + void td_scln_ntilde(tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + register_code(KC_SCLN); + unregister_code(KC_SCLN); + } else { + send_unicode_string("ñ"); + } + reset_tap_dance(state); + } + + // Tap Dance Definitions + tap_dance_action_t tap_dance_actions[] = { + [_TD_TAB_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_TAB, KC_ESC), + [_TD_BSPC_WDEL] = ACTION_TAP_DANCE_DOUBLE(KC_BSPC, LALT(KC_BSPC)), + [_TD_SFT_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS), + [_TD_SPC_ENT] = ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_ENT), + [_TD_CTRL_LANG] = ACTION_TAP_DANCE_DOUBLE(KC_LCTL, LCTL(LSFT(KC_SPACE))), + [_TD_SCLN_NTILDE] = ACTION_TAP_DANCE_FN(td_scln_ntilde), + }; + + + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + + /* Qwerty 0 + * ,-----------------------------------------+ +-----------------------------------------. + * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+------+ +------+------+------+------+------+------| + * |CtlLNG| A | S | D | F | G | | H | J | K | L | ; | " | + * |------+------+------+------+------+------+ +------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | | N | M | , | . | / | Shift| + * |------+------+------+------+------+------+ +------+------+------+------+------+------| + * | GUI | Lower| Space | Raise| Alt | + * +-------------/ \--------------+ + */ + [_BASE] = LAYOUT_reviung41(TD_TAB_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, TD_BSPC_WDEL, TD_CTRL_LANG, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, TD_SCLN_NTILDE, KC_QUOT, TD_SFT_CAPS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_ENT), KC_LGUI, MO(1), TD_SPC_ENT, MO(2), LT(4,KC_NO)), + + + /* LOWER 1 + * ,-----------------------------------------+ +-----------------------------------------. + * | Tab | ! | @ | # | $ | % | | ^ | & | * | () | ) | Del | + * |------+------+------+------+------+------+ +------+------+------+------+------+------| + * | Ctl | _ | + | {} | } | | | | LEFT | DOWN | UP | RIGHT| ´ | " | + * |------+------+------+------+------+------+ +------+------+------+------+------+------| + * | Shift| Esc | Gui | Alt | = | "" | | HOME | END | PGUP | PDOWN| / | Shft | + * |------+------+------+------+------+------+ +------+------+------+------+------+------| + * | GUI | Lower| Space | Raise| Alt | + * +-------------/ \--------------+ + */ + [_LOWER] = LAYOUT_reviung41(KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_ESC, KC_LGUI, KC_LALT, KC_LCTL, KC_TRNS, KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_PSCR, MT(MOD_LSFT | MOD_RSFT,KC_SPC), KC_TRNS, KC_TRNS, KC_ENT, MO(3), KC_TRNS), + + /* Raise 2 + * ,-----------------------------------------+ +-----------------------------------------. + * | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | DEL | + * |------+------+------+------+------+------+ +------+------+------+------+------+------| + * | | MINS | EQL | LBRC | RBRC | BSLS | | F1 | F2 | F3 | F4 | F5 | F6 | + * |------+------+------+------+------+------+ +------+------+------+------+------+------| + * | | | | | | QUOT | | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------+ +------+------+------+------+------+------| + * | ____ | MO(3)| BSPC | ____ | ____ | + * +-------------/ \--------------+ + */ + + // [_RAISE] = LAYOUT_reviung41( + // KC_TRNS, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, KC_DEL, + // KC_TRNS, KC_LPRN, KC_RPRN, KC_LT, KC_GT, KC_AMPR, KC_PMNS, KC_PPLS, KC_HASH, KC_PERC, KC_COLN, KC_PEQL, + // KC_TRNS, KC_LCBR, KC_RCBR, KC_SLSH, KC_INT1, KC_PIPE, KC_PSLS, KC_PAST, KC_PCMM, KC_PDOT, KC_HASH, KC_PENT, + // KC_TRNS, MO(3), KC_BSPC, KC_TRNS, KC_TRNS + // ), + + [_RAISE] = LAYOUT_reviung41( + KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_P7, KC_P8, KC_P9, KC_P0, KC_PPLS, KC_PMNS, + KC_COLN, KC_DQUO, KC_LCBR, KC_RCBR, KC_LT, KC_GT, KC_P4, KC_P5, KC_P6, KC_PERC, KC_PAST, KC_PSLS, + KC_AMPR, KC_PIPE, KC_LPRN, KC_RPRN, KC_LBRC, KC_RBRC, KC_P1, KC_P2, KC_P3, KC_PCMM, KC_PDOT, KC_PEQL, + KC_TRNS, MO(3), KC_PENT, KC_TRNS, KC_TRNS + ), + + + /* _MOVE 3 + * ,---------------------------------------------------+ +------------------------------------------. + * | | | | | | | | | WHD | WHU | | | LOCK | + * |-------+-------+-------+---------+-------+---------+ +------+------+------+------+------+-------| + * | | | | | | | | M_L | M_D | M_I | M_R | | SLEEP | + * |-------+-------+-------+---------+-------+---------+ +------+------+------+------+------+-------| + * | | | | | SCRLFT| SCRRGHT | | M_B1 | M_B2| M0 | M2 | | QK_BOOT | + * |-------+-------+-------+---------+-------+---------+ +------+------+------+------+------+-------| + * | ____ | ____ | BSPC | ____ | ____ | + * +-------------/ \--------------+ + */ + [_MOVE] = LAYOUT_reviung41(KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_ACL2, LOCK_OSX, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_ACL0, SLEEP_OSX, KC_F13, KC_F14, KC_F15, KC_F16, KC_C_LF, KC_C_RT, KC_BTN1, KC_BTN2, KC_BTN3, KC_BTN4, KC_BTN5, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + /* _ADJUST 4 + * ,----------------------------------------+ +---------------------------------------------------. + * | 😃 | 😅 | 🤣 | 😉 | 😇 | 🥰 | | RGBUP | HUEUP | RGB_MOD | BRIU | PLAY | VOLU | + * |------+-----+------+------+------+------+ +-------+--------+----------+-------+-------+------| + * | 😍 | 😘 | 🙄 | 😔 | 😭 | 💩 | | RGBDWN| HUEDWN | RGB_TOG | BRID | STOP | VOLD | + * |------+-----+------+------+------+------+ +-------+--------+----------+--------+------+------| + * | 👍 | 👎 | 👏 | 👀 | 🤦 | 👻 | | RGB_TG| | | | | MUTE | + * |------+------+------+------+------+------+ +-------+--------+----------+--------+------+------| + * | GUI | Lower| BSPC | Raise| Alt | + * +-------------/ \--------------+ + */ + + [_ADJUST] = LAYOUT_reviung41(UM(GRINNING_FACE), UM(GRINNING_FACE_WITH_SWEAT), UM(ROLLING_LAUGHING), UM(WINKING_FACE), UM(SMILING_FACE_HALO), UM(SMILING_FACE_HEARTS), RGB_VAI, RGB_HUI, RGB_MOD, KC_BRIU, KC_MPLY, KC_VOLU, UM(SMILING_FACE_HEART_EYES), UM(FACE_BLOWING_KISS), UM(FACE_ROLLING_EYES), UM(PENSIVE_FACE), UM(LOUDLY_CRYING_FACE), UM(PILE_POO), RGB_VAD, RGB_HUD, RGB_RMOD, KC_BRID, KC_MSTP, KC_VOLD, UM(THUMBSUP), UM(THUMBSDOWN), UM(CLAPPING_HANDS), UM(EYES), UM(MAN_FACEPALMING), UM(GHOST), RGB_TOG, RGB_SAD, RGB_SAI, RGB_SPD, RGB_SPI, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) + + }; + + + + #ifdef RGBLIGHT_ENABLE + // RGB LED Indicators + const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0, 11, HSV_RED} // Light 1 LED, starting with LED 0 + ); + + // RGB LED Indicators + const rgblight_segment_t PROGMEM my_base_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0, 11, HSV_CYAN} // Light 1 LED, starting with LED 0 + ); + + const rgblight_segment_t PROGMEM my_lower_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0, 11, HSV_GREEN} // Light 1 LED, starting with LED 1 + ); + + // RGB LED Indicators + const rgblight_segment_t PROGMEM my_rise_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0, 11, HSV_MAGENTA} // Light 1 LED, starting with LED 0 + ); + + // RGB LED Indicators + const rgblight_segment_t PROGMEM my_MOVE_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0, 11, HSV_YELLOW} // Light 1 LED, starting with LED 0 + ); + + + // RGB LED Indicators + const rgblight_segment_t PROGMEM my_ADJUST_layer[] = RGBLIGHT_LAYER_SEGMENTS( + {0, 11, HSV_AZURE} // Light 1 LED, starting with LED 0 + ); + + // Now define the array of layers. Later layers take precedence + const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( + my_base_layer, // 0 + my_lower_layer, // 1 + my_rise_layer, // 2 + my_MOVE_layer, // 3 + my_ADJUST_layer, // 4 + my_capslock_layer // 5 + ); + + // Enable the LED layers + void keyboard_post_init_user(void) { + rgblight_layers = my_rgb_layers; + } + + layer_state_t layer_state_set_user(layer_state_t state) { + rgblight_set_layer_state(1, layer_state_cmp(state, _LOWER)); + rgblight_set_layer_state(2, layer_state_cmp(state, _RAISE)); + rgblight_set_layer_state(3, layer_state_cmp(state, _MOVE)); + rgblight_set_layer_state(4, layer_state_cmp(state, _ADJUST)); + return state; + } + + bool led_update_user(led_t led_state) { + rgblight_set_layer_state(5, led_state.caps_lock); + return true; + } + #endif + diff --git a/keyboards/reviung/reviung41/keymaps/ciutadellla/rules.mk b/keyboards/reviung/reviung41/keymaps/ciutadellla/rules.mk new file mode 100644 index 000000000000..eeafc1200622 --- /dev/null +++ b/keyboards/reviung/reviung41/keymaps/ciutadellla/rules.mk @@ -0,0 +1,10 @@ +# MCU name +MCU = atmega32u4 +BOOTLOADER = atmel-dfu +MOUSEKEY_ENABLE = yes # Mouse keys +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow +UNICODEMAP_ENABLE = yes # Unicode +TAP_DANCE_ENABLE = yes diff --git a/keyboards/rgbkb/mun/keymaps/xulkal2/config.h b/keyboards/rgbkb/mun/keymaps/xulkal2/config.h new file mode 100644 index 000000000000..b34b40c7859c --- /dev/null +++ b/keyboards/rgbkb/mun/keymaps/xulkal2/config.h @@ -0,0 +1,42 @@ +/* + * ---------------------------------------------------------------------------- + * "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 we meet some day, and + * you think this stuff is worth it, you can buy me a beer in return. David Rauseo + * ---------------------------------------------------------------------------- + */ + +#pragma once + +// Xulkal custom stuff +#undef QUICK_TAP_TERM + +#undef TAPPING_TERM +#define TAPPING_TERM 175 + +#define SPACE_CADET_MODIFIER_CARRYOVER +#define LSPO_KEYS KC_LSFT, KC_TRNS, KC_LBRC +#define RSPC_KEYS KC_RSFT, KC_TRNS, KC_RBRC +#define LCPO_KEYS KC_LCTL, KC_TRNS, KC_MINS +#define RCPC_KEYS KC_RCTL, KC_TRNS, KC_EQL + +// No need for the single versions when multi performance isn't a problem =D +#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE +#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS +#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS +#undef ENABLE_RGB_MATRIX_SPLASH +#undef ENABLE_RGB_MATRIX_SOLID_SPLASH + +// 20m timeout (20m * 60s * 1000mil) +// #define RGB_MATRIX_TIMEOUT 1200000 +#define RGB_MATRIX_SLEEP +#define OLED_SCROLL_TIMEOUT 20000 +#define ONESHOT_TAP_TOGGLE 2 + +#define RGB_MATRIX_HUE_STEP 8 +#define RGB_MATRIX_SAT_STEP 8 +#define RGB_MATRIX_VAL_STEP 8 +#define RGB_MATRIX_SPD_STEP 8 + +#define ENCODER_RESOLUTION 2 diff --git a/keyboards/rgbkb/mun/keymaps/xulkal2/keymap.c b/keyboards/rgbkb/mun/keymaps/xulkal2/keymap.c new file mode 100644 index 000000000000..eefb59e676aa --- /dev/null +++ b/keyboards/rgbkb/mun/keymaps/xulkal2/keymap.c @@ -0,0 +1,248 @@ +/* + * ---------------------------------------------------------------------------- + * "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 we meet some day, and + * you think this stuff is worth it, you can buy me a beer in return. David Rauseo + * ---------------------------------------------------------------------------- + */ + +#include QMK_KEYBOARD_H +#include "common_oled.h" + +enum keymap_layers { + _QWERTY, + _FUNCTION, + _ADJUST +}; + +enum keymap_keycodes { + // Disables touch processing + TCH_TOG = SAFE_RANGE, + MENU_BTN, + MENU_UP, + MENU_DN, + RGB_RST +}; + +// Default Layers +#define QWERTY DF(_QWERTY) + +// Momentary Layers +#define FN OSL(_FUNCTION) +#define ADJ OSL(_ADJUST) + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* QWERTY + * .--------------------------------------------------------------. .--------------------------------------------------------------. + * | `~/ESC | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | Bckspc | + * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + * | Tab | Q | W | E | R | T | | | | Y | U | I | O | P | \ | + * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + * | Caps | A | S | D | F | G | Play | | MN BTN | H | J | K | L | : | Enter | + * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + * | Shft[ | Z | X | C | V | B | { | | } | N | M | , | . | / | Shft] | + * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + * | Ctrl- | Win | Alt | Del | Space | | ADJ | | FN | | Space | '" | Alt | App | Ctrl= | + * '--------+--------+--------+--------|--------+--------+--------' '--------+--------+--------+--------+--------+--------+--------' + * |--------+--------+--------+--------+--------. .--------+--------+--------+--------+--------| + * | VolDn | VolUp | Next | Play | Prev | Touch Encoder Touch Encoder | RgbHuI | RgbHuD | RgbMdD | RgbTog | RgbMdI | + * '--------+--------+--------+--------+--------' '--------+--------+--------+--------+--------' + */ + [_QWERTY] = LAYOUT( + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_NO, KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_MPLY, MENU_BTN,KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, + SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LCBR, KC_RCBR, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC, + SC_LCPO, KC_LGUI, KC_LALT, KC_DEL, KC_SPC, KC_NO, ADJ, FN, KC_NO, KC_SPC, KC_QUOTE,KC_RALT, KC_APP, SC_RCPC, + + KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY, KC_MPRV, RGB_HUI, RGB_HUD, RGB_RMOD,RGB_TOG, RGB_MOD + ), + + /* Function + * .--------------------------------------------------------------. .--------------------------------------------------------------. + * | F12 | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + * | | SPDI | SAI | VAI | HUI | RGBMD | | | | | | PrtScr | ScrLck | PseBrk | | + * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + * | | SPDD | SAD | VAD | HUD | RGBRMD | | | | | | Ins | Home | PgUp | | + * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + * | | RGBRST | | | | RGBTOG | | | | | | Del | End | PgDn | | + * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + * | | | | | | | | | | | Play | Prev | Next | VolUp | VolDn | + * '--------+--------+--------+--------+--------+--------+--------' '--------+--------+--------+--------+--------+--------+--------' + * |--------+--------+--------+--------+--------. .--------+--------+--------+--------+--------| + * | | | | | | Touch Encoder Touch Encoder | | | | | | + * '--------+--------+--------+--------+--------' '--------+--------+--------+--------+--------' + */ + [_FUNCTION] = LAYOUT( + KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + _______, RGB_SPI, RGB_SAI, RGB_VAI, RGB_HUI, RGB_MOD, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, + _______, RGB_SPD, RGB_SAD, RGB_VAD, RGB_HUD, RGB_RMOD,_______, _______, _______, _______, KC_INS, KC_HOME, KC_PGUP, _______, + _______, RGB_RST, _______, _______, _______, RGB_TOG, _______, _______, _______, _______, KC_DEL, KC_END, KC_PGDN, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MPRV, KC_MNXT, KC_VOLU, KC_VOLD, + + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + /* Adjust + * .--------------------------------------------------------------. .--------------------------------------------------------------. + * | | | | | | | | | | | NumLck | / | * | - | Del | + * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + * | | Home | Up | End | Reset | T_TOG | | | | | 7 | 8 | 9 | + | | + * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + * | | Left | Down | Right | | | | | | | 4 | 5 | 6 | + | | + * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + * | | | | | | EepRst | | | | | 1 | 2 | 3 | Enter | | + * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + * | | | | | | | | | | | | 0 | . | Enter | | + * '--------+--------+--------+--------+--------+--------+--------' '--------+--------+--------+--------+--------+--------+--------' + * Encoder 1 Encoder 2 Encoder 3 Encoder 4 + * .-----------------------------------. .-----------------------------------. + * | | | | | | | | | | + * |--------+--------+--------+--------+--------. .--------+--------+--------+--------+--------| + * | | | | | | Touch Encoder Touch Encoder | | | | | | + * '--------+--------+--------+--------+--------' '--------+--------+--------+--------+--------' + */ + [_ADJUST] = LAYOUT( + KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, KC_DEL, + _______, KC_HOME, KC_UP, KC_END, QK_BOOT, TCH_TOG, _______, _______, _______, KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, _______, + _______, KC_LEFT, KC_DOWN, KC_RIGHT,_______, _______, _______, _______, _______, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, + _______, _______, _______, _______, _______, EE_CLR, _______, _______, _______, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_KP_0, KC_PDOT, KC_PENT, _______, + + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; +// clang-format on + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) + { + case MENU_BTN: + if (record->event.pressed) { + rgb_menu_selection(); + } + return false; + case MENU_UP: + if (record->event.pressed) { + rgb_menu_action(true); + } + return false; + case MENU_DN: + if (record->event.pressed) { + rgb_menu_action(false); + } + return false; + case RGB_RST: + if (record->event.pressed) { + eeconfig_update_rgb_matrix_default(); + } + return false; + case TCH_TOG: + if (record->event.pressed) { + touch_encoder_toggle(); + } + return false; // Skip all further processing of this key + default: + return true; + } +} + +//#define MATRIX_SCAN_DEBUG +#if !defined(MATRIX_SCAN_DEBUG) +static void render_layer(void) { + // Host Keyboard Layer Status + oled_write_P(PSTR("Layer"), false); + switch (get_highest_layer(layer_state)) { + case _QWERTY: + oled_write_ln_P(PSTR("BASE "), false); + break; + case _FUNCTION: + oled_write_ln_P(PSTR("FUNC "), false); + break; + case _ADJUST: + oled_write_ln_P(PSTR("ADJS "), false); + break; + } +} + +static void render_leds(void) +{ + // Host Keyboard LED Status + led_t led_state = host_keyboard_led_state(); + oled_write_P(led_state.num_lock ? PSTR("NUMLK") : PSTR(" "), false); + oled_write_P(led_state.caps_lock ? PSTR("CAPLK") : PSTR(" "), false); + oled_write_P(led_state.scroll_lock ? PSTR("SCRLK") : PSTR(" "), false); +} + +static void render_touch(void) +{ + // Host Touch LED Status + oled_write_P(touch_encoder_is_on() ? PSTR("TOUCH") : PSTR(" "), false); + oled_write_P(touch_encoder_is_calibrating() ? PSTR("CLBRT") : PSTR(" "), false); +} +#else +static uint32_t scan_counter = 0; +static uint32_t scan_value = 0; +static uint16_t scan_timer = 1000; + +void do_counters(void) { + scan_counter++; + uint16_t now = sync_timer_read(); + if (timer_expired(now, scan_timer)) + { + scan_timer += 1000; + scan_value = (scan_value + scan_counter) / 2; + scan_counter = 0; + } +} + +void matrix_scan_user(void) { + do_counters(); +} + +void matrix_slave_scan_user(void) { + do_counters(); +} + +void render_debug_scan(void) { + static char buffer[6] = {0}; + snprintf(buffer, sizeof(buffer), "%5d", scan_value); + oled_write_ln_P(buffer, false); +} +#endif + +bool oled_task_user(void) { +#if !defined(MATRIX_SCAN_DEBUG) + if (is_keyboard_left()) { + render_layer(); + oled_write_P(PSTR(" "), false); + render_leds(); + oled_write_P(PSTR(" "), false); + render_touch(); + } + else { + render_rgb_menu(); + } +#else + oled_write_P(PSTR(" "), false); + render_debug_scan(); +#endif + oled_set_cursor(0, 12); + render_icon(); + return false; +} + +oled_rotation_t oled_init_user(oled_rotation_t rotation) { + return OLED_ROTATION_270; +} + +#ifdef ENCODER_MAP_ENABLE +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(MENU_DN, MENU_UP), ENCODER_CCW_CW(MENU_DN, MENU_UP) }, + [1] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) }, + [2] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) } +}; +#endif diff --git a/keyboards/rgbkb/mun/keymaps/xulkal2/rules.mk b/keyboards/rgbkb/mun/keymaps/xulkal2/rules.mk new file mode 100644 index 000000000000..e6b71e56d178 --- /dev/null +++ b/keyboards/rgbkb/mun/keymaps/xulkal2/rules.mk @@ -0,0 +1,5 @@ +MOUSEKEY_ENABLE = yes # using for mouse wheel up and down, more granular than page up/down + +OPT_DEFS += -DRGB_UNLIMITED_POWER + +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/rgbkb/sol/keymaps/brianweyer/keymap.c b/keyboards/rgbkb/sol/keymaps/brianweyer/keymap.c new file mode 100644 index 000000000000..194ec4de2f0f --- /dev/null +++ b/keyboards/rgbkb/sol/keymaps/brianweyer/keymap.c @@ -0,0 +1,272 @@ +#include QMK_KEYBOARD_H +#ifdef PROTOCOL_LUFA +#include "lufa.h" +#include "split_util.h" +#endif + +extern keymap_config_t keymap_config; + +#ifdef RGBLIGHT_ENABLE +//Following line allows macro to read current RGB settings +extern rgblight_config_t rgblight_config; +#endif + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +enum layer_number { + _QWERTY = 0, + _FN, + _ADJ +}; + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + FN, + ADJ, + RGBRST +}; + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* QWERTY + * ,------------------------------------------------. ,------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | - | | = | 6 | 7 | 8 | 9 | 0 | Bspc | + * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ | + * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------| + * | Esc | A | S | D | F | G | | | | H | J | K | L | ; | ' | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | | | | N | M | , | . | / | Shift| + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | Ctrl | Alt | FN | LGui | RGB | Spc | Del | | Bspc | Spc | Adj | LGui | FN | Alt | Ctrl | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | Spc | Ent | | Ent | Spc | + * `-------------' `-------------' + */ + [_QWERTY] = LAYOUT( + //,--------+--------+--------+--------+--------+--------+--+--------+. ,--------+--+--------+--------+--------+--------+--------+--------+ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------| + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------| + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, _______, _______, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------| + SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, _______, _______, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC, + //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------| + KC_LCTL, KC_LALT, FN, KC_LGUI, RGB_MOD, KC_SPC, KC_DEL, KC_BSPC, KC_SPC, ADJ, KC_LGUI, FN, KC_LALT, KC_LCTL, + //|--------+--------+--------+--------+--------+--+--------+--------| |--------+--+--------+--------+--------+--------+--------+--------| + KC_SPC, KC_ENT, KC_ENT, KC_SPC + // |--------+--------| |--------+-----------+ + ), + + /* FN + * ,------------------------------------------------. ,------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | | | | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------| + * | | | | Up | | | | | | | | | | | | + * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------| + * | | | Left | Down | Right| | | | | Play | Next | Mute | V-Up |V-Down| | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | | | | | | | | | | | | | | | | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | | | | | | | | | | | | | | | | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | | | | | | + * `-------------' `-------------' + */ + [_FN] = LAYOUT( + //,--------+--------+--------+--------+--------+--------+--+--------+. ,--------+--+--------+--------+--------+--------+--------+--------+ + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------| + _______, _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------| + _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, + //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------| + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------| + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + //|--------+--------+--------+--------+--------+--+--------+--------| |--------+--+--------+--------+--------+--------+--------+--------| + _______, _______, _______, _______ + // |--------+--------| |--------+-----------+ + ), + + /* ADJ + * ,------------------------------------------------. ,------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------| + * | | Sat+ | Val+ | Hue+ |Speed+|Toggle| | | | | | | | | | + * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------| + * | | Sat- | Val- | Hue- |Speed-|Reset | | | | |QWERTY| COLE | | | | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | | | | | | | | | | | | | | | | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | | | | | | | | | | | | | | | | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | | | | | | + * `-------------' `-------------' + */ + + [_ADJ] = LAYOUT( + //,--------+--------+--------+--------+--------+--------+--+--------+. ,--------+--+--------+--------+--------+--------+--------+--------+ + QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, + //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------| + _______, RGB_SAI, RGB_VAI, RGB_HUI, RGB_SPI, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, + //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------| + _______, RGB_SAD, RGB_VAD, RGB_HUD, RGB_SPD, RGBRST, _______, _______, _______, _______, _______, _______, _______, _______, + //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------| + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------| + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + //|--------+--------+--------+--------+--------+--+--------+--------| |--------+--------+--+--------+--------+--------+--------+--------| + _______, _______, _______, _______ + // |--------+--------| |--------+--------+ + ) +}; + + +// define variables for reactive RGB +bool TOG_STATUS = false; +int RGB_current_mode; + +#ifdef ENCODER_ENABLE +bool encoder_update_user(uint8_t index, bool clockwise) { + if (index == 0) { /* First encoder */ + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + } else if (index == 1) { /* Second encoder*/ + if (clockwise) { + tap_code(KC_UP); + } else { + tap_code(KC_DOWN); + } + } + return true; +} +#endif + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + set_single_persistent_default_layer(_QWERTY); + } + return false; + break; + case FN: + if (record->event.pressed) { + layer_on(_FN); + } else { + layer_off(_FN); + } + return false; + break; + case ADJ: + if (record->event.pressed) { + layer_on(_ADJ); + } else { + layer_off(_ADJ); + } + return false; + break; + //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released + case RGBRST: + #ifdef RGBLIGHT_ENABLE + if (record->event.pressed) { + eeconfig_update_rgblight_default(); + rgblight_enable(); + RGB_current_mode = rgblight_config.mode; + } + #endif + break; + } + return true; +} + +void matrix_init_user(void) { +#ifdef RGBLIGHT_ENABLE + RGB_current_mode = rgblight_config.mode; +#endif +} + + +// OLED Driver Logic +#ifdef OLED_ENABLE + +oled_rotation_t oled_init_user(oled_rotation_t rotation) { + if (!is_keyboard_master()) + return OLED_ROTATION_180; // flip 180 for offhand + return rotation; +} + +static void render_logo(void) { + static const char PROGMEM sol_logo[] = { + 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94, + 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4, + 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0}; + + oled_write_P(sol_logo, false); +} + +//assign the right code to your layers for OLED display +#define L_BASE 0 +#define L_FN (1<<_FN) +#define L_ADJ (1<<_ADJ) +#define L_ADJ_TRI (L_ADJ|L_FN) + +static void render_status(void) { + // Render to mode icon + static const char PROGMEM mode_logo[4][4] = { + {0x95,0x96,0x0a,0}, + {0xb5,0xb6,0x0a,0}, + {0x97,0x98,0x0a,0}, + {0xb7,0xb8,0x0a,0} }; + + if (keymap_config.swap_lalt_lgui != false) { + oled_write_P(mode_logo[0], false); + oled_write_P(mode_logo[1], false); + } else { + oled_write_P(mode_logo[2], false); + oled_write_P(mode_logo[3], false); + } + + // Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below + + oled_write_P(PSTR("Layer: "), false); + switch (layer_state) { + case L_BASE: + oled_write_P(PSTR("Laser \n"), false); + break; + case L_FN: + oled_write_P(PSTR("Function \n"), false); + break; + case L_ADJ: + case L_ADJ_TRI: + oled_write_P(PSTR("Adjustment\n"), false); + break; + default: + oled_write_P(PSTR("Undefined \n"), false); + } + + // Host Keyboard LED Status + led_t led_state = host_keyboard_led_state(); + oled_write_P(led_state.num_lock ? PSTR("NUMLOCK ") : PSTR(" "), false); + oled_write_P(led_state.caps_lock ? PSTR("CAPS ") : PSTR(" "), false); + oled_write_P(led_state.scroll_lock ? PSTR("SCLK ") : PSTR(" "), false); +} + +bool oled_task_user(void) { + if (is_keyboard_master()) + render_status(); + else + render_logo(); + + return false; +} + +#endif diff --git a/keyboards/rgbkb/sol/keymaps/brianweyer/rules.mk b/keyboards/rgbkb/sol/keymaps/brianweyer/rules.mk new file mode 100644 index 000000000000..f9832323b439 --- /dev/null +++ b/keyboards/rgbkb/sol/keymaps/brianweyer/rules.mk @@ -0,0 +1,15 @@ +# Overridden build options from rev1 + +# RGB Options +LED_MIRRORED = no # Mirror LEDs across halves (enable DIP 1 on slave, and DIP 2 and 3 on master) + +# Misc +OLED_ENABLE = yes # Enable the OLED Driver + + + + + +# Do not edit past here + +include keyboards/$(KEYBOARD)/post_rules.mk diff --git a/keyboards/rgbkb/zen/rev1/keymaps/jwlawrence/config.h b/keyboards/rgbkb/zen/rev1/keymaps/jwlawrence/config.h new file mode 100644 index 000000000000..ca7d19afabb6 --- /dev/null +++ b/keyboards/rgbkb/zen/rev1/keymaps/jwlawrence/config.h @@ -0,0 +1,42 @@ +/* +Copyright 2017 Danny Nguyen + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#pragma once + +// place overrides here + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +#undef RGBLED_NUM +#define RGBLIGHT_EFFECT_BREATHING +#define RGBLIGHT_EFFECT_RAINBOW_MOOD +#define RGBLIGHT_EFFECT_RAINBOW_SWIRL +#define RGBLIGHT_EFFECT_SNAKE +#define RGBLIGHT_EFFECT_KNIGHT +#define RGBLIGHT_EFFECT_CHRISTMAS +#define RGBLIGHT_EFFECT_STATIC_GRADIENT +#define RGBLIGHT_EFFECT_RGB_TEST +#define RGBLIGHT_EFFECT_ALTERNATING +#define RGBLIGHT_EFFECT_TWINKLE +#define RGBLED_NUM 16 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 diff --git a/keyboards/rgbkb/zen/rev1/keymaps/jwlawrence/keymap.c b/keyboards/rgbkb/zen/rev1/keymaps/jwlawrence/keymap.c new file mode 100644 index 000000000000..ece995075bc5 --- /dev/null +++ b/keyboards/rgbkb/zen/rev1/keymaps/jwlawrence/keymap.c @@ -0,0 +1,97 @@ +#include QMK_KEYBOARD_H + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _NAV 2 + + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + NAV, + +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Qwerty + * ,-----------------------------------------. .-----------------------------------------. + * | GESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * |CAPS(NAV)|A | S | D | F | G | | H | J | K | L | ; | " | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | | N | M | , | . | / |Shift | + * |------+------+------+------+------+------+------..-----+------+------+------+------+------+------| + * | Ctrl | Alt | GUI | GUI | NAV |Space |Delete||Enter|Space | NAV | - | = |RGBTOG|Enter | + * `------------------------------------------------''-----------------------------------------------' + */ + [_QWERTY] = LAYOUT( + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + LT(_NAV, KC_CAPS),KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LALT, KC_LGUI, KC_LGUI, MO(_NAV), KC_SPC, KC_DEL, KC_ENT, KC_SPACE, MO(_NAV), KC_MINS, KC_EQL, RGB_TOG, KC_ENT + ), + + /* NAV + * ,-----------------------------------------. .-----------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | |RGBSAI|RGBVAI|RGBSAD| QK_BOOT| [ | | ] | Pgup | Up | Pgdn |Insert| Home | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | |RGBHUD|RGBVAD|RGBHUI|RGBMOD| | | | Left | Down | Right|Delete| End | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * |Shift | | | | | | | NKRO | | | Pause| Back | Next | + * |------+------+------+------+------+------+------..-----+------+------+------+------+------+------| + * | Ctrl | Alt | GUI | | | | || | | | | Mute | VOLUP| VOLDN| + * `------------------------------------------------''-----------------------------------------------' + */ + [_NAV] = LAYOUT( + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + _______, RGB_SAI, RGB_VAI, RGB_SAD, QK_BOOT, KC_LBRC, KC_RBRC, KC_PGUP, KC_UP, KC_PGDN, KC_INS, KC_HOME, + _______, RGB_HUD, RGB_VAD, RGB_HUI, RGB_MOD, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_END, + KC_LSFT, _______, _______, _______, _______, _______, MAGIC_TOGGLE_NKRO, _______, _______, KC_MPLY, KC_MPRV, KC_MNXT, + KC_LCTL, KC_LALT, KC_LGUI, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLU, KC_VOLD + ), + +}; + +#ifdef AUDIO_ENABLE +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +#endif + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_qwerty); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + //case COLEMAK: + //if (record->event.pressed) { + //#ifdef AUDIO_ENABLE + //PLAY_SONG(tone_colemak); + //#endif + //persistant_default_layer_set(1UL<<_COLEMAK); + //} + //return false; + //break; + } + return true; +} diff --git a/keyboards/rgbkb/zen/rev1/keymaps/jwlawrence/rules.mk b/keyboards/rgbkb/zen/rev1/keymaps/jwlawrence/rules.mk new file mode 100644 index 000000000000..1e3cebb14515 --- /dev/null +++ b/keyboards/rgbkb/zen/rev1/keymaps/jwlawrence/rules.mk @@ -0,0 +1 @@ +RGBLIGHT_ENABLE = yes diff --git a/keyboards/rgbkb/zen/rev1/keymaps/samae/config.h b/keyboards/rgbkb/zen/rev1/keymaps/samae/config.h new file mode 100644 index 000000000000..b3521279cf0c --- /dev/null +++ b/keyboards/rgbkb/zen/rev1/keymaps/samae/config.h @@ -0,0 +1,35 @@ +/* +Copyright 2017 Danny Nguyen + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#pragma once + + +/* Select hand configuration */ + +// #define MASTER_LEFT +// #define MASTER_RIGHT +#define EE_HANDS + +#undef RGBLED_NUM +#define RGBLIGHT_EFFECT_BREATHING +#define RGBLIGHT_EFFECT_RAINBOW_MOOD +#define RGBLIGHT_EFFECT_RGB_TEST +#define RGBLIGHT_EFFECT_STATIC_GRADIENT +#define RGBLED_NUM 16 +#define RGBLIGHT_HUE_STEP 4 +#define RGBLIGHT_SAT_STEP 4 +#define RGBLIGHT_VAL_STEP 8 diff --git a/keyboards/rgbkb/zen/rev1/keymaps/samae/keymap.c b/keyboards/rgbkb/zen/rev1/keymaps/samae/keymap.c new file mode 100644 index 000000000000..19289846b65d --- /dev/null +++ b/keyboards/rgbkb/zen/rev1/keymaps/samae/keymap.c @@ -0,0 +1,79 @@ + /* Copyright 2020 Martin J. Potier + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General 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 QMK_KEYBOARD_H + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +enum layer_number { + _QWERTY = 0, + _NAV +}; + + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + NAV, + +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Qwerty + * ,-----------------------------------------. .-----------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * |DELETE| A | S | D | F | G | | H | J | K | L | ; | " | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | | N | M | , | . | / |RGBMOD| + * |------+------+------+------+------+------+------. .--------+------+------+------+------+------+------| + * | Ctrl | GUI | Alt |RGBTOG| NAV |Space | ESC | |Enter|Space/NAV| AltGr| NAV | | - | = | + * `------------------------------------------------' '--------------------------------------------------' + */ + [_QWERTY] = LAYOUT( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_DEL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RGB_MOD, + KC_LCTL, KC_LGUI, KC_LALT, RGB_TOG, MO(_NAV), KC_SPC, QK_GESC, KC_ENT, LT(_NAV, KC_SPACE), KC_RALT, MO(_NAV), _______, KC_MINS, KC_EQL + ), + + /* NAV + * ,-----------------------------------------. .-----------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | |RGBSAI|RGBVAI|RGBSAD| | [ | | ] | Pgup | Up | Pgdn |Insert| Home | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | |RGBHUD|RGBVAD|RGBHUI| | | | | Left | Down | Right|Delete| End | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * |Shift | | | | | | | | | | Pause| Back | Next | + * |------+------+------+------+------+------+------. .------+------+------+------+------+------+------| + * | Ctrl | GUI | Alt |RGBMOD| | | | | QK_BOOT| | | | Mute | VOLUP| VOLDN| + * `------------------------------------------------' '------------------------------------------------' + */ + [_NAV] = LAYOUT( + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + _______, RGB_SAI, RGB_VAI, RGB_SAD, _______, KC_LBRC, KC_RBRC, KC_PGUP, KC_UP, KC_PGDN, KC_INS, KC_HOME, + _______, RGB_HUD, RGB_VAD, RGB_HUI, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_END, + KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MPRV, KC_MNXT, + KC_LCTL, KC_LGUI, KC_LALT, RGB_MOD, _______, _______, _______, QK_BOOT, _______, _______, _______, KC_MUTE, KC_VOLU, KC_VOLD + ), + +}; diff --git a/keyboards/rgbkb/zen/rev1/keymaps/samae/rules.mk b/keyboards/rgbkb/zen/rev1/keymaps/samae/rules.mk new file mode 100644 index 000000000000..1e3cebb14515 --- /dev/null +++ b/keyboards/rgbkb/zen/rev1/keymaps/samae/rules.mk @@ -0,0 +1 @@ +RGBLIGHT_ENABLE = yes diff --git a/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/config.h b/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/config.h new file mode 100644 index 000000000000..d1fbe29c539c --- /dev/null +++ b/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/config.h @@ -0,0 +1,41 @@ +/* +Copyright 2019 starcalleramethyst + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#pragma once + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +#undef RGBLED_NUM +#define RGBLIGHT_EFFECT_BREATHING +#define RGBLIGHT_EFFECT_RAINBOW_MOOD +#define RGBLIGHT_EFFECT_RAINBOW_SWIRL +#define RGBLIGHT_EFFECT_SNAKE +#define RGBLIGHT_EFFECT_KNIGHT +#define RGBLIGHT_EFFECT_CHRISTMAS +#define RGBLIGHT_EFFECT_STATIC_GRADIENT +#define RGBLIGHT_EFFECT_RGB_TEST +#define RGBLIGHT_EFFECT_ALTERNATING +#define RGBLIGHT_EFFECT_TWINKLE +#define RGBLED_NUM 16 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 +#define TAPPING_TERM 200 diff --git a/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/keymap.c b/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/keymap.c new file mode 100644 index 000000000000..47e8e3fa2446 --- /dev/null +++ b/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/keymap.c @@ -0,0 +1,148 @@ +#include QMK_KEYBOARD_H + +uint16_t copy_paste_timer; + +enum custom_keycodes { + S_H = SAFE_RANGE, // slack here + S_H_P, // slack here + paste + T_H_B, // ticket header bike + T_H_T, // ticket header tread + E_OP, // email open + E_CL, // email close + E_FU, // email follow up + E_SS, // email service schedule + SCRN_C, // screen clip + DC_C, // double click + copy + KC_CCCV, // one key copy/paste + +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + + case S_H: + if (record->event.pressed) { + SEND_STRING("@HERE"); + } + break; + + case S_H_P: + if (record->event.pressed) { + SEND_STRING("@HERE" SS_TAP(X_SPC) SS_LCTL("v")); + } + break; + + case T_H_B: + if (record->event.pressed) { + SEND_STRING("Your Peloton Bike - "); + } + break; + + case T_H_T: + if (record->event.pressed) { + SEND_STRING("Your Peloton Tread - "); + } + break; + + case E_OP: + if (record->event.pressed) { + // when keycode E_OP is pressed + SEND_STRING("Hi , "SS_TAP(X_ENTER)SS_TAP(X_ENTER)"Thank you for contacting Peloton."SS_TAP(X_ENTER)SS_TAP(X_ENTER)); + } +break; + + case E_CL: + if (record->event.pressed) { + SEND_STRING("Please let me know if you have any other questions."SS_TAP(X_ENTER)SS_TAP(X_ENTER)"Thank you for being the best part of Peloton."); + } +break; + + case E_FU: + if (record->event.pressed) { + SEND_STRING("I will be personally watching this issue and will reach out to you after this is complete to make sure everything went smoothly."SS_TAP(X_ENTER)SS_TAP(X_ENTER)); + } +break; + + case E_SS: + if (record->event.pressed) { + SEND_STRING("Please click here to schedule your service."SS_TAP(X_ENTER)SS_TAP(X_ENTER)); + } +break; + + case SCRN_C: + if (record->event.pressed) { + tap_code16(C(S(KC_F5))); + } +break; + + case DC_C: + if (record->event.pressed) { + tap_code(KC_BTN1); + tap_code(KC_BTN1); + tap_code16(C(KC_C)); + } +break; + + case KC_CCCV: // One key copy/paste + if (record->event.pressed) { + copy_paste_timer = timer_read(); + } else { + if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy + tap_code16(C(KC_C)); + } else { // Tap, paste + tap_code16(C(KC_V)); + } + } +break; + + } + return true; +}; + +//Tap Dance Declarations +enum { + TD_SPC_DOT = 0 +}; + +//Tap Dance Definitions +tap_dance_action_t tap_dance_actions[] = { + //Tap once for Esc, twice for Caps Lock + [TD_SPC_DOT] = ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_PDOT) +// Other declarations would go here, separated by commas, if you have them +}; + + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT( +QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, +KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, +KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, +KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_SENT, +KC_CCCV, KC_LGUI, KC_LALT, RGB_TOG, MO(1), TD(TD_SPC_DOT), KC_BSPC, KC_ENT, TD(TD_SPC_DOT), MO(2), KC_MINS, KC_EQL, KC_PGUP, KC_PGDN), + + [1] = LAYOUT( +KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, +KC_TRNS, RGB_SAI, RGB_VAI, RGB_SAD, QK_BOOT, KC_LBRC, KC_RBRC, KC_PGUP, KC_UP, KC_PGDN, KC_INS, KC_HOME, +KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_END, +KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MAGIC_TOGGLE_NKRO, KC_TRNS, KC_TRNS, KC_MPLY, KC_MPRV, KC_MNXT, +KC_NO, KC_LGUI, KC_LALT, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLU, KC_VOLD), + +/* [2] = LAYOUT( +QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,KC_7, KC_8, KC_9, KC_0, KC_BSLS, +KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, +KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, +KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, +KC_LCTL, KC_LGUI, KC_LALT, KC_NO, TO(0), KC_SPC, KC_BSPC, KC_ENT, KC_SPC, TO(0), KC_MINS, KC_EQL, KC_PGUP, KC_PGDN), +*/ + [2] = LAYOUT( +KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, +KC_NO, KC_NO, KC_NO, KC_NO, S_H_P, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, +KC_NO, E_CL, E_FU, E_OP, S_H, SCRN_C, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, +KC_NO, DC_C, E_SS, T_H_T, T_H_B, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, +KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO) + +}; + + diff --git a/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/rules.mk b/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/rules.mk new file mode 100644 index 000000000000..8e3e21514283 --- /dev/null +++ b/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/rules.mk @@ -0,0 +1,3 @@ +RGBLIGHT_ENABLE = yes +TAP_DANCE_ENABLE = yes +MOUSEKEY_ENABLE = yes \ No newline at end of file diff --git a/keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/keymap.c b/keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/keymap.c new file mode 100644 index 000000000000..ca2be62a1948 --- /dev/null +++ b/keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/keymap.c @@ -0,0 +1,151 @@ +/* Copyright 2019 Josef Adamcik + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + +enum katana_layers { + /* _M_XYZ = Mac Os, _W_XYZ = Win/Linux */ + _M_COLEMAK, + _M_QWERTY, + _W_COLEMAK, + _W_QWERTY, + _NUMB, + _SYMB, + _M_EXT, + _W_EXT +}; + +enum katana_keycodes { + M_COLEMAK = SAFE_RANGE, + M_QWERTY, + W_COLEMAK, + W_QWERTY +}; + +#define K_SPCFN LT(_SYMB, KC_SPACE) /* Tap for space, hold for symbols layer */ +#define K_BSPFN LT(_SYMB, KC_BSPC) /* Tap for backspace, hold for symbols layer */ +/* Linux/win variants */ +#define W_LEFT_MOD MT(MOD_RCTL, KC_LEFT) +#define W_DOWN_MOD MT(MOD_RALT, KC_DOWN) +#define W_UP_MOD MT(MOD_RGUI, KC_UP) +#define W_UNDO LCTL(KC_Z) +#define W_CUT LCTL(KC_X) +#define W_COPY LCTL(KC_C) +#define W_PASTE LCTL(KC_V) +#define W_PRVWD LCTL(KC_LEFT) +#define W_NXTWD LCTL(KC_RIGHT) +#define W_LSTRT KC_HOME +#define W_LEND KC_END +/* Mac variants */ +#define M_LEFT_MOD MT(MOD_RGUI, KC_LEFT) +#define M_DOWN_MOD MT(MOD_RALT, KC_DOWN) +#define M_UP_MOD MT(MOD_RCTL, KC_UP) +#define M_UNDO LGUI(KC_Z) +#define M_CUT LGUI(KC_X) +#define M_COPY LGUI(KC_C) +#define M_PASTE LGUI(KC_V) +#define M_PRVWD LALT(KC_LEFT) +#define M_NXTWD LALT(KC_RIGHT) +#define M_LSTRT LGUI(KC_LEFT) +#define M_LEND LGUI(KC_RIGHT) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[_M_COLEMAK] = LAYOUT( + KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, TG(_NUMB),KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_LBRC, KC_RBRC, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, + MO(_M_EXT),KC_A, KC_R, KC_S, KC_T, KC_D, KC_MINS, KC_QUOT, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_EQL, KC_DEL, KC_BSLS, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + MO(_SYMB), KC_LCTL, KC_LALT, KC_LGUI, K_BSPFN, KC_ENT, KC_SPACE, M_LEFT_MOD,M_DOWN_MOD,M_UP_MOD, KC_RIGHT,MO(_SYMB) +), +[_M_QWERTY] = LAYOUT( + KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, TG(_NUMB),KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + MO(_M_EXT),KC_A, KC_S, KC_D, KC_F, KC_G, KC_MINS, KC_QUOT, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_EQL, KC_DEL, KC_BSLS, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + MO(_SYMB), KC_LCTL, KC_LALT, KC_LGUI, K_BSPFN, KC_ENT, KC_SPACE, M_LEFT_MOD,M_DOWN_MOD,M_UP_MOD, KC_RIGHT,MO(_SYMB) +), +[_W_COLEMAK] = LAYOUT( + KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, TG(_NUMB),KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_LBRC, KC_RBRC, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, + MO(_W_EXT),KC_A, KC_R, KC_S, KC_T, KC_D, KC_MINS, KC_QUOT, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_EQL, KC_DEL, KC_BSLS, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + MO(_SYMB), KC_LGUI, KC_LALT, KC_LCTL, K_BSPFN, KC_ENT, KC_SPACE, W_LEFT_MOD,W_DOWN_MOD,W_UP_MOD, KC_RIGHT,MO(_SYMB) +), +[_W_QWERTY] = LAYOUT( + KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, TG(_NUMB),KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + MO(_W_EXT),KC_A, KC_S, KC_D, KC_F, KC_G, KC_MINS, KC_QUOT, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_EQL, KC_DEL, KC_BSLS, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + MO(_SYMB), KC_LGUI, KC_LALT, KC_LCTL, K_BSPFN, KC_ENT, KC_SPACE, W_LEFT_MOD,W_DOWN_MOD,W_UP_MOD, KC_RIGHT,MO(_SYMB) +), +[_NUMB] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______,_______, KC_PSLS, KC_PAST, KC_PMNS, _______, _______, + _______, _______, _______, KC_MS_U, _______, _______, _______, _______,_______, KC_7, KC_8, KC_9, KC_PPLS, _______, + _______, KC_BTN2, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______,_______, KC_4, KC_5, KC_6, KC_PPLS, _______, + _______, _______, KC_ACL0, KC_ACL1, KC_ACL2, _______, _______, _______, _______,_______, KC_1, KC_2, KC_3, KC_PENT, _______, + _______, _______, _______, _______, KC_BTN1, _______, KC_P0, KC_PDOT, _______, _______, _______, _______ +), +[_SYMB] = LAYOUT( + QK_BOOT, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, + _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_VOLD, KC_VOLU, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, + _______, KC_PLUS, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_MPRV, KC_MPLY, KC_MNXT, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______, + _______, _______, _______, _______, KC_DEL, _______, _______, _______, _______, _______, _______, _______ +), +[_M_EXT] = LAYOUT( + QK_BOOT,M_COLEMAK,M_QWERTY,W_COLEMAK,W_QWERTY,_______,_______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, M_PRVWD, KC_UP, M_NXTWD, _______, _______, + _______, KC_LALT, KC_LCTL, KC_LSFT, _______, KC_CAPS, _______, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL, _______, + _______, M_UNDO, M_CUT, M_COPY, M_PASTE, _______, _______, _______, _______, _______, M_LSTRT, _______, M_LEND, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), +[_W_EXT] = LAYOUT( + QK_BOOT,M_COLEMAK,M_QWERTY,W_COLEMAK,W_QWERTY,_______,_______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, W_PRVWD, KC_UP, W_NXTWD, _______, _______, + _______, KC_LALT, KC_LCTL, KC_LSFT, _______, KC_CAPS, _______, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL, _______, + _______, W_UNDO, W_CUT, W_COPY, W_PASTE, _______, _______, _______, _______, _______, W_LSTRT, _______, W_LEND, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +) +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case M_QWERTY: + if (record->event.pressed) { + set_single_persistent_default_layer(_M_QWERTY); + } + return false; + break; + case M_COLEMAK: + if (record->event.pressed) { + set_single_persistent_default_layer(_M_COLEMAK); + } + return false; + break; + case W_QWERTY: + if (record->event.pressed) { + set_single_persistent_default_layer(_W_QWERTY); + } + return false; + break; + case W_COLEMAK: + if (record->event.pressed) { + set_single_persistent_default_layer(_W_COLEMAK); + } + return false; + break; + } + return true; +} diff --git a/keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/readme.md b/keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/readme.md new file mode 100644 index 000000000000..5d72b1defa02 --- /dev/null +++ b/keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/readme.md @@ -0,0 +1,23 @@ +![Multi OS Katana60 layout image](https://i.imgur.com/1w2OA1o.png) + +# Multi OS Katana60 layout + +Based on the default Katana60 layout, customized by [Josef Adamcik](https://josef-adamcik.cz) with several basic layers (Colemak vs Qwerty, Mac OS vs Linux/Win) + +- Supports 4 default layers: Colemak Mac, Qwerty Mac, Colemak Win/Linux, Qwerty Win/Linux. Switching between default layers is persisted. For more details about Mac vs Win/Linux see below. +- There are arrows mapped to the right side of the bottom row on Katana6O. I kept this mapping but modified it a bit - when you press and hold any of the first three arrow keys it acts as a modifier (CMD, OPT, CTRL). If you just tap it, it acts as an arrow. + +## Mac versus Win/Linux layers: + +- Modifiers are ordered differently. Mac version has (from the middle to the outside): CMD, ALT, CTRL, Win/Linux version has CTRL, ALT, CMD. It's meant to make switching between platforms easier. +- Extend layer is different, so the keys which represent shortcuts ("previous/next word" and "copy", "paste", "cut", "undo") work properly. + +## More details - reasons for some choices in this layout + +I use Mac for work and Ubuntu at home. So I would like to stay compatible with both systems. The main problem is the modifiers. Firstly, they tend to be ordered differently on Mac keyboards. Secondly, the main modifier on Mac is CMD (equivalent to WIn or SUPER on other keyboards). The same role is played by CTRL on Windows and Linux. Most of IDE’s or editors (Android Studio, VS Code, SublimeText) follow this habit in their OS-specific keymaps. + +I am a user of the Colemak layout. But I would like to have the ability to switch to qwerty. That would allow my other people to use my keyboard occasionally. + +I am a heavy user of keyboard shortcuts. So I need the layout to support my needs. Some keyboard layout has modifiers only on one side of the keyboard or they hide some of them (CMD) under a key combination. I tend to press the modifiers for a key shortcut with the opposite hand to the one which presses the letter. + +Layout in [keyboard-layout-editor.com](http://www.keyboard-layout-editor.com/#/gists/14d62ee67d36621c37888783fa29b107) diff --git a/keyboards/rominronin/katana60/rev1/keymaps/rominronin/config.h b/keyboards/rominronin/katana60/rev1/keymaps/rominronin/config.h new file mode 100644 index 000000000000..08c51f6cb50c --- /dev/null +++ b/keyboards/rominronin/katana60/rev1/keymaps/rominronin/config.h @@ -0,0 +1,24 @@ +/* Copyright 2017 Baris Tosun + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here + +#endif diff --git a/keyboards/rominronin/katana60/rev1/keymaps/rominronin/keymap.c b/keyboards/rominronin/katana60/rev1/keymaps/rominronin/keymap.c new file mode 100644 index 000000000000..615de932f89f --- /dev/null +++ b/keyboards/rominronin/katana60/rev1/keymaps/rominronin/keymap.c @@ -0,0 +1,65 @@ +/* Copyright 2017 Baris Tosun + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + +// MacOS based definitions. +#define K_SPCFN LT(SYMB, KC_SPACE) // Tap for space, hold for symbols layer +#define K_PRVWD LALT(KC_LEFT) // Previous word +#define K_NXTWD LALT(KC_RIGHT) // Next word +#define K_LSTRT LGUI(KC_LEFT) // Start of line +#define K_LEND LGUI(KC_RIGHT) // End of line +#define UNDO LGUI(KC_Z) // UNDO +#define CUT LGUI(KC_X) // CUT +#define COPY LGUI(KC_C) // COPY +#define PASTE LGUI(KC_V) // PASTE + + +#define BASE 0 // Default +#define NUMB 1 // Numbers +#define SYMB 2 // Symbols +#define CURS 3 // Text Editing + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[BASE] = LAYOUT( /* Base */ + KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, DF(1), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_LBRC, KC_RBRC, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, KC_BSPC, + MO(3), KC_A, KC_R, KC_S, KC_T, KC_G, KC_HOME, KC_PGUP, KC_M, KC_N, KC_E, KC_I, KC_O, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_END, KC_DEL, KC_PGDN, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + MO(2), KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, KC_ENT, K_SPCFN, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,MO(2) + ), +[NUMB] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, DF(0), KC_PSLS, KC_PAST, KC_PMNS, _______, _______, _______, _______, + _______, _______, _______, KC_MS_U, _______, _______, _______, KC_7, KC_8, KC_9, KC_PPLS, _______, _______, _______, + _______, KC_BTN2, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_4, KC_5, KC_6, KC_PPLS, _______, _______, _______, + _______, _______, KC_ACL0, KC_ACL1, KC_ACL2, _______, _______, _______, KC_1, KC_2, KC_3, KC_PENT, _______, _______, _______, + _______, _______, _______, _______, KC_BTN1, _______, KC_P0, KC_PDOT, KC_PENT, _______, _______, _______ + ), +[SYMB] = LAYOUT( + QK_BOOT, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, + _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_VOLD, KC_VOLU, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, + _______, KC_PLUS, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_MPRV, KC_MPLY, KC_MNXT, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______, + _______, _______, _______, _______, KC_DEL, _______, _______, _______, _______, _______, _______, _______ + ), +[CURS] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, KC_WH_U, _______, _______, _______, _______, _______, _______, K_PRVWD, KC_UP, K_NXTWD, _______, _______, + _______, KC_LCTL, KC_WH_D, KC_LSFT, _______, _______, _______, _______, KC_BSPC, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL, _______, + _______, UNDO, CUT, COPY, PASTE, _______, _______, _______, _______, _______, K_LSTRT, _______, K_LEND, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) + +}; diff --git a/keyboards/rominronin/katana60/rev1/keymaps/rominronin/readme.md b/keyboards/rominronin/katana60/rev1/keymaps/rominronin/readme.md new file mode 100644 index 000000000000..9647426f7028 --- /dev/null +++ b/keyboards/rominronin/katana60/rev1/keymaps/rominronin/readme.md @@ -0,0 +1,5 @@ +# RominRonin's keymap for katana60 + +My own personal daily layout. OS keys are oriented for MacOS and the keys are in COLEMAK Mod-DH layout. + +# TODO: references to extend layer and symbol layers \ No newline at end of file diff --git a/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/keymap.c b/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/keymap.c new file mode 100644 index 000000000000..6919b4699075 --- /dev/null +++ b/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/keymap.c @@ -0,0 +1,79 @@ +/* Copyright 2019 rominronin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + +// MacOS based definitions. +#define K_SPCFN LT(SYMB, KC_SPACE) // Tap for space, hold for symbols layer +#define K_PRVWD LALT(KC_LEFT) // Previous word +#define K_NXTWD LALT(KC_RIGHT) // Next word +#define K_LSTRT LGUI(KC_LEFT) // Start of line +#define K_LEND LGUI(KC_RIGHT) // End of line +#define UNDO LGUI(KC_Z) // UNDO +#define CUT LGUI(KC_X) // CUT +#define COPY LGUI(KC_C) // COPY +#define PASTE LGUI(KC_V) // PASTE + +enum layer_names { + BASE, + NUMB, + SYMB, + CURS, + BASE2, +}; + +// Defines the keycodes used by our macros in process_record_user +enum custom_keycodes { + QMKBEST = SAFE_RANGE, + QMKURL +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [BASE] = LAYOUT_7u_a(/* Base */ + KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, DF(4), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_LBRC, KC_RBRC, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, KC_BSPC, + MO(3), KC_A, KC_R, KC_S, KC_T, KC_G, KC_HOME, KC_PGUP, KC_M, KC_N, KC_E, KC_I, KC_O, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_END, KC_DEL, KC_PGDN, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LALT, KC_LGUI, K_SPCFN, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT + ), + [NUMB] = LAYOUT_7u_a( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PEQL, KC_PSLS, KC_PAST, _______, _______, + _______, _______, _______, KC_MS_U, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, _______, + DF(0), KC_BTN2, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_PPLS, _______, + _______, _______, KC_ACL0, KC_ACL1, KC_ACL2, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______, + _______, _______, _______, KC_P0, KC_PDOT, KC_PENT, _______, _______ + ), + [SYMB] = LAYOUT_7u_a( + QK_BOOT, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, + _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_VOLD, KC_VOLU, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, + _______, KC_PLUS, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_MPRV, KC_MPLY, KC_MNXT, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______, + _______, _______, _______, KC_DEL, _______, _______, _______, _______ + ), + [CURS] = LAYOUT_7u_a( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, K_PRVWD, KC_UP, K_NXTWD, _______, _______, + _______, _______, KC_LCTL, KC_LALT, KC_LSFT, _______, _______, _______, KC_BSPC, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL, _______, + _______, UNDO, CUT, COPY, PASTE, _______, _______, _______, _______, _______, K_LSTRT, _______, K_LEND, _______, _______, + _______, _______, _______, DF(1), _______, _______, _______, _______ + ), + [BASE2] = LAYOUT_7u_a(/* Base */ + KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, DF(0), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_LBRC, KC_RBRC, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, KC_BSPC, + KC_CAPS, KC_A, KC_R, KC_S, KC_T, KC_G, KC_HOME, KC_PGUP, KC_M, KC_N, KC_E, KC_I, KC_O, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_END, KC_DEL, KC_PGDN, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LALT, KC_LGUI, KC_SPACE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT + ) +}; diff --git a/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/readme.md b/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/readme.md new file mode 100644 index 000000000000..6d0bbe8b2d15 --- /dev/null +++ b/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/readme.md @@ -0,0 +1 @@ +# The default keymap for katana60_rev2 diff --git a/keyboards/ungodly/launch_pad/keymaps/warzone/keymap.c b/keyboards/ungodly/launch_pad/keymaps/warzone/keymap.c new file mode 100644 index 000000000000..e3292dd30c89 --- /dev/null +++ b/keyboards/ungodly/launch_pad/keymaps/warzone/keymap.c @@ -0,0 +1,270 @@ +/* Copyright 2020 Ungodly Design + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H +#include "analog.h" +#include "qmk_midi.h" + +/* Force Numlock on */ +void matrix_init_user (void) { + if (!host_keyboard_led_state().num_lock) { + tap_code(KC_NUM_LOCK); + } +} + +// Tap Dance declarations +enum { + TD_ESC_TAB, + TD_NUMLOCK_L1, + TD_3_L0 +}; + +// Tap Dance definitions +tap_dance_action_t tap_dance_actions[] = { + // Tap once for Escape, twice for Number 4 (armor plates in warzone) + [TD_ESC_TAB] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_TAB), + [TD_3_L0] = ACTION_TAP_DANCE_LAYER_TOGGLE(KC_3, 1), + [TD_NUMLOCK_L1] = ACTION_TAP_DANCE_LAYER_TOGGLE(KC_NUM_LOCK, 1), +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Numpad Layer + * ,-------------------. + * | NV | / | * |BK/FN| + * |----|----|----|-----| + * | 7 | 8 | 9 | - | + * |----|----|----|-----| + * | 4 | 5 | 6 | + | + * |----|----|----|-----| + * | 1 | 2 | 3 | En | + * |----|----|----|-----| + * | 0 | 0 | . | En | + * `--------------------' + */ + [0] = LAYOUT_ortho_5x4( + TD(TD_NUMLOCK_L1), KC_PSLS, KC_PAST, LT(2, KC_BSPC), + KC_P7, KC_P8, KC_P9, KC_PMNS, + KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_P1, KC_P2, KC_P3, KC_PENT, + KC_P0, KC_P0, KC_PDOT, KC_PENT + ), + /* Keymap _WAR: (Warzone Layer) Default Numpad Layer for COD Warzone N00BS + * ,-------------------. + * | R | F | V | Spc | + * |----|----|----|-----| + * | E | D | C | Alt | + * |----|----|----|-----| + * | W | S | X | 4 | + * |----|----|----|-----| + * | Q | A | Z | 3 | + * |----|----|----|-----| + * | Esc|Ctrl|Shift| M | + * `--------------------' + */ + [1] = LAYOUT_ortho_5x4( + KC_R, KC_F, KC_V, KC_SPACE, + KC_E, KC_D, KC_C, KC_LALT, + KC_W, KC_S, KC_X, KC_4, + KC_Q, KC_A, KC_Z, TD(TD_3_L0), + TD(TD_ESC_TAB), KC_LCTL, KC_LSFT, KC_M + ), + /* Keymap _FN: RGB Function Layer + * ,-------------------. + * |LAYR| | |RTOG| + * |----|----|----|----| + * |HUD |HUI | |RGBP| + * |----|----|----|----| + * |SAD |SAI | |RMOD| + * |----|----|----|----| + * |VAD |VAS | | | + * |----|----|----|----| + * |RST |RST | | | + * `-------------------' + */ + [2] = LAYOUT_ortho_5x4( + KC_LUP, XXXXXXX, XXXXXXX, RGB_TOG, + RGB_HUD, RGB_HUI, XXXXXXX, RGB_M_P, + RGB_SAD, RGB_SAI, XXXXXXX, RGB_MOD, + RGB_VAD, RGB_VAI, XXXXXXX, XXXXXXX, + QK_BOOT, QK_BOOT, XXXXXXX, XXXXXXX + ), +}; + +// (Optional) Rotary Encoder, Volume Control +bool encoder_update_user(uint8_t index, bool clockwise) { + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + return true; +} + +// Potentiometer Slider, MIDI Control +uint8_t divisor = 0; +void slider(void){ + if (divisor++) { // only run the slider function 1/256 times it's called + return; + } + midi_send_cc(&midi_device, 2, 0x3E, 0x7F - (analogReadPin(SLIDER_PIN) >> 3)); +} + +void matrix_scan_user(void) { + slider(); +} + +// 0.91" OLED, 128x32 resolution +#ifdef OLED_ENABLE +oled_rotation_t oled_init_user(oled_rotation_t rotation) { + return OLED_ROTATION_180; +} + +static void render_rocket_logo(void) { + static const char PROGMEM rocket_logo[]={ + // Rocket Screen + // 'home', 128x32px + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x80, 0x80, 0xc0, 0x40, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x20, 0x50, 0x50, 0x90, + 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x10, 0x10, 0xf0, 0x10, 0x10, 0x08, 0x08, 0x08, 0x04, 0x04, + 0x04, 0xfc, 0xfc, 0xfc, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0xfc, 0x7c, 0x7e, 0x7e, 0x7f, + 0x81, 0x81, 0x81, 0x81, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, + 0xff, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0x01, 0x01, 0x01, 0xf9, 0x01, 0xf9, 0x01, + 0xf9, 0x01, 0xf9, 0x01, 0x01, 0x01, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe6, + 0xe6, 0xe6, 0xe6, 0xe6, 0xff, 0x8c, 0x52, 0x52, 0x52, 0xde, 0x84, 0x08, 0x84, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x04, + 0x05, 0x05, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0x04, 0x04, 0x07, 0x04, 0x04, 0x08, 0x08, 0x08, 0x10, 0x10, + 0x10, 0x1f, 0x1f, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x20, 0x20, 0x40, + 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7f, + 0x7f, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x40, 0x40, 0x40, 0x4a, 0x44, 0x4a, 0x40, + 0x4f, 0x40, 0x4f, 0x40, 0x40, 0x40, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x9c, + 0x9c, 0x9c, 0x9c, 0x1c, 0xff, 0x31, 0x4a, 0x4a, 0x4a, 0x7b, 0x10, 0x21, 0x10, 0x21, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + oled_write_raw_P(rocket_logo, sizeof(rocket_logo)); +} +static void render_warzone_logo(void) { + static const char PROGMEM warzone_logo[]={ + // Home Screen + // 'warzone_bit', 128x32px + 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe0, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0xe0, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0xfc, 0xf0, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x7f, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x80, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf8, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x1f, + 0x07, 0x01, 0x00, 0x00, 0x00, 0x03, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf0, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x1f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, + 0xff, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x80, 0xe0, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x07, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x03, 0x03, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfe, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x03, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, + 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x01, 0x0f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, + 0x00, 0x03, 0x1f, 0x3f, 0x3f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x3f, 0x3f, + 0x1f, 0x07, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, + 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x1f, 0x3f, 0x3f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, + 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, + 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x07, 0x7f, 0x7f, + 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x0f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x00 + }; + oled_write_raw_P(warzone_logo, sizeof(warzone_logo)); +} +static void render_light_logo(void) { + static const char PROGMEM light_logo[]={ + // RGB Screen + // 'rgb', 128x32px + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x9c, 0x80, 0x80, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, + 0x80, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x20, 0x50, 0x50, 0x90, + 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x00, 0x00, 0xe0, 0x19, 0x04, 0x62, 0x11, 0x09, 0x04, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x01, 0x02, 0x04, 0x19, 0x10, 0x10, 0xf0, 0x00, 0x00, 0xf0, 0x00, 0xf0, 0xe0, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x24, 0x04, + 0x07, 0xe4, 0x24, 0x24, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x04, + 0x05, 0x05, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x88, 0x30, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0x40, 0x60, 0x30, 0x98, 0x08, 0x08, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x0f, 0x07, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x22, 0x24, + 0x24, 0xc4, 0x44, 0x22, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1d, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, + 0x02, 0x03, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + oled_write_raw_P(light_logo, sizeof(light_logo)); +} + +bool oled_task_user(void) { + switch (get_highest_layer(layer_state)) { + case 0: + render_rocket_logo(); + break; + case 1: + render_warzone_logo(); + break; + case 2: + render_light_logo(); + break; + default: + // Or use the write_ln shortcut over adding '\n' to the end of your string + oled_write_ln_P(PSTR(" UND"), false); + break; + } + return false; +} +#endif diff --git a/keyboards/ungodly/launch_pad/keymaps/warzone/rules.mk b/keyboards/ungodly/launch_pad/keymaps/warzone/rules.mk new file mode 100644 index 000000000000..791d5ab50213 --- /dev/null +++ b/keyboards/ungodly/launch_pad/keymaps/warzone/rules.mk @@ -0,0 +1,2 @@ +VIA_ENABLE = yes +TAP_DANCE_ENABLE = yes diff --git a/keyboards/waterfowl/keymaps/cyanduck/keymap.c b/keyboards/waterfowl/keymaps/cyanduck/keymap.c new file mode 100644 index 000000000000..ac52c7454df8 --- /dev/null +++ b/keyboards/waterfowl/keymaps/cyanduck/keymap.c @@ -0,0 +1,129 @@ +/* Copyright 2022 CyanDuck +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General 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 QMK_KEYBOARD_H + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _COLEMAKDH, + _NAVNUM, + _SYM, + _FUNC, + _GAME +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Colemak-DH + * + * ,----------------------------------. ,----------------------------------. + * | Q | W | F | P | B | | J | L | U | Y | ; | + * |------+------+------+------+------| |------+------+------+------+------| + * | A | R | S | T | G | | M | N | E | I | O | + * |------+------+------+------+------| ,-----. ,-----. |------+------+------+------+------| + * | Z | X | C | D | V | | 2 | | 3 | | K | H | , | . | / | + * `----------------------------------' `-----' `-----' `----------------------------------' + * ,-----. ,--------------------. ,--------------------. ,-----. + * | 1 | | DEL | SPACE | TAB | | TO(0) | BS | ENTER | | 4 | + * `-----' `--------------------' `--------------------' `-----' + */ +[_COLEMAKDH] = LAYOUT( + KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, + KC_A, MT(MOD_LALT, KC_R), MT(MOD_LCTL, KC_S), MT(MOD_LSFT, KC_T), KC_G, KC_M, MT(MOD_LSFT, KC_N), MT(MOD_LCTL, KC_E), MT(MOD_LALT, KC_I), KC_O, + KC_Z, KC_X, KC_C, MT(MOD_LGUI, KC_D), KC_V, KC_K, MT(MOD_LGUI, KC_H), KC_COMM, KC_DOT, KC_SLSH, + KC_1, LT(3,KC_DEL), LT(1,KC_SPC), KC_TAB, KC_2, KC_3, TO(0), KC_BSPC, LT(2,KC_ENT), KC_4 +), + +/* NAVNUM + * + * ,----------------------------------. ,----------------------------------. + * | ESC | PgUp | UP | PgDn | TO(4)| | / | 7 | 8 | 9 | - | + * |------+------+------+------+------| |------+------+------+------+------| + * | Home | Left | Down | Right| End | | = | 4 | 5 | 6 | + | + * |------+------+------+------+------| ,-----. ,-----. |------+------+------+------+------| + * | | | INS | TO(2)| | | 2 | | 3 | | 0 | 1 | 2 | 3 | * | + * `----------------------------------' `-----' `-----' `----------------------------------' + * ,-----. ,--------------------. ,--------------------. ,-----. + * | 1 | | DEL | SPACE | MO(3)| | TO(0) | BS | ENTER | | 4 | + * `-----' `--------------------' `--------------------' `-----' + */ +[_NAVNUM] = LAYOUT( + KC_ESC, KC_PGUP, KC_UP, KC_PGDN, TO(4), KC_SLSH, KC_7, KC_8, KC_9, KC_MINS, + KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_EQL, KC_4, KC_5, KC_6, KC_PLUS, + KC_NO, KC_NO, KC_INS, TO(2), KC_NO, KC_0, KC_1, KC_2, KC_3, KC_ASTR, + KC_1, LT(3,KC_DEL), LT(1,KC_SPC), KC_ESC, KC_2, KC_3, TO(0), KC_BSPC, LT(2,KC_ENT), KC_4 +), + +/* SYM + * + * ,----------------------------------. ,----------------------------------. + * | % | @ | [ | ] | \ | | ¦ | ¬ | ^ | | | + * |------+------+------+------+------| |------+------+------+------+------| + * | # | ! | ( | ) | | | | _ | ' | " | ~ | ` | + * |------+------+------+------+------| ,-----. ,-----. |------+------+------+------+------| + * | $ | £ | { | } | & | | 2 | | 3 | | TO(1)| | | | | + * `----------------------------------' `-----' `-----' `----------------------------------' + * ,-----. ,--------------------. ,--------------------. ,-----. + * | 1 | | DEL | SPACE | TAB | | TO(0) | BS | ENTER | | 4 | + * `-----' `--------------------' `--------------------' `-----' + */ +[_SYM] = LAYOUT( + KC_PERC, S(KC_QUOT), KC_LBRC, KC_RBRC, KC_NUBS, RALT(KC_GRV), S(KC_GRV), KC_CIRC, KC_NO, KC_NO, + KC_NONUS_HASH, KC_EXLM, KC_LPRN, KC_RPRN, S(KC_NUBS), KC_UNDS, KC_QUOT, S(KC_2), S(KC_NUHS), KC_GRV, + KC_DLR, S(KC_3), KC_LCBR, KC_RCBR, KC_AMPR, TO(1), KC_NO, KC_NO, KC_NO, KC_NO, + KC_1, LT(3,KC_DEL), LT(1,KC_SPC), KC_TAB, KC_2, KC_3, TO(0), KC_BSPC, LT(2,KC_ENT), KC_4 +), + +/* FUNC + * + * ,----------------------------------. ,----------------------------------. + * | | | | | | | | F7 | F8 | F9 | F11 | + * |------+------+------+------+------| |------+------+------+------+------| + * | | | | | | | | F4 | F5 | F6 | F12 | + * |------+------+------+------+------| ,-----. ,-----. |------+------+------+------+------| + * | Reset| | | | | | 2 | | 3 | | F10 | F1 | F2 | F3 | F13 | + * `----------------------------------' `-----' `-----' `----------------------------------' + * ,-----. ,--------------------. ,--------------------. ,-----. + * | 1 | | DEL | SPACE | TAB | | TO(0) | BS | ENTER | | 4 | + * `-----' `--------------------' `--------------------' `-----' + */ +[_FUNC] = LAYOUT( + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F11, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F4, KC_F5, KC_F6, KC_F12, + QK_BOOT, KC_NO, KC_NO, KC_NO, KC_NO, KC_F10, KC_F1, KC_F2, KC_F3, KC_F13, + KC_1, LT(3,KC_DEL), LT(1,KC_SPC), KC_TAB, KC_2, KC_3, TO(0), KC_BSPC, LT(2,KC_ENT), KC_4 +), + +/* GAME + * + * ,----------------------------------. ,----------------------------------. + * | ESC | Q | W | E | R | | | | | | | + * |------+------+------+------+------| |------+------+------+------+------| + * |Shift | A | S | D | F | | | | | | | + * |------+------+------+------+------| ,-----. ,-----. |------+------+------+------+------| + * | Ctrl | Z | X | C | V | | 2 | | 3 | | | | | | | + * `----------------------------------' `-----' `-----' `----------------------------------' + * ,-----. ,--------------------. ,--------------------. ,-----. + * | 1 | | T | SPACE | TAB | | TO(0) | BS | ENTER | | 4 | + * `-----' `--------------------' `--------------------' `-----' + */ +[_GAME] = LAYOUT( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_1, KC_T, KC_SPC, KC_TAB, KC_2, KC_3, TO(0), KC_BSPC, LT(2,KC_ENT), KC_4 +), +}; diff --git a/keyboards/wilba_tech/zeal60/keymaps/tusing/README.md b/keyboards/wilba_tech/zeal60/keymaps/tusing/README.md new file mode 100644 index 000000000000..1fbd7457420c --- /dev/null +++ b/keyboards/wilba_tech/zeal60/keymaps/tusing/README.md @@ -0,0 +1,79 @@ +# RGB Underglow Strip on the Zeal60: A Guide + + + +## Requirements + +- WS2812B RGB strip, preferably 60 LEDs/meter +- Wire, solder +- Tape, hot glue, or some sort of adhesive + +## A. Connecting the strip +You might find the [**full PCB image**](https://cdn.shopify.com/s/files/1/0490/7329/files/zeal60jumpers.png) helpful. Ignore the red boxes! + +1. Connect V+ to the receiving end of the thermistor labeled F1; connect GND to the board's GND pin. (*Avoid connecting +V to the board's +5V pin* - you will likely overload the thermistor, and you will limit your maximum brightness.) + + + +2. Connect DI to PB0. + + + +3. Should look something like this when finished: + + + +*Optional:* To allow considerably more light to escape, consider angling the strip outwards by using some sort of fulcrum under the strip. (I used a thick wire.) + +## B. Enabling the strip +1. If it is not present already, add the following to your ***keymap's*** ```Makefile```: + + ```Makefile + RGBLIGHT_ENABLE = yes + AUDIO_ENABLE = no #Underglow animations cannot be used with audio. + ``` +2. If it is not present already, add the following to your *keymap's* ```config.h```, and edit the values as necessary: + + ```c + // Set up RGB underglow. + #define WS2812_DI_PIN B0 // The pin your RGB strip is wired to + #define RGBLED_NUM 35 // Number of LEDs + #define RGBLIGHT_HUE_STEP 5 // How much each press of rgb_hue changes hue + #define RGBLIGHT_SAT_STEP 10 // How much each press of rgb_sat changes sat + #define RGBLIGHT_VAL_STEP 10 // How much each press of rgb_val changes val + ``` +3. If they are not present already, add the following keycodes to your keymap to control the RGB strip: ```RGB_TOG``` (on/off), ```RGB_MOD``` (step through modes), ```RGB_HUI```, ```RGB_HUD```, ```RGB_SAI```, ```RGB_SAD```, ```RGB_VAI```, ```RGB_VAD``` (HSV increase/decrease). Add these to your keymap. + +## C. Dealing with current limits +USB 2.0 ports on laptops provide up to 500mA max, but USB 3.0 ports can provide up to 900mA; USB 3.1 up to 1.5A; and powered USB hubs even more. We can run our keyboard at a higher brightness if we draw more power. **The Zeal60 uses 500mA at max brightness.** This means that **you have about 400mA remaining for the strip to use on a USB 3.0 port**; 1000mA free on a USB 3.1 port, so on and so forth. + +***Warning:*** **This means you will need to turn *off* your RGB strip before connecting to a USB 2.0 port**, as USB 2.0 cannot sustain the current necessary! + +1. If not present already, add the following to your keymap's ```config.h```. Change the numbers based on your needs. The ones below are safe underestimates. + + ```c + // Enable current limiting for RGB underglow. + #define RGBSTRIP_CURRENT_LIMIT 400 // Strip current limit in mA. (USB amperage - 500mA for keyboard) + #define RGBSTRIP_MAX_CURRENT_PER_LIGHT 50 // mA per light when at max brightness. + ``` + *Example:* I use a USB port capable of providing 1800 mA. The keyboard uses 500mA, so my personal value (in the `tusing` keymap) for `RGBSTRIP_CURRENT_LIMIT` is 1300. The particular WS2812B RGB strip I have uses a maximum of 60 mA per LED, so that is my personal value for `RGBSTRIP_MAX_CURRENT_PER_LIGHT`. +2. Toggle on the LED strip (```RGB_TOG```) and step through animations (```RGB_MOD```) to test it out! + +## D. Sources and resources +### A. Connecting the strip. +* [In-depth description of connecting an RGB strip to the GH60](https://www.reddit.com/r/MechanicalKeyboards/comments/4d5or2/my_first_custom_build_satan_gh60_rbg_underglow_in/d1nz3o7/) +* [32U4 Pinout](https://40.media.tumblr.com/93b6bbd4113418c2b45459bb177e67c5/tumblr_mi49a20QMB1s5t695o1_1280.png) +* [Redditor describes connecting RGB strips on his Satan GH60](https://www.reddit.com/r/MechanicalKeyboards/comments/4hbjw4/finally_finished_my_satan_gh60_also_granite_o/d2qn8zx/?context=3) +* [Another Redditor on RGB with the Satan GH60](https://www.reddit.com/r/MechanicalKeyboards/comments/4ewzdx/gh60_satan_with_the_rgb_mod/d251uu6/ ) + +### B. Enabling the strip. +* [QMK Wiki portion on underglow](https://github.com/jackhumbert/qmk_firmware/wiki#rgb-under-glow-mod) +* [Planck ```Makefile```, ```config.h```, and ```keymap.c``` config example](https://github.com/jackhumbert/qmk_firmware/tree/master/keyboards/planck/keymaps/yang) +* [Video demonstrating keycode functions and RGB modes on a KC60](https://www.youtube.com/watch?v=VKrpPAHlisY) + +### C. Dealing with current limits. +* [Discussion of cutting jumpers and adding resistors to lower current from Zeal60](https://www.reddit.com/r/MechanicalKeyboards/comments/5hou92/photos_zeal60_lets_just_say_santa_came_early_this/db23qid/) +* [A selection of 900mA-1.5A current hold fuses - look for an SMD 0805-sized fuse.](https://goo.gl/748avG) +* [Video detailing technique to solder 0805 resistors](https://www.youtube.com/watch?v=PU7wLcuqc-I&t=123s&list=FLheMlKEVQ5cmVXazUt6HrxQ&index=2) +* [QMK feature request to implement max power draw limits in ```config.h```](https://github.com/jackhumbert/qmk_firmware/issues/954) +* [Commit enabling max power draw limits in ```config.h```](https://github.com/jackhumbert/qmk_firmware/commit/83e613ad239459582ae28f78b6c81535b9b138d7) diff --git a/keyboards/wilba_tech/zeal60/keymaps/tusing/config.h b/keyboards/wilba_tech/zeal60/keymaps/tusing/config.h new file mode 100644 index 000000000000..e797f8194132 --- /dev/null +++ b/keyboards/wilba_tech/zeal60/keymaps/tusing/config.h @@ -0,0 +1,45 @@ +#pragma once + +/* Enable/disable LEDs based on layout. */ +#undef RGB_BACKLIGHT_USE_SPLIT_BACKSPACE +#define RGB_BACKLIGHT_USE_SPLIT_BACKSPACE 0 + +#undef RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT +#define RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT 0 + +#undef RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT +#define RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT 0 + +#undef RGB_BACKLIGHT_USE_7U_SPACEBAR +#define RGB_BACKLIGHT_USE_7U_SPACEBAR 0 + +#undef RGB_BACKLIGHT_USE_ISO_ENTER +#define RGB_BACKLIGHT_USE_ISO_ENTER 0 + +#undef RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS +#define RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS 0 + +// Set up RGB underglow. +#define WS2812_DI_PIN B0 // The pin your RGB strip is wired to +#define RGBLIGHT_EFFECT_BREATHING +#define RGBLIGHT_EFFECT_RAINBOW_MOOD +#define RGBLIGHT_EFFECT_RAINBOW_SWIRL +#define RGBLIGHT_EFFECT_SNAKE +#define RGBLIGHT_EFFECT_KNIGHT +#define RGBLIGHT_EFFECT_CHRISTMAS +#define RGBLIGHT_EFFECT_STATIC_GRADIENT +#define RGBLIGHT_EFFECT_RGB_TEST +#define RGBLIGHT_EFFECT_ALTERNATING +#define RGBLIGHT_EFFECT_TWINKLE +#define RGBLED_NUM 35 // Number of LEDs +#define RGBLIGHT_HUE_STEP 5 // How much each press of rgb_hue changes hue +#define RGBLIGHT_SAT_STEP 10 // How much each press of rgb_sat changes sat +#define RGBLIGHT_VAL_STEP 10 // How much each press of rgb_val changes val + +// Enable current limiting for RGB underglow. +#define RGBSTRIP_CURRENT_LIMIT 1300 // Strip current limit in mA. (USB amperage - 500mA for keyboard) +#define RGBSTRIP_MAX_CURRENT_PER_LIGHT 40 // mA per light when at max brightness. + +// Scale brightnes according to BRIGHTNESS_CORRECTION_TABLE in quantum/rgblight.c. +// This allows to mitigate uneven brightness from LED underglow strips. +// #define LED_BRIGHTNESS_CORRECTION diff --git a/keyboards/wilba_tech/zeal60/keymaps/tusing/keymap.c b/keyboards/wilba_tech/zeal60/keymaps/tusing/keymap.c new file mode 100644 index 000000000000..21cb2cd73fcc --- /dev/null +++ b/keyboards/wilba_tech/zeal60/keymaps/tusing/keymap.c @@ -0,0 +1,48 @@ +// Default layout for Zeal60 +#include QMK_KEYBOARD_H + +// For readability. +#define _x_ KC_NO +#define AUD_PRV LCTL(KC_MPRV) // Previous music track +#define AUD_PLY LCTL(KC_MPLY) // Pause music +#define AUD_NXT LCTL(KC_MNXT) // Next music track + +// Zeal60-specific keys: +// EF_INC, EF_DEC, // next/previous backlight effect +// H1_INC, H1_DEC, // Color 1 hue increase/decrease +// S1_INC, S1_DEC, // Color 1 saturation increase/decrease +// H2_INC, H2_DEC, // Color 2 hue increase/decrease +// S2_INC, S2_DEC, // Color 2 saturation increase/decrease +// BR_INC, BR_DEC, // backlight brightness increase/decrease + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +// Default layer: Pressing caps-lock momentarily switches to Layer 1. +// This is the default layer. Pressing an empty keycode on another layer will take you here. + [0] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC}, + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS}, + {MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, _x_ }, + {KC_LSFT, _x_ , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, _x_ }, + {KC_LCTL, KC_LGUI, KC_LALT, _x_ , _x_ , _x_ , _x_ , KC_SPC, _x_ , _x_ , KC_LEFT, KC_UP, KC_DOWN, KC_RGHT} + }, + +// Layer 1: Pressing enter switches to layer 2, where backlight controls live. +// This is a momentary layer: once you let go of caps, you'll be back in layer 1. + [1] = { + {KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL }, + {_______, KC_VOLD, KC_MUTE, KC_VOLU, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, KC_INS, KC_DEL, _______}, + {_______, AUD_PRV, AUD_PLY, AUD_NXT, _______, _______, _______, _______, _______, _______, _______, _______, TO(2) , _x_ }, + {KC_CAPS, _x_ , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _x_ }, + {KC_RCTL, KC_RGUI, KC_RALT, _x_ , _x_ , _x_ , _x_ , _______, _x_ , _x_ , KC_HOME, KC_PGUP, KC_PGDN, KC_END} + }, + +// Layer 2: Zeal60 and backlight configuration. (Get here quickly by pressing Caps+Enter from Layer 1.) +// This is a persistent layer. Get back to the default layer by pressing enter. + [2] = { + {QK_BOOT, EF_DEC, EF_INC, BR_DEC, BR_INC, ES_DEC, ES_INC, _______, _______, _______, _______, _______, _______, _______}, + {_______, H1_DEC, H1_INC, S1_DEC, S1_INC, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, H2_DEC, H2_INC, S2_DEC, S2_INC, _______, _______, _______, _______, _______, _______, _______, TO(0) , _x_ }, + {RGB_MOD, _x_ , RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, _______, _______, _______, _______, _______, _______, _______, _x_ }, + {RGB_TOG, RGB_VAD, RGB_VAI, _x_ , _x_ , _x_ , _x_ , _______, _x_ , _x_ , _______, _______, _______, _______} + } +}; diff --git a/keyboards/wilba_tech/zeal60/keymaps/tusing/rules.mk b/keyboards/wilba_tech/zeal60/keymaps/tusing/rules.mk new file mode 100644 index 000000000000..762905da03f9 --- /dev/null +++ b/keyboards/wilba_tech/zeal60/keymaps/tusing/rules.mk @@ -0,0 +1,6 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +RGBLIGHT_ENABLE = yes +AUDIO_ENABLE = no # Underglow cannot be used with audio. diff --git a/keyboards/winkeyless/bface/keymaps/kpeatt/keymap.c b/keyboards/winkeyless/bface/keymaps/kpeatt/keymap.c new file mode 100644 index 000000000000..a74ec3570114 --- /dev/null +++ b/keyboards/winkeyless/bface/keymaps/kpeatt/keymap.c @@ -0,0 +1,75 @@ +/* +Copyright 2017 Kyle Peatt + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include QMK_KEYBOARD_H + +#define ______ KC_TRNS + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Qwerty + * ,-----------------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bkspc | + * |-----------------------------------------------------------------------------------------+ + * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | + * |-----------------------------------------------------------------------------------------+ + * | Caps/FN | A | S | D | F | G | H | J | K | L | ; | ' | Enter | + * |-----------------------------------------------------------------------------------------+ + * | Shift | Z | X | C | V | B | N | M | , | . | / | RShift | + * |-----------------------------------------------------------------------------------------+ + * | Ctrl | GUI | Alt | Space | Alt | GUI | Ctrl | Fn | + * `-----------------------------------------------------------------------------------------' + */ + + [0] = LAYOUT_60_ansi( + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, + LT(1, KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_RCTL, MO(1) + ), + + /* FN Layer + * ,-----------------------------------------------------------------------------------------. + * | `~ | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | + * |-----------------------------------------------------------------------------------------+ + * | | | Up | | | | | | | |RGBMOD| Val+| Val- |RBGTOG| + * |-----------------------------------------------------------------------------------------+ + * | | Left| Down|Right| | | | | Sat+| Sat-| Hue+| Hue-| | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | | | + * `-----------------------------------------------------------------------------------------' + */ + + [1] = LAYOUT_60_ansi( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ______, + ______,______,KC_UP,______,______,______,______,______,______,______,RGB_MOD,RGB_VAI,RGB_VAD,RGB_TOG, + ______,KC_LEFT,KC_DOWN,KC_RGHT,______, ______, ______,______,RGB_SAI,RGB_SAD,RGB_HUI,RGB_HUD,______, + ______,______,______,______,______, ______, ______,______,______,______,______, ______, + ______,______,______, ______, ______,______,______,______ + ), + /* You can copy this layer as base for a new fn layer * / + [n] = LAYOUT_60_ansi( + ______,______,______,______,______,______,______,______,______,______,______,______,______,______, + ______,______,______,______,______,______,______,______,______,______,______,______,______,______, + ______,______,______,______,______,______,______,______,______,______,______,______,______, + ______,______,______,______,______,______,______,______,______,______,______, ______, + ______,______,______, ______, ______,______,______,______ + ), // */ +}; diff --git a/keyboards/winkeyless/bface/keymaps/kpeatt/readme.md b/keyboards/winkeyless/bface/keymaps/kpeatt/readme.md new file mode 100644 index 000000000000..a7eef1e5fcfb --- /dev/null +++ b/keyboards/winkeyless/bface/keymaps/kpeatt/readme.md @@ -0,0 +1,10 @@ +kpeatt's bface layout +====================== + +## Keyboard Notes +- This is for a clone bface PCB that is no longer for sale as far as I can tell. [Used to be sold on KBDFans](https://www.aliexpress.com/item/bface-60-RGB-underground-copy-pcb-from-china-gh60-pcb-Customize-keyboard-PCB/32731084597.html). +- To put in reset mode hold `left ctrl` while inserting the USB cable +- Use flashing instructions in the main `bface` directory + +### Build +To build this keymap, run `make bface:kpeatt` from the qmk_firmware directory. diff --git a/keyboards/winkeyless/bface/keymaps/p3lim/README.md b/keyboards/winkeyless/bface/keymaps/p3lim/README.md new file mode 100644 index 000000000000..94e84e7f2210 --- /dev/null +++ b/keyboards/winkeyless/bface/keymaps/p3lim/README.md @@ -0,0 +1,21 @@ +# p3lim's b.face layout + +![](https://user-images.githubusercontent.com/26496/61170794-bf8a2c80-a56e-11e9-893f-f1766e7a9a04.png) + +My layout using the winkeyless b.face X2 PCB. + +### Building & Flashing + +- Set up QMK + - `pip install --user qmk` + - `qmk setup` +- Add udev rules if on Linux + - Follow the docs: +- Build and flash + - `qmk flash -kb winkeyless/bface -km p3lim` +- Hold bottom-left key while connecting to put in flashing mode + +### Layout notes + +The keys indicated with a gray color in the image above was not supported by the layout so a custom matrix was made. +The two additional keys were on pins 22+41 and 22+42, C3+B1 and C3+B2, which is mapped to col 10 row 1 and col 10 row 2 in the matrix. diff --git a/keyboards/winkeyless/bface/keymaps/p3lim/keymap.c b/keyboards/winkeyless/bface/keymaps/p3lim/keymap.c new file mode 100644 index 000000000000..f702810f9c2a --- /dev/null +++ b/keyboards/winkeyless/bface/keymaps/p3lim/keymap.c @@ -0,0 +1,188 @@ +/* +Copyright 2019-2021 Adrian L Lange + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include QMK_KEYBOARD_H + +#define LAYOUT_p3lim(\ + K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, \ + K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC3, \ + K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KB2, KC2, KD2, \ + K01, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KB1, KC1, \ + K00, K10, K20, K56, K57, KB0, KC0 \ +){ \ + { K00, K10, K20, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB0, KC0, KC_NO, KC_NO }, \ + { K01, K11, K21, K31, K41, K51, KC_NO, KC_NO, KC_NO, KC_NO, KA1, KB1, KC1, KC_NO, KC_NO }, \ + { K02, K12, K22, K32, K42, K52, KC_NO, KC_NO, KC_NO, KC_NO, KA2, KB2, KC2, KD2, KC_NO }, \ + { K03, K13, K23, K33, K43, K53, KC_NO, KC_NO, KC_NO, KC_NO, KA3, KB3, KC3, KC_NO, KC_NO }, \ + { K04, K14, K24, K34, K44, K54, KC_NO, KC_NO, KC_NO, KC_NO, KA4, KB4, KC4, KC_NO, KE4 }, \ + { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, K16, K26, K36, K46, K56, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB6, KC6, KD6, KE6 }, \ + { KC_NO, K17, K27, K37, K47, K57, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB7, KC7, KD7, KE7 } \ +} + +enum my_keycodes { + C_ESC0 = SAFE_RANGE, // layer 0 esc + C_ESC1, // layer 1 esc + C_NO1, // æ, requires RCTL to be a compose key in software + C_NO2, // ø, requires RCTL to be a compose key in software + C_NO3 // å, requires RCTL to be a compose key in software +}; + +// use compiler macros for simpler stuff +#define C_KVM1 LCA(KC_1) +#define C_KVM2 LCA(KC_2) +#define C_KVM3 LCA(KC_3) +#define C_KVM4 LCA(KC_4) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* QWERTY + * ,-----------------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bkspc | + * |-----------------------------------------------------------------------------------------+ + * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | | + * |---------------------------------------------------------------------------------| Enter | + * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' | \ | | + * |-----------------------------------------------------------------------------------------+ + * | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Del | + * |-----------------------------------------------------------------------------------------+ + * | FN1 | Alt | GUI | Space | FN2 | Alt | Ctrl | + * `-----------------------------------------------------------------------------------------' + */ + [0] = LAYOUT_p3lim( + C_ESC0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_DEL, + MO(1), KC_LALT, KC_LGUI, KC_SPC, MO(2), KC_RGUI, KC_RCTL + ), + + /* FN1 + * ,-----------------------------------------------------------------------------------------. + * | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | + * |-----------------------------------------------------------------------------------------+ + * | Caps | Home| Up | End | PgUp| | | | | | | | | | + * |---------------------------------------------------------------------------------| | + * | | Left| Down|Right| PgDn|PrtSc| | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | KVM1| KVM2| KVM3| KVM4| | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | + * `-----------------------------------------------------------------------------------------' + */ + [1] = LAYOUT_p3lim( + C_ESC1, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, + KC_CAPS, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_PSCR, _______, _______, _______, _______, _______, _______, _______, _______, + _______, C_KVM1, C_KVM2, C_KVM3, C_KVM4, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, KC_NO, _______, _______ + ), + + /* FN2 + * ,-----------------------------------------------------------------------------------------. + * | | | | | | | | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | | | | | Å | | | + * |---------------------------------------------------------------------------------| | + * | | | | | | | | | | | Ø | Æ | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | + * `-----------------------------------------------------------------------------------------' + */ + [2] = LAYOUT_p3lim( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, C_NO3, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, C_NO2, C_NO1, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_NO, _______, _______, _______, _______, _______, _______ + ), + /* + [n] = LAYOUT_p3lim( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______ + ), + */ +}; + +static bool grave_esc_shifted = false; + +bool process_record_user(uint16_t keycode, keyrecord_t *record){ + const uint8_t mods = get_mods(); + uint8_t shifted = mods & MOD_MASK_SHIFT; + + switch(keycode){ + case C_ESC0: // layer 0 + if(record->event.pressed){ + grave_esc_shifted = shifted; + register_code(shifted ? KC_GRAVE : KC_ESCAPE); + } else + unregister_code(grave_esc_shifted ? KC_GRAVE : KC_ESCAPE); + return false; + case C_ESC1: // layer 1 + if(record->event.pressed){ + grave_esc_shifted = shifted; + register_code(shifted ? KC_ESCAPE : KC_GRAVE); + } else + unregister_code(grave_esc_shifted ? KC_ESCAPE : KC_GRAVE); + return false; + case C_NO1: // æ + if(record->event.pressed){ + // we use shift for A and E to make it capitalized, no need to handle it here + tap_code(KC_RCTL); + tap_code(KC_A); + tap_code(KC_E); + } + return false; + case C_NO2: // ø + // the "/" symbol can't be shifted, so we have to deal with that + if(record->event.pressed){ + if(shifted){ + unregister_code(KC_LSFT); // reset the shift state, I always use LSFT personally + tap_code(KC_RCTL); + tap_code(KC_SLSH); + tap_code16(S(KC_O)); + register_code(KC_LSFT); // enable the shift state again to keep state consistent + } else { + tap_code(KC_RCTL); + tap_code(KC_SLSH); + tap_code(KC_O); + } + } + return false; + case C_NO3: // å + // the "o" symbol can't be shifted, so we have to deal with that + if(record->event.pressed){ + if(shifted){ + unregister_code(KC_LSFT); // reset the shift state, I always use LSFT personally + tap_code(KC_RCTL); + tap_code(KC_O); + tap_code16(S(KC_A)); + register_code(KC_LSFT); // enable the shift state again to keep state consistent + } else { + tap_code(KC_RCTL); + tap_code(KC_O); + tap_code(KC_A); + } + } + return false; + } + return true; +} diff --git a/keyboards/winkeyless/bface/keymaps/p3lim/rules.mk b/keyboards/winkeyless/bface/keymaps/p3lim/rules.mk new file mode 100644 index 000000000000..e0ed6f0c2d6f --- /dev/null +++ b/keyboards/winkeyless/bface/keymaps/p3lim/rules.mk @@ -0,0 +1 @@ +RGBLIGHT_ENABLE = no diff --git a/keyboards/wren/keymaps/walterhanley/config.h b/keyboards/wren/keymaps/walterhanley/config.h new file mode 100644 index 000000000000..3dd5b47c160c --- /dev/null +++ b/keyboards/wren/keymaps/walterhanley/config.h @@ -0,0 +1,20 @@ +/* Copyright 2021 Walter Hanley + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +// Lower board power consumption to boost compatibility +#define USB_MAX_POWER_CONSUMPTION 250 diff --git a/keyboards/wren/keymaps/walterhanley/keymap.c b/keyboards/wren/keymaps/walterhanley/keymap.c new file mode 100644 index 000000000000..bf6afc9ac666 --- /dev/null +++ b/keyboards/wren/keymaps/walterhanley/keymap.c @@ -0,0 +1,170 @@ +/* Copyright 2021 Walter Hanley + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + +// Cmd-tab tablesetting +bool is_cmd_tab_active = false; +uint16_t cmd_tab_timer = 0; + +// Alt-tab tablesetting +bool is_alt_tab_active = false; +uint16_t alt_tab_timer = 0; + +// Defines keycode alias +#define ECTL LCTL_T(KC_ESC) +#define EGUI LGUI_T(KC_ESC) +#define DELSYM LT(_SYMBOL, KC_DEL) +#define SCLNAV LT(_NAV, KC_SCLN) +#define TGNLCK TG(_NLCK) + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _MAC, + _WIN, + _NLCK, + _SYMBOL, + _NAV +}; + +// Defines the keycodes used by our macros in process_record_user +enum custom_keycodes { + NSEAL = SAFE_RANGE, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Mac */ + [_MAC] = LAYOUT( + KC_PSLS, KC_7, KC_8, KC_9, KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, KC_INS, KC_HOME, KC_PGUP, KC_NO, + KC_PAST, KC_4, KC_5, KC_6, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_NO, + KC_PMNS, KC_1, KC_2, KC_3, ECTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SCLNAV, KC_QUOT, KC_NO, KC_UP, KC_NO, KC_NO, + KC_PPLS, KC_0, KC_DOT, KC_ENT, SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, + TGNLCK, KC_LALT, KC_LGUI, KC_BSPC, KC_ENT, KC_SPC, DELSYM, KC_RGUI, KC_RALT, KC_MUTE + ), + + /* Windows */ + [_WIN] = LAYOUT( + KC_PSLS, KC_7, KC_8, KC_9, KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, KC_INS, KC_HOME, KC_PGUP, KC_NO, + KC_PAST, KC_4, KC_5, KC_6, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_NO, + KC_PMNS, KC_1, KC_2, KC_3, EGUI, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SCLNAV, KC_QUOT, KC_NO, KC_UP, KC_NO, KC_NO, + KC_PPLS, KC_0, KC_DOT, KC_ENT, SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, + TGNLCK, KC_LALT, KC_LCTL, KC_BSPC, KC_ENT, KC_SPC, DELSYM, KC_RCTL, KC_RALT, KC_MUTE + ), + + /* In-Keyboard Numlock */ + [_NLCK] = LAYOUT( + KC_PSLS, KC_HOME, KC_UP, KC_PGUP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_PAST, KC_LEFT, KC_5, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_PMNS, KC_END, KC_DOWN, KC_PGDN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_PPLS, KC_INS, KC_DOT, KC_ENT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + TGNLCK, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + /* Symbols, F-Keys, and Text Macros */ + [_SYMBOL] = LAYOUT( + NSEAL, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, KC_UNDS, KC_LCBR, KC_LBRC, _______, _______, KC_RBRC, KC_RCBR, KC_MINS, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + /* Nav Cluster and Settings*/ + [_NAV] = LAYOUT( + DF(_MAC), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + DF(_WIN), _______, _______, _______, _______, KC_PGUP, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; + +bool encoder_update_user(uint8_t index, bool clockwise) { + if (index == 0) { /* First encoder */ + // Encoder functionality for _MAC layer + if (IS_LAYER_ON(_MAC)) + { + if (clockwise) { + if (!is_cmd_tab_active) { + is_cmd_tab_active = true; + register_code(KC_LGUI); + } + cmd_tab_timer = timer_read(); + tap_code16(KC_TAB); + } else { + if (!is_cmd_tab_active) { + is_cmd_tab_active = true; + register_code(KC_LGUI); + } + cmd_tab_timer = timer_read(); + tap_code16(S(KC_TAB)); + } + } + // Encoder functionality for _WIN layer + else if (IS_LAYER_ON(_WIN)) { + if (clockwise) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + tap_code16(KC_TAB); + } else { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + tap_code16(S(KC_TAB)); + } + } + } else if (index == 1) { /* Second encoder */ + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + } + return true; +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case NSEAL: + if (record->event.pressed) { + // when keycode NSEAL is pressed + SEND_STRING("What the fuck did you just fucking say about me, you little bitch? I'll have you know I graduated top of my class in the Navy Seals, and I've been involved in numerous secret raids on Al-Quaeda, and I have over 300 confirmed kills. I am trained in gorilla warfare and I'm the top sniper in the entire US armed forces. You are nothing to me but just another target. I will wipe you the fuck out with precision the likes of which has never been seen before on this Earth, mark my fucking words. You think you can get away with saying that shit to me over the Internet? Think again, fucker. As we speak I am contacting my secret network of spies across the USA and your IP is being traced right now so you better prepare for the storm, maggot. The storm that wipes out the pathetic little thing you call your life. You're fucking dead, kid. I can be anywhere, anytime, and I can kill you in over seven hundred ways, and that's just with my bare hands. Not only am I extensively trained in unarmed combat, but I have access to the entire arsenal of the United States Marine Corps and I will use it to its full extent to wipe your miserable ass off the face of the continent, you little shit. If only you could have known what unholy retribution your little 'clever' comment was about to bring down upon you, maybe you would have held your fucking tongue. But you couldn't, you didn't, and now you're paying the price, you goddamn idiot. I will shit fury all over you and you will drown in it. You're fucking dead, kiddo."); + } else { + // when keycode NSEAL is released + } + break; + } + return true; +} + +void matrix_scan_user(void) { + if (is_cmd_tab_active) { + if (timer_elapsed(cmd_tab_timer) > 1000) { + unregister_code(KC_LGUI); + is_cmd_tab_active = false; + } + } + if (is_alt_tab_active) { + if (timer_elapsed(alt_tab_timer) > 1000) { + unregister_code(KC_LALT); + is_alt_tab_active = false; + } + } +} diff --git a/keyboards/wren/keymaps/walterhanley/readme.md b/keyboards/wren/keymaps/walterhanley/readme.md new file mode 100644 index 000000000000..27e32360dc4d --- /dev/null +++ b/keyboards/wren/keymaps/walterhanley/readme.md @@ -0,0 +1,12 @@ +![Author's Layout](https://github.com/walterhanley/wren-keyboard/blob/main/images/author-layout.png?raw=true) + +# Author's Wren Layout + +This is my personal Wren layout, which includes a few layers and macros that +I find useful. It started as a clone of the default keymap, but will likely +diverge more as time goes on. + +Please note that this layout preserves the entire keyboard matrix, but only +includes keycodes for a numpad/nav cluster configuration. Depending on your +configuration, you may need to replace some of the existing KC_NO values +with actual keycodes. From dfa0f281090b56eaf5e41ae9ec170bc8a7380edd Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Tue, 20 Feb 2024 00:04:27 +0000 Subject: [PATCH 32/35] Revert "Late9 keymaps update, added VIA support (#22801)" This reverts commit 8779d5a10e61079508dbd58a7039f9deb4f3d680. --- keyboards/rookiebwoy/late9/readme.md | 12 +- keyboards/rookiebwoy/late9/rev1/info.json | 9 +- .../late9/rev1/keymaps/default/keymap.c | 24 +- .../late9/rev1/keymaps/multitap/keymap.c | 235 ++++++++++++++++++ .../late9/rev1/keymaps/multitap/readme.md | 3 + .../late9/rev1/keymaps/multitap/rules.mk | 2 + .../late9/rev1/keymaps/via/keymap.c | 84 ------- .../late9/rev1/keymaps/via/rules.mk | 1 - keyboards/rookiebwoy/late9/rev1/rules.mk | 15 +- 9 files changed, 275 insertions(+), 110 deletions(-) create mode 100644 keyboards/rookiebwoy/late9/rev1/keymaps/multitap/keymap.c create mode 100644 keyboards/rookiebwoy/late9/rev1/keymaps/multitap/readme.md create mode 100644 keyboards/rookiebwoy/late9/rev1/keymaps/multitap/rules.mk delete mode 100644 keyboards/rookiebwoy/late9/rev1/keymaps/via/keymap.c delete mode 100644 keyboards/rookiebwoy/late9/rev1/keymaps/via/rules.mk diff --git a/keyboards/rookiebwoy/late9/readme.md b/keyboards/rookiebwoy/late9/readme.md index bc6dfab57e2c..9815391cbd54 100644 --- a/keyboards/rookiebwoy/late9/readme.md +++ b/keyboards/rookiebwoy/late9/readme.md @@ -5,9 +5,11 @@ The LATE-9 is a multi-tap input keyboard based on mobile phones from the late '9 ![LATE-9](https://i.imgur.com/QXycTC3h.jpg "LATE-9 first proto") +See the project repository for gerbers. + * Keyboard maintainer: [rookiebwoy](https://github.com/rookiebwoy) * Hardware supported: ProMicro, _Elite-C (not tested)_ -* Hardware Availability: LATE-9 is open source, check the [project repository](https://github.com/rookiebwoy/late-9) for gerbers. +* Project repository: [LATE-9 on github](https://github.com/rookiebwoy/late-9) Make example for this keyboard (after setting up your build environment): @@ -17,9 +19,9 @@ Flashing example for this keyboard: make rookiebwoy/late9/rev1:default:flash -See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). -## Bootloader +When asked by the terminal, short with a metal wire the pins on the backside of the board highlighted as `RST` (one is the `RESET` and the other one is `GROUND`) to enter the bootloader and let the OS detects the device. +After installing this firmware you can use Bootmagic to enter the bootloader while plugging in your LATE-9. By default it's the button on the upper-left of the keyboard. + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). -When asked by the terminal, short with a metal wire the pins on the backside of the board highlighted as `RST` (one is the `RESET` and the other one is `GROUND`) to enter the bootloader and let the OS detects the device.\ -After installing this firmware you can use Bootmagic to enter the bootloader while plugging in your LATE-9. By default it's the button on the upper-left of the keyboard. \ No newline at end of file diff --git a/keyboards/rookiebwoy/late9/rev1/info.json b/keyboards/rookiebwoy/late9/rev1/info.json index 48f3cff840d6..05d0934b9647 100644 --- a/keyboards/rookiebwoy/late9/rev1/info.json +++ b/keyboards/rookiebwoy/late9/rev1/info.json @@ -4,8 +4,8 @@ "url": "https://github.com/rookiebwoy/late-9)", "maintainer": "rookiebwoy", "usb": { - "vid": "0x6961", - "pid": "0x3032", + "vid": "0xFEED", + "pid": "0x3777", "device_version": "0.1.0" }, "tapping": { @@ -19,11 +19,6 @@ "rows": ["B4", "E6", "D7", "B3", "B2", "B6"] }, "diode_direction": "ROW2COL", - "features": { - "bootmagic": true, - "nkro": true, - "oled": true - }, "processor": "atmega32u4", "bootloader": "caterina", "layouts": { diff --git a/keyboards/rookiebwoy/late9/rev1/keymaps/default/keymap.c b/keyboards/rookiebwoy/late9/rev1/keymaps/default/keymap.c index f93958fe8f3a..bed15eb57e5d 100644 --- a/keyboards/rookiebwoy/late9/rev1/keymaps/default/keymap.c +++ b/keyboards/rookiebwoy/late9/rev1/keymaps/default/keymap.c @@ -22,23 +22,23 @@ enum layers { }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* BL: Base Layer +/* Keymap _BL: Base Layer * ,-----------------------. * |MO(OP) | ↑ | BSPC | * | | | | - * |-------+-------+-------| + * |-------|-------|-------| * | <- | ↓ | -> | * | | | | - * |-------+-------+-------| + * |-------|-------|-------| * | 1 | 2 | 3 | * | | | | - * |-------+-------+-------| + * |-------|-------|-------| * | 4 | 5 | 6 | * | | | | - * |-------+-------+-------| + * |-------|-------|-------| * | 7 | 8 | 9 | * | | | | - * |-------+-------+-------| + * |-------|-------|-------| * | 0 | . | = | * | | | | * `-----------------------' @@ -52,23 +52,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_P0, KC_PDOT, KC_PEQL ), -/* OP: Operators Layer +/* Keymap _OP: Operators Layer * ,-----------------------. * |MO(OP) | ↑ | BSPC | * | | | | - * |-------+-------+-------| + * |-------|-------|-------| * | <- | ↓ | -> | * | | | | - * |-------+-------+-------| + * |-------|-------|-------| * | / | * | - | * | | | | - * |-------+-------+-------| + * |-------|-------|-------| * | ( | ) | + | * | | | | - * |-------+-------+-------| + * |-------|-------|-------| * | & | % | ^ | * | | | | - * |-------+-------+-------| + * |-------|-------|-------| * | | | . | = | * | | | | * `-----------------------' diff --git a/keyboards/rookiebwoy/late9/rev1/keymaps/multitap/keymap.c b/keyboards/rookiebwoy/late9/rev1/keymaps/multitap/keymap.c new file mode 100644 index 000000000000..e378fb4921f9 --- /dev/null +++ b/keyboards/rookiebwoy/late9/rev1/keymaps/multitap/keymap.c @@ -0,0 +1,235 @@ +/* Copyright 2021 rookiebwoy + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + +// Layers declarations +enum layers { + _BL +}; + +// Tap Dance declarations +enum { + TD_PNCT, + TD_ABC, + TD_DEF, + TD_GHI, + TD_JKL, + TD_MNO, + TD_PQRS, + TD_TUV, + TD_WXYZ, + TD_SPACE, + TD_UPRCS, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap _BL: Base Layer + * ,-----------------------. + * |ENTER | ↑ | BSPC | + * | | | | + * |-------|-------|-------| + * | <- | ↓ | -> | + * | | | | + * |-------|-------|-------| + * | 1 .,' | 2 | 3 | + * |?!-:;/ | abc | def | + * |-------|-------|-------| + * | 4 | 5 | 6 | + * | ghi | jkl | mno | + * |-------|-------|-------| + * | 7 | 8 | 9 | + * | pqrs | tuv | wxyz | + * |-------|-------|-------| + * | * | 0 | CAPS | + * | | space | | + * `-----------------------' + */ + [_BL] = LAYOUT( + KC_ENT, KC_UP, KC_BSPC, + KC_LEFT, KC_DOWN, KC_RIGHT, + TD(TD_PNCT), TD(TD_ABC), TD(TD_DEF), + TD(TD_GHI), TD(TD_JKL), TD(TD_MNO), + TD(TD_PQRS), TD(TD_TUV), TD(TD_WXYZ), + KC_PAST, TD(TD_SPACE), TD(TD_UPRCS) + ), +}; + +// Tap Dance cycles +void dance_1 (tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + if (state->interrupted || !state->pressed) return tap_code(KC_DOT); + else return tap_code(KC_1); + } else if (state->count == 2) { + tap_code (KC_COMM); + } else if (state->count == 3) { + tap_code(KC_QUOT); + } else if (state->count == 4) { + tap_code16(KC_QUES); + } else if (state->count == 5) { + tap_code16(KC_EXLM); + } else if (state->count == 6) { + tap_code(KC_MINS); + } else if (state->count == 7) { + tap_code16(KC_COLN); + } else if (state->count == 8) { + tap_code(KC_SCLN); + } else if (state->count == 9) { + tap_code(KC_SLSH); + } else { + reset_tap_dance (state); + } +} + +void dance_2 (tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + if (state->interrupted || !state->pressed) return tap_code(KC_A); + else return tap_code(KC_2); + } else if (state->count == 2) { + tap_code (KC_B); + } else if (state->count == 3) { + tap_code(KC_C); + } else { + reset_tap_dance (state); + } +} + +void dance_3 (tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + if (state->interrupted || !state->pressed) return tap_code(KC_D); + else return tap_code(KC_3); + } else if (state->count == 2) { + tap_code (KC_E); + } else if (state->count == 3) { + tap_code(KC_F); + } else { + reset_tap_dance (state); + } +} + +void dance_4 (tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + if (state->interrupted || !state->pressed) return tap_code(KC_G); + else return tap_code(KC_4); + } else if (state->count == 2) { + tap_code (KC_H); + } else if (state->count == 3) { + tap_code(KC_I); + } else { + reset_tap_dance (state); + } +} + +void dance_5 (tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + if (state->interrupted || !state->pressed) return tap_code(KC_J); + else return tap_code(KC_5); + } else if (state->count == 2) { + tap_code (KC_K); + } else if (state->count == 3) { + tap_code(KC_L); + } else { + reset_tap_dance (state); + } +} + +void dance_6 (tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + if (state->interrupted || !state->pressed) return tap_code(KC_M); + else return tap_code(KC_6); + } else if (state->count == 2) { + tap_code (KC_N); + } else if (state->count == 3) { + tap_code(KC_O); + } else { + reset_tap_dance (state); + } +} + +void dance_7 (tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + if (state->interrupted || !state->pressed) return tap_code(KC_P); + else return tap_code(KC_7); + } else if (state->count == 2) { + tap_code (KC_Q); + } else if (state->count == 3) { + tap_code(KC_R); + } else if (state->count == 4) { + tap_code(KC_S); + } else { + reset_tap_dance (state); + } +} + +void dance_8 (tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + if (state->interrupted || !state->pressed) return tap_code(KC_T); + else return tap_code(KC_8); + } else if (state->count == 2) { + tap_code (KC_U); + } else if (state->count == 3) { + tap_code(KC_V); + } else { + reset_tap_dance (state); + } +} + +void dance_9 (tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + if (state->interrupted || !state->pressed) return tap_code(KC_W); + else return tap_code(KC_9); + } else if (state->count == 2) { + tap_code (KC_X); + } else if (state->count == 3) { + tap_code(KC_Y); + } else if (state->count == 4) { + tap_code(KC_Z); + } else { + reset_tap_dance (state); + } +} + +void dance_0 (tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + if (state->interrupted || !state->pressed) return tap_code(KC_SPACE); + else return tap_code(KC_0); + } else { + reset_tap_dance (state); + } +} + +void dance_maiusc (tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + if (state->interrupted || !state->pressed) return set_oneshot_mods(MOD_BIT(KC_LSFT)); + else return tap_code(KC_CAPS); + } else { + reset_tap_dance (state); + } +} + +// Tap Dance actions +tap_dance_action_t tap_dance_actions[] = { + [TD_PNCT] = ACTION_TAP_DANCE_FN (dance_1), + [TD_ABC] = ACTION_TAP_DANCE_FN (dance_2), + [TD_DEF] = ACTION_TAP_DANCE_FN (dance_3), + [TD_GHI] = ACTION_TAP_DANCE_FN (dance_4), + [TD_JKL] = ACTION_TAP_DANCE_FN (dance_5), + [TD_MNO] = ACTION_TAP_DANCE_FN (dance_6), + [TD_PQRS] = ACTION_TAP_DANCE_FN (dance_7), + [TD_TUV] = ACTION_TAP_DANCE_FN (dance_8), + [TD_WXYZ] = ACTION_TAP_DANCE_FN (dance_9), + [TD_SPACE] = ACTION_TAP_DANCE_FN (dance_0), + [TD_UPRCS] = ACTION_TAP_DANCE_FN (dance_maiusc), +}; diff --git a/keyboards/rookiebwoy/late9/rev1/keymaps/multitap/readme.md b/keyboards/rookiebwoy/late9/rev1/keymaps/multitap/readme.md new file mode 100644 index 000000000000..2b5136c2b8ec --- /dev/null +++ b/keyboards/rookiebwoy/late9/rev1/keymaps/multitap/readme.md @@ -0,0 +1,3 @@ +# LATE-9 multitap keymap + +This is the intended LATE-9 layout with multitap `ON` and old mobile phone look-a-like layout.. diff --git a/keyboards/rookiebwoy/late9/rev1/keymaps/multitap/rules.mk b/keyboards/rookiebwoy/late9/rev1/keymaps/multitap/rules.mk new file mode 100644 index 000000000000..4141c3e7a422 --- /dev/null +++ b/keyboards/rookiebwoy/late9/rev1/keymaps/multitap/rules.mk @@ -0,0 +1,2 @@ +# Enable Tap Dance feature +TAP_DANCE_ENABLE = yes diff --git a/keyboards/rookiebwoy/late9/rev1/keymaps/via/keymap.c b/keyboards/rookiebwoy/late9/rev1/keymaps/via/keymap.c deleted file mode 100644 index f93958fe8f3a..000000000000 --- a/keyboards/rookiebwoy/late9/rev1/keymaps/via/keymap.c +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright 2021 rookiebwoy - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include QMK_KEYBOARD_H - -// Layers declarations -enum layers { - _BL, - _OL -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* BL: Base Layer - * ,-----------------------. - * |MO(OP) | ↑ | BSPC | - * | | | | - * |-------+-------+-------| - * | <- | ↓ | -> | - * | | | | - * |-------+-------+-------| - * | 1 | 2 | 3 | - * | | | | - * |-------+-------+-------| - * | 4 | 5 | 6 | - * | | | | - * |-------+-------+-------| - * | 7 | 8 | 9 | - * | | | | - * |-------+-------+-------| - * | 0 | . | = | - * | | | | - * `-----------------------' - */ - [_BL] = LAYOUT( - MO(1), KC_UP, KC_BSPC, - KC_LEFT, KC_DOWN, KC_RIGHT, - KC_P1, KC_P2, KC_P3, - KC_P4, KC_P5, KC_P6, - KC_P7, KC_P8, KC_P9, - KC_P0, KC_PDOT, KC_PEQL - ), - -/* OP: Operators Layer - * ,-----------------------. - * |MO(OP) | ↑ | BSPC | - * | | | | - * |-------+-------+-------| - * | <- | ↓ | -> | - * | | | | - * |-------+-------+-------| - * | / | * | - | - * | | | | - * |-------+-------+-------| - * | ( | ) | + | - * | | | | - * |-------+-------+-------| - * | & | % | ^ | - * | | | | - * |-------+-------+-------| - * | | | . | = | - * | | | | - * `-----------------------' - */ - [_OL] = LAYOUT( - MO(1), KC_UP, KC_BSPC, - KC_LEFT, KC_DOWN, KC_RIGHT, - KC_PSLS, KC_PAST, KC_PMNS, - LSFT(KC_9), LSFT(KC_0), KC_PPLS, - LSFT(KC_7), LSFT(KC_5), LSFT(KC_6), - LSFT(KC_BSLS), KC_PDOT, KC_PEQL - ), -}; \ No newline at end of file diff --git a/keyboards/rookiebwoy/late9/rev1/keymaps/via/rules.mk b/keyboards/rookiebwoy/late9/rev1/keymaps/via/rules.mk deleted file mode 100644 index 036bd6d1c3ec..000000000000 --- a/keyboards/rookiebwoy/late9/rev1/keymaps/via/rules.mk +++ /dev/null @@ -1 +0,0 @@ -VIA_ENABLE = yes \ No newline at end of file diff --git a/keyboards/rookiebwoy/late9/rev1/rules.mk b/keyboards/rookiebwoy/late9/rev1/rules.mk index 6e7633bfe015..874033acc902 100644 --- a/keyboards/rookiebwoy/late9/rev1/rules.mk +++ b/keyboards/rookiebwoy/late9/rev1/rules.mk @@ -1 +1,14 @@ -# This file intentionally left blank +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite +MOUSEKEY_ENABLE = no # Mouse keys +EXTRAKEY_ENABLE = no # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Enable N-Key Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output + +OLED_ENABLE = yes From f05b1b39641f2481e0f3ad32de7fec0cd7b4443d Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Tue, 20 Feb 2024 00:09:49 +0000 Subject: [PATCH 33/35] Revert "OS Detection - Entire file should not be wrapped with ifdef (#23108)" This reverts commit f9feeb981978313a8ab45c9595e44f5bceb324fc. --- quantum/os_detection.c | 70 +++++++++++++++++++++++------------------- quantum/os_detection.h | 18 ++++++----- 2 files changed, 49 insertions(+), 39 deletions(-) diff --git a/quantum/os_detection.c b/quantum/os_detection.c index 96b026e2471c..b674f05b3546 100644 --- a/quantum/os_detection.c +++ b/quantum/os_detection.c @@ -16,32 +16,24 @@ #include "os_detection.h" -#include -#include "timer.h" -#ifdef OS_DETECTION_KEYBOARD_RESET -# include "quantum.h" -#endif +#ifdef OS_DETECTION_ENABLE -#ifdef OS_DETECTION_DEBUG_ENABLE -# include "eeconfig.h" -# include "eeprom.h" -# include "print.h" +# include +# include "timer.h" +# ifdef OS_DETECTION_KEYBOARD_RESET +# include "quantum.h" +# endif -# define STORED_USB_SETUPS 50 -# define EEPROM_USER_OFFSET (uint8_t*)EECONFIG_SIZE +# ifdef OS_DETECTION_DEBUG_ENABLE +# include "eeconfig.h" +# include "eeprom.h" +# include "print.h" -static uint16_t usb_setups[STORED_USB_SETUPS]; -#endif +# define STORED_USB_SETUPS 50 +# define EEPROM_USER_OFFSET (uint8_t*)EECONFIG_SIZE -#ifndef OS_DETECTION_DEBOUNCE -# define OS_DETECTION_DEBOUNCE 200 -#endif - -// 2s should always be more than enough (otherwise, you may have other issues) -#if OS_DETECTION_DEBOUNCE > 2000 -# undef OS_DETECTION_DEBOUNCE -# define OS_DETECTION_DEBOUNCE 2000 -#endif +static uint16_t usb_setups[STORED_USB_SETUPS]; +# endif struct setups_data_t { uint8_t count; @@ -58,6 +50,18 @@ struct setups_data_t setups_data = { .cnt_ff = 0, }; +# ifndef OS_DETECTION_DEBOUNCE +# define OS_DETECTION_DEBOUNCE 200 +# endif + +// 2s should always be more than enough (otherwise, you may have other issues) +# if OS_DETECTION_DEBOUNCE > 2000 +# undef OS_DETECTION_DEBOUNCE +# define OS_DETECTION_DEBOUNCE 2000 +# endif + +typedef uint16_t debouncing_t; + static volatile os_variant_t detected_os = OS_UNSURE; static os_variant_t reported_os = OS_UNSURE; @@ -85,13 +89,13 @@ void os_detection_task(void) { } } } -#ifdef OS_DETECTION_KEYBOARD_RESET +# ifdef OS_DETECTION_KEYBOARD_RESET // resetting the keyboard on the USB device state change callback results in instability, so delegate that to this task // only take action if it's been stable at least once, to avoid issues with some KVMs else if (current_usb_device_state == USB_DEVICE_STATE_INIT && reported_usb_device_state != USB_DEVICE_STATE_INIT) { soft_reset_keyboard(); } -#endif +# endif } __attribute__((weak)) bool process_detected_host_os_kb(os_variant_t detected_os) { @@ -104,9 +108,9 @@ __attribute__((weak)) bool process_detected_host_os_user(os_variant_t detected_o // Some collected sequences of wLength can be found in tests. void process_wlength(const uint16_t w_length) { -#ifdef OS_DETECTION_DEBUG_ENABLE +# ifdef OS_DETECTION_DEBUG_ENABLE usb_setups[setups_data.count] = w_length; -#endif +# endif setups_data.count++; setups_data.last_wlength = w_length; if (w_length == 0x2) { @@ -170,23 +174,23 @@ void os_detection_notify_usb_device_state_change(enum usb_device_state usb_devic debouncing = true; } -#if defined(SPLIT_KEYBOARD) && defined(SPLIT_DETECTED_OS_ENABLE) +# if defined(SPLIT_KEYBOARD) && defined(SPLIT_DETECTED_OS_ENABLE) void slave_update_detected_host_os(os_variant_t os) { detected_os = os; last_time = timer_read_fast(); debouncing = true; } -#endif +# endif -#ifdef OS_DETECTION_DEBUG_ENABLE +# ifdef OS_DETECTION_DEBUG_ENABLE void print_stored_setups(void) { -# ifdef CONSOLE_ENABLE +# ifdef CONSOLE_ENABLE uint8_t cnt = eeprom_read_byte(EEPROM_USER_OFFSET); for (uint16_t i = 0; i < cnt; ++i) { uint16_t* addr = (uint16_t*)EEPROM_USER_OFFSET + i * sizeof(uint16_t) + sizeof(uint8_t); xprintf("i: %d, wLength: 0x%02X\n", i, eeprom_read_word(addr)); } -# endif +# endif } void store_setups_in_eeprom(void) { @@ -197,4 +201,6 @@ void store_setups_in_eeprom(void) { } } -#endif // OS_DETECTION_DEBUG_ENABLE +# endif // OS_DETECTION_DEBUG_ENABLE + +#endif diff --git a/quantum/os_detection.h b/quantum/os_detection.h index b8cd89833595..470f30943a6f 100644 --- a/quantum/os_detection.h +++ b/quantum/os_detection.h @@ -16,9 +16,11 @@ #pragma once -#include -#include -#include "usb_device_state.h" +#ifdef OS_DETECTION_ENABLE + +# include +# include +# include "usb_device_state.h" typedef enum { OS_UNSURE, @@ -38,11 +40,13 @@ void os_detection_task(void); bool process_detected_host_os_kb(os_variant_t os); bool process_detected_host_os_user(os_variant_t os); -#if defined(SPLIT_KEYBOARD) && defined(SPLIT_DETECTED_OS_ENABLE) +# if defined(SPLIT_KEYBOARD) && defined(SPLIT_DETECTED_OS_ENABLE) void slave_update_detected_host_os(os_variant_t os); -#endif +# endif -#ifdef OS_DETECTION_DEBUG_ENABLE +# ifdef OS_DETECTION_DEBUG_ENABLE void print_stored_setups(void); void store_setups_in_eeprom(void); -#endif +# endif + +#endif // OS_DETECTION_ENABLE From 2900d2cb4bc3a2231997fdceb07d7c2f17bd7b31 Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Tue, 20 Feb 2024 00:10:28 +0000 Subject: [PATCH 34/35] Revert "Refactor: group kbdfans keyboards (#22764)" This reverts commit 01b1274ff0e1200c30d528360dc16477a9feaf38. --- data/mappings/keyboard_aliases.hjson | 6 ----- keyboards/{kbdfans => }/epoch80/info.json | 0 .../epoch80/keymaps/default/keymap.c | 0 .../epoch80/keymaps/iso/keymap.c | 0 .../epoch80/keymaps/tsangan/keymap.c | 0 .../epoch80/keymaps/via/keymap.c | 0 .../epoch80/keymaps/via/rules.mk | 0 .../epoch80/keymaps/wkl/keymap.c | 0 keyboards/{kbdfans => }/epoch80/readme.md | 4 ++-- keyboards/{kbdfans => }/epoch80/rules.mk | 0 keyboards/{kbdfans => }/jm60/board.h | 0 keyboards/{kbdfans => }/jm60/chconf.h | 0 keyboards/{kbdfans => }/jm60/config.h | 0 keyboards/{kbdfans => }/jm60/info.json | 0 keyboards/{kbdfans => }/jm60/jm60.c | 0 .../jm60/keymaps/default/keymap.c | 3 --- .../{kbdfans => }/jm60/ld/jm60_bootloader.ld | 0 keyboards/{kbdfans => }/jm60/mcuconf.h | 0 keyboards/{kbdfans => }/jm60/readme.md | 2 +- keyboards/{kbdfans => }/jm60/rules.mk | 0 .../kbdfans/jm60/keymaps/poker3/keymap.c | 24 ------------------- 21 files changed, 3 insertions(+), 36 deletions(-) rename keyboards/{kbdfans => }/epoch80/info.json (100%) rename keyboards/{kbdfans => }/epoch80/keymaps/default/keymap.c (100%) rename keyboards/{kbdfans => }/epoch80/keymaps/iso/keymap.c (100%) rename keyboards/{kbdfans => }/epoch80/keymaps/tsangan/keymap.c (100%) rename keyboards/{kbdfans => }/epoch80/keymaps/via/keymap.c (100%) rename keyboards/{kbdfans => }/epoch80/keymaps/via/rules.mk (100%) rename keyboards/{kbdfans => }/epoch80/keymaps/wkl/keymap.c (100%) rename keyboards/{kbdfans => }/epoch80/readme.md (92%) rename keyboards/{kbdfans => }/epoch80/rules.mk (100%) rename keyboards/{kbdfans => }/jm60/board.h (100%) rename keyboards/{kbdfans => }/jm60/chconf.h (100%) rename keyboards/{kbdfans => }/jm60/config.h (100%) rename keyboards/{kbdfans => }/jm60/info.json (100%) rename keyboards/{kbdfans => }/jm60/jm60.c (100%) rename keyboards/{kbdfans => }/jm60/keymaps/default/keymap.c (97%) rename keyboards/{kbdfans => }/jm60/ld/jm60_bootloader.ld (100%) rename keyboards/{kbdfans => }/jm60/mcuconf.h (100%) rename keyboards/{kbdfans => }/jm60/readme.md (96%) rename keyboards/{kbdfans => }/jm60/rules.mk (100%) delete mode 100644 keyboards/kbdfans/jm60/keymaps/poker3/keymap.c diff --git a/data/mappings/keyboard_aliases.hjson b/data/mappings/keyboard_aliases.hjson index 29a7a719f38e..af97c39f0ce9 100644 --- a/data/mappings/keyboard_aliases.hjson +++ b/data/mappings/keyboard_aliases.hjson @@ -185,9 +185,6 @@ "eek": { "target": "eek/silk_down" }, - "epoch80": { - "target": "kbdfans/epoch80" - }, "era/klein": { "target": "era/sirind/klein_sd" }, @@ -314,9 +311,6 @@ "jj50": { "target": "kprepublic/jj50" }, - "jm60": { - "target": "kbdfans/jm60" - }, "jones": { "target": "jones/v03_1" }, diff --git a/keyboards/kbdfans/epoch80/info.json b/keyboards/epoch80/info.json similarity index 100% rename from keyboards/kbdfans/epoch80/info.json rename to keyboards/epoch80/info.json diff --git a/keyboards/kbdfans/epoch80/keymaps/default/keymap.c b/keyboards/epoch80/keymaps/default/keymap.c similarity index 100% rename from keyboards/kbdfans/epoch80/keymaps/default/keymap.c rename to keyboards/epoch80/keymaps/default/keymap.c diff --git a/keyboards/kbdfans/epoch80/keymaps/iso/keymap.c b/keyboards/epoch80/keymaps/iso/keymap.c similarity index 100% rename from keyboards/kbdfans/epoch80/keymaps/iso/keymap.c rename to keyboards/epoch80/keymaps/iso/keymap.c diff --git a/keyboards/kbdfans/epoch80/keymaps/tsangan/keymap.c b/keyboards/epoch80/keymaps/tsangan/keymap.c similarity index 100% rename from keyboards/kbdfans/epoch80/keymaps/tsangan/keymap.c rename to keyboards/epoch80/keymaps/tsangan/keymap.c diff --git a/keyboards/kbdfans/epoch80/keymaps/via/keymap.c b/keyboards/epoch80/keymaps/via/keymap.c similarity index 100% rename from keyboards/kbdfans/epoch80/keymaps/via/keymap.c rename to keyboards/epoch80/keymaps/via/keymap.c diff --git a/keyboards/kbdfans/epoch80/keymaps/via/rules.mk b/keyboards/epoch80/keymaps/via/rules.mk similarity index 100% rename from keyboards/kbdfans/epoch80/keymaps/via/rules.mk rename to keyboards/epoch80/keymaps/via/rules.mk diff --git a/keyboards/kbdfans/epoch80/keymaps/wkl/keymap.c b/keyboards/epoch80/keymaps/wkl/keymap.c similarity index 100% rename from keyboards/kbdfans/epoch80/keymaps/wkl/keymap.c rename to keyboards/epoch80/keymaps/wkl/keymap.c diff --git a/keyboards/kbdfans/epoch80/readme.md b/keyboards/epoch80/readme.md similarity index 92% rename from keyboards/kbdfans/epoch80/readme.md rename to keyboards/epoch80/readme.md index b029b5bd9942..a78f9ce87bac 100644 --- a/keyboards/kbdfans/epoch80/readme.md +++ b/keyboards/epoch80/readme.md @@ -11,10 +11,10 @@ The board was also sold in a zFrontier groupbuy under the name Dolch.CR 80. Make example for this keyboard (after setting up your build environment): - make kbdfans/epoch80:default + make epoch80:default Flashing example for this keyboard: - make kbdfans/epoch80:default:flash + make epoch80:default:flash See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/kbdfans/epoch80/rules.mk b/keyboards/epoch80/rules.mk similarity index 100% rename from keyboards/kbdfans/epoch80/rules.mk rename to keyboards/epoch80/rules.mk diff --git a/keyboards/kbdfans/jm60/board.h b/keyboards/jm60/board.h similarity index 100% rename from keyboards/kbdfans/jm60/board.h rename to keyboards/jm60/board.h diff --git a/keyboards/kbdfans/jm60/chconf.h b/keyboards/jm60/chconf.h similarity index 100% rename from keyboards/kbdfans/jm60/chconf.h rename to keyboards/jm60/chconf.h diff --git a/keyboards/kbdfans/jm60/config.h b/keyboards/jm60/config.h similarity index 100% rename from keyboards/kbdfans/jm60/config.h rename to keyboards/jm60/config.h diff --git a/keyboards/kbdfans/jm60/info.json b/keyboards/jm60/info.json similarity index 100% rename from keyboards/kbdfans/jm60/info.json rename to keyboards/jm60/info.json diff --git a/keyboards/kbdfans/jm60/jm60.c b/keyboards/jm60/jm60.c similarity index 100% rename from keyboards/kbdfans/jm60/jm60.c rename to keyboards/jm60/jm60.c diff --git a/keyboards/kbdfans/jm60/keymaps/default/keymap.c b/keyboards/jm60/keymaps/default/keymap.c similarity index 97% rename from keyboards/kbdfans/jm60/keymaps/default/keymap.c rename to keyboards/jm60/keymaps/default/keymap.c index d063afa0fd35..2bb26fccf6da 100644 --- a/keyboards/kbdfans/jm60/keymaps/default/keymap.c +++ b/keyboards/jm60/keymaps/default/keymap.c @@ -1,6 +1,3 @@ -// Copyright QMK -// SPDX-License-Identifier: GPL-2.0+ - #include QMK_KEYBOARD_H enum layer_names { diff --git a/keyboards/kbdfans/jm60/ld/jm60_bootloader.ld b/keyboards/jm60/ld/jm60_bootloader.ld similarity index 100% rename from keyboards/kbdfans/jm60/ld/jm60_bootloader.ld rename to keyboards/jm60/ld/jm60_bootloader.ld diff --git a/keyboards/kbdfans/jm60/mcuconf.h b/keyboards/jm60/mcuconf.h similarity index 100% rename from keyboards/kbdfans/jm60/mcuconf.h rename to keyboards/jm60/mcuconf.h diff --git a/keyboards/kbdfans/jm60/readme.md b/keyboards/jm60/readme.md similarity index 96% rename from keyboards/kbdfans/jm60/readme.md rename to keyboards/jm60/readme.md index 545124f3aaa6..bb790d6d07f7 100644 --- a/keyboards/kbdfans/jm60/readme.md +++ b/keyboards/jm60/readme.md @@ -8,7 +8,7 @@ A compact 60% keyboard with full RGB led support. Make example for this keyboard (after setting up your build environment): - make kbdfans/jm60:default + make jm60:default See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/kbdfans/jm60/rules.mk b/keyboards/jm60/rules.mk similarity index 100% rename from keyboards/kbdfans/jm60/rules.mk rename to keyboards/jm60/rules.mk diff --git a/keyboards/kbdfans/jm60/keymaps/poker3/keymap.c b/keyboards/kbdfans/jm60/keymaps/poker3/keymap.c deleted file mode 100644 index ee1583eab73b..000000000000 --- a/keyboards/kbdfans/jm60/keymaps/poker3/keymap.c +++ /dev/null @@ -1,24 +0,0 @@ -#include QMK_KEYBOARD_H - -enum layer_names { - _BL, - _FL -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_BL] = LAYOUT_60_ansi( - QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, - MO(_FL), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL - ), - - [_FL] = LAYOUT_60_ansi( - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, - _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SCRL, KC_PAUS, _______, - KC_CAPS, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, KC_DEL, _______, - _______, KC_APP, _______, _______, _______, _______, KC_END, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______ - ) -}; From 6912bdc0e17b1e2ef684d69c34363a3c75d1e397 Mon Sep 17 00:00:00 2001 From: Fernando Birra Date: Tue, 4 Jun 2024 15:14:11 +0100 Subject: [PATCH 35/35] Apply suggestions from code review Removed unused code. Fixed wrong chip reference. Co-authored-by: Nick Brassel --- drivers/painter/gc9xxx/qp_gc9107.c | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/drivers/painter/gc9xxx/qp_gc9107.c b/drivers/painter/gc9xxx/qp_gc9107.c index 866a198570d1..108344da4f20 100644 --- a/drivers/painter/gc9xxx/qp_gc9107.c +++ b/drivers/painter/gc9xxx/qp_gc9107.c @@ -22,31 +22,11 @@ __attribute__((weak)) bool qp_gc9107_init(painter_device_t device, painter_rotat const uint8_t gc9107_init_sequence[] = { GC9XXX_SET_INTER_REG_ENABLE1, 5, 0, GC9XXX_SET_INTER_REG_ENABLE2, 5, 0, - - //0xB0, 0, 1, 0xC0, - // GC9107_SET_FUNCTION_CTL2, 0, 1, GC9107_ALLOW_SET_VGH | GC9107_ALLOW_SET_VGL | GC9107_ALLOW_SET_VGH_VGL_CLK,// | 0x28, - // GC9107_SET_VGH, 0, 1, 0x24, - // GC9107_SET_VGL, 0, 1, 0x48, - // GC9107_SET_VGH_VGL_CLK, 0, 1, 0x22, - - // GC9107_SET_FUNCTION_CTL3, 0, 1, GC9107_ALLOW_SET_GAMMA1 | GC9107_ALLOW_SET_GAMMA2, - // GC9XXX_SET_GAMMA1, 0, 14, 0x1F,0x28,0x04,0x3E,0x2A,0x2E,0x20,0x00,0x0C,0x06,0x00,0x1C,0x1F,0x0f, - // GC9XXX_SET_GAMMA2, 0, 14, 0X00,0X2D,0X2F,0X3C,0X6F,0X1C,0X0B,0X00,0X00,0X00,0X07,0X0D,0X11,0X0f, - GC9107_SET_FUNCTION_CTL6, 0, 1, GC9107_ALLOW_SET_COMPLEMENT_RGB | 0x08 | GC9107_ALLOW_SET_FRAMERATE, GC9107_SET_COMPLEMENT_RGB, 0, 1, GC9107_COMPLEMENT_WITH_LSB, 0xAB, 0, 1, 0x0E, GC9107_SET_FRAME_RATE, 0, 1, 0x19, - - // 0xB7, 0, 1, 0x01, - // 0xB8, 0, 1, 0x08, - - - - // 0xC6, 0, 1, 0x30, - // 0xC7, 0, 1, 0x18, GC9XXX_SET_PIXEL_FORMAT, 0, 1, GC9107_PIXEL_FORMAT_16_BPP_IFPF, - // 0x21, 0, 0, GC9XXX_CMD_SLEEP_OFF, 120, 0, GC9XXX_CMD_DISPLAY_ON, 20, 0 }; @@ -96,7 +76,7 @@ const tft_panel_dc_reset_painter_driver_vtable_t gc9107_driver_vtable = { }; #ifdef QUANTUM_PAINTER_GC9107_SPI_ENABLE -// Factory function for creating a handle to the ILI9341 device +// Factory function for creating a handle to the GC9107 device painter_device_t qp_gc9107_make_spi_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode) { for (uint32_t i = 0; i < GC9107_NUM_DEVICES; ++i) { tft_panel_dc_reset_painter_device_t *driver = &gc9107_drivers[i];