diff options
author | Jack Humbert <jack.humb@gmail.com> | 2016-06-21 22:39:54 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-06-21 22:39:54 -0400 |
commit | 649b33d7783cf3021928534b7ae127e0a89e8807 (patch) | |
tree | c2b5e0cf8ff4aa2918e3b88ab75dbdb071cc0a1d /keyboards/preonic | |
parent | 464c8e274f993d3571fe5ea5e836fe55a3912ffe (diff) |
Renames keyboard folder to keyboards, adds couple of tmk's fixes (#432)
* fixes from tmk's repo
* rename keyboard to keyboards
Diffstat (limited to 'keyboards/preonic')
-rw-r--r-- | keyboards/preonic/Makefile | 73 | ||||
-rw-r--r-- | keyboards/preonic/README.md | 25 | ||||
-rw-r--r-- | keyboards/preonic/config.h | 89 | ||||
-rw-r--r-- | keyboards/preonic/keymaps/default/Makefile | 25 | ||||
-rw-r--r-- | keyboards/preonic/keymaps/default/README.md | 1 | ||||
-rw-r--r-- | keyboards/preonic/keymaps/default/compiled.hex | 1609 | ||||
-rw-r--r-- | keyboards/preonic/keymaps/default/keymap.c | 278 | ||||
-rw-r--r-- | keyboards/preonic/preonic.c | 97 | ||||
-rw-r--r-- | keyboards/preonic/preonic.h | 41 |
9 files changed, 2238 insertions, 0 deletions
diff --git a/keyboards/preonic/Makefile b/keyboards/preonic/Makefile new file mode 100644 index 0000000000..08e9205cbf --- /dev/null +++ b/keyboards/preonic/Makefile @@ -0,0 +1,73 @@ + + +# 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 +# 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 # Virtual DIP switch configuration(+1000) +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 ?= no # 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 ?= 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. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../Makefile +endif
\ No newline at end of file diff --git a/keyboards/preonic/README.md b/keyboards/preonic/README.md new file mode 100644 index 0000000000..f99856fdd8 --- /dev/null +++ b/keyboards/preonic/README.md @@ -0,0 +1,25 @@ +Preonic keyboard firmware +====================== +DIY/Assembled compact ortholinear 50% keyboard by [Ortholinear Keyboards](http://ortholinearkeyboards.com). + +## 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/preonic folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button. + +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 a file in the keymaps folder named `<name>.c` 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|<name>] +``` +Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder. diff --git a/keyboards/preonic/config.h b/keyboards/preonic/config.h new file mode 100644 index 0000000000..e8d0e82fc9 --- /dev/null +++ b/keyboards/preonic/config.h @@ -0,0 +1,89 @@ +/* +Copyright 2012 Jun Wako <wakojun@gmail.com> + +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 <http://www.gnu.org/licenses/>. +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6061 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Ortholinear Keyboards +#define PRODUCT The Preonic Keyboard +#define DESCRIPTION A compact ortholinear keyboard + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 12 + +/* Planck PCB default pin-out */ +#define MATRIX_ROW_PINS { D2, D5, B5, B6, D3 } +#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* 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 + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* ws2812 RGB LED */ +#define ws2812_PORTREG PORTD +#define ws2812_DDRREG DDRD +#define ws2812_pin PD1 +#define RGBLED_NUM 28 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +/* + * 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/preonic/keymaps/default/Makefile b/keyboards/preonic/keymaps/default/Makefile new file mode 100644 index 0000000000..581e08cd02 --- /dev/null +++ b/keyboards/preonic/keymaps/default/Makefile @@ -0,0 +1,25 @@ + + +# 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 # Virtual DIP switch configuration(+1000) +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 = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = yes # 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. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif
\ No newline at end of file diff --git a/keyboards/preonic/keymaps/default/README.md b/keyboards/preonic/keymaps/default/README.md new file mode 100644 index 0000000000..e911968dd9 --- /dev/null +++ b/keyboards/preonic/keymaps/default/README.md @@ -0,0 +1 @@ +# The default Preonic layout - largely based on the Planck's
\ No newline at end of file diff --git a/keyboards/preonic/keymaps/default/compiled.hex b/keyboards/preonic/keymaps/default/compiled.hex new file mode 100644 index 0000000000..a988ab756c --- /dev/null +++ b/keyboards/preonic/keymaps/default/compiled.hex @@ -0,0 +1,1609 @@ +:100000000C94AF050C94F3050C94F3050C94F305D4
+:100010000C94F3050C94F3050C94F3050C94F30580
+:100020000C94F3050C94F3050C94EA180C94BC1989
+:100030000C941D270C94F3050C94F3050C94F30514
+:100040000C94F3050C94F3050C94F3050C94F30550
+:100050000C94F3050C9485270C94F3050C94F3058C
+:100060000C94F3050C94F3050C94F3050C94F30530
+:100070000C94F3050C94F3050C94F3050C94F30520
+:100080000C94D00E0C94F3050C94F3050C94F3052A
+:100090000C94F3050C94F3050C94F3050C94F30500
+:1000A0000C94F3050C94F3050C94F305291A4B1AE0
+:1000B000391B4B1A391B901AB31A391B081B1B1B0F
+:1000C000051E051E341E341E731E931EE91FE91FF4
+:1000D0009E1EE91F4E1F4E1FB51FBE1FE91FE31FC7
+:1000E0005B1F5B1F5B1F5B1F5B1F5B1F5B1F5B1F40
+:1000F0005B1F5B1F5B1F5B1F5B1F5B1F5B1F5B1F30
+:100100006B1F791F801F871F911F07634236B79BA4
+:10011000D8A71A39685618AEBAAB558C1D3CB7CC67
+:100120005763BD6DEDFD753EF6177231BF000000DF
+:10013000803F08000000BE922449123EABAAAA2AC2
+:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD
+:1001500000000000BF000000803F00000000000819
+:100160004178D3BB4387D1133D190E3CC3BD4282B6
+:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74
+:10018000FFBE01C4FF7F3F000000000035001E00DD
+:100190001F0020002100220023002400250026004B
+:1001A00027002A002B0014001A0008001500170071
+:1001B0001C0018000C00120013004C002900040061
+:1001C0001600070009000A000B000D000E000F00CA
+:1001D00033003400E1001D001B000600190005007B
+:1001E0001100100036003700380028000530E0000C
+:1001F000E200E30003302C002C00043050005100DA
+:1002000052004F0035001E001F0020002100220078
+:10021000230024002500260027002A002B001400BC
+:100220001A00090013000A000D000F0018001C003E
+:1002300033004C00290004001500160017000700C9
+:100240000B00110008000C0012003400E1001D003A
+:100250001B000600190005000E00100036003700D4
+:10026000380028000530E000E200E30003302C00F5
+:100270002C0004305000510052004F0035001E0089
+:100280001F0020002100220023002400250026005A
+:1002900027002A002B0034003600370013001C0012
+:1002A00009000A00060015000F004C002900040098
+:1002B0001200080018000C0007000B0017001100C6
+:1002C00016003800E100330014000D000E001B0082
+:1002D000050010001A0019001D0028000530E0007C
+:1002E000E200E30003302C002C00043050005100E9
+:1002F00052004F0035021E021F022002210222027C
+:10030000230224022502260227022A0035021E02A9
+:100310001F022002210222022302240225022602B9
+:1003200027024C004C003A003B003C003D003E00E0
+:100330003F002D022E022F02300231020100400048
+:1003400041004200430044004500320264020100C3
+:100350000100010001000100010001000100010095
+:1003600001000100AB00AA00A900AE0035001E008C
+:100370001F00200021002200230024002500260069
+:1003800027002A0035001E001F0020002100220047
+:10039000230024002500260027004C004C003A00D2
+:1003A0003B003C003D003E003F002D002E002F0092
+:1003B0003000310001004000410042004300440091
+:1003C000450032006400010001000100010001004D
+:1003D000010001000100010001000100AB00AA00C2
+:1003E000A900AE00000000000000000000000000B6
+:1003F00000000000000000000000000000000000FD
+:1004000000000000000000000000000000000000EC
+:1004100000000000000000000000000000000000DC
+:1004200000000000000000000000000000000000CC
+:1004300000000000000000000000000000000000BC
+:1004400000000000000000000000000000000000AC
+:10045000000000000000000000000000000000009C
+:10046000000000000000000000000000000000008C
+:10047000000000000000000000000000000000007C
+:10048000000000000000000000000000000000006C
+:10049000000000000000000000000000000000005C
+:1004A000000000000000000000000000000000004C
+:1004B000000000000000000000000000000000003C
+:1004C000000000000000000000000000000000002C
+:1004D000000000000000000000000000000000001C
+:1004E000000000000000000000000000000000000C
+:1004F00000000000000000000000000000000000FC
+:1005000000000000000000000000000000000000EB
+:1005100000000000000000000000000000000000DB
+:1005200000000000000000000000000000000000CB
+:1005300000000000000000000000000000000000BB
+:1005400000000000000000000000000000000000AB
+:10055000000000000000000000000000000000009B
+:10056000000000000000000000000000000000008B
+:10057000000000000000000000000000000000007B
+:10058000000000000000000000000000000000006B
+:10059000000000000000000000000000000000005B
+:1005A000000000000000000000000000000000004B
+:1005B000000000000000000000000000000000003B
+:1005C000000000000000000000000000000000002B
+:1005D000000000000000000000000000000000001B
+:1005E000000000000000000000000000000000000B
+:1005F00000000000000000000000000000000000FB
+:1006000000000000000000000000000000000000EA
+:1006100000000000000000000000000000000000DA
+:1006200000000000000000000000000000000000CA
+:1006300000000000000000000000000000000000BA
+:1006400000000000000000000000000000000000AA
+:10065000000000000000000000000000000000009A
+:10066000000000000000000000000000000000008A
+:10067000000000000000000000000000000000007A
+:10068000000000000000000000000000000000006A
+:10069000000000000000000000000000000000005A
+:1006A000000000000000000000000000000000004A
+:1006B000000000000000000000000000000000003A
+:1006C000000000000000000000000000000000002A
+:1006D000000000000000000000000000000000001A
+:1006E000000000000000000000000000000000000A
+:1006F00000000000000000000000000000000000FA
+:1007000000000000000000000000000000000000E9
+:1007100000000000000000000000000000000000D9
+:1007200000000000000000000000000000000000C9
+:1007300000000000000000000000000000000000B9
+:1007400000000000000000000000000000000000A9
+:100750000000000000000000000000000000000099
+:100760000000000000000000000000000000000089
+:100770000000000000000000000000000000000079
+:100780000000000000000000000000000000000069
+:100790000000000000000000000000000000000059
+:1007A0000000000000000000000000000000000049
+:1007B0000000000000000000000000000000000039
+:1007C0000000000000000000000000000000000029
+:1007D0000000000000000000000000000000000019
+:1007E0000000000000000000000000000000000009
+:1007F00000000000000000000000000000000000F9
+:1008000000000000000000000000000000000000E8
+:1008100000000000000000000000000000000000D8
+:1008200000000000000000000000000000000000C8
+:1008300000000000000000000000000000000000B8
+:1008400000000000000000000000000000000000A8
+:100850000000000000000000000000000000000098
+:100860000000000000000000000000000000000088
+:100870000000000000000000000000000000000078
+:100880000000000000000000000000000000000068
+:100890000000000000000000000000000000000058
+:1008A0000000000000000000000000000000000048
+:1008B0000000000000000000000000000000000038
+:1008C0000000000000000000000000000000000028
+:1008D0000000000000000000000000000000000018
+:1008E0000000000000000000000000000000000008
+:1008F00000000000000000000000000000000000F8
+:100900000000000000000000000000003A003B0072
+:100910003C003D003E003F004000410042004300DB
+:1009200044004500010000700100010001000100C9
+:10093000010001000100010001004C000100010064
+:1009400001001570167013700A700030013002300B
+:100950000100010001001C701B70187019701D70DF
+:100960001E700100010001000100010001000100F2
+:10097000010001000100010001000100010001006F
+:10098000010001002A0354006800650020005000A7
+:10099000720065006F006E006900630020004B006C
+:1009A0006500790062006F00610072006400000061
+:1009B0002C034F007200740068006F006C00690027
+:1009C0006E0065006100720020004B006500790038
+:1009D00062006F0061007200640073000000040395
+:1009E000090409026D00040100A0FA0904000001D5
+:1009F00003010100092111010001224000070581C6
+:100A00000308000A09040100010301020009211181
+:100A1000010001224D000705820308000A090402B3
+:100A20000001030000000921110100012236000726
+:100A300005830308000A09040300010300000009FC
+:100A40002111010001223900070584031000011261
+:100A500001100100000008EDFE61600100010200CC
+:100A60000105010906A101050719E029E71500257F
+:100A7000019508750181020508190129059505757B
+:100A80000191029501750391010507190029771558
+:100A9000002501957875018102C005010980A10139
+:100AA000850216010026B7001A01002AB70075104A
+:100AB00095018100C0050C0901A101850316010003
+:100AC000269C021A01002A9C02751095018100C023
+:100AD00005010902A1010901A10005091901290562
+:100AE00015002501950575018102950175038101A8
+:100AF0000501093009311581257F950275088106A8
+:100B000009381581257F950175088106050C0A387D
+:100B1000021581257F950175088106C0C005010970
+:100B200006A101050719E029E715002501950875BB
+:100B300001810295017508810105081901290595B2
+:100B400005750191029501750391010507190029A9
+:100B5000FF150026FF00950675088100C0001124CE
+:100B60001FBECFEFDAE0DEBFCDBF04B603FE24C068
+:100B700080912A0490912B04A0912C04B0912D0413
+:100B80008730904BA740B04BB9F410922A041092D2
+:100B90002B0410922C0410922D0414BE84B7877F6E
+:100BA00084BF88E10FB6F8948093600010926000D3
+:100BB0000FBEE0E0F8E3099512E0A0E0B1E0E0EB61
+:100BC000F2E602C005900D92AA3CB107D9F714E0F5
+:100BD000AAECB2E001C01D92AA32B107E1F70E946F
+:100BE00034160C9456310C940000089581E0089559
+:100BF0000C94F5050C94F605279A2F988FEF9FEF2C
+:100C000090938700809386008AE08093800089E13A
+:100C1000809381000C948D2C0E94FC056E9A769A2C
+:100C20000C94D206282F81110BC080918000877F01
+:100C30008093800010928D0010928C002F98089560
+:100C40002F9880918000886080938000233019F471
+:100C50008FEF9FEF0FC083E090E0821B9109880F18
+:100C6000991F2FEF3FEFA90102C0569547958A952E
+:100C7000E2F7CA0190938D0080938C000895CF9382
+:100C8000DF93EC010E942128BE0180E090E0DF911B
+:100C9000CF910C9414240F931F93FC01623091F1B7
+:100CA00028F4662359F06130D1F05FC0643009F454
+:100CB00040C0C0F1653009F44CC057C08281882320
+:100CC00009F453C000E010E0980140E064E070E0F7
+:100CD00088EC91E00E944E1281E090E010C0828189
+:100CE000882309F442C000E010E0980140E066E08B
+:100CF00070E088E591E00E944E1282E090E00E9450
+:100D00003F0633C08281882381F100E010E0980122
+:100D100040E068E070E088E891E00E944E1284E0D4
+:100D200090E0EDCF8281882311F083E006C083E05C
+:100D30000DC08281882349F084E00E94912440E123
+:100D400064E083E00E94030710C084E00E94B224A4
+:100D5000F6CF8281882331F085EE0E94A91C0E9483
+:100D6000E42C03C085EE0E94711D80E090E01F918D
+:100D70000F9108950F931F932FEF89EF90E021506B
+:100D800080409040E1F700C0000000E010E09801D2
+:100D900040E064E070E088EE91E00E944E121F9106
+:100DA0000F9108950C94BA060F931F9300E010E082
+:100DB000980140E063E070E080E491E00E944E1210
+:100DC0002FEF82E597E0215080409040E1F700C08E
+:100DD00000001F910F910C94030E0F931F9300E0DE
+:100DE00010E0980140E068E070E080E091E00E944F
+:100DF0004E121F910F9108950C94ED0681E0089515
+:100E00000C94FE060895CF92DF92EF92FF920F931B
+:100E10001F9301E010E020E030E06801790104C098
+:100E2000CC0CDD1CEE1CFF1C8A95D2F704C0000F11
+:100E3000111F221F331F6A95D2F70C291D292E2955
+:100E40003F29C090E003D090E103E090E203F090EE
+:100E5000E303C022D122E222F322842FC016D1065E
+:100E6000E206F30641F41F910F91FF90EF90DF909F
+:100E7000CF900C9491241F910F91FF90EF90DF90F1
+:100E8000CF900C94B2240C940C0680911A03882302
+:100E900009F448C08091D6029091D702009779F466
+:100EA0000E944F279093D7028093D6028091D80258
+:100EB00090E0009771F48091D90290E00AC00E94FE
+:100EC0005B2720910802309109022817390740F367
+:100ED00029C00197880F991F880F991FFC01E652BE
+:100EE000FD4F60817181828193810E94360EE09175
+:100EF000D80284E0E89FF0011124E652FD4F6081A2
+:100F00007181828193814FE050E00E94EE118091C7
+:100F1000D80290E001966091D90270E00E940631FB
+:100F20008093D8020C94F80510921C030C94030EC5
+:100F300081E080931C030C94FC0608958F929F928D
+:100F4000AF92BF92EF92FF920F931F93CF93DF93D5
+:100F5000CDB7DEB7A3970FB6F894DEBF0FBECDBFF7
+:100F60007C01FC0100811181C8010E944D25B8015E
+:100F70000E94320C8C01B7010E940007882309F4FB
+:100F8000BDC20531F0E71F0741F4F70182818823D4
+:100F900009F458C00E94E512B1C20631F0E71F07FC
+:100FA00041F4F7018281882309F44CC00E94EE12BB
+:100FB000A5C20731F0E71F0751F4F70182818823AA
+:100FC00009F440C00E94E1128111F0CFE3CF083153
+:100FD000F0E71F0739F4F7018281882399F10E9415
+:100FE00098078CC20931F0E71F0739F4F7018281B5
+:100FF000882341F10E94940781C20A31F0E71F075C
+:1010000049F4F70182818823E9F080911C03811162
+:10101000F1CFE5CF0B31F0E71F0739F4F7018281FB
+:10102000882381F00E94F5120AC00C31F0E71F07F7
+:1010300049F4F7018281882329F00E9400130E945D
+:10104000ED065CC280911C03811105C0F70182810D
+:101050008111CFC03AC1003E110579F4F7018281B8
+:10106000882309F44DC00E94030E81E080931B0386
+:1010700010921A031092D90241C2023E110559F48E
+:10108000F70182818823E1F10E94030E10921B0375
+:1010900010921A0333C2033E110591F4F7018281C5
+:1010A000882371F10E94030E10921B0381E080934C
+:1010B0001A031092D8021092D7021092D6021EC2C2
+:1010C0000235110559F4F7018281882309F416C20B
+:1010D00080910802909109020A970DC0013511050F
+:1010E00079F4F7018281882309F408C2809108020B
+:1010F000909109020A969093090280930802FEC11A
+:1011000040910C0283E2E7E2F2E0DE0111960190E9
+:101110000D928A95E1F7F701808121E030E02C0FF4
+:101120003D1F280F311DC90120910A0230910B0289
+:10113000FC01E20FF31F6081772767FD7095640F54
+:10114000711D882777FD8095982F0E94282E20E01A
+:1011500030E040E451E40E948D2D4B015C01F70129
+:10116000218185E090E0821B9109BC01882777FDF1
+:101170008095982F0E94282E9B01AC01C501B401D7
+:101180000E94252D9B01AC0160E070E080E090E4BE
+:101190000E949B2F20E030E04CED50E40E94382F5D
+:1011A0004B015C01F70182818823D1F04FE050E0D0
+:1011B000C501B4010E94EE1180911B038823A1F0A8
+:1011C0008091D90224E0829FF0011124E652FD4F64
+:1011D00080829182A282B3828F5F8093D90204C001
+:1011E000C501B4010E94360E0F3F110508F02ECF45
+:1011F00085C18091D50281111FC0043130E71307EA
+:1012000009F080C00E94020781E08093D5020E940D
+:101210004F279093D4028093D3021092CC02109265
+:10122000CE021092CD021092D0021092CF021092F4
+:10123000D2021092D10262C18091D3029091D40265
+:101240000E945B27883C910570F48091CC02E82FC6
+:10125000F0E0EE0FFF1FE353FD4F118300838F5F1C
+:101260008093CC024BC1043180E7180768F4023048
+:1012700090E7190708F050C00115E0E71E0771F06C
+:1012800001301047A1F11CC1033320E7120709F414
+:10129000E8C00433104709F4FBC012C1F701828192
+:1012A000882309F412C10E9454200E94030E0E9458
+:1012B000D406FFEF24E33CE0F15020403040E1F75A
+:1012C00000C000000E94AA2719C10431F0E71F07DF
+:1012D00008F0C3C0023020E71207F0F4011530E730
+:1012E000130709F4F2C00130104709F0E9C0F70113
+:1012F0008281882309F4E9C08091FD038160809395
+:10130000FD03FCC00431F0E71F0708F0A6C002305F
+:1013100020E7120708F4ECC0F7018281882309F462
+:10132000D4C00E940E28811102C00E94EA270E94A8
+:10133000262890E090930F0480930E040230F0E78B
+:101340001F0721F480910E04816080C0033020E7E4
+:10135000120721F480910E04826078C0043030E7D7
+:10136000130721F480910E04846070C0053080E77B
+:10137000180719F480910E0427C0063090E719076A
+:1013800021F480910E04806161C00730E0E71E0700
+:1013900021F480910E04806259C00830F0E71F07E5
+:1013A00021F480910E04806451C0093020E71207B7
+:1013B00021F480910E04806849C00A3030E7130799
+:1013C00029F480910E048460886040C00B3080E76F
+:1013D000180721F480910E048E7F38C00C3090E7FE
+:1013E000190721F480910E048D7F30C00D30E0E7A5
+:1013F0001E0721F480910E048B7F28C00E30F0E789
+:101400001F0719F480910E0420C00F3020E7120747
+:1014100021F480910E048F7E19C0003130E713074C
+:1014200021F480910E048F7D11C0013180E71807EF
+:1014300021F480910E048F7B09C080910E0402314B
+:10144000104711F48F7702C08B7F877F80930E0443
+:1014500080910E040E942A2851C0033390E7190797
+:10146000A1F4F7018281882321F01092CA0282E060
+:1014700016C08091CA02811106C086E20E94A91C92
+:1014800086E20E94711D82E018C004331047C1F447
+:10149000F7018281882331F01092CB0280E20E9412
+:1014A000C01D2CC08091CB02811106C087E20E9432
+:1014B000A91C87E20E94711D80E20E94C71D1EC008
+:1014C00081E08093CA028093CB02C701A3960FB636
+:1014D000F894DEBF0FBECDBFDF91CF911F910F916A
+:1014E000FF90EF90BF90AF909F908F900C94FA0573
+:1014F000011530E7130709F0F6CED5CE80E0A396AC
+:101500000FB6F894DEBF0FBECDBFDF91CF911F9114
+:101510000F91FF90EF90BF90AF909F908F900895A4
+:101520002CE0729FF00111243CE3839FE00DF11D3C
+:101530001124E60FF11DEE0FFF1FE457FE4F8591BA
+:1015400094910E94440C811540E5940708F047C02F
+:10155000811520E4920708F013C1883E910520F51B
+:10156000803E910508F07CC1883A910578F4853A6F
+:10157000910508F0A5C08130910509F471C108F406
+:101580002EC18430910508F06BC129C18B3B9105B8
+:1015900008F4A1C0803C910508F421C1FC01EE0FC4
+:1015A000FF1FE45FFF4FE6C0811530E2930758F458
+:1015B000811541E0940708F053C1803F910508F47C
+:1015C0000EC190650895811520E3920708F0D5C0FB
+:1015D000FC01FF70EE0FFF1FE457FE4FCBC08115DB
+:1015E00035E5930708F043C0811544E5940708F0FA
+:1015F000DEC0811522E5920708F5811531E59307D4
+:1016000008F0C1C0482F437021E030E002C0220F33
+:10161000331F4A95E2F73C68AC0164E05695479564
+:101620006A95E1F74370342B8F708695869540E27A
+:10163000849FC0011124822B932B0895282F269577
+:101640002695AC01437055278115934508F0A0C03D
+:1016500080E2289F9001112481E090E002C0880F71
+:10166000991F4A95E2F7822B932B9C6808958F323D
+:1016700040E7940790F48F3120E7920708F0A2C06A
+:10168000811536E5930708F497C09C013056211563
+:10169000304108F0A4C09F7093C0803320E79207C8
+:1016A00009F497C008F492C0813340E7940709F425
+:1016B00093C08233904709F092C080E093ED089583
+:1016C000853A910509F48EC0863A910509F08DC0DE
+:1016D00082E890E40895883A910509F489C0893A2E
+:1016E000910509F488C08A3A910509F487C08B3ABC
+:1016F000910509F486C08C3A910509F485C08D3AAC
+:10170000910509F484C0803B910509F483C08E3AA9
+:10171000910509F482C08F3A910509F481C0813B9B
+:10172000910509F480C0823B910509F47FC0833B99
+:10173000910509F47EC0843B910509F47DC0853B89
+:10174000910509F47CC0863B910509F47BC0873B79
+:10175000910509F47AC0883B910509F479C0893B69
+:10176000910509F478C08A3B910509F477C080E0BF
+:1017700094E408958591949108959927906C089523
+:101780009F70906A0895982F8827816F906A0895B6
+:1017900090E2299F9001112481E090E002C0880F1F
+:1017A000991F4A95E2F7822B932B9A680895982FF8
+:1017B0008827846F906A08958F719927982F8827BA
+:1017C000906208958F519047946D089580E091ED57
+:1017D000089580E090ED089580E092ED089580E016
+:1017E00090E0089581E890E4089583E890E40895F6
+:1017F00082EE94E4089589EE94E408958AEE94E4E8
+:10180000089585EB94E4089586EB94E4089587EBBE
+:1018100094E408958CEC94E408958DEC94E4089598
+:1018200083E895E408958AE895E4089582E995E4CB
+:10183000089584E995E4089581E296E4089583E2A9
+:1018400096E4089584E296E4089585E296E4089586
+:1018500086E296E4089587E296E408958AE296E4A3
+:10186000089508959CE0799FF00111249CE3899FDD
+:10187000E00DF11D1124E60FF11DEE0FFF1FE457DF
+:10188000FE4F8591949108958238910549F1B0F405
+:101890008133910509F458C048F48932910509F45F
+:1018A0004EC08A32910509F454C0089585339105DC
+:1018B00009F440C08933910599F00895833E91055C
+:1018C00029F138F4803E910591F0823E9105A1F016
+:1018D0000895863E9105F9F0873E910531F108950E
+:1018E00020910E0420FD3AC021FD38C0089580915A
+:1018F0000E0480FD35C032C080910E0482FF32C0DC
+:1019000080910E0484FD30C083EE39C080910E04B6
+:1019100082FD28C0F5CF80910E0483FF27C08091FF
+:101920000E0484FD21C087EE2AC080910E0483FD41
+:101930001DC0F5CF80910E0485FD1AC01BC080919B
+:101940000E0485FD17C014C080910E0486FD14C0DE
+:1019500015C080910E0486FD11C00EC080EE0FC030
+:1019600089E30DC082EE0BC080E009C086EE07C09F
+:1019700089E205C085E303C08AE201C081E390E00B
+:10198000089508950C94C10CE82FF0E0EA5AFD4F39
+:101990008081E82FEF70F0E082958F7021E030E0D9
+:1019A000A90102C0440F551F8A95E2F740A308958C
+:1019B0000F931F93CF93DF93C4E0D0E001E010E0DA
+:1019C000FE01EA5AFD4F8081E82FEF70F0E021A17F
+:1019D00082958F70A80102C0440F551F8A95E2F7C7
+:1019E000CA01822B81A38C2F0E94C40C219740F73F
+:1019F0008BE090E061E070E0FC01E65BFD4F208150
+:101A0000E22FEF70F0E042A122952F70DB0102C0BF
+:101A1000AA0FBB1F2A95E2F79D01242B22A3019751
+:101A200058F7DF91CF911F910F9108950F931F9356
+:101A3000CF93DF9385B7806885BF85B7806885BF02
+:101A4000C4E0D0E001E010E0FE01EA5AFD4F8081E1
+:101A5000E82FEF70F0E021A182958F70A80102C0FD
+:101A6000440F551F8A95E2F7CA01822B81A38C2F60
+:101A70000E94C40C219740F78BE090E061E070E099
+:101A8000FC01E65BFD4F2081E22FEF70F0E042A108
+:101A900022952F70DB0102C0AA0FBB1F2A95E2F727
+:101AA0009D01242B22A3019758F7DF91CF911F911D
+:101AB0000F910C944307EF92FF920F931F93CF93D4
+:101AC000DF9307E213E0C4E0EE24E394F12CD5E0C9
+:101AD0008C2F0E94C40C8BE090E040E050E0FC01B1
+:101AE000E65BFD4F6081E62FEF70F0E020A130E073
+:101AF00062956F7002C0359527956A95E2F720FDD3
+:101B000009C09701082E02C0220F331F0A94E2F782
+:101B1000422B532B019718F7F801929182918F0174
+:101B20008417950721F051834083D0930D028C2FA9
+:101B30000E94C40CC15060F680910D0287FD1FC049
+:101B4000815080930D028F3F39F08FE99FE001971C
+:101B5000F1F700C0000013C080E090E0FC01E95DF7
+:101B6000FC4FDC01A35EBC4F18962D913C91199758
+:101B7000318720870297863FEFEF9E0779F70E9413
+:101B8000450781E0DF91CF911F910F91FF90EF907A
+:101B90000895E82FF0E0EE0FFF1FE95DFC4F808114
+:101BA0009181089508950F931F93CF9301E313E05C
+:101BB000C0E0F801929182918F010E94C826C80F5F
+:101BC000F3E007321F07A9F78C2FCF911F910F91D8
+:101BD00008950E940E28811102C00E94EA270E94E7
+:101BE0003828809314043E9A809171008D7F8093F1
+:101BF000710082E0809390008AE18093910081E0FF
+:101C000080933303089580913303811102C00E94B1
+:101C1000E90D1092830310928203809171008D7FF1
+:101C200080937100809190008F7380939000109248
+:101C300045031092440310927C0310927D0310928E
+:101C40007E0310927F0310927B0310927A03EAE5E1
+:101C5000F3E0AAE4B3E011921192119211921D9255
+:101C60001D9283E0EA37F807B1F70895CF92DF922B
+:101C7000EF92FF920F931F93CF93DF932091440332
+:101C8000222309F484C06B017C018091330381110C
+:101C900002C00E94E90D0AE713E0C7E0D0E0A70107
+:101CA0009601F80192918291729162918F010E9446
+:101CB000892D811131C0FE01EE0FFF1FEE0FFF1FB6
+:101CC000E65AFC4F1082118212821382DE01AA0FA3
+:101CD000BB1FA65BBC4F11961C921E92C730D1054C
+:101CE000E9F0219644815581668177814083518353
+:101CF00062837383148215821682178212968D91E5
+:101D00009C91139711969C938E9313961C921E92FE
+:101D1000129734961296E2CF219708F680918203AB
+:101D200090918303019797FD05C09093830380935F
+:101D3000820304C010928303109282038091820375
+:101D400090918303209180033091810328173907F4
+:101D500024F01092810310928003892BC1F48091AA
+:101D600071008D7F80937100809190008F738093BC
+:101D7000900010927C0310927D0310927E031092CB
+:101D80007F0310927B0310927A0310924403DF9139
+:101D9000CF911F910F91FF90EF90DF90CF9008951A
+:101DA0001F920F920FB60F9211244F925F926F9273
+:101DB0007F928F929F92AF92BF92CF92DF92EF92DB
+:101DC000FF922F933F934F935F936F937F938F93E4
+:101DD0009F93AF93BF93CF93DF93EF93FF93809144
+:101DE0004403882309F49BC1C0918203D0918303EB
+:101DF0001C161D060CF093C140903403509035031F
+:101E0000609036037090370320E030E0A901C301F1
+:101E1000B2010E94342F18160CF065C0C130D105F4
+:101E200009F452C08091800390918103BE010E9409
+:101E300006317C0190938103809380038090460358
+:101E400090904703A0904803B090490320E030E011
+:101E500040E85FE3C501B4010E94252D609346036D
+:101E6000709347038093480390934903F701EE0F63
+:101E7000FF1FEE0FFF1FE65AFC4FA3019201608186
+:101E80007181828193810E948D2D20E030E040E0BD
+:101E90005EE30E94382F9B01AC01C501B4010E9492
+:101EA000342F18168CF4C7010196BE010E9406312A
+:101EB000909381038093800310924603109247030E
+:101EC0001092480310924903E0918003F09181033E
+:101ED000EE0FFF1FEE0FFF1FE65AFC4F608171816E
+:101EE00082819381D0C0C0907C03D0907D03E0902C
+:101EF0007E03F0907F0320E030E0A901C701B60126
+:101F00000E94892D2197882309F4A2C0FE01EE0FBB
+:101F1000FF1FEE0FFF1FE65AFC4F80809180A280CA
+:101F2000B380A5019401C701B6010E94892D87FFE6
+:101F300031C0A501940160E070E08CED93EC0E944B
+:101F40008D2D20E030E040E451E40E948D2D20E012
+:101F500030E040E05FE30E94382F9B01AC0160E07D
+:101F600070E080E090E40E949B2F9B01AC01C501D2
+:101F7000B4010E94382F9B01AC01C701B6010E9439
+:101F8000892D87FF07C0A701960160E070E08CED06
+:101F900093E439C0A5019401C701B6010E94342F12
+:101FA00018160CF055C0A501940160E070E08CEDAE
+:101FB00093E40E948D2D20E030E040E451E40E9443
+:101FC0008D2D20E030E040E05FE30E94382F9B0140
+:101FD000AC0160E070E080E090E40E949B2F9B01E8
+:101FE000AC01C501B4010E94382F9B01AC01C701AF
+:101FF000B6010E94342F18165CF5A701960160E027
+:1020000070E08CED93EC0E948D2D20E030E040E4F8
+:1020100051E40E948D2D20E030E040E05FE30E941B
+:10202000382F9B01AC0160E070E080E090E40E94FA
+:102030009B2F9B01AC01C701B6010E94382F609312
+:102040007C0370937D0380937E0390937F0313C082
+:10205000FE01EE0FFF1FEE0FFF1FE65AFC4F8081BF
+:102060009181A281B38180937C0390937D03A0939F
+:102070007E03B0937F0360917C0370917D03809118
+:102080007E0390917F0320913103309132032F3FE3
+:102090004FEF340731F02F5F3F4F309332032093DF
+:1020A00031030E940B136B017C0120E034E244EF0A
+:1020B00051E40E94892D87FF08C086EFC82E88E270
+:1020C000D82E84EFE82E81E4F82E20E030E040E0C6
+:1020D00051E4C701B6010E94382F9B01AC0160E0BA
+:1020E00074E284E79BE40E948D2D6B017C010E94C9
+:1020F000FA2D709397006093960020910E02309114
+:102100000F024091100250911102C701B6010E94C6
+:10211000382F0E94FA2D7093990060939800809157
+:102120004503882309F433C1C0904003D090410394
+:10213000E0904203F090430320E030E0A901C701A2
+:10214000B6010E94342F1816D4F580913103909176
+:1021500032038F3F2FEF920729F0019690933203BD
+:1021600080933103C701B6010E940B1320E030E0D9
+:1021700040E051E40E94382F9B01AC0160E074E222
+:1021800084E79BE40E948D2D6B017C010E94FA2D57
+:10219000709397006093960020910E0230910F0289
+:1021A0004091100250911102C701B6010E94382FD0
+:1021B0000E94FA2D709399006093980008C01092C5
+:1021C00097001092960010929900109298006091DA
+:1021D0003A0370913B036F5F7F4F70933B036093B3
+:1021E0003A03209196003091970080E090E0232BF5
+:1021F000F1F0C0919600D09197000E94262E6B01BD
+:102200007C01BE0180E090E00E94262E9B01AC0183
+:1022100060913C0370913D0380913E0390913F0398
+:102220000E948D2D20E03FEF4FE757E410C00E9441
+:10223000262E6B017C0120E030EE4FEF54E46091DC
+:102240003C0370913D0380913E0390913F030E94B7
+:10225000382F9B01AC01C701B6010E94342F87FDC6
+:1022600096C0809138038F5F8093380390E020916F
+:1022700010043091110482179307A0F080911B0481
+:10228000882319F0109238030DC0809171008D7F62
+:1022900080937100809190008F73809390001092D2
+:1022A00045037DC080913903C0913803811128C056
+:1022B000C0901504D0901604E0901704F090180414
+:1022C00020E030E0A901C701B6010E94342F1816A2
+:1022D000BCF481E0809339031092400310924103D3
+:1022E0001092420310924303C0923C03D0923D03EC
+:1022F000E0923E03F0923F03C150C093380343C0C5
+:10230000109239031092320310923103E0911204BB
+:10231000F091130448E0C49FE00DF11D1124808169
+:102320009181A281B3818093400390934103A09354
+:102330004203B093430320E030E040E85EE3648171
+:102340007581868197810E94382F6B017C01809175
+:102350001202682F70E080E090E00E94262E20E0BC
+:1023600030E048EC52E40E948D2D9B01AC01C70186
+:10237000B6010E94382F60933C0370933D03809315
+:102380003E0390933F0310923B0310923A038091D7
+:10239000140480FD04C01092450310924403FF9181
+:1023A000EF91DF91CF91BF91AF919F918F917F91ED
+:1023B0006F915F914F913F912F91FF90EF90DF9040
+:1023C000CF90BF90AF909F908F907F906F905F90D5
+:1023D0004F900F900FBE0F901F901895CF92DF92E5
+:1023E000EF92FF92CF93DF936B017C01EA01809122
+:1023F0003303811102C00E94E90D8091140480FF13
+:1024000046C0809182039091830308970CF03FC0EF
+:10241000809171008D7F80937100809145038111BF
+:102420000E94030E81E080934403109232031092C5
+:10243000310320E030E0A901C701B6010E94342F2A
+:102440001816DCF48091820390918303FC01EE0F57
+:10245000FF1FEE0FFF1FE65AFC4FC082D182E282BF
+:10246000F382FC01EE0FFF1FE65BFC4FD183C083BC
+:102470000196909383038093820380917100826020
+:102480008093710080919000806880939000DF912C
+:10249000CF91FF90EF90DF90CF9008958F929F9211
+:1024A000AF92BF92CF92DF92EF92FF920F931F9362
+:1024B000CF93DF93EC017B01D42E48015901809129
+:1024C0003303811102C00E94E90D8091140480FF42
+:1024D0006BC0809171008D7F809371008091440367
+:1024E00081110E94030E81E080934503D093130471
+:1024F000C0931204F0921104E0921004D0921B04D5
+:102500008092150490921604A0921704B0921804B9
+:102510001092460310924703109248031092490309
+:102520001092380388819981AA81BB8180934003EE
+:1025300090934103A0934203B093430320E030E023
+:1025400040E85EE36C817D818E819F810E94382FFF
+:102550006B017C0180911202682F70E080E090E0B6
+:102560000E94262E20E030E048EC52E40E948D2D9F
+:102570009B01AC01C701B6010E94382F60933C0358
+:1025800070933D0380933E0390933F0310923B036F
+:1025900010923A0380917100826080937100809163
+:1025A0009000806880939000DF91CF911F910F91F0
+:1025B000FF90EF90DF90CF90BF90AF909F908F9063
+:1025C00008958091140481700895809114048160AD
+:1025D000809314040E943C280C949D07809114045D
+:1025E0008E7F809314040C943C288091840390E0A7
+:1025F000019666E070E00E9406318093840308959E
+:102600008091840390E0019766E070E00E940631BB
+:102610008093840308958F929F92AF92BF92CF923E
+:10262000DF92EF92FF920F931F93CF93DF936B0193
+:102630007C01C0913103D0913203BE0180E090E073
+:102640000E94262E4B015C01A701960160E070E01C
+:102650008CE594E40E948D2D9B01AC01C501B40171
+:102660000E94382F0E94FA2D20918403233009F410
+:1026700073C028F4222351F02130E9F02CC124301A
+:1026800009F4A0C0253009F4E0C025C180E090E045
+:10269000A0E0BFE380930E0290930F02A09310027C
+:1026A000B093110210923403109235031092360346
+:1026B0001092370310C11092340310923503109218
+:1026C0003603109237036431710540F46A307105A6
+:1026D00060F520E030E040E85EE32BC0693C710526
+:1026E00008F0AAC080E090E00E94262E20E030E0B2
+:1026F00040EA51E40E94242D20E030E044E353E41A
+:102700000E948D2D9B01AC010E94382F20E030E00B
+:1027100040E05EE30E94382F9B01AC0160E070E076
+:1027200080E09EE30E94242D44C020E030E040E0A1
+:102730005FE3C701B6010E94382F6B017C0180E086
+:1027400090E0A0E0BEE380930E0290930F02A0936E
+:102750001002B0931102BFC01092340310923503DF
+:1027600010923603109237034AE0469F9001479F2C
+:10277000300D1124C90168EB7BE00E94F230BC01EE
+:102780006C5D754077FF03C071956195710988276D
+:1027900077FD8095982F0E94282E2EE333EC4EE291
+:1027A00059E30E94382F20E030E040EC5EE30E94C5
+:1027B000252D60930E0270930F0280931002909368
+:1027C000110289C01092340310923503109236031F
+:1027D00010923703CE0183709927892BE1F0BE0157
+:1027E0006170772780E090E00E94262E20E030E0A4
+:1027F00040E05EE30E94382F20E030E040E45FE3F9
+:102800000E94252D60930E0270930F028093100298
+:10281000909311020CC080E090E0A0E0BFE38093B1
+:102820000E0290930F02A0931002B0931102C77092
+:10283000DD27CD2B09F04FC010920E0210920F022F
+:10284000109210021092110246C01092340310929E
+:102850003503109236031092370300E010E020E0B9
+:102860003FE300930E0210930F0220931002309367
+:1028700011026739710578F180E090E00E94262E00
+:1028800020E030E047E153E40E94242D20E030E0D6
+:102890004AE754E40E948D2D20E030E048E452E401
+:1028A0000E94382F20E030E040EA51E40E946A2E76
+:1028B0000E94F52D660F771F660F771FFB01E55A03
+:1028C000FD4F2081318142815381C701B6010E94B1
+:1028D000382F6B017C01C701B601DF91CF911F91A9
+:1028E0000F91FF90EF90DF90CF90BF90AF909F90AF
+:1028F0008F900895809195030895CF93DF9300D032
+:102900001F92CDB7DEB79C0180912004843019F569
+:1029100093E099833B832A839093E9008FEF909112
+:10292000E800815095FD06C095ED9A95F1F70000FD
+:102930008111F5CF8091E80085FF0DC040E050E0A7
+:1029400063E070E0CE0101960E94DA168091E80003
+:102950008E778093E8000F900F900F90DF91CF91CA
+:102960000895CF93DF9300D01F92CDB7DEB72091AB
+:102970002004243021F522E029839B838A8383E08D
+:102980008093E9008FEF9091E800815095FD06C09B
+:1029900095ED9A95F1F700008111F5CF8091E8004F
+:1029A00085FF0DC040E050E063E070E0CE0101968D
+:1029B0000E94DA168091E8008E778093E8000F90ED
+:1029C0000F900F90DF91CF91089520912004243033
+:1029D000F1F422E02093E9002FEF3091E80021503C
+:1029E00035FD06C035ED3A95F1F700002111F5CF20
+:1029F0002091E80025FF0BC040E050E065E070E06A
+:102A00000E94DA168091E8008E778093E80008959E
+:102A1000CF93DF93EC0190912004943009F046C0ED
+:102A200080911D028823D9F080911E028823B9F07D
+:102A30009093E9008FEF9091E800815095FD06C0DA
+:102A400095E19A95F1F700008111F5CF8091E800AA
+:102A500085FF2CC040E050E060E170E017C081E0ED
+:102A60008093E9008FEF9091E800815095FD06C0BA
+:102A700095ED9A95F1F700008111F5CF8091E8006E
+:102A800085FF14C040E050E068E070E0CE010E9495
+:102A9000DA168091E8008E778093E80080E1FE01ED
+:102AA000A5E8B3E001900D928A95E1F7DF91CF910F
+:102AB000089580911F04811109C00E946F180E941F
+:102AC000CC188091E20084608093E2000895109217
+:102AD0001F040895089508950C94122742E061ECB4
+:102AE00081E00E94E91742E061EC82E00E94E91770
+:102AF00042E061EC83E00E94E91742E161EC84E08E
+:102B00000C94E91780912204833009F455C030F405
+:102B1000813071F0823009F48EC008958A3009F452
+:102B20007AC08B3009F460C0893009F09CC020C0A5
+:102B300080912104813A09F096C08091E800877F56
+:102B40008093E8008091250490912604892B21F43C
+:102B500060E185E893E003C060E080E090E070E031
+:102B60000E9425178091E8008B778093E8000895F4
+:102B700080912104813209F076C0809125049091E2
+:102B80002604009719F0039709F06DC08091E800C2
+:102B9000877F8093E8008091E80082FD05C08091E6
+:102BA00020048111F8CF5FC08091F10080939503DC
+:102BB0008091E8008B7753C080912104813A09F01D
+:102BC00052C08091250490912604892B09F04BC0B6
+:102BD0008091E800877F8093E8008091E80080FF83
+:102BE000FCCF80911D0236C0809121048132D9F53D
+:102BF0008091250490912604892BA9F58091E80005
+:102C0000877F8093E8000E941E18809123048093A0
+:102C10001D020C94542080912104813221F5809171
+:102C2000E800877F8093E8000E941E1880912404AA
+:102C300080939603089580912104813AA1F48091B4
+:102C4000E800877F8093E8008091E80080FFFCCF58
+:102C5000809196038093F1008091E8008E778093B5
+:102C6000E8000C941E18089584B7877F84BF88E11C
+:102C70000FB6F89480936000109260000FBE80E859
+:102C800080936100109261000E94C11B0E946F1826
+:102C90000E94CC188091E20084608093E2007894D6
+:102CA0000E94521B0E94C31B83E192E00E946D1B95
+:102CB00080912004853069F40E94D42680911E04FE
+:102CC0008823B1F30E940127882391F30E94C41640
+:102CD000EFCF0E94CB1BECCF292F332723303105B8
+:102CE000C9F064F42130310581F02230310509F05A
+:102CF00043C08DE690E022EE39E042C0213231053A
+:102D0000F1F02232310541F137C082E190E02FE449
+:102D10003AE036C099278130910541F08230910523
+:102D200041F0892B49F5EEEDF9E005C0E0EBF9E063
+:102D300002C0E4E8F9E0849190E09F0121C0643092
+:102D4000D8F4E62FF0E0EE0FFF1FE954FD4F20818D
+:102D5000318189E090E014C0643070F470E0FB01D0
+:102D6000EE0FFF1FE155FD4F20813181FB01E5553D
+:102D7000FD4F808190E004C080E090E020E030E0F2
+:102D8000FA0131832083089580E189BD82E189BD04
+:102D900009B400FEFDCF8091D8008F7D8093D800CC
+:102DA0008091E00082608093E0008091E00081FDEE
+:102DB000FCCF0895CF92DF92EF92FF920F931F9373
+:102DC000CF93DF93EC018B016A010E943D188111C2
+:102DD00033C0C114D10439F0F60180819181081B00
+:102DE000190BC80FD91FE12CF12C0115110519F190
+:102DF0008091E80085FD16C08091E8008E77809371
+:102E0000E800C114D10449F0F60180819181E80EF7
+:102E1000F91EF182E08285E00FC00E943D188823F0
+:102E200021F30AC089918093F10001501109FFEF4D
+:102E3000EF1AFF0ADACF80E0DF91CF911F910F9157
+:102E4000FF90EF90DF90CF9008952091270430916C
+:102E500028042617370748F06115710539F42091C9
+:102E6000E8002E772093E80001C0B90140E0611529
+:102E70007105A9F120912004222309F443C02530D3
+:102E800009F442C02091E80023FD40C02091E800F1
+:102E900022FD32C02091E80020FFE9CF4091F300ED
+:102EA0002091F20030E0342BFC01CF016115710557
+:102EB00059F02830310540F481918093F100615040
+:102EC00071092F5F3F4FF1CF41E02830310509F004
+:102ED00040E02091E8002E772093E800C8CF411110
+:102EE000C9CF0AC080912004882361F0853061F049
+:102EF0008091E80083FD0AC08091E80082FFF2CF54
+:102F000080E0089582E0089583E0089581E00895C7
+:102F100020912704309128042617370748F06115BF
+:102F2000710539F42091E8002E772093E80001C064
+:102F3000B901FC0120E06115710591F18091200437
+:102F4000882309F440C0853009F43FC08091E8002F
+:102F500083FD3DC08091E80082FD2FC08091E80094
+:102F600080FFE9CF2091F3008091F20090E0922B56
+:102F70006115710559F08830910540F42491209332
+:102F8000F1003196615071090196F2CF21E0089766
+:102F900009F020E08091E8008E778093E800CBCFA5
+:102FA0002111CCCF0AC080912004882361F08530A4
+:102FB00061F08091E80083FD0AC08091E80082FF03
+:102FC000F2CF80E0089582E0089583E0089581E0E3
+:102FD0000895982F973058F59093E900981739F095
+:102FE0007091EC002091ED005091F00003C0242F6F
+:102FF000762F50E021FF19C03091EB003E7F3093D7
+:10300000EB003091ED003D7F3093ED003091EB000F
+:1030100031603093EB007093EC002093ED005093FF
+:10302000F0002091EE0027FF07C09F5FD3CF8F7085
+:103030008093E90081E0089580E008958091210463
+:1030400087FF11C08091E80082FD05C080912004B7
+:103050008111F8CF11C08091E8008B770BC080916F
+:103060002004882349F08091E80080FFF8CF809108
+:10307000E8008E778093E80008952091E400309175
+:10308000E50095E64091EC00842F817040FF22C05E
+:103090008091E80080FD1CC080912004882391F07D
+:1030A000853091F08091EB0085FD10C04091E400E7
+:1030B0005091E5004217530729F39A01915011F7F7
+:1030C00084E0089582E0089583E0089581E0089502
+:1030D00080E008954091E80042FFDECF08950E940D
+:1030E000DD180E94E518E0EEF0E0808181608083C9
+:1030F000E8EDF0E080818F77808319BCA7EDB0E028
+:103100008C918E7F8C9380818F7E808310921F04A0
+:1031100008950F931F93CF93DF930E94DD180E94B1
+:10312000E518C8EDD0E088818F7788838881806832
+:10313000888388818F7D888319BC10922004109227
+:103140001C0410921E0410921D0400EE10E0F80101
+:1031500080818B7F808388818160888342E060E00A
+:1031600080E00E94E917E1EEF0E080818E7F8083AD
+:10317000E2EEF0E0808181608083808188608083DE
+:10318000F80180818E7F8083888180618883DF91D0
+:10319000CF911F910F910895E8EDF0E080818F7E2F
+:1031A0008083E7EDF0E080818160808384E082BFEE
+:1031B00081E080931F040C948918E8EDF0E0808191
+:1031C0008E7F80831092E20008951092DA001092B0
+:1031D000E10008951F920F920FB60F9211242F93C2
+:1031E0003F934F935F936F937F938F939F93AF938F
+:1031F000BF93EF93FF938091E10082FF0BC080911A
+:10320000E20082FF07C08091E1008B7F8093E100A4
+:103210000E94511B8091DA0080FF1FC08091D8006E
+:1032200080FF1BC08091DA008E7F8093DA0080914E
+:10323000D90080FF0DC080E189BD82E189BD09B45C
+:1032400000FEFDCF81E0809320040E94591505C047
+:1032500019BC109220040E9467158091E10080FF44
+:1032600019C08091E20080FF15C08091E2008E7F3E
+:103270008093E2008091E20080618093E20080917F
+:10328000D80080628093D80019BC85E08093200428
+:103290000E946B158091E10084FF30C08091E200B4
+:1032A00084FF2CC080E189BD82E189BD09B400FEA4
+:1032B000FDCF8091D8008F7D8093D8008091E10070
+:1032C0008F7E8093E1008091E2008F7E8093E20008
+:1032D0008091E20081608093E20080911C04882349
+:1032E00011F084E007C08091E30087FD02C081E017
+:1032F00001C083E0809320040E946C158091E1005E
+:1033000083FF29C08091E20083FF25C08091E10006
+:10331000877F8093E10082E08093200410921C0458
+:103320008091E1008E7F8093E1008091E2008E7FAA
+:103330008093E2008091E20080618093E20042E0AD
+:1033400060E080E00E94E9178091F000886080933F
+:10335000F0000E946A15FF91EF91BF91AF919F918C
+:103360008F917F916F915F914F913F912F910F902E
+:103370000FBE0F901F9018951F920F920FB60F92CD
+:1033800011242F933F934F935F936F937F938F936A
+:103390009F93AF93BF93CF93DF93EF93FF93C0912E
+:1033A000E900CF708091EC00D82FD17080FDD0E87B
+:1033B0001092E9008091F000877F8093F00078946C
+:1033C0000E94001A1092E9008091F00088608093BA
+:1033D000F000CD2BCF70C093E900FF91EF91DF910A
+:1033E000CF91BF91AF919F918F917F916F915F919D
+:1033F0004F913F912F910F900FBE0F901F901895F6
+:103400001F93CF93DF93CDB7DEB7AA970FB6F8948B
+:10341000DEBF0FBECDBFE1E2F4E088E08E0F9091F9
+:10342000F10091938E13FBCF0E9482158091E800EA
+:1034300083FF1FC18091210490912204492F50E005
+:103440004A30510508F015C1FA01EA5AFF4F0C94B1
+:103450001A31803881F0823809F00BC1809125043F
+:103460008F708093E9008091EB0085FB882780F9BD
+:103470001092E90006C080911D0490911E049111E4
+:1034800082609091E800977F9093E8008093F1002C
+:103490001092F100C8C0282F2D7F09F0EAC08823C0
+:1034A00019F0823061F0E5C080912304813009F089
+:1034B000E0C0933009F080E080931E042BC080911F
+:1034C0002304811127C0809125048F7009F4D1C095
+:1034D0008093E9002091EB0020FF1CC0933021F481
+:1034E0008091EB00806214C09091EB00906190930A
+:1034F000EB0021E030E0A90102C0440F551F8A957E
+:10350000E2F74093EA001092EA008091EB008860B5
+:103510008093EB001092E9008091E800877F86C0DD
+:103520008111A7C0109123041F778091E300807858
+:10353000812B8093E3008091E800877F8093E800EF
+:103540000E941E188091E80080FFFCCF8091E3006C
+:1035500080688093E300111102C082E001C083E023
+:103560008093200486C08058823008F082C0809109
+:103570002304909124048C3D53E0950779F583E072
+:103580008A838AE289834FB7F894DE01139620E09C
+:103590003EE051E2E32FF0E050935700E49120FF2A
+:1035A00003C0E295EF703F5FEF708E2F90E0EA303E
+:1035B00010F0C79601C0C0968D939D932F5F243164
+:1035C00049F74FBF8091E800877F8093E8006AE267
+:1035D00070E0CE0101960E94251714C0AE014F5F26
+:1035E0005F4F609125040E946C16BC01009709F49E
+:1035F00040C09091E800977F9093E80089819A817C
+:103600000E9488178091E8008B778093E80031C092
+:10361000803879F58091E800877F8093E800809179
+:103620001C048093F1008091E8008E778093E8007D
+:103630000E941E181EC081111CC09091230492305C
+:10364000C0F48091E800877F8093E80090931C0489
+:103650000E941E1880911C04811106C08091E30015
+:1036600087FD02C081E001C084E0809320040E94B5
+:103670006E158091E80083FF0AC08091E800877F83
+:103680008093E8008091EB0080628093EB00AA9623
+:103690000FB6F894DEBF0FBECDBFDF91CF911F9163
+:1036A00008950895CF93809120048823A1F0C091BC
+:1036B000E900CF709091EC00892F817090FD80E837
+:1036C000C82B1092E9008091E80083FD0E94001A47
+:1036D000CF70C093E900CF91089590939C0380939D
+:1036E0009B030895E0919B03F0919C03309721F098
+:1036F0000190F081E02D099480E00895E0919B0312
+:10370000F0919C03309721F00280F381E02D099421
+:103710000895E0919B03F0919C03309721F0048081
+:10372000F581E02D099408952091990330919A0331
+:103730008217930771F090939A0380939903E09115
+:103740009B03F0919C03309721F00680F781E02DD8
+:103750000994089520919703309198038217930755
+:1037600071F09093980380939703E0919B03F091FD
+:103770009C03309721F00084F185E02D0994089591
+:1037800008950C94C01B0E9446270E94160D0E94AB
+:10379000CC270C948D2C5F926F927F928F929F9288
+:1037A000AF92BF92CF92DF92EF92FF920F931F934F
+:1037B000CF93DF9300D000D01F92CDB7DEB70E9429
+:1037C0005B0D98EAC92E93E0D92E04E010E0AA24FC
+:1037D000A394B12C502E802F0E94C90D4C01F601EC
+:1037E000729062906F016826792661147104A1F4C9
+:1037F0000150110978F78FEF89838A831B820E9419
+:103800004F278160782F9D838C8349815A816B81FA
+:103810008D810E947B1C38C08091FD0381FD0E9438
+:10382000D20D2BE030E07501022E02C0EE0CFF1C21
+:103830000A94E2F7C70186219721892B09F1298390
+:103840005A828E209F2091E0892809F490E09B8382
+:103850000E944F278160782F9D838C8349815A81F4
+:103860006B818D810E947B1C000F111FF801E256B5
+:10387000FC4F80819181E826F926F182E08204C024
+:103880002150310980F6B4CF0E94BB2910919D03CD
+:103890000E94721B1817D1F00E94721B80939D0327
+:1038A0000F900F900F900F900F90DF91CF911F917D
+:1038B0000F91FF90EF90DF90CF90BF90AF909F90CF
+:1038C0008F907F906F905F900C94C20C0F900F9030
+:1038D0000F900F900F90DF91CF911F910F91FF905C
+:1038E000EF90DF90CF90BF90AF909F908F907F90A0
+:1038F0006F905F900895CF93DF93CDB7DEB72B978E
+:103900000FB6F894DEBF0FBECDBF4F8358876987CF
+:103910007A878B87DE01119686E0FD0111928A95E8
+:10392000E9F785E0FE01379601900D928A95E1F75F
+:1039300049815A816B817C818D819E810E94F22216
+:103940002B960FB6F894DEBF0FBECDBFDF91CF919F
+:103950000895CF93882309F4C2C0C82F823859F440
+:103960000E94721B81FDBBC089E30E94CC250E948E
+:10397000992689E30CC0833879F40E94721B80FD7C
+:10398000AEC083E50E94CC250E94992683E50E9463
+:103990000E26CF910C949926843859F40E94721BFC
+:1039A00082FD9DC087E40E94CC250E94992687E471
+:1039B000EECF8CEF8C0F813A48F48C2F0E94F62BBF
+:1039C00081118DC08C2F0E94CC25E3CF80E28C0F1B
+:1039D000883048F4C77081E001C0880FCA95EAF7C3
+:1039E0000E945226D6CF8BE58C0F833078F4C53AEF
+:1039F00029F0C63A31F083E890E005C081E890E014
+:103A000002C082E890E0CF910C94941B88E58C0F63
+:103A1000833108F064C0C83A39F1C93A41F1CA3A71
+:103A200049F1CB3A51F1CC3A59F1CD3A61F1C03B71
+:103A300069F1CE3A71F1CF3A79F1C13B81F1C23BE4
+:103A400089F1C33B91F1C43B99F1C53BA1F1C63B60
+:103A5000A9F1C73BB1F1C83BB9F1C93BC1F1CA3BC0
+:103A6000C9F180E090E038C082EE90E035C089EE88
+:103A700090E032C08AEE90E02FC085EB90E02CC041
+:103A800086EB90E029C087EB90E026C08CEC90E0BC
+:103A900023C08DEC90E020C083E891E01DC08AE84F
+:103AA00091E01AC082E991E017C084E991E014C066
+:103AB00081E292E011C083E292E00EC084E292E0E3
+:103AC0000BC085E292E008C086E292E005C087E282
+:103AD00092E002C08AE292E0CF910C94AA1BCF91AF
+:103AE0000895882309F44BC0823859F40E94721B50
+:103AF00081FF45C089E30E94CC250E94992689E375
+:103B00000CC0833871F40E94721B80FF38C083E5BB
+:103B10000E94CC250E94992683E50E940E260C94D3
+:103B20009926843859F40E94721B82FF28C087E4CA
+:103B30000E94CC250E94992687E4EFCF9CEF980F36
+:103B4000913A58F390E2980F983050F4877091E0D2
+:103B500001C0990F8A95EAF7892F0E945826DFCF76
+:103B60009BE5980F933020F480E090E00C94941B38
+:103B7000885A833120F480E090E00C94AA1B0895C9
+:103B8000882321F00E9452260C94992608958823B8
+:103B900021F00E9458260C94992608957F928F92C6
+:103BA0009F92AF92BF92CF92DF92EF92FF920F93CC
+:103BB0001F93CF93DF931F92CDB7DEB77C01C62E44
+:103BC000772EFC01058102950F70128111110E9460
+:103BD0006F260E94C525882379F0112369F080E2C1
+:103BE0008C0D883048F082E00E94AE250E94C525E9
+:103BF00091E0D82ED92601C0D12CE72DE295EF70A7
+:103C0000F0E0E05AFF4F0C941A31872D807F072D8A
+:103C10000F70882311F00295007F112389F0002393
+:103C200009F499C180E28C0D883020F4802F0E9425
+:103C3000522603C0802F0E9462260E9499268BC1C3
+:103C40008C2D0E94711D002309F4C3C180E28C0DEC
+:103C5000883020F4802F0E94582603C0802F0E94B5
+:103C600068260E949926B5C1872D807F972D9F7069
+:103C7000803211F4892F03C0892F8295807FCC2058
+:103C800021F0F1E0CF16A1F01DC0112339F000237F
+:103C900019F1013009F50E9482269BC1002319F019
+:103CA000013009F496C189830E948526898110C15B
+:103CB000112321F0063008F08CC10EC0053008F049
+:103CC00088C106C1112359F0002331F0F701958115
+:103CD00090FF41C19F7095830E94C01D7AC100234F
+:103CE00009F4F6C03EC1872D86958695837090E0D5
+:103CF000009719F0019761F06CC1112321F08C2D10
+:103D0000972D937002C080E090E00E94941B61C1E7
+:103D1000112321F08C2D972D937002C080E090E04C
+:103D20000E94AA1B56C18C2D112319F00E94C32892
+:103D300002C00E942B290E94B0294BC1872D83709D
+:103D400009F052C0111145C18C2D8295869587705E
+:103D5000880F880F9C2D9F70892E912CA12CB12C3F
+:103D6000082E04C0880C991CAA1CBB1C0A94D2F70C
+:103D7000C4FE14C00FE010E020E030E0B901A8015B
+:103D800004C0440F551F661F771F8A95D2F7CB01D9
+:103D9000BA01609570958095909503C060E070E0E1
+:103DA000CB01272D26952695237030E02230310552
+:103DB00069F02330310589F0682979298A299B29FE
+:103DC0002130310571F00E943A2403C16829792914
+:103DD0008A299B290E945624FCC00E943A24C501CE
+:103DE000B4010E941E24F5C0112319F0872D8170A3
+:103DF00001C08695882309F4ECC08C2D82958695A8
+:103E00008770880F880F9C2D9F70892E912CA12C74
+:103E1000B12C082E04C0880C991CAA1CBB1C0A9447
+:103E2000D2F7C4FE14C00FE010E020E030E0B9018A
+:103E3000A80104C0440F551F661F771F8A95D2F74B
+:103E4000CB01BA01609570958095909503C060E0B4
+:103E500070E0CB01272D269526952370422F50E048
+:103E60004230510569F04330510589F068297929BC
+:103E70008A299B294130510571F00E941425A9C05F
+:103E8000682979298A299B290E943025A2C00E948D
+:103E90001425C501B4010E94F8249BC08C2D90E02C
+:103EA000FC01E05EF109E531F10508F050C0E05990
+:103EB000FF4F0C941A310C2D0F70872D8F71112329
+:103EC00021F00E949124802F07CF0E94B224802FDE
+:103ED0000E94C71D7EC0112341F0053008F079C053
+:103EE000872D8F710E94D72474C0063008F071C0EE
+:103EF000F7CF112339F0872D8F710E94912469C06B
+:103F00001123C9F3872D8F710E94B22462C011233F
+:103F100029F0872D8F710E947C245BC00E9472243F
+:103F200058C0112351F0172D1F71812F0E94912429
+:103F300063E0812F0E94A5254CC081E00E94AE2540
+:103F4000023008F446C082E00E94AE2542C0112330
+:103F500031F0002381F28C2D0E94A91C3AC000236D
+:103F600089F28C2D0E94711D34C0472D4F706C2D2D
+:103F7000C7010E944B060E9496232BC0111129C035
+:103F8000472D4F7050E042305105B9F04CF44115C7
+:103F9000510581F041305105E1F40E94B52C19C062
+:103FA0004330510569F04430510599F48C2D0E943D
+:103FB000072D0FC00E949E2C0CC00E94D12C09C05E
+:103FC0000E94E42C06C0472D4F706C2DC7010E9443
+:103FD000310CDD20F9F00E94A12580FD1BC0F70106
+:103FE00012820E949B250E949124C7010E941920E1
+:103FF0000E949B250F90DF91CF911F910F91FF9011
+:10400000EF90DF90CF90BF90AF909F908F907F9078
+:104010000C94B2240F90DF91CF911F910F91FF90DC
+:10402000EF90DF90CF90BF90AF909F908F907F9058
+:1040300008950F931F93CF93DF93EC0188819981AB
+:104040002B813C81232BB9F09F3F11F48F3F99F0D6
+:10405000CE010E949E07882371F0688179818A8150
+:104060000E9497258C010E944C250E941324B801C0
+:10407000CE010E94CE1DDF91CF911F910F91089527
+:104080000E946F260E947F260E9444260E94992645
+:104090000E94612A0E94B02980E090E00E94941B57
+:1040A00080E090E00C94AA1B0E945F260C944020B4
+:1040B0000E948C25292F22952F7030E02C3031055D
+:1040C0004CF42A3031056CF422503109223031058C
+:1040D000A8F407C02C30310569F02F30310551F0BC
+:1040E0000DC0803F69F018F4803E40F409C0843F61
+:1040F00029F406C093FB882780F9089580E008958D
+:1041000081E00895CF93DF9300D000D01F92CDB708
+:10411000DEB70F900F900F900F900F90DF91CF911F
+:104120000895CF93DF9300D000D000D0CDB7DEB795
+:1041300026960FB6F894DEBF0FBECDBFDF91CF91AC
+:1041400008951F93CF93DF93C091A80316E0809149
+:10415000A903C81799F0D0E01C9FF0011D9FF00D36
+:104160001124E655FC4F4081518162817381848125
+:1041700095810E9491202196C770E9CFDF91CF9160
+:104180001F9108954091DA035091DB036091DC03A5
+:104190007091DD038091DE039091DF030C949120F8
+:1041A0008091DF0382958F7009F054C08091DC0309
+:1041B000882309F44FC08091A803A091A9036091BE
+:1041C000DA037091DB034091DD035091DE03B6E02A
+:1041D0008A1709F43FC090E041155105C1F17F3FB6
+:1041E00011F46F3FA1F1B89FF001B99FF00D1124B8
+:1041F000E655FC4F218172132AC02081621327C02B
+:104200002281211124C0238134812417350710F421
+:1042100021503109241B350B283C3105C0F4209175
+:10422000DF032F7020612093DF0326E0289FF00139
+:10423000299FF00D1124E155FC4F80818F70806122
+:1042400080838AED93E00E9419200C94A1200196AE
+:104250008770BECF0895CF92DF92EF92FF920F93B7
+:104260001F93CF93DF93CDB7DEB762970FB6F89465
+:10427000DEBF0FBECDBF8C0185E0F801DE011D96CB
+:1042800001900D928A95E1F7D8014C9111965C91BD
+:10429000119712966C9112971396CD90DC9014970B
+:1042A0003091DA037091DB038091DD039091DE039E
+:1042B000009709F46BC17F3F19F43F3F09F466C1D1
+:1042C000E090DC03EE2009F4C0C02091DF03C816A3
+:1042D000D90628F0F601E81BF90BCF0104C0809540
+:1042E00090958C0D9D1DFF24F394883C910578F0EA
+:1042F000F12C207F09F0C6C07C2DD98AC88A898913
+:104300000E9482208AED93E00E941920B1C0822F82
+:10431000807F09F046C0751314C0341312C06111B8
+:1043200010C02F7020612093DF030E94C2208AED0D
+:1043300093E00E9419208091DF03D80115968C9399
+:104340002EC0CD2819F15F3F11F44F3FF9F0F62E42
+:1043500061111CC08091A8032091A90336E0821747
+:1043600009F45AC090E0389FF001399FF00D1124F4
+:10437000E655FC4F7181571306C07081471303C087
+:104380007281711103C001968770E9CFF62E662302
+:1043900009F418C18091DF0381608093DF03F12C61
+:1043A00011C1751308C0341306C0611104C0809197
+:1043B000DF03D801C3C04D875E878D859E856A8BDC
+:1043C0000E9458206A898823E1F16623D1F1209167
+:1043D000DF03822F82958F7090E0029774F08091B6
+:1043E000DA039091DB0398878F831986DB86CA8670
+:1043F0002C87CE0107960E94192086E0F801AAEDCD
+:10440000B3E001900D928A95E1F70E94D0200E94BE
+:10441000C220FF24F394D6C04D875E878D859E858C
+:104420000E948C25292F22952F7030E022303105F3
+:104430000CF0BCC09F7009F0B6C0805E883008F4F4
+:10444000C1C0C8010E941920E4CFC816D90608F4DB
+:1044500053C0F601E81BF90BCF01883C910508F425
+:1044600050C0F12C7C2DD98AC88A89890E9482206B
+:10447000EAEDF3E086E0DF011D928A95E9F70E94FC
+:10448000C220A0C0751314C0341312C0611110C033
+:104490008091DF03F8018583C8010E94192086E01E
+:1044A000EAEDF3E0DF011D928A95E9F7FE2C8AC060
+:1044B0004D875E878D859E856A8B0E9458206A890C
+:1044C000882309F4BECF662309F4BBCF2091DF0314
+:1044D000822F82958F7090E002970CF48ECF80919E
+:1044E000DA039091DB039A8389831B82DD82CC827D
+:1044F0002E83CE0101967FCF809590958C0D9D1DCA
+:10450000ACCFF62E662309F49CCF75132EC034135E
+:104510002CC02091DF0320FD1FC0822F82958F7059
+:10452000D9F0D80115962C9315978F3049F08F5FED
+:10453000982F9295907F822F8F70892B15968C9350
+:10454000C8010E94192086E0F801AAEDB3E00190AD
+:104550000D928A95E1F793CF86E0F801AAEDB3E0DA
+:1045600001900D928A95E1F72DC04D875E878D856C
+:104570009E850E945820811140CF8091DF03816089
+:104580008093DF03C8010E9419201CC0662309F430
+:1045900058CF4D875E878D859E850E945820882341
+:1045A00009F44FCF2ACF811148CF0CC024303105F8
+:1045B0000CF047CF9F7009F440CFF8019581907FB0
+:1045C00009F03BCF8F2D62960FB6F894DEBF0FBE79
+:1045D000CDBFDF91CF911F910F91FF90EF90DF90B2
+:1045E000CF9008951F93CF93DF93CDB7DEB72C976D
+:1045F0000FB6F894DEBF0FBECDBF4F8358876987D3
+:104600007A878B879C87CE0107960E942B2188236F
+:1046100069F08F8198852A853B85232BF1F19F3F97
+:1046200009F063C08F3F09F060C037C086E0FE012B
+:104630003796DE01119601900D928A95E1F76F8110
+:104640007885EA85FB85309741F17F3F11F46F3F14
+:1046500021F12091A90330E0C901019687709927C3
+:104660004091A80350E08417950709F447C0698377
+:104670007A83FD83EC8396E0929FD001939FB00DE7
+:104680001124A655BC4FFE01319601900D929A95CA
+:10469000E1F78093A9030E94A12016E08091A8036E
+:1046A0009091A9038917C1F1189FC0011124865563
+:1046B0009C4F0E942B21882379F1E091A8031E9F33
+:1046C000F0011124E655FC4F4081518162817381D4
+:1046D000848195810E9491208091A80390E00196A9
+:1046E000877099278093A803D9CF4F815885698512
+:1046F0007A858B859C850E949120CFCF0E94542083
+:104700001092A9031092A803EAEDF3E086E0DF011E
+:104710001D928A95E9F7C1CF2C960FB6F894DEBFAB
+:104720000FBECDBFDF91CF911F910895EF92FF9201
+:104730000F931F93CF93DF938C01009709F46CC004
+:10474000F12CEE24E394E8012196F801849184375A
+:1047500040F4843008F051C0813081F0823019F18A
+:104760005BC0853709F444C0A8F19CE7980F9037E7
+:1047700008F052C08F770E94711D41C00E5F1F4F1D
+:10478000FE01C49180E28C0F883048F4C7708E2DF2
+:1047900001C0880FCA95EAF70E94722614C08C2FB8
+:1047A0000E94A91C2DC00E5F1F4FFE01C49180E224
+:1047B0008C0F883058F4C7708E2D01C0880FCA95B1
+:1047C000EAF70E9478260E9499261AC08C2F0E9430
+:1047D000711D16C00E5F1F4FFE01C491CC2381F0E6
+:1047E0008FE99FE00197F1F700C00000C150F6CFBC
+:1047F0000E5F1F4FFE01F49003C00E94A91C8E01A2
+:104800008F2D882309F49FCFEFE9FFE03197F1F76F
+:1048100000C000008150F5CFDF91CF911F910F9123
+:10482000FF90EF90089508956093E4037093E5037B
+:104830008093E6039093E7030C9440200F931F931B
+:104840000091E4031091E5032091E6033091E70322
+:10485000DC01CB01802B912BA22BB32B8093E403A3
+:104860009093E503A093E603B093E7031F910F91A4
+:104870000C9440200F931F930091E4031091E503E3
+:104880002091E6033091E703DC01CB0180239123E3
+:10489000A223B3238093E4039093E503A093E6035C
+:1048A000B093E7031F910F910C9440200F931F9337
+:1048B0000091E4031091E5032091E6033091E703B2
+:1048C000DC01CB0180279127A227B3278093E40343
+:1048D0009093E503A093E603B093E7031F910F9134
+:1048E0000C9440201092E0031092E1031092E20336
+:1048F0001092E3030C94402041E050E060E070E04F
+:1049000004C0440F551F661F771F8A95D2F7409346
+:10491000E0035093E1036093E2037093E3030C948C
+:10492000402041E050E060E070E004C0440F551FBB
+:10493000661F771F8A95D2F78091E0039091E1037B
+:10494000A091E203B091E303482B592B6A2B7B2BF8
+:104950004093E0035093E1036093E2037093E30319
+:104960000C94402041E050E060E070E004C0440F4F
+:10497000551F661F771F8A95D2F740955095609511
+:1049800070958091E0039091E103A091E203B091D2
+:10499000E303482359236A237B234093E003509386
+:1049A000E1036093E2037093E3030C94402041E041
+:1049B00050E060E070E004C0440F551F661F771F91
+:1049C0008A95D2F78091E0039091E103A091E203F0
+:1049D000B091E303482759276A277B274093E003D8
+:1049E0005093E1036093E2037093E3030C9440203F
+:1049F0000F931F930091E0031091E1032091E203D4
+:104A00003091E303DC01CB01802B912BA22BB32B44
+:104A10008093E0039093E103A093E203B093E30358
+:104A20001F910F910C9440200F931F930091E0036E
+:104A30001091E1032091E2033091E303DC01CB010B
+:104A400080239123A223B3238093E0039093E10377
+:104A5000A093E203B093E3031F910F910C944020C5
+:104A60000F931F930091E0031091E1032091E20363
+:104A70003091E303DC01CB0180279127A227B327E4
+:104A80008093E0039093E103A093E203B093E303E8
+:104A90001F910F910C9440200895CF92DF92EF92D6
+:104AA000FF920F931F93CF93DF938C01C090E40389
+:104AB000D090E503E090E603F090E7038091E003F7
+:104AC0009091E103A091E203B091E303C82AD92AAF
+:104AD000EA2AFB2ACFE1D0E0D701C6010C2E04C0A0
+:104AE000B695A795979587950A94D2F780FF06C04B
+:104AF000B8018C2F0E94900A019721F4219760F74A
+:104B000080E001C08C2FDF91CF911F910F91FF901A
+:104B1000EF90DF90CF900895CF93DF93EC010E9448
+:104B20004D25BE010E94900ADF91CF910895CB01DF
+:104B30000E948C2508958091E8038595859585953B
+:104B400008958091E8038770089598E0899F900107
+:104B50001124262B2093E8030C9491242091E80340
+:104B6000809582238093E803982F977069F430E052
+:104B7000482F552747FD50952417350729F085956F
+:104B8000859585950C94B22408959091E8039770CB
+:104B900081E009F480E0089590911D02992321F0AD
+:104BA00090911E02911109C020911F0230912002A4
+:104BB000F90132969FEF40E01FC0982F9695969589
+:104BC00096959F3050F5E0911F02F0912002E90F79
+:104BD000F11D877021E030E0A90102C0440F551F8C
+:104BE0008A95E2F7CA019181892B818308959F3FBD
+:104BF00039F04F5F4E3041F051915813F8CF0DC04E
+:104C00005111F7CF942FF5CF9F3F39F0F901E90FFC
+:104C1000F11D97FDFA9582830895089590911D02E4
+:104C2000992321F090911E02911109C020911F0239
+:104C300030912002F9013296205F3F4F1FC0982F1C
+:104C40009695969596959F30F0F4E0911F02F0911D
+:104C50002002E90FF11D877021E030E0A90102C0B8
+:104C6000440F551F8A95E2F7CA01809591818923E7
+:104C7000818308953196E217F30729F09081981304
+:104C8000F9CF1082F7CF089581E090E0E0911F0204
+:104C9000F0912002E80FF91F1082019680319105F2
+:104CA000A9F708959091FC03892B8093FC03089544
+:104CB00080959091FC0389238093FC0308951092C2
+:104CC000FC0308959091FB03892B8093FB030895C7
+:104CD00080959091FB0389238093FB0308951092A4
+:104CE000FB0308959091FA03892B8093FA030895AA
+:104CF00080959091FA0389238093FA030895109286
+:104D0000FA0308958093E90308951092E903089542
+:104D100080911F0290912002FC0131969C01205F3E
+:104D20003F4F80E0919191118F5FE217F307D1F728
+:104D30000895E0911F02F09120028091FC0380838E
+:104D4000E0911F02F091200290818091FB03892B5A
+:104D50008083E0911F02F091200290818091FA03FC
+:104D6000892B80838091E903882361F0E0911F0201
+:104D7000F09120029081892B80830E9488268111E6
+:104D80001092E90380911F02909120020C947E1BE7
+:104D900020E0009739F0AC0141505109842395235C
+:104DA0002F5FF7CF822F089580912004843039F14E
+:104DB0001092FE0320E488E190E00FB6F894A895E5
+:104DC000809360000FBE2093600080E00E94120676
+:104DD00080E00E94C20C83B7817F846083BF83B769
+:104DE000816083BF7894889583B78E7F83BF88E185
+:104DF0000FB6F89480936000109260000FBE089583
+:104E0000089580E00E9412060E94D80C0E945B0D5B
+:104E10000E9400270E94D30D91E0811101C090E013
+:104E2000892F08950E94542080E00E9412060E945B
+:104E30008D2C0E94721B0C94C20C1F920F920FB605
+:104E40000F9211248F939F93AF93BF938091FE0392
+:104E5000811113C08091FF0390910004A09101047F
+:104E6000B09102044196A11DB11D8093FF03909360
+:104E70000004A0930104B0930204BF91AF919F91ED
+:104E80008F910F900FBE0F901F90189582E084BDF8
+:104E900093E095BD9AEF97BD80936E0008952FB76C
+:104EA000F8948091FF0390910004A0910104B091C7
+:104EB00002042FBF0895CF92DF92EF92FF920F93DB
+:104EC0001F932FB7F8944091FF0350910004609115
+:104ED0000104709102042FBF6A017B01EE24FF24BC
+:104EE0008C0120E030E0C016D106E206F30610F493
+:104EF000415051099A01281B390BC9011F910F918B
+:104F0000FF90EF90DF90CF9008951F920F920FB611
+:104F10000F9211248F939F93AF93BF938091FF03C0
+:104F200090910004A0910104B09102040196A11D8A
+:104F3000B11D8093FF0390930004A0930104B093EC
+:104F40000204BF91AF919F918F910F900FBE0F9070
+:104F50001F9018950E946F18F8942FEF87EA91E63A
+:104F6000215080409040E1F700C0000087E090EBC6
+:104F7000DC0180932A0490932B04A0932C04B0931B
+:104F80002D049CE088E10FB6F894A895809360000A
+:104F90000FBE90936000FFCF0E940E28811102C0C7
+:104FA0000E94EA270E9419288093FD030E94262868
+:104FB00090E090930F0480930E0487FB882780F97C
+:104FC00080931E020E941D28682F70E080E090E010
+:104FD0000C9414246DEE7EEF80E090E00E9440314E
+:104FE00060E082E090E00E942E3160E083E090E09B
+:104FF0000E942E3160E084E090E00E942E3160E05B
+:1050000085E090E00E942E3160E086E090E00E9412
+:105010002E316FEF87E090E00C942E3180E090E02D
+:105020000E94283121E08D3E9E4F09F020E0822F22
+:10503000089582E090E00C94203183E090E00C949D
+:105040002031682F83E090E00C942E3184E090E0D2
+:105050000C942031682F84E090E00C942E3186E08F
+:1050600090E00C942031682F86E090E00C942E3173
+:1050700087E090E00C942031682F87E090E00C945A
+:105080002E318091050480FF0BC06091240285E0E1
+:10509000689FB001112475956795759567952BC02C
+:1050A00081FF09C06091240285E0689FB00111244E
+:1050B0007595679520C082FF07C06091240285E046
+:1050C000689FB001112417C0909106049923D1F074
+:1050D00060912302961788F72091240285E0289F8B
+:1050E00090011124929FA001939F500D112470E014
+:1050F000CA010E9406316038710540F461157105DE
+:1051000039F002C065E070E0862F08958FE70895BA
+:1051100081E008958091050480FF08C0609122021B
+:1051200070E0759567957595679521C081FF06C0FC
+:105130006091220270E07595679519C082FF04C0E6
+:105140006091220270E010C0909106049923C1F092
+:10515000609121029617A0F780912202899FC001D9
+:10516000112470E00E9406316038710528F4611541
+:10517000710521F0862F08958FE7089581E0089545
+:1051800061E070E0F4CF803F21F40E9441288195D6
+:1051900004C0813F29F40E944128809309040895A6
+:1051A000823F21F40E944128819504C0833F29F465
+:1051B0000E944128809308040895893F19F40E94B1
+:1051C0008A2805C08A3F31F40E948A2881958093FD
+:1051D0000A0408958B3F21F40E948A28819504C017
+:1051E0008C3F29F40E948A2880930B040895843F01
+:1051F00021F480910704816017C0853F21F48091DC
+:105200000704826011C0863F21F480910704846006
+:105210000BC0873F21F480910704886005C0883F58
+:1052200031F48091070480618093070408958D3FD5
+:1052300021F48091050481600BC08E3F21F48091A0
+:105240000504826005C08F3F29F4809105048460C5
+:10525000809305040895803F39F48091090487FF05
+:105260006CC01092090469C0813F29F4809109043F
+:105270001816BCF362C090910804823F29F497FF8E
+:105280005CC01092080459C0833F19F41916CCF37E
+:1052900054C0893F41F480910A0418160CF04DC0A7
+:1052A00010920A044AC08A3F29F480910A0487FFB9
+:1052B00044C0F6CF8B3F39F480910B0487FF3DC08B
+:1052C00010920B043AC08C3F29F480910B041816FD
+:1052D000BCF333C0843F21F4809107048E7F17C054
+:1052E000853F21F4809107048D7F11C0863F21F412
+:1052F000809107048B7F0BC0873F21F480910704C6
+:10530000877F05C0883F31F4809107048F7E8093AA
+:10531000070413C08D3F21F4809105048E7F0BC0DC
+:105320008E3F21F4809105048D7F05C08F3F29F4C5
+:10533000809105048B7F809305048091080481117E
+:105340000EC08091090481110AC080910A04811164
+:1053500006C080910B04811102C0109206040895CA
+:1053600087E094E00E94891B0E944F2790930404D9
+:105370008093030408951F93CF93DF9380910304D8
+:10538000909104040E945B27AC019091060499233C
+:1053900021F02091250230E006C0209126028AE00B
+:1053A000289F900111244217530708F486C080916A
+:1053B0000804C0910904D0910A0410910B048111D2
+:1053C00007C0C11176C0D11174C0111172C075C06F
+:1053D0009F3F19F09F5F90930604181624F40E94D3
+:1053E0004128809308048091080487FF05C00E942B
+:1053F00041288195809308041C1624F40E944128BA
+:10540000809309048091090487FF05C00E94412808
+:1054100081958093090460910804662339F1C09155
+:105420000904CC2319F1772767FD7095872F972FF3
+:105430000E94282E23E333E343E35FE30E94382FE7
+:105440000E94F52D609308046C2F772767FD7095F7
+:10545000872F972F0E94282E23E333E343E35FE354
+:105460000E94382F0E94F52D609309041D1624F424
+:105470000E948A2880930A0480910A0487FF05C04D
+:105480000E948A28819580930A04111624F40E94B0
+:105490008A2880930B0480910B0487FF05C00E942B
+:1054A0008A28819580930B04DF91CF911F910C94F2
+:1054B000B0299F3F09F08ECF96CFDF91CF911F91FA
+:1054C0000895E7E0F4E085E0DF011D928A95E9F7B1
+:1054D00010920604109205040895833081F128F497
+:1054E000813059F08230D1F00895853009F449C0F7
+:1054F000B8F1863009F456C0089580912602262F0F
+:1055000030E0280F311D2F3F310524F4680F6093E0
+:10551000260208958FEF8093260208958091250238
+:10552000262F30E0280F311D2F3F310524F4680F5E
+:105530006093250208958FEF80932502089580914E
+:105540002402262F30E0280F311D2F3F310524F48F
+:10555000680F6093240208958FEF809324020895CA
+:1055600080912302262F30E0280F311D2F3F310577
+:1055700024F4680F6093230208958FEF8093230231
+:10558000089580912202262F30E0280F311D2F3FF1
+:10559000310524F4680F6093220208958FEF809301
+:1055A0002202089580912102262F30E0280F311D1C
+:1055B0002F3F310524F4680F6093210208958FEF87
+:1055C000809321020895833011F128F4813049F04D
+:1055D000823091F00895853081F120F18630C1F15B
+:1055E000089580912602681720F4861B8093260276
+:1055F000089510922602089580912502681720F4DC
+:10560000861B8093250208951092250208958091AB
+:105610002402681720F4861B8093240208951092B8
+:105620002402089580912302681720F4861B80933A
+:105630002302089510922302089580912202681790
+:1056400020F4861B8093220208951092220208956E
+:1056500080912102681720F4861B8093210208950F
+:105660001092210208950F931F93873208F048C0CB
+:105670008E3108F08DC0803109F477C008F587308D
+:1056800009F461C068F4863009F09DC08091FD0383
+:10569000817F8E7F8093FD0381E080930D0494C011
+:1056A0008B3009F489C08E3009F08DC08091FD03E4
+:1056B00082FB222720F991E0922790FB82F95EC0BD
+:1056C000863109F479C060F4813109F07CC00E9410
+:1056D000542090911E0281E0892780931E026CC0A5
+:1056E000893109F469C08B3109F06DC08091FD03E7
+:1056F00081FB222720F991E0922790FB81F93EC09F
+:10570000883309F459C050F4893209F457C08533FD
+:1057100009F454C0873209F451C055C0833409F4E8
+:105720004DC028F48A3308F44EC0895332C08834FF
+:1057300009F049C00E9454200E94030E0E94D40622
+:105740000E94AA2739C09091FD03892F809581700E
+:1057500080FB90F929F0966098609093FD0334C027
+:10576000997F977F9093FD0327C08091FD0383FB72
+:10577000222720F991E0922790FB83F98093FD0383
+:105780009923D1F08091FD0381608093FD0314C0C3
+:105790008D5141E050E060E070E08A019B0104C05F
+:1057A000000F111F221F331F8A95D2F7C901B801BC
+:1057B0000E9414240E94542081E006C061E070E041
+:1057C00080E090E0F5CF80E01F910F91089580E098
+:1057D000089580E008958E518A3030F4E82FF0E08B
+:1057E000E154FD4F8081089580E00895CF93C82F44
+:1057F00080910D04813069F018F08230C9F183C0C6
+:10580000E0911F02F09120028081823209F07DC078
+:1058100007C0E0911F02F09120028081823261F482
+:105820008C2F0E94E72B811104C08C2F0E94332BF8
+:105830001DC081E090E01AC08C2F0E94E92B8111DD
+:1058400014C0C43179F048F4CB3079F0C03109F09C
+:1058500060C082E080930D0408C0C93219F0C833DB
+:1058600021F057C010920D0454C081E0817053C0E4
+:10587000C93289F118F5C43171F1B0F4C73009F0BB
+:1058800046C08EE18093260282E3809325028AE05F
+:105890008093240284E18093230288E08093220293
+:1058A00088E28093210233C082EE8C0F863078F537
+:1058B0008C2F0E94EB2B80930C0429C0CE34E9F08E
+:1058C00020F4CB3421F56AE013C0C13579F0C2353C
+:1058D000F1F461E00DC080910C04882319F010925E
+:1058E0000C0415C081E080930D0415C061E006C072
+:1058F00080910C040E946D2A0AC06AE080910C0419
+:105900000E94E32A04C010920D0480E004C081E0EC
+:1059100002C080E0ABCFCF9108950E940E28811184
+:1059200002C00E94EA270E942F288093290480FF4A
+:1059300002C0869501C080E00C9412068091290473
+:10594000982F9695292F30E0233031054CF49F5F36
+:10595000990F8170892B8160809329040E943328DC
+:105960008091290486950C94120680912904982F21
+:10597000969591F09158990F8170892B8093290405
+:105980008E7F91E009F490E08091290490FB80F9EA
+:10599000809329040E9433288091290486950C94D1
+:1059A000120680912904982F909590FB80F980939E
+:1059B00029040E9433288091290480FF02C0869523
+:1059C00001C080E00C94120690912904892F8695DD
+:1059D0008F5F8F779170843028F4880F892B8093A4
+:1059E000290402C090932904809129048E7F91E0BC
+:1059F00009F490E08091290490FB80F980932904B8
+:105A00000E9433288091290486950C9412062091D7
+:105A10002904922F96958927982F990F822F8170AC
+:105A2000892B809329048E7F91E009F490E0809186
+:105A3000290490FB80F9809329040E9433288091E7
+:105A4000290486950C9412065058BB27AA270ED01D
+:105A5000D1C1C2D130F0C7D120F031F49F3F11F451
+:105A60001EF4B7C10EF4E095E7FB9FC1E92FD3D137
+:105A700080F3BA17620773078407950718F071F46B
+:105A80009EF5EBC10EF4E0950B2EBA2FA02D0B0165
+:105A9000B90190010C01CA01A0011124FF27591B73
+:105AA00099F0593F50F4503E68F11A16F040A22F79
+:105AB000232F342F4427585FF3CF469537952795EA
+:105AC000A795F0405395C9F77EF41F16BA0B620BE9
+:105AD000730B840BBAF09150A1F0FF0FBB1F661F30
+:105AE000771F881FC2F70EC0BA0F621F731F841F73
+:105AF00048F4879577956795B795F7959E3F08F099
+:105B0000B3CF9395880F08F09927EE0F9795879557
+:105B1000089527D108F481E008950CD06BC163D1BA
+:105B200040F05AD130F021F45F3F19F03EC15111DD
+:105B300095C14FC170D198F39923C9F35523B1F39F
+:105B4000951B550BBB27AA2762177307840738F0EC
+:105B50009F5F5F4F220F331F441FAA1FA9F333D04B
+:105B60000E2E3AF0E0E830D091505040E695001CFF
+:105B7000CAF729D0FE2F27D0660F771F881FBB1FBB
+:105B8000261737074807AB07B0E809F0BB0B802D95
+:105B9000BF01FF2793585F4F2AF09E3F510568F0E1
+:105BA00004C15CC15F3FECF3983EDCF386957795CA
+:105BB0006795B795F7959F5FC9F7880F911D9695E3
+:105BC000879597F90895E1E0660F771F881FBB1F3F
+:105BD000621773078407BA0720F0621B730B840BEC
+:105BE000BA0BEE1F88F7E095089504D06894B111C0
+:105BF00035C1089518D188F09F5790F0B92F992793
+:105C0000B751A0F0D1F0660F771F881F991F1AF0C7
+:105C1000BA95C9F712C0B13081F01FD1B1E0089533
+:105C20001CC1672F782F8827B85F39F0B93FCCF3B4
+:105C3000869577956795B395D9F73EF490958095BD
+:105C4000709561957F4F8F4F9F4F0895E89409C0DD
+:105C500097FB3EF490958095709561957F4F8F4F9F
+:105C60009F4F9923A9F0F92F96E9BB279395F695B5
+:105C7000879577956795B795F111F8CFFAF4BB0F33
+:105C800011F460FF1BC06F5F7F4F8F4F9F4F16C097
+:105C9000882311F096E911C0772321F09EE8872F21
+:105CA000762F05C0662371F096E8862F70E060E0DD
+:105CB0002AF09A95660F771F881FDAF7880F969556
+:105CC000879597F9089588D018F011F08CD038F4A2
+:105CD00080C0C4C0E92F9FD0B0F35523C9F3E7FBC0
+:105CE0006217730784079507A8F199F3E92FFF2737
+:105CF00088232AF03197660F771F881FDAF7952FD0
+:105D00005527442332F091505040220F331F441F37
+:105D1000D2F7BB27E91BF50B621B730B840BB10990
+:105D2000C1F222F4620F731F841FB11D31972AF054
+:105D3000660F771F881FBB1FEFCF915050405AF05E
+:105D400041F0882332F0660F771F881F9150504032
+:105D5000C1F7939530C08695779567959F5FD9F782
+:105D6000F8CF990F0008550FAA0BE0E8FEEF1616C2
+:105D70001706E807F907C0F012161306E407F5073F
+:105D800098F0621B730B840B950B39F40A2661F0B3
+:105D9000232B242B252B21F408950A2609F4A14056
+:105DA000A6958FEF811D811D089597F99F6780E863
+:105DB00070E060E008959F3F31F0915020F48795A6
+:105DC00077956795B795880F911D9695879597F963
+:105DD00008959FEF80EC089500240A941616170684
+:105DE00018060906089500240A94121613061406CC
+:105DF00005060895092E0394000C11F4882352F02F
+:105E0000BB0F40F4BF2B11F460FF04C06F5F7F4FE6
+:105E10008F4F9F4F089557FD9058440F551F59F0CD
+:105E20005F3F71F04795880F97FB991F61F09F3F87
+:105E300079F087950895121613061406551FF2CFB0
+:105E40004695F1DF08C0161617061806991FF1CF00
+:105E500086957105610508940895E894BB27662727
+:105E60007727CB0197F908957CDF08F48FEF089529
+:105E70000BD0C0CFB1DF28F0B6DF18F0952309F0C2
+:105E800094CFA7CF1124EACFC6DFA0F3959FD1F31B
+:105E9000950F50E0551F629FF001729FBB27F00DD8
+:105EA000B11D639FAA27F00DB11DAA1F649F66272D
+:105EB000B00DA11D661F829F2227B00DA11D621F7C
+:105EC000739FB00DA11D621F839FA00D611D221F36
+:105ED000749F3327A00D611D231F849F600D211D1A
+:105EE000822F762F6A2F11249F5750408AF0E1F0BD
+:105EF00088234AF0EE0FFF1FBB1F661F771F881F06
+:105F000091505040A9F79E3F510570F04ECFA6CF5B
+:105F10005F3FECF3983EDCF3869577956795B795F0
+:105F2000F795E7959F5FC1F7FE2B880F911D96951A
+:105F3000879597F90895FA01EE0FFF1F3096210516
+:105F4000310599F16115710561F48038BFE39B0754
+:105F500049F168949038810561F08038BFEF9B0764
+:105F600041F0992342F5FF3FE1053105210511F18B
+:105F7000E8940894E795D901AA2329F4AB2FBE2F02
+:105F8000F85FD0F310C0FF5F70F4A695E0F7F73923
+:105F900050F019F0FF3A38F49F779F930CD00F9090
+:105FA00007FC905808953EF014CF60E070E080E860
+:105FB0009FE308954FE79F775F934F933F932F930E
+:105FC0009ED02F913F914F915F9152DF05C019F400
+:105FD0000EF0EBCE42CFFDCE26DFC8F39638C0F7E9
+:105FE00007F80F92E8942BE33AEA48EB5FE74EDFBD
+:105FF0000F920F920F924DB75EB70F92C0D0EAE0AA
+:10600000F1E016D04F915F91EF91FF91E595EE1F72
+:10601000FF1F49F0FE57E0684427EE0F441FFA9532
+:10602000E1F74195550B32D00F9007FE26C0089539
+:10603000DF93CF931F930F93FF92EF92DF927B0139
+:106040008C01689405C0DA2EEF011EDFFE01E89492
+:10605000A5912591359145915591AEF3EF0106DD5E
+:10606000FE019701A801DA9479F7DF90EF90FF9095
+:106070000F911F91CF91DF9108959B01AC0160E0DA
+:1060800070E080E89FE349CD90CE95CECCDEE8F37A
+:106090009923D9F3940F511DBBF39150504094F0C4
+:1060A00059F0882332F0660F771F881F91505040B7
+:1060B000C1F79E3F510544F7880F911D969587952E
+:1060C00097F908955F3FACF0983E9CF0BB2786950A
+:1060D00077956795B79508F4B1609395C1F7BB0FB5
+:1060E00058F711F460FFE8CF6F5F7F4F8F4F9F4FDE
+:1060F000E3CFB4CE0EF05FCE6CCE689456CE93DE76
+:10610000C8F39923D1F3C6F3DF93CF931F930F9373
+:10611000FF92C92FDD2788232AF02197660F771F6A
+:10612000881FDAF720E030E040E85FEB9FE3883932
+:1061300020F0803E30F021968F7787DCE2E3F1E0BB
+:1061400003C083DCEFE5F1E073DF8B01BE01EC01FE
+:10615000FB2E6F5771097595771F880B990B78DDAA
+:1061600028E132E741E35FE38FDEAF2D9801AE0116
+:10617000FF900F911F91CF91DF9178DC3BCEFA0118
+:10618000DC01AA0FBB1F9B01AC01BF5728F42227DB
+:106190003327442750781FC0B75188F4AB2F002411
+:1061A000469537952795011CA395D2F3002069F0F9
+:1061B000220F331F441FB395DAF30DD045CC613065
+:1061C0007105A0E88A07B94630F49B01AC01662747
+:1061D000772788279078309621F020833183428377
+:1061E00053830895AA1BBB1B51E107C0AA1FBB1F05
+:1061F000A617B70710F0A61BB70B881F991F5A9553
+:10620000A9F780959095BC01CD01089597FB072EC5
+:1062100016F4009407D077FD09D00E94F23007FCF5
+:1062200005D03EF4909581959F4F089570956195A6
+:106230007F4F0895EE0FFF1F0590F491E02D099414
+:10624000F999FECF92BD81BDF89A992780B508953E
+:10625000A8E1B0E042E050E00C944831262FF999D3
+:10626000FECF92BD81BDF89A019700B4021639F0B5
+:106270001FBA20BD0FB6F894FA9AF99A0FBE089586
+:106280000196272F0E942F310C942E31DC01CB0177
+:10629000FC01F999FECF06C0F2BDE1BDF89A319636
+:1062A00000B40D9241505040B8F70895F894FFCFD4
+:1062B00000005C440000004148F1764400000041C9
+:1062C0005C978A44000000411FD5924400000041C1
+:1062D00052D0A444000000415CFFB84400000041DB
+:1062E0000AA7CF44000000410000DC440000004148
+:1062F00052D02445000000410000DC440000004171
+:1063000052D0A444000040410AA7CF4400000041FD
+:106310000000DC440000004100000000000080405C
+:1063200052D02445000040410000000000008040A1
+:106330000AA74F45000040410AA7CF440000004192
+:106340000000DC440000004100000000000080402C
+:1063500052D02445000000410000000000008040B1
+:106360005CFF384500000041000000000000804054
+:1063700052D02445000000410AA7CF44000000414C
+:106380000000DC44000000410000000000008040EC
+:1063900052D024450000804148F176440000A041DD
+:1063A000F6F0F6440000004152909B440000A041EA
+:1063B000F6F0F64400000041640007000CFF000006
+:1063C000003F647A140815E514B1147D140101EA44
+:1063D000032808140A321E0002040507090B0C0EDC
+:1063E0001011131517181A1C1D1F212324262829E4
+:1063F0002B2D2F3032343537393B1F0F03764F5F4B
+:106400006F7F4969437929595363393149803F5D29
+:106410008B803FF8BF803FCAE1803F73ED803FCA69
+:10642000E1803FF8BF803F5D8B803F3149803F0076
+:1064300000803FF16D7F3F75EA7E3F4C827E3F8357
+:106440003F7E3F84287E3F833F7E3F4C827E3F7568
+:10645000EA7E3FF16D7F3F0000803F404D36391DA1
+:106460000BD00A9A0A610AF4090D0A260A3F0A01AA
+:0A64700002030405060708090000F6
+:00000001FF
diff --git a/keyboards/preonic/keymaps/default/keymap.c b/keyboards/preonic/keymaps/default/keymap.c new file mode 100644 index 0000000000..4c967d73ed --- /dev/null +++ b/keyboards/preonic/keymaps/default/keymap.c @@ -0,0 +1,278 @@ +#include "preonic.h" +#include "action_layer.h" +#include "eeconfig.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#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. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _ADJUST 16 + +// Macro name shortcuts +#define QWERTY M(_QWERTY) +#define COLEMAK M(_COLEMAK) +#define DVORAK M(_DVORAK) +#define LOWER M(_LOWER) +#define RAISE M(_RAISE) +#define M_BL 5 + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +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 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { + {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_DEL}, + {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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = { + {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_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL}, + {KC_ESC, 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 }, + {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | " | , | . | P | Y | F | G | C | R | L | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = { + {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_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL}, + {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT }, + {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {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_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 / | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {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_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Musoff|Mus on| | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, + {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +} + + +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +#ifdef AUDIO_ENABLE +float tone_startup[][2] = { + {NOTE_B5, 20}, + {NOTE_B6, 8}, + {NOTE_DS6, 20}, + {NOTE_B6, 8} +}; + +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); + +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); + +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); +#endif + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + break; + case _COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + break; + case _DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + 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); + } + 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); + } + break; + case M_BL: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif +} + +#ifdef AUDIO_ENABLE + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} + +void shutdown_user() +{ + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +void music_on_user(void) +{ + music_scale_user(); +} + +void music_scale_user(void) +{ + PLAY_NOTE_ARRAY(music_scale, false, 0); +} + +#endif
\ No newline at end of file diff --git a/keyboards/preonic/preonic.c b/keyboards/preonic/preonic.c new file mode 100644 index 0000000000..773451bf0c --- /dev/null +++ b/keyboards/preonic/preonic.c @@ -0,0 +1,97 @@ +#include "preonic.h" + +__attribute__ ((weak)) +void matrix_init_user(void) { + +}; + +__attribute__ ((weak)) +void matrix_scan_user(void) { + +}; + +__attribute__ ((weak)) +bool process_action_user(keyrecord_t *record) { + return true; +}; + +void matrix_init_kb(void) { + #ifdef BACKLIGHT_ENABLE + backlight_init_ports(); + #endif + + // Turn status LED on + DDRE |= (1<<6); + PORTE |= (1<<6); + + matrix_init_user(); +}; + +void matrix_scan_kb(void) { + matrix_scan_user(); +}; + +bool process_action_kb(keyrecord_t *record) { + return process_action_user(record); +} + +#ifdef BACKLIGHT_ENABLE +#define CHANNEL OCR1C + +void backlight_init_ports() +{ + + // Setup PB7 as output and output low. + DDRB |= (1<<7); + PORTB &= ~(1<<7); + + // Use full 16-bit resolution. + ICR1 = 0xFFFF; + + // I could write a wall of text here to explain... but TL;DW + // Go read the ATmega32u4 datasheet. + // And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on + + // Pin PB7 = OCR1C (Timer 1, Channel C) + // Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0 + // (i.e. start high, go low when counter matches.) + // WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0 + // Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1 + + TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010; + TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001; + + backlight_init(); +} + +void backlight_set(uint8_t level) +{ + if ( level == 0 ) + { + // Turn off PWM control on PB7, revert to output low. + TCCR1A &= ~(_BV(COM1C1)); + CHANNEL = 0x0; + // Prevent backlight blink on lowest level + PORTB &= ~(_BV(PORTB7)); + } + else if ( level == BACKLIGHT_LEVELS ) + { + // Prevent backlight blink on lowest level + PORTB &= ~(_BV(PORTB7)); + // Turn on PWM control of PB7 + TCCR1A |= _BV(COM1C1); + // Set the brightness + CHANNEL = 0xFFFF; + } + else + { + // Prevent backlight blink on lowest level + PORTB &= ~(_BV(PORTB7)); + // Turn on PWM control of PB7 + TCCR1A |= _BV(COM1C1); + // Set the brightness + CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); + } +} + +#endif diff --git a/keyboards/preonic/preonic.h b/keyboards/preonic/preonic.h new file mode 100644 index 0000000000..2b605f3742 --- /dev/null +++ b/keyboards/preonic/preonic.h @@ -0,0 +1,41 @@ +#ifndef PREONIC_H +#define PREONIC_H + +#include "quantum.h" + +#define PREONIC_MIT( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \ + k40, k41, k42, k43, k44, k45, k47, k48, k49, k4a, k4b \ +) \ +{ \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \ + { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \ + { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \ + { k30, k31, k32, k33, k34, k35, k35, k37, k38, k39, k3a, k3b }, \ + { k40, k41, k42, k43, k44, k45, k45, k47, k48, k49, k4a, k4b } \ +} + +#define PREONIC_GRID( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \ + k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b \ +) \ +{ \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \ + { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \ + { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \ + { k30, k31, k32, k33, k34, k35, k35, k37, k38, k39, k3a, k3b }, \ + { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b } \ +} + +void matrix_init_user(void); +void matrix_scan_user(void); +bool process_action_kb(keyrecord_t *record); +void backlight_init_ports(void); + +#endif |