Stephan Bösebeck 9 years ago
commit 37e68596dd

@ -25,12 +25,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 +52,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
WIP

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

@ -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;
}
};

@ -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
:101EB0000FBECDBFDF91CF910895CF93882309F452
:101EC000C2C0C82F823859F40E94350E81FDBBC0B4
:101ED00089E30E94E1180E949E1989E30CC08338AF
:101EE00079F40E94350E80FDAEC083E50E94E118B2
:101EF0000E949E1983E50E942319CF910C949E198C
:101F0000843859F40E94350E82FD9DC087E40E94FA
:101F1000E1180E949E1987E4EECF8CEF8C0F813A76
:101F200048F48C2F0E94442081118DC08C2F0E9478
:101F3000E118E3CF80E28C0F883048F4C77081E06D
:101F400001C0880FCA95EAF70E946719D6CF8BE5C2
:101F50008C0F833078F4C53A29F0C63A31F083E823
:101F600090E005C081E890E002C082E890E0CF9167
:101F70000C94570E88E58C0F833108F064C0C83A82
:101F800039F1C93A41F1CA3A49F1CB3A51F1CC3A67
:101F900059F1CD3A61F1C03B69F1CE3A71F1CF3AD6
:101FA00079F1C13B81F1C23B89F1C33B91F1C43B63
:101FB00099F1C53BA1F1C63BA9F1C73BB1F1C83BC3
:101FC000B9F1C93BC1F1CA3BC9F180E090E038C02A
:101FD00082EE90E035C089EE90E032C08AEE90E06B
:101FE0002FC085EB90E02CC086EB90E029C087EBFA
:101FF00090E026C08CEC90E023C08DEC90E020C0F7
:1020000083E891E01DC08AE891E01AC082E991E07E
:1020100017C084E991E014C081E292E011C083E22C
:1020200092E00EC084E292E00BC085E292E008C02C
:1020300086E292E005C087E292E002C08AE292E086
:10204000CF910C946D0ECF910895882309F44BC065
:10205000823859F40E94350E81FF45C089E30E9401
:10206000E1180E949E1989E30CC0833871F40E9424
:10207000350E80FF38C083E50E94E1180E949E194A
:1020800083E50E9423190C949E19843859F40E9408
:10209000350E82FF28C087E40E94E1180E949E1935
:1020A00087E4EFCF9CEF980F913A58F390E2980FA6
:1020B000983050F4877091E001C0990F8A95EAF743
:1020C000892F0E946D19DFCF9BE5980F933020F484
:1020D00080E090E00C94570E885A833120F480E021
:1020E00090E00C946D0E0895882321F00E946719EA
:1020F0000C949E190895882321F00E946D190C9468
:102100009E190895BF92CF92DF92EF92FF920F93A4
:102110001F93CF93DF9300D000D000D0CDB7DEB7B0
:1021200025E0FC01DE01119601900D922A95E1F760
:10213000FC01408131810281258122952F706381CC
:102140007481672B09F4E5C23F3F19F44F3F09F44E
:10215000E0C27C0149833A8389819A812E830E945F
:10216000A018182FB92E0E949F180E946617EB2DF9
:10217000E295EF70F0E0E05AFF4F2E810C94792247
:102180008B2D807F9B2D9F70F92E882319F0F29460
:1021900080EFF822002349F0FF2009F467C28F2D59
:1021A0000E9477190E949E1961C2812F0E942510FA
:1021B000FF2009F4AEC28F2D0E947D1926960FB61E
:1021C000F894DEBF0FBECDBFDF91CF911F910F916D
:1021D000FF90EF90DF90CF90BF900C949E193B2D15
:1021E000307F8B2D8F70303211F08295807F1123DC
:1021F00019F0113021F12CC00023B9F0222309F489
:10220000A0C1213009F09DC126960FB6F894DEBF1B
:102210000FBECDBFDF91CF911F910F91FF90EF9037
:10222000DF90CF90BF900C948719222319F02130B2
:1022300009F46FC28E830E948A198E8196C1002391
:1022400021F0223008F065C27CC1211162C28DC12B
:10225000002321F0222309F474C108C2222309F4C7
:1022600084C119C22B2D26952695237030E02115A7
:10227000310521F021303105D1F04BC2002321F08E
:10228000812F9B2D937002C080E090E026960FB6C0
:10229000F894DEBF0FBECDBFDF91CF911F910F919C
:1022A000FF90EF90DF90CF90BF900C94570E0023DB
:1022B00021F0812F9B2D937002C080E090E0269644
:1022C0000FB6F894DEBF0FBECDBFDF91CF911F9147
:1022D0000F91FF90EF90DF90CF90BF900C946D0E18
:1022E000812F002319F00E940B1D02C00E94731D54
:1022F00026960FB6F894DEBF0FBECDBFDF91CF910B
:102300001F910F91FF90EF90DF90CF90BF900C94B2
:10231000F81D8B2D837009F07BC00111FAC1812F4C
:10232000829586958770880F880F912F9F70C92E90
:10233000D12CE12CF12C082E04C0CC0CDD1CEE1CA1
:10234000FF1C0A94D2F714FF12C04FE050E060E087
:1023500070E004C0440F551F661F771F8A95D2F79F
:10236000CB01BA01609570958095909503C060E0AF
:1023700070E0CB012B2D269526952370422F50E03F
:1023800042305105D9F04330510569F16C297D295E
:102390008E299F294130510551F126960FB6F894A8
:1023A000DEBF0FBECDBFDF91CF911F910F91FF9088
:1023B000EF90DF90CF90BF900C948D176C297D2902
:1023C0008E299F2926960FB6F894DEBF0FBECDBF8B
:1023D000DF91CF911F910F91FF90EF90DF90CF9001
:1023E000BF900C94A9170E948D17C701B6012696BD
:1023F0000FB6F894DEBF0FBECDBFDF91CF911F9116
:102400000F91FF90EF90DF90CF90BF900C947117D9
:10241000002319F08B2D817001C08695882309F463
:1024200078C1812F829586958770880F880F912FAC
:102430009F70C92ED12CE12CF12C082E04C0CC0C9D
:10244000DD1CEE1CFF1C0A94D2F714FF12C04FE0F3
:1024500050E060E070E004C0440F551F661F771F16
:102460008A95D2F7CB01BA016095709580959095C9
:1024700003C060E070E0CB012B2D269526952370DC
:10248000422F50E042305105D9F04330510569F1F7
:102490006C297D298E299F294130510551F12696BD
:1024A0000FB6F894DEBF0FBECDBFDF91CF911F9165
:1024B0000F91FF90EF90DF90CF90BF900C94671832
:1024C0006C297D298E299F2926960FB6F894DEBFA8
:1024D0000FBECDBFDF91CF911F910F91FF90EF9075
:1024E000DF90CF90BF900C9483180E946718C701AB
:1024F000B60126960FB6F894DEBF0FBECDBFDF91B2
:10250000CF911F910F91FF90EF90DF90CF90BF90F0
:102510000C944B18103FD1F118F4103E50F4A1C0A8
:10252000123F09F463C008F44CC0133F09F473C0B0
:1025300098C01F708B2D8F710023A1F00E94E417AB
:10254000812F26960FB6F894DEBF0FBECDBFDF9168
:10255000CF911F910F91FF90EF90DF90CF90BF90A0
:102560000C9474100E940518812F26960FB6F894CB
:10257000DEBF0FBECDBFDF91CF911F910F91FF90B6
:10258000EF90DF90CF90BF900C947B100023A9F0C8
:102590002111BFC08B2D8F7126960FB6F894DEBF28
:1025A0000FBECDBFDF91CF911F910F91FF90EF90A4
:1025B000DF90CF90BF900C942A18223008F0A9C069
:1025C000E9CF0023A9F08B2D8F7126960FB6F894D2
:1025D000DEBF0FBECDBFDF91CF911F910F91FF9056
:1025E000EF90DF90CF90BF900C94E417002359F345
:1025F0008B2D8F7126960FB6F894DEBF0FBECDBF20
:10260000DF91CF911F910F91FF90EF90DF90CF90CE
:10261000BF900C940518002399F08B2D8F7126968E
:102620000FB6F894DEBF0FBECDBFDF91CF911F91E3
:102630000F91FF90EF90DF90CF90BF900C94CF1749
:1026400026960FB6F894DEBF0FBECDBFDF91CF91B7
:102650001F910F91FF90EF90DF90CF90BF900C945F
:10266000C5170023A9F0222309F4ADCF812F2696A8
:102670000FB6F894DEBF0FBECDBFDF91CF911F9193
:102680000F91FF90EF90DF90CF90BF900C945D0F73
:10269000222309F4ADCF812F26960FB6F894DEBF22
:1026A0000FBECDBFDF91CF911F910F91FF90EF90A3
:1026B000DF90CF90BF900C9425104B2D4F70612F61
:1026C000C7010E94AB0226960FB6F894DEBF0FBE7C
:1026D000CDBFDF91CF911F910F91FF90EF90DF90D1
:1026E000CF90BF900C94E9164B2D4F70612FC7010E
:1026F00026960FB6F894DEBF0FBECDBFDF91CF9107
:102700001F910F91FF90EF90DF90CF90BF900C94AE
:10271000D70526960FB6F894DEBF0FBECDBFDF916A
:10272000CF911F910F91FF90EF90DF90CF90BF90CE
:1027300008950E9484190E9459190E949E190E94AE
:10274000A91E0E94F81D80E090E00E94570E80E0D4
:1027500090E00C946D0E0E9474190C9499130E94D1
:10276000A018292F22952F7030E02C3031054CF421
:102770002A3031056CF4225031092230310588F4B9
:1027800007C02C30310549F02F30310531F009C038
:10279000803E48F0803F29F406C093FB882780F9EB
:1027A000089580E0089581E00895CF93DF9300D0ED
:1027B00000D01F92CDB7DEB70F900F900F900F9003
:1027C0000F90DF91CF910895CF93DF9300D000D089
:1027D00000D0CDB7DEB726960FB6F894DEBF0FBE99
:1027E000CDBFDF91CF9108951F93CF93DF93C09119
:1027F000790116E080917A01C81799F0D0E01C9F0A
:10280000F0011D9FF00D1124E558FE4F40815181CC
:1028100062817381848195810E94E4132196C7703F
:10282000E9CFDF91CF911F9108954091AB01509175
:10283000AC016091AD017091AE018091AF019091BA
:10284000B0010C94E4138091B00182958F7009F06F
:1028500054C08091AD01882309F44FC08091790163
:10286000A0917A016091AB017091AC014091AE01F1
:102870005091AF01B6E08A1709F43FC090E04115CE
:102880005105C1F17F3F11F46F3FA1F1B89FF001F5
:10289000B99FF00D1124E558FE4F218172132AC013
:1028A0002081621327C02281211124C02381348119
:1028B0002417350710F421503109241B350B283C0F
:1028C0003105C0F42091B0012F7020612093B00138
:1028D00026E0289FF001299FF00D1124E058FE4FBB
:1028E00080818F70806180838BEA91E00E948210EA
:1028F0000C94F41301968770BECF0895CF92DF92A7
:10290000EF92FF920F931F93CF93DF93CDB7DEB774
:1029100062970FB6F894DEBF0FBECDBF8C0185E085
:10292000F801DE011D9601900D928A95E1F7D8011C
:102930004C9111965C91119712966C911297139687
:10294000CD90DC9014973091AB017091AC018091E7
:10295000AE019091AF01009709F46BC17F3F19F46C
:102960003F3F09F466C1E090AD01EE2009F4C0C01C
:102970002091B001C816D90628F0F601E81BF90B22
:10298000CF0104C0809590958C0D9D1DFF24F3947C
:10299000883C910578F0F12C207F09F0C6C07C2D91
:1029A000D98AC88A89890E94D5138BEA91E00E944E
:1029B0008210B1C0822F807F09F046C0751314C009
:1029C000341312C0611110C02F7020612093B00128
:1029D0000E9415148BEA91E00E9482108091B00150
:1029E000D80115968C932EC0CD2819F15F3F11F4B4
:1029F0004F3FF9F0F62E61111CC0809179012091B2
:102A00007A0136E0821709F45AC090E0389FF0014D
:102A1000399FF00D1124E558FE4F7181571306C000
:102A20007081471303C07281711103C001968770D2
:102A3000E9CFF62E662309F418C18091B0018160B8
:102A40008093B001F12C11C1751308C0341306C076
:102A5000611104C08091B001D801C3C04D875E8769
:102A60008D859E856A8B0E94AF136A898823E1F168
:102A70006623D1F12091B001822F82958F7090E072
:102A8000029774F08091AB019091AC0198878F838D
:102A90001986DB86CA862C87CE0107960E94821093
:102AA00086E0F801ABEAB1E001900D928A95E1F77A
:102AB0000E9423140E941514FF24F394D6C04D875E
:102AC0005E878D859E850E94A018292F22952F70E4
:102AD00030E0223031050CF0BCC09F7009F0B6C068
:102AE000805E883008F4C1C0C8010E948210E4CF23
:102AF000C816D90608F453C0F601E81BF90BCF013C
:102B0000883C910508F450C0F12C7C2DD98AC88AE4
:102B100089890E94D513EBEAF1E086E0DF011D927E
:102B20008A95E9F70E941514A0C0751314C03413D8
:102B300012C0611110C08091B001F8018583C801F5
:102B40000E94821086E0EBEAF1E0DF011D928A9597
:102B5000E9F7FE2C8AC04D875E878D859E856A8B3E
:102B60000E94AF136A89882309F4BECF662309F453
:102B7000BBCF2091B001822F82958F7090E0029799
:102B80000CF48ECF8091AB019091AC019A83898334
:102B90001B82DD82CC822E83CE0101967FCF809571
:102BA00090958C0D9D1DACCFF62E662309F49CCF1D
:102BB00075132EC034132CC02091B00120FD1FC00E
:102BC000822F82958F70D9F0D80115962C93159786
:102BD0008F3049F08F5F982F9295907F822F8F7062
:102BE000892B15968C93C8010E94821086E0F8010B
:102BF000ABEAB1E001900D928A95E1F793CF86E0C0
:102C0000F801ABEAB1E001900D928A95E1F72DC091
:102C10004D875E878D859E850E94AF13811140CFC1
:102C20008091B00181608093B001C8010E94821040
:102C30001CC0662309F458CF4D875E878D859E851D
:102C40000E94AF13882309F44FCF2ACF811148CFB8
:102C50000CC0243031050CF047CF9F7009F440CFF1
:102C6000F8019581907F09F03BCF8F2D62960FB6CA
:102C7000F894DEBF0FBECDBFDF91CF911F910F91B2
:102C8000FF90EF90DF90CF9008951F93CF93DF9345
:102C9000CDB7DEB72C970FB6F894DEBF0FBECDBF11
:102CA0004F83588769877A878B879C87CE010796E1
:102CB0000E947E14882369F08F8198852A853B8540
:102CC000232BF1F19F3F09F063C08F3F09F060C0F3
:102CD00037C086E0FE013796DE01119601900D9215
:102CE0008A95E1F76F817885EA85FB85309741F118
:102CF0007F3F11F46F3F21F120917A0130E0C9014B
:102D00000196877099274091790150E084179507C3
:102D100009F447C069837A83FD83EC8396E0929F30
:102D2000D001939FB00D1124A558BE4FFE013196DE
:102D300001900D929A95E1F780937A010E94F41325
:102D400016E08091790190917A018917C1F1189F5D
:102D5000C001112485589E4F0E947E14882379F16A
:102D6000E09179011E9FF0011124E558FE4F40814A
:102D7000518162817381848195810E94E4138091E5
:102D8000790190E001968770992780937901D9CFD6
:102D90004F81588569857A858B859C850E94E413CF
:102DA000CFCF0E94AB1310927A0110927901EBEA17
:102DB000F1E086E0DF011D928A95E9F7C1CF2C96FC
:102DC0000FB6F894DEBF0FBECDBFDF91CF911F913C
:102DD0000895EF92FF920F931F93CF93DF938C018F
:102DE000892B09F46CC0F12CEE24E394E8012196C0
:102DF000F8018491843740F4843008F051C0813068
:102E000081F0823019F15BC0853709F444C0A8F124
:102E10009CE7980F903708F052C08F770E942510DA
:102E200041C00E5F1F4FFE01C49180E28C0F8830BD
:102E300048F4C7708E2D01C0880FCA95EAF70E942A
:102E4000771914C08C2F0E945D0F2DC00E5F1F4F8D
:102E5000FE01C49180E28C0F883058F4C7708E2D2B
:102E600001C0880FCA95EAF70E947D190E949E1939
:102E70001AC08C2F0E94251016C00E5F1F4FFE0136
:102E8000C491CC2381F08FE99FE00197F1F700C056
:102E90000000C150F6CF0E5F1F4FFE01F49003C03B
:102EA0000E945D0F8E018F2D882309F49FCFEFE9DB
:102EB000FFE03197F1F700C000008150F5CFDF91BE
:102EC000CF911F910F91FF90EF9008950895609317
:102ED000B5017093B6018093B7019093B8010C943B
:102EE00099130F931F930091B5011091B601209192
:102EF000B7013091B801DC01CB01802B912BA22BC3
:102F0000B32B8093B5019093B601A093B701B09312
:102F1000B8011F910F910C9499130F931F93009177
:102F2000B5011091B6012091B7013091B801DC01D3
:102F3000CB0180239123A223B3238093B5019093E7
:102F4000B601A093B701B093B8011F910F910C94F3
:102F500099130F931F930091B5011091B601209121
:102F6000B7013091B801DC01CB0180279127A2275E
:102F7000B3278093B5019093B601A093B701B093A6
:102F8000B8011F910F910C9499131092B1011092F6
:102F9000B2011092B3011092B4010C94991341E064
:102FA00050E060E070E004C0440F551F661F771FBB
:102FB0008A95D2F74093B1015093B2016093B30167
:102FC0007093B4010C94991341E050E060E070E01C
:102FD00004C0440F551F661F771F8A95D2F7809152
:102FE000B1019091B201A091B301B091B401482B0D
:102FF000592B6A2B7B2B4093B1015093B201609304
:10300000B3017093B4010C94991341E050E060E077
:1030100070E004C0440F551F661F771F8A95D2F7D2
:1030200040955095609570958091B1019091B20155
:10303000A091B301B091B401482359236A237B23A3
:103040004093B1015093B2016093B3017093B40106
:103050000C94991341E050E060E070E004C0440F2C
:10306000551F661F771F8A95D2F78091B101909105
:10307000B201A091B301B091B401482759276A2742
:103080007B274093B1015093B2016093B3017093D9
:10309000B4010C9499130F931F930091B1011091F7
:1030A000B2012091B3013091B401DC01CB01802B3E
:1030B000912BA22BB32B8093B1019093B201A093DB
:1030C000B301B093B4011F910F910C9499130F9316
:1030D0001F930091B1011091B2012091B301309181
:1030E000B401DC01CB0180239123A223B32380937D
:1030F000B1019093B201A093B301B093B4011F91B9
:103100000F910C9499130F931F930091B10110919B
:10311000B2012091B3013091B401DC01CB018027D1
:103120009127A227B3278093B1019093B201A09376
:10313000B301B093B4011F910F910C9499130895AA
:10314000CF92DF92EF92FF920F931F93CF93DF9373
:103150008C01C090B501D090B601E090B701F0901D
:10316000B8014091B1015091B2016091B3017091E9
:10317000B401C42AD52AE62AF72ACFE1D0E0D70144
:10318000C6010C2E04C0B695A795979587950A940D
:10319000D2F780FF07C0B8018C2F0E94FA0581305A
:1031A000910531F4219758F7B80180E00E94FA05A3
:1031B000DF91CF911F910F91FF90EF90DF90CF9013
:1031C000089590910C01992321F090910D01911196
:1031D00009C020910E0130910F01F90132969FEF45
:1031E00040E01FC0982F9695969596959F3050F584
:1031F000E0910E01F0910F01E90FF11D877021E0C0
:1032000030E0A90102C0440F551F8A95E2F7CA01B8
:103210009181892B818308959F3F39F04F5F4E3014
:1032200041F051915813F8CF0DC05111F7CF942FA1
:10323000F5CF9F3F39F0F901E90FF11D97FDFA95A0
:1032400082830895089590910C01992321F0909123
:103250000D01911109C020910E0130910F01F9016A
:103260003296205F3F4F1FC0982F96959695969562
:103270009F30F0F4E0910E01F0910F01E90FF11D84
:10328000877021E030E0A90102C0440F551F8A95E4
:10329000E2F7CA018095918189238183089531964F
:1032A000E217F30729F090819813F9CF1082F7CF36
:1032B000089581E090E0E0910E01F0910F01E80F98
:1032C000F91F1082019680319105A9F70895909118
:1032D000CB01892B8093CB01089580959091CB01F0
:1032E00089238093CB0108951092CB01089590918A
:1032F000CA01892B8093CA01089580959091CA01D3
:1033000089238093CA0108951092CA010895809379
:10331000B90108951092B901089580910E0190911C
:103320000F01FC0131969C01205F3F4F80E091919D
:1033300091118F5FE217F307D1F70895E0910E0125
:10334000F0910F018091CB018083E0910E01F0910B
:103350000F0190818091CA01892B80838091B901EE
:10336000882361F0E0910E01F0910F019081892B8B
:1033700080830E948D1981111092B90180910E01F4
:1033800090910F010C94410ECF92DF92EF92FF9239
:103390006C01EE24FF24C114D104E104F10421F0F6
:1033A000C701B60120E101C020E0C72ED82EE92ECA
:1033B000FF24C114D104E104F10419F0285FC7010E
:1033C000B6016B017C0154E0F694E794D794C7945E
:1033D0005A95D1F7C114D104E104F10419F02C5F1E
:1033E000C701B6016B017C0142E0F694E794D794E3
:1033F000C7944A95D1F7C114D104E104F10419F03E
:103400002E5FC701B601DC01CB01B695A795979554
:103410008795892B8A2B8B2B09F02F5F822FFF90AA
:10342000EF90DF90CF9008958091E501843009F10D
:103430001092CD0120E488E190E00FB6F894A895B1
:10344000809360000FBE2093600083B7817F84600B
:1034500083BF83B7816083BF7894889583B78E7F5D
:1034600083BF88E10FB6F8948093600010926000EB
:103470000FBE089508950895CF930E943A1A0E94AE
:1034800023040E943B1AC0E08C2F0E941105811179
:1034900004C0CF5FCE30C1F701C081E0CF91089565
:1034A0000E94AB130E94350E0C942E0782E084BD5F
:1034B00093E095BD9AEF97BD80936E0008952FB766
:1034C000F8948091CE019091CF01A091D001B0915C
:1034D000D1012FBF0895CF92DF92EF92FF920F9309
:1034E0001F932FB7F8944091CE015091CF01609176
:1034F000D0017091D1012FBF6A017B01EE24FF241E
:103500008C0120E030E0C016D106E206F30610F48C
:10351000415051099A01281B390BC9011F910F9184
:10352000FF90EF90DF90CF9008951F920F920FB60B
:103530000F9211248F939F93AF93BF938091CE01ED
:103540009091CF01A091D001B091D1010196A11D20
:10355000B11D8093CE019093CF01A093D001B09381
:10356000D101BF91AF919F918F910F900FBE0F909E
:103570001F9018950E94320BF8942FEF87EA91E67E
:10358000215080409040E1F700C0000087E090EBC0
:10359000DC018093EE019093EF01A093F001B093D2
:1035A000F1019CE088E10FB6F894A8958093600043
:1035B0000FBE90936000FFCFEF92FF920F931F9387
:1035C000CF93DF93D82FC0E08C2F0E94110500E02D
:1035D00010E0E82EF12CC701002E02C095958795CA
:1035E0000A94E2F780FD06C00F5F1F4F06301105F9
:1035F00091F709C0602F7C2F80E00E94D805D81376
:10360000F3CF81E004C0CF5FCE30F1F680E0DF91F0
:10361000CF911F910F91FF90EF900895CF93C82FF6
:103620008CE20E94DC1A882321F08C2FCF910C941D
:10363000DC1A80E0CF910895CF930E94631C811122
:1036400002C00E94491CC5E6C15049F00E942304F3
:103650008FE39CE90197F1F700C00000F5CF89E204
:103660000E940E1B811113C18AE20E940E1B811160
:103670000E94491C85E00E940E1B81110E94BA1A0B
:103680000E946E1C8093CC0187E00E940E1B882351
:10369000A9F18BE10E940E1B882351F08091CC018F
:1036A00081FB222720F991E0922790FB81F90EC03F
:1036B0008EE00E940E1B882361F08091CC0182FB7A
:1036C000222720F991E0922790FB82F98093CC0188
:1036D00015C080E10E940E1B9091CC01882341F01F
:1036E00093FB222720F981E0822780FB93F904C015
:1036F000892F809580FB90F99093CC018091CC012B
:103700000E94721C0E94801C8093DF0180EE0E9448
:103710000E1B882341F08091DF01982F909590FB3C
:1037200080F98093DF0189E30E940E1B882359F002
:103730008091DF0181FB222720F991E0922790FB05
:1037400081F98093DF0182EE0E940E1B882359F0DD
:103750008091DF0182FB222720F991E0922790FBE4
:1037600082F98093DF0186EE0E940E1B882359F0B8
:103770008091DF0183FB222720F991E0922790FBC3
:1037800083F98093DF0183EE0E940E1B882359F09A
:103790008091DF0184FB222720F991E0922790FBA2
:1037A00084F98093DF0185E30E940E1B882359F082
:1037B0008091DF0185FB222720F991E0922790FB81
:1037C00085F98093DF0181E30E940E1B882359F065
:1037D0008091DF0186FB222720F991E0922790FB60
:1037E00086F98093DF0181E10E940E1B882359F046
:1037F0008091DF0187FB222720F991E0922790FB3F
:1038000087F98093DF018091DF010E94841C809101
:10381000DF0187FB882780F980930D0187E20E94F2
:103820000E1BC82F8EE10E940E1B8111C2608FE11A
:103830000E940E1B8111C46080E20E940E1B811148
:10384000C86081E20E940E1B8111C06182E20E9469
:103850000E1B8111C06283E20E940E1B8111C064A5
:1038600084E20E940E1B882311F0C06802C0CC23A2
:1038700029F08C2F0E947B1C6C2F03C00E94771CA8
:10388000682F70E080E090E0CF910C946717CF91A3
:1038900008956DEE7EEF80E090E00E94AF2260E040
:1038A00082E090E00E94A12260E083E090E00E942C
:1038B000A12260E084E090E00E94A12260E085E027
:1038C00090E00C94A12280E090E00E949B2221E0F5
:1038D0008D3E9E4F09F020E0822F089582E090E017
:1038E0000C949322682F82E090E00C94A12283E054
:1038F00090E00C949322682F83E090E00C94A12236
:1039000084E090E00C949322682F84E090E00C9483
:10391000A1228091D40180FF0BC06091130185E04A
:10392000689FB001112475956795759567952BC0B3
:1039300081FF09C06091130185E0689FB0011124E7
:103940007595679520C082FF07C06091130185E0DF
:10395000689FB001112417C09091D5019923D1F02F
:1039600060911201961788F72091130185E0289F36
:1039700090011124929FA001939F500D112470E09B
:10398000CA010E9465226038710540F46115710515
:1039900039F002C065E070E0862F08958FE7089542
:1039A00081E008958091D40180FF08C060911101E9
:1039B00070E0759567957595679521C081FF06C084
:1039C0006091110170E07595679519C082FF04C080
:1039D0006091110170E010C09091D5019923C1F060
:1039E000609110019617A0F780911101899FC00185
:1039F000112470E00E9465226038710528F4611579
:103A0000710521F0862F08958FE7089581E00895CC
:103A100061E070E0F4CF803F21F40E94891C819521
:103A200004C0813F29F40E94891C8093D801089525
:103A3000823F21F40E94891C819504C0833F29F4B0
:103A40000E94891C8093D7010895893F19F40E9430
:103A5000D21C05C08A3F31F40E94D21C819580930C
:103A6000D90108958B3F21F40E94D21C819504C096
:103A70008C3F29F40E94D21C8093DA010895843F80
:103A800021F48091D601816017C0853F21F4809197
:103A9000D601826011C0863F21F48091D6018460F6
:103AA0000BC0873F21F48091D601886005C0883F14
:103AB00031F48091D60180618093D60108958D3FC5
:103AC00021F48091D40181600BC08E3F21F480915C
:103AD000D401826005C08F3F29F48091D4018460B5
:103AE0008093D4010895803F39F48091D80187FFF5
:103AF0006CC01092D80169C0813F29F48091D8012F
:103B00001816BCF362C09091D701823F29F497FF49
:103B10005CC01092D70159C0833F19F41916CCF339
:103B200054C0893F41F48091D90118160CF04DC062
:103B30001092D9014AC08A3F29F48091D90187FFA8
:103B400044C0F6CF8B3F39F48091DA0187FF3DC046
:103B50001092DA013AC08C3F29F48091DA011816EC
:103B6000BCF333C0843F21F48091D6018E7F17C00F
:103B7000853F21F48091D6018D7F11C0863F21F4CD
:103B80008091D6018B7F0BC0873F21F48091D601B5
:103B9000877F05C0883F31F48091D6018F7E809366
:103BA000D60113C08D3F21F48091D4018E7F0BC0CC
:103BB0008E3F21F48091D4018D7F05C08F3F29F481
:103BC0008091D4018B7F8093D4018091D7018111A2
:103BD0000EC08091D80181110AC08091D901811154
:103BE00006C08091DA01811102C01092D5010895BA
:103BF00086ED91E00E944C0E0E945F1A9093D301D3
:103C00008093D20108951F93CF93DF938091D201C7
:103C10009091D3010E946B1AAC019091D501992328
:103C200021F02091140130E006C0209115018AE0B6
:103C3000289F900111244217530708F486C08091F1
:103C4000D701C091D801D091D9011091DA01811129
:103C500007C0C11176C0D11174C0111172C075C0F6
:103C60009F3F19F09F5F9093D501181624F40E948E
:103C7000891C8093D7018091D70187FF05C00E94DE
:103C8000891C81958093D7011C1624F40E94891CFD
:103C90008093D8018091D80187FF05C00E94891CBC
:103CA00081958093D8016091D701662339F1C09145
:103CB000D801CC2319F1772767FD7095872F972FAF
:103CC0000E94762123E333E343E35FE30E94DA219A
:103CD0000E9443216093D7016C2F772767FD709571
:103CE000872F972F0E94762123E333E343E35FE39B
:103CF0000E94DA210E9443216093D8011D1624F40A
:103D00000E94D21C8093D9018091D90187FF05C000
:103D10000E94D21C81958093D901111624F40E942F
:103D2000D21C8093DA018091DA0187FF05C00E94DE
:103D3000D21C81958093DA01DF91CF911F910C9471
:103D4000F81D9F3F09F08ECF96CFDF91CF911F9145
:103D50000895E6EDF1E085E0DF011D928A95E9F72F
:103D60001092D5011092D4010895833081F128F486
:103D7000813059F08230D1F00895853009F449C07E
:103D8000B8F1863009F456C0089580911501262FA8
:103D900030E0280F311D2F3F310524F4680F609368
:103DA000150108958FEF80931501089580911401F6
:103DB000262F30E0280F311D2F3F310524F4680FE6
:103DC0006093140108958FEF8093140108958091FA
:103DD0001301262F30E0280F311D2F3F310524F429
:103DE000680F6093130108958FEF80931301089576
:103DF00080911201262F30E0280F311D2F3F310511
:103E000024F4680F6093120108958FEF80931201DC
:103E1000089580911101262F30E0280F311D2F3F8A
:103E2000310524F4680F6093110108958FEF80939A
:103E30001101089580911001262F30E0280F311DC7
:103E40002F3F310524F4680F6093100108958FEF20
:103E5000809310010895833011F128F4813049F0E6
:103E6000823091F00895853081F120F18630C1F1E2
:103E7000089580911501681720F4861B8093150121
:103E8000089510921501089580911401681720F487
:103E9000861B809314010895109214010895809157
:103EA0001301681720F4861B809313010895109264
:103EB0001301089580911201681720F4861B8093E6
:103EC000120108951092120108958091110168174E
:103ED00020F4861B8093110108951092110108951A
:103EE00080911001681720F4861B809310010895BB
:103EF0001092100108950F931F938D3109F46BC038
:103F000008F03FC08E3009F47DC0C0F4873009F45A
:103F10006EC068F4863009F0AFC08091CC01817F1B
:103F20008E7F8093CC0181E08093DC01A6C0883035
:103F300009F458C08B3009F49BC09EC0863109F447
:103F400097C078F4803109F470C0813109F094C0D1
:103F50000E94AB1390910D0181E0892780930D01A0
:103F600087C0893109F484C08B3109F085C0809104
:103F7000CC0181FB222720F991E0922790FB81F967
:103F80004AC0853309F45BC048F4873209F457C04E
:103F900008F45AC0893209F452C06EC0833438F430
:103FA0008A3308F067C0883309F462C065C083347F
:103FB00009F445C0883409F05FC00E94AB130FEFCD
:103FC00013ED20E3015010402040E1F700C0000055
:103FD0000E94BA1A4DC00E94FD200E94350E0E9418
:103FE0002E0746C00E946E1C0E94801C41C090910A
:103FF000CC01892F817090FF12C0917F9E7F90939A
:10400000CC013BC08091CC0182FB222720F991E0BA
:10401000922790FB82F98093CC01992349F18091FA
:10402000CC0181608093CC0123C08091CC0183FBC3
:10403000222720F991E0922790FB83F9ECCF61E0F1
:1040400070E080E090E010C08D5141E050E060E011
:1040500070E08A019B0104C0000F111F221F331F53
:104060008A95D2F7C901B8010E9467170E94AB1365
:1040700081E003C08953E9CF80E01F910F9108953B
:1040800080E0089580E00895CF93C82F8091DC01EF
:10409000813079F018F08230E9F187C0E0910E01AB
:1040A000F0910F018081813169F0823209F07FC087
:1040B00009C0E0910E01F0910F018081813111F072
:1040C000823261F48C2F0E944020811104C08C2F19
:1040D0000E947B1F1DC081E090E01AC08C2F0E94BF
:1040E0004220811114C0C43179F048F4CB3079F00A
:1040F000C03109F060C082E08093DC0108C0C932A1
:1041000019F0C83321F057C01092DC0154C081E08F
:10411000817053C0C93289F118F5C43171F1A8F426
:10412000C73009F046C08AE08093150194E190936E
:10413000140193E0909313018093120188E080931F
:10414000110188E28093100134C0CE51C63088F549
:10415000EC2FF0E0E65DFE4F80818093DB0129C00B
:10416000CE34E9F020F4CB3421F56AE013C0C13538
:1041700079F0C235F1F461E00DC08091DB01882354
:1041800019F01092DB0115C081E08093DC0115C0AD
:1041900061E006C08091DB010E94B51E0AC06AE0A2
:1041A0008091DB010E942B1F04C01092DC0180E093
:1041B00004C081E002C080E0ABCFCF910895E1E878
:1041C000F0E08081886080838081816080838FB708
:1041D000F89493E09093890090ED909388008FBFBE
:1041E0000895EFE6F0E08081826080830895EFE635
:1041F000F0E080818D7F80830895EFE6F0E090818C
:1042000082E08927808308951F920F920FB60F9244
:1042100011242F933F934F935F936F937F938F93CB
:104220009F93AF93BF93EF93FF938091DD019091A4
:10423000DE0101969093DE018093DD01811103C0C0
:1042400082E00E942E07E091DE01E695E695F0E01F
:10425000E657FB4FE4918091DD018E1303C080E0AF
:104260000E942E07FF91EF91BF91AF919F918F9187
:104270007F916F915F914F913F912F910F900FBE62
:104280000F901F90189504D06894B1118DC00895B7
:1042900070D088F09F5790F0B92F9927B751A0F0B0
:1042A000D1F0660F771F881F991F1AF0BA95C9F7CA
:1042B00012C0B13081F077D0B1E0089574C0672F9B
:1042C000782F8827B85F39F0B93FCCF3869577957A
:1042D0006795B395D9F73EF4909580957095619563
:1042E0007F4F8F4F9F4F0895E89409C097FB3EF48E
:1042F00090958095709561957F4F8F4F9F4F992333
:10430000A9F0F92F96E9BB279395F69587957795B0
:104310006795B795F111F8CFFAF4BB0F11F460FF70
:104320001BC06F5F7F4F8F4F9F4F16C0882311F0C8
:1043300096E911C0772321F09EE8872F762F05C0DC
:10434000662371F096E8862F70E060E02AF09A9577
:10435000660F771F881FDAF7880F9695879597F96C
:10436000089557FD9058440F551F59F05F3F71F065
:104370004795880F97FB991F61F09F3F79F08795CC
:104380000895121613061406551FF2CF4695F1DF55
:1043900008C0161617061806991FF1CF86957105E5
:1043A000610508940895E894BB2766277727CB0119
:1043B00097F908950BD078C069D028F06ED018F026
:1043C000952309F05AC05FC01124EECFCADFA0F3D5
:1043D000959FD1F3950F50E0551F629FF001729F9A
:1043E000BB27F00DB11D639FAA27F00DB11DAA1FB9
:1043F000649F6627B00DA11D661F829F2227B00D06
:10440000A11D621F739FB00DA11D621F839FA00D90
:10441000611D221F749F3327A00D611D231F849FE0
:10442000600D211D822F762F6A2F11249F57504037
:104430008AF0E1F088234AF0EE0FFF1FBB1F661FD2
:10444000771F881F91505040A9F79E3F510570F08B
:1044500014C0AACF5F3FECF3983EDCF386957795C6
:104460006795B795F795E7959F5FC1F7FE2B880F86
:10447000911D9695879597F9089597F99F6780E81C
:1044800070E060E008959FEF80EC089500240A94A6
:104490001616170618060906089500240A9412161F
:1044A0001306140605060895092E0394000C11F452
:1044B000882352F0BB0F40F4BF2B11F460FF04C0FF
:1044C0006F5F7F4F8F4F9F4F089597FB072E16F416
:1044D000009407D077FD09D00E947F2207FC05D009
:1044E0003EF4909581959F4F0895709561957F4F0B
:1044F0000895EE0FFF1F0590F491E02D0994AA1B7B
:10450000BB1B51E107C0AA1FBB1FA617B70710F0BE
:10451000A61BB70B881F991F5A95A9F780959095F0
:10452000BC01CD010895F999FECF92BD81BDF89AE5
:10453000992780B50895A8E1B0E042E050E00C94DE
:10454000B622262FF999FECF1FBA92BD81BD20BD9C
:104550000FB6F894FA9AF99A0FBE019608950E9440
:10456000A122272F0C94A222DC01CB01FC01F99996
:10457000FECF06C0F2BDE1BDF89A319600B40D92AF
:0C45800041505040B8F70895F894FFCF68
:10458C0020023007BE079B07670733070101BA01FA
:10459C0028080A03140A3F4D36394B04FE03C8039E
:1045AC008F0322033B0354036D030102030405062E
:0445BC0007080900E3
:00000001FF

