summaryrefslogtreecommitdiff
path: root/keyboards/alps64
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/alps64')
-rw-r--r--keyboards/alps64/Makefile70
-rw-r--r--keyboards/alps64/alps64.c43
-rw-r--r--keyboards/alps64/alps64.h40
-rw-r--r--keyboards/alps64/config.h75
-rw-r--r--keyboards/alps64/keymaps/default/compiled.hex1373
-rw-r--r--keyboards/alps64/keymaps/default/keymap.c12
-rw-r--r--keyboards/alps64/led.c34
-rw-r--r--keyboards/alps64/matrix.c197
8 files changed, 1844 insertions, 0 deletions
diff --git a/keyboards/alps64/Makefile b/keyboards/alps64/Makefile
new file mode 100644
index 0000000000..d8325e6c89
--- /dev/null
+++ b/keyboards/alps64/Makefile
@@ -0,0 +1,70 @@
+
+
+# Target file name (without extension).
+
+# project specific files
+SRC = led.c
+
+# MCU name
+MCU = atmega32u2
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes # Console for debug(+400)
+COMMAND_ENABLE ?= yes # Commands for debug and configuration
+#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
+
+ifndef QUANTUM_DIR
+ include ../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/alps64/alps64.c b/keyboards/alps64/alps64.c
new file mode 100644
index 0000000000..dde10c11e3
--- /dev/null
+++ b/keyboards/alps64/alps64.c
@@ -0,0 +1,43 @@
+/*
+Copyright 2012,2013 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/>.
+*/
+#include "quantum.h"
+
+#define LED_ON() do { DDRC |= (1<<5); PORTC |= (1<<5); } while (0)
+#define LED_OFF() do { DDRC &= ~(1<<5); PORTC &= ~(1<<5); } while (0)
+#define LED_TGL() do { DDRC |= (1<<5); PINC |= (1<<5); } while (0)
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+
+}
+
+void matrix_init_kb(void) {
+ LED_ON();
+ _delay_ms(500);
+ LED_OFF();
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
diff --git a/keyboards/alps64/alps64.h b/keyboards/alps64/alps64.h
new file mode 100644
index 0000000000..f265c3358e
--- /dev/null
+++ b/keyboards/alps64/alps64.h
@@ -0,0 +1,40 @@
+/*
+Copyright 2012,2013 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 ALPS64_H
+#define ALPS64_H
+
+#include "quantum.h"
+
+/* Alps64 keymap definition macro */
+#define KEYMAP( \
+ K36, K37, K46, K47, K56, K57, K66, K67, K76, K77, K06, K07, K17, K26, K27, \
+ K34, K35, K44, K45, K54, K55, K64, K65, K75, K05, K15, K16, K25, K24, \
+ K32, K33, K43, K52, K53, K63, K73, K74, K03, K04, K13, K14, K23, \
+ K31, K41, K42, K51, K61, K62, K71, K72, K01, K02, K11, K12, K21, K22, \
+ K30, K40, K50, K60, K70, K00, K10, K20 \
+) { \
+ { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
+ { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
+ { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
+ { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
+ { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47 }, \
+ { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
+ { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
+ { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 } \
+}
+
+#endif
diff --git a/keyboards/alps64/config.h b/keyboards/alps64/config.h
new file mode 100644
index 0000000000..858a82ecdd
--- /dev/null
+++ b/keyboards/alps64/config.h
@@ -0,0 +1,75 @@
+/*
+Copyright 2015 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 0x6464
+#define DEVICE_VER 0x0001
+#define MANUFACTURER TMK
+#define PRODUCT Alps64
+#define DESCRIPTION TMK keyboard firmware for Alps64
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 8
+
+#define MATRIX_COL_PINS { B0, B1, B2, B3, B4, B5, B6, B7 }
+#define MATRIX_ROW_PINS { D0, D1, D2, D3, D4, D5, D6, C2 }
+#define UNUSED_PINS
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 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)) \
+)
+
+
+
+/*
+ * 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/alps64/keymaps/default/compiled.hex b/keyboards/alps64/keymaps/default/compiled.hex
new file mode 100644
index 0000000000..ef43410f24
--- /dev/null
+++ b/keyboards/alps64/keymaps/default/compiled.hex
@@ -0,0 +1,1373 @@
+:100000000C940B060C944F060C944F060C944F0660
+:100010000C944F060C944F060C944F060C944F060C
+:100020000C944F060C944F060C944F060C94D5106C
+:100030000C9483110C94E81E0C944F060C944F06FC
+:100040000C944F060C944F060C944F060C94501FC2
+:100050000C944F060C944F060C944F060C944F06CC
+:100060000C944F060C944F060C944F060C944F06BC
+:100070000C944F06F01112120013121200135712B3
+:100080007A120013CF12E2120C160C163B163B1616
+:100090007A169A16CA17CA17A516CA1755175517EA
+:1000A000BB17CA17CA17C4176217621762176217FD
+:1000B0006217621762176217621762176217621778
+:1000C00062176217621762177217801787178E17E9
+:1000D0009817E600100036000E000F0012002700EF
+:1000E0002D00E700370038003300340013002F00E4
+:1000F0002E00E400E5002900280031003000320025
+:100100002A00E000E100390004002B001400350053
+:100110001E00E30064001D0016001A0008001F0006
+:100120002000E2001B000700090015001700210055
+:1001300022002C00060019000A001C0018002300F1
+:1001400024006500050011000B000D000C002500C7
+:1001500026000A44454255473A20656E61626C6547
+:10016000642E0A005374617465206F6620726F7785
+:100170002025583A2025303136620A0048756D61D5
+:100180006E2D7265616461626C65206D6174726967
+:10019000782073746174653A0D0A004465626F7566
+:1001A0006E63696E672064656C61792072656D614C
+:1001B000696E696E673A2025580A005B735D004BD3
+:1001C0006579626F6172642073746172742E0A00C3
+:1001D0005B525D005B445D005B435D000E034100CC
+:1001E0006C007000730036003400000008035400F7
+:1001F0004D004B00000004030904090274000401CF
+:1002000000A0FA0904000001030101000921110105
+:100210000001223F000705810308000A09040100CC
+:100220000103010200092111010001224D0007050F
+:10023000820308000A0904020001030000000921EA
+:10024000110100012236000705830308000A090492
+:100250000300020300000009211101000122200017
+:100260000705840320000107050403200001120193
+:10027000100100000008EDFE6464010001020001AD
+:100280000631FF0974A1010975150025FF95207538
+:100290000881020976150025FF952075089102C096
+:1002A00005010980A101850216010026B7001A0187
+:1002B000002AB700751095018100C0050C0901A145
+:1002C000018503160100269C021A01002A9C027572
+:1002D0001095018100C005010902A1010901A100D9
+:1002E00005091901290515002501950575018102EA
+:1002F0009501750381010501093009311581257FBB
+:1003000095027508810609381581257F95017508C4
+:100310008106050C0A38021581257F950175088133
+:1003200006C0C005010906A101050719E029E71566
+:100330000025019508750181029501750881010567
+:10034000081901290595057501910295017503911B
+:10035000010507190029FF150025FF95067508817D
+:1003600000C00A002530325820006B6579626F6149
+:1003700072645F7265706F72743A20004B657962C7
+:100380006F617264204C4544732073746174653AE4
+:100390002025780A00646F6E652E0A00626F6F6711
+:1003A0006D61676963207363616E3A202E2E2E2083
+:1003B00000290A002575002F002575005D280025FD
+:1003C00064002000256400200025640020002564CE
+:1003D000007C0025303258006D6F7573656B657950
+:1003E000205B62746E7C782079207620685D2872AC
+:1003F00065702F61636C293A205B006D6B5F7768D5
+:1004000065656C5F74696D655F746F5F6D617820A1
+:100410003D2025640A006D6B5F776865656C5F6DD4
+:1004200061785F7370656564203D2025640A006D06
+:100430006B5F74696D655F746F5F6D6178203D20DF
+:1004400025640A006D6B5F6D61785F73706565642C
+:10045000203D2025640A006D6B5F696E74657276BD
+:10046000616C203D2025640A006D6B5F64656C61E2
+:1004700079203D2025640A006D6B5F776865656CA7
+:100480005F74696D655F746F5F6D6178203D2025D5
+:10049000640A006D6B5F776865656C5F6D61785F9E
+:1004A0007370656564203D2025640A006D6B5F7480
+:1004B000696D655F746F5F6D6178203D2025640A0A
+:1004C000006D6B5F6D61785F7370656564203D20C2
+:1004D00025640A006D6B5F696E74657276616C20CD
+:1004E0003D2025640A006D6B5F64656C6179203D79
+:1004F0002025640A000A00257500363A20776865D1
+:10050000656C5F74696D655F746F5F6D61783A20CB
+:10051000000A00257500353A20776865656C5F6DC7
+:1005200061785F73706565643A20000A0025750084
+:10053000343A2074696D655F746F5F6D61783A203D
+:10054000000A00257500333A206D61785F7370658D
+:1005500065643A20000A00257500323A20696E74FD
+:10056000657276616C286D73293A20000A00257542
+:1005700000313A2064656C6179282A31306D732925
+:100580003A20000A092D2056616C756573202D0AEA
+:10059000004D3E004D25643E20003F0073657420F1
+:1005A00064656661756C740A00433E200077686577
+:1005B00072652064656C74613A20637572736F7242
+:1005C0003D25642C20776865656C3D25640A53657C
+:1005D0006520687474703A2F2F656E2E77696B6989
+:1005E00070656469612E6F72672F77696B692F4D33
+:1005F0006F7573655F6B6579730A000A092D204D6D
+:100600006F7573656B6579202D0A4553432F713AD9
+:1006100009717569740A313A0964656C6179282A2F
+:1006200031306D73290A323A09696E7465727661E8
+:100630006C286D73290A333A096D61785F737065B0
+:1006400065640A343A0974696D655F746F5F6D6142
+:10065000780A353A09776865656C5F6D61785F7314
+:10066000706565640A363A09776865656C5F746918
+:100670006D655F746F5F6D61780A0A703A09707218
+:10068000696E742076616C7565730A643A097365E6
+:10069000742064656661756C74730A75703A092B11
+:1006A000310A646F776E3A092D310A706775703AB6
+:1006B000092B31300A7067646F776E3A092D31303B
+:1006C0000A0A7370656564203D2064656C7461205E
+:1006D0002A206D61785F7370656564202A20287216
+:1006E0006570656174202F2074696D655F746F5F3C
+:1006F0006D6178290A003F004D3E2000433E2000F6
+:100700004C25640A0074696D65725F636F756E7461
+:100710003A202530346C580A006B6579626F61723B
+:10072000645F69646C653A2025580A006B657962DC
+:100730006F6172645F70726F746F636F6C3A2025C3
+:10074000580A00686F73745F6B6579626F617264D9
+:100750005F6C65647328293A2025580A000A092D20
+:1007600020537461747573202D0A004743433A2067
+:10077000342E392E32204156522D4C4942433A20D4
+:10078000312E382E31204156525F415243483A2093
+:1007900061767233350A004F5054494F4E533A2018
+:1007A0004C55464120424F4F544D41474943204DFF
+:1007B0004F5553454B45592045585452414B455987
+:1007C00020434F4E534F4C4520434F4D4D414E44D7
+:1007D00020343039360A004255494C443A203136EB
+:1007E00037313865662D6469727479202832333A5E
+:1007F00030373A3132204A756E202039203230317C
+:1008000036290A005649443A20307846454544285E
+:10081000544D4B29205049443A20307836343634F0
+:1008200028416C7073363429205645523A2030786E
+:10083000303030310A00444553433A20544D4B2068
+:100840006B6579626F617264206669726D7761723F
+:100850006520666F7220416C707336340A000A0995
+:100860002D2056657273696F6E202D0A000A092DBE
+:1008700020436F6E736F6C65202D0A4553432F71B3
+:100880003A09717569740A6D3A096D6F7573656B14
+:1008900065790A000A092D204D61676963202D0AD8
+:1008A000443A094465627567204D657373616765F5
+:1008B00020546F67676C650A583A094D6174726914
+:1008C00078204465627567204D6F646520546F67BA
+:1008D000676C65202D2053686F77206B6579707287
+:1008E000657373657320696E206D61747269782019
+:1008F000677269640A4B3A094B6579626F61726489
+:1009000020446562756720546F67676C65202D20F1
+:1009100053686F77206B65797072657373207265A9
+:10092000706F72740A4D3A094465627567204D6FA5
+:1009300075736520546F67676C650A563A0956658A
+:100940007273696F6E0A533A095374617475730A4E
+:10095000433A09416374697661746520436F6E732D
+:100960006F6C65204D6F64650A46312D4631303A13
+:100970000953776974636820746F204C61796572DC
+:1009800020302D392028463130203D204C30290A96
+:10099000302D393A0953776974636820746F204C9D
+:1009A0006179657220302D390A4553433A095377EE
+:1009B0006974636820746F204C61796572203020FF
+:1009C00028616C7465726E617465206B6579203185
+:1009D000290A47524156453A09537769746368209A
+:1009E000746F204C6179657220302028616C7465C9
+:1009F000726E617465206B65792032290A50415509
+:100A000053453A094A756D7020746F20426F6F74B8
+:100A10006C6F6164657220285265736574290A459C
+:100A20003A095072696E7420454550524F4D20531B
+:100A3000657474696E67730A000A002575002E6E6E
+:100A40006B726F3A20000A002575002E7377617073
+:100A50005F6261636B736C6173685F6261636B7328
+:100A6000706163653A20000A002575002E73776176
+:100A7000705F67726176655F6573633A20000A0094
+:100A80002575002E6E6F5F6775693A20000A002594
+:100A900075002E737761705F72616C745F72677539
+:100AA000693A20000A002575002E737761705F6C2B
+:100AB000616C745F6C6775693A20000A00257500E7
+:100AC0002E636170736C6F636B5F746F5F636F6EC7
+:100AD00074726F6C3A20000A002575002E737761DE
+:100AE000705F636F6E74726F6C5F636170736C6F55
+:100AF000636B3A20000A0025303258006B65796D2F
+:100B000061705F636F6E6669672E7261773A20006D
+:100B10000A002575002E6D6F7573653A20000A0076
+:100B20002575002E6B6579626F6172643A20000A48
+:100B3000002575002E6D61747269783A20000A00F4
+:100B40002575002E656E61626C653A20000A0025ED
+:100B50003032580064656275675F636F6E666967FF
+:100B60002E7261773A20000A00257500646566617F
+:100B7000756C745F6C617965723A20003F000A6D94
+:100B80006F7573653A206F66660A000A6D6F75733C
+:100B9000653A206F6E0A000A6B6579626F61726454
+:100BA0003A206F66660A000A6B6579626F6172644B
+:100BB0003A206F6E0A000A6D61747269783A206F8C
+:100BC00066660A000A6D61747269783A206F6E0A6F
+:100BD000000A64656275673A206F66660A000A64F7
+:100BE000656275673A206F6E0A000A0A4A756D7071
+:100BF000696E6720746F20626F6F746C6F616465DB
+:100C0000722E2E2E2000433E20006565636F6E66B7
+:100C100069673A0A000011241FBECFEFD4E0DEBF9F
+:100C2000CDBF04B603FE24C08091E8019091E90194
+:100C3000A091EA01B091EB018730904BA740B04BF7
+:100C4000B9F41092E8011092E9011092EA011092B1
+:100C5000EB0114BE84B7877F84BF88E10FB6F89498
+:100C600080936000109260000FBEE0E0F8E3099509
+:100C700011E0A0E0B1E0E2E6F5E502C005900D92DA
+:100C8000A234B107D9F711E0A2E4B1E001C01D928E
+:100C9000A83EB107E1F70E942D0E0C94AF2A0C94E8
+:100CA0000000FF93EF93E0914201F09143013097F0
+:100CB00009F00995EF91FF910895FC01859180302D
+:100CC00011F0EFDFFBCF0895FF27E0E230E247FFAE
+:100CD0000CC0419597FF09C0EDE260957095809535
+:100CE0009095611D711D811D911D27FF02C02195E9
+:100CF00030E350E2AA27660F771F881F991FAA1FAB
+:100D0000A41710F0A41B63955A95A9F7AA3008F010
+:100D1000A95FA05DAF93F3956115710581059105FC
+:100D200041F7ED3211F4EF93F395F21718F43F9376
+:100D3000F395FBCF8F91B5DFFA95E1F70895E9912F
+:100D4000F9918591803021F0853219F0AADFF9CF31
+:100D5000089520E0E89455915532C1F3503311F4D1
+:100D6000689455915A3348F4505390F3220F022E51
+:100D7000220F220F200D250FF4CF0EF4219589911B
+:100D80009991533619F3533729F1533559F1BC0171
+:100D900088279927E8945C3621F489919991689481
+:100DA0005591543639F446EF7EF077FF0DC08FEF42
+:100DB0009FEF0AC055374AE039F0583540E121F03D
+:100DC000523642E009F00895FF93EF937DDFEF91F3
+:100DD000FF91B7CFFF93EF93FC0181918030B9F37E
+:100DE00060DFFBCFFF93EF9368DFF1CFDF93CF930B
+:100DF000CDB7DEB72596A3DFCF91DF91089581FFB0
+:100E000003C03D9A459A08953D98459808950895E0
+:100E100008953D9A459A2FEF89E698E12150804048
+:100E20009040E1F700C000003D9845980C940707FA
+:100E30000C94080781E0089581E008950C941C0744
+:100E400008950F931F93CF93DF938C01FC01C08112
+:100E5000D181CE010E94411DBE010E94D107EC014B
+:100E6000B8010E941E07882309F48DC0F801828111
+:100E7000882309F44AC080914F0181111FC0C431F9
+:100E8000F0E5DF0709F051C00E94200781E0809360
+:100E90004F010E941A1F90934E0180934D011092B2
+:100EA0004601109248011092470110924A01109297
+:100EB000490110924C0110924B0165C080914D0187
+:100EC00090914E010E94261F883C910570F48091FC
+:100ED0004601E82FF0E0EE0FFF1FE95BFE4FD183E4
+:100EE000C0838F5F809346014EC0C43880E5D80729
+:100EF00021F0C538D04501F13AC0F801828188233C
+:100F000041F01092440182E01EC0C438E0E5DE07E3
+:100F100059F580914401811106C086E20E94B01407
+:100F200086E20E94781582E01CC0C438F0E5DF0735
+:100F300041F3C538D045D9F4F8018281882331F0D6
+:100F40001092450180E20E94C7151DC080914501A5
+:100F5000811106C087E20E94B01487E20E947815D2
+:100F600080E20E94CE150FC0C538D04529F381E03C
+:100F70008093440180934501C801DF91CF911F9177
+:100F80000F910C941A0780E0DF91CF911F910F9180
+:100F900008950C9409070C94180780E090E00895D8
+:100FA0000895E82FF0E083E0EE0FFF1F8A95E1F748
+:100FB000E70FF11D93E0EE0FFF1F9A95E1F7E60FA3
+:100FC000F11DEE0FFF1FEE52FF4F85919491089592
+:100FD000880F991FFC01EE5AF04085919491089575
+:100FE000880F991FFC01EE52FF4F8591949108954F
+:100FF0000F931F93CF93DF93EC01811520E39207AA
+:1010000050F5C11580E2D80708F0C3C0CB3BD1052D
+:1010100090F4C83AD10508F06AC0C53AD10508F085
+:101020005BC0C430D10508F0D4C1219709F0CEC10E
+:1010300001E010E00EC2CF3FD10511F008F0C9C1A8
+:10104000C03FD10508F0A2C0CE01805E910908978B
+:1010500008F4BFC1BBC1C13090E5D90709F4A2C0F3
+:1010600020F5C0318FE4D80770F4C11590E4D9079A
+:1010700008F094C0C11521E3D20708F0A7C1DD270D
+:101080008E01106CE6C1C115D04509F09FC10E94C8
+:1010900035188FEF94E32CE0815090402040E1F729
+:1010A00000C000000E94751FD4C1C11597E5D90783
+:1010B00058F4C03121E5D20708F020C1C43180E5E1
+:1010C000D80708F479C082C1CE01905781159041AC
+:1010D00008F07CC1DF7077C1C53AD10509F47BC146
+:1010E000C63AD10509F07AC102E810E4B2C1C83AA3
+:1010F000D10509F476C1C93AD10509F475C1CA3AD6
+:10110000D10509F474C1CB3AD10509F473C1CC3AC5
+:10111000D10509F472C1CD3AD10509F471C1C03BC2
+:10112000D10509F470C1CE3AD10509F46FC1CF3AA7
+:10113000D10509F46EC1C13BD10509F46DC1C23BB3
+:10114000D10509F46CC1C33BD10509F46BC1C43BA3
+:10115000D10509F46AC1C53BD10509F469C1C63B93
+:10116000D10509F468C1C73BD10509F467C1C83B83
+:10117000D10509F466C1C93BD10509F465C1CA3B73
+:10118000D10509F464C100E014E463C18E01106567
+:1011900060C1CE019F700E94F0075CC1DF708E01BC
+:1011A000106A57C182E591E00E945D068091C901F5
+:1011B00081608093C9014DC10E941B21811102C031
+:1011C0000E9401210E94382190E09093E8018093D1
+:1011D000E701C23080E5D80721F48091E701816002
+:1011E00086C0C43090E5D90721F48091E701826080
+:1011F0007EC0C63020E5D20721F48091E7018460EB
+:1012000076C0C83080E5D80719F48091E70127C07F
+:10121000CA3090E5D90721F48091E701806167C069
+:10122000CC3020E5D20721F48091E70180625FC0D5
+:10123000CE3080E5D80721F48091E701806457C063
+:10124000C03190E5D90721F48091E70180684FC053
+:10125000C23120E5D20729F48091E70184608860DB
+:1012600046C0C33080E5D80721F48091E7018E7F26
+:101270003EC0C53090E5D90721F48091E7018D7F0C
+:1012800036C0C73020E5D20721F48091E7018B7F7B
+:101290002EC0C93080E5D80719F48091E70126C037
+:1012A000CB3090E5D90721F48091E7018F7E1FC0F4
+:1012B000CD3020E5D20721F48091E7018F7D17C062
+:1012C000CF3080E5D80721F48091E7018F7B0FC0F4
+:1012D000C13190E5D90721F48091E7018F7707C0EC
+:1012E000C331D04531F48091E7018B7F877F8093B4
+:1012F000E7018091E7010E943C21ABC08D2F992727
+:101300008F70992781309105D9F49E01237033277E
+:1013100002C0880F991F2A95E2F79C688E0144E06D
+:10132000000F111F4A95E1F700271370802B912BB6
+:1013300053E0CC0FDD1F5A95E1F7C076DD272FC0B3
+:101340008230910531F4DC2FCC278E01016F106AB9
+:1013500080C08330910569F4CE018370992701E044
+:1013600010E002C0000F111F8A95E2F7C8019C68C7
+:101370000FC084309105B9F4CE018370992701E044
+:1013800010E002C0000F111F8A95E2F7C8019A68A9
+:1013900023E0CC0FDD1F2A95E1F7C07ED7708C01CA
+:1013A0000C2B1D2B56C08530910531F4DC2FCC273A
+:1013B0008E01046F106A4DC0069709F04AC0CF71C4
+:1013C000DD27DC2FCC278E01106243C000E010E047
+:1013D00040C08E013EC001E810E43BC003E810E4C9
+:1013E00038C002EE14E435C009EE14E432C00AEE4F
+:1013F00014E42FC005EB14E42CC006EB14E429C060
+:1014000007EB14E426C00CEC14E423C00DEC14E448
+:1014100020C003E815E41DC00AE815E41AC002E97B
+:1014200015E417C004E915E414C001E216E411C084
+:1014300003E216E40EC004E216E40BC005E216E473
+:1014400008C006E216E405C007E216E402C00AE29C
+:1014500016E4C801DF91CF911F910F910895E82FF5
+:10146000F0E083E0EE0FFF1F8A95E1F7E70FF11D33
+:1014700093E0EE0FFF1F9A95E1F7E60FF11DEE0FD7
+:10148000FF1FEE52FF4F85919491803E9105E0F44D
+:10149000803C910558F58133910509F46FC048F4FB
+:1014A0008932910509F463C08A32910509F46DC04F
+:1014B00072C089339105E9F082389105D1F0853306
+:1014C000910509F44DC067C0833E910581F138F460
+:1014D000803E9105B9F0823E9105D9F05CC0863E10
+:1014E000910561F1873E9105A1F155C00E94E80781
+:1014F00008952091E70120FD02C021FF4CC080EE3D
+:1015000090E049C08091E70180FFF9CF89E390E046
+:1015100042C08091E70182FF0EC08091E70184FF05
+:1015200003C080E090E037C083EE90E034C080914B
+:10153000E70182FFF2CF82EE90E02DC08091E701BB
+:1015400083FF0BC08091E70184FDEBCF87EE90E035
+:1015500022C08091E70183FFF5CF86EE90E01BC0AB
+:101560008091E70185FF07C089E290E014C0809177
+:10157000E70185FFF9CF85E390E00DC08091E70199
+:1015800086FF07C08AE290E006C08091E70186FFEF
+:10159000F9CF81E390E00E94F8070895E82FF0E08A
+:1015A000E45EFE4F8081E82FEF70F0E082958F704F
+:1015B00021E030E0A90102C0440F551F8A95E2F7EF
+:1015C00040A308950F931F93CF93DF93C7E0D0E01C
+:1015D00001E010E0FE01E45EFE4F8081E82FEF7035
+:1015E000F0E021A182958F70A80102C0440F551F21
+:1015F0008A95E2F7CA01822B81A38C2F0E94CE0A22
+:10160000219740F787E090E061E070E0FC01EC5E3C
+:10161000FE4F2081E22FEF70F0E042A122952F7063
+:10162000DB0102C0AA0FBB1F2A95E2F79D01242B04
+:1016300022A3019758F7DF91CF911F910F910C943E
+:10164000C907EF92FF920F931F93CF93DF9308E5A3
+:1016500011E0C7E0EE24E394F12CD5E08C2F0E943A
+:10166000CE0A87E090E040E0FC01EC5EFE4F508146
+:10167000E52FEF70F0E020A130E052955F7002C0DE
+:10168000359527955A95E2F720FD07C09701082E5A
+:1016900001C0220F0A94EAF7422B019728F7F801BC
+:1016A00082918F01841719F04083D09300018C2F11
+:1016B0000E94CE0AC15090F68091000187FD32C091
+:1016C0009091C90190FF10C0282F332727FD309536
+:1016D0003F938F938BE991E09F938F930E94F6063F
+:1016E0000F900F900F900F90809100018150809388
+:1016F000000187FD07C08FE99FE00197F1F700C067
+:10170000000010C080E090E0FC01E85AFE4FDC01D0
+:10171000A05BBE4F17962C9127830197883FEFEF70
+:101720009E0791F70E94CB0781E0DF91CF911F9137
+:101730000F91FF90EF900895E82FF0E0E85AFE4FE8
+:10174000808108950F931F93CF93DF938091C901F8
+:1017500080FF04C08CE791E00E945D06C0E0D0E00D
+:1017600004E611E08091C90180FF15C0FE01E85A2E
+:10177000FE4F808190E00E94951E9F938F93DF9390
+:10178000CF931F930F930E94F6060F900F900F9028
+:101790000F900F900F902196C830D10519F7DF9167
+:1017A000CF911F910F9108950F931F93CF9300E650
+:1017B00011E0C0E0F80182918F0190E00E94771E55
+:1017C000C80FF1E008351F07A9F78C2FCF911F91A3
+:1017D0000F91089580916B0108959FB7F89410922E
+:1017E00062019FBF9091DE01943009F057C0909143
+:1017F000E9009F703091EC00232F217030FD20E82C
+:10180000922B24E02093E9002091EB0020FF43C0BD
+:101810002091EE0027FF3FC020916001222321F09C
+:101820002091E80025FF37C01092600126E030913A
+:10183000E80035FD15C03091DE01343061F530919E
+:10184000EB0035FD28C0215021F481E08093600138
+:1018500022C0EFE9FFE03197F1F700C00000E7CFC9
+:101860008093F1008091E80085FD0AC08091E80036
+:1018700080FFFCCF8091E8008E778093E80006C05F
+:101880008FB7F89421E0209362018FBF9F709093EF
+:10189000E90080E008959F709093E9008FEF08952C
+:1018A000CF93DF9300D01F92CDB7DEB79C0180911C
+:1018B000DE01843019F593E099833B832A8390936A
+:1018C000E9008FEF9091E800815095FD06C095EDFD
+:1018D0009A95F1F700008111F5CF8091E80085FF1E
+:1018E0000DC040E050E063E070E0CE0101960E9440
+:1018F000E30E8091E8008E778093E8000F900F90C0
+:101900000F90DF91CF910895CF93DF9300D01F9276
+:10191000CDB7DEB72091DE01243021F522E0298306
+:101920009B838A8383E08093E9008FEF9091E800A6
+:10193000815095FD06C095ED9A95F1F70000811153
+:10194000F5CF8091E80085FF0DC040E050E063E0F6
+:1019500070E0CE0101960E94E30E8091E8008E7740
+:101960008093E8000F900F900F90DF91CF91089532
+:101970002091DE012430F1F422E02093E9002FEFE2
+:101980003091E800215035FD06C035ED3A95F1F76C
+:1019900000002111F5CF2091E80025FF0BC040E0A9
+:1019A00050E065E070E00E94E30E8091E8008E77E1
+:1019B0008093E8000895CF93DF932091DE012430D7
+:1019C00039F521E02093E9002FEF3091E800215014
+:1019D00035FD06C035ED3A95F1F700002111F5CF40
+:1019E0002091E80025FF14C0EC0140E050E068E0E1
+:1019F00070E00E94E30E8091E8008E778093E8000B
+:101A000088E0FE01A3E6B1E001900D928A95E1F72E
+:101A1000DF91CF91089588ED91E00E945D0680915D
+:101A2000DD01811109C00E9472100E94C5108091D1
+:101A3000E20084608093E200089584ED91E00E94CA
+:101A40005D061092DD01089580ED91E00C945D0635
+:101A5000209161012F5F822F62E30E943F2A992328
+:101A600019F0209361010895109261018091620143
+:101A7000882371F18091DE01843041F58091E90085
+:101A80008F702091EC00922F917020FD90E8892BAF
+:101A900094E09093E9009091EB0090FF14C0909136
+:101AA000EE0097FF10C09091E80095FF03C01092E0
+:101AB000F100F9CF9091E80090FF05C09091E80007
+:101AC0009E779093E8008F708093E90010926201F6
+:101AD000089542E061EC81E00E94EC0F42E061EC8D
+:101AE00082E00E94EC0F42E061EC83E00E94EC0F88
+:101AF00042E261EC84E00C94EC0F8091E0018330D1
+:101B000009F453C030F4813071F0823009F48CC094
+:101B100008958A3009F478C08B3009F45EC08930AA
+:101B200009F09AC020C08091DF01813A09F094C089
+:101B30008091E800877F8093E8008091E301909195
+:101B4000E401892B21F468E083E691E003C060E0C2
+:101B500080E090E070E00E942E0F8091E8008B778B
+:101B60008093E80008958091DF01813209F074C00C
+:101B70008091E3019091E401892B09F06DC080917F
+:101B8000E800877F8093E8008091E80082FD05C02F
+:101B90008091DE018111F8CF5FC08091F1008093C8
+:101BA0006B018091E8008B7753C08091DF01813A0F
+:101BB00009F052C08091E3019091E401892B09F072
+:101BC0004BC08091E800877F8093E8008091E80017
+:101BD00080FFFCCF80910B0136C08091DF01813204
+:101BE000D9F58091E3019091E401892BA9F58091C9
+:101BF000E800877F8093E8000E9421108091E10136
+:101C000080930B010C9435188091DF01813221F50E
+:101C10008091E800877F8093E8000E9421108091E6
+:101C2000E20180936C0108958091DF01813AA1F473
+:101C30008091E800877F8093E8008091E80080FF32
+:101C4000FCCF80916C018093F1008091E8008E7749
+:101C50008093E8000C942110089584B7877F84BF97
+:101C600088E10FB6F89480936000109260000FBE78
+:101C700090E080E80FB6F894809361009093610043
+:101C80000FBE0E94C5130E9472100E94C510809161
+:101C9000E20084608093E2008DEE9BE00E94721E61
+:101CA00078940E9418130E94C71381E091E00E946B
+:101CB00033138FEB91E00E945D068091DE01853049
+:101CC00089F48BEB91E00E945D060E94AF1E80912B
+:101CD000DC01882391F30E94DA1E882371F30E94AD
+:101CE000CD0EEBCF0E94EB13E8CF292F3327233003
+:101CF0003105C9F064F42130310581F0223031051D
+:101D000009F043C084E790E02AEF31E042C021327D
+:101D10003105F1F02232310541F137C082E190E026
+:101D20002EE632E036C099278130910541F08230AD
+:101D3000910541F0892B49F5E6EFF1E005C0ECEEA5
+:101D4000F1E002C0ECEDF1E0849190E09F0121C050
+:101D50006430D8F4E62FF0E0EE0FFF1FE05DFE4F99
+:101D60002081318189E090E014C0643070F470E02B
+:101D7000FB01EE0FFF1FE85DFE4F20813181FB016B
+:101D8000EC5DFE4F808190E004C080E090E020E0B8
+:101D900030E0FA0131832083089584E089BD86E034
+:101DA00089BD09B400FEFDCF8091D8008F7D80935E
+:101DB000D8008091E00082608093E0008091E00094
+:101DC00081FDFCCF0895CF92DF92EF92FF920F93A7
+:101DD0001F93CF93DF93EC018B016A010E944010A7
+:101DE000811133C0C114D10439F0F6018081918191
+:101DF000081B190BC80FD91FE12CF12C0115110577
+:101E000019F18091E80085FD16C08091E8008E7779
+:101E10008093E800C114D10449F0F60180819181DA
+:101E2000E80EF91EF182E08285E00FC00E944010AA
+:101E3000882321F30AC089918093F1000150110990
+:101E4000FFEFEF1AFF0ADACF80E0DF91CF911F9109
+:101E50000F91FF90EF90DF90CF9008952091E501D2
+:101E60003091E6012617370748F06115710539F4FE
+:101E70002091E8002E772093E80001C0B90140E0EE
+:101E80006115710591F12091DE01222309F440C012
+:101E9000253009F43FC02091E80023FD3DC020918A
+:101EA000E80022FD2FC02091E80020FFE9CF20911B
+:101EB000F20030E0FC01CF016115710559F02830C6
+:101EC000310540F481918093F100615071092F5FD9
+:101ED0003F4FF1CF41E02830310509F040E020913B
+:101EE000E8002E772093E800CBCF4111CCCF0AC079
+:101EF0008091DE01882361F0853061F08091E800F7
+:101F000083FD0AC08091E80082FFF2CF80E008954F
+:101F100082E0089583E0089581E008952091E5012D
+:101F20003091E6012617370748F06115710539F43D
+:101F30002091E8002E772093E80001C0B901FC0150
+:101F400020E06115710579F18091DE01882309F4A3
+:101F50003DC0853009F43CC08091E80083FD3AC063
+:101F60008091E80082FD2CC08091E80080FFE9CFDD
+:101F70008091F20090E06115710559F0883091056B
+:101F800040F424912093F10031966150710901963B
+:101F9000F2CF21E0089709F020E08091E8008E77E9
+:101FA0008093E800CECF2111CFCF0AC08091DE010F
+:101FB000882361F0853061F08091E80083FD0AC0DC
+:101FC0008091E80082FFF2CF80E0089582E00895DA
+:101FD00083E0089581E00895982F953058F5909307
+:101FE000E900981739F07091EC002091ED005091C4
+:101FF000F00003C0242F762F50E021FF19C030914C
+:10200000EB003E7F3093EB003091ED003D7F30934D
+:10201000ED003091EB0031603093EB007093EC00F9
+:102020002093ED005093F0002091EE0027FF07C0B1
+:102030009F5FD3CF8F708093E90081E0089580E0A7
+:1020400008958091DF0187FF11C08091E80082FD33
+:1020500005C08091DE018111F8CF11C08091E800A8
+:102060008B770BC08091DE01882349F08091E800D6
+:1020700080FFF8CF8091E8008E778093E800089584
+:102080002091E4003091E50095E64091EC00842F2A
+:10209000817040FF22C08091E80080FD1CC08091CB
+:1020A000DE01882391F0853091F08091EB0085FD71
+:1020B00010C04091E4005091E5004217530729F306
+:1020C0009A01915011F784E0089582E0089583E029
+:1020D000089581E0089580E008954091E80042FF6E
+:1020E000DECF08950E94CF100E94D210E0EEF0E003
+:1020F000808181608083E8EDF0E080818F7780834C
+:1021000019BCE3E6F0E08081816080831092DD01FC
+:1021100008950E94CF100E94D2108091D8008F772E
+:102120008093D8008091D80080688093D8008091F7
+:10213000D8008F7D8093D80084E089BD86E089BD7A
+:1021400009B400FEFDCF1092DE011092DA01109268
+:10215000DC011092DB0142E060E080E00E94EC0FC5
+:102160008091E1008E7F8093E1008091E2008160A8
+:102170008093E2008091E20088608093E200809189
+:10218000E0008E7F8093E0000895E3E6F0E0808138
+:102190008E7F808381E08093DD010C948910109202
+:1021A000E20008951092E10008951F920F920FB679
+:1021B0000F9211242F933F934F935F936F937F93CD
+:1021C0008F939F93AF93BF93EF93FF938091E10021
+:1021D00082FF0BC08091E20082FF07C08091E10086
+:1021E0008B7F8093E1000E94280D8091E10080FFA9
+:1021F00018C08091E20080FF14C08091E2008E7FC1
+:102200008093E2008091E20080618093E2008091FF
+:10221000D80080628093D80019BC1092DE010E9421
+:102220001D0D8091E10084FF30C08091E20084FFA9
+:102230002CC084E089BD86E089BD09B400FEFDCFD5
+:102240008091D8008F7D8093D8008091E1008F7EAF
+:102250008093E1008091E2008F7E8093E200809184
+:10226000E20081608093E2008091DA01882311F01E
+:1022700084E007C08091E30087FD02C081E001C0D7
+:1022800083E08093DE010E940B0D8091E10083FFCB
+:1022900029C08091E20083FF25C08091E100877F03
+:1022A0008093E10082E08093DE011092DA01809158
+:1022B000E1008E7F8093E1008091E2008E7F809329
+:1022C000E2008091E20080618093E20042E060E001
+:1022D00080E00E94EC0F8091F00088608093F00015
+:1022E0000E94240DFF91EF91BF91AF919F918F912B
+:1022F0007F916F915F914F913F912F910F900FBE02
+:102300000F901F9018951F920F920FB60F921124E5
+:102310002F933F934F935F936F937F938F939F93ED
+:10232000AF93BF93CF93DF93EF93FF93C091E900F7
+:10233000CF708091EC00D82FD17080FDD0E8109242
+:10234000E9008091F000877F8093F00078940E94EC
+:10235000C7111092E9008091F00088608093F0002E
+:10236000CD2BCF70C093E900FF91EF91DF91CF911A
+:10237000BF91AF919F918F917F916F915F914F919D
+:102380003F912F910F900FBE0F901F9018951F93A4
+:10239000CF93DF93CDB7DEB7AA970FB6F894DEBF21
+:1023A0000FBECDBFEFEDF1E088E08E0F9091F10010
+:1023B00091938E13FBCF0E947D0D8091E80083FFE7
+:1023C0001FC18091DF019091E001492F50E04A3018
+:1023D000510508F015C1FA01E65CFF4F0C945F2A25
+:1023E000803881F0823809F00BC18091E3018F7051
+:1023F0008093E9008091EB0085FB882780F910929B
+:10240000E90006C08091DB019091DC0191118260AE
+:102410009091E800977F9093E8008093F1001092EC
+:10242000F100C8C0282F2D7F09F0EAC0882319F0D9
+:10243000823061F0E5C08091E101813009F0E0C0B7
+:10244000933009F080E08093DC012BC08091E101A2
+:10245000811127C08091E3018F7009F4D1C080936E
+:10246000E9002091EB0020FF1CC0933021F4809103
+:10247000EB00806214C09091EB0090619093EB00B0
+:1024800021E030E0A90102C0440F551F8A95E2F710
+:102490004093EA001092EA008091EB0088608093FC
+:1024A000EB001092E9008091E800877F86C08111DF
+:1024B000A7C01091E1011F778091E3008078812B04
+:1024C0008093E3008091E800877F8093E8000E947A
+:1024D00021108091E80080FFFCCF8091E3008068AC
+:1024E0008093E300111102C082E001C083E0809379
+:1024F000DE0186C08058823008F082C08091E10100
+:102500009091E2018C3D53E0950779F583E08A8351
+:102510008AE289834FB7F894DE01139620E03EE00B
+:1025200051E2E32FF0E050935700E49120FF03C005
+:10253000E295EF703F5FEF708E2F90E0EA3010F081
+:10254000C79601C0C0968D939D932F5F243149F7A4
+:102550004FBF8091E800877F8093E8006AE270E0D7
+:10256000CE0101960E942E0F14C0AE014F5F5F4F47
+:102570006091E3010E94750EBC01009709F440C010
+:102580009091E800977F9093E80089819A810E945A
+:102590008E0F8091E8008B778093E80031C08038FF
+:1025A00079F58091E800877F8093E8008091DA01D7
+:1025B0008093F1008091E8008E778093E8000E947C
+:1025C00021101EC081111CC09091E1019230C0F415
+:1025D0008091E800877F8093E8009093DA010E9461
+:1025E00021108091DA01811106C08091E30087FDFE
+:1025F00002C081E001C084E08093DE010E94690D89
+:102600008091E80083FF0AC08091E800877F809373
+:10261000E8008091EB0080628093EB00AA960FB6F1
+:10262000F894DEBF0FBECDBFDF91CF911F9108950B
+:10263000CF938091DE018823A1F0C091E900CF7093
+:102640009091EC00892F817090FD80E8C82B10924A
+:10265000E9008091E80083FD0E94C711CF70C0930C
+:10266000E900CF91089590937201809371010895CC
+:10267000E0917101F0917201309721F00190F081A9
+:10268000E02D099480E00895EF92FF920F931F933D
+:10269000CF93DF93E0917101F09172013097B1F126
+:1026A0008C010280F381E02D09958091C90182FFA0
+:1026B0002DC080FF04C08AE693E00E945D06E80119
+:1026C00018E084E6E82E83E0F82E8091C90180FFAF
+:1026D0000BC088811F928F93FF92EF920E94F606A3
+:1026E0000F900F900F900F90115021961111EDCF78
+:1026F0008091C90180FF0AC082E693E0DF91CF910B
+:102700001F910F91FF90EF900C945D06DF91CF9198
+:102710001F910F91FF90EF900895E0917101F0915A
+:102720007201309721F00480F581E02D099408951D
+:1027300020916F01309170018217930771F090938F
+:10274000700180936F01E0917101F09172013097F7
+:1027500021F00680F781E02D0994089520916D0104
+:1027600030916E018217930771F090936E01809300
+:102770006D01E0917101F0917201309721F00084B8
+:10278000F185E02D0994089508950C94C4130E94D6
+:10279000111F0E94E20A0C94D31FCF93DF931F9264
+:1027A000CDB7DEB79091C90192FF10C090FF0EC067
+:1027B0001F928F932CE733E03F932F9389830E94DE
+:1027C000F6060F900F900F900F9089810F90DF9178
+:1027D000CF910C94FF069F92AF92BF92CF92DF925F
+:1027E000EF92FF920F931F93CF93DF9300D000D00F
+:1027F00000D0CDB7DEB70E94210B07E010E0AA247D
+:10280000A394B12C902E802F0E949C0B98012C58E1
+:102810003E4F6901F901F080F826A1F40150110939
+:1028200088F78FEF89838A831B820E941A1F816039
+:10283000782F9D838C8349815A816B818D810E9481
+:1028400082142FC09091C90191FF04C08E830E9411
+:10285000A20B8E8127E030E0A501022E01C0440FBB
+:102860000A94EAF7E42E4F21C1F029839A828E213F
+:1028700091E009F490E09B830E941A1F8160782FF9
+:102880009D838C8349815A816B818D810E94821442
+:10289000F6018081E826E08204C021503109E0F68B
+:1028A000BDCF0E944123109173010E943813181765
+:1028B000B9F00E9438138093730126960FB6F894EE
+:1028C000DEBF0FBECDBFDF91CF911F910F91FF9063
+:1028D000EF90DF90CF90BF90AF909F900C94CD136E
+:1028E00026960FB6F894DEBF0FBECDBFDF91CF9115
+:1028F0001F910F91FF90EF90DF90CF90BF90AF901E
+:102900009F900895CF93DF93CDB7DEB72B970FB687
+:10291000F894DEBF0FBECDBF4F83588769877A8793
+:102920008B87DE01119686E0FD0111928A95E9F709
+:1029300085E0FE01379601900D928A95E1F7498175
+:102940005A816B817C818D819E810E94E21A2B9637
+:102950000FB6F894DEBF0FBECDBFDF91CF910895C3
+:10296000CF93882309F4C2C0C82F823859F40E943B
+:10297000381381FDBBC089E30E94C01D0E94431E25
+:1029800089E30CC0833879F40E94381380FDAEC00F
+:1029900083E50E94C01D0E94431E83E50E94DD1D49
+:1029A000CF910C94431E843859F40E94381382FD51
+:1029B0009DC087E40E94C01D0E94431E87E4EECFA5
+:1029C0008CEF8C0F813A48F48C2F0E94AF27811135
+:1029D0008DC08C2F0E94C01DE3CF80E28C0F883009
+:1029E00048F4C77081E001C0880FCA95EAF70E94D9
+:1029F000FC1DD6CF8BE58C0F833078F4C53A29F0D7
+:102A0000C63A31F083E890E005C081E890E002C06A
+:102A100082E890E0CF910C94981388E58C0F833175
+:102A200008F064C0C83A39F1C93A41F1CA3A49F1EB
+:102A3000CB3A51F1CC3A59F1CD3A61F1C03B69F151
+:102A4000CE3A71F1CF3A79F1C13B81F1C23B89F1C4
+:102A5000C33B91F1C43B99F1C53BA1F1C63BA9F140
+:102A6000C73BB1F1C83BB9F1C93BC1F1CA3BC9F1A0
+:102A700080E090E038C082EE90E035C089EE90E0D2
+:102A800032C08AEE90E02FC085EB90E02CC086EB40
+:102A900090E029C087EB90E026C08CEC90E023C04A
+:102AA0008DEC90E020C083E891E01DC08AE891E0C1
+:102AB0001AC082E991E017C084E991E014C081E274
+:102AC00092E011C083E292E00EC084E292E00BC07B
+:102AD00085E292E008C086E292E005C087E292E0DB
+:102AE00002C08AE292E0CF910C94AE13CF91089588
+:102AF000882309F44BC0823859F40E94381381FFAF
+:102B000045C089E30E94C01D0E94431E89E30CC09A
+:102B1000833871F40E94381380FF38C083E50E9427
+:102B2000C01D0E94431E83E50E94DD1D0C94431EC0
+:102B3000843859F40E94381382FF28C087E40E9429
+:102B4000C01D0E94431E87E4EFCF9CEF980F913A7F
+:102B500058F390E2980F983050F4877091E001C0DC
+:102B6000990F8A95EAF7892F0E94021EDFCF9BE515
+:102B7000980F933020F480E090E00C949813885ADA
+:102B8000833120F480E090E00C94AE130895882304
+:102B900021F00E94FC1D0C94431E0895882321F00F
+:102BA0000E94021E0C94431E08957F928F929F9262
+:102BB000AF92BF92CF92DF92EF92FF920F931F934B
+:102BC000CF93DF931F92CDB7DEB77C01C62E772E51
+:102BD000FC01058102950F70128111110E94191ECE
+:102BE0000E94B91D882379F0112369F080E28C0DD1
+:102BF000883048F082E00E94A21D0E94B91D91E039
+:102C0000D82ED92601C0D12CE72DE295EF70F0E047
+:102C1000EC5BFF4F0C945F2A872D807F072D0F7090
+:102C2000882311F00295007F112389F0002309F415
+:102C300098C180E28C0D883020F4802F0E94FC1D0A
+:102C400003C0802F0E940C1E0E94431E8AC18C2D3F
+:102C50000E947815002309F49DC180E28C0D883014
+:102C600020F4802F0E94021E03C0802F0E94121E9B
+:102C70000E94431E8FC1872D807F972D9F708032C9
+:102C800011F4892F03C0892F8295807FCC2021F0F9
+:102C9000F1E0CF16A1F01DC0112339F0002319F186
+:102CA000013009F50E942C1E75C1002319F0013076
+:102CB00009F470C189830E942F1E898110C11123DC
+:102CC00021F0063008F066C10EC0053008F062C180
+:102CD00006C1112359F0002331F0F701958190FFCF
+:102CE00040C19F7095830E94C71554C1002309F409
+:102CF000F6C03DC1872D86958695837090E000973C
+:102D000019F0019761F046C1112321F08C2D972D08
+:102D1000937002C080E090E00E9498133BC11123A1
+:102D200021F08C2D972D937002C080E090E00E94DE
+:102D3000AE1330C18C2D112319F00E94C72102C09F
+:102D40000E942F220E94B42225C1872D837009F092
+:102D500052C011111FC18C2D829586958770880FE6
+:102D6000880F9C2D9F70892E912CA12CB12C082EA0
+:102D700004C0880C991CAA1CBB1C0A94D2F7C4FE80
+:102D800014C00FE010E020E030E0B901A80104C059
+:102D9000440F551F661F771F8A95D2F7CB01BA01E2
+:102DA000609570958095909503C060E070E0CB01D0
+:102DB000272D26952695237030E02230310569F0C5
+:102DC0002330310589F0682979298A299B29213006
+:102DD000310571F00E942E1CDDC0682979298A29ED
+:102DE0009B290E944A1CD6C00E942E1CC501B4011A
+:102DF0000E94121CCFC0112319F0872D817001C0D1
+:102E00008695882309F4C6C08C2D82958695877097
+:102E1000880F880F9C2D9F70892E912CA12CB12C8E
+:102E2000082E04C0880C991CAA1CBB1C0A94D2F75B
+:102E3000C4FE14C00FE010E020E030E0B901A801AA
+:102E400004C0440F551F661F771F8A95D2F7CB0128
+:102E5000BA01609570958095909503C060E070E030
+:102E6000CB01272D269526952370422F50E0423026
+:102E7000510569F04330510589F0682979298A297B
+:102E80009B294130510571F00E94081D83C06829BB
+:102E900079298A299B290E94241D7CC00E94081D33
+:102EA000C501B4010E94EC1C75C08C2D90E0FC01A2
+:102EB000E05EF109E531F10508F04FC0EC5AFF4F33
+:102EC0000C945F2A0C2D0F70872D8F71112321F028
+:102ED0000E94851C802F07CF0E94A61C802F0E9475
+:102EE000CE1558C0112341F0053008F053C0872D8E
+:102EF0008F710E94CB1C4EC0063008F04BC0F7CF3C
+:102F0000112339F0872D8F710E94851C43C0112336
+:102F1000C9F3872D8F710E94A61C3CC0112329F094
+:102F2000872D8F710E94701C35C00E94661C32C0B4
+:102F3000112351F0172D1F71812F0E94851C63E012
+:102F4000812F0E94991D26C081E00E94A21D02309F
+:102F500008F182E00E94A21D1DC0112331F0002360
+:102F600089F28C2D0E94B01415C0002391F28C2D93
+:102F70000E9478150FC0472D4F706C2DC7010E941D
+:102F8000CD070E948A1B06C0472D4F706C2DC701CC
+:102F90000E94D007DD20F9F00E94951D80FD1BC026
+:102FA000F70112820E948F1D0E94851CC7010E949A
+:102FB000FA170E948F1D0F90DF91CF911F910F91F3
+:102FC000FF90EF90DF90CF90BF90AF909F908F9049
+:102FD0007F900C94A61C0F90DF91CF911F910F91C1
+:102FE000FF90EF90DF90CF90BF90AF909F908F9029
+:102FF0007F9008950F931F93CF93DF93EC01888107
+:1030000099812B813C81232BB9F09F3F11F48F3F95
+:1030100099F0CE010E942107882371F0688179819F
+:103020008A810E948B1D8C010E94401D0E94071CFA
+:10303000B801CE010E94D515DF91CF911F910F915C
+:1030400008950E94191E0E94291E0E94EE1D0E94D2
+:10305000431E0E94E9230E94B42280E090E00E9477
+:10306000981380E090E00C94AE130E94091E0C941B
+:1030700021180E94801D292F22952F7030E02C30BE
+:1030800031054CF42A3031056CF4225031092230DC
+:103090003105A8F407C02C30310569F02F30310517
+:1030A00051F00DC0803F69F018F4803E40F409C033
+:1030B000843F29F406C093FB882780F9089580E0B7
+:1030C000089581E00895CF93DF9300D000D01F9240
+:1030D000CDB7DEB70F900F900F900F900F90DF914C
+:1030E000CF910895CF93DF9300D000D000D0CDB71B
+:1030F000DEB726960FB6F894DEBF0FBECDBFDF91C8
+:10310000CF910895CF93DF93C0917C0180917D0191
+:10311000C817A1F0D0E0CE0166E070E00E942E2A30
+:10312000FC01E258FE4F40815181628173818481AC
+:1031300095810E9472182196C770E8CFDF91CF91D8
+:1031400008954091AE015091AF016091B00170912E
+:10315000B1018091B2019091B3010C947218CF9398
+:10316000DF938091B30182958F7009F05CC08091EC
+:10317000B001882309F457C020917C01D0917D01D2
+:103180004091AE01C091AF01E091B101F091B20167
+:103190002D1709F448C030E0309709F440C0CF3F04
+:1031A00011F44F3FE1F1C90166E070E00E942E2A60
+:1031B000DC01A258BE4F11968C911197C8132FC0F5
+:1031C0008C9148132CC012968C911297811127C0B4
+:1031D00013968D919C9114978E179F0708F4019771
+:1031E0008E1B9F0B883C9105D0F48091B3018F70AA
+:1031F00080618093B301C90166E070E00E942E2ACD
+:10320000FC01ED57FE4F90819F70906190838EEA94
+:1032100091E00E94FA17DF91CF910C9482182F5FF2
+:103220003F4F2770B5CFDF91CF910895BF92CF92D6
+:10323000DF92EF92FF920F931F93CF93DF93CDB75F
+:10324000DEB761970FB6F894DEBF0FBECDBF8C011D
+:1032500085E0F801DE011D9601900D928A95E1F757
+:10326000D8014C9111962C9111971296EC901297CF
+:103270001396CD90DC9014975091AE016091AF0100
+:103280008091B1019091B201009709F46EC16F3F36
+:1032900019F45F3F09F469C1B090B001BB2009F493
+:1032A000C3C03091B301C816D90628F0F601E81B57
+:1032B000F90BCF0104C0809590958C0D9D1DFF24C6
+:1032C000F394883C910588F0F12C307F09F0CBC055
+:1032D0007C2DD98AC88A522F6E2D89890E94631845
+:1032E0008EEA91E00E94FA17B4C0832F807F09F024
+:1032F00049C0621314C0541312C0E11010C03F70D3
+:1033000030613093B3010E94A1188EEA91E00E94CF
+:10331000FA178091B301D80115968C9331C0CD284E
+:1033200031F12F3F11F44F3F11F1FE2CE1101FC07E
+:10333000E0917C0130917D01E31709F45CC0F0E07D
+:10334000CF0166E070E00E942E2ADC01A258BE4F39
+:1033500011968C911197281307C08C91481304C0C3
+:1033600012968C91811103C03196E770E5CFFE2C47
+:10337000EE2009F416C18091B30181608093B301FE
+:10338000F12C0FC1621308C0541306C0E11004C031
+:103390008091B301D801C1C04D872E878D859E8550
+:1033A0000E9439188823E1F1EE20D1F12091B30178
+:1033B000822F82958F7090E0029774F08091AE0119
+:1033C0009091AF0198878F831986DB86CA862C87F8
+:1033D000CE0107960E94FA1786E0F801AEEAB1E046
+:1033E00001900D928A95E1F70E94AF180E94A118F2
+:1033F000FF24F394D6C04D872E878D859E850E942D
+:10340000801D292F22952F7030E0223031050CF0DD
+:10341000BCC09F7009F0B6C0805E883008F4C1C09F
+:10342000C8010E94FA17E4CFC816D90608F453C0A1
+:10343000F601E81BF90BCF01883C910508F450C058
+:10344000F12C7C2DD98AC88A522F6E2D89890E9431
+:103450006318EEEAF1E086E0DF011D928A95E9F754
+:103460000E94A1189EC0621314C0541312C0E11030
+:1034700010C08091B301F8018583C8010E94FA173A
+:1034800086E0EEEAF1E0DF011D928A95E9F7FB2C78
+:1034900088C04D872E878D859E850E943918882388
+:1034A00009F4BECFEE2009F4BBCF2091B301822FE7
+:1034B00082958F7090E002970CF48ECF8091AE01D0
+:1034C0009091AF019A8389831B82DD82CC822E8307
+:1034D000CE0101967FCF809590958C0D9D1DACCF30
+:1034E000FE2CEE2009F49CCF62132EC054132CC086
+:1034F0002091B30120FD1FC0822F82958F70D9F0DB
+:10350000D80115962C9315978F3049F08F5F982F1F
+:103510009295907F822F8F70892B15968C93C8017E
+:103520000E94FA1786E0F801AEEAB1E001900D9230
+:103530008A95E1F795CF86E0F801AEEAB1E0019017
+:103540000D928A95E1F72DC04D872E878D859E853A
+:103550000E943918811140CF8091B301816080931E
+:10356000B301C8010E94FA171CC0EE2009F458CF1D
+:103570004D872E878D859E850E943918882309F4F2
+:103580004FCF2ACF811148CF0CC0243031050CF029
+:1035900047CF9F7009F440CFF8019581907F09F0E3
+:1035A0003BCF8F2D61960FB6F894DEBF0FBECDBF17
+:1035B000DF91CF911F910F91FF90EF90DF90CF900F
+:1035C000BF900895CF93DF93CDB7DEB72C970FB69A
+:1035D000F894DEBF0FBECDBF4F83588769877A87C7
+:1035E0008B879C87CE0107960E941619882371F05D
+:1035F0008F8198852A853B85232B09F43FC09F3F07
+:1036000009F068C08F3F09F065C038C086E0FE0150
+:103610003796DE01119601900D928A95E1F76F8140
+:103620007885EA85FB85309749F17F3F11F46F3F3C
+:1036300029F180917D0190E09C012F5F3F4F277021
+:10364000332740917C0150E02417350709F44BC023
+:1036500069837A83FD83EC8366E070E00E942E2A02
+:10366000DC01A258BE4F96E0FE01319601900D920A
+:103670009A95E1F720937D010E94821880917C0148
+:1036800090917D018917E9F190E066E070E00E9479
+:103690002E2A82589E4F0E941619882391F18091FC
+:1036A0007C0190E066E070E00E942E2AFC01E25866
+:1036B000FE4F4081518162817381848195810E9496
+:1036C000721880917C0190E0019687709927809311
+:1036D0007C01D4CF4F81588569857A858B859C85FF
+:1036E0000E947218CBCF0E94351810927D01109263
+:1036F0007C01EEEAF1E086E0DF011D928A95E9F7B0
+:10370000BDCF2C960FB6F894DEBF0FBECDBFDF91B4
+:10371000CF910895EF92FF920F931F93CF93DF9372
+:103720008C01009709F46CC0F12CEE24E394E801BD
+:103730002196F8018491843740F4843008F051C018
+:10374000813081F0823019F15BC0853709F444C0C3
+:10375000A8F19CE7980F903708F052C08F770E942D
+:10376000781541C00E5F1F4FFE01C49180E28C0F9F
+:10377000883048F4C7708E2D01C0880FCA95EAF7CB
+:103780000E941C1E14C08C2F0E94B0142DC00E5F0E
+:103790001F4FFE01C49180E28C0F883058F4C7702F
+:1037A0008E2D01C0880FCA95EAF70E94221E0E9442
+:1037B000431E1AC08C2F0E94781516C00E5F1F4F33
+:1037C000FE01C491CC2381F08FE99FE00197F1F7CE
+:1037D00000C00000C150F6CF0E5F1F4FFE01F490F5
+:1037E00003C00E94B0148E018F2D882309F49FCF4F
+:1037F000EFE9FFE03197F1F700C000008150F5CF0D
+:10380000DF91CF911F910F91FF90EF900895089550
+:103810006093B8017093B9018093BA019093BB0192
+:103820000C9421180F931F930091B8011091B901C6
+:103830002091BA013091BB01DC01CB01802B912B8F
+:10384000A22BB32B8093B8019093B901A093BA0136
+:10385000B093BB011F910F910C9421180F931F93EC
+:103860000091B8011091B9012091BA013091BB01CA
+:10387000DC01CB0180239123A223B3238093B801E1
+:103880009093B901A093BA01B093BB011F910F911E
+:103890000C9421180F931F930091B8011091B90156
+:1038A0002091BA013091BB01DC01CB018027912727
+:1038B000A227B3278093B8019093B901A093BA01CE
+:1038C000B093BB011F910F910C9421181092B40179
+:1038D0001092B5011092B6011092B7010C94211804
+:1038E00041E050E060E070E004C0440F551F661FE7
+:1038F000771F8A95D2F74093B4015093B501609336
+:10390000B6017093B7010C94211841E050E060E0DB
+:1039100070E004C0440F551F661F771F8A95D2F7C9
+:103920008091B4019091B501A091B601B091B70119
+:10393000482B592B6A2B7B2B4093B4015093B50134
+:103940006093B6017093B7010C94211841E050E0E8
+:1039500060E070E004C0440F551F661F771F8A9512
+:10396000D2F740955095609570958091B4019091F3
+:10397000B501A091B601B091B701482359236A233C
+:103980007B234093B4015093B5016093B6017093CB
+:10399000B7010C94211841E050E060E070E004C0F1
+:1039A000440F551F661F771F8A95D2F78091B40187
+:1039B0009091B501A091B601B091B7014827592760
+:1039C0006A277B274093B4015093B5016093B601F9
+:1039D0007093B7010C9421180F931F930091B401B9
+:1039E0001091B5012091B6013091B701DC01CB01F6
+:1039F000802B912BA22BB32B8093B4019093B50114
+:103A0000A093B601B093B7011F910F910C942118A8
+:103A10000F931F930091B4011091B5012091B6014D
+:103A20003091B701DC01CB0180239123A223B32382
+:103A30008093B4019093B501A093B601B093B70100
+:103A40001F910F910C9421180F931F930091B401B3
+:103A50001091B5012091B6013091B701DC01CB0185
+:103A600080279127A227B3278093B4019093B501B3
+:103A7000A093B601B093B7011F910F910C94211838
+:103A80000895CF92DF92EF92FF920F931F93CF93FF
+:103A9000DF938C01C090B801D090B901E090BA01D9
+:103AA000F090BB018091B4019091B501A091B60155
+:103AB000B091B701C82AD92AEA2AFB2ACFE1D0E07F
+:103AC000D701C6010C2E04C0B695A795979587958A
+:103AD0000A94D2F780FF06C0B8018C2F0E942F0AEB
+:103AE000019721F4219760F780E001C08C2FDF91CE
+:103AF000CF911F910F91FF90EF90DF90CF9008959D
+:103B0000CF93DF93EC010E94411DBE010E942F0A5A
+:103B1000DF91CF910895CB010E94801D089580917F
+:103B2000BC0185958595859508958091BC01877028
+:103B30000895982F990F990F990F692B6093BC01E5
+:103B40000C94851C2091BC01809582238093BC013C
+:103B5000982F977069F430E0482F552747FD50950E
+:103B60002417350729F08595859585950C94A61C15
+:103B700008959091BC01977081E009F480E0089568
+:103B800020910C0130910D01F90132969FEF40E038
+:103B90005191581789F09F3F19F4511101C0942F8A
+:103BA0004F5F4630A9F79F3F39F0F901E90FF11D4A
+:103BB00097FDFA9582830895089520910C01309124
+:103BC0000D01F9013296285F3F4F9081981301C093
+:103BD00010823196E217F307C1F7089581E090E073
+:103BE000E0910C01F0910D01E80FF91F1082019690
+:103BF00088309105A9F708959091C801892B809389
+:103C0000C801089580959091C80189238093C801C7
+:103C100008951092C80108959091C701892B80934F
+:103C2000C701089580959091C70189238093C701AA
+:103C300008951092C70108959091C601892B809331
+:103C4000C601089580959091C60189238093C6018D
+:103C500008951092C60108958093BD0108951092B1
+:103C6000BD01089580910C0190910D01FC013196E8
+:103C70009C01285F3F4F80E0919191118F5FE21787
+:103C8000F307D1F70895E0910C01F0910D018091B7
+:103C9000C8018083E0910C01F0910D019081809129
+:103CA000C701892B8083E0910C01F0910D01908177
+:103CB0008091C601892B80838091BD01882361F0AA
+:103CC000E0910C01F0910D019081892B80830E947D
+:103CD000321E81111092BD0180910C0190910D0155
+:103CE0000C9444139093430180934201089520E083
+:103CF000009739F0AC0141505109842395232F5F7F
+:103D0000F7CF822F08958295982F9C7C292F269596
+:103D10002695982F9373990F990F922B892F8A7A52
+:103D200086959575990F892B08951F93CF93DF93EF
+:103D30001F92CDB7DEB799830E94831E182F9981F9
+:103D4000892F0E94831E212F30E0322F2227A901C4
+:103D5000482BCA010F90DF91CF911F910895809158
+:103D6000DE01843021F11092CA0120E488E190E064
+:103D70000FB6F894A895809360000FBE2093600062
+:103D800080E00E94FF0683B7817F846083BF83B792
+:103D9000816083BF7894889583B78E7F83BF88E1E5
+:103DA0000FB6F89480936000109260000FBE0895E3
+:103DB000089508950E94D81E0E94210B0E94D91ECA
+:103DC0000E94D40B91E0811101C090E0892F0895E9
+:103DD0001F920F920FB60F9211248F939F93AF9360
+:103DE000BF938091CA01811113C08091CB01909142
+:103DF000CC01A091CD01B091CE014196A11DB11D84
+:103E00008093CB019093CC01A093CD01B093CE01D0
+:103E1000BF91AF919F918F910F900FBE0F901F9008
+:103E2000189582E084BD93E095BD9AEF97BD80938D
+:103E30006E0008952FB7F8948091CB019091CC013A
+:103E4000A091CD01B091CE012FBF0895CF92DF9206
+:103E5000EF92FF920F931F932FB7F8944091CB01ED
+:103E60005091CC016091CD017091CE012FBF6A01BC
+:103E70007B01EE24FF248C0120E030E0C016D10647
+:103E8000E206F30610F4415051099A01281B390B40
+:103E9000C9011F910F91FF90EF90DF90CF9008958F
+:103EA0001F920F920FB60F9211248F939F93AF938F
+:103EB000BF938091CB019091CC01A091CD01B091A5
+:103EC000CE010196A11DB11D8093CB019093CC0131
+:103ED000A093CD01B093CE01BF91AF919F918F91EF
+:103EE0000F900FBE0F901F9018950E947210F894BB
+:103EF0002FEF87EA91E6215080409040E1F700C023
+:103F0000000087E090EBDC018093E8019093E901E9
+:103F1000A093EA01B093EB019CE088E10FB6F8941E
+:103F2000A895809360000FBE90936000FFCFEF9242
+:103F3000FF920F931F93CF93DF93D82FC7E08C2F5F
+:103F40000E949C0B07E010E0E82EF12CC701002E28
+:103F500002C0959587950A94E2F780FF09C0602F0B
+:103F60007C2F80E00E94D107D81302C081E006C0F8
+:103F70000150110958F7C15010F780E0DF91CF913F
+:103F80001F910F91FF90EF900895CF93C82F8CE26F
+:103F90000E94971F882321F08C2FCF910C94971F9C
+:103FA00080E0CF910895CF930E941B21811102C020
+:103FB0000E9401218CE993E00E945D06C5E6C15094
+:103FC00049F00E94210B8FE39CE90197F1F700C0B3
+:103FD0000000F5CF85E993E00E945D0689E20E942A
+:103FE000C51F81110CC18AE20E94C51F81110E9468
+:103FF000012185E00E94C51F81110E94751F0E944A
+:1040000026218093C90187E00E94C51F8823A9F15A
+:104010008BE10E94C51F882351F08091C90181FB6B
+:10402000222720F991E0922790FB81F90EC08EE0C3
+:104030000E94C51F882361F08091C90182FB22275D
+:1040400020F991E0922790FB82F98093C90115C075
+:1040500080E10E94C51F9091C901882341F093FB24
+:10406000222720F981E0822780FB93F904C0892F61
+:10407000809580FB90F99093C9018091C9010E94BD
+:104080002A210E9438218093E70180EE0E94C51FFB
+:10409000882341F08091E701982F909590FB80F95B
+:1040A0008093E70189E30E94C51F882359F080911E
+:1040B000E70181FB222720F991E0922790FB81F90B
+:1040C0008093E70182EE0E94C51F882359F08091FA
+:1040D000E70182FB222720F991E0922790FB82F9E9
+:1040E0008093E70186EE0E94C51F882359F08091D6
+:1040F000E70183FB222720F991E0922790FB83F9C7
+:104100008093E70183EE0E94C51F882359F08091B8
+:10411000E70184FB222720F991E0922790FB84F9A4
+:104120008093E70185E30E94C51F882359F08091A1
+:10413000E70185FB222720F991E0922790FB85F982
+:104140008093E70181E30E94C51F882359F0809185
+:10415000E70186FB222720F991E0922790FB86F960
+:104160008093E70181E10E94C51F882359F0809167
+:10417000E70187FB222720F991E0922790FB87F93E
+:104180008093E7018091E7010E943C2187E20E9431
+:10419000C51FC82F8EE10E94C51F8111C2608FE12B
+:1041A0000E94C51F8111C46080E20E94C51F811159
+:1041B000C86081E20E94C51F8111C06182E20E9435
+:1041C000C51F8111C06283E20E94C51F8111C064B6
+:1041D00084E20E94C51F882311F0C06802C0CC236E
+:1041E00029F08C2F0E9433216C2F03C00E942F21B5
+:1041F000682F70E080E090E0CF910C94081CCF9184
+:1042000008956DEE7EEF80E090E00E94992A60E0D4
+:1042100082E090E00E94872A60E083E090E00E94C4
+:10422000872A60E084E090E00E94872A60E085E0D1
+:1042300090E00C94872A80E090E00E94812A21E09F
+:104240008D3E9E4F09F020E0822F089582E090E09D
+:104250000C94792A682F82E090E00C94872A83E0FE
+:1042600090E00C94792A682F83E090E00C94872AE0
+:1042700084E090E00C94792A682F84E090E00C941C
+:10428000872A8091D10180FF0CC08091110190E0BC
+:1042900065E070E00E942E2A959587959595879503
+:1042A0002EC081FF0AC08091110190E065E070E0AE
+:1042B0000E942E2A9595879522C082FF08C0809182
+:1042C000110190E065E070E00E942E2A18C0209154
+:1042D000D2012223D1F030911001231780F7809171
+:1042E000110190E065E070E00E942E2A622F70E0DC
+:1042F0000E942E2A632F70E00E944B2ACB01803847
+:10430000910530F4009731F0089585E090E008952C
+:104310008FE7089581E008958091D10180FF08C062
+:1043200060910F0170E0759567957595679523C04D
+:1043300081FF06C060910F0170E0759567951BC005
+:1043400082FF04C060910F0170E012C06091D20141
+:104350006623D1F020910E016217A0F780910F0122
+:1043600070E090E00E942E2A622F70E00E944B2A9B
+:104370006038710528F46115710521F0862F0895C4
+:104380008FE7089581E0089561E070E0F4CF803F09
+:1043900021F40E944121819504C0813F29F40E94AB
+:1043A00041218093D5010895823F21F40E9441214B
+:1043B000819504C0833F29F40E9441218093D40158
+:1043C0000895893F19F40E948C2105C08A3F31F479
+:1043D0000E948C2181958093D60108958B3F21F412
+:1043E0000E948C21819504C08C3F29F40E948C216D
+:1043F0008093D7010895843F21F48091D301816097
+:1044000017C0853F21F48091D301826011C0863F9F
+:1044100021F48091D30184600BC0873F21F4809107
+:10442000D301886005C0883F31F48091D301806159
+:104430008093D30108958D3F21F48091D101816053
+:104440000BC08E3F21F48091D101826005C08F3F67
+:1044500029F48091D10184608093D1010895803F37
+:1044600039F48091D50187FF6CC01092D50169C0E5
+:10447000813F29F48091D5011816BCF362C0909158
+:10448000D401823F29F497FF5CC01092D40159C037
+:10449000833F19F41916CCF354C0893F41F480913D
+:1044A000D60118160CF04DC01092D6014AC08A3FB2
+:1044B00029F48091D60187FF44C0F6CF8B3F39F4B1
+:1044C0008091D70187FF3DC01092D7013AC08C3F41
+:1044D00029F48091D7011816BCF333C0843F21F42E
+:1044E0008091D3018E7F17C0853F21F48091D30145
+:1044F0008D7F11C0863F21F48091D3018B7F0BC04B
+:10450000873F21F48091D301877F05C0883F31F434
+:104510008091D3018F7E8093D30113C08D3F21F40E
+:104520008091D1018E7F0BC08E3F21F48091D1010B
+:104530008D7F05C08F3F29F48091D1018B7F8093BF
+:10454000D1018091D40181110EC08091D5018111DA
+:104550000AC08091D601811106C08091D7018111D6
+:1045600002C01092D20108958091C90183FF7EC0DC
+:1045700088ED93E00E945D068091D3011F928F9396
+:1045800083ED93E09F938F930E94F60681ED93E075
+:104590000E945D068091D401282F332727FD309596
+:1045A0003F938F938EEC93E09F938F930E94F60638
+:1045B0008CEC93E00E945D068091D501282F332773
+:1045C00027FD30953F938F9389EC93E09F938F93D2
+:1045D0000E94F60687EC93E00E945D068091D6016A
+:1045E000282F332727FD30953F938F9384EC93E05A
+:1045F0009F938F930E94F60682EC93E00E945D06E3
+:104600008091D701282F332727FD30953F938F9333
+:104610008FEB93E09F938F930E94F6068CEB93E0D1
+:104620000E945D068091D2011F928F9389EB93E0E7
+:104630009F938F930E94F60687EB93E00E945D069E
+:104640008091D1011F928F9384EB93E09F938F937E
+:104650000E94F60681EB93E00E945D068DB79EB73F
+:104660004C960FB6F8949EBF0FBE8DBF83ED91E0C0
+:104670000E948D130E941A1F9093D0018093CF0146
+:1046800008951F93CF93DF938091CF019091D00134
+:104690000E94261FFC012091D201222329F0909133
+:1046A0001201892F90E007C08091130190E06AE029
+:1046B00070E00E942E2AE817F90708F486C080915E
+:1046C000D401C091D501D091D6011091D7018111AB
+:1046D00007C0C11176C0D11174C0111172C075C06C
+:1046E0002F3F19F02F5F2093D201181624F40E9457
+:1046F00041218093D4018091D40187FF05C00E949D
+:10470000412181958093D4011C1624F40E944121FB
+:104710008093D5018091D50187FF05C00E9441217A
+:1047200081958093D5016091D401662339F1C091C0
+:10473000D501CC2319F1772767FD7095872F972F27
+:104740000E94372923E333E343E35FE30E949B297D
+:104750000E9404296093D4016C2F772767FD709520
+:10476000872F972F0E94372923E333E343E35FE347
+:104770000E949B290E9404296093D5011D1624F4F0
+:104780000E948C218093D6018091D60187FF05C0BD
+:104790000E948C2181958093D601111624F40E94E9
+:1047A0008C218093D7018091D70187FF05C00E949B
+:1047B0008C2181958093D701DF91CF911F910C942B
+:1047C000B4222F3F09F08ECF96CFDF91CF911F916A
+:1047D0000895E3EDF1E085E0DF011D928A95E9F7A8
+:1047E0001092D2011092D10108958BEF95E00E94B2
+:1047F0005D061F9281E08F931F9285E08F938DEA73
+:1048000095E09F938F930E94F6060F900F900F9064
+:104810000F900F900F9008958330E9F128F48130C4
+:1048200061F0823009F10895853009F462C008F41E
+:1048300049C0863009F474C0089580911301262F71
+:1048400030E0280F311D2F3F310524F4680F6093AD
+:10485000130103C08FEF80931301809113011F9206
+:104860008F9386EE94E072C080911201262F30E083
+:10487000280F311D2F3F310524F4680F609312017A
+:1048800003C08FEF80931201809112011F928F93CA
+:1048900084ED94E05BC080911101262F30E0280F59
+:1048A000311D2F3F310524F4680F6093110103C0BF
+:1048B0008FEF80931101809111011F928F9381ECF2
+:1048C00094E044C080911001262F30E0280F311D64
+:1048D0002F3F310524F4680F6093100103C08FEF60
+:1048E00080931001809110011F928F938CEA94E0C5
+:1048F0002DC080910F01262F30E0280F311D2F3F52
+:10490000310524F4680F60930F0103C08FEF80938B
+:104910000F0180910F011F928F9383E994E016C0DD
+:1049200080910E01262F30E0280F311D2F3F3105D9
+:1049300024F4680F60930E0103C08FEF80930E0183
+:1049400080910E011F928F9388E794E09F938F933D
+:104950000E94F6060F900F900F900F9008958330ED
+:1049600081F128F4813059F08230D1F008958530FA
+:1049700009F449C0B8F1863009F456C00895809111
+:104980001301681720F4861B8093130102C0109254
+:104990001301809113011F928F9389E694E054C014
+:1049A00080911201681720F4861B8093120102C0C7
+:1049B00010921201809112011F928F9387E594E06B
+:1049C00043C080911101681720F4861B8093110168
+:1049D00002C010921101809111011F928F9384E403
+:1049E00094E032C080911001681720F4861B8093F8
+:1049F000100102C010921001809110011F928F933C
+:104A00008FE294E021C080910F01681720F4861B8B
+:104A100080930F0102C010920F0180910F011F922D
+:104A20008F9386E194E010C080910E01681720F406
+:104A3000861B80930E0102C010920E0180910E0120
+:104A40001F928F938BEF93E09F938F930E94F606B4
+:104A50000F900F900F900F900895CF93C82F1F9233
+:104A60008F9380E097E09F938F930E94F60681E0FA
+:104A700090E0A0E0B0E0BC01CD0104C0660F771F5C
+:104A8000881F991FCA95D2F70E94081C0F900F909B
+:104A90000F900F90CF910C943518CF938732B0F5CB
+:104AA0008E3108F04AC28E3009F4C4C100F5873057
+:104AB00009F48DC1A8F4863009F045C28091C9017E
+:104AC000817F8E7F8093C9018DE698E00E945D060C
+:104AD00086E09CE00E945D0681E08093D90175C16B
+:104AE000883009F43FC08B3009F46BC12CC2863189
+:104AF00009F4E6C120F4803109F4B0C124C289313F
+:104B000009F4C7C18B3109F481C11DC2883309F48E
+:104B100058C150F4893209F412C2853309F40FC226
+:104B2000873209F40CC20FC2833409F408C228F496
+:104B30008A3308F408C2895303C2883409F003C2D7
+:104B40000E9435188AEE9BE00E945D069FEF23EDE0
+:104B500080E3915020408040E1F700C000000E94B7
+:104B6000751F33C18AE09CE00E945D068CE69BE0E5
+:104B70000E945D060E942F211F928F9389E69BE081
+:104B80009F938F930E94F60687E69BE00E945D0646
+:104B90000E942621C82F84E59BE00E945D061F929B
+:104BA000CF938FE49BE09F938F930E94F6068DE452
+:104BB0009BE00E945D0683E49BE00E945D068C2FD3
+:104BC00081701F928F9380E49BE09F938F930E944C
+:104BD000F6068EE39BE00E945D0684E39BE00E9464
+:104BE0005D06C1FB882780F91F928F9381E39BE0CC
+:104BF0009F938F930E94F6068FE29BE00E945D06D2
+:104C000083E29BE00E945D06C2FB882780F91F9229
+:104C10008F9380E29BE09F938F930E94F6068EE134
+:104C20009BE00E945D0685E19BE00E945D06C3FB60
+:104C3000CC27C0F91F92CF9382E19BE09F938F9383
+:104C40000E94F60680E19BE00E945D060E943821EA
+:104C5000C82F8CEF9AE00E945D061F92CF9387EFDA
+:104C60009AE09F938F930E94F60685EF9AE00E9448
+:104C70005D068CED9AE00E945D068C2F81701F927C
+:104C80008F9389ED9AE09F938F930E94F6068DB7DC
+:104C90009EB780960FB6F8949EBF0FBE8DBF87ED6E
+:104CA0009AE00E945D0680EC9AE00E945D06C1FBDE
+:104CB000882780F91F928F938DEB9AE09F938F93B3
+:104CC0000E94F6068BEB9AE00E945D0689EA9AE064
+:104CD0000E945D06C2FB882780F91F928F9386EAA7
+:104CE0009AE09F938F930E94F60684EA9AE00E94CE
+:104CF0005D0682E99AE00E945D06C3FB882780F981
+:104D00001F928F938FE89AE09F938F930E94F606ED
+:104D10008DE89AE00E945D0683E89AE00E945D06B5
+:104D2000C4FB882780F91F928F9380E89AE09F93B5
+:104D30008F930E94F6068EE79AE00E945D068CE64D
+:104D40009AE00E945D06C5FB882780F91F928F9329
+:104D500089E69AE09F938F930E94F60687E69AE091
+:104D60000E945D068BE49AE00E945D06C6FB8827E0
+:104D700080F91F928F9388E49AE09F938F930E940B
+:104D8000F60686E49AE00E945D068EE39AE00E94B1
+:104D90005D06C7FBCC27C0F91F92CF938BE39AE047
+:104DA0009F938F930E94F60689E39AE00E945D0626
+:104DB0008DB79EB74C960FB6F8949EBF0FBE8DBFB1
+:104DC00004C084E998E00E945D06C1E0C1C0809102
+:104DD000C901C82FC095C170C0FB80F98093C9017B
+:104DE000CC2349F08EED9BE00E945D068091C901C5
+:104DF0008660886048C081ED9BE00E945D068091DE
+:104E0000C901897F877F8093C901DFCF9091C90154
+:104E100091FBCC27C0F981E0C827892FC0FB81F91D
+:104E20008093C901CC2319F084EC9BE027C086EB6A
+:104E30009BE0C9CF9091C90192FBCC27C0F981E0DA
+:104E4000C827892FC0FB82F98093C901CC2319F0B0
+:104E500087EA9BE013C087E99BE0B5CF9091C90139
+:104E600093FBCC27C0F981E0C827892FC0FB83F9C9
+:104E70008093C901CC2351F08BE89BE00E945D0632
+:104E80008091C90181608093C90162C08EE79BE077
+:104E90009ACF8EE598E00E945D0686E398E00E9436
+:104EA0005D0684E098E00E945D0687ED97E00E9431
+:104EB0005D0687E997E00E945D068BE697E083CF69
+:104EC0008DE597E00E945D060E9438131F928F9334
+:104ED00083E497E09F938F930E94F60680910B01E5
+:104EE0001F928F938CE297E09F938F930E94F60618
+:104EF00080916C011F928F9389E197E09F938F932C
+:104F00000E94F6068091CB019091CC01A091CD0139
+:104F1000B091CE01BF93AF939F938F9385E097E0BD
+:104F20009F938F930E94F6068DB79EB742960FB659
+:104F3000F8949EBF0FBE8DBF48CF8D5101C080E059
+:104F40000E942D2542CF8CE79BE00E945D06C0E0C9
+:104F50008C2FCF91089580E0089580E00895CF933D
+:104F6000C82F8091D901813071F020F0823009F48E
+:104F70004BC042C1E0910C01F0910D018081823261
+:104F800009F03CC107C0E0910C01F0910D01808156
+:104F9000823261F48C2F0E94AB27811104C08C2FC8
+:104FA0000E944D252FC081E090E02CC08C2F0E94E4
+:104FB000AD27811126C0C431E1F070F4CB3081F00F
+:104FC000C031D1F40E94F52388EF96E00E945D067F
+:104FD00082E08093D90115C0C93259F0C83361F419
+:104FE0008DE698E00E945D068CEF96E00E945D06DB
+:104FF00008C01092D90104C186EF96E00E945D06B8
+:10500000FFC081E08170FEC0C43228F5CE3108F0C7
+:10501000C1C0CB30A1F1D0F4C73009F0D3C08EE1CC
+:105020008093130182E3809312018AE0809311013F
+:1050300084E18093100188E080930F0188E28093DF
+:105040000E018CE995E00E945D06BFC0C33149F1B5
+:10505000C431C1F0B7C0CB3409F4A9C028F4C932B7
+:1050600089F0C83361F0AEC0C13509F49EC0C235C5
+:1050700009F499C0CE3409F0A5C06AE09EC00E9430
+:10508000F523A3C08091D801882319F01092D8018C
+:105090009CC089EA95E00E945D0681E08093D90179
+:1050A000B1C083E895E00E945D0681E795E00E942B
+:1050B0005D06809113011F928F938EE695E09F937A
+:1050C0008F930E94F6068CE695E00E945D068AE5C5
+:1050D00095E00E945D06809112011F928F9387E5F3
+:1050E00095E09F938F930E94F60685E595E00E94D8
+:1050F0005D0686E495E00E945D06809111011F9295
+:105100008F9383E495E09F938F930E94F60681E44A
+:1051100095E00E945D0680E395E00E945D06809127
+:1051200010011F928F938DE295E09F938F930E94C1
+:10513000F6068BE295E00E945D0686E195E00E940E
+:105140005D0680910F011F928F9383E195E09F93FD
+:105150008F930E94F60681E195E00E945D068AEF3A
+:1051600094E00E945D0680910E011F928F9387EF5D
+:1051700094E09F938F930E94F60685EF94E00E943F
+:105180005D068DB79EB748960FB6F8949EBF0FBECA
+:105190008DBF1BC0CE51EC2FF0E0E85CFE4F80814C
+:1051A0008093D80112C061E003C061E006C06AE0EC
+:1051B0008091D8010E940C2408C08091D8010E94DF
+:1051C000AF2403C08AE995E013C08091D8018823F9
+:1051D00069F01F928F9384E995E09F938F930E94CB
+:1051E000F6060F900F900F900F9004C081E995E0A4
+:1051F0000E945D0681E006C01092D90180E002C0E5
+:1052000080E000CFCF91089504D06894B1118DC093
+:10521000089570D088F09F5790F0B92F9927B75113
+:10522000A0F0D1F0660F771F881F991F1AF0BA956A
+:10523000C9F712C0B13081F077D0B1E0089574C0E1
+:10524000672F782F8827B85F39F0B93FCCF3869560
+:1052500077956795B395D9F73EF4909580957095BD
+:1052600061957F4F8F4F9F4F0895E89409C097FB3A
+:105270003EF490958095709561957F4F8F4F9F4F2D
+:105280009923A9F0F92F96E9BB279395F695879571
+:1052900077956795B795F111F8CFFAF4BB0F11F434
+:1052A00060FF1BC06F5F7F4F8F4F9F4F16C08823DB
+:1052B00011F096E911C0772321F09EE8872F762F11
+:1052C00005C0662371F096E8862F70E060E02AF052
+:1052D0009A95660F771F881FDAF7880F969587953E
+:1052E00097F9089557FD9058440F551F59F05F3FA7
+:1052F00071F04795880F97FB991F61F09F3F79F0F8
+:1053000087950895121613061406551FF2CF469579
+:10531000F1DF08C0161617061806991FF1CF8695FB
+:105320007105610508940895E894BB2766277727DF
+:10533000CB0197F908950AD080C071D028F076D0BB
+:1053400018F0952309F062C067C0EFCFCBDFA8F358
+:105350009923D9F35523C9F3950F50E0551FAA2778
+:10536000EE27FF27BB2700240894679520F4E20F5F
+:10537000F31FB41F0A1E220F331F441FAA1F669576
+:10538000A9F7779530F4F30FB41F0A1E121E08F424
+:105390006395330F441FAA1F221F769599F78795AF
+:1053A00020F4B40F0A1E121E631F440FAA1F221FEF
+:1053B000331F8695A9F7862F712D602D11249F57D5
+:1053C00050408AF0E1F088234AF0EE0FFF1FBB1F28
+:1053D000661F771F881F91505040A9F79E3F5105C7
+:1053E00070F014C0A2CF5F3FECF3983EDCF38695DB
+:1053F00077956795B795F795E7959F5FC1F7FE2B72
+:10540000880F911D9695879597F9089597F99F674D
+:1054100080E870E060E008959FEF80EC089500243C
+:105420000A941616170618060906089500240A9409
+:1054300012161306140605060895092E0394000C8F
+:1054400011F4882352F0BB0F40F4BF2B11F460FF1E
+:1054500004C06F5F7F4F8F4F9F4F089500245527E3
+:1054600004C0080E591F880F991F009729F07695E0
+:105470006795B8F37105B9F7802D952F0895991B9D
+:1054800079E004C0991F961708F0961B881F7A953B
+:10549000C9F78095089597FB072E16F4009407D05E
+:1054A00077FD09D00E94652A07FC05D03EF490954F
+:1054B00081959F4F0895709561957F4F0895EE0FE8
+:1054C000FF1F0590F491E02D0994AA1BBB1B51E12D
+:1054D00007C0AA1FBB1FA617B70710F0A61BB70B64
+:1054E000881F991F5A95A9F780959095BC01CD0109
+:1054F0000895F999FECF92BD81BDF89A992780B59C
+:105500000895A8E1B0E042E050E00C94A12A262FD3
+:10551000F999FECF92BD81BDF89A019700B40216A9
+:1055200039F01FBA20BD0FB6F894FA9AF99A0FBE57
+:1055300008950196272F0E94882A0C94872ADC015F
+:10554000CB01FC01F999FECF06C0F2BDE1BDF89A8E
+:10555000319600B40D9241505040B8F70895F89438
+:02556000FFCF7B
+:10556200FFEA0BDB0CB80C840C500C01BE012808BE
+:10557200140A321E0313233343536373091929395F
+:10558200495969263F4D36202303D602A0028002E4
+:105592000C0225023E025702010203040506070817
+:0255A2000900FE
+:00000001FF
diff --git a/keyboards/alps64/keymaps/default/keymap.c b/keyboards/alps64/keymaps/default/keymap.c
new file mode 100644
index 0000000000..2c45dc7f34
--- /dev/null
+++ b/keyboards/alps64/keymaps/default/keymap.c
@@ -0,0 +1,12 @@
+#include "alps64.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* 0: qwerty */
+ KEYMAP( \
+ GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, NUHS, BSPC, \
+ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
+ CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \
+ LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH,RSFT,ESC, \
+ LCTL,LGUI,LALT, SPC, APP, RALT,RGUI,RCTL),
+};
+const uint16_t PROGMEM fn_actions[] = {};
diff --git a/keyboards/alps64/led.c b/keyboards/alps64/led.c
new file mode 100644
index 0000000000..d20c51aabe
--- /dev/null
+++ b/keyboards/alps64/led.c
@@ -0,0 +1,34 @@
+/*
+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/>.
+*/
+
+#include <avr/io.h>
+#include "stdint.h"
+#include "led.h"
+
+
+void led_set(uint8_t usb_led)
+{
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ // output high
+ DDRC |= (1<<5);
+ PORTC |= (1<<5);
+ } else {
+ // Hi-Z
+ DDRC &= ~(1<<5);
+ PORTC &= ~(1<<5);
+ }
+}
diff --git a/keyboards/alps64/matrix.c b/keyboards/alps64/matrix.c
new file mode 100644
index 0000000000..805999d4a1
--- /dev/null
+++ b/keyboards/alps64/matrix.c
@@ -0,0 +1,197 @@
+/*
+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/>.
+*/
+
+/*
+ * scan matrix
+ */
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include <util/delay.h>
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+
+
+#ifndef DEBOUNCE
+# define DEBOUNCE 5
+#endif
+static uint8_t debouncing = DEBOUNCE;
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+static matrix_row_t read_cols(void);
+static void init_cols(void);
+static void unselect_rows(void);
+static void select_row(uint8_t row);
+
+
+inline
+uint8_t matrix_rows(void)
+{
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void)
+{
+ return MATRIX_COLS;
+}
+
+void matrix_init(void)
+{
+ // initialize row and col
+ unselect_rows();
+ init_cols();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ matrix_debouncing[i] = 0;
+ }
+
+ //debug
+ debug_matrix = true;
+ LED_ON();
+ _delay_ms(500);
+ LED_OFF();
+}
+
+uint8_t matrix_scan(void)
+{
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ select_row(i);
+ _delay_us(30); // without this wait read unstable value.
+ matrix_row_t cols = read_cols();
+ if (matrix_debouncing[i] != cols) {
+ matrix_debouncing[i] = cols;
+ if (debouncing) {
+ debug("bounce!: "); debug_hex(debouncing); debug("\n");
+ }
+ debouncing = DEBOUNCE;
+ }
+ unselect_rows();
+ }
+
+ if (debouncing) {
+ if (--debouncing) {
+ _delay_ms(1);
+ } else {
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = matrix_debouncing[i];
+ }
+ }
+ }
+
+ return 1;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & ((matrix_row_t)1<<col));
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+void matrix_print(void)
+{
+ print("\nr/c 0123456789ABCDEF\n");
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ phex(row); print(": ");
+ pbin_reverse16(matrix_get_row(row));
+ print("\n");
+ }
+}
+
+/* Column pin configuration
+ * col: 0 1 2 3 4 5 6 7
+ * pin: B0 B1 B2 B3 B4 B5 B6 B7
+ */
+static void init_cols(void)
+{
+ // Input with pull-up(DDR:0, PORT:1)
+ DDRB &= ~0b11111111;
+ PORTB |= 0b11111111;
+}
+
+/* Returns status of switches(1:on, 0:off) */
+static matrix_row_t read_cols(void)
+{
+ // Invert because PIN indicates 'switch on' with low(0) and 'off' with high(1)
+ return ~PINB;
+}
+
+/* Row pin configuration
+ * row: 0 1 2 3 4 5 6 7
+ * pin: D0 D1 D2 D3 D4 D5 D6 C2
+ */
+static void unselect_rows(void)
+{
+ // Hi-Z(DDR:0, PORT:0) to unselect
+ DDRD &= ~0b01111111;
+ PORTD &= ~0b01111111;
+ DDRC &= ~0b00000100;
+ PORTC &= ~0b00000100;
+}
+
+
+static void select_row(uint8_t row)
+{
+ // Output low(DDR:1, PORT:0) to select
+ switch (row) {
+ case 0:
+ DDRD |= (1<<0);
+ PORTD &= ~(1<<0);
+ break;
+ case 1:
+ DDRD |= (1<<1);
+ PORTD &= ~(1<<1);
+ break;
+ case 2:
+ DDRD |= (1<<2);
+ PORTD &= ~(1<<2);
+ break;
+ case 3:
+ DDRD |= (1<<3);
+ PORTD &= ~(1<<3);
+ break;
+ case 4:
+ DDRD |= (1<<4);
+ PORTD &= ~(1<<4);
+ break;
+ case 5:
+ DDRD |= (1<<5);
+ PORTD &= ~(1<<5);
+ break;
+ case 6:
+ DDRD |= (1<<6);
+ PORTD &= ~(1<<6);
+ break;
+ case 7:
+ DDRC |= (1<<2);
+ PORTC &= ~(1<<2);
+ break;
+ }
+}