summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--BUILD_GUIDE.md18
-rw-r--r--keyboard/ergodox_ez/keymaps/msc/img/code_layer.pngbin0 -> 71266 bytes
-rw-r--r--keyboard/ergodox_ez/keymaps/msc/img/main_layer.pngbin0 -> 90624 bytes
-rw-r--r--keyboard/ergodox_ez/keymaps/msc/img/media_layer.pngbin0 -> 75750 bytes
-rw-r--r--keyboard/ergodox_ez/keymaps/msc/keymap.c184
-rw-r--r--keyboard/ergodox_ez/keymaps/msc/msc.hex1118
-rw-r--r--keyboard/ergodox_ez/keymaps/msc/readme.md32
-rw-r--r--keyboard/planck/planck.c32
-rw-r--r--keyboard/planck/planck.h1
-rw-r--r--quantum/template/template.c20
-rw-r--r--quantum/template/template.h5
-rw-r--r--tmk_core/common/action.c5
-rw-r--r--tmk_core/common/action.h3
13 files changed, 1389 insertions, 29 deletions
diff --git a/BUILD_GUIDE.md b/BUILD_GUIDE.md
index 81c3ec44f2..22df53c30d 100644
--- a/BUILD_GUIDE.md
+++ b/BUILD_GUIDE.md
@@ -3,11 +3,13 @@
## Build Environment Setup
### Windows
-1. Install [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe). Disable smatch, but **be sure to leave the option to add the tools to the PATH checked**.
-2. Install [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). During installation, uncheck the option to install a graphical user interface. **DO NOT change the default installation folder.** The scripts depend on the default location.
-3. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/jackhumbert/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer.
-4. Right-click on the 1-setup-path-win batch script, select "Run as administrator", and accept the User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up.
-5. Right-click on the 2-setup-environment-win batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete!
+1. If you have ever installed WinAVR, uninstall it.
+2. Install [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe). Disable smatch, but **be sure to leave the option to add the tools to the PATH checked**.
+3. Install [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). During installation, uncheck the option to install a graphical user interface. **DO NOT change the default installation folder.** The scripts depend on the default location.
+4. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/jackhumbert/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer.
+5. Right-click on the 1-setup-path-win batch script, select "Run as administrator", and accept the User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up.
+6. Right-click on the 2-setup-environment-win batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete!
+7. Future build commands should be run from the standard Windows command prompt, which you can find by searching for "command prompt" from the start menu or start screen. Ignore the "MHV AVR Shell".
### Mac
If you're using [homebrew,](http://brew.sh/) you can use the following commands:
@@ -25,12 +27,12 @@ You can also try these instructions:
3. Install [DFU-Programmer][dfu-prog].
### Linux
-Install AVR GCC and dfu-progammer with your favorite package manager.
+Install AVR GCC, AVR libc, and dfu-progammer with your favorite package manager.
Debian/Ubuntu example:
sudo apt-get update
- sudo apt-get install gcc-avr dfu-programmer
+ sudo apt-get install gcc-avr avr-libc dfu-programmer
### Vagrant
If you have any problems building the firmware, you can try using a tool called Vagrant. It will set up a virtual computer with a known configuration that's ready-to-go for firmware building. OLKB does NOT host the files for this virtual computer. Details on how to set up Vagrant are in the [VAGRANT_GUIDE file](VAGRANT_GUIDE.md).
@@ -52,4 +54,4 @@ If you have any problems building the firmware, you can try using a tool called
## Troubleshooting
1. Try running `make clean` if the make command fails.
- WIP \ No newline at end of file
+ WIP
diff --git a/keyboard/ergodox_ez/keymaps/msc/img/code_layer.png b/keyboard/ergodox_ez/keymaps/msc/img/code_layer.png
new file mode 100644
index 0000000000..7b5efaae79
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/msc/img/code_layer.png
Binary files differ
diff --git a/keyboard/ergodox_ez/keymaps/msc/img/main_layer.png b/keyboard/ergodox_ez/keymaps/msc/img/main_layer.png
new file mode 100644
index 0000000000..65f92dda1b
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/msc/img/main_layer.png
Binary files differ
diff --git a/keyboard/ergodox_ez/keymaps/msc/img/media_layer.png b/keyboard/ergodox_ez/keymaps/msc/img/media_layer.png
new file mode 100644
index 0000000000..a69799b073
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/msc/img/media_layer.png
Binary files differ
diff --git a/keyboard/ergodox_ez/keymaps/msc/keymap.c b/keyboard/ergodox_ez/keymaps/msc/keymap.c
new file mode 100644
index 0000000000..e567e513f9
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/msc/keymap.c
@@ -0,0 +1,184 @@
+#include "ergodox_ez.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | BkSp | A | S | D | F | G |------| |------| H | J | K | L | ; |' / Cmd |
+ * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | Cmd | Alt |AltShf| Left | Right| | Left | Down | Up |Right | L2 |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | App | LGui | | Alt |Ctrl/Esc|
+ * ,------|------|------| |------+--------+------.
+ * | | | Home | | PgUp | | |
+ * | Space|Backsp|------| |------| Tab |Enter |
+ * | |ace | End | | PgDn | | |
+ * `--------------------' `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP( // layer 0 : default
+ // left hand
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
+ KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
+ KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
+ KC_LGUI,KC_LALT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
+ ALT_T(KC_APP), KC_LGUI,
+ KC_HOME,
+ KC_SPC,KC_BSPC,KC_END,
+ // right hand
+ KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, KC_J, KC_K, KC_L, KC_SCLN,GUI_T(KC_QUOT),
+ MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
+ KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TG(MDIA),
+ KC_LALT, CTL_T(KC_ESC),
+ KC_PGUP,
+ KC_PGDN,KC_TAB, KC_ENT
+ ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | . | 0 | = | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+ // left hand
+ KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+ KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+ KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,
+ KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,
+ // right hand
+ KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
+ KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
+ KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
+ KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | MsUp | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | Mute | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | Prev |VolDn |VolUp | Next | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | |Brwser|
+ * | Lclk | Rclk |------| |------| |Back |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_BTN1, KC_BTN2, KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+ uint8_t layer = biton32(layer_state);
+
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ switch (layer) {
+ // TODO: Make this relevant to the ErgoDox EZ.
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ default:
+ // none
+ break;
+ }
+
+};
diff --git a/keyboard/ergodox_ez/keymaps/msc/msc.hex b/keyboard/ergodox_ez/keymaps/msc/msc.hex
new file mode 100644
index 0000000000..a466a37af7
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/msc/msc.hex
@@ -0,0 +1,1118 @@
+:100000000C9465020C94A9020C94A9020C94A90208
+:100010000C94A9020C94A9020C94A9020C94A902B4
+:100020000C94A9020C94A9020C94AD0B0C947F0CB7
+:100030000C94A9020C94A9020C94A9020C94A90294
+:100040000C94A9020C9404210C94A9020C94A9020A
+:100050000C94A9020C94951A0C94A9020C94A90270
+:100060000C94A9020C94A9020C94A9020C94A90264
+:100070000C94A9020C94A9020C94A9020C94A90254
+:100080000C94A9020C94A9020C94A9020C94A90244
+:100090000C94A9020C94A9020C94A9020C94A90234
+:1000A0000C94A9020C94A9020C94A902EC0C0E0D5C
+:1000B000FC0D0E0DFC0D530D760DFC0DCB0DDE0D64
+:1000C000C010C010EF10EF10321170118913891396
+:1000D000891189138A128A125D1389138913741383
+:1000E0000000F0A12E004C002A00E100E300000017
+:1000F0001E00140004001D71E2004D001F001A00D4
+:1001000016001B00E1042A0020000800070006007A
+:1001100050002C0021001500090019004F004A0072
+:10012000220017000A000500000065745000015409
+:100130000000007F0000E3004F0001540000007742
+:100140000000E20023001C000B00110000002971D8
+:10015000240018000D00100050004B0025000C007A
+:100160000E00360051002800260012000F00370054
+:1001700052002B0027001300330038714F004E004F
+:100180002D0031003478E500025400000100010028
+:1001900001000100010000003A001E0220022202BC
+:1001A000010001003B001F022102230201000100A7
+:1001B0003C002F0226022F00010001003D0030020A
+:1001C00027023000010001003E00310235003502F7
+:1001D000000001000100010000000100000001001A
+:1001E0000100010000000100000001003F0052007A
+:1001F00051002402000001004000240021001E00E4
+:10020000010001004100250022001F00370001000D
+:1002100042002600230020002700010043002502A1
+:100220002E0231002E0001004400450001000100B3
+:1002300001000000010001000100010001000000B8
+:1002400001000100010001000100010001000100A6
+:10025000F20001000100F5000100F000F1000100D2
+:100260000100F40001000100F300010001000100A1
+:100270000100010001000100000001000100010077
+:100280000000010000000100010001000000010069
+:100290000000010001000100010001000000010058
+:1002A000010001000100A800AC00010001000100F4
+:1002B00001000100AA00B6000100010001000100D8
+:1002C000A90001000100010001000100AB000100D4
+:1002D00001000100AE00010001000000160345000E
+:1002E000720067006F0044006F0078002000450036
+:1002F0005A00000016034500720067006F004400BA
+:100300006F007800200045005A0000000403090433
+:1003100009026D00040100A0FA09040000010301B4
+:100320000100092111010001223F00070581030896
+:10033000000A090401000103010200092111010062
+:1003400001224D000705820308000A09040200018A
+:100350000300000009211101000122360007058376
+:100360000308000A09040300010300000009211129
+:100370000100012239000705840310000112011059
+:100380000100000008EDFE07130100010200010555
+:10039000010906A101050719E029E71500250195C6
+:1003A0000875018102050819012905950575019156
+:1003B000029501750391010507190029771500259C
+:1003C00001957875018102C005010980A1018502AE
+:1003D00016010026B7001A01002AB7007510950112
+:1003E0008100C0050C0901A1018503160100269CAE
+:1003F000021A01002A9C02751095018100C00501B6
+:100400000902A1010901A100050919012905150029
+:10041000250195057501810295017503810105018D
+:10042000093009311581257F950275088106093843
+:100430001581257F950175088106050C0A3802157E
+:1004400081257F950175088106C0C005010906A1B7
+:1004500001050719E029E7150025019508750181B7
+:100460000295017508810105081901290595057591
+:100470000191029501750391010507190029FF15E6
+:100480000025FF950675088100C0000000000000EF
+:100490000000000000010204060A0F17202C3A4A4F
+:1004A0005D71879DB3C7DAE9F5FCFFFCF5E9DAC7B2
+:1004B000B39D87715D4A3A2C20170F0A060402018A
+:1004C0000000000000000000000011241FBECFEF5C
+:1004D000DAE0DEBFCDBF04B603FE24C08091EE019A
+:1004E0009091EF01A091F001B091F1018730904B14
+:1004F000A740B04BB9F41092EE011092EF011092A8
+:10050000F0011092F10114BE84B7877F84BF88E1A7
+:100510000FB6F89480936000109260000FBEE0E088
+:10052000FFE3099511E0A0E0B1E0ECE8F5E402C0DA
+:1005300005900D92A433B107D9F711E0A4E3B1E01F
+:1005400001C01D92AE3EB107E1F70E94F1080C9484
+:10055000C4220C94000061110BC0FC01828188232D
+:1005600021F085EE0E945D0F03C085EE0E942510EC
+:1005700080E090E0089508956091B1017091B2011A
+:100580008091B3019091B4010E94C41956985E986D
+:1005900025982D9826982E9827982F98813019F015
+:1005A000823021F00895259A2D9A0895269A2E9A40
+:1005B00008950C94BC0256985E9825982D9826981C
+:1005C0002E9827982F988FEF90E090938900809332
+:1005D000880090938B0080938A0090938D00809385
+:1005E0008C00259A2D9A2FEF80E792E021508040D1
+:1005F0009040E1F700C00000269A2E9A2FEF80E786
+:1006000092E0215080409040E1F700C00000279A1E
+:100610002F9A2FEF80E792E0215080409040E1F741
+:1006200000C0000025982D982FEF80E792E0215020
+:1006300080409040E1F700C0000026982E982FEFF0
+:1006400080E792E0215080409040E1F700C0000038
+:1006500027982F9856985E9825982D9826982E982A
+:1006600027982F98089589EA8093800089E08093E5
+:10067000810024982C983F988AB18F748AB96E981B
+:10068000479A8BB1806B8BB9769A0E94DB020C94EF
+:10069000BB0280E2809300018091340181110EC081
+:1006A0000E94980381E0809334012FEF83ED90E363
+:1006B000215080409040E1F700C0000080E40E949B
+:1006C0009E038093000181112EC00E94C803809375
+:1006D0000001811128C00E94C8038093000181118C
+:1006E00022C08FE30E94C8038093000181111BC0C8
+:1006F0000E94C00380E40E949E0380930001811148
+:1007000012C08CE00E94C8038093000181110BC0CD
+:100710000E94C80380930001811105C08FE30E94ED
+:10072000C803809300010E94C003809100010895D6
+:100730001092B9008AE08093B800089594EA9093EB
+:10074000BC009091BC0097FFFCCF9091B900987FBE
+:10075000983021F0903111F081E008958093BB0032
+:1007600084E88093BC008091BC0087FFFCCF80911F
+:10077000B900887F883111F0803471F780E00895E6
+:1007800084E98093BC008091BC0084FDFCCF089577
+:100790008093BB0084E88093BC008091BC0087FFFD
+:1007A000FCCF9091B900987F81E0983209F480E005
+:1007B000089584E88093BC008091BC0087FFFCCF43
+:1007C0008091BB00089580910001811115C080E4E3
+:1007D0000E949E038093000181110CC082E10E945F
+:1007E000C80380930001811105C08FEF0E94C803E8
+:1007F000809300010E94C00384B1807F84B985B1D9
+:10080000807F85B98AB1837F8AB98BB1837F8BB9A9
+:100810003E98469808950E944903809300010E94E3
+:10082000E30380B38C7080BB81B3836F81BBA6E38D
+:10083000B1E0E4E4F1E08EE08E0F11921D928E1390
+:10084000FCCF0C943303BF92CF92DF92EF92FF92D2
+:100850000F931F93CF93DF9380910001882379F04A
+:10086000809135018F5F80933501811108C00E940E
+:10087000490380930001811102C00E94DB0206E35C
+:1008800011E0C0E0D0E0DD24D39482E0C82EEE2455
+:10089000E394F12CC730D10500F58091000181115E
+:1008A00064C080E40E949E0380930001811112C005
+:1008B00082E10E94C8038093000181110BC0C7012F
+:1008C0000C2E01C0880F0A94EAF780950E94C80395
+:1008D000809300010E94C00348C0CA30A1F028F4F0
+:1008E000C83059F0C93061F005C0CC3089F070F0E3
+:1008F000CD3089F0209A289810C0219A29980DC0EF
+:10090000229A2A980AC0239A2B9807C0529A01C0AB
+:10091000539A5B9802C03E9A469890EA9A95F1F7EE
+:100920009FB1799902C082E001C080E091709D255D
+:10093000982B7C9902C084E001C080E0892B7D99CE
+:1009400002C038E001C030E0832B7E9902C020E174
+:1009500001C020E0822B9FB19095991F9927991F84
+:100960009295990F907E892B0FC080910001811183
+:1009700049C080E40E949E0380930001882379F19E
+:10098000B12C0E94C0038B2DF8019081981719F0AB
+:100990008083C09201010E94E30321960F5F1F4FE5
+:1009A000CE30D10509F076CF80910101882361F125
+:1009B000815080930101882339F08FE99FE00197EE
+:1009C000F1F700C0000020C0A4E4B1E0E6E3F1E0EC
+:1009D000CF01825F91919D938E13FCCF15C083E16F
+:1009E0000E94C803809300018111CACF81E40E9454
+:1009F0009E03809300018111C3CF0E94D903B82EBA
+:100A0000B094BFCF80E0C0CF0E94D90281E0DF91D7
+:100A1000CF911F910F91FF90EF90DF90CF90BF90FB
+:100A20000895E82FF0E0EC5BFE4F80810895089573
+:100A30008B3B910578F4883A910540F5853A91050C
+:100A4000D0F48430910508F0B1C08130910509F4EB
+:100A5000ADC06BC0803E910508F467C0883E91052B
+:100A600008F4A4C09C01205F31092031310508F051
+:100A70005CC090650895853A910509F459C0863A9D
+:100A8000910509F058C082E890E40895883A9105EC
+:100A900009F454C0893A910509F453C08A3A910582
+:100AA00009F452C08B3A910509F451C08C3A910572
+:100AB00009F450C08D3A910509F44FC0803B91056F
+:100AC00009F44EC08E3A910509F44DC08F3A910554
+:100AD00009F44CC0813B910509F44BC0823B910560
+:100AE00009F44AC0833B910509F449C0843B910550
+:100AF00009F448C0853B910509F447C0863B910540
+:100B000009F446C0873B910509F445C0883B91052F
+:100B100009F444C0893B910509F443C08A3B91051F
+:100B200009F442C080E094E4089580E090E00895E4
+:100B300081E890E4089583E890E4089582EE94E4D7
+:100B4000089589EE94E408958AEE94E4089585EB7F
+:100B500094E4089586EB94E4089587EB94E4089573
+:100B60008CEC94E408958DEC94E4089583E895E486
+:100B700008958AE895E4089582E995E4089584E962
+:100B800095E4089581E296E4089583E296E4089559
+:100B900084E296E4089585E296E4089586E296E478
+:100BA000089587E296E408958AE296E40895089508
+:100BB00096E0799FF001112494E5899FE00DF11DE5
+:100BC0001124E60FF11DEE0FFF1FEC51FF4F859131
+:100BD00094910895880F991FFC01E05AF040859187
+:100BE00094910895880F991FFC01E052FF4F859161
+:100BF0009491089526E0729FF001112444E5849FAA
+:100C0000E00DF11D1124E60FF11DEE0FFF1FEC5159
+:100C1000FF4F859194919C013A9521154FE134073E
+:100C200008F41AC13F512115304120F49F700E94F1
+:100C3000F20508959C0130532115304118F499278D
+:100C4000906C0895811520E5920769F40E94AB131A
+:100C50004FEF84E39CE0415080409040E1F700C0BA
+:100C600000000C94BA1A813020E5920731F480918B
+:100C7000CC0181608093CC0108959C0130552115F1
+:100C8000304108F051C0292F33272F7033272130EE
+:100C90003105D9F4AC014370552702C0220F331F30
+:100CA0004A95E2F73C68AC0164E0440F551F6A9531
+:100CB000E1F744275370242B352B73E0880F991FDD
+:100CC0007A95E1F7807699271DC02230310529F405
+:100CD000982F8827816F906A089523303105A9F4F1
+:100CE000AC014370552721E030E002C0220F331FD2
+:100CF0004A95E2F73C6843E0880F991F4A95E1F76F
+:100D0000807E9770822B932B089524303105E1F477
+:100D1000AC014370552721E030E002C0220F331FA1
+:100D20004A95E2F73A68E7CF9C01305721153041E8
+:100D300018F49F70906208959C013058211530413D
+:100D400018F49F70906A0895803E9105E0F4803C0D
+:100D5000910558F58133910509F46FC048F4893243
+:100D6000910509F463C08A32910509F46DC072C01F
+:100D700089339105E9F082389105D1F085339105E9
+:100D800009F44DC067C0833E910581F138F4803E7F
+:100D90009105B9F0823E9105D9F05CC0863E91057F
+:100DA00061F1873E9105A1F155C00E94EA050895C1
+:100DB0002091DF0120FD02C021FF4CC080EE90E0B9
+:100DC00049C08091DF0180FFF9CF89E390E042C004
+:100DD0008091DF0182FF0EC08091DF0184FF03C09C
+:100DE00080E090E037C083EE90E034C08091DF0176
+:100DF00082FFF2CF82EE90E02DC08091DF0183FF71
+:100E00000BC08091DF0184FDEBCF87EE90E022C024
+:100E10008091DF0183FFF5CF86EE90E01BC08091CB
+:100E2000DF0185FF07C089E290E014C08091DF01F7
+:100E300085FFF9CF85E390E00DC08091DF0186FF4B
+:100E400007C08AE290E006C08091DF0186FFF9CFFB
+:100E500081E390E00E941805089508950C942D07F1
+:100E6000809162010895CF93DF9300D01F92CDB798
+:100E7000DEB79C018091E501843019F593E09983F8
+:100E80003B832A839093E9008FEF9091E800815093
+:100E900095FD06C095ED9A95F1F700008111F5CF0B
+:100EA0008091E80085FF0DC040E050E063E070E015
+:100EB000CE0101960E949D098091E8008E77809373
+:100EC000E8000F900F900F90DF91CF910895CF938E
+:100ED000DF9300D01F92CDB7DEB72091E50124301B
+:100EE00021F522E029839B838A8383E08093E900B4
+:100EF0008FEF9091E800815095FD06C095ED9A9591
+:100F0000F1F700008111F5CF8091E80085FF0DC059
+:100F100040E050E063E070E0CE0101960E949D0940
+:100F20008091E8008E778093E8000F900F900F90EB
+:100F3000DF91CF9108952091E5012430F1F422E072
+:100F40002093E9002FEF3091E800215035FD06C0D5
+:100F500035ED3A95F1F700002111F5CF2091E80029
+:100F600025FF0BC040E050E065E070E00E949D0965
+:100F70008091E8008E778093E8000895CF93DF9307
+:100F8000EC019091E501943009F046C080910C018C
+:100F90008823D9F080910D018823B9F09093E9005E
+:100FA0008FEF9091E800815095FD06C095E19A95EC
+:100FB000F1F700008111F5CF8091E80085FF2CC08A
+:100FC00040E050E060E170E017C081E08093E9000C
+:100FD0008FEF9091E800815095FD06C095ED9A95B0
+:100FE000F1F700008111F5CF8091E80085FF14C072
+:100FF00040E050E068E070E0CE010E949D098091E1
+:10100000E8008E778093E80080E1FE01A2E5B1E080
+:1010100001900D928A95E1F7DF91CF91089580912B
+:10102000E401811109C00E94320B0E948F0B809154
+:10103000E20084608093E20008951092E401089534
+:1010400008950C94F1200E94501A0E94F7200E94EB
+:10105000350E0C942E0742E061EC81E00E94AC0A50
+:1010600042E061EC82E00E94AC0A42E061EC83E085
+:101070000E94AC0A42E161EC84E00C94AC0A8091DD
+:10108000E701833009F455C030F4813071F08230CB
+:1010900009F48EC008958A3009F47AC08B3009F4BF
+:1010A00060C0893009F09CC020C08091E601813A7F
+:1010B00009F096C08091E800877F8093E8008091D6
+:1010C000EA019091EB01892B21F460E182E591E046
+:1010D00003C060E080E090E070E00E94E809809149
+:1010E000E8008B778093E80008958091E6018132D3
+:1010F00009F076C08091EA019091EB01009719F018
+:10110000039709F06DC08091E800877F8093E80025
+:101110008091E80082FD05C08091E5018111F8CF42
+:101120005FC08091F100809362018091E8008B772D
+:1011300053C08091E601813A09F052C08091EA01E2
+:101140009091EB01892B09F04BC08091E800877FDB
+:101150008093E8008091E80080FFFCCF80910C0133
+:1011600036C08091E6018132D9F58091EA019091F3
+:10117000EB01892BA9F58091E800877F8093E80037
+:101180000E94E10A8091E80180930C010C94AB135A
+:101190008091E601813221F58091E800877F80937C
+:1011A000E8000E94E10A8091E901809363010895BB
+:1011B0008091E601813AA1F48091E800877F8093D5
+:1011C000E8008091E80080FFFCCF8091630180936C
+:1011D000F1008091E8008E778093E8000C94E10A9A
+:1011E000089584B7877F84BF88E10FB6F894809311
+:1011F0006000109260000FBE90E080E80FB6F89497
+:1012000080936100909361000FBE0E94840E0E9443
+:10121000320B0E948F0B8091E20084608093E20089
+:1012200078940E94150E0E94860E82E091E00E9442
+:10123000300E0E94DF208091E501853069F40E9424
+:10124000141A8091E3018823B1F30E943C1A882389
+:1012500091F30E948709EFCF0E948C0EECCF292FCB
+:10126000332723303105C9F064F42130310581F092
+:101270002230310509F043C08DE690E020E133E0F3
+:1012800042C021323105F1F02232310541F137C03F
+:1012900082E190E02DE733E036C099278130910557
+:1012A00041F08230910541F0892B49F5ECE0F3E003
+:1012B00005C0E4EFF2E002C0ECEDF2E0849190E0D2
+:1012C0009F0121C06430D8F4E62FF0E0EE0FFF1F3D
+:1012D000EE5DFE4F2081318189E090E014C06430E2
+:1012E00070F470E0FB01EE0FFF1FE65EFE4F208101
+:1012F0003181FB01EA5EFE4F808190E004C080E016
+:1013000090E020E030E0FA0131832083089580E10D
+:1013100089BD82E189BD09B400FEFDCF8091D8006E
+:101320008F7D8093D8008091E00082608093E00000
+:101330008091E00081FDFCCF0895CF92DF92EF9283
+:10134000FF920F931F93CF93DF93EC018B016A0100
+:101350000E94000B811133C0C114D10439F0F60191
+:1013600080819181081B190BC80FD91FE12CF12C2A
+:101370000115110519F18091E80085FD16C08091D5
+:10138000E8008E778093E800C114D10449F0F6019B
+:1013900080819181E80EF91EF182E08285E00FC024
+:1013A0000E94000B882321F30AC089918093F100E9
+:1013B00001501109FFEFEF1AFF0ADACF80E0DF9149
+:1013C000CF911F910F91FF90EF90DF90CF900895F4
+:1013D0002091EC013091ED012617370748F0611597
+:1013E000710539F42091E8002E772093E80001C0C0
+:1013F000B90140E061157105A9F12091E5012223B1
+:1014000009F443C0253009F442C02091E80023FDCF
+:1014100040C02091E80022FD32C02091E80020FF6A
+:10142000E9CF4091F3002091F20030E0342BFC0131
+:10143000CF016115710559F02830310540F48191D3
+:101440008093F100615071092F5F3F4FF1CF41E070
+:101450002830310509F040E02091E8002E772093F4
+:10146000E800C8CF4111C9CF0AC08091E5018823A7
+:1014700061F0853061F08091E80083FD0AC08091C1
+:10148000E80082FFF2CF80E0089582E0089583E0D3
+:10149000089581E008952091EC013091ED01261727
+:1014A000370748F06115710539F42091E8002E776F
+:1014B0002093E80001C0B901FC0120E0611571052D
+:1014C00091F18091E501882309F440C0853009F449
+:1014D0003FC08091E80083FD3DC08091E80082FD1F
+:1014E0002FC08091E80080FFE9CF2091F300809128
+:1014F000F20090E0922B6115710559F0883091054A
+:1015000040F424912093F1003196615071090196C5
+:10151000F2CF21E0089709F020E08091E8008E7773
+:101520008093E800CBCF2111CCCF0AC08091E50198
+:10153000882361F0853061F08091E80083FD0AC066
+:101540008091E80082FFF2CF80E0089582E0089564
+:1015500083E0089581E00895982F973058F590938F
+:10156000E900981739F07091EC002091ED0050914E
+:10157000F00003C0242F762F50E021FF19C03091D6
+:10158000EB003E7F3093EB003091ED003D7F3093D8
+:10159000ED003091EB0031603093EB007093EC0084
+:1015A0002093ED005093F0002091EE0027FF07C03C
+:1015B0009F5FD3CF8F708093E90081E0089580E032
+:1015C00008958091E60187FF11C08091E80082FDB7
+:1015D00005C08091E5018111F8CF11C08091E8002C
+:1015E0008B770BC08091E501882349F08091E8005A
+:1015F00080FFF8CF8091E8008E778093E80008950F
+:101600002091E4003091E50095E64091EC00842FB4
+:10161000817040FF22C08091E80080FD1CC0809155
+:10162000E501882391F0853091F08091EB0085FDF4
+:1016300010C04091E4005091E5004217530729F390
+:101640009A01915011F784E0089582E0089583E0B3
+:10165000089581E0089580E008954091E80042FFF8
+:10166000DECF08950E94A00B0E94A80BE0EEF0E0F0
+:10167000808181608083E8EDF0E080818F778083D6
+:1016800019BCA7EDB0E08C918E7F8C9380818F7E0A
+:1016900080831092E40108950F931F93CF93DF93FB
+:1016A0000E94A00B0E94A80BC8EDD0E088818F7724
+:1016B000888388818068888388818F7D888319BC2E
+:1016C0001092E5011092E1011092E3011092E20103
+:1016D00000EE10E0F80180818B7F8083888181603B
+:1016E000888342E060E080E00E94AC0AE1EEF0E036
+:1016F00080818E7F8083E2EEF0E080818160808354
+:10170000808188608083F80180818E7F80838881DA
+:1017100080618883DF91CF911F910F910895E8ED4B
+:10172000F0E080818F7E8083E7EDF0E08081816052
+:10173000808384E082BF81E08093E4010C944C0BB1
+:10174000E8EDF0E080818E7F80831092E2000895C2
+:101750001092DA001092E10008951F920F920FB6D6
+:101760000F9211242F933F934F935F936F937F9327
+:101770008F939F93AF93BF93EF93FF938091E1007B
+:1017800082FF0BC08091E20082FF07C08091E100E0
+:101790008B7F8093E1000E94140E8091DA0080FF1D
+:1017A0001FC08091D80080FF1BC08091DA008E7F1F
+:1017B0008093DA008091D90080FF0DC080E189BD5F
+:1017C00082E189BD09B400FEFDCF81E08093E5018F
+:1017D0000E940F0805C019BC1092E5010E941D0867
+:1017E0008091E10080FF19C08091E20080FF15C068
+:1017F0008091E2008E7F8093E2008091E200806120
+:101800008093E2008091D80080628093D80019BC58
+:1018100085E08093E5010E9421088091E10084FF2A
+:1018200030C08091E20084FF2CC080E189BD82E15C
+:1018300089BD09B400FEFDCF8091D8008F7D8093D3
+:10184000D8008091E1008F7E8093E1008091E200DA
+:101850008F7E8093E2008091E20081608093E200BD
+:101860008091E101882311F084E007C08091E300BA
+:1018700087FD02C081E001C083E08093E5010E9402
+:1018800023088091E10083FF29C08091E20083FF5B
+:1018900025C08091E100877F8093E10082E0809302
+:1018A000E5011092E1018091E1008E7F8093E100DB
+:1018B0008091E2008E7F8093E2008091E20080615F
+:1018C0008093E20042E060E080E00E94AC0A8091F8
+:1018D000F00088608093F0000E942008FF91EF9153
+:1018E000BF91AF919F918F917F916F915F914F9138
+:1018F0003F912F910F900FBE0F901F9018951F9240
+:101900000F920FB60F9211242F933F934F935F9333
+:101910006F937F938F939F93AF93BF93CF93DF93F7
+:10192000EF93FF93C091E900CF708091EC00D82F26
+:10193000D17080FDD0E81092E9008091F000877F9F
+:101940008093F00078940E94C30C1092E90080917B
+:10195000F00088608093F000CD2BCF70C093E90039
+:10196000FF91EF91DF91CF91BF91AF919F918F91B7
+:101970007F916F915F914F913F912F910F900FBE8B
+:101980000F901F9018951F93CF93DF93CDB7DEB7BD
+:10199000AA970FB6F894DEBF0FBECDBFE6EEF1E01A
+:1019A00088E08E0F9091F10091938E13FBCF0E94EF
+:1019B0003F088091E80083FF1FC18091E60190916C
+:1019C000E701492F50E04A30510508F015C1FA01EE
+:1019D000EA5AFF4F0C947922803881F0823809F05E
+:1019E0000BC18091EA018F708093E9008091EB0038
+:1019F00085FB882780F91092E90006C08091E201FA
+:101A00009091E301911182609091E800977F90930B
+:101A1000E8008093F1001092F100C8C0282F2D7FBC
+:101A200009F0EAC0882319F0823061F0E5C08091A6
+:101A3000E801813009F0E0C0933009F080E0809344
+:101A4000E3012BC08091E801811127C08091EA0158
+:101A50008F7009F4D1C08093E9002091EB0020FF42
+:101A60001CC0933021F48091EB00806214C09091EF
+:101A7000EB0090619093EB0021E030E0A90102C0FF
+:101A8000440F551F8A95E2F74093EA001092EA004E
+:101A90008091EB0088608093EB001092E9008091C8
+:101AA000E800877F86C08111A7C01091E8011F77E9
+:101AB0008091E3008078812B8093E3008091E8009F
+:101AC000877F8093E8000E94E10A8091E80080FF10
+:101AD000FCCF8091E30080688093E300111102C085
+:101AE00082E001C083E08093E50186C080588230A7
+:101AF00008F082C08091E8019091E9018C3D53E0AB
+:101B0000950779F583E08A838AE289834FB7F89451
+:101B1000DE01139620E03EE051E2E32FF0E0509327
+:101B20005700E49120FF03C0E295EF703F5FEF7034
+:101B30008E2F90E0EA3010F0C79601C0C0968D93CA
+:101B40009D932F5F243149F74FBF8091E800877F35
+:101B50008093E8006AE270E0CE0101960E94E809F5
+:101B600014C0AE014F5F5F4F6091EA010E942F09E0
+:101B7000BC01892B09F440C09091E800977F9093B5
+:101B8000E80089819A810E944B0A8091E8008B7756
+:101B90008093E80031C0803879F58091E800877F34
+:101BA0008093E8008091E1018093F1008091E8004A
+:101BB0008E778093E8000E94E10A1EC081111CC04C
+:101BC0009091E8019230C0F48091E800877F809383
+:101BD000E8009093E1010E94E10A8091E101811106
+:101BE00006C08091E30087FD02C081E001C084E06F
+:101BF0008093E5010E942B088091E80083FF0AC0D2
+:101C00008091E800877F8093E8008091EB008062FC
+:101C10008093EB00AA960FB6F894DEBF0FBECDBF3F
+:101C2000DF91CF911F9108950895CF938091E501A1
+:101C30008823A1F0C091E900CF709091EC00892F2A
+:101C4000817090FD80E8C82B1092E9008091E80037
+:101C500083FD0E94C30CCF70C093E900CF9108951B
+:101C600090936901809368010895E0916801F09173
+:101C70006901309721F00190F081E02D099480E016
+:101C80000895E0916801F0916901309721F0028098
+:101C9000F381E02D09940895E0916801F0916901C4
+:101CA000309721F00480F581E02D0994089520916A
+:101CB0006601309167018217930771F09093670175
+:101CC00080936601E0916801F0916901309721F0FD
+:101CD0000680F781E02D09940895209164013091E8
+:101CE00065018217930771F09093650180936401F9
+:101CF000E0916801F0916901309721F00084F1854D
+:101D0000E02D0994089508950C94830E0E94561AAC
+:101D10000E940B040C941C1BCF92DF92EF92FF9257
+:101D20000F931F93CF93DF93CDB7DEB72B970FB6EB
+:101D3000F894DEBF0FBECDBF0E9423048BE6C82EF1
+:101D400081E0D82E00E010E0E02E802F0E941105E7
+:101D5000F60141916F01F42EF826B1F40F5F1F4F89
+:101D60000E30110589F78FEF89838A831B820E94C9
+:101D70005F1A8160782F9D838C8349815A816B81A2
+:101D80008D810E942F0F40C09091CC0191FF04C023
+:101D90008B870E9417058B8520E030E04F2D50E0A7
+:101DA000922FBA01022E02C0759567950A94E2F748
+:101DB00060FF24C02E83EF8221E030E0690102C081
+:101DC000CC0CDD1C9A95E2F790E08C219D21892BAB
+:101DD00009F420E028870E945F1A8160782F9A8793
+:101DE00089874E815F8168858A850E942F0FF8015F
+:101DF000E559FE4F8081C826C08206C02F5F3F4F45
+:101E00002630310569F6AACF0E94031E10916A019F
+:101E10000E94350E1817A1F00E94350E80936A01BA
+:101E20002B960FB6F894DEBF0FBECDBFDF91CF91DA
+:101E30001F910F91FF90EF90DF90CF900C942E07A1
+:101E40002B960FB6F894DEBF0FBECDBFDF91CF91BA
+:101E50001F910F91FF90EF90DF90CF900895CF9357
+:101E6000DF93CDB7DEB72B970FB6F894DEBF0FBE6A
+:101E7000CDBF4F83588769877A878B87DE0111969C
+:101E800086E0FD0111928A95E9F785E0FE0137961B
+:101E900001900D928A95E1F749815A816B817C818D
+:101EA0008D819E810E9445162B960FB6F894DEBF59