summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/isp_flashing_guide.md79
-rw-r--r--util/pro_micro_ISP_B6_10.hex362
2 files changed, 412 insertions, 29 deletions
diff --git a/docs/isp_flashing_guide.md b/docs/isp_flashing_guide.md
index 8abc454868..008f944cc3 100644
--- a/docs/isp_flashing_guide.md
+++ b/docs/isp_flashing_guide.md
@@ -19,59 +19,80 @@ If you're having trouble flashing/erasing your board, and running into cryptic e
Memory write error, use debug for more info.
commands.c:360: Error writing memory data. (err -4)
-You're likely going to need to ISP flash your board/device to get it working again. Luckily, this process is pretty straight-forward, provided you have any extra programmable keyboard, Arduino, or Teensy 2.0/Teensy 2.0++. There are also dedicated ISP flashers available for this, but most cost >$15, and it's assumed that if you are googling this error, this is the first you've heard about ISP flashing, and don't have one readily available (whereas you might have some other AVR board). __We'll be using a Teensy 2.0 with Windows 10 in this guide__ - if you are comfortable doing this on another system, please consider editing this guide and contributing those instructions!
+You're likely going to need to ISP flash your board/device to get it working again. Luckily, this process is pretty straight-forward, provided you have any extra programmable keyboard, Pro Micro, or Teensy 2.0/Teensy 2.0++. There are also dedicated ISP flashers available for this, but most cost >$15, and it's assumed that if you are googling this error, this is the first you've heard about ISP flashing, and don't have one readily available (whereas you might have some other AVR board). __We'll be using a Teensy 2.0 or Pro Micro with Windows 10 in this guide__ - if you are comfortable doing this on another system, please consider editing this guide and contributing those instructions!
## Software Needed
-* [The Arduino IDE](https://www.arduino.cc/en/Main/Software)
-* [Teensyduino](https://www.pjrc.com/teensy/td_download.html) (if you're using a Teensy)
-* [WinAVR](http://www.ladyada.net/learn/avr/setup-win.html) (Windows)
+* [Teensy Loader](https://www.pjrc.com/teensy/loader.html) (if using a Teensy)
+* QMK Toolbox (flash as usual - be sure to select the correct MCU) or `avrdude` via [WinAVR](http://www.ladyada.net/learn/avr/setup-win.html) (for Teensy & Pro Micro)
## Wiring
This is pretty straight-forward - we'll be connecting like-things to like-things in the following manner:
- Flasher B0 <-> Keyboard RESET
- Flasher B1 <-> Keyboard B1 (SCLK)
- Flasher B2 <-> Keyboard B2 (MOSI)
- Flasher B3 <-> Keyboard B3 (MISO)
- Flasher VCC <-> Keyboard VCC
- Flasher GND <-> Keyboard GND
+### Teensy 2.0
-## The ISP Firmware
+ Teensy B0 <-> Keyboard RESET
+ Teensy B1 <-> Keyboard B1 (SCLK)
+ Teensy B2 <-> Keyboard B2 (MOSI)
+ Teensy B3 <-> Keyboard B3 (MISO)
+ Teensy VCC <-> Keyboard VCC
+ Teensy GND <-> Keyboard GND
+
+### Pro Micro
-Make sure your keyboard is unplugged from any device, and plug in your Teensy.
+ Pro Micro 10 (B6) <-> Keyboard RESET
+ Pro Micro 15 (B1) <-> Keyboard B1 (SCLK)
+ Pro Micro 16 (B2) <-> Keyboard B2 (MOSI)
+ Pro Micro 14 (B3) <-> Keyboard B3 (MISO)
+ Pro Micro VCC <-> Keyboard VCC
+ Pro Micro GND <-> Keyboard GND
+
+## The ISP Firmware (now pre-compiled)
-1. Run Arduino after you have everything installed
-2. Select `Tools > Board * > Teensy 2.0`
-3. Click `File > Examples > 11.ArduinoISP > ArduinoISP`
+The only difference between the .hex files below is which pin is connected to RESET. You can use them on other boards as well, as long as you're aware of the pins being used. If for some reason neither of these pins are available, [create an issue](https://github.com/qmk/qmk_firmware/issues/new), and we can generate one for you!
-Then scroll down until you see something that looks like this block of code:
+* Teensy 2.0: [`util/teensy_2.0_ISP_B0.hex`](https://github.com/qmk/qmk_firmware/blob/master/util/teensy_2.0_ISP_B0.hex) (`B0`)
+* Pro Micro: [`util/pro_micro_ISP_B6_10.hex`](https://github.com/qmk/qmk_firmware/blob/master/util/pro_mico_ISP_B6_10.hex) (`B6/10`)
- // Configure which pins to use:
+**Flash your Teenys/Pro Micro with one of these and continue - you won't need the file after flashing your ISP device.**
- // The standard pin configuration.
- #ifndef ARDUINO_HOODLOADER2
+## Just the Bootloader File
- #define RESET 0 // Use 0 (B0) instead of 10
- #define LED_HB 11 // Use 11 (LED on the Teensy 2.0)
- #define LED_ERR 8 // This won't be used unless you have an LED hooked-up to 8 (D3)
- #define LED_PMODE 7 // This won't be used unless you have an LED hooked-up to 7 (D2)
+If you just want to get things back to normal, you can flash only a bootloader from [`util/` folder](https://github.com/qmk/qmk_firmware/tree/master/util), and use your normal process to flash the firmware afterwards. Be sure to flash the correct bootloader for your chip:
-And make the changes in the last four lines. If you're using something besides the Teensy 2.0, you'll want to choose something else that makes sense for `LED_HB`. We define `RESET` as `0`/`B0` because that's what's close - if you want to use another pin for some reason, [you can use the pinouts to choose something else](https://www.pjrc.com/teensy/pinout.html).
+* [`atmega32u4`](https://github.com/qmk/qmk_firmware/blob/master/util/bootloader_atmega32u4_1_0_0.hex) - Most keyboards, Planck Rev 1-5, Preonic Rev 1-2
+* [`at90usb1286`](https://github.com/qmk/qmk_firmware/blob/master/util/bootloader_at90usb128x_1_0_1.hex) - Planck Light Rev 1
-Once you've made your changes, you can click the Upload button (right arrow), which will open up the Teensy flasher app - you'll need to press the reset button on the Teensy the first time, but after that, it's automatic (you shouldn't be flashing this more than once, though). Once flashed, the orange LED on the Teensy will flash on and off, indicating it's ready for some action.
+If you're not sure what your board uses, look in the `rules.mk` file for the keyboard in QMK. The `MCU =` line will have the value you need. It may differ between different versions of the board.
-## The `.hex` File
+### Advanced/Production Techniques
-Before flashing your firmware, you're going to need to and do a little preparation. We'll be appending [this bootloader (also a .hex file)](https://github.com/qmk/qmk_firmware/blob/master/util/bootloader_atmega32u4_1_0_0.hex) to the end of our firmware by opening the original .hex file in a text editor, and removing the last line, which should be `:00000001FF` (this is an EOF message). After that's been removed, copy the entire bootloader's contents and paste it at the end of the original file, and save it.
+If you'd like to flash both the bootloader **and** the regular firmware at the same time, you need to combine the files.
-It's possible to use other bootloaders here in the same way, but __you need a bootloader__, otherwise you'll have to ISP to write new firmware to your keyboard.
+1. Open the original firmware .hex file in a text editor
+2. Remove the last line (which should be `:00000001FF` - this is an EOF message)
+3. Copy the entire bootloader's contents onto a new line (with no empty lines between) and paste it at the end of the original file
+4. Save it as a new file by naming it `<keyboard>_<keymap>_production.hex`
-## Flashing Your Firmware
+It's possible to use other bootloaders here in the same way, but __you need a bootloader__, otherwise you'll have to use ISP again to write new firmware to your keyboard.
+
+## Flashing Your Bootloader/Production File
Make sure your keyboard is unplugged from any device, and plug in your Teensy.
+### QMK Toolbox
+
+1. `AVRISP device connected` will show up in yellow
+2. Select the correct bootloader/production .hex file with the `Open` dialog (spaces can't be in the path)
+3. Be sure the correct `Microcontroller` option is selected
+4. Hit `Flash`
+5. Wait, as nothing will output for a while, especially with production files
+
+If the verification and fuse checks are ok, you're done! Your board may restart automatically, otherwise, unplug your Teensy and plug in your keyboard - you can leave your Teensy wired to your keyboard while testing things, but it's recommended that you desolder it/remove the wiring once you're sure everything works.
+
+### Command Line
+
Open `cmd` and navigate to your where your modified .hex file is. We'll pretend this file is called `main.hex`, and that your Teensy 2.0 is on the `COM3` port - if you're unsure, you can open your Device Manager, and look for `Ports > USB Serial Device`. Use that COM port here. You can confirm it's the right port with:
avrdude -c avrisp -P COM3 -p atmega32u4
diff --git a/util/pro_micro_ISP_B6_10.hex b/util/pro_micro_ISP_B6_10.hex
new file mode 100644
index 0000000000..cf61bebb94
--- /dev/null
+++ b/util/pro_micro_ISP_B6_10.hex
@@ -0,0 +1,362 @@
+:10000000BDC00000E3C00000E1C00000DFC0000090
+:10001000DDC00000DBC00000D9C00000D7C0000078
+:10002000D5C00000D3C000003AC70000B1C700002F
+:10003000CDC00000CBC00000C9C00000C7C0000098
+:10004000C5C00000C3C00000C1C00000BFC00000A8
+:10005000BDC00000BBC00000B9C000007FC60000EA
+:10006000B5C00000B3C00000B1C00000AFC00000C8
+:10007000ADC00000ABC00000A9C00000A7C00000D8
+:10008000A5C00000A3C00000A1C000009FC00000E8
+:100090009DC000009BC0000099C0000097C00000F8
+:1000A00095C0000093C0000091C000000001000056
+:1000B0005D0112000200001A014300030000160156
+:1000C0000401030904FC001802030904E4001603F8
+:1000D000030904D6000C0C03310032003300340055
+:1000E0003500000016035500530042002000530065
+:1000F00065007200690061006C0000001803540084
+:10010000650065006E007300790064007500690089
+:100110006E006F000000040309040902430002019D
+:1001200000C0320904000001020201000524001091
+:10013000010524010001042402060524060001072C
+:1001400005820308004009040100020A00000007BC
+:100150000503024000000705840240000012010070
+:100160000202000020C01683040001010203010006
+:1001700001C10201803601813600110B11241FBE1E
+:10018000CFEFDAE0DEBFCDBF11E0A0E0B1E0EAE5FD
+:10019000F6E102C005900D92A232B107D9F722E034
+:1001A000A2E2B1E001C01D92A935B207E1F710E06B
+:1001B000CEEBD0E004C02197FE010E94250BCD3B81
+:1001C000D107C9F70E942D090C942B0B19CFDC0124
+:1001D000ED91FC910190F081E02D09948EBD00001D
+:1001E0000DB407FEFDCF8EB508950F931F930FB684
+:1001F000F8948091440290914502A0914602B091FA
+:1002000047020FBE409122015091230160912401C9
+:10021000709125018C019D01041B150B260B370BDA
+:100220000832110521053105F0F0809322019093E9
+:100230002301A0932401B09325012091010180EEB8
+:10024000820F813A28F090910001919590930001DE
+:1002500080910001820F80930101529A803810F43E
+:100260005A9801C05A9A1F910F91089590912601B2
+:10027000882319F0911103C004C0911102C02E9A75
+:1002800001C02E98809180008F7D8093800008951A
+:100290000F931F93CF93DF938B01EC01DD27FE01BA
+:1002A0009ED46EE170E080E090E098D5FE019DD490
+:1002B0006EE170E080E090E091D50150110978F78F
+:1002C000DF91CF911F910F91089540E05BE460E0D2
+:1002D00070E08FE492E00E94AA0A509A62E070E017
+:1002E00085E090E0D5DF519A62E070E086E090E032
+:1002F000CFDF529A62E070E087E090E0C9CF8823B8
+:1003000011F0589A01C0589884B58F7D84BD089526
+:10031000CF93DF9300D01F92CDB7DEB72B834A83F4
+:1003200069835CDF6981862F59DF4A81842F56DF1C
+:100330002B81822F0F900F900F90DF91CF914ECF96
+:1003400020913A012093270180913B01809328015D
+:1003500080913C018093290180913D0180932A0185
+:1003600080913E0180932B0180913F0180932C016D
+:100370008091400180932D018091410180932E0155
+:100380008091420180932F018091440190E0982F49
+:10039000882730914501830F911D909331018093FF
+:1003A00030018091460190E0982F882730914701D5
+:1003B000830F911D90933301809332018091480106
+:1003C00090E0982F882730914901830F911D9093D9
+:1003D00035018093340180914A0190E0A0E0B0E0C3
+:1003E000BA2FA92F982F882730914B01830F911D89
+:1003F000A11DB11DDC019927882740914C0150E0D7
+:10040000542F4427052E000C660B770B840F951F85
+:10041000A61FB71F30914D01830F911DA11DB11D66
+:100420008093360190933701A0933801B09339013E
+:1004300081E0203E08F480E080932601089581E069
+:1004400015DF269A6DD380914202882381F0813096
+:1004500051F48DB3809340029DB380914102809509
+:1004600089238DBB04C08FB7F8948093400283E545
+:100470008CBD1DBC299864E170E080E090E0AED4B2
+:1004800080E0F4DE80E991E00197F1F781E0EEDEB3
+:1004900062E370E080E090E0A1D420E040E063E51A
+:1004A0008CEA36DF81E090E090933D0280933C023D
+:1004B000089541D322982A982198299880E0D6DE81
+:1004C00026982E98EDE7F0E080818F7D8083109252
+:1004D0003D0210923C020895242F880F880F880F48
+:1004E000462F672F805C14CFCF93DF9300D0CDB71A
+:1004F000DEB7482F692F80E090E049836A83FFDEF2
+:1005000020E049816A818CE403DF6EE170E080E0E5
+:1005100090E064D481E090E00F900F90DF91CF9154
+:10052000EECE209132013091330180913A029091C8
+:100530003B022032310511F4807F089520343105CB
+:1005400011F4807E08952038310511F4807C0895DF
+:100550002115314009F480780895CF92DF92EF920F
+:10056000FF920F931F93CF93DF936C01DADF8C011F
+:10057000C0E0D0E0CC15DD0554F5D3DF7C010817D1
+:10058000190721F0C801B0DFCCDF7C01FE01E65C79
+:10059000FE4F60913A0270913B02408180E09CDF07
+:1005A0002296FE01E75CFE4F60913A0270913B0299
+:1005B000408181E091DF20913A0230913B022F5F30
+:1005C0003F4F30933B0220933A028701D3CFC801BB
+:1005D0008BDF80E1DF91CF911F910F91FF90EF9022
+:1005E000DF90CF900895462F880F880F880F20E066
+:1005F000672F805E8DCE0F931F93CF93DF938C0177
+:10060000C0E0D0E0C017D10704F560913A027091C4
+:100610003B0280E0E8DF682F8FE492E0D8DD609154
+:100620003A0270913B0281E0DEDF682F8FE492E0B6
+:10063000CEDD20913A0230913B022F5F3F4F309345
+:100640003B0220933A022296DDCF80E1DF91CF91E9
+:100650001F910F910895EF92FF920F931F93CF93E5
+:10066000DF937C0100913A0210913B02000F111FB1
+:10067000E801CE01801B910B8E159F055CF42FEFD6
+:100680004C2F6D2F80EA44DE682F8FE492E09FDDCF
+:100690002196EFCF80E1DF91CF911F910F91FF90D5
+:1006A000EF9008958FE492E0F2D5892BD9F38FE48F
+:1006B00092E026C608950F931F93CF93DF938C018A
+:1006C000CAE3D1E0CE018A539140801791071CF410
+:1006D000E9DF8993F7CFDF91CF911F910F910895B3
+:1006E000EF92FF920F931F93CF93DF93EC018B0157
+:1006F000CB01E1DF80E090E002DE8AE3E82E81E0DA
+:10070000F82E0C0F1D1FC017D10771F0F7012191B2
+:100710007F014C2F6D2F80ECFBDD6DE270E080E0FF
+:1007200090E05CD32196EFCF81E090E0E8DD80E1BE
+:10073000DF91CF911F910F91FF90EF9008950F934C
+:100740001F93CF93DF938C01C0913A02D0913B026B
+:1007500080913401909135018017910718F0CC0FEA
+:10076000DD1F0BC080913E0290913F020196909355
+:100770003F0280933E0281E10FC00132110540F03B
+:1007800060E270E0CE01ACDFA09600521109F5CF17
+:10079000B801CE01A5DF80E1DF91CF911F910F91CC
+:1007A000089580DF803231F464E18FE492E00FDD60
+:1007B00060E10AC080913E0290913F0201969093C1
+:1007C0003F0280933E0265E18FE492E000CDCF933B
+:1007D000C82F68DF803251F464E18FE492E0F7DCE7
+:1007E0006C2F8FE492E0F3DC60E10AC080913E025E
+:1007F00090913F02019690933F0280933E0265E103
+:100800008FE492E0CF91E3CC813859F020F4803826
+:1008100061F482E00BC0823831F0833931F483E532
+:1008200005C081E003C082E101C080E0D0CF84E058
+:1008300090E041DFEAE3F1E0238142816181808140
+:1008400067DDC5CFCF93DF93EC0135DF2BDF80323F
+:1008500041F464E18FE492E0BADCCE017EDE682FE1
+:100860000AC080913E0290913F02019690933F0210
+:1008700080933E0265E18FE492E0DF91CF91A7CCB7
+:10088000CF93DF930FDFC82FD0E0DC2FCC270ADF18
+:10089000C80FD11D07DF863421F4CE01DF91CF913F
+:1008A000D1CF8534B9F4CE014ADFC82FFBDE8032C8
+:1008B00031F464E18FE492E08ADC6C2F0CC080910B
+:1008C0003E0290913F02019690933F0280933E0238
+:1008D00065E101C061E18FE492E0DF91CF9177CCD7
+:1008E0000F931F93CF93DF93DDDEC82FDBDE082F3E
+:1008F000D9DE182FD7DE803259F080913E029091D8
+:100900003F02019690933F0280933E0265E115C03D
+:10091000D0E0DC2FCC27C00FD11D64E18FE492E042
+:1009200056DC163419F4CE0166DE06C0153419F40F
+:10093000CE0191DE01C081E1682F8FE492E0DF916A
+:10094000CF911F910F9143CCADDE803259F0809151
+:100950003E0290913F02019690933F0280933E02A7
+:1009600065E120C064E18FE492E031DC20E040E00A
+:1009700060E080E3CDDC682F8FE492E028DC20E0AB
+:1009800041E060E080E3C4DC682F8FE492E01FDC8C
+:1009900020E042E060E080E3BBDC682F8FE492E07F
+:1009A00016DC60E18FE492E012CC7CDE813509F444
+:1009B00077C0E0F4813409F460C050F4803309F466
+:1009C00040C0813309F442C0803209F07AC06FC060
+:1009D000853409F454C0803509F455C0823409F0D7
+:1009E00070C084E190E067DEABDC4CC0813609F476
+:1009F00053C0F0F4863509F452C0803609F44BC078
+:100A0000853509F05EC04EDE90E090933B02809306
+:100A10003A0248DE90E0982F882720913A023091E0
+:100A20003B02820F931F90933B0280933A022AC0AD
+:100A30008437A1F1853709F439C0843609F041C003
+:100A40001FCF10923F0210923E021CC02BDE80325C
+:100A500071F564E18FE492E0BADBE0914F02F0912E
+:100A600050020280F381E02D47E050E069E071E040
+:100A70008FE492E0099560E133C014DEC5CE85E0D5
+:100A800090E019DE8ECE80913C0290913D02892B40
+:100A9000C9F7D5DCF7CF06DE05DEF4CF21CFC7CE10
+:100AA00010923F0210923E0204DDECCF4DCF8091B8
+:100AB0003E0290913F02019690933F0280933E0246
+:100AC0000EC080913E0290913F02019690933F02AA
+:100AD00080933E02E7DD803211F462E101C065E1FE
+:100AE0008FE492E074CB80913C0290913D02892B7F
+:100AF00011F0589A01C0589884B58F7D84BD8091BB
+:100B00003E0290913F02892B11F0599A01C05998E9
+:100B10006CDB8FE492E0BBD3892B09F046CF0895BC
+:100B2000289A209A8CB580618CBD8CB580648CBD70
+:100B3000219A229A08958CB58F7B8CBD08951DBA99
+:100B4000109268001CBC10BE1FBA10927A0010925E
+:100B50006E0010926F00109271001092720010924D
+:100B6000C900ECEBF0E0108214B817B81AB81DB841
+:100B700010BA108215B818B81BB81EB811BA08956B
+:100B8000F894E1E6F0E020E82083108283E084BD61
+:100B900085BDEEE6F0E080818160808381E0809316
+:100BA000800092E090938100809390009093910058
+:100BB0009093C00094E09093C1008093C200809312
+:100BC000C3001092C40086E880937A0020937B00D3
+:100BD00010927E0010927D0040D178940895E93102
+:100BE00050F4EE0FE450FA4F0994E93120F4EE0F7F
+:100BF000E25DF94F09940895289A0895299A089575
+:100C00002A9A08952B9A08952F9A6AC0589A58C024
+:100C1000599A08955A9A08955B9A0895469A66C01B
+:100C2000479A6AC05E9A08955F9A6CC02C9A08959C
+:100C30002D9A4AC02E9A4EC08F9A08958E9A089582
+:100C40008D9A08958C9A0895899A0895889A08959E
+:100C50005C9A08955D9A0895769A08952898089563
+:100C6000299808952A9808952B9808952F9838C0A8
+:100C7000589826C0599808955A9808955B980895F1
+:100C8000469834C0479838C05E9808955F983AC037
+:100C90002C9808952D9818C02E981CC08F980895F0
+:100CA0008E9808958D9808958C9808958998089540
+:100CB000889808955C9808955D98089576980895A9
+:100CC000E4B5EF7DE4BD0895E0918000EF77E09317
+:100CD00080000895E0918000EF7DE093800008950A
+:100CE000E0918000E77FE09380000895E09190001C
+:100CF000EF77E09390000895E091C000EF77E093E4
+:100D0000C0000895E091C200E77FE093C20008951B
+:100D1000F89484B7877F84BF80916000806180935E
+:100D200060001092600080E29EE40197F1F781E09C
+:100D30008093E00080E28093D80080E69AEE0197ED
+:100D4000F1F7FDDE0C94003FFFCFF894F8DE80E66B
+:100D50009AEE0197F1F70C940000FFCF8F938FB7B5
+:100D60008F93809143028D5F8D37D0F4809343023F
+:100D7000809144028F5F80934402D8F080914502B5
+:100D80008F4F80934502A8F0809146028F4F809349
+:100D9000460278F0809147028F4F8093470209C046
+:100DA0008D5780934302809144028E5F809344026A
+:100DB00028F7809148028C5F8093480258F0809118
+:100DC00049028F4F8093490228F080914A028F4F49
+:100DD00080934A028F918FBF8F911895CF92DF92A7
+:100DE000EF92FF926B017C0119D09B01C114D104D9
+:100DF000E104F10471F012D0621B730B683E734082
+:100E0000A8F381E0C81AD108E108F10828513C4F45
+:100E1000EDCFFF90EF90DF90CF9008950FB6F8944C
+:100E200066B515B2709148028091490290914A02CC
+:100E30000FBE10FE05C06F3F19F07C5F8F4F9F4FB4
+:100E400011240024660F001C660F001C70290895F1
+:100E50008091E80080FFFCCF08958091D80087FF43
+:100E600002C085FF1BC081E08093D70080EA809399
+:100E7000D80082E189BD09B400FEFDCF80E98093EE
+:100E8000D8001092E00010925B0210925A02109269
+:100E900059021092E1008DE08093E20008951F92C4
+:100EA0000F920FB60F9211242F933F934F935F939E
+:100EB0006F937F938F939F93AF93BF93EF93FF9322
+:100EC0009091E1001092E10093FF11C01092E900AF
+:100ED00081E08093EB001092EC0082E28093ED00C1
+:100EE00088E08093F00010925B021092590292FF0A
+:100EF0001DC080915B028823C9F080914E02882337
+:100F000059F0815080934E02811106C084E0809395
+:100F1000E9008AE38093E80080914D02882331F054
+:100F2000815080934D02811101C0F2DE90FF0CC010
+:100F300080E18093E20010925B0281E080935A028C
+:100F400080EA8093D80019BC80915A02882379F0F6
+:100F500094FF0DC082E189BD09B400FEFDCF80E998
+:100F60008093D8008DE08093E20010925A02FF91A6
+:100F7000EF91BF91AF919F918F917F916F915F9111
+:100F80004F913F912F910F900FBE0F901F9018958A
+:100F90001F920F920FB60F921124EF92FF920F93B0
+:100FA0001F932F933F934F935F936F937F938F93F1
+:100FB0009F93AF93BF93CF93EF93FF931092E9006A
+:100FC0008091E80083FF30C1C091F1008091F10071
+:100FD000E090F100F090F1000091F1001091F1002B
+:100FE0002091F1003091F10092EF9093E80086306B
+:100FF00009F03FC086E0ECEAF0E0459155914E15CE
+:101000005F0511F0359615C0459155914017510770
+:1010100011F033960EC04591559184912F3F3105C3
+:1010200019F010F02FEF30E0281708F4822F3EEF70
+:1010300008C0815011F7F8C0891B3093E80088235D
+:10104000A9F09091E800292F2570D9F392FDEFC007
+:10105000982F813208F090E2292F222369F3FA01B8
+:1010600045914093F100AF012150F7CF903249F301
+:10107000DEC0853049F48EEF8093E800E9DE8E2DE6
+:1010800080688093E300D3C0893001F5C111CCC0E2
+:10109000E0925B021092590210924E028EEF809302
+:1010A000E80081E0EFE6F1E08093E900959190930C
+:1010B000EB00992331F095919093EC0095919093EA
+:1010C000ED008F5F853081F78EE1A9C0883049F44B
+:1010D000C03809F0A9C0BCDE80915B028093F100AA
+:1010E0007DC0813279F4C13A09F09EC0B1DEE2E000
+:1010F000F1E087E08E0F90819093F10031968E138E
+:10110000FACF6CC0803209F047C0C13209F08CC000
+:101110008091E80082FFFCCFE2E0F1E087E08E0FF3
+:101120009091F100908331968E13FACF8BEF8093DC
+:10113000E8008EEF8093E8003091020140910301B6
+:10114000809104012091050190E0A0E0B0E0DC0175
+:1011500099278827942B832BB22B86389105A105DC
+:10116000B10521F48FE080934D0261C0863991056D
+:10117000A105B10509F05BC084E08093E9009FEF11
+:101180008091EE00837039F09093E8008091E80040
+:1011900082FDFCCFF5CFD9DD823231F4C13209F0C6
+:1011A00043C0E092590204C0833221F4C132E1F518
+:1011B0004FDE14C0811116C04BDEC23851F40093CB
+:1011C000E9008091EB0085FB882780F91092E90007
+:1011D00001C080E08093F1001092F1008EEF8093C7
+:1011E000E80025C0982F9D7F9130F1F4C230E1F4E2
+:1011F000EF28D1F40F779FEF900F9630A8F49EEF71
+:101200009093E8000093E900833071F089E18093C6
+:10121000EB0081E090E001C0880F0A95EAF7809327
+:10122000EA001092EA0003C081E28093EB00FF9194
+:10123000EF91CF91BF91AF919F918F917F916F91DE
+:101240005F914F913F912F911F910F91FF90EF90E0
+:101250000F900FBE0F901F90189592DC36D843DC8C
+:10126000FECFCF93DF931F92CDB7DEB76983DC014A
+:10127000ED91FC910280F381E02D41E050E0BE0150
+:101280006F5F7F4F09950F90DF91CF910895FC011B
+:101290008FB7F89490915B02911102C090E010C05A
+:1012A00093E09093E9009091F200911109C0209190
+:1012B000E80022FFF3CF25FDF1CF2BE62093E800D5
+:1012C0008FBF2085318537FD03C09F3F09F09F5FA9
+:1012D000892F90E00895CF93DF93EC01888599855D
+:1012E00097FF09C0E881F9810680F781E02DCE01E2
+:1012F00009959987888788859985DF91CF91089589
+:10130000FC012085318537FD07C04FEF5FEF518726
+:101310004087C901992708959FB7F89480915B028F
+:10132000882369F083E08093E9002BE68091E80050
+:1013300085FD09C082FF03C02093E800F7CF9FBF5F
+:101340008FEF9FEF08958091F1002091E80025FD37
+:1013500003C02BE62093E8009FBF90E00895DF9242
+:10136000EF92FF920F931F93CF93DF938C01EB01CA
+:1013700080915B02882371F07FB7F89484E08093BA
+:10138000E90080914C02882369F08091E80085FD96
+:1013900007C07FBF81E0F801828320E030E0D1C048
+:1013A00010924C0220E030E064E080E4F82EA1EFDF
+:1013B000B0E09AE3E92EE3E0DE2E4115510509F491
+:1013C000BFC08091E400815F9091E80095FD16C058
+:1013D0007FBF9091E400981304C081E080934C0299
+:1013E00005C090915B02911104C081E0F8018283F5
+:1013F000A8C07FB7F8946093E900E6CF8091F2002F
+:101400009F2D981BE92FF0E04E175F0708F4942FEB
+:10141000E92FF0E04E1B5F0B2E0F3F1FE0E4E91BAE
+:10142000E03428F4EE0FFF27E85EF54F099480C002
+:1014300099919C9399919C9399919C9399919C9348
+:1014400099919C9399919C9399919C9399919C9338
+:1014500099919C9399919C9399919C9399919C9328
+:1014600099919C9399919C9399919C9399919C9318
+:1014700099919C9399919C9399919C9399919C9308
+:1014800099919C9399919C9399919C9399919C93F8
+:1014900099919C9399919C9399919C9399919C93E8
+:1014A00099919C9399919C9399919C9399919C93D8
+:1014B00099919C9399919C9399919C9399919C93C8
+:1014C00099919C9399919C9399919C9399919C93B8
+:1014D00099919C9399919C9399919C9399919C93A8
+:1014E00099919C9399919C9399919C9399919C9398
+:1014F00099919C9399919C9399919C9399919C9388
+:1015000099919C9399919C9399919C9399919C9377
+:1015100099919C9399919C9399919C9399919C9367
+:1015200099919C9399919C9399919C9399919C9357
+:101530008091E80085FFE092E800D0924E023DCF16
+:101540007FBFC901DF91CF911F910F91FF90EF9065
+:10155000DF9008952FEF3FEFFC01318720877DDC7E
+:101560000FB6F8948091440290914502A0914602F2
+:10157000B09147020FBE9C0180915B02882329F045
+:1015800068EC70E080E090E029CC80915A028823DA
+:1015900001F10FB6F8948091440290914502A09118
+:1015A0004602B09147020FBE40915A02442389F08F
+:1015B0000FB6F89440914402509145026091460262
+:1015C000709147020FBE481B590B4B3F510560F30A
+:1015D00011C00FB6F8948091440290914502A091F9
+:1015E0004602B09147020FBE821B930B853C994087
+:1015F00008F4C2CF08959FB7F89480915B028823C6
+:1016000021F080914E02811102C09FBF089584E0B5
+:101610008093E9008AE38093E80010924E02F5CFB0
+:10162000EACFEFE4F2E08AE0DF011D928A95E9F764
+:1016300088EE93E0A0E0B0E083839483A583B68333
+:1016400085E191E0918380830895EE0FFF1F05905F
+:0A165000F491E02D0994F894FFCF07
+:10165A00088000E10000000008415652204953501A
+:10166A0000000000003109AF09470980096B091021
+:02167A000B0063
+:00000001FF