@ -0,0 +1,32 @@
# MSC Configuration
### Based mostly on the ErgoDox EZ default layout with optimizations for coding on osx.
#### Expecting the user to rely on Coder Layer this keymap removes some of the duplicate symbol keys in the lower portions of the board and replaces them with arrow keys and modifiers. The Media Layer is also updated to match the change in the arrow keys and the left and right click buttons are moved under the thumb position. The Media layer is now reached with toggle button in the lower right.
### Main Layer
![Main Layer](img/main_layer.png)
### Code Layer
![Code Layer](img/code_layer.png)
### Media Layer
![Media Layer](img/media_layer.png)
## Changelog
Version 1.0
- Changed the temp code layer key in the bottom right to toggle media layer
- Changed the temp media key to only be ";"
- Changed right hand bottom row to match vim home row nav directions
- Changed media keys to match arrow key changes
- Changed media left and right click to spacebar and backspace locations
- Changed bottom left to Cmd
- Changed single quote on left bottom row to alt
#### Coming Soon:
- A new layer for Blender editing with a focus on left hand shortcut and a righthand num pad to control the view in Blender.

@ -0,0 +1,29 @@
# ErgoDox EZ naps62 Configuration
## Motivation
I wanted a layout that suited my Linux & Vim usage. I also didn't like the lack of efficient access to some of the more common special characters used in programming.
## Key features / changes
### Base Layer (L1)
* **No `MT(mod, kc)` keys (modifier when pressed, key when tapped).** Those keys work with a global timeout. When a key press is shorter than the timeout, it's considered a tap, otherwise it's a hold. I couldn't find any particular timeout that would work for me. I need to use mods extremely fast, but also want the confort of using them more slowly in other occasions. So I gave up on this feature altogether.
* **Direct access to `{}[]`.** When programming, these are used extremely often. I was still getting used to the coder layer, and I prefer the arrows on the home row, so I used the bottom-right keys for this.
* **Layer keys everywhere.** I either use my little finger or my index finger to go to L1, whichever is more confortable in any given situation. L2 is not used while coding/writing, so I don't need an extremely-optimized access to it.
* **Lang key.** This is nothing more than `Super-Space` combo, which in my systems (both Linux & Windows) is the shortcut to change the keyboard language. I'm Portuguese, so I often cycle between US layout for coding, and PT layout for writing.
* **Special chars on the right-most column.** I only use Ctrl & Shift keys on the left side, so I used the right keys to include some of the more useful special characters as well.
### Coder Layer (L2)
* The `=` and `-` signs where nowhere to be found. `-` was already on the base layer, but it's still useful to have a fully-featured NumPad on the coder layer.
### Media Layer (L3)
* **Better media keys**. Why was Play/Pause so far away? And where was Mute? I put all my media keys close to each other, including the missing ones
* **Arrow keys on home row.** I use vim, so I'm always on my home row. I use this sometimes to get around, but not as often as to need them on the base row. I'm fine with them here
* I don't use mouse keys. They're still set up, and I made some changes as an experiment, but I mostly forgot they exist by now.
## Author
[Miguel Palhas](https://github.com/naps62)

@ -0,0 +1,1474 @@
:100000000C9402070C9449070C9449070C94490777
:100010000C9449070C9449070C9449070C94490720
:100020000C9449070C9449070C9472120C944413D5
:100030000C9449070C9449070C9449070C94490700
:100040000C9449070C94082C0C9449070C9449070C
:100050000C9449070C9401220C9449070C9449070D
:100060000C9449070C9449070C9449070C944907D0
:100070000C9449070C9449070C9449070C944907C0
:100080000C9449070C9449070C9449070C944907B0
:100090000C9449070C9449070C9449070C944907A0
:1000A0000C9449070C9449070C944907B113D313D6
:1000B000C614D313C61418143B14C6149014A314F6
:1000C000F117F1172018201863189D18AA1AAA1AF8
:1000D000B618AA1AAB19AB197E1AAA1AAA1A951A37
:1000E0000000F0A12D002B002971E100C1000000EB
:1000F0001E00140004001D003500E2001F001A005D
:1001000016001B003400E000200008000700060075
:1001100050002C0021001500090019004F82E30057
:10012000220017000A00050000004A812C08015433
:100130000000007F00004D8249000254000000775B
:1001400000004B8223001C000B00110000004E81B8
:10015000240018000D0010002F024C0025000C0098
:100160000E00360030022C00260012000F0037006F
:100170002F002800270013003300380030002A0029
:100180002D00310034712D72C1000000010001000A
:1001900001000100010000003A001E0220022202BC
:1001A000010001003B001F022102230201000100A7
:1001B0003C002F0226022F00010001003D0030020A
:1001C00027023000010001003E00310235003502F7
:1001D000000001000100010000000100000001001A
:1001E0000100010000000100000001003F0052007A
:1001F00051002402000001004000240021001E00E4
:100200002E0001004100250022001F0037000100E0
:1002100042002600230020002700010043002502A1
:100220002E0231002D0001004400450001000100B4
:100230000100000000500100010001000100000069
:1002400001000100040801000100010001001A087A
:10025000160801000100F500010008080708010068
:100260000100F4000100F400F100010001000100B0
:1002700001001708F3000100000001000100010067
:100280000000010000000100010001000000010069
:100290000000010001000100F20001000000010067
:1002A0000100F400F100AA00AE0001000100F50019
:1002B000F000A900AC00B70001000100F300A800A5
:1002C000AB00B600010001000100010001000100C7
:1002D0000100010001000100010000000A002530BA
:1002E000313662003A200025303258000A722F63FE
:1002F0002030313233343536373839414243444582
:10030000460A000A002530325800626F756E636538
:10031000213A20006C6566742073696465206174FD
:100320007461636865640A006C656674207369644F
:1003300065206E6F7420726573706F6E64696E678E
:100340000A00747279696E6720746F207265736534
:1003500074206D637032333031380A000A444542EC
:1003600055473A20656E61626C65642E0A005B73C6
:100370005D004B6579626F617264207374617274A1
:100380002E0A005B575D005B535D005B525D005BB6
:10039000445D005B435D0016034500720067006F1B
:1003A0000044006F007800200045005A000000164D
:1003B000034500720067006F0044006F0078002062
:1003C0000045005A0000000403090409028D0005DD
:1003D0000100A0FA09040000010301010009211134
:1003E000010001223F000705810308000A090401FA
:1003F000000103010200092111010001224D000743
:1004000005820308000A0904020001030000000934
:1004100021110100012236000705830308000A09A3
:100420000403000203000000092111010001222041
:1004300000070584032000010705040320000109CB
:100440000404000103000000092111010001223908
:1004500000070585031000011201100100000008CB
:10046000EDFE071301000102000105010906A101CB
:10047000050719E029E71500250195087501810296
:100480000508190129059505750191029501750366
:100490009101050719002977150025019578750147
:1004A0008102C00631FF0974A1010975150025FFFD
:1004B0009520750881020976150025FF952075089D
:1004C0009102C005010980A101850216010026B72D
:1004D000001A01002AB700751095018100C0050CB3
:1004E0000901A1018503160100269C021A01002AB8
:1004F0009C02751095018100C005010902A1010946
:1005000001A10005091901290515002501950575A9
:100510000181029501750381010501093009311539
:1005200081257F95027508810609381581257F95FB
:100530000175088106050C0A38021581257F950191
:1005400075088106C0C005010906A101050719E06B
:1005500029E71500250195087501810295017508A7
:10056000810105081901290595057501910295017B
:10057000750391010507190029FF150025FF950650
:1005800075088100C00A002530325820006B65795B
:10059000626F6172645F7265706F72743A20000AF4
:1005A0000025303258006B6579626F6172645F7349
:1005B00065745F6C65643A200064656C5F6B657997
:1005C0005F6269743A2063616E27742064656C3AD7
:1005D00020253032580A006164645F6B65795F6280
:1005E00069743A2063616E2774206164643A20253F
:1005F0003032580A00646F6E652E0A00626F6F67B2
:100600006D61676963207363616E3A202E2E2E2020
:1006100000290A002575002F002575005D2800259A
:10062000640020002564002000256400200025646B
:10063000007C0025303258006D6F7573656B6579ED
:10064000205B62746E7C782079207620685D287249
:1006500065702F61636C293A205B006D6B5F776872
:1006600065656C5F74696D655F746F5F6D6178203F
:100670003D2025640A006D6B5F776865656C5F6D72
:1006800061785F7370656564203D2025640A006DA4
:100690006B5F74696D655F746F5F6D6178203D207D
:1006A00025640A006D6B5F6D61785F7370656564CA
:1006B000203D2025640A006D6B5F696E746572765B
:1006C000616C203D2025640A006D6B5F64656C6180
:1006D00079203D2025640A006D6B5F776865656C45
:1006E0005F74696D655F746F5F6D6178203D202573
:1006F000640A006D6B5F776865656C5F6D61785F3C
:100700007370656564203D2025640A006D6B5F741D
:10071000696D655F746F5F6D6178203D2025640AA7
:10072000006D6B5F6D61785F7370656564203D205F
:1007300025640A006D6B5F696E74657276616C206A
:100740003D2025640A006D6B5F64656C6179203D16
:100750002025640A000A00257500363A207768656E
:10076000656C5F74696D655F746F5F6D61783A2069
:10077000000A00257500353A20776865656C5F6D65
:1007800061785F73706565643A20000A0025750022
:10079000343A2074696D655F746F5F6D61783A20DB
:1007A000000A00257500333A206D61785F7370652B
:1007B00065643A20000A00257500323A20696E749B
:1007C000657276616C286D73293A20000A002575E0
:1007D00000313A2064656C6179282A31306D7329C3
:1007E0003A20000A092D2056616C756573202D0A88
:1007F000004D3E004D25643E20003F00736574208F
:1008000064656661756C740A00433E200077686514
:1008100072652064656C74613A20637572736F72DF
:100820003D25642C20776865656C3D25640A536519
:100830006520687474703A2F2F656E2E77696B6926
:1008400070656469612E6F72672F77696B692F4DD0
:100850006F7573655F6B6579730A000A092D204D0A
:100860006F7573656B6579202D0A4553432F713A77
:1008700009717569740A313A0964656C6179282ACD
:1008800031306D73290A323A09696E746572766186
:100890006C286D73290A333A096D61785F7370654E
:1008A00065640A343A0974696D655F746F5F6D61E0
:1008B000780A353A09776865656C5F6D61785F73B2
:1008C000706565640A363A09776865656C5F7469B6
:1008D0006D655F746F5F6D61780A0A703A097072B6
:1008E000696E742076616C7565730A643A09736584
:1008F000742064656661756C74730A75703A092BAF
:10090000310A646F776E3A092D310A706775703A53
:10091000092B31300A7067646F776E3A092D3130D8
:100920000A0A7370656564203D2064656C746120FB
:100930002A206D61785F7370656564202A202872B3
:100940006570656174202F2074696D655F746F5FD9
:100950006D6178290A003F004D3E2000433E200093
:100960004C25640A000A092D20436F6E736F6C6575
:10097000202D0A4553432F713A09717569740A6D28
:100980003A096D6F7573656B65790A000A092D2048
:100990004D61676963202D0A643A09646562756771
:1009A0000A783A096465627567206D6174726978C6
:1009B0000A6B3A096465627567206B6579626F61DD
:1009C00072640A6D3A096465627567206D6F7573AC
:1009D000650A763A0976657273696F6E0A733A0929
:1009E0007374617475730A633A09636F6E736F6C25
:1009F00065206D6F64650A302D343A096C61796544
:100A000072302D34284631302D4634290A50617514
:100A1000733A09626F6F746C6F616465720A653A4C
:100A200009656570726F6D0A6E3A094E4B524F0A36
:100A30007A3A09736C656570204C4544207465737F
:100A4000740A000A002575002E6E6B726F3A200042
:100A50000A002575002E737761705F6261636B73A6
:100A60006C6173685F6261636B73706163653A2088
:100A7000000A002575002E737761705F67726176DA
:100A8000655F6573633A20000A002575002E6E6F5E
:100A90005F6775693A20000A002575002E7377613B
:100AA000705F72616C745F726775693A20000A004A
:100AB0002575002E737761705F6C616C745F6C6775
:100AC00075693A20000A002575002E636170736C09
:100AD0006F636B5F746F5F636F6E74726F6C3A20DD
:100AE000000A002575002E737761705F636F6E7466
:100AF000726F6C5F636170736C6F636B3A20000A96
:100B00000025303258006B65796D61705F636F6EE0
:100B10006669672E7261773A20000A002575002EFB
:100B20006D6F7573653A20000A002575002E6B65A0
:100B300079626F6172643A20000A002575002E6D9B
:100B400061747269783A20000A002575002E656E7E
:100B500061626C653A20000A0025303258006465F5
:100B60006275675F636F6E6669672E7261773A20A0
:100B7000000A0025750064656661756C745F6C61C0
:100B80007965723A20003F004E4B524F3A206F6613
:100B9000660A004E4B524F3A206F6E0A0074696D20
:100BA00065725F636F756E743A202530346C580A35
:100BB000006B6579626F6172645F6E6B726F3A2071
:100BC00025580A006B6579626F6172645F69646CB5
:100BD000653A2025580A006B6579626F6172645F1F
:100BE00070726F746F636F6C3A2025580A00686FDB
:100BF00073745F6B6579626F6172645F6C65647357
:100C000028293A2025580A000A092D2053746174B6
:100C10007573202D0A004743433A20352E332E307A
:100C2000204156522D4C4942433A20312E382E3124
:100C300073766E204156525F415243483A206176A6
:100C400072350A004F5054494F4E533A204C554686
:100C50004120424F4F544D41474943204D4F55533A
:100C6000454B45592045585452414B455920434F17
:100C70004E534F4C4520434F4D4D414E44204E4B1B
:100C8000524F203531320A004255494C443A203601
:100C9000386366663764202832323A33323A303568
:100CA000204A616E2033302032303136290A005616
:100CB00049443A20307846454544284572676F4498
:100CC0006F7820455A29205049443A2030783133F2
:100CD0003037284572676F446F7820455A2920566F
:100CE00045523A203078303030310A004445534381
:100CF0003A20742E6D2E6B2E206B6579626F6172B7
:100D000064206669726D7761726520666F72204536
:100D100072676F646F780A000A092D205665727336
:100D2000696F6E202D0A000A6D6F7573653A206F2A
:100D300066660A000A6D6F7573653A206F6E0A0069
:100D40000A6B6579626F6172643A206F66660A00A9
:100D50000A6B6579626F6172643A206F6E0A000AED
:100D60006D61747269783A206F66660A000A6D6177
:100D7000747269783A206F6E0A000A64656275675A
:100D80003A206F6E0A000A64656275673A206F66E2
:100D9000660A000A0A626F6F746C6F616465722E76
:100DA0002E2E2000433E20006565636F6E666967E6
:100DB0003A0A00536C656570204C45442074657395
:100DC000740A0000000000000000000000000102A2
:100DD00004060A0F17202C3A4A5D71879DB3C7DAC3
:100DE000E9F5FCFFFCF5E9DAC7B39D87715D4A3A86
:100DF0002C20170F0A06040201000000000000006A
:100E00000000000011241FBECFEFDAE0DEBFCDBF2F
:100E100004B603FE27C08091F8019091F901A091DA
:100E2000FA01B091FB018730904BA740B04BD1F451
:100E30001092F8011092F9011092FA011092FB0140
:100E400014BE84B7877F84BF0FB6F894A8958091AD
:100E50006000886180936000109260000FBEE0E047
:100E6000FFE3099511E0A0E0B1E0EAECFBE502C088
:100E700005900D92AA33B107D9F721E0AAE3B1E0BA
:100E800001C01D92A83FB207E1F70E94AD0F0C947C
:100E9000E32D0C940000FF93EF93E0913A01F09161
:100EA0003B01309709F00995EF91FF910895FC01FE
:100EB0008591803011F0EFDFFBCF0895FF27E0E24E
:100EC00030E247FF0CC0419597FF09C0EDE2609505
:100ED000709580959095611D711D811D911D27FF55
:100EE00002C0219530E350E2AA27660F771F881FC2
:100EF000991FAA1FA41710F0A41B63955A95A9F770
:100F0000AA3008F0A95FA05DAF93F3956115710554
:100F10008105910541F7ED3211F4EF93F395F21746
:100F200018F43F93F395FBCF8F91B5DFFA95E1F776
:100F30000895E991F9918591803021F0853219F079
:100F4000AADFF9CF089520E0E89455915532C1F316
:100F5000503311F4689455915A3348F4505390F338
:100F6000220F022E220F220F200D250FF4CF0EF498
:100F7000219589919991533619F3533729F15335B6
:100F800059F1BC0188279927E8945C3621F48991AE
:100F9000999168945591543639F446EF7EF077FF75
:100FA0000DC08FEF9FEF0AC055374AE039F0583532
:100FB00040E121F0523642E009F00895FF93EF93AB
:100FC0007DDFEF91FF91B7CFFF93EF93FC0181910C
:100FD0008030B9F360DFFBCFFF93EF9368DFF1CF91
:100FE000DF93CF93CDB7DEB72596A3DFCF91DF9107
:100FF000089561110BC0FC018281882321F085EEE8
:101000000E948B1603C085EE0E94531780E090E08B
:10101000089508956091BC017091BD018091BE0159
:101020009091BF010E94022156985E9825982D98B4
:1010300026982E9827982F98813019F0823021F029
:101040000895259A2D9A0895269A2E9A08958AE051
:1010500098E0892B11F00E940A0880E090E0089542
:1010600056985E9825982D9826982E9827982F9810
:101070008FEF90E0909389008093880090938B008D
:1010800080938A0090938D0080938C00259A2D9AEE
:101090002FEF80E792E0215080409040E1F700C0C0
:1010A0000000269A2E9A2FEF80E792E02150804090
:1010B0009040E1F700C00000279A2F9A2FEF80E7B9
:1010C00092E0215080409040E1F700C00000259858
:1010D0002D982FEF80E792E0215080409040E1F77B
:1010E00000C0000026982E982FEF80E792E0215054
:1010F00080409040E1F700C0000027982F98569854
:101100005E9825982D9826982E9827982F980895C0
:1011100089EA8093800089E08093810024982C984C
:101120003F988AB18F748AB96E98479A8BB1806B59
:101130008BB9769A0E94300889E098E0892B11F0EB
:101140000E94090880E090E0089580E28093000109
:1011500080913C0181110EC00E94F40881E08093CF
:101160003C012FEF83ED90E3215080409040E1F768
:1011700000C0000080E40E94FA0880930001811101
:101180002EC00E94240980930001811128C00E9472
:10119000240980930001811122C08FE30E94240959
:1011A0008093000181111BC00E941C0980E40E94F1
:1011B000FA0880930001811112C08CE00E9424097A
:1011C0008093000181110BC00E94240980930001CB
:1011D000811105C08FE30E942409809300010E94C1
:1011E0001C098091000108951092B9008AE0809353
:1011F000B800089594EA9093BC009091BC0097FFCA
:10120000FCCF9091B900987F983021F0903111F087
:1012100081E008958093BB0084E88093BC008091B6
:10122000BC0087FFFCCF8091B900887F883111F026
:10123000803471F780E0089584E98093BC00809148
:10124000BC0084FDFCCF08958093BB0084E88093AC
:10125000BC008091BC0087FFFCCF9091B900987FC3
:1012600081E0983209F480E0089584E88093BC001E
:101270008091BC0087FFFCCF8091BB0008958091D6
:101280000001811115C080E40E94FA0880930001DA
:1012900081110CC082E10E94240980930001811118
:1012A00005C08FEF0E942409809300010E941C0951
:1012B00084B1807F84B985B1807F85B98AB1837F0D
:1012C0008AB98BB1837F8BB93E98469808950E9466
:1012D000A508809300010E943F0980B38C7080BBF9
:1012E00081B3836F81BBECE4F1E0AEE3B1E0119236
:1012F0001D9281E0EA35F807D1F788E898E0892B5C
:1013000011F00C94880808957F928F929F92AF926B
:10131000BF92CF92DF92EF92FF920F931F93CF93E2
:10132000DF93809100018823E1F080913D018F5F80
:1013300080933D01811115C082E493E00E9457071C
:101340000E94A50880930001882329F088E293E099
:101350000E94570706C084E193E00E9457070E944D
:1013600030088EE3E82E81E0F82E8701C0E0D0E05F
:101370009924939492E0892EAA24A394B12C35E069
:10138000C32E33E0D32EC730D10500F58091000184
:10139000811164C080E40E94FA08809300018111E9
:1013A00012C082E10E9424098093000181110BC0C8
:1013B000C5010C2E01C0880F0A94EAF780950E949F
:1013C0002409809300010E941C0948C0CA30A1F082
:1013D00028F4C83059F0C93061F005C0CC3089F02C
:1013E00070F0CD3089F0209A289810C0219A299861
:1013F0000DC0229A2A980AC0239A2B9807C0529AA5
:1014000001C0539A5B9802C03E9A4698E0EAEA957A
:10141000F1F78FB181708925799902C032E001C05E
:1014200030E0832B7C9902C034E001C030E0832B94
:101430007D9902C028E001C020E0822B7E9902C085
:1014400090E101C090E0892B9FB19095991F992759
:10145000991F9295990F907E892B10C08091000161
:10146000811175C080E40E94FA08809300018823EE
:1014700009F45AC0712C0E941C09872DD8019C9137
:10148000981739F18C9380910101882301F18091A3
:10149000D70180FF04C08AE093E00E945707809143
:1014A000D70180FF0CC0809101011F928F93DF92C2
:1014B000CF920E94F0070F900F900F900F908091A5
:1014C000D70180FF04C083E093E00E945707809219
:1014D00001010E943F0921960F5F1F4FCE30D105B9
:1014E00009F051CF809101018823B9F08150809398
:1014F0000101882339F0EFE9FFE03197F1F700C0EF
:1015000000000BC0ECE4F1E0D7018D917D018193E7
:10151000BCE4EB16B1E0FB06B9F787E298E0892B53
:10152000C1F00E94270815C083E10E94240980931E
:10153000000181119FCF81E40E94FA08809300018D
:10154000811198CF0E943509782E709494CF80E055
:1015500095CF81E0DF91CF911F910F91FF90EF9098
:10156000DF90CF90BF90AF909F908F907F90089525
:10157000E82FF0E0E45BFE4F80810895CF92DF9288
:10158000EF92FF920F931F93CF93DF938CEE92E035
:101590000E9457078CE4E82E81E0F82EC0E0D0E0EE
:1015A00097EEC92E92E0D92E0EED12E0DF93CF9385
:1015B000DF92CF920E94F00784EE92E00E945707DC
:1015C000F70181917F0190E00E9464219F938F93A6
:1015D0001F930F930E94F0078CED92E00E94570733
:1015E00021968DB79EB708960FB6F8949EBF0FBE92
:1015F0008DBFCE30D105D1F6DF91CF911F910F91E4
:10160000FF90EF90DF90CF9008958B3B910580F491
:10161000883A910548F5853A9105D8F484309105CA
:1016200008F0B2C0019709F06EC081E090E0089523
:10163000803E910508F467C0883E910508F4A4C077
:101640009C01205F31092031310508F05CC09065B4
:101650000895853A910509F459C0863A910509F033
:1016600058C082E890E40895883A910509F454C07E
:10167000893A910509F453C08A3A910509F452C098
:101680008B3A910509F451C08C3A910509F450C088
:101690008D3A910509F44FC0803B910509F44EC085
:1016A0008E3A910509F44DC08F3A910509F44CC06A
:1016B000813B910509F44BC0823B910509F44AC076
:1016C000833B910509F449C0843B910509F448C066
:1016D000853B910509F447C0863B910509F446C056
:1016E000873B910509F445C0883B910509F444C046
:1016F000893B910509F443C08A3B910509F442C036
:1017000080E094E4089580E090E0089581E890E41A
:10171000089583E890E4089582EE94E4089589EEB4
:1017200094E408958AEE94E4089585EB94E4089592
:1017300086EB94E4089587EB94E408958CEC94E4AC
:1017400008958DEC94E4089583E895E408958AE87B
:1017500095E4089582E995E4089584E995E408956F
:1017600081E296E4089583E296E4089584E296E4A3
:10177000089585E296E4089586E296E4089587E266
:1017800096E408958AE296E40895089524E5829FF8
:10179000C0011124FC0126E0729FE00DF11D11240F
:1017A000E60FF11DEE0FFF1FEC51FF4F8591949155
:1017B0000895880F991FFC01E05AF040859194919B
:1017C0000895880F991FFC01E052FF4F8591949175
:1017D000089524E5829FC0011124FC0146E0749F16
:1017E000E00DF11D1124E60FF11DEE0FFF1FEC516E
:1017F000FF4F859194919C013A9521154FE1340753
:1018000008F429C13F512115304120F49F700E94F6
:10181000E10B08959C0130532115304118F49927AC
:10182000906C0895811520E5920769F40E94CC1A06
:101830004FEF84E39CE0415080409040E1F700C0CE
:1018400000000C942622813020E5920751F48CE5AB
:1018500093E00E9457078091D70181608093D70160
:1018600008959C0130552115304108F05CC0292FA6
:1018700033272F70332721303105E9F4AC0164E0C0
:10188000440F551F6A95E1F744275370BC016370FC
:10189000772702C0220F331F6A95E2F73C68242B9A
:1018A000352B73E0880F991F7A95E1F78076992799
:1018B000822B932B08952230310529F4982F882705
:1018C000816F906A089523303105A1F4AC0133E0B3
:1018D000440F551F3A95E1F7407E57708370992762
:1018E00021E030E002C0220F331F8A95E2F7C901E0
:1018F0009C6816C02430310531F5AC0123E0440F5B
:10190000551F2A95E1F7407E57708370992721E093
:1019100030E002C0220F331F8A95E2F7C9019A68AE
:10192000842B952B08959C0130572115304118F4D4
:101930009F70906208959C0130582115304118F431
:101940009F70906A0895803E9105E0F4803C910577
:1019500058F58133910509F46FC048F48932910537
:1019600009F463C08A32910509F46DC072C08933ED
:101970009105E9F082389105D1F08533910509F49C
:101980004DC067C0833E910581F138F4803E9105DA
:10199000B9F0823E9105D9F05CC0863E910561F1B7
:1019A000873E9105A1F155C00E94D90B0895209161
:1019B000E90120FD02C021FF4CC080EE90E049C04B
:1019C0008091E90180FFF9CF89E390E042C08091E6
:1019D000E90182FF0EC08091E90184FF03C080E02D
:1019E00090E037C083EE90E034C08091E90182FF3F
:1019F000F2CF82EE90E02DC08091E90183FF0BC011
:101A00008091E90184FDEBCF87EE90E022C08091C8
:101A1000E90183FFF5CF86EE90E01BC08091E901DC
:101A200085FF07C089E290E014C08091E90185FF3D
:101A3000F9CF85E390E00DC08091E90186FF07C0F2
:101A40008AE290E006C08091E90186FFF9CF81E348
:101A500090E00E94050B0895089580916D0108950E
:101A60009FB7F89410925C019FBF9091EF01943062
:101A700009F057C09091E9009F703091EC00232F3E
:101A8000217030FD20E8922B24E02093E900209182
:101A9000EB0020FF43C02091EE0027FF3FC02091C4
:101AA0005A01222321F02091E80025FF37C010922F
:101AB0005A0126E03091E80035FD15C03091EF0164
:101AC000343061F53091EB0035FD28C0215021F410
:101AD00081E080935A0122C0EFE9FFE03197F1F7EE
:101AE00000C00000E7CF8093F1008091E80085FD01
:101AF0000AC08091E80080FFFCCF8091E8008E77DB
:101B00008093E80006C08FB7F89421E020935C0131
:101B10008FBF9F709093E90080E008959F7090932D
:101B2000E9008FEF0895CF93DF9300D01F92CDB7D8
:101B3000DEB79C018091EF01843019F593E0998321
:101B40003B832A839093E9008FEF9091E8008150C6
:101B500095FD06C095ED9A95F1F700008111F5CF3E
:101B60008091E80085FF0DC040E050E063E070E048
:101B7000CE0101960E9466108091E8008E778093D6
:101B8000E8000F900F900F90DF91CF910895CF93C1
:101B9000DF9300D01F92CDB7DEB72091EF01243044
:101BA00021F522E029839B838A8383E08093E900E7
:101BB0008FEF9091E800815095FD06C095ED9A95C4
:101BC000F1F700008111F5CF8091E80085FF0DC08D
:101BD00040E050E063E070E0CE0101960E946610A4
:101BE0008091E8008E778093E8000F900F900F901F
:101BF000DF91CF9108959C018091EF018430F9F439
:101C000082E08093E9009FEF8091E800915085FD8C
:101C100006C085ED8A95F1F700009111F5CF80910E
:101C2000E80085FF0CC040E050E065E070E0C901CD
:101C30000E9466108091E8008E778093E8000895F6
:101C4000CF93DF93EC018091EF01843009F047C01E
:101C500080910C018823E1F080910D018823C1F06F
:101C600085E08093E9008FEF9091E800815095FD29
:101C700006C095E19A95F1F700008111F5CF8091AA
:101C8000E80085FF2CC040E050E060E170E017C044
:101C900081E08093E9008FEF9091E800815095FDFD
:101CA00006C095ED9A95F1F700008111F5CF80916E
:101CB000E80085FF14C040E050E068E070E0CE012D
:101CC0000E9466108091E8008E778093E80080E1A2
:101CD000FE01ADE5B1E001900D928A95E1F7DF914B
:101CE000CF91089583E993E00E9457078091EE0118
:101CF000811109C00E94F7110E9454128091E200E4
:101D000084608093E20008958FE893E00E94570773
:101D10001092EE0108958BE893E00C94570787E842
:101D200093E00E9457070C94F52B83E893E00E9400
:101D300057070E94BC210E94FB2B0E94FE140C94AA
:101D40002C0D20915B012F5F822F62E30E94782D82
:101D5000992319F020935B01089510925B01809103
:101D60005C01882371F18091EF01843041F580910D
:101D7000E9008F702091EC00922F917020FD90E887
:101D8000892B94E09093E9009091EB0090FF14C0B0
:101D90009091EE0097FF10C09091E80095FF03C06E
:101DA0001092F100F9CF9091E80090FF05C090915A
:101DB000E8009E779093E8008F708093E90010927E
:101DC0005C01089542E061EC81E00E94701142E004
:101DD00061EC82E00E94701142E061EC83E00E94BD
:101DE000701142E261EC84E00E94701142E161EC0A
:101DF00085E00C9470118091F101833009F455C095
:101E000030F4813071F0823009F48EC008958A3048
:101E100009F47AC08B3009F460C0893009F09CC0A5
:101E200020C08091F001813A09F096C08091E800CD
:101E3000877F8093E8008091F4019091F501892BD0
:101E400021F460E18DE591E003C060E080E090E086
:101E500070E00E94B1108091E8008B778093E800D9
:101E600008958091F001813209F076C08091F401EB
:101E70009091F501009719F0049709F06DC08091D9
:101E8000E800877F8093E8008091E80082FD05C02C
:101E90008091EF018111F8CF5FC08091F1008093B4
:101EA0006D018091E8008B7753C08091F001813AF9
:101EB00009F052C08091F4019091F501892B09F04D
:101EC0004BC08091E800877F8093E8008091E80014
:101ED00080FFFCCF80910C0136C08091F0018132EF
:101EE000D9F58091F4019091F501892BA9F58091A4
:101EF000E800877F8093E8000E94A5118091F2019D
:101F000080930C010C94CC1A8091F001813221F560
:101F10008091E800877F8093E8000E94A51180915E
:101F2000F30180936E0108958091F001813AA1F44C
:101F30008091E800877F8093E8008091E80080FF2F
:101F4000FCCF80916E018093F1008091E8008E7744
:101F50008093E8000C94A511089584B7877F84BF0F
:101F60000FB6F894A8958091600088618093600016
:101F7000109260000FBE90E080E80FB6F894809356
:101F80006100909361000FBE0E948A150E94F711B4
:101F90000E9454128091E20084608093E20080E30A
:101FA0009DE00E94FD2078940E94DE140E948C1512
:101FB00082E091E00E94F9140E94E32B82E793E013
:101FC0000E9457078091EF01853089F48EE693E0F7
:101FD0000E9457070E947E218091ED01882391F392
:101FE0000E94A821882371F30E945010EBCF0E9419
:101FF000BA15E8CF292F332723303105C9F060F413
:102000002130310581F02230310509F041C08DE8E1
:1020100090E02BEC33E040C021323105E1F0223278
:10202000310531F135C082E190E028E534E034C07B
:1020300099278130910549F028F0029749F5E7E9A1
:10204000F3E005C0E7ECF3E002C0EFEAF3E08491CF
:1020500090E09F0121C06530D8F4E62FF0E0EE0F4C
:10206000FF1FEB5DFE4F2081318189E090E014C0BD
:10207000653070F470E0FB01EE0FFF1FE55EFE4F70
:1020800020813181FB01EA5EFE4F808190E004C037
:1020900080E090E020E030E0FA0131832083089571
:1020A00080E189BD82E189BD09B400FEFDCF809148
:1020B000D8008F7D8093D8008091E000826080936B
:1020C000E0008091E00081FDFCCF0895CF92DF9287
:1020D000EF92FF920F931F93CF93DF93EC018B014D
:1020E0006A010E94C411811133C0C114D10439F0B6
:1020F000F60180819181081B190BC80FD91FE12CB3
:10210000F12C0115110519F18091E80085FD16C02B
:102110008091E8008E778093E800C114D10449F0E3
:10212000F60180819181E80EF91EF182E08285E05E
:102130000FC00E94C411882321F30AC089918093A3
:10214000F10001501109FFEFEF1AFF0ADACF80E02A
:10215000DF91CF911F910F91FF90EF90DF90CF9083
:1021600008952091F6013091F7012617370748F0BE
:102170006115710539F42091E8002E772093E8006D
:1021800001C0B901FC0120E06115710579F1809170
:10219000EF018823F1F18530F1F18091E80083FDB2
:1021A0003CC08091E80082FD2EC08091E80080FF55
:1021B000EBCF2091F3008091F20090E0922B61151B
:1021C000710551F08830910538F421912093F10088
:1021D000615071090196F3CF21E0089709F020E0E2
:1021E0008091E8008E778093E800CECF2111CFCF89
:1021F0000AC08091EF01882361F0853061F0809101
:10220000E80083FD0AC08091E80082FFF2CF80E001
:10221000089582E0089583E0089581E00895209173
:10222000F6013091F7012617370748F0611571055F
:1022300039F42091E8002E772093E80001C0B9011D
:10224000FC0120E06115710591F18091EF01882377
:1022500009F440C0853009F43FC08091E80083FD57
:102260003DC08091E80082FD2FC08091E80080FF92
:10227000E9CF2091F3008091F20090E0922B61155C
:10228000710559F08830910540F424912093F100B4
:102290003196615071090196F2CF21E0089709F05B
:1022A00020E08091E8008E778093E800CBCF211169
:1022B000CCCF0AC08091EF01882361F0853061F0B6
:1022C0008091E80083FD0AC08091E80082FFF2CF90
:1022D00080E0089582E0089583E0089581E0089504
:1022E000982F973068F59093E900981739F070911E
:1022F000EC002091ED005091F00003C0242F762FC8
:1023000050E021FD02C09F5FECCF3091EB003E7F9B
:102310003093EB003091ED003D7F3093ED00309134
:10232000EB0031603093EB007093EC002093ED00F4
:102330005093F0002091EE0027FDE5CF80E0089556
:102340008F708093E90081E008958091F00187FF0C
:1023500011C08091E80082FD05C08091EF018111DC
:10236000F8CF11C08091E8008B770BC08091EF010E
:10237000882349F08091E80080FFF8CF8091E80041
:102380008E778093E80008952091E4003091E50075
:1023900095E64091EC00842F817040FF23C080912E
:1023A000E80080FD1DC08091EF01882399F0853001
:1023B00099F08091EB0085FD11C04091E4005091AF
:1023C000E5002417350729F3915011F09A01E1CF68
:1023D00084E0089582E0089583E0089581E00895FF
:1023E00080E008954091E80042FFDDCF08950E940B
:1023F00065120E946D12E0EEF0E0808181608083C2
:10240000E8EDF0E080818F77808319BCA7EDB0E024
:102410008C918E7F8C9380818F7E80831092EE01D1
:1024200008950F931F93CF93DF930E9465120E942C
:102430006D12C8EDD0E088818F77888388818068AD
:10244000888388818F7D888319BC1092EF01109258
:10245000EB011092ED011092EC0100EE10E0F8019A
:1024600080818B7F808388818160888342E060E007
:1024700080E00E947011E1EEF0E080818E7F808329
:10248000E2EEF0E0808181608083808188608083DB
:10249000F80180818E7F8083888180618883DF91CD
:1024A000CF911F910F910895E8EDF0E080818F7E2C
:1024B0008083E7EDF0E080818160808384E082BFEB
:1024C00081E08093EE010C941112E8EDF0E0808140
:1024D0008E7F80831092E20008951092DA001092AD
:1024E000E10008951F920F920FB60F9211242F93BF
:1024F0003F934F935F936F937F938F939F93AF938C
:10250000BF93EF93FF938091E10082FF0BC0809116
:10251000E20082FF07C08091E1008B7F8093E100A1
:102520000E94A10E8091DA0080FF1FC08091D80028
:1025300080FF1BC08091DA008E7F8093DA0080914B
:10254000D90080FF0DC080E189BD82E189BD09B459
:1025500000FEFDCF81E08093EF010E94720E05C066
:1025600019BC1092EF010E94840E8091E10080FF5F
:1025700019C08091E20080FF15C08091E2008E7F3B
:102580008093E2008091E20080618093E20080917C
:10259000D80080628093D80019BC85E08093EF0159
:1025A0000E948F0E8091E10084FF30C08091E20094
:1025B00084FF2CC080E189BD82E189BD09B400FEA1
:1025C000FDCF8091D8008F7D8093D8008091E1006D
:1025D0008F7E8093E1008091E2008F7E8093E20005
:1025E0008091E20081608093E2008091EB0188237A
:1025F00011F084E007C08091E30087FD02C081E014
:1026000001C083E08093EF010E94950E8091E1006C
:1026100083FF29C08091E20083FF25C08091E10003
:10262000877F8093E10082E08093EF011092EB01BD
:102630008091E1008E7F8093E1008091E2008E7FA7
:102640008093E2008091E20080618093E20042E0AA
:1026500060E080E00E9470118091F00088608093BB
:10266000F0000E948B0EFF91EF91BF91AF919F916F
:102670008F917F916F915F914F913F912F910F902B
:102680000FBE0F901F9018951F920F920FB60F92CA
:1026900011242F933F934F935F936F937F938F9367
:1026A0009F93AF93BF93CF93DF93EF93FF93C0912B
:1026B000E900CF708091EC00D82FD17080FDD0E878
:1026C0001092E9008091F000877F8093F000789469
:1026D0000E9488131092E9008091F0008860809336
:1026E000F000CD2BCF70C093E900FF91EF91DF9107
:1026F000CF91BF91AF919F918F917F916F915F919A
:102700004F913F912F910F900FBE0F901F901895F2
:102710001F93CF93DF93CDB7DEB7AA970FB6F89488
:10272000DEBF0FBECDBFE0EFF1E08091F1008193FD
:1027300021E0E83FF207C9F70E94FB0E8091E80014
:1027400083FF24C18091F0019091F101492F50E065
:102750004A30510508F01AC1FA01EA5AFF4F0C94A9
:10276000982D803881F0823809F010C18091F401F1
:102770008F708093E9008091EB0085FB882780F9BA
:102780001092E90006C08091EC019091ED01911149
:1027900082609091E800977F9093E8008093F10029
:1027A0001092F100C8C0282F2D7F09F0EFC08823B8
:1027B00019F0823061F0EAC08091F201813009F0B5
:1027C000E5C0933009F080E08093ED012BC080914B
:1027D000F201811127C08091F4018F7009F4D6C0F5
:1027E0008093E9002091EB0020FF1CC0933021F47E
:1027F0008091EB00806214C09091EB009061909307
:10280000EB0021E030E0A90102C0440F551F8A957A
:10281000E2F74093EA001092EA008091EB008860B2
:102820008093EB001092E9008091E800877F86C0DA
:102830008111ACC01091F2011F778091E300807884
:10284000812B8093E3008091E800877F8093E800EC
:102850000E94A5118091E80080FFFCCF8091E300E9
:1028600080688093E300111102C082E001C083E020
:102870008093EF018BC08058823008F087C0809130
:10288000F2019091F3018C3D53E0950779F583E0D7
:102890008A838AE289834FB7F894DE01139620E099
:1028A0003EE051E2E32FF0E050935700E49120FF27
:1028B00003C0E295EF703F5FEF708E2F90E0EA303B
:1028C00010F0C79601C0C0968D939D932F5F243161
:1028D00049F74FBF8091E800877F8093E8006AE264
:1028E00070E0CE0101960E94B11014C0AE014F5F9E
:1028F0005F4F6091F4010E94FA0FBC01892B09F42B
:1029000045C09091E800977F9093E80089819A8173
:102910000E940F118091E8008B778093E80036C009
:102920008038A1F58091E800877F8093E80080914E
:10293000EB018093F1008091E8008E778093E800AE
:102940000E94A51123C0811121C08091F2019091B4
:10295000F30199270297D4F48091E800877F809350
:10296000E8008091F2018093EB010E94A511809113
:10297000EB01811106C08091E30087FD02C081E078
:1029800001C084E08093EF010E94E20E8091E80094
:1029900083FF0AC08091E800877F8093E8008091E0
:1029A000EB0080628093EB00AA960FB6F894DEBF2E
:1029B0000FBECDBFDF91CF911F910895CF9380912E
:1029C000EF018823A1F0C091E900CF709091EC0055
:1029D000892F817090FD80E8C82B1092E9008091CA
:1029E000E80083FD0E948813CF70C093E900CF9167
:1029F000089590937401809373010895E091730199
:102A0000F0917401309721F00190F081E02D09944C
:102A100080E00895EF92FF921F93CF93DF93F82EFB
:102A2000192FE0917301F09174013097A9F10280A0
:102A3000F381E02D09958091D70182FF2DC080FFA1
:102A400004C08DE895E00E945707CF2DD12F10E1EB
:102A500087E8E82E85E0F82E8091D70180FF0BC033
:102A600088811F928F93FF92EF920E94F0070F9040
:102A70000F900F900F90115021961111EDCF809172
:102A8000D70180FF09C085E895E0DF91CF911F91C4
:102A9000FF90EF900C945707DF91CF911F91FF901B
:102AA000EF900895E0917301F0917401309721F057
:102AB0000480F581E02D09940895209171013091F1
:102AC00072012817390771F0909372018093710198
:102AD000E0917301F0917401309721F00680F78145
:102AE000E02D0994089520916F013091700128170D
:102AF000390771F09093700180936F01E091730139
:102B0000F0917401309721F00084F185E02D099453
:102B1000089508950C9489150E94C2210E946709A6
:102B20000C948822CF93C82F8091D70182FF1EC0BA
:102B300080FF04C086EA95E00E9457078091D70184
:102B400080FF0CC01F92CF9381EA95E09F938F93F3
:102B50000E94F0070F900F900F900F908091D70177
:102B600080FF04C08FE995E00E9457078C2FCF911A
:102B70000C942C0DCF92DF92EF92FF920F931F9344
:102B8000CF93DF93CDB7DEB72B970FB6F894DEBFA8
:102B90000FBECDBF0E94840986E7C82E81E0D82EE3
:102BA00000E010E0E02E802F0E94B80AF60141916B
:102BB0006F01F82EF426B1F40F5F1F4F0E30110590
:102BC00089F78FEF89838A831B820E94CB218160E2
:102BD000782F9D838C8349815A816B818D810E94DE
:102BE0005D1640C09091D70191FF04C08B870E9471
:102BF000BE0A8B8520E030E04F2D50E0922FBA01C5
:102C0000022E02C0759567950A94E2F760FF24C012
:102C10002E83EF8221E030E0690102C0CC0CDD1C84
:102C20009A95E2F790E08C219D21892B09F420E010
:102C300028870E94CB218160782F9A8789874E81CF
:102C40005F8168858A850E945D16F801EA58FE4F0B
:102C50008081C826C08206C02F5F3F4F26303105D5
:102C600069F6AACF0E94F9250E94FE149091750181
:102C70008917A1F00E94FE14809375012B960FB660
:102C8000F894DEBF0FBECDBFDF91CF911F910F91A2
:102C9000FF90EF90DF90CF900C9492152B960FB68B
:102CA000F894DEBF0FBECDBFDF91CF911F910F9182
:102CB000FF90EF90DF90CF900895CF93DF93CDB743
:102CC000DEB72B970FB6F894DEBF0FBECDBF4F8394
:102CD000588769877A878B87DE01119686E0FD0128
:102CE00011928A95E9F785E0FE01379601900D92E1
:102CF0008A95E1F749815A816B817C818D819E8122
:102D00000E94601D2B960FB6F894DEBF0FBECDBF9C
:102D1000DF91CF910895CF93C82F882309F4C1C0C4
:102D2000823859F40E94FE1481FDBBC089E30E94E1
:102D3000FD1F0E94D72089E30CC0833879F40E94DC
:102D4000FE1480FDAEC083E50E94FD1F0E94D720C7
:102D500083E50E944D20CF910C94D720843859F4FC
:102D60000E94FE1482FD9DC087E40E94FD1F0E9408
:102D7000D72087E4EECF8CEF8C0F813A48F48C2F6C
:102D80000E948B2A81118DC08C2F0E94FD1FE3CFE2
:102D900080E28C0F883048F4C77081E001C0880F52
:102DA000CA95EAF70E94A020D6CF8BE58C0F83301E
:102DB00078F4C53A29F0C63A31F083E890E005C0CE
:102DC00081E890E002C082E890E0CF910C945D151C
:102DD00088E58C0F833108F064C0C83A39F1C93AEC
:102DE00041F1CA3A49F1CB3A51F1CC3A59F1CD3AD5
:102DF00061F1C03B69F1CE3A71F1CF3A79F1C13B53
:102E000081F1C23B89F1C33B91F1C43B99F1C53BD0
:102E1000A1F1C63BA9F1C73BB1F1C83BB9F1C93B30
:102E2000C1F1CA3BC9F180E090E038C082EE90E089
:102E300035C089EE90E032C08AEE90E02FC085EB7D
:102E400090E02CC086EB90E029C087EB90E026C094
:102E50008CEC90E023C08DEC90E020C083E891E002
:102E60001DC08AE891E01AC082E991E017C084E9A8
:102E700091E014C081E292E011C083E292E00EC0C2
:102E800084E292E00BC085E292E008C086E292E024
:102E900005C087E292E002C08AE292E0CF910C94F2
:102EA0007315CF910895882309F44BC0823859F4E3
:102EB0000E94FE1481FF45C089E30E94FD1F0E940D
:102EC000D72089E30CC0833871F40E94FE1480FF80
:102ED00038C083E50E94FD1F0E94D72083E50E9431
:102EE0004D200C94D720843859F40E94FE1482FFA0
:102EF00028C087E40E94FD1F0E94D72087E4EFCFFF
:102F00009CEF980F913A58F390E2980F983050F454
:102F1000877091E001C0990F8A95EAF7892F0E9486
:102F2000A620DFCF9BE5980F933020F480E090E05F
:102F30000C945D15885A833120F480E090E00C9465
:102F400073150895882321F00E94A0200C94D720A7
:102F50000895882321F00E94A6200C94D72008957C
:102F6000BF92CF92DF92EF92FF920F931F93CF9376
:102F7000DF9300D000D000D0CDB7DEB77C0185E074
:102F8000F701DE01119601900D928A95E1F7F701A4
:102F900083819481892B09F4DDC2908181818F3FE7
:102FA00019F49F3F09F4D6C2F701028125812295C9
:102FB0002F7099838A8389819A812E830E94BC1FF6
:102FC000182FB92E0E94BB1F0E94821EEB2DE29586
:102FD000EF704E2F50E0FA01E05AFF4F2E810C9413
:102FE000982D8B2D807F9B2D9F70F92E882319F0B3
:102FF000F29480EFF822002349F0FF2009F457C231
:103000008F2D0E94B0200E94D72051C2812F0E9494
:103010005317FF2009F49EC28F2D0E94B6202696DA
:103020000FB6F894DEBF0FBECDBFDF91CF911F91D9
:103030000F91FF90EF90DF90CF90BF900C94D7202E
:103040003B2D307F8B2D8F70303211F08295807F39
:10305000112319F0113021F12CC00023B9F02223E3
:1030600009F490C1213009F08DC126960FB6F8946D
:10307000DEBF0FBECDBFDF91CF911F910F91FF90AB
:10308000EF90DF90CF90BF900C94C020222319F0D6
:10309000213009F45FC28E830E94C3208E8186C1D5
:1030A000002321F0223008F055C26CC1211152C218
:1030B0007DC1002321F0222309F464C1F8C1222339
:1030C00009F474C109C28B2D86958695837019F019
:1030D0008130D1F03FC2002321F0812F9B2D9370CE
:1030E00002C080E090E026960FB6F894DEBF0FBED7
:1030F000CDBFDF91CF911F910F91FF90EF90DF90A7
:10310000CF90BF900C945D15002321F0812F9B2D53
:10311000937002C080E090E026960FB6F894DEBF70
:103120000FBECDBFDF91CF911F910F91FF90EF9018
:10313000DF90CF90BF900C947315812F002319F06E
:103140000E947F2402C00E94E72426960FB6F894BE
:10315000DEBF0FBECDBFDF91CF911F910F91FF90CA
:10316000EF90DF90CF90BF900C946C258B2D8370E7
:1031700009F075C00111EEC1812F82958695877087
:10318000880F880F912F9F70C92ED12CE12CF12C24
:10319000082E04C0CC0CDD1CEE1CFF1C0A94D2F7D8
:1031A00014FF12C00FE010E020E030E004C0000F78
:1031B000111F221F331F8A95D2F7C901B8016095EC
:1031C00070958095909503C060E070E0CB014B2D29
:1031D0004695469543704230C1F060F56C297D29D3
:1031E0008E299F29413051F126960FB6F894DEBF03
:1031F0000FBECDBFDF91CF911F910F91FF90EF9048
:10320000DF90CF90BF900C94A91E6C297D298E2948
:103210009F2926960FB6F894DEBF0FBECDBFDF9173
:10322000CF911F910F91FF90EF90DF90CF90BF90C3
:103230000C94C51E0E94A91EC701B60126960FB6A2
:10324000F894DEBF0FBECDBFDF91CF911F910F91DC
:10325000FF90EF90DF90CF90BF900C948D1E0023D5
:1032600019F08B2D817001C08695882309F472C1F5
:10327000812F829586958770880F880F912F9F7078
:10328000C92ED12CE12CF12C082E04C0CC0CDD1C55
:10329000EE1CFF1C0A94D2F714FF12C00FE010E0DE
:1032A00020E030E004C0000F111F221F331F8A9559
:1032B000D2F7C901B801609570958095909503C0CB
:1032C00060E070E0CB014B2D46954695437042304F
:1032D000C1F060F56C297D298E299F29413051F17B
:1032E00026960FB6F894DEBF0FBECDBFDF91CF910B
:1032F0001F910F91FF90EF90DF90CF90BF900C94B3
:10330000831F6C297D298E299F2926960FB6F89454
:10331000DEBF0FBECDBFDF91CF911F910F91FF9008
:10332000EF90DF90CF90BF900C949F1F0E94831F5F
:10333000C701B60126960FB6F894DEBF0FBECDBF0B
:10334000DF91CF911F910F91FF90EF90DF90CF9081
:10335000BF900C94671F103FD1F118F4103E50F449
:10336000A1C0123F09F463C008F44CC0133F09F434
:1033700073C098C01F708B2D8F710023A1F00E9425
:10338000001F812F26960FB6F894DEBF0FBECDBF6B
:10339000DF91CF911F910F91FF90EF90DF90CF9031
:1033A000BF900C94A2170E94211F812F26960FB662
:1033B000F894DEBF0FBECDBFDF91CF911F910F916B
:1033C000FF90EF90DF90CF90BF900C94A91700234F
:1033D000A9F02111BFC08B2D8F7126960FB6F894DE
:1033E000DEBF0FBECDBFDF91CF911F910F91FF9038
:1033F000EF90DF90CF90BF900C94461F223008F0E2
:10340000A9C0E9CF0023A9F08B2D8F7126960FB6A6
:10341000F894DEBF0FBECDBFDF91CF911F910F910A
:10342000FF90EF90DF90CF90BF900C94001F00238F
:1034300059F38B2D8F7126960FB6F894DEBF0FBE11
:10344000CDBFDF91CF911F910F91FF90EF90DF9053
:10345000CF90BF900C94211F002399F08B2D8F717A
:1034600026960FB6F894DEBF0FBECDBFDF91CF9189
:103470001F910F91FF90EF90DF90CF90BF900C9431
:10348000EB1E26960FB6F894DEBF0FBECDBFDF91C0
:10349000CF911F910F91FF90EF90DF90CF90BF9051
:1034A0000C94E11E0023A9F0222309F4ADCF812F53
:1034B00026960FB6F894DEBF0FBECDBFDF91CF9139
:1034C0001F910F91FF90EF90DF90CF90BF900C94E1
:1034D0008B16222309F4ADCF812F26960FB6F894D0
:1034E000DEBF0FBECDBFDF91CF911F910F91FF9037
:1034F000EF90DF90CF90BF900C9453174B2D4F70EF
:10350000612FC7010E94F90726960FB6F894DEBF17
:103510000FBECDBFDF91CF911F910F91FF90EF9024
:10352000DF90CF90BF900C94051E4B2D4F70612FF4
:10353000C70126960FB6F894DEBF0FBECDBFDF9150
:10354000CF911F910F91FF90EF90DF90CF90BF90A0
:103550000C94C50B26960FB6F894DEBF0FBECDBFF8
:10356000DF91CF911F910F91FF90EF90DF90CF905F
:10357000BF9008950E94BD200E9492200E94D720F3
:103580000E949E260E946C2580E090E00E945D15BE
:1035900080E090E00C9473150E94AD200C94BA1A50
:1035A0000E94BC1F292F22952F702C3030F42A3016
:1035B00048F42250223078F405C02C3041F02F30EE
:1035C00031F009C0803E48F0803F29F406C093FBEB
:1035D000882780F9089580E0089581E00895CF93C9
:1035E000DF9300D000D01F92CDB7DEB70F900F90C1
:1035F0000F900F900F90DF91CF910895CF93DF93AD
:1036000000D000D000D0CDB7DEB726960FB6F89424
:10361000DEBF0FBECDBFDF91CF9108951F93CF9333
:10362000DF93C091840116E080918501C81799F05D
:10363000D0E01C9FF0011D9FF00D1124EA57FE4FB2
:103640004081518162817381848195810E94FE1A3B
:103650002196C770E9CFDF91CF911F9108954091D6
:10366000B6015091B7016091B8017091B901809194
:10367000BA019091BB010C94FE1A8091BB01829516
:103680008F7009F054C08091B801882309F44FC0AD
:1036900080918401A09185014091B9015091BA01B6
:1036A0006091B6017091B701B6E08A1709F43FC086
:1036B00090E041155105C1F17F3F11F46F3FA1F139
:1036C000B89FF001B99FF00D1124EA57FE4F2181F8
:1036D00027132AC02081261327C02281211124C04C
:1036E000238134812417350710F421503109241B1C
:1036F000350B283C3105C0F42091BB012F702061AF
:103700002093BB0126E0289FF001299FF00D112492
:10371000E557FE4F80818F708061808386EB91E05A
:103720000E94B0170C940E1B01968770BECF0895AF
:10373000CF92DF92EF92FF920F931F93CF93DF937D
:10374000CDB7DEB762970FB6F894DEBF0FBECDBF20
:103750008C0185E0F801DE011D9601900D928A959D
:10376000E1F7D8014C9111965C91119712966C91EA
:103770008091B9019091BA01009709F475C1309117
:10378000B6017091B7017F3F19F43F3F09F46CC156
:10379000F801C380D480E090B801EE2009F4BEC0E7
:1037A0002091BB01C816D90628F0D601A81BB90B79
:1037B000CD0104C0809590958C0D9D1DFF24F39440
:1037C000883C910578F0F12C207F09F0C4C07C2D55
:1037D000D98AC88A89890E94EF1A86EB91E00E94F3
:1037E000B017AFC0822F807F09F045C0571313C0B8
:1037F000431311C061110FC02F7020612093BB01D2
:103800000E942F1B86EB91E00E94B0178091BB01B4
:10381000F80185832EC0CD2819F15F3F11F44F3F89
:10382000F9F0F62E61111CC0809184012091850170
:1038300036E0821709F45BC090E0389FF001399FB1
:10384000F00D1124EA57FE4F7181571306C07081A5
:10385000471303C07281711103C001968770E9CFCD
:10386000F62E662309F41CC18091BB018160809310
:10387000BB01F12C15C1571309C0431307C06111D7
:1038800005C08091BB01F8018583C8C04D875E8764
:103890008D859E856A8B0E94D01A6A898823D1F112
:1038A0006623C1F12091BB01822F82958F7090E039
:1038B000029774F08091B6019091B70198878F8339
:1038C0001986DB86CA862C87CE0107960E94B01720
:1038D00086E0F801A6EBB1E001900D928A95E1F740
:1038E0000E943D1B0E942F1BFF24F394D9C04D87DB
:1038F0005E878D859E850E94BC1F292F22952F7083
:10390000223008F0C1C09F7009F0BBC0805E8830D3
:1039100008F4C6C0C8010E94B017E6CFC816D90681
:1039200008F453C0F601E81BF90BCF01883C910560
:1039300008F450C0F12C7C2DD98AC88A89890E944C
:10394000EF1AE6EBF1E086E0DF011D928A95E9F7D8
:103950000E942F1BA5C0571314C0431312C061113E
:1039600010C08091BB01F8018583C8010E94B01787
:1039700086E0E6EBF1E0DF011D928A95E9F7FE2C87
:103980008FC04D875E878D859E856A8B0E94D01A79
:103990006A89882309F4BECF662309F4BBCF20913E
:1039A000BB01822F82958F7090E002970CF490CF2C
:1039B0008091B6019091B7019A8389831B82DD8241
:1039C000CC822E83CE01019681CF809590958C0D6F
:1039D0009D1DACCFF62E662309F49CCF571333C040
:1039E000431331C02091BB0120FD24C0822F82955A
:1039F0008F70482F50E041155105E1F0D801159620
:103A00002C9315974F30510549F08F5F982F929561
:103A1000907F822F8F70892B15968C93C8010E94FE
:103A2000B01786E0F801A6EBB1E001900D928A95FF
:103A3000E1F78ECF86E0F801A6EBB1E001900D92A0
:103A40008A95E1F72DC04D875E878D859E850E9402
:103A5000D01A81113DCF8091BB0181608093BB0161
:103A6000C8010E94B0171CC0662309F453CF4D87CC
:103A70005E878D859E850E94D01A882309F44ACFDF
:103A800027CF811143CF0CC0243008F043CF9F7063
:103A900009F43CCFD80115969C91907F09F036CF60
:103AA0008F2D62960FB6F894DEBF0FBECDBFDF91AB
:103AB000CF911F910F91FF90EF90DF90CF900895DD
:103AC0001F93CF93DF93CDB7DEB72C970FB6F89443
:103AD000DEBF0FBECDBF4F83588769877A878B873C
:103AE0009C87CE0107960E94981B882371F08A85D7
:103AF0009B85892B09F441C088858F3F09F065C0FB
:103B00008F818F3F09F061C038C086E0FE01379693
:103B1000DE01119601900D928A95E1F76A857B8509
:103B20006115710551F1FF81E885EF3F11F4FF3F09
:103B300021F12091850130E0C90101968770992714
:103B40004091840150E08417950709F447C0F98338
:103B5000EA837D836C8396E0929FD001939FB00DA2
:103B60001124AA57BE4FFE01319601900D929A95ED
:103B7000E1F7809385010E940E1B16E0809184017D
:103B8000909185018917B9F1189FC00111248A57B6
:103B90009E4F0E94981B882371F1E09184011E9F23
:103BA000F0011124EA57FE4F4081518162817381F7
:103BB000848195810E94FE1A8091840190E0019693
:103BC0008770992780938401D9CF4F815885698563
:103BD0007A858B859C850E94FE1ACFCF0E94CC1AD5
:103BE0001092850110928401E6EBF1E086E0DF019E
:103BF0001D928A95E9F72C960FB6F894DEBF0FBE9A
:103C0000CDBFDF91CF911F910895EF92FF920F9357
:103C10001F93CF93DF938C01892B09F46CC0F12C97
:103C2000EE24E394E8012196F8018491843740F46E
:103C3000843008F051C0813081F0823019F15BC0CE
:103C4000853709F444C0A8F19CE7980F903708F035
:103C500052C08F770E94531741C00E5F1F4FFE0165
:103C6000849190E2980F983050F48770FE2D01C037
:103C7000FF0F8A95EAF78F2F0E94B02014C00E9490
:103C80008B162DC00E5F1F4FFE01849190E2980F9E
:103C9000983060F48770FE2D01C0FF0F8A95EAF717
:103CA0008F2F0E94B6200E94D72019C00E94531760
:103CB00016C00E5F1F4FFE01C491CC2381F08FE927
:103CC0009FE00197F1F700C00000C150F6CF0E5FF2
:103CD0001F4FFE01F49003C00E948B168E018F2DA2
:103CE000882309F49FCFEFE9FFE03197F1F700C097
:103CF00000008150F5CFDF91CF911F910F91FF9080
:103D0000EF90089508956093C0017093C10180936E
:103D1000C2019093C3010C94BA1A0F931F930091A0
:103D2000C0011091C1012091C2013091C301DC0199
:103D3000CB01802B912BA22BB32B8093C0019093AE
:103D4000C101A093C201B093C3011F910F910C94C4
:103D5000BA1A0F931F930091C0011091C1012091D5
:103D6000C2013091C301DC01CB0180239123A22346
:103D7000B3238093C0019093C101A093C201B0937B
:103D8000C3011F910F910C94BA1A0F931F930091C6
:103D9000C0011091C1012091C2013091C301DC0129
:103DA000CB0180279127A227B3278093C00190934E
:103DB000C101A093C201B093C3011F910F910C9454
:103DC000BA1A1092BC011092BD011092BE0110925D
:103DD000BF010C94BA1A41E050E060E070E004C00A
:103DE000440F551F661F771F8A95D2F74093BC0179
:103DF0005093BD016093BE017093BF010C94BA1A39
:103E000041E050E060E070E004C0440F551F661FC1
:103E1000771F8A95D2F78091BC019091BD01A09146
:103E2000BE01B091BF01482B592B6A2B7B2B4093CD
:103E3000BC015093BD016093BE017093BF010C940F
:103E4000BA1A41E050E060E070E004C0440F551F32
:103E5000661F771F8A95D2F74095509560957095AB
:103E60008091BC019091BD01A091BE01B091BF01B4
:103E7000482359236A237B234093BC015093BD01FF
:103E80006093BE017093BF010C94BA1A41E050E0F8
:103E900060E070E004C0440F551F661F771F8A95CD
:103EA000D2F78091BC019091BD01A091BE01B0916B
:103EB000BF01482759276A277B274093BC015093AD
:103EC000BD016093BE017093BF010C94BA1A0F93A9
:103ED0001F930091BC011091BD012091BE01309152
:103EE000BF01DC01CB01802B912BA22BB32B809344
:103EF000BC019093BD01A093BE01B093BF011F917F
:103F00000F910C94BA1A0F931F930091BC0110915A
:103F1000BD012091BE013091BF01DC01CB018023A6
:103F20009123A223B3238093BC019093BD01A0935E
:103F3000BE01B093BF011F910F910C94BA1A0F9359
:103F40001F930091BC011091BD012091BE013091E1
:103F5000BF01DC01CB0180279127A227B3278093E3
:103F6000BC019093BD01A093BE01B093BF011F910E
:103F70000F910C94BA1A0895CF92DF92EF92FF92AC
:103F80000F931F93CF93DF938C01C090BC01D0900F
:103F9000BD01E090BE01F090BF018091C001909101
:103FA000C101A091C201B091C301C82AD92AEA2A4D
:103FB000FB2ACFE1D0E0D701C6010C2E04C0B69594
:103FC000A795979587950A94D2F780FF07C0B80107
:103FD0008C2F0E94E90B8130910531F4219758F71D
:103FE000B80180E00E94E90BDF91CF911F910F9102
:103FF000FF90EF90DF90CF90089590910C0199235E
:1040000079F190910D01992359F1982F96959695F4
:1040100096959F30A0F4E0910E01F0910F01E90F09
:10402000F11D877021E030E0A90102C0440F551F47
:104030008A95E2F7CA019181892B81830895909135
:10404000D70190FF29C01F928F9387ED95E09F9332
:104050008F930E94F0070F900F900F900F9008958C
:1040600020910E0130910F01F90132969FEF40E04F
:104070005191851789F09F3F19F4511101C0942F78
:104080004F5F4E30A9F79F3F39F0F901E90FF11D5D
:1040900097FDFA9582830895089590910C019923D4
:1040A00081F190910D01992361F1982F9695969544
:1040B00096959F30A8F4E0910E01F0910F01E90F61
:1040C000F11D877021E030E0A90102C0440F551FA7
:1040D0008A95E2F7CA0180959181892381830895A9
:1040E0009091D70190FF1DC01F928F9389EB95E0AF
:1040F0009F938F930E94F0070F900F900F900F9057
:10410000089520910E0130910F01F9013296205F40
:104110003F4F9081891301C010823196E217F30757
:10412000C1F7089581E090E0E0910E01F0910F0158
:10413000E80FF91F1082019680319105A9F70895C3
:104140009091D601892B8093D60108958095909106
:10415000D60189238093D60108951092D60108953F
:104160009091D501892B8093D501089580959091E8
:10417000D50189238093D50108951092D501089522
:104180008093C40108951092C401089580910E0196
:1041900090910F01FC0131969C01205F3F4F80E020
:1041A000919191118F5FE217F307D1F70895E09194
:1041B0000E01F0910F018091D6018083E0910E01F4
:1041C000F0910F0190818091D501892B808380919E
:1041D000C401882361F0E0910E01F0910F019081FC
:1041E000892B80830E94C62081111092C401809186
:1041F0000E0190910F010C940A1590933B0180934E
:104200003A010895CF92DF92EF92FF926C01EE2473
:10421000FF24C114D104E104F10421F0C701B60167
:1042200020E101C020E0C72ED82EE92EFF24C114C2
:10423000D104E104F10419F0285FC701B6016B0154
:104240007C0154E0F694E794D794C7945A95D1F73B
:10425000C114D104E104F10419F02C5FC701B601C7
:104260006B017C0142E0F694E794D794C7944A9599
:10427000D1F7C114D104E104F10419F02E5FC70194
:10428000B601DC01CB01B695A79597958795892B4B
:104290008A2B8B2B09F02F5F822FFF90EF90DF90FE
:1042A000CF9008958295982F937344E0949F900146
:1042B00011248C7C86958695282B822F8575880FF6
:1042C0002A7A2695822B08951F93CF93DF931F920E
:1042D000CDB7DEB799830E945221182F9981892F7B
:1042E0000E945221212F30E0322F2227A901482B92
:1042F000CA010F90DF91CF911F9108958091EF0136
:10430000843011F120E488E190E00FB6F894A8958C
:10431000809360000FBE2093600083B7817F84602C
:1043200083BF83B7816083BF7894889583B78E7F7E
:1043300083BF0FB6F894A895809160008861809340
:104340006000109260000FBE089508950C94A5219E
:10435000CF930E94A6210E9484090E94A521C0E05B
:104360008C2F0E94B80A811104C0CF5FCE30C1F7F4
:1043700001C081E0CF9108950E94CC1A0E94FE14E2
:104380000C942C0D82E084BD93E095BD9AEF97BD0F
:1043900080936E0008952FB7F8948091D801909182
:1043A000D901A091DA01B091DB012FBF0895CF921E
:1043B000DF92EF92FF920F931F932FB7F8944091E3
:1043C000D8015091D9016091DA017091DB012FBFC2
:1043D0006A017B01EE24FF248C0120E030E0C0164E
:1043E000D106E206F30610F4415051099A01281B48
:1043F000390BC9011F910F91FF90EF90DF90CF9083
:1044000008951F920F920FB60F9211248F939F93CE
:10441000AF93BF938091D8019091D901A091DA0117
:10442000B091DB010196A11DB11D8093D80190933D
:10443000D901A093DA01B093DB01BF91AF919F91B5
:104440008F910F900FBE0F901F9018950E94F7113B
:10445000F8942FEF87EA91E6215080409040E1F7F1
:1044600000C0000087E090EBDC018093F80190939E
:10447000F901A093FA01B093FB019CE088E10FB62B
:10448000F894A895809360000FBE90936000FFCFD2
:10449000EF92FF920F931F93CF93DF93D82FC0E03B
:1044A0008C2F0E94B80A00E010E0E82EF12CC70122
:1044B000002E02C0959587950A94E2F780FD06C00C
:1044C0000F5F1F4F0630110591F709C0602F7C2F39
:1044D00080E00E94C60B8D13F3CF81E004C0CF5F54
:1044E000CE30F1F680E0DF91CF911F910F91FF90D8
:1044F000EF900895CF93C82F8CE20E944822882322
:1045000021F08C2FCF910C94482280E0CF91089518
:10451000CF930E94D723811102C00E94BD238CEF4C
:1045200095E00E945707C5E6C15049F00E948409F2
:104530008FE39CE90197F1F700C00000F5CF85EF0C
:1045400095E00E94570789E20E947A22811113C1E7
:104550008AE20E947A2281110E94BD2385E00E9496
:104560007A2281110E9426220E94E2238093D701A1
:1045700087E00E947A228823A9F18BE10E947A22A7
:10458000882351F08091D70181FB222720F991E007
:10459000922790FB81F90EC08EE00E947A22882338
:1045A00061F08091D70182FB222720F991E09227C8
:1045B00090FB82F98093D70115C080E10E947A2296
:1045C0009091D701882341F093FB222720F981E0C5
:1045D000822780FB93F904C0892F809580FB90F996
:1045E0009093D7018091D7010E94E6230E94F42383
:1045F0008093E90180EE0E947A22882341F0809125
:10460000E901982F909590FB80F98093E90189E367
:104610000E947A22882359F08091E90181FB2227A8
:1046200020F991E0922790FB81F98093E90182EED5
:104630000E947A22882359F08091E90182FB222787
:1046400020F991E0922790FB82F98093E90186EEB0
:104650000E947A22882359F08091E90183FB222766
:1046600020F991E0922790FB83F98093E90183EE92
:104670000E947A22882359F08091E90184FB222745
:1046800020F991E0922790FB84F98093E90185E37A
:104690000E947A22882359F08091E90185FB222724
:1046A00020F991E0922790FB85F98093E90181E35D
:1046B0000E947A22882359F08091E90186FB222703
:1046C00020F991E0922790FB86F98093E90181E13E
:1046D0000E947A22882359F08091E90187FB2227E2
:1046E00020F991E0922790FB87F98093E90180916E
:1046F000E9010E94F8238091E90187FB882780F96E
:1047000080930D0187E20E947A22C82F8EE10E94D9
:104710007A228111C2608FE10E947A228111C460E5
:1047200080E20E947A228111C86081E20E947A228E
:104730008111C06182E20E947A228111C06283E20B
:104740000E947A228111C06484E20E947A22882326
:1047500011F0C06802C0CC2329F08C2F0E94EF23F7
:104760006C2F03C00E94EB23682F70E080E090E084
:10477000CF910C94831ECF9108956DEE7EEF80E073
:1047800090E00E94CE2D60E082E090E00E94C02D7B
:1047900060E083E090E00E94C02D60E084E090E063
:1047A0000E94C02D60E085E090E00C94C02D80E078
:1047B00090E00E94BA2D21E08D3E9E4F09F020E04E
:1047C000822F089582E090E00C94B22D682F82E051
:1047D00090E00C94C02D83E090E00C94B22D682FF3
:1047E00083E090E00C94C02D84E090E00C94B22D16
:1047F000682F84E090E00C94C02D8091DE0180FF52
:104800000BC06091130185E0689FB001112475957C
:104810006795759567952BC081FF09C0609113015D
:1048200085E0689FB00111247595679520C082FFCF
:1048300007C06091130185E0689FB001112417C083
:104840009091DF019923D1F060911201961788F7BA
:104850002091130185E0289F90011124929FA001CF
:10486000939F500D112470E0CA010E94842D60387E
:10487000710540F46115710519F406C065E070E03A
:10488000862F08958FE7089581E008958091DE01D5
:1048900080FF08C06091110170E07595679575956E
:1048A000679521C081FF06C06091110170E0759588
:1048B000679519C082FF04C06091110170E010C0BB
:1048C0009091DF01992399F0609110019617A0F75C
:1048D00080911101899FC001112470E00E94842DF4
:1048E0006038710540F46115710519F406C061E086
:1048F00070E0862F08958FE7089581E00895803F46
:1049000021F40E94FD23819504C0813F29F40E9477
:10491000FD238093E2010895823F21F40E94FD234C
:10492000819504C0833F29F40E94FD238093E10117
:104930000895893F19F40E94462405C08A3F31F446
:104940000E94462481958093E30108958B3F21F4D2
:104950000E944624819504C08C3F29F40E9446247D
:104960008093E4010895843F21F48091E001816007
:1049700017C0853F21F48091E001826011C0863F1D
:1049800021F48091E00184600BC0873F21F4809185
:10499000E001886005C0883F31F48091E0018061CA
:1049A0008093E00108958D3F21F48091DE018160C4
:1049B0000BC08E3F21F48091DE01826005C08F3FE5
:1049C00029F48091DE0184608093DE010895803FA8
:1049D00039F48091E20187FF6CC01092E20169C056
:1049E000813F29F48091E2011816BCF362C09091D6
:1049F000E101823F29F497FF5CC01092E10159C0A8
:104A0000833F19F41916CCF354C0893F41F48091C7
:104A1000E30118160CF04DC01092E3014AC08A3F22
:104A200029F48091E30187FF44C0F6CF8B3F39F42E
:104A30008091E40187FF3DC01092E4013AC08C3FB1
:104A400029F48091E4011816BCF333C0843F21F4AB
:104A50008091E0018E7F17C0853F21F48091E001B5
:104A60008D7F11C0863F21F48091E0018B7F0BC0C8
:104A7000873F21F48091E001877F05C0883F31F4B2
:104A80008091E0018F7E8093E00113C08D3F21F47F
:104A90008091DE018E7F0BC08E3F21F48091DE017C
:104AA0008D7F05C08F3F29F48091DE018B7F80933D
:104AB000DE018091E10181110EC08091E20181113E
:104AC0000AC08091E301811106C08091E401811147
:104AD00002C01092DF0108958091D70183FF7EC04C
:104AE00088E396E00E9457078091E0011F928F9320
:104AF00083E396E09F938F930E94F00781E396E013
:104B00000E9457078091E101282F082E000C330BDB
:104B10003F938F938EE296E09F938F930E94F007CE
:104B20008CE296E00E9457078091E201282F082E20
:104B3000000C330B3F938F9389E296E09F938F9302
:104B40000E94F00787E296E00E9457078091E301F8
:104B5000282F082E000C330B3F938F9384E296E0AE
:104B60009F938F930E94F00782E296E00E9457077E
:104B70008091E401282F082E000C330B3F938F9374
:104B80008FE196E09F938F930E94F0078CE196E06F
:104B90000E9457078091DF011F928F9389E196E071
:104BA0009F938F930E94F00787E196E00E9457073A
:104BB0008091DE011F928F9384E196E09F938F9303
:104BC0000E94F00781E196E00E9457078DB79EB7DB
:104BD0004C960FB6F8949EBF0FBE8DBF80EE91E04D
:104BE0000E9452150E94CB219093DD018093DC013D
:104BF00008951F93CF93DF938091DC019091DD01A5
:104C00000E94D721AC019091DF01992321F02091DE
:104C1000140130E006C0209115018AE0289F900120
:104C200011244217530708F485C08091E101C09117
:104C3000E201D091E3011091E401811107C0C1119B
:104C400075C0D11173C0111171C074C09F3F19F0AC
:104C50009F5F9093DF01181624F40E94FD23809338
:104C6000E1018091E10187FF05C00E94FD2381954C
:104C70008093E1011C1624F40E94FD238093E2013D
:104C80008091E20187FF05C00E94FD2381958093FA
:104C9000E2016091E101662331F1C091E201CC2390
:104CA00011F1062E000C770B880B990B0E947F2CBC
:104CB00023E333E343E35FE30E94E32C0E94472CAA
:104CC0006093E1016C2FCC0F770B880B990B0E943E
:104CD0007F2C23E333E343E35FE30E94E32C0E9452
:104CE000472C6093E2011D1624F40E944624809311
:104CF000E3018091E30187FF05C00E94462481956E
:104D00008093E301111624F40E9446248093E40169
:104D10008091E40187FF05C00E944624819580931D
:104D2000E401DF91CF911F910C946C259F3F09F016
:104D30008FCFA0CFDF91CF911F910895E0EEF1E0EA
:104D400085E0DF011D928A95E9F71092DF0110924C
:104D5000DE0108958BE598E00E9457071F9281E0DD
:104D60008F931F9285E08F938DE098E09F938F93B0
:104D70000E94F0070F900F900F900F900F900F90E0
:104D800008958330E9F128F4813061F0823009F12F
:104D90000895853009F462C008F449C0863009F4EA
:104DA00074C0089580911501262F30E0280F311D21
:104DB0002F3F310524F4680F6093150103C08FEF76
:104DC00080931501809115011F928F9386E497E0DF
:104DD00072C080911401262F30E0280F311D2F3F23
:104DE000310524F4680F6093140103C08FEF8093A2
:104DF0001401809114011F928F9384E397E05BC0AC
:104E000080911301262F30E0280F311D2F3F3105EF
:104E100024F4680F6093130103C08FEF8093130194
:104E2000809113011F928F9381E297E044C080919B
:104E30001201262F30E0280F311D2F3F310524F4B9
:104E4000680F6093120103C08FEF8093120180916D
:104E500012011F928F938CE097E02DC08091110179
:104E6000262F30E0280F311D2F3F310524F4680F25
:104E70006093110103C08FEF8093110180911101A4
:104E80001F928F9383EF96E016C080911001262F1A
:104E900030E0280F311D2F3F310524F4680F609357
:104EA000100103C08FEF80931001809110011F92B9
:104EB0008F9388ED96E09F938F930E94F0070F9059
:104EC0000F900F900F900895833081F128F4813076
:104ED00059F08230D1F00895853009F449C0B8F115
:104EE000863009F456C0089580911501681720F4A2
:104EF000861B8093150102C0109215018091150147
:104F00001F928F9389EC96E054C08091140168172A
:104F100020F4861B8093140102C01092140180912A
:104F200014011F928F9387EB96E043C08091130189
:104F3000681720F4861B8093130102C0109213019E
:104F4000809113011F928F9384EA96E032C0809182
:104F50001201681720F4861B8093120102C0109280
:104F60001201809112011F928F938FE896E021C069
:104F700080911101681720F4861B8093110102C0F3
:104F800010921101809111011F928F9386E796E094
:104F900010C080911001681720F4861B80931001C7
:104FA00002C010921001809110011F928F938BE527
:104FB00096E09F938F930E94F0070F900F900F90B1
:104FC0000F900895CF93C82F1F928F9380E699E09A
:104FD0009F938F930E94F00781E090E0A0E0B0E003
:104FE000BC01CD0104C0660F771F881F991FCA95A9
:104FF000D2F70E94831E0F900F900F900F90CF91C9
:105000000C94CC1ACF938D3109F465C0B0F58E3075
:1050100009F4CCC100F5873009F49BC1A8F48630AF
:1050200009F06DC28091D701817F8E7F8093D70177
:1050300085E699E00E94570784EA9DE00E945707A1
:1050400081E08093E60180C1883009F44FC08B3045
:1050500009F47CC154C2863109F4F0C138F48031BE
:1050600009F4B8C1813109F430C249C2893109F467
:10507000CEC18B3109F486C142C2853309F437C2EF
:1050800048F4873209F433C208F433C2893209F490
:105090002EC235C2833438F48A3308F02CC28833E8
:1050A00009F454C12CC2833409F421C2883409F0B4
:1050B00026C20E94CC1A83E99DE00E9457079FEF09
:1050C00023ED80E3915020408040E1F700C00000D4
:1050D0000E94262239C183EB9DE00E9457070E945F
:1050E000012C0E94FE140E942C0D2EC188EA9DE026
:1050F0000E94570786E79BE00E9457070E94EB2318
:105100001F928F9383E79BE09F938F930E94F007FA
:1051100081E79BE00E9457070E94E223C82F8EE59B
:105120009BE00E9457071F92CF9389E59BE09F93D6
:105130008F930E94F00787E59BE00E9457078DE45C
:105140009BE00E9457078C2F81701F928F938AE4F7
:105150009BE09F938F930E94F00788E49BE00E945E
:1051600057078EE39BE00E945707C1FB882780F911
:105170001F928F938BE39BE09F938F930E94F00786
:1051800089E39BE00E9457078DE29BE00E9457074E
:10519000C2FB882780F91F928F938AE29BE09F933E
:1051A0008F930E94F00788E29BE00E9457078FE1EF
:1051B0009BE00E945707C3FBCC27C0F91F92CF93F7
:1051C0008CE19BE09F938F930E94F0078AE19BE024
:1051D0000E9457070E94F423C82F86E09BE00E949C
:1051E00057071F92CF9381E09BE09F938F930E947C
:1051F000F0078FEF9AE00E94570786EE9AE00E9430
:1052000057078C2F81701F928F9383EE9AE09F93A4
:105210008F930E94F0078DB79EB780960FB6F894D3
:105220009EBF0FBE8DBF81EE9AE00E9457078AECA9
:105230009AE00E945707C1FB882780F91F928F933D
:1052400087EC9AE09F938F930E94F00785EC9AE099
:105250000E94570783EB9AE00E945707C2FB8827FA
:1052600080F91F928F9380EB9AE09F938F930E9417
:10527000F0078EEA9AE00E9457078CE99AE00E94B4
:105280005707C3FB882780F91F928F9389E99AE01B
:105290009F938F930E94F00787E99AE00E94570737
:1052A0008DE89AE00E945707C4FB882780F91F9277
:1052B0008F938AE89AE09F938F930E94F00788E883
:1052C0009AE00E94570786E79AE00E945707C5FBBD
:1052D000882780F91F928F9383E79AE09F938F939B
:1052E0000E94F00781E79AE00E94570785E59AE05F
:1052F0000E945707C6FB882780F91F928F9382E58B
:105300009AE09F938F930E94F00780E59AE00E94B5
:10531000570788E49AE00E945707C7FBCC27C0F9DB
:105320001F92CF9385E49AE09F938F930E94F0079A
:1053300083E49AE00E9457078DB79EB74C960FB64C
:10534000F8949EBF0FBE8DBFC1E0DEC08CE899E02F
:105350005BC08091D701C82FC17080FF09C086E86B
:105360009DE00E9457078091D701817F8E7F47C0C3
:105370008AE79DE00E9457078091D7018160809362
:10538000D701E2CF9091D70191FBCC27C0F981E002
:10539000C827892FC0FB81F98093D701CC2319F04E
:1053A0008DE69DE027C08FE59DE02EC09091D7014E
:1053B00092FBCC27C0F981E0C827892FC0FB82F976
:1053C0008093D701CC2319F080E59DE013C080E4E1
:1053D0009DE01AC09091D70193FBCC27C0F981E0E2
:1053E000C827892FC0FB83F98093D701CC2351F0C4
:1053F00084E39DE00E9457078091D70181608093EC
:10540000D70182C087E29DE00E9457079DCF88E1C7
:105410009DE00E9457078CEE9CE00E9457078FEAA0
:105420009CE00E94570788E89CE00E94570784E4AC
:105430009CE00E94570786E19CE0E6CF88E09CE074
:105440000E9457070E94FE141F928F938EEE9BE0DE
:105450009F938F930E94F00780910C011F928F936E
:1054600087ED9BE09F938F930E94F00780916E01E0
:105470001F928F9384EC9BE09F938F930E94F00781
:1054800080910D011F928F9381EB9BE09F938F93EF
:105490000E94F0078091D8019091D901A091DA0182
:1054A000B091DB01BF93AF939F938F938DE99BE006
:1054B0009F938F930E94F0078DB79EB746960FB6C5
:1054C000F8949EBF0FBE8DBF3FCF0E94CC1AC091F3
:1054D0000D0181E0C827C0930D01CC2329F083E999
:1054E0009BE00E94570710C088E89BE08DCF80E0CA
:1054F00003C08D5101C089530E94E22725CF86E861
:105500009BE00E945707C0E08C2FCF91089580E068
:1055100008950C94872ACF93C82F8091E60181309B
:1055200081F020F0823009F44FC045C1E0910E01B6
:10553000F0910F018081813169F0823209F03DC123
:1055400009C0E0910E01F0910F018081813111F0CD
:10555000823261F48C2F0E94892A811104C08C2F21
:105560000E9402282FC081E090E02CC08C2F0E9466
:10557000872A811126C0C431E1F070F4CB3081F06C
:10558000C031D1F40E94AA2688E599E00E9457070D
:1055900082E08093E60115C0C93259F0C83361F446
:1055A00085E699E00E9457078CE599E00E9457072D
:1055B00008C01092E60103C186E599E00E945707F2
:1055C000FEC081E08170FDC0C43220F5CE3108F00C
:1055D000C0C0CB3099F1C8F4C73009F0D2C08AE01E
:1055E0008093150194E19093140193E0909313013B
:1055F0008093120188E08093110188E2809310016A
:105600008CEF97E00E945707BFC0C33149F1C43106
:10561000C1F0B7C0CB3409F4A9C028F4C93289F06D
:10562000C83361F0AEC0C13509F49EC0C23509F47B
:1056300099C0CE3409F0A5C06AE09EC00E94AA2697
:10564000A3C08091E501882319F01092E5019CC068
:1056500089E098E00E94570781E08093E601B1C09D
:1056600083EE97E00E94570781ED97E00E9457076D
:10567000809115011F928F938EEC97E09F938F93EB
:105680000E94F0078CEC97E00E9457078AEB97E0A6
:105690000E945707809114011F928F9387EB97E028
:1056A0009F938F930E94F00785EB97E00E94570726
:1056B00086EA97E00E945707809113011F928F930B
:1056C00083EA97E09F938F930E94F00781EA97E027
:1056D0000E94570780E997E00E94570780911201C6
:1056E0001F928F938DE897E09F938F930E94F0070E
:1056F0008BE897E00E94570786E797E00E945707DC
:10570000809111011F928F9383E797E09F938F936E
:105710000E94F00781E797E00E9457078AE597E02B
:105720000E945707809110011F928F9387E597E0A1
:105730009F938F930E94F00785E597E00E9457079B
:105740008DB79EB748960FB6F8949EBF0FBE8DBF1B
:105750001BC0CE51EC2FF0E0E15DFE4F80818093C5
:10576000E50112C061E003C061E006C06AE080911B
:10577000E5010E94C12608C08091E5010E946427CE
:1057800003C08AEF97E013C08091E501882369F098
:105790001F928F9384EF97E09F938F930E94F0075F
:1057A0000F900F900F900F9004C081EF97E00E9430
:1057B000570781E006C01092E60180E002C080E059
:1057C00001CFCF910895E1E8F0E080818860808387
:1057D0008081816080838FB7F89493E090938900F3
:1057E00090ED909388008FBF0895EFE6F0E0808100
:1057F000826080830895EFE6F0E080818D7F808372
:105800000895EFE6F0E0908182E089278083089593
:105810001F920F920FB60F9211242F933F934F9325
:105820005F936F937F938F939F93AF93BF93EF9308
:10583000FF938091E7019091E80101969093E80130
:105840008093E701811103C082E00E942C0DE0915A
:10585000E801E695E695F0E0ED53F24FE491809192
:10586000E7018E1303C080E00E942C0DFF91EF91A1
:10587000BF91AF919F918F917F916F915F914F9168
:105880003F912F910F900FBE0F901F9018950E947F
:105890004E2C6894B1110C94DD2C08950E94C22CFA
:1058A00088F09F5798F0B92F9927B751B0F0E1F0E1
:1058B000660F771F881F991F1AF0BA95C9F714C091
:1058C000B13091F00E94DC2CB1E008950C94DC2CF6
:1058D000672F782F8827B85F39F0B93FCCF38695CA
:1058E00077956795B395D9F73EF490958095709527
:1058F00061957F4F8F4F9F4F0895E89409C097FBA4
:105900003EF490958095709561957F4F8F4F9F4F96
:105910009923A9F0F92F96E9BB279395F6958795DA
:1059200077956795B795F111F8CFFAF4BB0F11F49D
:1059300060FF1BC06F5F7F4F8F4F9F4F16C0882344
:1059400011F096E911C0772321F09EE8872F762F7A
:1059500005C0662371F096E8862F70E060E02AF0BB
:105960009A95660F771F881FDAF7880F96958795A7
:1059700097F9089557FD9058440F551F59F05F3F10
:1059800071F04795880F97FB991F61F09F3F79F061
:1059900087950895121613061406551FF2CF4695E3
:1059A000F1DF08C0161617061806991FF1CF869565
:1059B0007105610508940895E894BB276627772749
:1059C000CB0197F908950E94F62C0C94672D0E9444
:1059D000592D38F00E94602D20F0952311F00C9481
:1059E000502D0C94562D11240C94DD2C0E94BA2CB1
:1059F00070F3959FC1F3950F50E0551F629FF00122
:105A0000729FBB27F00DB11D639FAA27F00DB11D3A
:105A1000AA1F649F6627B00DA11D661F829F2227C3
:105A2000B00DA11D621F739FB00DA11D621F839F4A
:105A3000A00D611D221F749F3327A00D611D231F20
:105A4000849F600D211D822F762F6A2F11249F576E
:105A500050409AF0F1F088234AF0EE0FFF1FBB1F71
:105A6000661F771F881F91505040A9F79E3F510530
:105A700080F00C94502D0C94DD2C5F3FE4F3983EA5
:105A8000D4F3869577956795B795F795E7959F5FDA
:105A9000C1F7FE2B880F911D9695879597F908956C
:105AA00097F99F6780E870E060E008959FEF80ECD1
:105AB000089500240A941616170618060906089574
:105AC00000240A9412161306140605060895092EDA
:105AD0000394000C11F4882352F0BB0F40F4BF2B49
:105AE00011F460FF04C06F5F7F4F8F4F9F4F089589
:105AF000991B79E004C0991F961708F0961B881F20
:105B00007A95C9F78095089597FB072E16F40094AF
:105B100007D077FD09D00E949E2D07FC05D03EF4EA
:105B2000909581959F4F0895709561957F4F089549
:105B3000EE0FFF1F0590F491E02D0994AA1BBB1BEB
:105B400051E107C0AA1FBB1FA617B70710F0A61B7D
:105B5000B70B881F991F5A95A9F780959095BC019E
:105B6000CD010895F999FECF92BD81BDF89A99278C
:105B700080B50895A8E1B0E042E050E00C94D52D46
:105B8000262FF999FECF1FBA92BD81BD20BD0FB659
:105B9000F894FA9AF99A0FBE019608950E94C02DC2
:105BA000272F0C94C12DDC01CB01FC01F999FECF0C
:105BB00006C0F2BDE1BDF89A319600B40D92415095
:0A5BC0005040B8F70895F894FFCFA5
:105BCA0020022D0D200EFB0DC70D930D0101C501FD
:105BDA0028080A03140A3F4D3620394605F904C33A
:105BEA0004A3046A04DD03F6030F0428044804012D
:0A5BFA000203040506070809000075
:00000001FF

@ -0,0 +1,187 @@
#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
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | Esc | 1 ! | 2 @ | 3 # | 4 $ | 5 % | Lang | | Esc | 6 ^ | 7 & | 8 * | 9 ( | 0 ) | Bckspc |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | Tab | Q | W | E | R | T | L2 | | L2 | Y | U | I | O | P | \ | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | Ctrl | A | S | D | F | G |------| |------| H | J | K | L | ; : | ' " |
* |--------+------+------+------+------+------| L1 | | L1 |------+------+------+------+------+--------|
* | LShift | Z | X | C | V | B | | | | N | M | , < | . > | / ? | - _ |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | L1 | ` ~ | ' " | \ | | L2 | | { | } | [ { | ] } | L1 |
* `----------------------------------' `----------------------------------'
* ,--------------. ,---------------.
* | Home | End | | PgUp |Insert |
* ,------|-------|------| |-------+-------+------.
* | | | LGui | | Del | | |
* | Space| Alt |------| |-------| Enter |Space |
* | | | LGui | | Bcsp | | |
* `---------------------' `----------------------'
*/
// 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_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, LGUI(KC_SPC),
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, MO(2),
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(1),
MO(1), KC_GRV, KC_QUOT, KC_BSLS, MO(2),
KC_HOME, KC_END,
KC_LGUI,
KC_SPC, KC_LALT, KC_LGUI,
// right hand
KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
MO(2), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
MO(1), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, MO(1),
KC_PGUP, KC_INS,
KC_DEL,
KC_BSPC, KC_ENT, KC_SPC
),
/* 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_EQL,KC_DOT, KC_0, KC_MINS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
/* Keymap 2: Media and mouse keys
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | |GuiUp | Expl | | Term | | | | | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | |GuiLft|GuiDwn|GuiRgt| | |------| |------| Left | Down | Up |Right | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | |Browsr| | | | |VolDwn|VolUp | Mute | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | Lclk | Rclk | | Play | Prev | Next | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | |Brwser|Brwser|
* | Lclk | Rclk |------| |------|Fwd |Back |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// MEDIA AND MOUSE
KEYMAP(
RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, LGUI(KC_W), LGUI(KC_E), KC_BTN1, LGUI(KC_T), KC_TRNS,
KC_TRNS, LGUI(KC_A), LGUI(KC_S), LGUI(KC_D), 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_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_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS,
KC_MPLY, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_WBAK, KC_WFWD
),
};
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;
}
};

@ -7,7 +7,7 @@
#define MDIA 2 // media keys
/*
* Ordinary Ergodox EZ keyboard layout, v1
* Ordinary Ergodox EZ keyboard layout, v2
* modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com
* Details: http://nicholas.rinard.us/2016/03/ergodox-ez-layout.html
*/
@ -16,13 +16,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | Grv | 1 | 2 | 3 | 4 | 5 | ESC | | = | 6 | 7 | 8 | 9 | 0 | - |
* | Grv | 1 | 2 | 3 | 4 | 5 | ESC | | - | 6 | 7 | 8 | 9 | 0 | = |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | Tab | Q | W | E | R | T | \ | | / | Y | U | I | O | P | ~L2 |
* | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | MDIA \ |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | ~L1 | A | S | D | F | G |------| |------| H | J | K | L |; / L2| ~L1 |
* |--------+------+------+------+------+------| [ | | ] |------+------+------+------+------+--------|
* | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |'/Ctrl| RShift |
* | SYMB | A | S | D | F | G |------| |------| H | J | K | L | ; | SYMB ' |
* |--------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+--------|
* | LShift | Z | X | C | V | B | -Tab | | | N | M | , | . | / | RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* |LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh |RCtrl |
* `----------------------------------' `----------------------------------'
@ -37,20 +37,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// 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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSLS,
KC_FN1, KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT,CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_LBRC,
KC_LCTL,MEH_T(KC_NO),ALL_T(KC_NO),KC_LALT,KC_LGUI,
KC_HOME, KC_END,
KC_PGUP,
KC_BSPC, KC_DEL, KC_PGDN,
// left hand
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC,
MO(SYMB), KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, LSFT(KC_TAB),
KC_LCTL, MEH_T(KC_NO),ALL_T(KC_NO),KC_LALT,KC_LGUI,
KC_HOME, KC_END,
KC_PGUP,
KC_BSPC, KC_DEL, KC_PGDN,
// right hand
KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
KC_SLSH, KC_Y, KC_U, KC_I, KC_O, KC_P, LT(MDIA, KC_SLSH),
KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_FN1,
KC_RBRC, KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_QUOT),KC_RSFT,
KC_MINS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL,
KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, LT(MDIA, KC_BSLS),
KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(SYMB, KC_QUOT),
KC_TAB, KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH),KC_RSFT,
KC_RGUI, KC_RALT, ALL_T(KC_NO),MEH_T(KC_NO), KC_RCTL,
KC_LEFT, KC_RGHT,
KC_UP,
@ -59,82 +60,82 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 1: Symbol Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* | Esc | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
* | MDIA | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | F12 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | CAPS | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | CAPS |
* | | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | |
* |--------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+--------|
* | | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | CAPS |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | . | 0 | = | |
* | | | | | | | 0 | . | = | + | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* | Left | Right| | Home | End |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* | | | Up | | PgUp | | |
* |Space |Enter |------| |------|BackSp| Del |
* | | | Down | | PgDn | | |
* `--------------------' `--------------------'
*/
// 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_CAPS,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,
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
MO(MDIA), KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_AMPR,LSFT(KC_COMM),
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_TAB,
KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_LEFT,KC_RGHT,
KC_UP,
KC_SPC,KC_ENT,KC_DOWN,
// 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_CAPS,
KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
LSFT(KC_DOT), KC_PIPE, KC_P7, KC_P8, KC_P9, KC_PSLS, KC_F12,
KC_SLSH, KC_P4, KC_P5, KC_P6, KC_PAST, KC_TRNS,
LSFT(KC_TAB), KC_BSLS, KC_P1, KC_P2, KC_P3, KC_PMNS, KC_CAPS,
KC_P0, KC_DOT, KC_PEQL, KC_PPLS, KC_PENT,
KC_HOME, KC_END,
KC_PGUP,
KC_PGDN, KC_BSPC, KC_DEL
),
/* Keymap 2: Media and mouse keys
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | Sleep| | | | | |MyComp| Mail | |
* | Esc |ShutDn| Sleep| Mute |Vol Dn|Vol Up| | | | |PrtSc | PgUp |MyComp| Mail | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | MsUp |ScrlUp| |ScrlUp| |ScrlUp| | | | | Mute | |
* | | | | MsUp |ScrlUp| |ScrlUp| |ScrlUp| |ScrlUp| Up | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | |
* | | |MsLeft|MsDown|MsRght| |------| |------| Home | Left | Down | Right| End | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | |MsDown|ScrlDn| |ScrlDn| |ScrlDn| | | | | | |
* | | | |MsDown|ScrlDn| |ScrlDn| |ScrlDn| |ScrlDn| Down | | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | Lclk | Rclk | | | | | | |
* | | | | Lclk | Rclk | | | PgDn | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | Stop |Refrsh| | Prev | Next |
* ,------|------|------| |------+------+------.
* |Brwser|Brwser| Home | |VolUp | | |
* |Back | Fwd |------| |------| Stop | Play |
* | | |Search| |VolDn | | |
* |Brwser|Brwser|Search| |VolUp | | |
* |Back | Fwd |------| |------| Stop | Play-|
* | | | Home | |VolDn | | Pause|
* `--------------------' `--------------------'
*/
// MEDIA AND MOUSE
[MDIA] = KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SLEP,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_WH_U, KC_TRNS, KC_WH_U,
KC_ESC, KC_PWR, KC_SLEP, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS,
MO(MDIA), KC_TRNS, KC_TRNS, KC_MS_U, KC_WH_U, KC_TRNS, KC_WH_U,
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_D, KC_TRNS, KC_TRNS, KC_WH_D,
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_WH_D,
KC_WSTP, KC_WREF,
KC_WHOM,
KC_WBAK, KC_TRNS, KC_WSCH,
KC_WSCH,
KC_WBAK, KC_TRNS, KC_WHOM,
// right hand
KC_WSCH, KC_TRNS, KC_TRNS, KC_TRNS, KC_MYCM, KC_MAIL, KC_TRNS,
KC_WH_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_WH_D, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_PSCR, KC_PGUP, KC_MYCM, KC_MAIL, KC_TRNS,
KC_WH_U, KC_TRNS, KC_WH_U, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS,
KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT,KC_END, KC_TRNS,
KC_WH_D, KC_TRNS, KC_WH_D, KC_DOWN, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_PGDN, KC_TRNS,KC_TRNS, KC_TRNS,
KC_MPRV, KC_MNXT,
KC_VOLU,
KC_VOLD, KC_MSTP, KC_MPLY
@ -188,3 +189,4 @@ void matrix_scan_user(void) {
}
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

