From 649b33d7783cf3021928534b7ae127e0a89e8807 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Tue, 21 Jun 2016 22:39:54 -0400 Subject: Renames keyboard folder to keyboards, adds couple of tmk's fixes (#432) * fixes from tmk's repo * rename keyboard to keyboards --- keyboards/gh60/Makefile | 74 ++ keyboards/gh60/README.md | 60 ++ keyboards/gh60/config.h | 161 +++++ keyboards/gh60/gh60.c | 68 ++ keyboards/gh60/gh60.h | 81 +++ keyboards/gh60/gh60revc.jpg | Bin 0 -> 1424987 bytes keyboards/gh60/keymaps/default/compiled.hex | 1019 +++++++++++++++++++++++++++ keyboards/gh60/keymaps/default/keymap.c | 69 ++ keyboards/gh60/pinout.txt | 18 + 9 files changed, 1550 insertions(+) create mode 100644 keyboards/gh60/Makefile create mode 100644 keyboards/gh60/README.md create mode 100644 keyboards/gh60/config.h create mode 100644 keyboards/gh60/gh60.c create mode 100644 keyboards/gh60/gh60.h create mode 100644 keyboards/gh60/gh60revc.jpg create mode 100644 keyboards/gh60/keymaps/default/compiled.hex create mode 100644 keyboards/gh60/keymaps/default/keymap.c create mode 100644 keyboards/gh60/pinout.txt (limited to 'keyboards/gh60') diff --git a/keyboards/gh60/Makefile b/keyboards/gh60/Makefile new file mode 100644 index 0000000000..39a9cc0ae1 --- /dev/null +++ b/keyboards/gh60/Makefile @@ -0,0 +1,74 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +# CONSOLE_ENABLE ?= yes # Console for debug(+400) +# COMMAND_ENABLE ?= yes # Commands for debug and configuration +KEYBOARD_LOCK_ENABLE ?= yes # Allow locking of keyboard via magic key +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +# SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend +NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +# BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality +# MIDI_ENABLE ?= YES # MIDI controls +# UNICODE_ENABLE ?= YES # Unicode +# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID + + +ifndef QUANTUM_DIR + include ../../Makefile +endif + diff --git a/keyboards/gh60/README.md b/keyboards/gh60/README.md new file mode 100644 index 0000000000..35c13375ce --- /dev/null +++ b/keyboards/gh60/README.md @@ -0,0 +1,60 @@ +## gh60 Rev C keyboard firmware + +![gh60 Rev C PCB](gh60revc.jpg) + + /* Column pin configuration + * col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 + * pin: F0 F1 E6 C7 C6 B6 D4 B1 B7 B5 B4 D7 D6 B3 (Rev.C) + */ + + /* Row pin configuration + * row: 0 1 2 3 4 + * pin: D0 D1 D2 D3 D5 + */ + + GPIO pads + 0 F7 WASD LEDs + 1 F6 ESC LED + 2 F5 FN LED + 3 F4 POKER Arrow LEDs + + B2 Capslock LED + B0 not connected + +Functions to controls LED clusters + + gh60_caps_led_on() + gh60_poker_leds_on() + gh60_fn_led_on() + gh60_esc_led_on() + gh60_wasd_leds_on() + + gh60_caps_led_off() + gh60_poker_leds_off() + gh60_fn_led_off() + gh60_esc_led_off() + gh60_wasd_leds_off() + +====================== + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent README.md](/README.md). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/gh60_rev_c folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. + +Depending on which keymap you would like to use, you will have to compile slightly differently. + +### Default +To build with the default keymap, simply run `make`. + +### Other Keymaps +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `.c` in the keymaps folder, and see keymap document (you can find in top README.md) and existent keymap files. + +To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like: +``` +$ make KEYMAP=[default|jack|] +``` +Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. diff --git a/keyboards/gh60/config.h b/keyboards/gh60/config.h new file mode 100644 index 0000000000..4813c4e786 --- /dev/null +++ b/keyboards/gh60/config.h @@ -0,0 +1,161 @@ +/* +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 . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER geekhack +#define PRODUCT GH60 +#define DESCRIPTION t.m.k. keyboard firmware for GH60 + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 14 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ + #define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 } +// Rev A +// #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B0, B5, B4, D7, D6, B3 } +// Rev B/C + #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/gh60/gh60.c b/keyboards/gh60/gh60.c new file mode 100644 index 0000000000..6da4d8ee3e --- /dev/null +++ b/keyboards/gh60/gh60.c @@ -0,0 +1,68 @@ +#include "gh60.h" +#include "led.h" + +__attribute__ ((weak)) +void matrix_init_user(void) { + // leave this function blank - it can be defined in a keymap file +}; + +__attribute__ ((weak)) +void matrix_scan_user(void) { + // leave this function blank - it can be defined in a keymap file +} + +__attribute__ ((weak)) +bool process_action_user(keyrecord_t *record) { + // leave this function blank - it can be defined in a keymap file + return true; +} + +__attribute__ ((weak)) +void led_set_user(uint8_t usb_led) { + // leave this function blank - it can be defined in a keymap file +} + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_action_kb(keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_action_user(record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + if (usb_led & (1< + +/* GH60 LEDs + * GPIO pads + * 0 F7 WASD LEDs + * 1 F6 ESC LED + * 2 F5 FN LED + * 3 F4 POKER Arrow LEDs + * B2 Capslock LED + * B0 not connected + */ +inline void gh60_caps_led_on(void) { DDRB |= (1<<2); PORTB &= ~(1<<2); } +inline void gh60_poker_leds_on(void) { DDRF |= (1<<4); PORTF &= ~(1<<4); } +inline void gh60_fn_led_on(void) { DDRF |= (1<<5); PORTF &= ~(1<<5); } +inline void gh60_esc_led_on(void) { DDRF |= (1<<6); PORTF &= ~(1<<6); } +inline void gh60_wasd_leds_on(void) { DDRF |= (1<<7); PORTF &= ~(1<<7); } + +inline void gh60_caps_led_off(void) { DDRB &= ~(1<<2); PORTB &= ~(1<<2); } +inline void gh60_poker_leds_off(void) { DDRF &= ~(1<<4); PORTF &= ~(1<<4); } +inline void gh60_fn_led_off(void) { DDRF &= ~(1<<5); PORTF &= ~(1<<5); } +inline void gh60_esc_led_off(void) { DDRF &= ~(1<<6); PORTF &= ~(1<<6); } +inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); } + +/* GH60 keymap definition macro + * K2C, K31 and K3C are extra keys for ISO + */ +#define KEYMAP( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ + K40, K41, K42, K45, K49, K4A, K4B, K4C, K4D \ +) { \ + { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D }, \ + { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D }, \ + { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D }, \ + { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D }, \ + { KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_NO, KC_##K45, KC_NO, KC_NO, KC_NO, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D } \ +} + +/* ANSI valiant. No extra keys for ISO */ +#define KEYMAP_ANSI( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ + K40, K41, K42, K45, K4A, K4B, K4C, K4D \ +) KEYMAP( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, NO, K2D, \ + K30, NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, NO, K3D, \ + K40, K41, K42, K45, NO, K4A, K4B, K4C, K4D \ +) + +#define KEYMAP_HHKB( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49,\ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3C, \ + K40, K41, K42, K45, K4A, K4B, K4C, K4D \ +) KEYMAP( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, NO, K2D, \ + K30, NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ + K40, K41, K42, K45, K49, K4A, K4B, K4C, K4D \ +) + +void matrix_init_user(void); +void matrix_scan_user(void); +bool process_action_user(keyrecord_t *record); +void led_set_user(uint8_t usb_led); + +#endif diff --git a/keyboards/gh60/gh60revc.jpg b/keyboards/gh60/gh60revc.jpg new file mode 100644 index 0000000000..6c88ad2442 Binary files /dev/null and b/keyboards/gh60/gh60revc.jpg differ diff --git a/keyboards/gh60/keymaps/default/compiled.hex b/keyboards/gh60/keymaps/default/compiled.hex new file mode 100644 index 0000000000..5c253e970a --- /dev/null +++ b/keyboards/gh60/keymaps/default/compiled.hex @@ -0,0 +1,1019 @@ +:100000000C9428020C946C020C946C020C946C02FC +:100010000C946C020C946C020C946C020C946C02A8 +:100020000C946C020C946C020C94A50B0C94770C41 +:100030000C949B190C946C020C946C020C946C0242 +:100040000C946C020C946C020C946C020C946C0278 +:100050000C946C020C94031A0C946C020C946C02B9 +:100060000C946C020C946C020C946C020C946C0258 +:100070000C946C020C946C020C946C020C946C0248 +:100080000C946C020C946C020C946C020C946C0238 +:100090000C946C020C946C020C946C020C946C0228 +:1000A0000C946C020C946C020C946C02E40C060D23 +:1000B000F40D060DF40D4B0D6E0DF40DC30DD60DA4 +:1000C000B310B310E210E21021114111711271123C +:1000D0004C117112FC11FC116212711271126B122F +:1000E0000912091209120912091209120912091238 +:1000F0000912091209120912091209120912091228 +:10010000191227122E1235123F12F1A1048A29006A +:100110001E001F00200021002200230024002500D3 +:10012000260027002D002E0035002B0014001A0099 +:100130000800150017001C0018000C001200130026 +:100140002F0030002A0039000400160007000900C3 +:100150000A000B000D000E000F00330034000000F9 +:100160002800E100C1001D001B0006001900050069 +:1001700011001000360037003800C000E500E00034 +:10018000E300E200000000002C000000000000007E +:100190003100E600E7006500E40029003A003B007A +:1001A0003C003D003E003F00400041004200430053 +:1001B000440045000100010001005200010001005F +:1001C0000100010001000100010001000100010027 +:1001D00001000100500051004F000100010001002A +:1001E0000100010001000100010001000100010007 +:1001F00001000100010001000100010001000100F7 +:1002000001000100010001000100010001000100E6 +:1002100000000000010000000000000001000100DB +:1002200001000100010001000100010001000100C6 +:1002300001000100010001000100010001000100B6 +:1002400001000100010001000100010001000100A6 +:100250000100010001000100010001000100010096 +:100260000100010001000100010001000100010086 +:100270000100010001000100010001000100010076 +:100280000100010001000100010001000100010066 +:100290000100010052000100010001000000000007 +:1002A00001000000000000000100010050005100AA +:1002B0004F000A03470048003600300000001203D8 +:1002C0006700650065006B006800610063006B00FB +:1002D00000000403090409026D00040100A0FA09EA +:1002E0000400000103010100092111010001223F66 +:1002F000000705810308000A090401000103010247 +:1003000000092111010001224D00070582030800A8 +:100310000A09040200010300000009211101000183 +:100320002236000705830308000A090403000103BD +:100330000000000921110100012239000705840392 +:100340001000011201100100000008EDFE606001C4 +:10035000000102000105010906A101050719E029B4 +:10036000E715002501950875018102050819012985 +:100370000595057501910295017503910105071910 +:1003800000297715002501957875018102C00501C6 +:100390000980A101850216010026B7001A01002A72 +:1003A000B700751095018100C0050C0901A10185F8 +:1003B00003160100269C021A01002A9C0275109562 +:1003C000018100C005010902A1010901A10005097F +:1003D0001901290515002501950575018102950171 +:1003E000750381010501093009311581257F9502C9 +:1003F0007508810609381581257F950175088106E4 +:10040000050C0A38021581257F950175088106C003 +:10041000C005010906A101050719E029E715002516 +:10042000019508750181029501750881010508197A +:100430000129059505750191029501750391010545 +:1004400007190029FF150025FF950675088100C0D2 +:1004500011241FBECFEFDAE0DEBFCDBF04B603FE2E +:1004600024C08091F1019091F201A091F301B0912B +:10047000F4018730904BA740B04BB9F41092F101D2 +:100480001092F2011092F3011092F40114BE84B79D +:10049000877F84BF88E10FB6F89480936000109244 +:1004A00060000FBEE0E0F8E3099511E0A0E0B1E0E4 +:1004B000EEE5FFE302C005900D92AC33B107D9F72A +:1004C00011E0ACE3B1E001C01D92A13FB107E1F73B +:1004D0000E94EB080C94AD1F0C940000089581E07D +:1004E000089508950C946E020C9490020C946F027F +:1004F00081FF02C0229A01C022982A980C947102AE +:1005000061110BC0FC018281882321F085EE0E94DD +:10051000620F03C085EE0E941F1080E090E00895F6 +:100520008091B70181FF04C0879A8F98859A03C094 +:1005300087988F9885988D9882FF04C0849A8C98AC +:10054000869A03C084988C9886988E98089581E046 +:1005500008950C94A70208950F931F93CF93DF93F0 +:100560008C01FC01C081D181CE010E94D517BE0152 +:100570000E945903EC01B8010E94A902882309F4E2 +:100580008DC0F8018281882309F44AC08091470117 +:1005900081111FC0C431F0E5DF0709F051C00E948E +:1005A000AB0281E0809347010E94CD1990934601F0 +:1005B0008093450110923E011092400110923F013C +:1005C0001092420110924101109244011092430195 +:1005D00065C080914501909146010E94D919883CDF +:1005E000910570F480913E01E82FF0E0EE0FFF1FBF +:1005F000E15CFE4FD183C0838F5F80933E014EC08C +:10060000C43880E5D80721F0C538D04501F13AC09B +:10061000F8018281882341F010923C0182E01EC0E3 +:10062000C438E0E5DE0759F580913C01811106C030 +:1006300086E20E94620F86E20E941F1082E01CC0C8 +:10064000C438F0E5DF0741F3C538D045D9F4F801E7 +:100650008281882331F010923D0180E20E946E1069 +:100660001DC080913D01811106C087E20E94620F8A +:1006700087E20E941F1080E20E9475100FC0C538EB +:10068000D04529F381E080933C0180933D01C8016E +:10069000DF91CF911F910F910C94760280E0DF9152 +:1006A000CF911F910F9108950C9472020C947402D3 +:1006B00008959EE0799FF001112496E4899FE00D52 +:1006C000F11D1124E60FF11DEE0FFF1FE25FFE4F3B +:1006D000859194910895880F991FFC01E657F04089 +:1006E000859194910895880F991FFC01E65FFE4F54 +:1006F0008591949108950F931F93CF93DF93EC010D +:10070000811520E3920750F5C11580E2D80708F063 +:10071000C3C0CB3BD10590F4C83AD10508F06AC0FC +:10072000C53AD10508F05BC0C430D10508F0D0C18E +:10073000219709F0CAC101E010E00AC2CF3FD105FC +:1007400011F008F0C5C1C03FD10508F0A2C0CE012C +:10075000805E9109089708F4BBC1B7C1C13090E52C +:10076000D90709F4A2C020F5C0318FE4D80770F48E +:10077000C11590E4D90708F094C0C11521E3D20750 +:1007800008F0A3C1DD278E01106CE2C1C115D04570 +:1007900009F09BC10E94DC128FEF94E32CE08150A2 +:1007A00090402040E1F700C000000E94281AD0C10C +:1007B000C11597E5D90758F4C03121E5D20708F0F3 +:1007C0001CC1C43180E5D80708F475C07EC1CE01D4 +:1007D00090578115904108F078C1DF7073C1C53A18 +:1007E000D10509F477C1C63AD10509F076C102E80E +:1007F00010E4AEC1C83AD10509F472C1C93AD105B5 +:1008000009F471C1CA3AD10509F470C1CB3AD105D6 +:1008100009F46FC1CC3AD10509F46EC1CD3AD105C6 +:1008200009F46DC1C03BD10509F46CC1CE3AD105C4 +:1008300009F46BC1CF3AD10509F46AC1C13BD105B6 +:1008400009F469C1C23BD10509F468C1C33BD105B4 +:1008500009F467C1C43BD10509F466C1C53BD105A4 +:1008600009F465C1C63BD10509F464C1C73BD10594 +:1008700009F463C1C83BD10509F462C1C93BD10584 +:1008800009F461C1CA3BD10509F460C100E014E478 +:100890005FC18E0110655CC1CE019F700E94730321 +:1008A00058C1DF708E01106A53C18091D4018160FC +:1008B0008093D4014DC10E94D51B811102C00E94BA +:1008C000BB1B0E94F21B90E09093F1018093F0011A +:1008D000C23080E5D80721F48091F001816086C0A4 +:1008E000C43090E5D90721F48091F00182607EC088 +:1008F000C63020E5D20721F48091F001846076C0F3 +:10090000C83080E5D80719F48091F00127C0CA30BB +:1009100090E5D90721F48091F001806167C0CC3067 +:1009200020E5D20721F48091F00180625FC0CE30D3 +:1009300080E5D80721F48091F001806457C0C03170 +:1009400090E5D90721F48091F00180684FC0C23151 +:1009500020E5D20729F48091F0018460886046C0C8 +:10096000C33080E5D80721F48091F0018E7F3EC02E +:10097000C53090E5D90721F48091F0018D7F36C014 +:10098000C73020E5D20721F48091F0018B7F2EC083 +:10099000C93080E5D80719F48091F00126C0CB302A +:1009A00090E5D90721F48091F0018F7E1FC0CD30F2 +:1009B00020E5D20721F48091F0018F7D17C0CF3060 +:1009C00080E5D80721F48091F0018F7B0FC0C13101 +:1009D00090E5D90721F48091F0018F7707C0C331EA +:1009E000D04531F48091F0018B7F877F8093F001B7 +:1009F0008091F0010E94F61BABC08D2F99278F705C +:100A0000992781309105D9F49E012370332702C0C4 +:100A1000880F991F2A95E2F79C688E0144E0000F29 +:100A2000111F4A95E1F700271370802B912B53E09B +:100A3000CC0FDD1F5A95E1F7C076DD272FC082303D +:100A4000910531F4DC2FCC278E01016F106A80C034 +:100A50008330910569F4CE018370992701E010E09D +:100A600002C0000F111F8A95E2F7C8019C680FC0F1 +:100A700084309105B9F4CE018370992701E010E02C +:100A800002C0000F111F8A95E2F7C8019A6823E09F +:100A9000CC0FDD1F2A95E1F7C07ED7708C010C2B9F +:100AA0001D2B56C08530910531F4DC2FCC278E01EB +:100AB000046F106A4DC0069709F04AC0CF71DD2758 +:100AC000DC2FCC278E01106243C000E010E040C054 +:100AD0008E013EC001E810E43BC003E810E438C0DA +:100AE00002EE14E435C009EE14E432C00AEE14E458 +:100AF0002FC005EB14E42CC006EB14E429C007EB6F +:100B000014E426C00CEC14E423C00DEC14E420C063 +:100B100003E815E41DC00AE815E41AC002E915E46B +:100B200017C004E915E414C001E216E411C003E2A1 +:100B300016E40EC004E216E40BC005E216E408C099 +:100B400006E216E405C007E216E402C00AE216E473 +:100B5000C801DF91CF911F910F9108959EE0799F79 +:100B6000F001112496E4899FE00DF11D1124E60F98 +:100B7000F11DEE0FFF1FE25FFE4F85919491803EC5 +:100B80009105E0F4803C910558F58133910509F415 +:100B90006FC048F48932910509F463C08A32910527 +:100BA00009F46DC072C089339105E9F0823891056E +:100BB000D1F08533910509F44DC067C0833E91059E +:100BC00081F138F4803E9105B9F0823E9105D9F06B +:100BD0005CC0863E910561F1873E9105A1F155C04B +:100BE0000E946B0308952091F00120FD02C021FFB7 +:100BF0004CC080EE90E049C08091F00180FFF9CFB9 +:100C000089E390E042C08091F00182FF0EC08091A4 +:100C1000F00184FF03C080E090E037C083EE90E0F5 +:100C200034C08091F00182FFF2CF82EE90E02DC0BF +:100C30008091F00183FF0BC08091F00184FDEBCF28 +:100C400087EE90E022C08091F00183FFF5CF86EE21 +:100C500090E01BC08091F00185FF07C089E290E021 +:100C600014C08091F00185FFF9CF85E390E00DC0BD +:100C70008091F00186FF07C08AE290E006C0809173 +:100C8000F00186FFF9CF81E390E00E947B03089595 +:100C90000C947802E82FF0E0ED5DFE4F8081E82FA4 +:100CA000EF70F0E082958F7021E030E0A90102C082 +:100CB000440F551F8A95E2F740A308950F931F93A1 +:100CC000CF93DF9385B7806885BF85B7806885BF80 +:100CD000C4E0D0E001E010E0FE01ED5DFE4F808158 +:100CE000E82FEF70F0E021A182958F70A80102C07B +:100CF000440F551F8A95E2F7CA01822B81A38C2FDE +:100D00000E944A06219740F78DE090E061E070E094 +:100D1000FC01EB5EFE4F2081E22FEF70F0E042A17C +:100D200022952F70DB0102C0AA0FBB1F2A95E2F7A4 +:100D30009D01242B22A3019758F7DF91CF911F919A +:100D40000F910C945403EF92FF920F931F93CF9344 +:100D5000DF9302E511E0C4E0EE24E394F12CD5E04A +:100D60008C2F0E944A068DE090E040E050E0FC01AC +:100D7000EB5EFE4F6081E62FEF70F0E020A130E0E7 +:100D800062956F7002C0359527956A95E2F720FD50 +:100D900009C09701082E02C0220F331F0A94E2F700 +:100DA000422B532B019718F7F801929182918F01F2 +:100DB0008417950721F051834083D09300018C2F35 +:100DC0000E944A06C15060F68091000187FD1FC055 +:100DD0008150809300018F3F39F08FE99FE00197A8 +:100DE000F1F700C0000013C080E090E0FC01EE5A73 +:100DF000FE4FDC01A85BBE4F18962D913C911997D0 +:100E0000318720870297863FEFEF9E0779F70E9490 +:100E1000560381E0DF91CF911F910F91FF90EF90EA +:100E20000895E82FF0E0EE0FFF1FEE5AFE4F80818D +:100E30009181089508950F931F93CF930CE511E0CE +:100E4000C0E0F801929182918F010E945019C80F61 +:100E5000F1E002351F07A9F78C2FCF911F910F9159 +:100E6000089580916C010895CF93DF9300D01F9275 +:100E7000CDB7DEB79C018091E701843019F593E08E +:100E800099833B832A839093E9008FEF9091E80048 +:100E9000815095FD06C095ED9A95F1F700008111FE +:100EA000F5CF8091E80085FF0DC040E050E063E0A1 +:100EB00070E0CE0101960E9495098091E8008E773E +:100EC0008093E8000F900F900F90DF91CF910895DD +:100ED000CF93DF9300D01F92CDB7DEB72091E7010B +:100EE000243021F522E029839B838A8383E0809349 +:100EF000E9008FEF9091E800815095FD06C095EDD7 +:100F00009A95F1F700008111F5CF8091E80085FFF7 +:100F10000DC040E050E063E070E0CE0101960E9419 +:100F200095098091E8008E778093E8000F900F90EC +:100F30000F90DF91CF9108952091E7012430F1F4D3 +:100F400022E02093E9002FEF3091E800215035FD99 +:100F500006C035ED3A95F1F700002111F5CF20914B +:100F6000E80025FF0BC040E050E065E070E00E9423 +:100F700095098091E8008E778093E8000895CF93DB +:100F8000DF93EC019091E701943009F046C0809125 +:100F90000B018823D9F080910C018823B9F090933C +:100FA000E9008FEF9091E800815095FD06C095E132 +:100FB0009A95F1F700008111F5CF8091E80085FF47 +:100FC0002CC040E050E060E170E017C081E0809309 +:100FD000E9008FEF9091E800815095FD06C095EDF6 +:100FE0009A95F1F700008111F5CF8091E80085FF17 +:100FF00014C040E050E068E070E0CE010E94950926 +:101000008091E8008E778093E80080E1FE01ACE5F6 +:10101000B1E001900D928A95E1F7DF91CF910895AB +:101020008091E601811109C00E942A0B0E94870B62 +:101030008091E20084608093E20008951092E601BE +:101040000895089508950C94951942E061EC81E0AB +:101050000E94A40A42E061EC82E00E94A40A42E0FD +:1010600061EC83E00E94A40A42E161EC84E00C940C +:10107000A40A8091E901833009F455C030F481302D +:1010800071F0823009F48EC008958A3009F47AC074 +:101090008B3009F460C0893009F09CC020C0809179 +:1010A000E801813A09F096C08091E800877F80933B +:1010B000E8008091EC019091ED01892B21F460E131 +:1010C0008CE591E003C060E080E090E070E00E9479 +:1010D000E0098091E8008B778093E8000895809183 +:1010E000E801813209F076C08091EC019091ED0128 +:1010F000009719F0039709F06DC08091E800877F91 +:101100008093E8008091E80082FD05C08091E701AE +:101110008111F8CF5FC08091F10080936C018091C4 +:10112000E8008B7753C08091E801813A09F052C002 +:101130008091EC019091ED01892B09F04BC08091D9 +:10114000E800877F8093E8008091E80080FFFCCF73 +:1011500080910B0136C08091E8018132D9F58091F0 +:10116000EC019091ED01892BA9F58091E800877F32 +:101170008093E8000E94D90A8091EA0180930B01D4 +:101180000C94DC128091E801813221F58091E80015 +:10119000877F8093E8000E94D90A8091EB018093B9 +:1011A0006D0108958091E801813AA1F48091E800F1 +:1011B000877F8093E8008091E80080FFFCCF8091DA +:1011C0006D018093F1008091E8008E778093E800B4 +:1011D0000C94D90A089584B7877F84BF88E10FB63D +:1011E000F89480936000109260000FBE90E080E859 +:1011F0000FB6F89480936100909361000FBE0E9437 +:101200007C0E0E942A0B0E94870B8091E200846072 +:101210008093E20078940E940D0E0E947E0E81E081 +:1012200091E00E94280E8091E701853069F40E94C8 +:101230005C198091E5018823B1F30E948719882306 +:1012400091F30E947F09EFCF0E94840EECCF292FEB +:10125000332723303105C9F064F42130310581F0A2 +:101260002230310509F043C08DE690E026ED32E0F2 +:1012700042C021323105F1F02232310541F137C04F +:1012800082E190E023E433E036C099278130910574 +:1012900041F08230910541F0892B49F5E2EDF2E011 +:1012A00005C0EEEBF2E002C0E2EBF2E0849190E0E8 +:1012B0009F0121C06430D8F4E62FF0E0EE0FFF1F4D +:1012C000EC5CFE4F2081318189E090E014C06430F5 +:1012D00070F470E0FB01EE0FFF1FE45DFE4F208114 +:1012E0003181FB01E85DFE4F808190E004C080E029 +:1012F00090E020E030E0FA0131832083089580E11E +:1013000089BD82E189BD09B400FEFDCF8091D8007E +:101310008F7D8093D8008091E00082608093E00010 +:101320008091E00081FDFCCF0895CF92DF92EF9293 +:10133000FF920F931F93CF93DF93EC018B016A0110 +:101340000E94F80A811133C0C114D10439F0F601AA +:1013500080819181081B190BC80FD91FE12CF12C3A +:101360000115110519F18091E80085FD16C08091E5 +:10137000E8008E778093E800C114D10449F0F601AB +:1013800080819181E80EF91EF182E08285E00FC034 +:101390000E94F80A882321F30AC089918093F10002 +:1013A00001501109FFEFEF1AFF0ADACF80E0DF9159 +:1013B000CF911F910F91FF90EF90DF90CF90089504 +:1013C0002091EE013091EF012617370748F06115A3 +:1013D000710539F42091E8002E772093E80001C0D0 +:1013E000B90140E061157105A9F12091E7012223BF +:1013F00009F443C0253009F442C02091E80023FDE0 +:1014000040C02091E80022FD32C02091E80020FF7A +:10141000E9CF4091F3002091F20030E0342BFC0141 +:10142000CF016115710559F02830310540F48191E3 +:101430008093F100615071092F5F3F4FF1CF41E080 +:101440002830310509F040E02091E8002E77209304 +:10145000E800C8CF4111C9CF0AC08091E7018823B5 +:1014600061F0853061F08091E80083FD0AC08091D1 +:10147000E80082FFF2CF80E0089582E0089583E0E3 +:10148000089581E008952091EE013091EF01261733 +:10149000370748F06115710539F42091E8002E777F +:1014A0002093E80001C0B901FC0120E0611571053D +:1014B00091F18091E701882309F440C0853009F457 +:1014C0003FC08091E80083FD3DC08091E80082FD2F +:1014D0002FC08091E80080FFE9CF2091F300809138 +:1014E000F20090E0922B6115710559F0883091055A +:1014F00040F424912093F1003196615071090196D6 +:10150000F2CF21E0089709F020E08091E8008E7783 +:101510008093E800CBCF2111CCCF0AC08091E701A6 +:10152000882361F0853061F08091E80083FD0AC076 +:101530008091E80082FFF2CF80E0089582E0089574 +:1015400083E0089581E00895982F973058F590939F +:10155000E900981739F07091EC002091ED0050915E +:10156000F00003C0242F762F50E021FF19C03091E6 +:10157000EB003E7F3093EB003091ED003D7F3093E8 +:10158000ED003091EB0031603093EB007093EC0094 +:101590002093ED005093F0002091EE0027FF07C04C +:1015A0009F5FD3CF8F708093E90081E0089580E042 +:1015B00008958091E80187FF11C08091E80082FDC5 +:1015C00005C08091E7018111F8CF11C08091E8003A +:1015D0008B770BC08091E701882349F08091E80068 +:1015E00080FFF8CF8091E8008E778093E80008951F +:1015F0002091E4003091E50095E64091EC00842FC5 +:10160000817040FF22C08091E80080FD1CC0809165 +:10161000E701882391F0853091F08091EB0085FD02 +:1016200010C04091E4005091E5004217530729F3A0 +:101630009A01915011F784E0089582E0089583E0C3 +:10164000089581E0089580E008954091E80042FF08 +:10165000DECF08950E94980B0E94A00BE0EEF0E010 +:10166000808181608083E8EDF0E080818F778083E6 +:1016700019BCA7EDB0E08C918E7F8C9380818F7E1A +:1016800080831092E60108950F931F93CF93DF9309 +:101690000E94980B0E94A00BC8EDD0E088818F7744 +:1016A000888388818068888388818F7D888319BC3E +:1016B0001092E7011092E3011092E5011092E4010B +:1016C00000EE10E0F80180818B7F8083888181604B +:1016D000888342E060E080E00E94A40AE1EEF0E04E +:1016E00080818E7F8083E2EEF0E080818160808364 +:1016F000808188608083F80180818E7F80838881EB +:1017000080618883DF91CF911F910F910895E8ED5B +:10171000F0E080818F7E8083E7EDF0E08081816062 +:10172000808384E082BF81E08093E6010C94440BC7 +:10173000E8EDF0E080818E7F80831092E2000895D2 +:101740001092DA001092E10008951F920F920FB6E6 +:101750000F9211242F933F934F935F936F937F9337 +:101760008F939F93AF93BF93EF93FF938091E1008B +:1017700082FF0BC08091E20082FF07C08091E100F0 +:101780008B7F8093E1000E940C0E8091DA0080FF35 +:101790001FC08091D80080FF1BC08091DA008E7F2F +:1017A0008093DA008091D90080FF0DC080E189BD6F +:1017B00082E189BD09B400FEFDCF81E08093E7019D +:1017C0000E94100805C019BC1092E7010E941E0873 +:1017D0008091E10080FF19C08091E20080FF15C078 +:1017E0008091E2008E7F8093E2008091E200806130 +:1017F0008093E2008091D80080628093D80019BC69 +:1018000085E08093E7010E9422088091E10084FF37 +:1018100030C08091E20084FF2CC080E189BD82E16C +:1018200089BD09B400FEFDCF8091D8008F7D8093E3 +:10183000D8008091E1008F7E8093E1008091E200EA +:101840008F7E8093E2008091E20081608093E200CD +:101850008091E301882311F084E007C08091E300C8 +:1018600087FD02C081E001C083E08093E7010E9410 +:1018700023088091E10083FF29C08091E20083FF6B +:1018800025C08091E100877F8093E10082E0809312 +:10189000E7011092E3018091E1008E7F8093E100E7 +:1018A0008091E2008E7F8093E2008091E20080616F +:1018B0008093E20042E060E080E00E94A40A809110 +:1018C000F00088608093F0000E942108FF91EF9162 +:1018D000BF91AF919F918F917F916F915F914F9148 +:1018E0003F912F910F900FBE0F901F9018951F9250 +:1018F0000F920FB60F9211242F933F934F935F9344 +:101900006F937F938F939F93AF93BF93CF93DF9307 +:10191000EF93FF93C091E900CF708091EC00D82F36 +:10192000D17080FDD0E81092E9008091F000877FAF +:101930008093F00078940E94BB0C1092E900809193 +:10194000F00088608093F000CD2BCF70C093E90049 +:10195000FF91EF91DF91CF91BF91AF919F918F91C7 +:101960007F916F915F914F913F912F910F900FBE9B +:101970000F901F9018951F93CF93DF93CDB7DEB7CD +:10198000AA970FB6F894DEBF0FBECDBFE8EEF1E028 +:1019900088E08E0F9091F10091938E13FBCF0E94FF +:1019A00039088091E80083FF1FC18091E801909180 +:1019B000E901492F50E04A30510508F015C1FA01FC +:1019C000EA5AFF4F0C945D1F803881F0823809F08D +:1019D0000BC18091EC018F708093E9008091EB0046 +:1019E00085FB882780F91092E90006C08091E40108 +:1019F0009091E501911182609091E800977F90931A +:101A0000E8008093F1001092F100C8C0282F2D7FCC +:101A100009F0EAC0882319F0823061F0E5C08091B6 +:101A2000EA01813009F0E0C0933009F080E0809352 +:101A3000E5012BC08091EA01811127C08091EC0162 +:101A40008F7009F4D1C08093E9002091EB0020FF52 +:101A50001CC0933021F48091EB00806214C09091FF +:101A6000EB0090619093EB0021E030E0A90102C00F +:101A7000440F551F8A95E2F74093EA001092EA005E +:101A80008091EB0088608093EB001092E9008091D8 +:101A9000E800877F86C08111A7C01091EA011F77F7 +:101AA0008091E3008078812B8093E3008091E800AF +:101AB000877F8093E8000E94D90A8091E80080FF28 +:101AC000FCCF8091E30080688093E300111102C095 +:101AD00082E001C083E08093E70186C080588230B5 +:101AE00008F082C08091EA019091EB018C3D53E0B7 +:101AF000950779F583E08A838AE289834FB7F89462 +:101B0000DE01139620E03EE051E2E32FF0E0509337 +:101B10005700E49120FF03C0E295EF703F5FEF7044 +:101B20008E2F90E0EA3010F0C79601C0C0968D93DA +:101B30009D932F5F243149F74FBF8091E800877F45 +:101B40008093E8006AE270E0CE0101960E94E0090D +:101B500014C0AE014F5F5F4F6091EC010E942709F6 +:101B6000BC01009709F440C09091E800977F9093E2 +:101B7000E80089819A810E94430A8091E8008B776E +:101B80008093E80031C0803879F58091E800877F44 +:101B90008093E8008091E3018093F1008091E80058 +:101BA0008E778093E8000E94D90A1EC081111CC064 +:101BB0009091EA019230C0F48091E800877F809391 +:101BC000E8009093E3010E94D90A8091E30181111A +:101BD00006C08091E30087FD02C081E001C084E07F +:101BE0008093E7010E9425088091E80083FF0AC0E6 +:101BF0008091E800877F8093E8008091EB0080620D +:101C00008093EB00AA960FB6F894DEBF0FBECDBF4F +:101C1000DF91CF911F9108950895CF938091E701AF +:101C20008823A1F0C091E900CF709091EC00892F3A +:101C3000817090FD80E8C82B1092E9008091E80047 +:101C400083FD0E94BB0CCF70C093E900CF91089533 +:101C500090937301809372010895E0917201F09165 +:101C60007301309721F00190F081E02D099480E01C +:101C70000895E0917201F0917301309721F0028094 +:101C8000F381E02D09940895E0917201F0917301C0 +:101C9000309721F00480F581E02D0994089520917A +:101CA0007001309171018217930771F09093710167 +:101CB00080937001E0917201F0917301309721F0EF +:101CC0000680F781E02D0994089520916E013091EE +:101CD0006F018217930771F090936F0180936E01EB +:101CE000E0917201F0917301309721F00084F18549 +:101CF000E02D0994089508950C947B0E0E94C41958 +:101D00000E945E060C948E1A5F926F927F928F9261 +:101D10009F92AF92BF92CF92DF92EF92FF920F937A +:101D20001F93CF93DF9300D000D01F92CDB7DEB7C3 +:101D30000E94A3069FE7C92E91E0D92E04E010E08F +:101D4000AA24A394B12C502E802F0E9411074C017D +:101D5000F601729062906F01682679266114710411 +:101D6000A1F40150110978F78FEF89838A831B82D0 +:101D70000E94CD198160782F9D838C8349815A817F +:101D80006B818D810E94340F38C08091D40181FD18 +:101D90000E941A072DE030E07501022E02C0EE0C01 +:101DA000FF1C0A94E2F7C70186219721892B09F1CC +:101DB00029835A828E209F2091E0892809F490E09F +:101DC0009B830E94CD198160782F9D838C834981EC +:101DD0005A816B818D810E94340F000F111FF80111 +:101DE000EB58FE4F80819181E826F926F182E0824E +:101DF00004C02150310980F6B4CF0E94751D1091A6 +:101E000074010E942D0E1817D1F00E942D0E8093A0 +:101E100074010F900F900F900F900F90DF91CF9162 +:101E20001F910F91FF90EF90DF90CF90BF90AF90F8 +:101E30009F908F907F906F905F900C9448060F90CA +:101E40000F900F900F900F90DF91CF911F910F91F6 +:101E5000FF90EF90DF90CF90BF90AF909F908F90CA +:101E60007F906F905F900895CF93DF93CDB7DEB7EB +:101E70002B970FB6F894DEBF0FBECDBF4F835887A8 +:101E800069877A878B87DE01119686E0FD011192C2 +:101E90008A95E9F785E0FE01379601900D928A95C3 +:101EA000E1F749815A816B817C818D819E810E94FD +:101EB0007A152B960FB6F894DEBF0FBECDBFDF911B +:101EC000CF910895882309F4B9C0823859F40E944B +:101ED0002D0E81FDB3C089E30E9454180E94211980 +:101EE00089E30CC0833871F40E942D0E80FDA6C0DA +:101EF00083E50E9454180E94211983E50E949618D8 +:101F00000C942119843859F40E942D0E82FD96C03C +:101F100087E40E9454180E94211987E4EFCF9CEFB8 +:101F2000980F913A18F40E945418EACF90E2980F53 +:101F3000983050F4877091E001C0990F8A95EAF7C4 +:101F4000892F0E94DA18DCCF9BE5980F933070F44C +:101F5000853A29F0863A31F083E890E005C081E8BF +:101F600090E002C082E890E00C944F0E98E5980F44 +:101F7000933108F063C0883A39F1893A41F18A3ADD +:101F800049F18B3A51F18C3A59F18D3A61F1803B2C +:101F900069F18E3A71F18F3A79F1813B81F1823B9F +:101FA00089F1833B91F1843B99F1853BA1F1863B1B +:101FB000A9F1873BB1F1883BB9F1893BC1F18A3B7B +:101FC000C9F180E090E038C082EE90E035C089EE43 +:101FD00090E032C08AEE90E02FC085EB90E02CC0FC +:101FE00086EB90E029C087EB90E026C08CEC90E077 +:101FF00023C08DEC90E020C083E891E01DC08AE80A +:1020000091E01AC082E991E017C084E991E014C020 +:1020100081E292E011C083E292E00EC084E292E09D +:102020000BC085E292E008C086E292E005C087E23C +:1020300092E002C08AE292E00C94650E0895882333 +:1020400009F44BC0823859F40E942D0E81FF45C01F +:1020500089E30E9454180E94211989E30CC0833837 +:1020600071F40E942D0E80FF38C083E50E94541841 +:102070000E94211983E50E9496180C942119843836 +:1020800059F40E942D0E82FF28C087E40E94541844 +:102090000E94211987E4EFCF9CEF980F913A58F3F3 +:1020A00090E2980F983050F4877091E001C0990F3A +:1020B0008A95EAF7892F0E94E018DFCF9BE5980FF9 +:1020C000933020F480E090E00C944F0E885A8331D6 +:1020D00020F480E090E00C94650E0895882321F0B0 +:1020E0000E94DA180C9421190895882321F00E9487 +:1020F000E0180C94211908957F928F929F92AF92CD +:10210000BF92CF92DF92EF92FF920F931F93CF93E4 +:10211000DF931F92CDB7DEB77C01C62E772EFC0170 +:10212000058102950F70128111110E94F7180E940B +:102130004D18882379F0112369F080E28C0D8830E6 +:1021400048F082E00E9436180E944D1891E0D82E87 +:10215000D92601C0D12CE72DE295EF70F0E0E05ACE +:10216000FF4F0C945D1F872D807F072D0F708823F4 +:1021700011F00295007F112389F0002309F498C122 +:1021800080E28C0D883020F4802F0E94DA1803C082 +:10219000802F0E94EA180E9421198AC18C2D0E946A +:1021A0001F10002309F49DC180E28C0D883020F4BB +:1021B000802F0E94E01803C0802F0E94F0180E9418 +:1021C00021198FC1872D807F972D9F70803211F448 +:1021D000892F03C0892F8295807FCC2021F0F1E0E8 +:1021E000CF16A1F01DC0112339F0002319F10130E1 +:1021F00009F50E940A1975C1002319F0013009F48C +:1022000070C189830E940D19898110C1112321F0A9 +:10221000063008F066C10EC0053008F062C106C184 +:10222000112359F0002331F0F701958190FF40C14F +:102230009F7095830E946E1054C1002309F4F6C06C +:102240003DC1872D86958695837090E0009719F0A3 +:10225000019761F046C1112321F08C2D972D9370C9 +:1022600002C080E090E00E944F0E3BC1112321F09C +:102270008C2D972D937002C080E090E00E94650E37 +:1022800030C18C2D112319F00E947D1C02C00E94C8 +:10229000E51C0E946A1D25C1872D837009F052C07C +:1022A00011111FC18C2D829586958770880F880F1C +:1022B0009C2D9F70892E912CA12CB12C082E04C02E +:1022C000880C991CAA1CBB1C0A94D2F7C4FE14C02B +:1022D0000FE010E020E030E0B901A80104C0440F95 +:1022E000551F661F771F8A95D2F7CB01BA016095FB +:1022F00070958095909503C060E070E0CB01272D2C +:1023000026952695237030E02230310569F0233080 +:10231000310589F0682979298A299B2921303105DD +:1023200071F00E94C216DDC0682979298A299B298B +:102330000E94DE16D6C00E94C216C501B4010E94DA +:10234000A616CFC0112319F0872D817001C0869584 +:10235000882309F4C6C08C2D829586958770880FD6 +:10236000880F9C2D9F70892E912CA12CB12C082EAA +:1023700004C0880C991CAA1CBB1C0A94D2F7C4FE8A +:1023800014C00FE010E020E030E0B901A80104C063 +:10239000440F551F661F771F8A95D2F7CB01BA01EC +:1023A000609570958095909503C060E070E0CB01DA +:1023B000272D269526952370422F50E04230510557 +:1023C00069F04330510589F0682979298A299B29C8 +:1023D0004130510571F00E949C1783C0682979290A +:1023E0008A299B290E94B8177CC00E949C17C501AE +:1023F000B4010E94801775C08C2D90E0FC01E05E56 +:10240000F109E531F10508F04FC0E059FF4F0C9498 +:102410005D1F0C2D0F70872D8F71112321F00E94ED +:102420001917802F07CF0E943A17802F0E9475102E +:1024300058C0112341F0053008F053C0872D8F712B +:102440000E945F174EC0063008F04BC0F7CF112333 +:1024500039F0872D8F710E94191743C01123C9F3DA +:10246000872D8F710E943A173CC0112329F0872DC8 +:102470008F710E94041735C00E94FA1632C01123D2 +:1024800051F0172D1F71812F0E94191763E0812FC2 +:102490000E942D1826C081E00E943618023008F1F3 +:1024A00082E00E9436181DC0112331F0002389F20A +:1024B0008C2D0E94620F15C0002391F28C2D0E947A +:1024C0001F100FC0472D4F706C2DC7010E94800256 +:1024D0000E941E1606C0472D4F706C2DC7010E942A +:1024E0005803DD20F9F00E94291880FD1BC0F70178 +:1024F00012820E9423180E941917C7010E94A1127C +:102500000E9423180F90DF91CF911F910F91FF90A0 +:10251000EF90DF90CF90BF90AF909F908F907F9083 +:102520000C943A170F90DF91CF911F910F91FF906C +:10253000EF90DF90CF90BF90AF909F908F907F9063 +:1025400008950F931F93CF93DF93EC0188819981B6 +:102550002B813C81232BB9F09F3F11F48F3F99F0E1 +:10256000CE010E94AC02882371F0688179818A8152 +:102570000E941F188C010E94D4170E949B16B8015C +:10258000CE010E947C10DF91CF911F910F91089591 +:102590000E94F7180E9407190E94CC180E94211966 +:1025A0000E941B1E0E946A1D80E090E00E944F0E58 +:1025B00080E090E00C94650E0E94E7180C94C8121D +:1025C0000E941418292F22952F7030E02C303105ED +:1025D0004CF42A3031056CF4225031092230310597 +:1025E000A8F407C02C30310569F02F30310551F0C7 +:1025F0000DC0803F69F018F4803E40F409C0843F6C +:1026000029F406C093FB882780F9089580E0089597 +:1026100081E00895CF93DF9300D000D01F92CDB713 +:10262000DEB70F900F900F900F900F90DF91CF912A +:102630000895CF93DF9300D000D000D0CDB7DEB7A0 +:1026400026960FB6F894DEBF0FBECDBFDF91CF91B7 +:1026500008951F93CF93DF93C0917F0116E080917F +:102660008001C81799F0D0E01C9FF0011D9FF00D6C +:102670001124EF57FE4F4081518162817381848123 +:1026800095810E9419132196C770E9CFDF91CF91F0 +:102690001F9108954091B1015091B2016091B30131 +:1026A0007091B4018091B5019091B6010C94191309 +:1026B0008091B60182958F7009F054C08091B3016A +:1026C000882309F44FC080917F01A091800160911F +:1026D000B1017091B2014091B4015091B501B6E0E1 +:1026E0008A1709F43FC090E041155105C1F17F3FC1 +:1026F00011F46F3FA1F1B89FF001B99FF00D1124C3 +:10270000EF57FE4F218172132AC02081621327C028 +:102710002281211124C0238134812417350710F42C +:1027200021503109241B350B283C3105C0F4209180 +:10273000B6012F7020612093B60126E0289FF0019A +:10274000299FF00D1124EA57FE4F80818F70806120 +:10275000808381EB91E00E94A1120C9429130196D1 +:102760008770BECF0895CF92DF92EF92FF920F93C2 +:102770001F93CF93DF93CDB7DEB762970FB6F89470 +:10278000DEBF0FBECDBF8C0185E0F801DE011D96D6 +:1027900001900D928A95E1F7D8014C9111965C91C8 +:1027A000119712966C9112971396CD90DC90149716 +:1027B0003091B1017091B2018091B4019091B50155 +:1027C000009709F46BC17F3F19F43F3F09F466C1DC +:1027D000E090B301EE2009F4C0C02091B601C81604 +:1027E000D90628F0F601E81BF90BCF0104C080954B +:1027F00090958C0D9D1DFF24F394883C910578F0F5 +:10280000F12C207F09F0C6C07C2DD98AC88A89891D +:102810000E940A1381EB91E00E94A112B1C0822FA5 +:10282000807F09F046C0751314C0341312C06111C3 +:1028300010C02F7020612093B6010E944A1381EBD3 +:1028400091E00E94A1128091B601D80115968C9357 +:102850002EC0CD2819F15F3F11F44F3FF9F0F62E4D +:1028600061111CC080917F012091800136E08217A8 +:1028700009F45AC090E0389FF001399FF00D1124FF +:10288000EF57FE4F7181571306C07081471303C085 +:102890007281711103C001968770E9CFF62E66230D +:1028A00009F418C18091B60181608093B601F12CC2 +:1028B00011C1751308C0341306C0611104C08091A2 +:1028C000B601D801C3C04D875E878D859E856A8B12 +:1028D0000E94E0126A898823E1F16623D1F12091F8 +:1028E000B601822F82958F7090E0029774F08091EC +:1028F000B1019091B20198878F831986DB86CA86D1 +:102900002C87CE0107960E94A11286E0F801A1EB68 +:10291000B1E001900D928A95E1F70E9458130E9450 +:102920004A13FF24F394D6C04D875E878D859E851C +:102930000E941418292F22952F7030E02230310583 +:102940000CF0BCC09F7009F0B6C0805E883008F4FF +:10295000C1C0C8010E94A112E4CFC816D90608F46C +:1029600053C0F601E81BF90BCF01883C910508F430 +:1029700050C0F12C7C2DD98AC88A89890E940A13FB +:10298000E1EBF1E086E0DF011D928A95E9F70E9414 +:102990004A13A0C0751314C0341312C0611110C0C3 +:1029A0008091B601F8018583C8010E94A11286E0DA +:1029B000E1EBF1E0DF011D928A95E9F7FE2C8AC078 +:1029C0004D875E878D859E856A8B0E94E0126A899D +:1029D000882309F4BECF662309F4BBCF2091B6014A +:1029E000822F82958F7090E002970CF48ECF8091A9 +:1029F000B1019091B2019A8389831B82DD82CC82DE +:102A00002E83CE0101967FCF809590958C0D9D1DD4 +:102A1000ACCFF62E662309F49CCF75132EC0341369 +:102A20002CC02091B60120FD1FC0822F82958F708F +:102A3000D9F0D80115962C9315978F3049F08F5FF8 +:102A4000982F9295907F822F8F70892B15968C935B +:102A5000C8010E94A11286E0F801A1EBB1E001904B +:102A60000D928A95E1F793CF86E0F801A1EBB1E0F2 +:102A700001900D928A95E1F72DC04D875E878D8577 +:102A80009E850E94E012811140CF8091B601816045 +:102A90008093B601C8010E94A1121CC0662309F4EC +:102AA00058CF4D875E878D859E850E94E0128823D2 +:102AB00009F44FCF2ACF811148CF0CC02430310503 +:102AC0000CF047CF9F7009F440CFF8019581907FBB +:102AD00009F03BCF8F2D62960FB6F894DEBF0FBE84 +:102AE000CDBFDF91CF911F910F91FF90EF90DF90BD +:102AF000CF9008951F93CF93DF93CDB7DEB72C9778 +:102B00000FB6F894DEBF0FBECDBF4F8358876987DD +:102B10007A878B879C87CE0107960E94B313882300 +:102B200069F08F8198852A853B85232BF1F19F3FA2 +:102B300009F063C08F3F09F060C037C086E0FE0136 +:102B40003796DE01119601900D928A95E1F76F811B +:102B50007885EA85FB85309741F17F3F11F46F3F1F +:102B600021F12091800130E0C901019687709927F9 +:102B700040917F0150E08417950709F447C06983AD +:102B80007A83FD83EC8396E0929FD001939FB00DF2 +:102B90001124AF57BE4FFE01319601900D929A95C8 +:102BA000E1F7809380010E94291316E080917F0154 +:102BB000909180018917C1F1189FC00111248F578E +:102BC0009E4F0E94B313882379F1E0917F011E9FED +:102BD000F0011124EF57FE4F4081518162817381D2 +:102BE000848195810E94191380917F0190E0019664 +:102BF0008770992780937F01D9CF4F815885698548 +:102C00007A858B859C850E941913CFCF0E94DC1298 +:102C10001092800110927F01E1EBF1E086E0DF018C +:102C20001D928A95E9F7C1CF2C960FB6F894DEBFB6 +:102C30000FBECDBFDF91CF911F910895EF92FF920C +:102C40000F931F93CF93DF938C01009709F46CC00F +:102C5000F12CEE24E394E8012196F8018491843765 +:102C600040F4843008F051C0813081F0823019F195 +:102C70005BC0853709F444C0A8F19CE7980F9037F2 +:102C800008F052C08F770E941F1041C00E5F1F4F87 +:102C9000FE01C49180E28C0F883048F4C7708E2DFD +:102CA00001C0880FCA95EAF70E94FA1814C08C2F49 +:102CB0000E94620F2DC00E5F1F4FFE01C49180E283 +:102CC0008C0F883058F4C7708E2D01C0880FCA95BC +:102CD000EAF70E9400190E9421191AC08C2F0E9445 +:102CE0001F1016C00E5F1F4FFE01C491CC2381F050 +:102CF0008FE99FE00197F1F700C00000C150F6CFC7 +:102D00000E5F1F4FFE01F49003C00E94620F8E0100 +:102D10008F2D882309F49FCFEFE9FFE03197F1F77A +:102D200000C000008150F5CFDF91CF911F910F912E +:102D3000FF90EF90089508956093BB017093BC01DC +:102D40008093BD019093BE010C94C8120F931F9302 +:102D50000091BB011091BC012091BD013091BE01D9 +:102D6000DC01CB01802B912BA22BB32B8093BB01D9 +:102D70009093BC01A093BD01B093BE011F910F9130 +:102D80000C94C8120F931F930091BB011091BC01CA +:102D90002091BD013091BE01DC01CB018023912344 +:102DA000A223B3238093BB019093BC01A093BD01E8 +:102DB000B093BE011F910F910C94C8120F931F93F3 +:102DC0000091BB011091BC012091BD013091BE0169 +:102DD000DC01CB0180279127A227B3278093BB0179 +:102DE0009093BC01A093BD01B093BE011F910F91C0 +:102DF0000C94C8121092B7011092B8011092B90148 +:102E00001092BA010C94C81241E050E060E070E00A +:102E100004C0440F551F661F771F8A95D2F7409351 +:102E2000B7015093B8016093B9017093BA010C9443 +:102E3000C81241E050E060E070E004C0440F551F4C +:102E4000661F771F8A95D2F78091B7019091B801DC +:102E5000A091B901B091BA01482B592B6A2B7B2B59 +:102E60004093B7015093B8016093B9017093BA01D0 +:102E70000C94C81241E050E060E070E004C0440FE0 +:102E8000551F661F771F8A95D2F74095509560951C +:102E900070958091B7019091B801A091B901B0915E +:102EA000BA01482359236A237B234093B7015093E7 +:102EB000B8016093B9017093BA010C94C81241E053 +:102EC00050E060E070E004C0440F551F661F771F9C +:102ED0008A95D2F78091B7019091B801A091B9017C +:102EE000B091BA01482759276A277B274093B70139 +:102EF0005093B8016093B9017093BA010C94C81251 +:102F00000F931F930091B7011091B8012091B9015F +:102F10003091BA01DC01CB01802B912BA22BB32B7A +:102F20008093B7019093B801A093B901B093BA010F +:102F30001F910F910C94C8120F931F930091B7012A +:102F40001091B8012091B9013091BA01DC01CB0197 +:102F500080239123A223B3238093B7019093B801D8 +:102F6000A093B901B093BA011F910F910C94C812AC +:102F70000F931F930091B7011091B8012091B901EF +:102F80003091BA01DC01CB0180279127A227B3271A +:102F90008093B7019093B801A093B901B093BA019F +:102FA0001F910F910C94C8120895CF92DF92EF9267 +:102FB000FF920F931F93CF93DF938C01C090BB01BF +:102FC000D090BC01E090BD01F090BE018091B701AE +:102FD0009091B801A091B901B091BA01C82AD92A3B +:102FE000EA2AFB2ACFE1D0E0D701C6010C2E04C0AB +:102FF000B695A795979587950A94D2F780FF06C056 +:10300000B8018C2F0E94AE05019721F4219760F73B +:1030100080E001C08C2FDF91CF911F910F91FF9025 +:10302000EF90DF90CF900895CF93DF93EC010E9453 +:10303000D517BE010E94AE05DF91CF910895CB0157 +:103040000E94141808958091BF01859585958595F6 +:1030500008958091BF018770089598E0899F90013D +:103060001124262B2093BF010C9419172091BF0126 +:10307000809582238093BF01982F977069F430E088 +:10308000482F552747FD50952417350729F085957A +:10309000859585950C943A1708959091BF01977086 +:1030A00081E009F480E0089590910B01992321F0CB +:1030B00090910C01911109C020910D0130910E01E8 +:1030C000F90132969FEF40E01FC0982F9695969594 +:1030D00096959F3050F5E0910D01F0910E01E90FAA +:1030E000F11D877021E030E0A90102C0440F551F97 +:1030F0008A95E2F7CA019181892B818308959F3FC8 +:1031000039F04F5F4E3041F051915813F8CF0DC058 +:103110005111F7CF942FF5CF9F3F39F0F901E90F07 +:10312000F11D97FDFA9582830895089590910B0102 +:10313000992321F090910C01911109C020910D016A +:1031400030910E01F9013296205F3F4F1FC0982F3A +:103150009695969596959F30F0F4E0910D01F0913B +:103160000E01E90FF11D877021E030E0A90102C0D6 +:10317000440F551F8A95E2F7CA01809591818923F2 +:10318000818308953196E217F30729F0908198130F +:10319000F9CF1082F7CF089581E090E0E0910D0122 +:1031A000F0910E01E80FF91F108201968031910510 +:1031B000A9F708959091D301892B8093D3010895A5 +:1031C00080959091D30189238093D3010895109223 +:1031D000D30108959091D201892B8093D201089553 +:1031E00080959091D20189238093D2010895109205 +:1031F000D20108959091D101892B8093D101089536 +:1032000080959091D10189238093D10108951092E6 +:10321000D10108958093C00108951092C0010895CE +:1032200080910D0190910E01FC0131969C01205F6F +:103230003F4F80E0919191118F5FE217F307D1F733 +:103240000895E0910D01F0910E018091D3018083EA +:10325000E0910D01F0910E0190818091D201892BB6 +:103260008083E0910D01F0910E0190818091D10158 +:10327000892B80838091C001882361F0E0910D014A +:10328000F0910E019081892B80830E941019811189 +:103290001092C00180910D0190910E010C94390E95 +:1032A00020E0009739F0AC01415051098423952367 +:1032B0002F5FF7CF822F08958091E701843021F1AD +:1032C0001092D50120E488E190E00FB6F894A8951B +:1032D000809360000FBE2093600080E00E9448064B +:1032E00083B7817F846083BF83B7816083BF789415 +:1032F000889583B78E7F83BF88E10FB6F89480935B +:103300006000109260000FBE0895089508950E9415 +:1033100085190E94A3060E9486190E941B0791E04E +:10332000811101C090E0892F08950E94DC120E9453 +:103330002D0E0C9448061F920F920FB60F92112477 +:103340008F939F93AF93BF938091D501811113C049 +:103350008091D6019091D701A091D801B091D90167 +:103360004196A11DB11D8093D6019093D701A093E2 +:10337000D801B093D901BF91AF919F918F910F90D8 +:103380000FBE0F901F90189582E084BD93E095BD0D +:103390009AEF97BD80936E0008952FB7F8948091AF +:1033A000D6019091D701A091D801B091D9012FBF3A +:1033B0000895CF92DF92EF92FF920F931F932FB752 +:1033C000F8944091D6015091D7016091D801709145 +:1033D000D9012FBF6A017B01EE24FF248C0120E07C +:1033E00030E0C016D106E206F30610F44150510950 +:1033F0009A01281B390BC9011F910F91FF90EF9083 +:10340000DF90CF9008951F920F920FB60F92112464 +:103410008F939F93AF93BF938091D6019091D701E3 +:10342000A091D801B091D9010196A11DB11D809341 +:10343000D6019093D701A093D801B093D901BF9141 +:10344000AF919F918F910F900FBE0F901F90189585 +:103450000E942A0BF8942FEF87EA91E621508040D2 +:103460009040E1F700C0000087E090EBDC01809322 +:10347000F1019093F201A093F301B093F4019CE069 +:1034800088E10FB6F894A895809360000FBE9093E2 +:103490006000FFCFCF92DF92EF92FF920F931F93C6 +:1034A000CF93DF93D82FC4E0EE24E394F12C8C2F3C +:1034B0000E9411076C010DE010E09701002E02C080 +:1034C000220F331F0A94E2F72C213D21232B49F0D0 +:1034D000602F7C2F80E00E945903D81302C081E046 +:1034E00006C00150110948F7C15008F780E0DF918C +:1034F000CF911F910F91FF90EF90DF90CF900895A3 +:10350000CF93C82F8CE20E944A1A882321F08C2F77 +:10351000CF910C944A1A80E0CF910895CF930E94E6 +:10352000D51B811102C00E94BB1BC5E6C15049F0EA +:103530000E94A3068FE39CE90197F1F700C0000009 +:10354000F5CF89E20E94801A811113C18AE20E949C +:10355000801A81110E94BB1B85E00E94801A811194 +:103560000E94281A0E94E01B8093D40187E00E94E9 +:10357000801A8823A9F18BE10E94801A882351F0D8 +:103580008091D40181FB222720F991E0922790FBC2 +:1035900081F90EC08EE00E94801A882361F080912C +:1035A000D40182FB222720F991E0922790FB82F937 +:1035B0008093D40115C080E10E94801A9091D401BB +:1035C000882341F093FB222720F981E0822780FBAA +:1035D00093F904C0892F809580FB90F99093D401D2 +:1035E0008091D4010E94E41B0E94F21B8093F001A1 +:1035F00080EE0E94801A882341F08091F001982F7C +:10360000909590FB80F98093F00189E30E94801AE5 +:10361000882359F08091F00181FB222720F991E065 +:10362000922790FB81F98093F00182EE0E94801A2C +:10363000882359F08091F00182FB222720F991E044 +:10364000922790FB82F98093F00186EE0E94801A07 +:10365000882359F08091F00183FB222720F991E023 +:10366000922790FB83F98093F00183EE0E94801AE9 +:10367000882359F08091F00184FB222720F991E002 +:10368000922790FB84F98093F00185E30E94801AD1 +:10369000882359F08091F00185FB222720F991E0E1 +:1036A000922790FB85F98093F00181E30E94801AB4 +:1036B000882359F08091F00186FB222720F991E0C0 +:1036C000922790FB86F98093F00181E10E94801A95 +:1036D000882359F08091F00187FB222720F991E09F +:1036E000922790FB87F98093F0018091F0010E946E +:1036F000F61B8091F00187FB882780F980930C01ED +:1037000087E20E94801AC82F8EE10E94801A8111E0 +:10371000C2608FE10E94801A8111C46080E20E9421 +:10372000801A8111C86081E20E94801A8111C061F3 +:1037300082E20E94801A8111C06283E20E94801A94 +:103740008111C06484E20E94801A882311F0C0684D +:1037500002C0CC2329F08C2F0E94ED1B6C2F03C0DC +:103760000E94E91B682F70E080E090E0CF910C94FC +:103770009C16CF9108956DEE7EEF80E090E00E9460 +:10378000971F60E082E090E00E94851F60E083E088 +:1037900090E00E94851F60E084E090E00E94851F19 +:1037A00060E085E090E00C94851F80E090E00E944E +:1037B0007F1F21E08D3E9E4F09F020E0822F08956B +:1037C00082E090E00C94771F682F82E090E00C94E8 +:1037D000851F83E090E00C94771F682F83E090E0D2 +:1037E0000C94851F84E090E00C94771F682F84E090 +:1037F00090E00C94851F8091DC0180FF0BC06091EC +:10380000120185E0689FB001112475956795759543 +:1038100067952BC081FF09C06091120185E0689F08 +:10382000B00111247595679520C082FF07C0609193 +:10383000120185E0689FB001112417C09091DD014D +:103840009923D1F060911101961788F72091120108 +:1038500085E0289F90011124929FA001939F500D15 +:10386000112470E0CA010E94491F6038710540F4BC +:103870006115710539F002C065E070E0862F08958A +:103880008FE7089581E008958091DC0180FF08C0F2 +:103890006091100170E0759567957595679521C0E9 +:1038A00081FF06C06091100170E07595679519C0A1 +:1038B00082FF04C06091100170E010C09091DD01A2 +:1038C0009923C1F060910F019617A0F78091100124 +:1038D000899FC001112470E00E94491F6038710562 +:1038E00028F46115710521F0862F08958FE708955A +:1038F00081E0089561E070E0F4CF803F21F40E9400 +:10390000FB1B819504C0813F29F40E94FB1B80931F +:10391000E0010895823F21F40E94FB1B819504C0C1 +:10392000833F29F40E94FB1B8093DF010895893FA8 +:1039300019F40E94441C05C08A3F31F40E94441CC3 +:1039400081958093E10108958B3F21F40E94441CEE +:10395000819504C08C3F29F40E94441C8093E201AD +:103960000895843F21F48091DE01816017C0853F76 +:1039700021F48091DE01826011C0863F21F48091A4 +:10398000DE0184600BC0873F21F48091DE018860F6 +:1039900005C0883F31F48091DE0180618093DE01B3 +:1039A00008958D3F21F48091DC0181600BC08E3F32 +:1039B00021F48091DC01826005C08F3F29F4809161 +:1039C000DC0184608093DC010895803F39F48091AC +:1039D000E00187FF6CC01092E00169C0813F29F4CB +:1039E0008091E0011816BCF362C09091DF01823F24 +:1039F00029F497FF5CC01092DF0159C0833F19F48E +:103A00001916CCF354C0893F41F48091E101181696 +:103A10000CF04DC01092E1014AC08A3F29F4809118 +:103A2000E10187FF44C0F6CF8B3F39F48091E2017A +:103A300087FF3DC01092E2013AC08C3F29F480918B +:103A4000E2011816BCF333C0843F21F48091DE01FB +:103A50008E7F17C0853F21F48091DE018D7F11C0DC +:103A6000863F21F48091DE018B7F0BC0873F21F4DC +:103A70008091DE01877F05C0883F31F48091DE01AF +:103A80008F7E8093DE0113C08D3F21F48091DC0195 +:103A90008E7F0BC08E3F21F48091DC018D7F05C0AD +:103AA0008F3F29F48091DC018B7F8093DC01809132 +:103AB000DF0181110EC08091E00181110AC0809167 +:103AC000E101811106C08091E201811102C01092D2 +:103AD000DD0108958EED91E00E94440E0E94CD1903 +:103AE0009093DB018093DA0108951F93CF93DF93C6 +:103AF0008091DA019091DB010E94D919AC0190917B +:103B0000DD01992321F02091130130E006C02091BE +:103B100014018AE0289F900111244217530708F4EA +:103B200086C08091DF01C091E001D091E101109148 +:103B3000E201811107C0C11176C0D11174C0111109 +:103B400072C075C09F3F19F09F5F9093DD011816FA +:103B500024F40E94FB1B8093DF018091DF0187FF2B +:103B600005C00E94FB1B81958093DF011C1624F485 +:103B70000E94FB1B8093E0018091E00187FF05C05C +:103B80000E94FB1B81958093E0016091DF01662319 +:103B900039F1C091E001CC2319F1772767FD7095C9 +:103BA000872F972F0E945A1E23E333E343E35FE3FB +:103BB0000E94BE1E0E94271E6093DF016C2F772794 +:103BC00067FD7095872F972F0E945A1E23E333E3DA +:103BD00043E35FE30E94BE1E0E94271E6093E00144 +:103BE0001D1624F40E94441C8093E1018091E101A0 +:103BF00087FF05C00E94441C81958093E101111646 +:103C000024F40E94441C8093E2018091E20187FF2A +:103C100005C00E94441C81958093E201DF91CF9101 +:103C20001F910C946A1D9F3F09F08ECF96CFDF91B4 +:103C3000CF911F910895EEEDF1E085E0DF011D9237 +:103C40008A95E9F71092DD011092DC01089504D005 +:103C50006894B1118DC0089570D088F09F5790F08E +:103C6000B92F9927B751A0F0D1F0660F771F881FA1 +:103C7000991F1AF0BA95C9F712C0B13081F077D008 +:103C8000B1E0089574C0672F782F8827B85F39F0A6 +:103C9000B93FCCF3869577956795B395D9F73EF400 +:103CA00090958095709561957F4F8F4F9F4F0895A8 +:103CB000E89409C097FB3EF49095809570956195C6 +:103CC0007F4F8F4F9F4F9923A9F0F92F96E9BB277C +:103CD0009395F695879577956795B795F111F8CFF8 +:103CE000FAF4BB0F11F460FF1BC06F5F7F4F8F4F63 +:103CF0009F4F16C0882311F096E911C0772321F059 +:103D00009EE8872F762F05C0662371F096E8862FF0 +:103D100070E060E02AF09A95660F771F881FDAF747 +:103D2000880F9695879597F9089557FD9058440FF9 +:103D3000551F59F05F3F71F04795880F97FB991F0A +:103D400061F09F3F79F087950895121613061406C7 +:103D5000551FF2CF4695F1DF08C016161706180654 +:103D6000991FF1CF86957105610508940895E8942F +:103D7000BB2766277727CB0197F908950BD078C02A +:103D800069D028F06ED018F0952309F05AC05FC0B2 +:103D90001124EECFCADFA0F3959FD1F3950F50E029 +:103DA000551F629FF001729FBB27F00DB11D639FED +:103DB000AA27F00DB11DAA1F649F6627B00DA11D93 +:103DC000661F829F2227B00DA11D621F739FB00D39 +:103DD000A11D621F839FA00D611D221F749F3327A9 +:103DE000A00D611D231F849F600D211D822F762F42 +:103DF0006A2F11249F5750408AF0E1F088234AF03F +:103E0000EE0FFF1FBB1F661F771F881F915050408A +:103E1000A9F79E3F510570F014C0AACF5F3FECF3A5 +:103E2000983EDCF3869577956795B795F795E79576 +:103E30009F5FC1F7FE2B880F911D9695879597F987 +:103E4000089597F99F6780E870E060E008959FEF1C +:103E500080EC089500240A94161617061806090621 +:103E6000089500240A9412161306140605060895F0 +:103E7000092E0394000C11F4882352F0BB0F40F478 +:103E8000BF2B11F460FF04C06F5F7F4F8F4F9F4FB8 +:103E9000089597FB072E16F4009407D077FD09D0FC +:103EA0000E94631F07FC05D03EF4909581959F4FBB +:103EB0000895709561957F4F0895EE0FFF1F05904F +:103EC000F491E02D0994AA1BBB1B51E107C0AA1F66 +:103ED000BB1FA617B70710F0A61BB70B881F991FAB +:103EE0005A95A9F780959095BC01CD010895F9994F +:103EF000FECF92BD81BDF89A992780B50895A8E1BB +:103F0000B0E042E050E00C949F1F262FF999FECFBD +:103F100092BD81BDF89A019700B4021639F01FBA1C +:103F200020BD0FB6F894FA9AF99A0FBE089501963B +:103F3000272F0E94861F0C94851FDC01CB01FC01FA +:103F4000F999FECF06C0F2BDE1BDF89A319600B4F2 +:0E3F50000D9241505040B8F70895F894FFCFFD +:103F5E00FF3107BF079C07680734070101C101281D +:103F6E0008140A321E0F1F6C76666349137353438F +:103F7E0079693309192939593F4D36391104C4036A +:0C3F8E008E035503E80201031A033303FD +:00000001FF diff --git a/keyboards/gh60/keymaps/default/keymap.c b/keyboards/gh60/keymaps/default/keymap.c new file mode 100644 index 0000000000..3622be41b8 --- /dev/null +++ b/keyboards/gh60/keymaps/default/keymap.c @@ -0,0 +1,69 @@ +#include "gh60.h" +#include "action_layer.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* 0: qwerty */ + KEYMAP( + ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, GRV, \ + TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \ + CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NO, ENT, \ + LSFT,FN1, Z, X, C, V, B, N, M, COMM,DOT, SLSH,FN0, RSFT, \ + LCTL,LGUI,LALT, SPC, BSLS,RALT,RGUI,APP, RCTL), + /* 1: fn */ + KEYMAP( + ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, \ + TRNS,TRNS,UP, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ + TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ + TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS), + /* 2: arrows */ + KEYMAP( + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,UP, \ + TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,LEFT,DOWN,RGHT), +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay + [1] = ACTION_LAYER_TOGGLE(2), // toggle arrow overlay +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + +void matrix_scan_user(void) { + +//Layer LED indicators + uint32_t layer = layer_state; + + if (layer & (1<<1)) { + gh60_wasd_leds_on(); + gh60_fn_led_on(); + } else { + gh60_wasd_leds_off(); + gh60_fn_led_off(); + } + + if (layer & (1<<2)) { + gh60_poker_leds_on(); + gh60_esc_led_on(); + } else { + gh60_poker_leds_off(); + gh60_esc_led_off(); + } + +}; diff --git a/keyboards/gh60/pinout.txt b/keyboards/gh60/pinout.txt new file mode 100644 index 0000000000..3787f938e7 --- /dev/null +++ b/keyboards/gh60/pinout.txt @@ -0,0 +1,18 @@ + /* Column pin configuration + * col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 + * pin: F0 F1 E6 C7 C6 B6 D4 B1 B7 B5 B4 D7 D6 B3 (Rev.C) + */ + + /* Row pin configuration + * row: 0 1 2 3 4 + * pin: D0 D1 D2 D3 D5 + */ + + GPIO pads + 0 F7 WASD LEDs + 1 F6 ESC LED + 2 F5 FN LED + 3 F4 POKER Arrow LEDs + + B2 Capslock LED + B0 not connected \ No newline at end of file -- cgit v1.2.3