Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: UniGraphic mbed
Revision 0:bb9076ae4c4a, committed 2016-01-27
- Comitter:
- Nrode17
- Date:
- Wed Jan 27 17:40:51 2016 +0000
- Commit message:
- Final Update for our final project
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ODBII.cpp Wed Jan 27 17:40:51 2016 +0000
@@ -0,0 +1,73 @@
+#include "ODBII.h"
+#include "globals.h"
+
+DigitalOut myled(LED1);//diagnostic LED, used to see if data is being transmitted
+Timer CANTimer;//This is used to determine whether or not the car has taken too long to respond
+
+void set_frequency(int amount)
+{
+ can2.frequency(amount);//Different ECU's operate at different frequencies, 125kbs, 25kbs, 500kbs
+}
+
+float request(char pid)
+{
+ char can_msg[8];//message to be send to CAN
+ float engine_data = 0;// this is what we get back
+
+
+ //forming the CAN message payload, uses 8 bytes, first is number of extra bytes, second is mode, third is PID, others are misc
+ can_msg[0] = 0x02;//# of extra bytes
+ can_msg[1] = 0x01;//mode
+ can_msg[2] = pid;
+ can_msg[3] = 0;
+ can_msg[4] = 0;
+ can_msg[5] = 0;
+ can_msg[6] = 0;
+ can_msg[7] = 0;
+
+ if (can2.write(CANMessage(PID_REQUEST, can_msg, 8)))
+ {
+ myled = !myled;//diagnostic LED
+ }
+ CANTimer.reset();
+ CANTimer.start();
+
+ while(CANTimer.read_us() < 200)//give it some time to respond
+ {
+ if (can2.read(can_MsgRx)) {//if you can read back, then go into it
+ pc.printf("Message read\n\r");
+
+
+ for (int i = 0; i < (int)can_MsgRx.len; i++) {
+ pc.printf("can_MsgRx.data[%d]: %x\n\r", i, can_MsgRx.data[i]);//this just prints the contents of the data back
+ }
+
+
+
+ if ((can_MsgRx.id == PID_REPLY) && (can_MsgRx.data[2] == pid)) //if the PID match, then we know we have valid data
+ {
+ pc.printf("We've made it this far\n\r");
+ switch (can_MsgRx.data[2]) //the PID is in [2], so we use that in this switch
+ {
+ case ENGINE_RPM: // ((A*256)+B)/4 is the formula for rpm
+ engine_data = ((can_MsgRx.data[3]*256) + can_MsgRx.data[4])/4;
+ break;
+
+ case ENGINE_COOLANT_TEMP: //C, this is the formula for temp
+ engine_data = can_MsgRx.data[3] - 40;
+ break;
+
+ case VEHICLE_SPEED: //[km], this is the formula for kmph
+ engine_data = can_MsgRx.data[3];
+ break;
+ }
+
+ return engine_data;//whatever we get we return back to the main.cpp
+
+ }
+
+ }
+ }
+
+ return 0;
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ODBII.h Wed Jan 27 17:40:51 2016 +0000 @@ -0,0 +1,21 @@ +#ifndef ODBII_H +#define ODBII_H + +#include "mbed.h" +//Can Speed +#define CANSPEED_125 125000 +#define CANSPEED_250 250000 +#define CANSPEED_500 500000 +//These are used to define the different PID codes as well as other codes +#define ENGINE_COOLANT_TEMP 0x05 +#define ENGINE_RPM 0x0C +#define VEHICLE_SPEED 0x0D + + +#define PID_REQUEST 0x7DF +#define PID_REPLY 0x7E8 +//the two functions +float request(char pid); +void set_frequency(int amount); + +#endif \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/UniGraphic.lib Wed Jan 27 17:40:51 2016 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/teams/GraphicsDisplay/code/UniGraphic/#87855d03d91a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/globals.cpp Wed Jan 27 17:40:51 2016 +0000 @@ -0,0 +1,5 @@ +#include "globals.h" +extern Serial pc (USBTX,USBRX); +// Used these two files to set up the CAN objects and Serial communication +CAN can2(p30, p29); +CANMessage can_MsgRx; \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/globals.h Wed Jan 27 17:40:51 2016 +0000 @@ -0,0 +1,11 @@ +#ifndef GLOBALS_H +#define GLOBALS_H + +#include "mbed.h" + +extern Serial pc; + +// Using mbed pins 29(CAN_TXD) and 30(CAN_RXD). +extern CAN can2; +extern CANMessage can_MsgRx; +#endif \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Wed Jan 27 17:40:51 2016 +0000
@@ -0,0 +1,46 @@
+#include "mbed.h"
+#include "ODBII.h"
+#include "globals.h"
+#include "pavement_48x34.h"
+#include "ILI932x.h"
+#include "Arial24x23.h"
+/*
+This is Ben and I's final project for Embedded Systems. Our goal was to create a car diagnostic system that interfaces with
+the CAN bus in all US sold cars newer than 2008. We aimed to request data such as RPM, Vehicle speed, engine temp, etc and then
+display our findings. This software was succussful in communicating with the car and reading and writing, however it fails
+to accompolish it's task when dealing with certain makes of cars, specifically Honda. Included are various PID codes, functions,
+and files that interface with a car's CAN bus system.
+*/
+PinName dataBus[]= {p30, p29, p28, p27, p26, p25, p24, p23};
+ILI932x myLCD(BUS_8, dataBus, p15, p17, p16, p14, p20, "myLCD", 240, 320);
+char orient = 3;
+void refresh(float engine);
+
+
+int main()
+{
+ set_frequency(CANSPEED_500);//set the frequency to deal with the main engine ECU
+ float engine_info;
+ myLCD.set_orientation(orient);
+ myLCD.background(Black);
+ myLCD.foreground(White);
+ myLCD.set_font((unsigned char*) Arial24x23);
+ while(1)
+ {
+ if (request(ENGINE_RPM)) //used to check if we can get valid data back
+ {
+ engine_info = request(ENGINE_RPM);//if we can, then we're all set to go!
+ refresh(engine_info);
+ }
+ wait(3);
+ }
+
+
+}
+
+void refresh(float engine)
+{
+ myLCD.locate(myLCD.width()/2, myLCD.height()/2);
+ myLCD.printf("Your info is: %f\n\r", engine);
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Wed Jan 27 17:40:51 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/6f327212ef96 \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pavement_48x34.h Wed Jan 27 17:40:51 2016 +0000
@@ -0,0 +1,207 @@
+__align(2)
+const unsigned char pavement_48x34[] = { /* 0X40,0X10,0X30,0X00,0X22,0X00,0X01,0X1B, */
+0X0F,0XB4,0XCD,0XB3,0XAD,0XAB,0X6D,0XA3,0XCB,0X82,0X6D,0X9B,0X6D,0X9B,0X4C,0X9B,
+0X0B,0X8B,0X48,0X62,0X4C,0X93,0XAD,0XA3,0XAE,0XA3,0X6C,0X9B,0X4C,0X93,0X0B,0X7B,
+0X8D,0X9B,0X4C,0X93,0XEB,0X82,0XEB,0X7A,0X8A,0X6A,0X6A,0X6A,0XCB,0X72,0XEB,0X7A,
+0X0B,0X83,0X4C,0X8B,0XAE,0X93,0XEE,0X9B,0XAE,0XA3,0XAE,0XA3,0XAE,0X9B,0XCE,0XA3,
+0XCE,0XAB,0XCA,0X6A,0X30,0X8C,0X71,0X94,0X71,0X94,0X31,0X8C,0XF0,0X83,0X10,0X8C,
+0XEF,0X83,0XD3,0XA4,0X51,0X94,0X71,0X94,0X0B,0X63,0X4C,0X93,0X0B,0X8B,0X50,0XB4,
+0X0E,0XBC,0XAD,0XAB,0X8D,0XA3,0XAD,0XAB,0X6C,0X9B,0X0F,0XAC,0XEE,0XAB,0X8D,0XA3,
+0X4C,0X93,0XAA,0X6A,0X6D,0X8B,0XAE,0XA3,0XAD,0XAB,0XCE,0XAB,0X2C,0X8B,0XAE,0X9B,
+0X6D,0X9B,0X2C,0X8B,0XCB,0X7A,0XCA,0X72,0XCB,0X72,0X49,0X5A,0XAA,0X6A,0X0C,0X73,
+0XEB,0X7A,0X6C,0X93,0X4C,0X93,0X8D,0X9B,0XCE,0XA3,0X8D,0XA3,0XAD,0XA3,0XCE,0XAB,
+0X2F,0XB4,0X4C,0X7B,0X51,0X8C,0X51,0X94,0X10,0X8C,0XF0,0X83,0X10,0X84,0X30,0X8C,
+0X51,0X94,0X92,0X9C,0X30,0X94,0X10,0X84,0X2C,0X6B,0X2C,0X8B,0XCE,0XAB,0X2F,0XBC,
+0XCE,0XB3,0XCE,0XAB,0XAD,0XAB,0XAD,0XAB,0X8D,0XA3,0XEF,0XAB,0XEE,0XAB,0XCE,0XA3,
+0X8D,0X9B,0X07,0X52,0XAE,0X9B,0X2F,0XB4,0XCE,0XAB,0XAE,0XA3,0X6D,0X93,0X4C,0X93,
+0X6D,0X9B,0X0B,0X83,0X2C,0X83,0X2C,0X83,0XEB,0X7A,0X6A,0X62,0XAA,0X6A,0X8E,0X8B,
+0X4D,0X83,0X4C,0X93,0X0B,0X8B,0X2C,0X8B,0X4C,0X93,0X8D,0X9B,0XCE,0XA3,0XAE,0XA3,
+0X70,0XC4,0XAA,0X62,0X31,0X8C,0X71,0X94,0XCF,0X83,0XAE,0X7B,0XCF,0X7B,0XCF,0X83,
+0XEF,0X83,0XAF,0X7B,0XEF,0X83,0X10,0X8C,0X2C,0X6B,0X6D,0X9B,0XCE,0XAB,0XEE,0XB3,
+0X8D,0XAB,0X6C,0X9B,0X4C,0X9B,0XCE,0XB3,0XAE,0XAB,0X8D,0XA3,0XEE,0XAB,0X8D,0XA3,
+0XAD,0XA3,0XAA,0X6A,0XF3,0XC4,0X0F,0XAC,0XAE,0XA3,0X6D,0X93,0X0B,0X83,0X8D,0X9B,
+0X6D,0X93,0XEF,0XA3,0X6D,0X93,0X2C,0X8B,0XEC,0X72,0XAB,0X62,0X0C,0X73,0X6D,0X83,
+0X8D,0X8B,0X8D,0X9B,0X4C,0X8B,0X2C,0X8B,0XEB,0X82,0X2C,0X93,0X6D,0X9B,0XEE,0XAB,
+0X12,0XCD,0X28,0X4A,0XF0,0X83,0X10,0X84,0XCF,0X83,0XCF,0X7B,0XF0,0X83,0XF0,0X83,
+0XEF,0X83,0XF0,0X83,0XCF,0X83,0X10,0X8C,0X2B,0X6B,0XAE,0X93,0XCE,0XAB,0XAD,0XAB,
+0XEF,0XAB,0XAE,0X9B,0XEE,0XAB,0XCE,0XA3,0XAE,0XA3,0XCE,0XAB,0XCE,0XA3,0XCE,0XA3,
+0XB1,0XBC,0X65,0X39,0X08,0X52,0XCB,0X72,0X6D,0X93,0X4D,0X93,0X2C,0X8B,0X4C,0X8B,
+0X8D,0X9B,0X6D,0X93,0X4C,0X93,0X4D,0X8B,0X6A,0X62,0X8A,0X5A,0XCB,0X72,0X0C,0X73,
+0X6D,0X83,0X4C,0X83,0XAA,0X62,0X0C,0X73,0X89,0X62,0XCB,0X72,0XEB,0X7A,0X2C,0X83,
+0X86,0X39,0XE3,0X20,0X6E,0X73,0X51,0X94,0XF0,0X83,0X31,0X8C,0X10,0X84,0XCF,0X83,
+0XEF,0X8B,0X51,0X94,0XF0,0X83,0X51,0X94,0X2C,0X6B,0X49,0X5A,0XCE,0XA3,0XAE,0XA3,
+0XAB,0X62,0XCF,0X8B,0X62,0X10,0XC3,0X18,0XE8,0X49,0XAB,0X62,0X29,0X52,0XC7,0X39,
+0X08,0X4A,0X08,0X42,0XA7,0X39,0XCB,0X62,0X08,0X4A,0XC3,0X20,0X05,0X29,0X86,0X39,
+0X6A,0X52,0X6A,0X5A,0XE8,0X41,0X86,0X39,0X08,0X42,0X49,0X52,0X44,0X29,0X25,0X29,
+0X08,0X52,0XE7,0X51,0X8A,0X6A,0XA6,0X41,0XC7,0X51,0X08,0X5A,0X28,0X62,0XAA,0X72,
+0X89,0X72,0X28,0X62,0XAA,0X72,0X65,0X39,0X46,0X29,0XEC,0X62,0X6A,0X52,0X49,0X4A,
+0X8A,0X5A,0X4D,0X73,0XEC,0X6A,0X08,0X4A,0XAB,0X5A,0XA7,0X39,0XCB,0X62,0X4D,0X73,
+0XCF,0X83,0X71,0X9C,0X45,0X29,0XC8,0X39,0XCF,0X83,0X0F,0X8C,0X30,0X8C,0X30,0X8C,
+0XCF,0X83,0XAE,0X7B,0X8E,0X7B,0X8E,0X7B,0X6D,0X7B,0X82,0X10,0XCB,0X62,0X6D,0X73,
+0X2C,0X6B,0XCB,0X62,0XAB,0X5A,0XEB,0X62,0X4D,0X73,0X2C,0X6B,0X8A,0X52,0XEB,0X7A,
+0X0B,0X83,0X4C,0X8B,0X4C,0X93,0X6D,0X93,0X4C,0X93,0XAE,0XA3,0X0E,0XAC,0XAD,0XA3,
+0X8C,0XA3,0X6C,0X9B,0X4C,0X93,0XA9,0X72,0X8B,0X5A,0X30,0X8C,0X10,0X8C,0XB2,0XA4,
+0X91,0X9C,0X91,0X9C,0X71,0X94,0XEF,0X83,0X6D,0X7B,0X10,0X8C,0X91,0X9C,0X50,0X9C,
+0XCF,0X8B,0XAE,0X83,0XE7,0X41,0X30,0X8C,0X50,0X94,0X30,0X8C,0X30,0X94,0X0F,0X8C,
+0X6D,0X73,0X6D,0X73,0X6D,0X73,0XEF,0X83,0XCF,0X83,0XC3,0X18,0X6D,0X73,0X4D,0X73,
+0X6D,0X73,0X0C,0X6B,0XEC,0X6A,0X0C,0X6B,0X2C,0X6B,0X4D,0X73,0X89,0X5A,0XEB,0X7A,
+0X0B,0X83,0X0B,0X7B,0XEB,0X82,0X0B,0X83,0X2C,0X93,0X2F,0XB4,0XCE,0XAB,0XAD,0XA3,
+0X6C,0XA3,0XEB,0X8A,0X6C,0X9B,0X47,0X5A,0X50,0X94,0X71,0X9C,0X71,0X94,0X91,0X9C,
+0XD2,0XA4,0X91,0X9C,0X10,0X8C,0X10,0X8C,0X30,0X94,0X71,0X9C,0X71,0X9C,0X30,0X94,
+0X0F,0X8C,0X0F,0X94,0X69,0X52,0XEF,0X8B,0X10,0X8C,0X30,0X8C,0XCE,0X83,0XCE,0X83,
+0XAE,0X7B,0XEF,0X83,0XCF,0X83,0X30,0X8C,0X0F,0X8C,0X45,0X29,0X6D,0X73,0X2C,0X6B,
+0X2C,0X6B,0X2D,0X73,0X2C,0X73,0X2C,0X6B,0X2C,0X73,0X2C,0X6B,0X8A,0X5A,0XCB,0X7A,
+0X0B,0X7B,0XCF,0X9B,0X6D,0X93,0XAD,0X9B,0X8D,0X9B,0XAD,0XA3,0XAD,0XA3,0XCE,0XAB,
+0X4C,0X9B,0X2C,0X93,0X70,0XB4,0X88,0X62,0X10,0X8C,0X51,0X94,0X71,0X94,0X91,0X9C,
+0X91,0X9C,0X92,0X9C,0X51,0X94,0X0F,0X8C,0X51,0X94,0X71,0X9C,0X30,0X94,0X50,0X94,
+0XEF,0X8B,0XCE,0X8B,0X28,0X4A,0XEF,0X8B,0XEF,0X8B,0XEF,0X8B,0X8E,0X7B,0XAF,0X83,
+0XCF,0X83,0XEF,0X8B,0X30,0X8C,0XEF,0X8B,0XAE,0X7B,0X44,0X29,0X2C,0X6B,0X4D,0X73,
+0X6D,0X73,0X2C,0X6B,0XAB,0X62,0XAA,0X5A,0X8E,0X7B,0XCF,0X83,0X69,0X52,0XCA,0X7A,
+0X4C,0X8B,0XAD,0X9B,0XAD,0XA3,0X8D,0X9B,0X6C,0X9B,0X8D,0X93,0XCE,0XAB,0XCE,0XAB,
+0X8D,0XA3,0XAD,0XAB,0X0F,0XB4,0XA9,0X6A,0XF0,0X8B,0X92,0X9C,0X71,0X9C,0X50,0X94,
+0X51,0X94,0X91,0X9C,0X51,0X94,0X30,0X8C,0XD2,0XA4,0XB2,0XA4,0X91,0X9C,0X50,0X9C,
+0X6E,0X7B,0XAE,0X8B,0X08,0X42,0X50,0X94,0X51,0X94,0XAE,0X7B,0X8E,0X7B,0X10,0X8C,
+0X50,0X94,0X30,0X8C,0XEF,0X83,0XCE,0X83,0X10,0X8C,0X65,0X31,0XAB,0X5A,0X8E,0X7B,
+0X4D,0X73,0X0C,0X6B,0XCB,0X62,0XCB,0X62,0XAE,0X7B,0X8E,0X7B,0XCB,0X62,0X0B,0X83,
+0X4C,0X8B,0X6C,0X93,0X8D,0X9B,0X4C,0X93,0X2C,0X8B,0XEE,0XA3,0X0E,0XB4,0XCD,0XAB,
+0XCD,0XA3,0XCE,0XAB,0XEE,0XB3,0XA9,0X72,0X10,0X8C,0X51,0X94,0X30,0X94,0XF0,0X8B,
+0X71,0X9C,0X30,0X94,0X51,0X94,0X30,0X94,0XB2,0XA4,0X91,0X9C,0X91,0XA4,0X10,0X8C,
+0XAE,0X7B,0X50,0X9C,0X69,0X52,0XD2,0XA4,0X30,0X94,0X10,0X8C,0X51,0X94,0XEF,0X8B,
+0XEF,0X83,0XAE,0X7B,0XAE,0X7B,0XEF,0X83,0X10,0X8C,0X08,0X42,0X6D,0X7B,0XAE,0X83,
+0X6D,0X73,0X0C,0X6B,0X0C,0X6B,0XEC,0X6A,0X2C,0X6B,0X2C,0X73,0X4D,0X73,0X2D,0X83,
+0X6D,0X8B,0X6D,0X93,0X2C,0X8B,0X4C,0X8B,0XAD,0X9B,0XEE,0XAB,0XEE,0XAB,0X8C,0XA3,
+0X4C,0X9B,0X8D,0XA3,0XCE,0XB3,0XAA,0X72,0X0C,0X6B,0X71,0X94,0X30,0X8C,0X30,0X8C,
+0XEF,0X8B,0X10,0X8C,0X51,0X9C,0X51,0X9C,0X71,0X9C,0X51,0X9C,0X30,0X94,0XAE,0X83,
+0X30,0X94,0X91,0XA4,0X4C,0X73,0X71,0X9C,0X0F,0X8C,0XCF,0X83,0XCF,0X83,0X30,0X8C,
+0XCF,0X83,0X6D,0X73,0XEF,0X83,0XCF,0X83,0XAE,0X83,0X66,0X31,0X6D,0X73,0XAE,0X83,
+0X2C,0X6B,0X4D,0X73,0X6D,0X7B,0X4D,0X7B,0XEB,0X62,0X8E,0X7B,0XEE,0X8B,0X66,0X39,
+0X2C,0X83,0X2C,0X83,0X2C,0X83,0XCE,0X9B,0XCE,0XA3,0X0F,0XAC,0XEF,0XAB,0X0B,0X8B,
+0X8D,0X9B,0X2F,0XB4,0XCD,0XB3,0XEA,0X7A,0XCF,0X83,0X30,0X8C,0XEF,0X8B,0X51,0X94,
+0X30,0X94,0X92,0X9C,0X51,0X9C,0X30,0X94,0X10,0X8C,0X30,0X94,0X91,0X9C,0X10,0X8C,
+0XCF,0X83,0X71,0X9C,0X69,0X52,0X30,0X8C,0XCF,0X83,0XCF,0X83,0XCF,0X83,0XEF,0X8B,
+0X10,0X8C,0XEF,0X83,0X10,0X8C,0X10,0X8C,0XAE,0X7B,0X04,0X21,0XAE,0X83,0X6D,0X73,
+0X0C,0X63,0X10,0X8C,0XCF,0X8B,0X6D,0X7B,0X0C,0X6B,0XAE,0X83,0XCE,0X83,0X49,0X62,
+0X2C,0X8B,0X0C,0X83,0XAE,0X9B,0XCE,0X9B,0XAD,0XA3,0XAD,0XA3,0XAD,0X9B,0X8D,0XA3,
+0XB1,0XBC,0XCE,0XAB,0XCE,0XB3,0X68,0X62,0XAE,0X83,0X10,0X8C,0XEF,0X8B,0X91,0X9C,
+0X91,0X9C,0X51,0X94,0X30,0X94,0XCF,0X83,0X30,0X94,0X71,0X9C,0X71,0X9C,0X50,0X94,
+0X10,0X8C,0X75,0XBD,0X29,0X4A,0XAE,0X7B,0X8E,0X7B,0XAE,0X7B,0XCF,0X83,0X0F,0X8C,
+0XEF,0X8B,0XEF,0X8B,0X10,0X8C,0X10,0X8C,0XEF,0X8B,0X86,0X39,0X8E,0X7B,0X6D,0X73,
+0X4D,0X73,0XCE,0X83,0XAE,0X83,0X4D,0X7B,0X4D,0X73,0X4D,0X73,0XD2,0XA4,0X08,0X5A,
+0XEB,0X82,0X6D,0X8B,0X50,0XAC,0XEE,0XAB,0XCE,0XA3,0XEE,0XAB,0XAD,0XAB,0X6C,0XA3,
+0XEE,0XAB,0XCD,0XB3,0X50,0XBC,0XCA,0X72,0XF0,0X8B,0X10,0X8C,0XEF,0X83,0X71,0X9C,
+0X91,0X9C,0X30,0X94,0XEF,0X8B,0X6E,0X7B,0XCF,0X83,0X71,0X9C,0X50,0X9C,0X30,0X94,
+0X92,0XA4,0X54,0XBD,0X6D,0X73,0XD3,0XA4,0X8E,0X7B,0X0F,0X8C,0XF3,0XAC,0X71,0X9C,
+0X10,0X8C,0XEF,0X83,0XEF,0X83,0X51,0X94,0X91,0X9C,0X85,0X31,0XCB,0X62,0X2C,0X6B,
+0X4D,0X73,0XCF,0X83,0X4D,0X73,0X2C,0X73,0X4D,0X73,0X6D,0X73,0X2F,0X8C,0XE7,0X49,
+0XEB,0X7A,0XAE,0X9B,0X50,0XAC,0X0F,0XAC,0X4F,0XB4,0XAD,0XA3,0XCD,0XAB,0X8D,0XA3,
+0XCE,0XAB,0XEE,0XAB,0XD1,0XD4,0XEA,0X6A,0X0C,0X6B,0X10,0X8C,0X30,0X8C,0XB2,0XA4,
+0XD2,0XA4,0X10,0X8C,0X8E,0X7B,0XCF,0X83,0X30,0X94,0X71,0X9C,0X50,0X94,0XB2,0XA4,
+0X49,0X52,0X24,0X29,0XE3,0X18,0X86,0X31,0X89,0X5A,0X28,0X4A,0X49,0X52,0X69,0X52,
+0X28,0X4A,0X8A,0X5A,0XE7,0X41,0X08,0X42,0X45,0X31,0X41,0X08,0X61,0X10,0XE7,0X41,
+0X08,0X42,0X28,0X4A,0XC7,0X41,0X65,0X31,0X85,0X31,0XE7,0X41,0XA6,0X39,0XC3,0X20,
+0X28,0X52,0X08,0X52,0XCA,0X6A,0X48,0X5A,0X89,0X5A,0XE7,0X49,0X69,0X5A,0X2C,0X7B,
+0XCA,0X6A,0X89,0X5A,0X28,0X52,0X66,0X31,0XC7,0X41,0XCB,0X62,0X69,0X52,0XCB,0X62,
+0XEB,0X6A,0X48,0X52,0X65,0X31,0XA6,0X39,0X08,0X42,0X69,0X52,0X89,0X5A,0XCA,0X62,
+0X6D,0X93,0X4C,0X83,0X4C,0X8B,0XEB,0X7A,0X0F,0X9C,0XA6,0X39,0X2C,0X7B,0XAE,0X8B,
+0XEF,0X93,0X0F,0X8C,0X8E,0X83,0X6E,0X7B,0XCF,0X83,0X2D,0X73,0X6D,0X7B,0XEF,0X8B,
+0X25,0X29,0XCB,0X72,0XCE,0XA3,0X2C,0X93,0X4C,0X93,0X6D,0X9B,0X8D,0XA3,0X4C,0X9B,
+0X2C,0X8B,0XCB,0X7A,0X0C,0X83,0XC7,0X49,0X09,0X42,0X4D,0X73,0X0F,0X8C,0X0F,0X8C,
+0XAF,0X83,0XCF,0X83,0X71,0X9C,0X92,0X9C,0X71,0X9C,0X30,0X94,0X0F,0X94,0X30,0X9C,
+0X30,0X94,0XCE,0X83,0X08,0X52,0X8D,0X93,0X2C,0X8B,0X2C,0X83,0X8D,0X93,0XEE,0X9B,
+0X0F,0XA4,0XAE,0X9B,0X4C,0X8B,0X8E,0X93,0XAE,0X93,0XAA,0X62,0X50,0XA4,0X8E,0X83,
+0X8E,0X83,0X0F,0X8C,0XAE,0X83,0X10,0X8C,0X30,0X94,0X0F,0X94,0XCE,0X83,0X10,0X8C,
+0X08,0X4A,0X2C,0X8B,0X8D,0XA3,0X2C,0X9B,0XAE,0XA3,0X50,0XB4,0XEE,0XAB,0X6D,0X9B,
+0XEB,0X8A,0XEB,0X82,0X4C,0X8B,0X08,0X52,0XCF,0X83,0X10,0X94,0XEF,0X93,0XCF,0X8B,
+0X10,0X94,0X91,0X9C,0X51,0X9C,0X71,0X9C,0X91,0XA4,0X30,0X94,0X51,0X9C,0X30,0X9C,
+0X50,0X9C,0XEF,0X8B,0XAA,0X6A,0X8D,0X93,0X4D,0X8B,0XAD,0X9B,0XAD,0X93,0XCE,0XA3,
+0X0F,0XA4,0XAE,0X9B,0XAE,0X9B,0XAE,0X9B,0XEF,0XA3,0X69,0X5A,0X30,0X9C,0XCF,0X8B,
+0XB2,0XA4,0X50,0X9C,0XEF,0X8B,0X0F,0X94,0X30,0X94,0XEF,0X8B,0XAE,0X83,0X0C,0X6B,
+0XC7,0X41,0X89,0X72,0X6C,0X9B,0X4C,0X9B,0X2F,0XAC,0XEE,0XAB,0XCE,0XA3,0X8D,0X93,
+0X6D,0X93,0X6C,0X93,0X6D,0X8B,0XC6,0X41,0XCF,0X83,0X0F,0X94,0XEF,0X93,0XAE,0X8B,
+0XEF,0X93,0X30,0X9C,0X30,0X9C,0X0F,0X94,0XCE,0X8B,0XEF,0X8B,0X91,0XA4,0X91,0XA4,
+0X51,0X9C,0X8D,0X7B,0X49,0X5A,0XAE,0X93,0XEF,0X9B,0XCE,0X9B,0X6D,0X93,0X6D,0X8B,
+0XCE,0X9B,0XCE,0X9B,0XAE,0X93,0XCE,0X9B,0XEE,0XA3,0X69,0X5A,0XEF,0X93,0XEF,0X93,
+0X50,0X9C,0X71,0X9C,0XEF,0X8B,0X6D,0X7B,0X0F,0X8C,0XAE,0X83,0XAE,0X83,0X4D,0X73,
+0XC7,0X41,0XCA,0X82,0XEB,0X8A,0X4C,0X93,0X0F,0XB4,0X71,0XBC,0X8E,0X9B,0XEB,0X7A,
+0X6D,0X93,0X2B,0X83,0XAA,0X72,0X8A,0X62,0X6E,0X7B,0X30,0X94,0XEF,0X93,0XEF,0X93,
+0X0F,0X94,0X0F,0X94,0XCF,0X8B,0XCF,0X8B,0X0F,0X94,0X30,0X9C,0X71,0XA4,0X71,0XA4,
+0X51,0X9C,0XEF,0X83,0X8A,0X62,0XEF,0XA3,0XCE,0X9B,0XAE,0X9B,0X2C,0X83,0XCE,0X9B,
+0X0F,0XA4,0XAD,0X9B,0X6D,0X93,0X6D,0X8B,0XCE,0X9B,0X48,0X5A,0X0F,0X94,0X71,0XA4,
+0X30,0X9C,0X71,0X9C,0X8D,0X7B,0XEF,0X8B,0X30,0X9C,0XEF,0X8B,0X8E,0X83,0X0F,0X8C,
+0X49,0X52,0X8A,0X72,0X2C,0X93,0X6D,0X9B,0XAE,0XA3,0X8D,0X9B,0X2C,0X8B,0X0C,0X83,
+0X0B,0X83,0X0B,0X83,0X0C,0X7B,0XCA,0X6A,0X30,0X94,0X50,0X9C,0XEF,0X93,0XCF,0X8B,
+0XCF,0X8B,0XEF,0X8B,0X30,0X9C,0XCF,0X8B,0XEF,0X93,0X0F,0X94,0X71,0XA4,0X10,0X94,
+0X30,0X9C,0XAE,0X83,0XEB,0X72,0X2F,0XAC,0X2F,0XAC,0XAE,0X9B,0XCE,0X93,0XEF,0XA3,
+0XEE,0X9B,0X0C,0X83,0XEB,0X7A,0XCE,0X93,0XEE,0X9B,0X28,0X52,0X30,0X9C,0XEF,0X8B,
+0XEF,0X8B,0XEF,0X8B,0X30,0X94,0X30,0X94,0X30,0X9C,0X30,0X94,0XCF,0X83,0XCE,0X83,
+0XA6,0X39,0XEB,0X7A,0X8E,0X9B,0X8D,0X9B,0X6D,0X9B,0X6D,0X9B,0XCB,0X7A,0X4C,0X8B,
+0X2B,0X8B,0X8D,0X9B,0X8D,0X93,0X0B,0X7B,0XCF,0X83,0X0F,0X94,0XEF,0X8B,0XCF,0X8B,
+0XEF,0X8B,0X10,0X94,0X10,0X94,0X30,0X94,0X30,0X94,0X30,0X9C,0XEF,0X93,0XEF,0X93,
+0X30,0X94,0XAD,0X83,0X8A,0X6A,0X8D,0X93,0XAE,0X93,0XAE,0X93,0XAE,0X9B,0XEF,0XA3,
+0XAD,0X93,0X4D,0X8B,0XCE,0X93,0XEE,0X9B,0XEF,0XA3,0X0B,0X73,0XAE,0X8B,0XCE,0X8B,
+0XCF,0X8B,0X30,0X94,0X50,0X94,0X10,0X94,0XAE,0X83,0X8E,0X7B,0X8E,0X7B,0X30,0X94,
+0XE8,0X41,0X6D,0X93,0XAD,0XA3,0X8D,0X9B,0X8D,0X9B,0XEB,0X82,0X8D,0X93,0X4C,0X8B,
+0X8D,0X9B,0XCE,0XA3,0X8D,0X93,0XEA,0X72,0X0D,0X6B,0XEF,0X8B,0XEF,0X93,0XAE,0X8B,
+0XEF,0X8B,0X30,0X9C,0X0F,0X94,0X30,0X94,0X91,0XA4,0X30,0X9C,0X50,0X9C,0X30,0X9C,
+0X71,0XA4,0XB1,0XA4,0X69,0X62,0X4C,0X8B,0X4D,0X8B,0XAE,0X9B,0XCE,0X9B,0X0F,0XA4,
+0XEF,0X9B,0XCE,0X9B,0X0F,0XA4,0X30,0XAC,0XEF,0XA3,0X69,0X5A,0X6D,0X7B,0X71,0X9C,
+0X51,0X9C,0X91,0XA4,0X10,0X94,0XAE,0X83,0X2C,0X73,0X8E,0X7B,0X6E,0X7B,0XEF,0X8B,
+0X08,0X4A,0X2C,0X8B,0XAD,0XA3,0XAD,0XA3,0XCE,0XA3,0X8D,0X9B,0X8D,0X93,0X8D,0X9B,
+0X8D,0X9B,0X8D,0X9B,0X8D,0X9B,0X88,0X62,0X4D,0X73,0XCF,0X8B,0XEF,0X93,0XCF,0X8B,
+0X71,0X9C,0X71,0X9C,0XEF,0X8B,0X0F,0X94,0X30,0X9C,0XEF,0X93,0X30,0X94,0X30,0X9C,
+0X50,0X9C,0X0F,0X8C,0X69,0X62,0X6D,0X8B,0XAE,0X93,0XCE,0X9B,0X0F,0XA4,0XEF,0XA3,
+0X2F,0XA4,0X0F,0XA4,0XCE,0X9B,0XCE,0X9B,0X0F,0XA4,0XE7,0X49,0X30,0X9C,0X71,0X9C,
+0X92,0X9C,0X91,0XA4,0X10,0X94,0X0F,0X8C,0XAE,0X83,0X51,0X9C,0XAE,0X83,0XAE,0X7B,
+0XC7,0X39,0X2C,0X8B,0X6D,0X9B,0X6D,0X9B,0X8D,0X9B,0X4C,0X8B,0X6C,0X93,0X8D,0XA3,
+0X2B,0X93,0X4C,0X93,0X6D,0X93,0X0A,0X73,0X4D,0X7B,0XCF,0X83,0XCF,0X8B,0XEF,0X93,
+0X0F,0X94,0X50,0X9C,0X30,0X94,0XEF,0X8B,0X10,0X8C,0X0F,0X94,0X50,0X9C,0X0F,0X94,
+0X10,0X94,0X0F,0X8C,0X69,0X62,0X8E,0X93,0XAE,0X93,0XCE,0X9B,0X0F,0XA4,0XEF,0XA3,
+0X0F,0XA4,0XEE,0XA3,0X0F,0XA4,0XCE,0X9B,0X91,0XB4,0XEB,0X62,0X92,0XA4,0X91,0XA4,
+0XD2,0XA4,0X92,0X9C,0X30,0X94,0X0F,0X8C,0XAE,0X83,0XCE,0X83,0XCF,0X83,0X51,0X94,
+0X8A,0X5A,0X4C,0X93,0XCB,0X82,0X6D,0X9B,0X4D,0X93,0X0C,0X83,0X6C,0X9B,0X4C,0X93,
+0X8D,0X9B,0XEF,0XAB,0XEF,0XA3,0X0E,0X94,0X4D,0X73,0X10,0X8C,0XEF,0X8B,0XCF,0X8B,
+0X30,0X94,0X50,0X9C,0X30,0X94,0XEF,0X8B,0XEF,0X8B,0X30,0X94,0X71,0X9C,0X51,0X9C,
+0X71,0X9C,0X6F,0X9C,0XEB,0X72,0X8E,0X8B,0XEF,0X9B,0X50,0XAC,0X0F,0XA4,0X0F,0XA4,
+0X48,0X5A,0X48,0X5A,0XCA,0X72,0XAA,0X6A,0XCA,0X6A,0X04,0X21,0X07,0X4A,0X69,0X52,
+0XCA,0X62,0X4C,0X73,0X6D,0X7B,0XCB,0X62,0XCB,0X62,0X0C,0X6B,0X69,0X52,0X2C,0X6B,
+0XE3,0X20,0X45,0X39,0XC7,0X49,0XC7,0X49,0X08,0X5A,0X49,0X62,0XCA,0X72,0XAA,0X72,
+0X07,0X5A,0X69,0X6A,0X2B,0X7B,0X65,0X31,0XE3,0X20,0X89,0X5A,0X49,0X5A,0XEB,0X62,
+0X2C,0X73,0XCA,0X62,0X0B,0X6B,0X2C,0X73,0X0C,0X6B,0X2C,0X73,0X6D,0X7B,0XCB,0X62,
+0X4C,0X73,0XA5,0X31,0XC7,0X41,0X2C,0X7B,0XCB,0X6A,0X4C,0X83,0X2C,0X7B,0X89,0X6A,
+0XCE,0XAB,0X0F,0XB4,0X8D,0XA3,0X4C,0X93,0XAE,0XA3,0X8D,0X9B,0XAD,0X9B,0X08,0X5A,
+0X0C,0X8B,0XC7,0X49,0XA7,0X41,0X09,0X52,0X0B,0X8B,0XAD,0XA3,0X8D,0XA3,0X0B,0X8B,
+0XCB,0X7A,0X69,0X72,0X89,0X72,0X08,0X52,0XE3,0X28,0X62,0X08,0X26,0X29,0X69,0X62,
+0XEA,0X7A,0X49,0X62,0XE7,0X51,0XEB,0X82,0XEB,0X82,0X0B,0X83,0X2C,0X8B,0X2C,0X8B,
+0XAE,0X93,0XA6,0X39,0XAB,0X5A,0X2D,0X6B,0XAE,0X7B,0XCF,0X83,0X6D,0X73,0XF0,0X83,
+0X8E,0X7B,0X10,0X8C,0X50,0X94,0X30,0X94,0XC3,0X18,0XA7,0X41,0XEB,0X7A,0XAE,0X9B,
+0X4F,0XBC,0X0F,0XB4,0X0E,0XB4,0XEE,0XB3,0XEE,0XB3,0X0F,0XB4,0X8D,0XA3,0X0B,0X93,
+0X8D,0X9B,0X48,0X62,0X49,0X6A,0XAB,0X7A,0X2B,0X93,0X6C,0X9B,0X8D,0XA3,0X8D,0X9B,
+0X2C,0X93,0X0C,0X8B,0XCB,0X7A,0XEB,0X82,0XAA,0X6A,0X86,0X39,0X69,0X5A,0XEB,0X7A,
+0X0B,0X83,0X4C,0X93,0X4C,0X93,0X6D,0X9B,0X4C,0X93,0XAD,0XA3,0XAD,0XAB,0XCE,0XAB,
+0X2F,0XB4,0XEB,0X6A,0X10,0X8C,0X30,0X8C,0X71,0X94,0X91,0X9C,0X10,0X8C,0X51,0X94,
+0X30,0X8C,0X51,0X94,0X10,0X94,0X10,0X8C,0X08,0X42,0X8A,0X72,0XEE,0XB3,0X50,0XBC,
+0X0F,0XBC,0X0E,0XB4,0XAE,0XAB,0X8D,0XA3,0X0F,0XB4,0XCE,0XAB,0X8D,0XA3,0X2C,0X93,
+0X2F,0XB4,0XC7,0X49,0X6C,0X9B,0X4C,0X9B,0X2C,0X93,0X6D,0X9B,0X6D,0X9B,0X6C,0X9B,
+0X2C,0X93,0XCB,0X7A,0XCB,0X7A,0X4D,0X8B,0XCB,0X7A,0XEB,0X7A,0XEB,0X72,0X6D,0X83,
+0X6D,0X8B,0XAD,0X9B,0XAD,0XA3,0X4C,0X93,0XAE,0X9B,0X2F,0XB4,0XEE,0XB3,0XAD,0XAB,
+0XEE,0XB3,0XCA,0X62,0X71,0X94,0XB2,0X9C,0XF3,0XA4,0X92,0X9C,0X10,0X8C,0X10,0X8C,
+0X71,0X9C,0X51,0X94,0X0F,0X8C,0X30,0X94,0X89,0X5A,0XCE,0XAB,0X0E,0XB4,0X2F,0XBC,
+0XCE,0XAB,0XAD,0XAB,0X6D,0X9B,0X2F,0XB4,0X0F,0XBC,0XCE,0XAB,0XEE,0XAB,0XCE,0XA3,
+0XEE,0XAB,0X89,0X6A,0X8D,0XA3,0X6D,0X9B,0XEF,0XA3,0X70,0XB4,0X0F,0XB4,0X8D,0XA3,
+0X2C,0X93,0XEB,0X82,0X0C,0X8B,0X8D,0X9B,0XCB,0X72,0X0B,0X7B,0X4C,0X83,0X6D,0X8B,
+0X8D,0X93,0X4C,0X93,0XAD,0X9B,0X2C,0X93,0XAE,0X9B,0X2F,0XB4,0X0F,0XB4,0X2C,0X93,
+0X30,0XB4,0X69,0X52,0X92,0X9C,0XB2,0X9C,0X91,0X9C,0XEF,0X83,0XEF,0X83,0X30,0X8C,
+0X92,0X9C,0XEF,0X83,0XEF,0X8B,0XEF,0X8B,0X6D,0X73,0XAE,0XA3,0X2F,0XBC,0X0F,0XB4,
+0XAD,0XAB,0X8D,0XA3,0X0F,0XB4,0X0F,0XB4,0XCE,0XAB,0XAD,0XA3,0XAD,0XA3,0XEE,0XAB,
+0X0F,0XAC,0X48,0X62,0X8D,0XA3,0X8D,0X9B,0XEE,0XAB,0XEE,0XB3,0X50,0XB4,0X4C,0X93,
+0X2C,0X93,0X2C,0X93,0X6C,0X9B,0X0C,0X8B,0XCB,0X72,0X0B,0X7B,0X2C,0X83,0X4C,0X8B,
+0X4C,0X93,0X2C,0X8B,0X0B,0X8B,0X4C,0X93,0X6D,0X9B,0XEE,0XAB,0XAD,0XA3,0X8D,0XA3,
+0X0F,0XB4,0XCA,0X62,0X91,0X94,0X92,0X9C,0X30,0X8C,0XEF,0X83,0X6E,0X73,0X51,0X94,
+0XCF,0X83,0XAE,0X83,0XEF,0X83,0XEF,0X83,0X2C,0X6B,0X70,0XBC,0X50,0XBC,0X6D,0XA3,
+0X8D,0XA3,0XCD,0XB3,0XCD,0XB3,0XCE,0XAB,0X8D,0XA3,0X0B,0X93,0X2C,0X93,0XAD,0XA3,
+0X8D,0X9B,0X89,0X6A,0X8D,0X9B,0X8D,0XA3,0XCE,0XA3,0XAD,0XA3,0X6D,0X9B,0XCB,0X7A,
+0X2C,0X8B,0XAD,0X9B,0X4C,0X9B,0X0C,0X8B,0X8A,0X62,0X49,0X5A,0X2C,0X83,0X4C,0X8B,
+0X2C,0X8B,0X2C,0X83,0X2C,0X83,0X6D,0X93,0XEF,0XA3,0X0F,0XAC,0XEF,0XA3,0XCE,0XA3,
+0X0F,0XB4,0XEB,0X6A,0X92,0X94,0X51,0X94,0X51,0X94,0X10,0X8C,0X10,0X8C,0X10,0X8C,
+0XCF,0X83,0XCF,0X7B,0XF0,0X83,0X10,0X8C,0X6D,0X73,0XCE,0XAB,0X4D,0X8B,0X2C,0X93,
+};