@ -0,0 +1,27 @@
[{x:3.5},"#\n3",{x:10.5},"*\n8"],
[{y:-0.875,x:2.5},"@\n2",{x:1},"$\n4",{x:8.5},"&\n7",{x:1},"(\n9"],
[{y:-0.875,x:5.5},"%\n5",{c:"#ff4444"},"Esc",{x:4.5,c:"#cccccc"},"_\n\n\n\n\n\n-","^\n6"],
[{y:-0.875,c:"#73ab6a",w:1.5},"~\n\n\n\n\n\n`",{c:"#cccccc"},"!\n1",{x:14.5},")\n0",{t:"#000000\n\n\n\n#0000ff",w:1.5},"+\n\n\n\n\n\n="],
[{y:-0.375,x:3.5,t:"#000000"},"E",{x:10.5},"I"],
[{y:-0.875,x:2.5},"W",{x:1},"R",{x:8.5},"U",{x:1},"O"],
[{y:-0.875,x:5.5},"T",{h:1.5},"{\n\n\n\n\n\n[",{x:4.5,h:1.5},"}\n\n\n\n\n\n]","Y"],
[{y:-0.875,c:"#73ab6a",w:1.5},"Tab",{c:"#cccccc"},"Q",{x:14.5},"P",{c:"#2277ff",fa:[0,0,0,1],w:1.5},"|\n\\\nMedia\nL2"],
[{y:-0.375,x:3.5,c:"#cccccc"},"D",{x:10.5},"K"],
[{y:-0.875,x:2.5},"S",{x:1},"F",{x:8.5},"J",{x:1},"L"],
[{y:-0.875,x:5.5},"G",{x:6.5},"H"],
[{y:-0.875,c:"#2277ff",w:1.5},"Symbols\n\n\nL1",{c:"#cccccc"},"A",{x:14.5},":\n;",{c:"#2277ff",w:1.5},"\"\n'\nSymbols\nL1"],
[{y:-0.625,x:6.5,c:"#bfbf67",h:1.5},"< Tab\n\n\nShift Tab",{x:4.5,h:1.5},"Tab >\n\n\nTab"],
[{y:-0.75,x:3.5,c:"#cccccc"},"C",{x:10.5},"<\n,"],
[{y:-0.875,x:2.5},"X",{x:1},"V",{x:8.5},"M",{x:1},">\n."],
[{y:-0.875,x:5.5},"B",{x:6.5},"N"],
[{y:-0.875,c:"#2277ff",w:1.5},"Capitals\n\n\nShift",{c:"#cccccc"},"Z\n\nCtrl",{x:14.5},"?\n/\nCtrl",{c:"#2277ff",w:1.5},"\n\nCapitals\nShift"],
[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5},"Option\n\n\nRAlt"],
[{y:-0.875,x:2.5},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5},"Cmd\n\n\nSuper",{x:1},"Hyper"],
[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Ctrl\n\n\nRCtrl"],
[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#bfbf67"},"Home","End"],
[{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete","Page\n\n\n\n\n\nUp"],
[{x:2},"Page\n\n\n\n\n\nDown"],
[{r:-30,rx:13,y:-1,x:-3},"Left","Right"],
[{x:-3},"Up",{h:2},"Enter",{h:2},"Space"],
[{x:-3},"Down"]

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

@ -0,0 +1,27 @@
[{x:3.5,c:"#9988bb"},"Vol\n\n\n\n\n\nMute",{x:10.5,c:"#ccffff"},"Page\n\n\n\n\n\nUp"],
[{y:-0.875,x:2.5,c:"#9988bb"},"Sleep",{x:1},"Vol\n\n\n\n\n\nDown",{x:8.5},"Print\n\n\n\n\n\nScreen",{x:1},"Home\n\n\n\n\n\nDir"],
[{y:-0.875,x:5.5},"Vol\n\n\n\n\n\nUp",{c:"#ff4444"},"Esc",{x:4.5,c:"#cccccc",a:7},"",""],
[{y:-0.875,c:"#ff4444",a:4,w:1.5},"Esc",{c:"#9988bb"},"Shut\n\n\n\n\n\nDown",{x:14.5},"Email",{c:"#cccccc",a:7,w:1.5},""],
[{y:-0.375,x:3.5,c:"#ccffff",a:4},"Mouse\n\n\n\n\n\nUp",{x:10.5},"Cursor\n\n\n\n\n\nUp"],
[{y:-0.875,x:2.5,c:"#cccccc",a:7},"",{x:1,c:"#99ffff",a:4},"Scroll\n\n\n\n\n\nUp",{x:8.5},"Scroll\n\n\n\n\n\nUp",{x:1,c:"#cccccc",a:7},""],
[{y:-0.875,x:5.5},"",{c:"#99ffff",a:4,h:1.5},"Scroll\n\n\n\n\n\nUp",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nUp",{c:"#cccccc",a:7},""],
[{y:-0.875,c:"#000000",t:"#ff0000",a:4,fa:[0,0,0,1],w:1.5},"Media\n\n\nL2",{c:"#cccccc",t:"#000000",a:7},"",{x:14.5},"",{c:"#000000",t:"#ff0000",a:4,w:1.5},"\n\nMedia\nL2"],
[{y:-0.375,x:3.5,c:"#ccffff",t:"#000000"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"],
[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nLeft",{x:1},"Mouse\n\n\n\n\n\nRight",{x:8.5},"Cursor\n\n\n\n\n\nLeft",{x:1},"Cursor\n\n\n\n\n\nRight"],
[{y:-0.875,x:5.5,c:"#cccccc",a:7},"",{x:6.5,c:"#ccffff",a:4},"Home"],
[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Symbols\n\n\nL1",{c:"#cccccc",t:"#000000",a:7},"",{x:14.5,c:"#ccffff",a:4},"End",{c:"#cccccc",a:7,w:1.5},""],
[{y:-0.625,x:6.5,c:"#99ffff",a:4,h:1.5},"Scroll\n\n\n\n\n\nDown",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nDown"],
[{y:-0.75,x:3.5,c:"#ccffff"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"],
[{y:-0.875,x:2.5,c:"#cccccc",a:7},"",{x:1,c:"#99ffff",a:4},"Scroll\n\n\n\n\n\nDown",{x:8.5},"Scroll\n\n\n\n\n\nDown",{x:1,c:"#cccccc",a:7},""],
[{y:-0.875,x:5.5},"",{x:6.5},""],
[{y:-0.875,w:1.5},"","",{x:14.5},"",{w:1.5},""],
[{y:-0.375,x:3.5,c:"#ccffff",a:4},"Left\n\n\n\n\n\nClick",{x:10.5},"Page\n\n\n\n\n\nDown"],
[{y:-0.875,x:2.5,c:"#cccccc",a:7},"",{x:1,c:"#ccffff",a:4},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#cccccc",a:7},"",{x:1},""],
[{y:-0.75,x:0.5},"","",{x:14.5},"",""],
[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#bbaacc",a:4},"Stop\n\n\nBrowser","Reload\n\n\nBrowser"],
[{h:2},"< Web\n\n\nBrowser",{h:2},"Web >\n\n\nBrowser","Search\n\n\nBrowser"],
[{x:2},"Home\n\n\nBrowser"],
[{r:-30,rx:13,y:-1,x:-3},"Prev\n\n\nAudio\n\n\nTrack","Next\n\n\nAudio\n\n\nTrack"],
[{x:-3,c:"#9988bb"},"Vol\n\n\n\n\n\nUp",{c:"#bbaacc",h:2},"Stop\n\n\nAudio",{h:2},"Play\n\n\nAudio\n\n\nPause"],
[{x:-3,c:"#9988bb"},"Vol\n\n\n\n\n\nDown"]

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

@ -0,0 +1,27 @@
[{x:3.5,c:"#a3a3a3"},"F3",{x:10.5},"F8"],
[{y:-0.875,x:2.5},"F2",{x:1},"F4",{x:8.5},"F7",{x:1},"F9"],
[{y:-0.875,x:5.5},"F5",{c:"#ff4444"},"Esc",{x:4.5,c:"#cccccc",a:7},"",{c:"#a3a3a3",a:4},"F6"],
[{y:-0.875,c:"#ff4444",w:1.5},"Esc",{c:"#a3a3a3"},"F1",{x:14.5},"F10",{w:1.5},"F11"],
[{y:-0.375,x:3.5,c:"#bbc6ed"},"{",{x:10.5,c:"#bed4ba"},"8"],
[{y:-0.875,x:2.5,c:"#bbc6ed"},"@",{x:1},"}",{x:8.5,c:"#bed4ba"},"7",{x:1},"9"],
[{y:-0.875,x:5.5,c:"#bbc6ed"},"&",{h:1.5},"<",{x:4.5,h:1.5},">","|"],
[{y:-0.875,c:"#2277ff",fa:[0,0,0,1],w:1.5},"Media\n\n\nL2",{c:"#bbc6ed"},"!",{x:14.5,c:"#bed4ba"},"/",{c:"#a3a3a3",w:1.5},"F12"],
[{y:-0.375,x:3.5,c:"#bbc6ed"},"(",{x:10.5,c:"#bed4ba"},"5"],
[{y:-0.875,x:2.5,c:"#bbc6ed"},"$",{x:1},")",{x:8.5,c:"#bed4ba"},"4",{x:1},"6"],
[{y:-0.875,x:5.5,c:"#bbc6ed"},"`",{x:6.5},"/"],
[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Symbols\n\n\nL1",{c:"#bbc6ed",t:"#000000"},"#",{x:14.5,c:"#bed4ba"},"*",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSymbols\nL1"],
[{y:-0.625,x:6.5,c:"#bfbf67",t:"#000000",h:1.5},"Tab >\n\n\nTab",{x:4.5,h:1.5},"< Tab\n\n\nShift Tab"],
[{y:-0.75,x:3.5,c:"#bbc6ed"},"[",{x:10.5,c:"#bed4ba"},"2"],
[{y:-0.875,x:2.5,c:"#bbc6ed"},"^",{x:1},"]",{x:8.5,c:"#bed4ba"},"1",{x:1},"3"],
[{y:-0.875,x:5.5,c:"#bbc6ed"},"~",{x:6.5},"\\"],
[{y:-0.875,c:"#cccccc",a:7,w:1.5},"",{c:"#bbc6ed",a:4},"%",{x:14.5,c:"#bed4ba"},"-",{c:"#2277ff",w:1.5},"\n\nCaps Lock"],
[{y:-0.375,x:3.5,c:"#cccccc",a:7},"",{x:10.5,c:"#bed4ba",a:4},"."],
[{y:-0.875,x:2.5,c:"#cccccc",a:7},"",{x:1},"",{x:8.5,c:"#bed4ba",a:4},"0",{x:1},"="],
[{y:-0.75,x:0.5,c:"#cccccc",a:7},"","",{x:14.5,c:"#bed4ba",a:4},"+","Enter"],
[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#bfbf67"},"Left","Right"],
[{h:2},"Space",{h:2},"Enter","Up"],
[{x:2},"Down"],
[{r:-30,rx:13,y:-1,x:-3},"Home","End"],
[{x:-3},"Page\n\n\n\n\n\nUp",{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete"],
[{x:-3},"Page\n\n\n\n\n\nDown"]

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

@ -1,5 +1,9 @@
# The Ordinary Layout. for users of common keyboards
# The Ordinary Layout, a familiar and powerful layout
You can read more about the reasoning behind this layout over at [Nicholas's blog](http://nicholas.rinard.us/2016/03/ergodox-ez-layout.html). The idea is to make a layout that's as familiar as possible for users of "regular" keyboards.
The Ordinary Layout is intended to be unremarkably mundane and remarkably useful. This layout maintains most key positions from common QWERTY keyboards and features enhanced Symbol and Media layers compared to the default Ergodox EZ layout.
![Ordinary layout](ordinary.png)
Full details about the rationale behind this layout [are available](http://nicholas.rinard.us/2016/03/ergodox-ez-layout.html).
![Ordinary base layout](ordinary-base.png)
![Ordinary symbol layout](ordinary-symbol.png)
![Ordinary media layout](ordinary-media.png)

@ -28,7 +28,11 @@ There are four layers:
- Tap `F2` to copy screenshot to the clipboard.
- Hold `SHIFT` and tap `F2` to save screenshot as a file.
- Tap `F3`, `F4`, `F5`, `F6` to resize a window via [Divvy](http://mizage.com/divvy/).
- Tap `F14`, `F15` to adjust display brightness.
- Tap `F14`, `F15` to adjust display brightness.
**IMPORTANT**: If you have another keyboard connected via Bluetooth, then `F14` and `F15` will not work.
Turn off that Bluetooth keyboard. Re-plug you ErgoDox. Enjoy!
## CTRL/ESC

@ -1,28 +1,26 @@
#include "planck.h"
__attribute__ ((weak))
void matrix_init_user(void) {
}
void matrix_init_user(void) {}
__attribute__ ((weak))
void matrix_scan_user(void) {
void matrix_scan_user(void) {}
}
__attribute__ ((weak))
void process_action_user(keyrecord_t *record) {}
void matrix_init_kb(void) {
#ifdef BACKLIGHT_ENABLE
backlight_init_ports();
#endif
#ifdef BACKLIGHT_ENABLE
backlight_init_ports();
#endif
#ifdef RGBLIGHT_ENABLE
rgblight_init();
#endif
#ifdef RGBLIGHT_ENABLE
rgblight_init();
#endif
// Turn status LED on
DDRE |= (1<<6);
PORTE |= (1<<6);
// Turn status LED on
DDRE |= (1<<6);
PORTE |= (1<<6);
matrix_init_user();
}
@ -30,3 +28,7 @@ void matrix_init_kb(void) {
void matrix_scan_kb(void) {
matrix_scan_user();
}
void process_action_kb(keyrecord_t *record) {
process_action_user(record);
}

@ -42,5 +42,6 @@
void matrix_init_user(void);
void matrix_scan_user(void);
void process_action_user(keyrecord_t *record);
#endif

@ -113,18 +113,19 @@ OPT_DEFS += -DBOOTLOADER_SIZE=512
# 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
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
KEYBOARD_LOCK_ENABLE = yes # Allow locking of keyboard via magic key
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
# NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
# MIDI_ENABLE = YES # MIDI controls
# UNICODE_ENABLE = YES # Unicode
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
# MIDI_ENABLE = YES # MIDI controls
# UNICODE_ENABLE = YES # Unicode
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
# Optimize size but this may cause error "relocation truncated to fit"

@ -53,11 +53,54 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
/* key combination for command */
/* Force NKRO Mode - If forced on, must be disabled via magic key (default = LShift+RShift+N) */
#define FORCE_NKRO
/*
* Magic key options
* These options allow the magic key functionality to be changed. This is useful
* if your keyboard/keypad is missing keys and you want magic key support.
*/
/* key combination for magic key command */
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
/* control how magic key switches layers */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
/* remap magic keys */
//#define MAGIC_KEY_HELP1 H
//#define MAGIC_KEY_HELP2 SLASH
//#define MAGIC_KEY_DEBUG D
//#define MAGIC_KEY_DEBUG_MATRIX X
//#define MAGIC_KEY_DEBUG_KBD K
//#define MAGIC_KEY_DEBUG_MOUSE M
//#define MAGIC_KEY_VERSION V
//#define MAGIC_KEY_STATUS S
//#define MAGIC_KEY_CONSOLE C
//#define MAGIC_KEY_LAYER0_ALT1 ESC
//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
//#define MAGIC_KEY_LAYER0 0
//#define MAGIC_KEY_LAYER1 1
//#define MAGIC_KEY_LAYER2 2
//#define MAGIC_KEY_LAYER3 3
//#define MAGIC_KEY_LAYER4 4
//#define MAGIC_KEY_LAYER5 5
//#define MAGIC_KEY_LAYER6 6
//#define MAGIC_KEY_LAYER7 7
//#define MAGIC_KEY_LAYER8 8
//#define MAGIC_KEY_LAYER9 9
//#define MAGIC_KEY_BOOTLOADER PAUSE
#define MAGIC_KEY_LOCK BSLS
//#define MAGIC_KEY_EEPROM E
//#define MAGIC_KEY_NKRO N
//#define MAGIC_KEY_SLEEP_LED Z
/*
* Feature disable options
* These options are also useful to firmware size reduction.
@ -76,4 +119,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
#endif
#endif

@ -113,18 +113,19 @@ OPT_DEFS += -DBOOTLOADER_SIZE=512
# 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
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
KEYBOARD_LOCK_ENABLE = yes # Allow locking of keyboard via magic key
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
# NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
# MIDI_ENABLE = YES # MIDI controls
# UNICODE_ENABLE = YES # Unicode
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
#NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
# MIDI_ENABLE = YES # MIDI controls
# UNICODE_ENABLE = YES # Unicode
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
# Optimize size but this may cause error "relocation truncated to fit"

@ -55,11 +55,56 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
/* key combination for command */
/* Force NKRO Mode - If forced on, must be disabled via magic key (default = LShift+RShift+N) */
//#define FORCE_NKRO
/*
* Magic key options
* These options allow the magic key functionality to be changed. This is useful
* if your keyboard/keypad is missing keys and you want magic key support.
*/
/* key combination for magic key command */
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
/* control how magic key switches layers */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
/* override magic key keymap */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
//#define MAGIC_KEY_HELP1 H
//#define MAGIC_KEY_HELP2 SLASH
//#define MAGIC_KEY_DEBUG D
//#define MAGIC_KEY_DEBUG_MATRIX X
//#define MAGIC_KEY_DEBUG_KBD K
//#define MAGIC_KEY_DEBUG_MOUSE M
//#define MAGIC_KEY_VERSION V
//#define MAGIC_KEY_STATUS S
//#define MAGIC_KEY_CONSOLE C
//#define MAGIC_KEY_LAYER0_ALT1 ESC
//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
//#define MAGIC_KEY_LAYER0 0
//#define MAGIC_KEY_LAYER1 1
//#define MAGIC_KEY_LAYER2 2
//#define MAGIC_KEY_LAYER3 3
//#define MAGIC_KEY_LAYER4 4
//#define MAGIC_KEY_LAYER5 5
//#define MAGIC_KEY_LAYER6 6
//#define MAGIC_KEY_LAYER7 7
//#define MAGIC_KEY_LAYER8 8
//#define MAGIC_KEY_LAYER9 9
//#define MAGIC_KEY_BOOTLOADER PAUSE
//#define MAGIC_KEY_LOCK CAPS
//#define MAGIC_KEY_EEPROM E
//#define MAGIC_KEY_NKRO N
//#define MAGIC_KEY_SLEEP_LED Z
/*
* Feature disable options
* These options are also useful to firmware size reduction.

@ -10,6 +10,11 @@ void matrix_scan_user(void) {
// leave this function blank - it can be defined in a keymap file
}
__attribute__ ((weak))
void process_action_user(keyrecord_t *record) {
// leave this function blank - it can be defined in a keymap file
}
__attribute__ ((weak))
void led_set_user(uint8_t usb_led) {
// leave this function blank - it can be defined in a keymap file
@ -18,19 +23,26 @@ void led_set_user(uint8_t usb_led) {
void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
matrix_init_user();
}
void matrix_scan_kb(void) {
// put your looping keyboard code here
// runs every cycle (a lot)
// put your looping keyboard code here
// runs every cycle (a lot)
matrix_scan_user();
}
void process_action_kb(keyrecord_t *record) {
// put your per-action keyboard code here
// runs for every action, just before processing by the firmware
process_action_user(record);
}
void led_set_kb(uint8_t usb_led) {
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
led_set_user(usb_led);
}
}

@ -17,10 +17,11 @@
{ \
{ k00, k01, k02 }, \
{ k10, KC_NO, k11 }, \
}
}
void matrix_init_user(void);
void matrix_scan_user(void);
void process_action_user(keyrecord_t *record);
void led_set_user(uint8_t usb_led);
#endif
#endif

@ -53,6 +53,9 @@ void action_exec(keyevent_t event)
#endif
}
__attribute__ ((weak))
void process_action_kb(keyrecord_t *record) {}
void process_action(keyrecord_t *record)
{
keyevent_t event = record->event;
@ -62,6 +65,8 @@ void process_action(keyrecord_t *record)
if (IS_NOEVENT(event)) { return; }
process_action_kb(record);
action_t action = layer_switch_get_action(event.key);
dprint("ACTION: "); debug_action(action);
#ifndef NO_ACTION_LAYER
@ -70,6 +75,10 @@ void process_action(keyrecord_t *record)
#endif
dprintln();
if (event.pressed) {
// clear the potential weak mods left by previously pressed keys
clear_weak_mods();
}
switch (action.kind.id) {
/* Key and Mods */
case ACT_LMODS:
@ -500,6 +509,7 @@ void clear_keyboard(void)
void clear_keyboard_but_mods(void)
{
clear_weak_mods();
clear_macro_mods();
clear_keys();
send_keyboard_report();
#ifdef MOUSEKEY_ENABLE

@ -58,6 +58,9 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt);
/* user defined special function */
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt);
/* keyboard-specific key event (pre)processing */
void process_action_kb(keyrecord_t *record);
/* Utilities for actions. */
void process_action(keyrecord_t *record);
void register_code(uint8_t code);

@ -41,7 +41,7 @@ void action_macro_play(const macro_t *macro_p)
MACRO_READ();
dprintf("KEY_DOWN(%02X)\n", macro);
if (IS_MOD(macro)) {
add_weak_mods(MOD_BIT(macro));
add_macro_mods(MOD_BIT(macro));
send_keyboard_report();
} else {
register_code(macro);
@ -51,7 +51,7 @@ void action_macro_play(const macro_t *macro_p)
MACRO_READ();
dprintf("KEY_UP(%02X)\n", macro);
if (IS_MOD(macro)) {
del_weak_mods(MOD_BIT(macro));
del_macro_mods(MOD_BIT(macro));
send_keyboard_report();
} else {
unregister_code(macro);

@ -29,6 +29,7 @@ static inline void del_key_bit(uint8_t code);
static uint8_t real_mods = 0;
static uint8_t weak_mods = 0;
static uint8_t macro_mods = 0;
#ifdef USB_6KRO_ENABLE
#define RO_ADD(a, b) ((a + b) % KEYBOARD_REPORT_KEYS)
@ -55,6 +56,7 @@ static int16_t oneshot_time = 0;
void send_keyboard_report(void) {
keyboard_report->mods = real_mods;
keyboard_report->mods |= weak_mods;
keyboard_report->mods |= macro_mods;
#ifndef NO_ACTION_ONESHOT
if (oneshot_mods) {
#if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0))
@ -118,6 +120,13 @@ void del_weak_mods(uint8_t mods) { weak_mods &= ~mods; }
void set_weak_mods(uint8_t mods) { weak_mods = mods; }
void clear_weak_mods(void) { weak_mods = 0; }
/* macro modifier */
uint8_t get_macro_mods(void) { return macro_mods; }
void add_macro_mods(uint8_t mods) { macro_mods |= mods; }
void del_macro_mods(uint8_t mods) { macro_mods &= ~mods; }
void set_macro_mods(uint8_t mods) { macro_mods = mods; }
void clear_macro_mods(void) { macro_mods = 0; }
/* Oneshot modifier */
#ifndef NO_ACTION_ONESHOT
void set_oneshot_mods(uint8_t mods)

@ -47,6 +47,13 @@ void del_weak_mods(uint8_t mods);
void set_weak_mods(uint8_t mods);
void clear_weak_mods(void);
/* macro modifier */
uint8_t get_macro_mods(void);
void add_macro_mods(uint8_t mods);
void del_macro_mods(uint8_t mods);
void set_macro_mods(uint8_t mods);
void clear_macro_mods(void);
/* oneshot modifier */
void set_oneshot_mods(uint8_t mods);
void clear_oneshot_mods(void);

@ -52,6 +52,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
static bool command_common(uint8_t code);
static void command_common_help(void);
static void print_version(void);
static void print_status(void);
static bool command_console(uint8_t code);
static void command_console_help(void);
#ifdef MOUSEKEY_ENABLE
@ -112,35 +114,140 @@ bool command_console_extra(uint8_t code)
***********************************************************/
static void command_common_help(void)
{
print("\n\t- Magic -\n"
"d: debug\n"
"x: debug matrix\n"
"k: debug keyboard\n"
"m: debug mouse\n"
"v: version\n"
"s: status\n"
"c: console mode\n"
"0-4: layer0-4(F10-F4)\n"
"Paus: bootloader\n"
print( "\n\t- Magic -\n"
STR(MAGIC_KEY_DEBUG ) ": Debug Message Toggle\n"
STR(MAGIC_KEY_DEBUG_MATRIX) ": Matrix Debug Mode Toggle - Show keypresses in matrix grid\n"
STR(MAGIC_KEY_DEBUG_KBD ) ": Keyboard Debug Toggle - Show keypress report\n"
STR(MAGIC_KEY_DEBUG_MOUSE ) ": Debug Mouse Toggle\n"
STR(MAGIC_KEY_VERSION ) ": Version\n"
STR(MAGIC_KEY_STATUS ) ": Status\n"
STR(MAGIC_KEY_CONSOLE ) ": Activate Console Mode\n"
#if MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
STR(MAGIC_KEY_LAYER0 ) ": Switch to Layer 0\n"
STR(MAGIC_KEY_LAYER1 ) ": Switch to Layer 1\n"
STR(MAGIC_KEY_LAYER2 ) ": Switch to Layer 2\n"
STR(MAGIC_KEY_LAYER3 ) ": Switch to Layer 3\n"
STR(MAGIC_KEY_LAYER4 ) ": Switch to Layer 4\n"
STR(MAGIC_KEY_LAYER5 ) ": Switch to Layer 5\n"
STR(MAGIC_KEY_LAYER6 ) ": Switch to Layer 6\n"
STR(MAGIC_KEY_LAYER7 ) ": Switch to Layer 7\n"
STR(MAGIC_KEY_LAYER8 ) ": Switch to Layer 8\n"
STR(MAGIC_KEY_LAYER9 ) ": Switch to Layer 9\n"
#endif
#if MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
"F1-F10: Switch to Layer 0-9 (F10 = L0)\n"
#endif
#if MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
"0-9: Switch to Layer 0-9\n"
#endif
STR(MAGIC_KEY_LAYER0_ALT1 ) ": Switch to Layer 0 (alternate key 1)\n"
STR(MAGIC_KEY_LAYER0_ALT2 ) ": Switch to Layer 0 (alternate key 2)\n"
STR(MAGIC_KEY_BOOTLOADER ) ": Jump to Bootloader (Reset)\n"
#ifdef KEYBOARD_LOCK_ENABLE
"Caps: Lock\n"
STR(MAGIC_KEY_LOCK ) ": Lock\n"
#endif
#ifdef BOOTMAGIC_ENABLE
"e: eeprom\n"
STR(MAGIC_KEY_EEPROM ) ": Print EEPROM Settings\n"
#endif
#ifdef NKRO_ENABLE
"n: NKRO\n"
STR(MAGIC_KEY_NKRO ) ": NKRO Toggle\n"
#endif
#ifdef SLEEP_LED_ENABLE
"z: sleep LED test\n"
STR(MAGIC_KEY_SLEEP_LED ) ": Sleep LED Test\n"
#endif
);
}
static void print_version(void)
{
// print version & information
print("\n\t- Version -\n");
print("DESC: " STR(DESCRIPTION) "\n");
print("VID: " STR(VENDOR_ID) "(" STR(MANUFACTURER) ") "
"PID: " STR(PRODUCT_ID) "(" STR(PRODUCT) ") "
"VER: " STR(DEVICE_VER) "\n");
print("BUILD: " STR(VERSION) " (" __TIME__ " " __DATE__ ")\n");
/* build options */
print("OPTIONS:"
#ifdef PROTOCOL_PJRC
" PJRC"
#endif
#ifdef PROTOCOL_LUFA
" LUFA"
#endif
#ifdef PROTOCOL_VUSB
" VUSB"
#endif
#ifdef BOOTMAGIC_ENABLE
" BOOTMAGIC"
#endif
#ifdef MOUSEKEY_ENABLE
" MOUSEKEY"
#endif
#ifdef EXTRAKEY_ENABLE
" EXTRAKEY"
#endif
#ifdef CONSOLE_ENABLE
" CONSOLE"
#endif
#ifdef COMMAND_ENABLE
" COMMAND"
#endif
#ifdef NKRO_ENABLE
" NKRO"
#endif
#ifdef KEYMAP_SECTION_ENABLE
" KEYMAP_SECTION"
#endif
" " STR(BOOTLOADER_SIZE) "\n");
print("GCC: " STR(__GNUC__) "." STR(__GNUC_MINOR__) "." STR(__GNUC_PATCHLEVEL__)
" AVR-LIBC: " __AVR_LIBC_VERSION_STRING__
" AVR_ARCH: avr" STR(__AVR_ARCH__) "\n");
return;
}
static void print_status(void)
{
print("\n\t- Status -\n");
print_val_hex8(host_keyboard_leds());
print_val_hex8(keyboard_protocol);
print_val_hex8(keyboard_idle);
#ifdef NKRO_ENABLE
print_val_hex8(keyboard_nkro);
#endif
print_val_hex32(timer_count);
#ifdef PROTOCOL_PJRC
print_val_hex8(UDCON);
print_val_hex8(UDIEN);
print_val_hex8(UDINT);
print_val_hex8(usb_keyboard_leds);
print_val_hex8(usb_keyboard_idle_count);
#endif
#ifdef PROTOCOL_PJRC
# if USB_COUNT_SOF
print_val_hex8(usbSofCount);
# endif
#endif
return;
}
#ifdef BOOTMAGIC_ENABLE
static void print_eeconfig(void)
{
@ -178,24 +285,36 @@ static void print_eeconfig(void)
static bool command_common(uint8_t code)
{
#ifdef KEYBOARD_LOCK_ENABLE
static host_driver_t *host_driver = 0;
#endif
switch (code) {
#ifdef SLEEP_LED_ENABLE
case KC_Z:
// test breathing sleep LED
print("Sleep LED test\n");
// test breathing sleep LED
case MAGIC_KC(MAGIC_KEY_SLEEP_LED):
print("Sleep LED Test\n");
sleep_led_toggle();
led_set(host_keyboard_leds());
break;
#endif
#ifdef BOOTMAGIC_ENABLE
case KC_E:
// print stored eeprom config
case MAGIC_KC(MAGIC_KEY_EEPROM):
print("eeconfig:\n");
print_eeconfig();
break;
#endif
#ifdef KEYBOARD_LOCK_ENABLE
case KC_CAPSLOCK:
// lock/unlock keyboard
case MAGIC_KC(MAGIC_KEY_LOCK):
if (host_get_driver()) {
host_driver = host_get_driver();
clear_keyboard();
@ -207,11 +326,15 @@ static bool command_common(uint8_t code)
}
break;
#endif
case KC_H:
case KC_SLASH: /* ? */
// print help
case MAGIC_KC(MAGIC_KEY_HELP1):
case MAGIC_KC(MAGIC_KEY_HELP2):
command_common_help();
break;
case KC_C:
// activate console
case MAGIC_KC(MAGIC_KEY_CONSOLE):
debug_matrix = false;
debug_keyboard = false;
debug_mouse = false;
@ -220,25 +343,33 @@ static bool command_common(uint8_t code)
print("C> ");
command_state = CONSOLE;
break;
case KC_PAUSE:
clear_keyboard();
print("\n\nbootloader... ");
// jump to bootloader
case MAGIC_KC(MAGIC_KEY_BOOTLOADER):
clear_keyboard(); // clear to prevent stuck keys
print("\n\nJumping to bootloader... ");
_delay_ms(1000);
bootloader_jump(); // not return
break;
case KC_D:
// debug toggle
case MAGIC_KC(MAGIC_KEY_DEBUG):
debug_enable = !debug_enable;
if (debug_enable) {
print("\ndebug: on\n");
debug_matrix = true;
debug_keyboard = true;
debug_mouse = true;
} else {
print("\ndebug: off\n");
debug_matrix = false;
debug_keyboard = false;
debug_mouse = false;
debug_enable = false;
} else {
print("\ndebug: on\n");
debug_enable = true;
}
break;
case KC_X: // debug matrix toggle
// debug matrix toggle
case MAGIC_KC(MAGIC_KEY_DEBUG_MATRIX):
debug_matrix = !debug_matrix;
if (debug_matrix) {
print("\nmatrix: on\n");
@ -247,7 +378,9 @@ static bool command_common(uint8_t code)
print("\nmatrix: off\n");
}
break;
case KC_K: // debug keyboard toggle
// debug keyboard toggle
case MAGIC_KC(MAGIC_KEY_DEBUG_KBD):
debug_keyboard = !debug_keyboard;
if (debug_keyboard) {
print("\nkeyboard: on\n");
@ -256,87 +389,33 @@ static bool command_common(uint8_t code)
print("\nkeyboard: off\n");
}
break;
case KC_M: // debug mouse toggle
// debug mouse toggle
case MAGIC_KC(MAGIC_KEY_DEBUG_MOUSE):
debug_mouse = !debug_mouse;
if (debug_mouse) {
print("\nmouse: on\n");
debug_enable = true;
} else {
print("\nmouse: off\n");
print("\nmouse: off\n");
}
break;
case KC_V: // print version & information
print("\n\t- Version -\n");
print("DESC: " STR(DESCRIPTION) "\n");
print("VID: " STR(VENDOR_ID) "(" STR(MANUFACTURER) ") "
"PID: " STR(PRODUCT_ID) "(" STR(PRODUCT) ") "
"VER: " STR(DEVICE_VER) "\n");
print("BUILD: " STR(VERSION) " (" __TIME__ " " __DATE__ ")\n");
/* build options */
print("OPTIONS:"
#ifdef PROTOCOL_PJRC
" PJRC"
#endif
#ifdef PROTOCOL_LUFA
" LUFA"
#endif
#ifdef PROTOCOL_VUSB
" VUSB"
#endif
#ifdef BOOTMAGIC_ENABLE
" BOOTMAGIC"
#endif
#ifdef MOUSEKEY_ENABLE
" MOUSEKEY"
#endif
#ifdef EXTRAKEY_ENABLE
" EXTRAKEY"
#endif
#ifdef CONSOLE_ENABLE
" CONSOLE"
#endif
#ifdef COMMAND_ENABLE
" COMMAND"
#endif
#ifdef NKRO_ENABLE
" NKRO"
#endif
#ifdef KEYMAP_SECTION_ENABLE
" KEYMAP_SECTION"
#endif
" " STR(BOOTLOADER_SIZE) "\n");
print("GCC: " STR(__GNUC__) "." STR(__GNUC_MINOR__) "." STR(__GNUC_PATCHLEVEL__)
" AVR-LIBC: " __AVR_LIBC_VERSION_STRING__
" AVR_ARCH: avr" STR(__AVR_ARCH__) "\n");
break;
case KC_S:
print("\n\t- Status -\n");
print_val_hex8(host_keyboard_leds());
print_val_hex8(keyboard_protocol);
print_val_hex8(keyboard_idle);
#ifdef NKRO_ENABLE
print_val_hex8(keyboard_nkro);
#endif
print_val_hex32(timer_count);
#ifdef PROTOCOL_PJRC
print_val_hex8(UDCON);
print_val_hex8(UDIEN);
print_val_hex8(UDINT);
print_val_hex8(usb_keyboard_leds);
print_val_hex8(usb_keyboard_idle_count);
#endif
// print version
case MAGIC_KC(MAGIC_KEY_VERSION):
print_version();
break;
#ifdef PROTOCOL_PJRC
# if USB_COUNT_SOF
print_val_hex8(usbSofCount);
# endif
#endif
// print status
case MAGIC_KC(MAGIC_KEY_STATUS):
print_status();
break;
#ifdef NKRO_ENABLE
case KC_N:
clear_keyboard(); //Prevents stuck keys.
// NKRO toggle
case MAGIC_KC(MAGIC_KEY_NKRO):
clear_keyboard(); // clear to prevent stuck keys
keyboard_nkro = !keyboard_nkro;
if (keyboard_nkro)
print("NKRO: on\n");
@ -344,18 +423,78 @@ static bool command_common(uint8_t code)
print("NKRO: off\n");
break;
#endif
case KC_ESC:
case KC_GRV:
case KC_0:
// switch layers
case MAGIC_KC(MAGIC_KEY_LAYER0_ALT1):
case MAGIC_KC(MAGIC_KEY_LAYER0_ALT2):
switch_default_layer(0);
break;
#if MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
case MAGIC_KC(MAGIC_KEY_LAYER0):
switch_default_layer(0);
break;
case MAGIC_KC(MAGIC_KEY_LAYER1):
switch_default_layer(1);
break;
case MAGIC_KC(MAGIC_KEY_LAYER2):
switch_default_layer(2);
break;
case MAGIC_KC(MAGIC_KEY_LAYER3):
switch_default_layer(3);
break;
case MAGIC_KC(MAGIC_KEY_LAYER4):
switch_default_layer(4);
break;
case MAGIC_KC(MAGIC_KEY_LAYER5):
switch_default_layer(5);
break;
case MAGIC_KC(MAGIC_KEY_LAYER6):
switch_default_layer(6);
break;
case MAGIC_KC(MAGIC_KEY_LAYER7):
switch_default_layer(7);
break;
case MAGIC_KC(MAGIC_KEY_LAYER8):
switch_default_layer(8);
break;
case MAGIC_KC(MAGIC_KEY_LAYER9):
switch_default_layer(9);
break;
#endif
#if MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
case KC_F1 ... KC_F9:
switch_default_layer((code - KC_F1) + 1);
break;
case KC_F10:
switch_default_layer(0);
break;
#endif
#if MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
case KC_1 ... KC_9:
switch_default_layer((code - KC_1) + 1);
break;
case KC_F1 ... KC_F9:
switch_default_layer((code - KC_F1) + 1);
case KC_0:
switch_default_layer(0);
break;
#endif
default:
print("?");
return false;

@ -32,4 +32,125 @@ bool command_proc(uint8_t code);
#define command_proc(code) false
#endif
#ifndef MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
#endif
#ifndef MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
#endif
#ifndef MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
#endif
#ifndef MAGIC_KEY_HELP1
#define MAGIC_KEY_HELP1 H
#endif
#ifndef MAGIC_KEY_HELP2
#define MAGIC_KEY_HELP2 SLASH
#endif
#ifndef MAGIC_KEY_DEBUG
#define MAGIC_KEY_DEBUG D
#endif
#ifndef MAGIC_KEY_DEBUG_MATRIX
#define MAGIC_KEY_DEBUG_MATRIX X
#endif
#ifndef MAGIC_KEY_DEBUG_KBD
#define MAGIC_KEY_DEBUG_KBD K
#endif
#ifndef MAGIC_KEY_DEBUG_MOUSE
#define MAGIC_KEY_DEBUG_MOUSE M
#endif
#ifndef MAGIC_KEY_VERSION
#define MAGIC_KEY_VERSION V
#endif
#ifndef MAGIC_KEY_STATUS
#define MAGIC_KEY_STATUS S
#endif
#ifndef MAGIC_KEY_CONSOLE
#define MAGIC_KEY_CONSOLE C
#endif
#ifndef MAGIC_KEY_LAYER0_ALT1
#define MAGIC_KEY_LAYER0_ALT1 ESC
#endif
#ifndef MAGIC_KEY_LAYER0_ALT2
#define MAGIC_KEY_LAYER0_ALT2 GRAVE
#endif
#ifndef MAGIC_KEY_LAYER0
#define MAGIC_KEY_LAYER0 0
#endif
#ifndef MAGIC_KEY_LAYER1
#define MAGIC_KEY_LAYER1 1
#endif
#ifndef MAGIC_KEY_LAYER2
#define MAGIC_KEY_LAYER2 2
#endif
#ifndef MAGIC_KEY_LAYER3
#define MAGIC_KEY_LAYER3 3
#endif
#ifndef MAGIC_KEY_LAYER4
#define MAGIC_KEY_LAYER4 4
#endif
#ifndef MAGIC_KEY_LAYER5
#define MAGIC_KEY_LAYER5 5
#endif
#ifndef MAGIC_KEY_LAYER6
#define MAGIC_KEY_LAYER6 6
#endif
#ifndef MAGIC_KEY_LAYER7
#define MAGIC_KEY_LAYER7 7
#endif
#ifndef MAGIC_KEY_LAYER8
#define MAGIC_KEY_LAYER8 8
#endif
#ifndef MAGIC_KEY_LAYER9
#define MAGIC_KEY_LAYER9 9
#endif
#ifndef MAGIC_KEY_BOOTLOADER
#define MAGIC_KEY_BOOTLOADER PAUSE
#endif
#ifndef MAGIC_KEY_LOCK
#define MAGIC_KEY_LOCK CAPS
#endif
#ifndef MAGIC_KEY_EEPROM
#define MAGIC_KEY_EEPROM E
#endif
#ifndef MAGIC_KEY_NKRO
#define MAGIC_KEY_NKRO N
#endif
#ifndef MAGIC_KEY_SLEEP_LED
#define MAGIC_KEY_SLEEP_LED Z
#endif
#define XMAGIC_KC(key) KC_##key
#define MAGIC_KC(key) XMAGIC_KC(key)
#endif

@ -70,6 +70,7 @@ void keyboard_setup(void)
void keyboard_init(void)
{
timer_init();
matrix_init();
#ifdef PS2_MOUSE_ENABLE
@ -90,6 +91,11 @@ void keyboard_init(void)
#ifdef BACKLIGHT_ENABLE
backlight_init();
#endif
#ifdef FORCE_NKRO
keyboard_nkro = true;
#endif
}
/*

Loading…
Cancel
Save