diff --git a/Controle_moteurs_PID/MDK-ARM/GM6020_demo.uvoptx b/Controle_moteurs_PID/MDK-ARM/GM6020_demo.uvoptx
index 83f8419f4f071435d4618771fa30d6cff224cc7b..d9d8b97d5ab737845206b9ab5618d8468eff0b20 100644
--- a/Controle_moteurs_PID/MDK-ARM/GM6020_demo.uvoptx
+++ b/Controle_moteurs_PID/MDK-ARM/GM6020_demo.uvoptx
@@ -150,7 +150,7 @@
         <SetRegEntry>
           <Number>0</Number>
           <Key>ST-LINKIII-KEIL_SWO</Key>
-          <Name>-U-O142 -O2254 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(2BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_2048.FLM -FS08000000 -FL0200000 -FP0($$Device:STM32F427IIHx$CMSIS\Flash\STM32F4xx_2048.FLM)</Name>
+          <Name>-U-O142 -O2254 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(2BA01477) -L00(0) -TO131090 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_2048.FLM -FS08000000 -FL0200000 -FP0($$Device:STM32F427IIHx$CMSIS\Flash\STM32F4xx_2048.FLM)</Name>
         </SetRegEntry>
       </TargetDriverDllRegistry>
       <Breakpoint/>
@@ -182,9 +182,9 @@
       <DebugFlag>
         <trace>0</trace>
         <periodic>1</periodic>
-        <aLwin>0</aLwin>
+        <aLwin>1</aLwin>
         <aCover>0</aCover>
-        <aSer1>1</aSer1>
+        <aSer1>0</aSer1>
         <aSer2>0</aSer2>
         <aPa>0</aPa>
         <viewmode>1</viewmode>
@@ -199,7 +199,7 @@
         <aLa>0</aLa>
         <aPa1>0</aPa1>
         <AscS4>0</AscS4>
-        <aSer4>0</aSer4>
+        <aSer4>1</aSer4>
         <StkLoc>0</StkLoc>
         <TrcWin>0</TrcWin>
         <newCpu>0</newCpu>
@@ -329,7 +329,11 @@
   </Group>
 
   <Group>
+<<<<<<< HEAD
     <GroupName>Drivers/CMSIS</GroupName>
+=======
+    <GroupName>Drivers/STM32F4xx_HAL_Driver</GroupName>
+>>>>>>> Board-B-Motors
     <tvExp>0</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
diff --git a/Controle_moteurs_PID/MDK-ARM/GM6020_demo/GM6020_demo.hex b/Controle_moteurs_PID/MDK-ARM/GM6020_demo/GM6020_demo.hex
index 0fa80604bad020ea184e0e9d48f42b7af1c97dc1..dda9683a9733fcc5be27d85de20a99a04480cf67 100644
--- a/Controle_moteurs_PID/MDK-ARM/GM6020_demo/GM6020_demo.hex
+++ b/Controle_moteurs_PID/MDK-ARM/GM6020_demo/GM6020_demo.hex
@@ -1,8 +1,15 @@
 :020000040800F2
+<<<<<<< HEAD
 :1000000088070020C10100081B170008F914000828
 :1000100019170008F10200082D1B0008000000005D
 :10002000000000000000000000000000E7170008CA
 :100030000D03000800000000E5170008E91700089C
+=======
+:1000000048060020C1010008431700082115000818
+:1000100041170008CD020008891A000800000000FE
+:10002000000000000000000000000000671700084A
+:10003000E9020008000000006517000869170008C1
+>>>>>>> Board-B-Motors
 :10004000DB010008DB010008DB010008DB01000820
 :10005000DB010008DB010008DB010008DB01000810
 :10006000DB010008DB010008DB010008DB01000800
@@ -26,7 +33,11 @@
 :10018000DB010008DB010008DB010008DB010008DF
 :10019000DB010008DB010008DB010008DB010008CF
 :1001A0000000000000000000DB010008DFF80CD0B8
+<<<<<<< HEAD
 :1001B00000F08CF800480047D11B00088807002099
+=======
+:1001B00000F07AF800480047551B00084806002068
+>>>>>>> Board-B-Motors
 :1001C0000648804706480047FEE7FEE7FEE7FEE7F1
 :1001D000FEE7FEE7FEE7FEE7FEE7FEE77118000830
 :1001E000AD0100082DE9F05F0546002092469B46D0
@@ -35,6 +46,7 @@
 :1002100011461846224600F03AF82D1A67EB0108FD
 :100220004F4622460120002100F031F817EB00096B
 :100230004E41201EA4F10104DFDC484631462A4627
+<<<<<<< HEAD
 :100240004346BDE8F09F40EA01039B0703D009E065
 :1002500008C9121F08C0042AFAD203E011F8013BB2
 :1002600000F8013B521EF9D27047D2B201E000F80B
@@ -531,5 +543,466 @@
 :102110004E1B00083C21000818000020700700003A
 :102120005E1B0008380400000024F40000000000DA
 :0C21300001000000100000000000000092
+=======
+:100240004346BDE8F09FD2B201E000F8012B491E01
+:10025000FBD270470022F6E710B513460A46044663
+:100260001946FFF7F0FF204610BD202A04DB203A94
+:1002700000FA02F1002070479140C2F1200320FAF9
+:1002800003F3194390407047202A04DB203A21FAF7
+:1002900002F00021704721FA02F3D040C2F120029F
+:1002A0009140084319467047064C074D06E0E06848
+:1002B00040F0010394E8070098471034AC42F6D3AD
+:1002C000FFF778FFB01E0008D01E0008FEE7000010
+:1002D000014800F087B900008C010020014800F0BF
+:1002E00081B900008C0100207047704790F82020F1
+:1002F000012A09D090F82020022A05D0416A41F451
+:100300008021416201207047006842690A434261CE
+:1003100000207047F0B590F82040012C07D090F8ED
+:100320002040022C03D0416A41F4802153E004684C
+:10033000A5686D0105D4A5682D0102D4A568ED005E
+:1003400046D5A4680125C4F30164A5401D608D68ED
+:100350004FF4C0739DB1CE6835434E6845EAC6057B
+:10036000066803EB0417F5514FF4C275076805EBF7
+:1003700004150E697E51097D012905D009E00E881A
+:10038000CD6845EA4655EBE701684E5946F480765C
+:100390004E511179D2F805504FF4C67641EA052145
+:1003A000056806EB0416A9511178D2F801204FF424
+:1003B000C47541EA0221026805EB04155151006839
+:1003C00003EB0411425842F0010242500020F0BDFC
+:1003D000416A41F4001141620120F0BD10B590F86E
+:1003E0002020012A09D090F82020022A05D0416A55
+:1003F00041F480214162012010BD3A48D0F800222A
+:1004000042F00102C0F80022D0F8002222F47C520F
+:10041000C0F80022D0F800224B6A42EA0322C0F85A
+:1004200000220B7D01229A40D0F81C329343C0F881
+:100430001C32CB69B3B9D0F80C329343C0F80C32FC
+:100440008C894B6864F31F434C6900EBC404C4F807
+:1004500040320C890B6864F31F434C6900EBC40401
+:10046000C4F84432CB69012B16D1D0F80C321343B7
+:10047000C0F80C320C884B6864F31F434C6900EBE6
+:10048000C404C4F840320C89CB6864F31F434C6940
+:1004900000EBC404C4F844328B69002BD0F804325A
+:1004A0000ED01343C0F804320B69002BD0F814327D
+:1004B00008D01343C0F81432096A012904D008E0B7
+:1004C0009343EFE79343F5E7D0F81C121143C0F8CC
+:1004D0001C12D0F8001221F00101C0F80012002017
+:1004E00010BD000000640040704730B590F8204017
+:1004F000012C07D090F82040022C03D0416A41F42F
+:10050000802109E011B1012909D00CE00468E468F8
+:1005100007E0416A41F400114162012030BD0468E6
+:100520002469A407F5D04FF4D874056804EB0114CE
+:100530002D5915F00405956005682D5942D0ED0838
+:10054000556005682C59C4F34004D4604FF4DA7444
+:10055000056804EB01142D5905F00F0515610568B8
+:100560002D59C5F30725956105682C59240C546154
+:100570004FF4DC72046802EB0112A4581C7004688A
+:10058000A458240A5C700468A458240C9C70046865
+:10059000A258120EDA704FF4DE72046802EB0112F8
+:1005A000A4581C710468A458240A5C710468A458F7
+:1005B000240C9C710468A258120EDA7129B1012929
+:1005C00009D00DE06D0D1560BBE70068C16841F012
+:1005D0002001C16004E00068016941F0200101616F
+:1005E000002030BD2DE9F05F054600680024466913
+:1005F000D0F804908768D0F80CB0D0F810A0D0F8EC
+:100600001880F10748D0F90714D001218160B8079C
+:1006100003D5284600F027FA0CE0780702D54FF4FE
+:10062000006407E0380702D54FF4805402E0284602
+:1006300000F018FAF80516D529684FF48070886024
+:10064000B80503D5284600F010FA0CE0780502D56D
+:1006500044F4005407E0380502D544F4804402E035
+:10066000284600F001FAF80316D529684FF48030C7
+:100670008860B80303D5284600F0F9F90CE0780348
+:1006800002D544F4004407E0380302D544F4803432
+:1006900002E0284600F0EAF9300707D55FEACB60B0
+:1006A00004D52968102044F40074C86070074FF026
+:1006B000080707D55FEA0B7004D52868C76028468D
+:1006C00000F060F9B00706D52868C068800702D03E
+:1006D000284600F059F9700607D55FEACA6004D5CC
+:1006E0002968102044F480640861B00607D55FEAE9
+:1006F0000A7004D528680761284600F083F9F006DF
+:1007000006D528680069800702D0284600F07BF9EA
+:10071000B00308D55FEAC96005D529681020486094
+:10072000284600F071F9F00307D55FEA097004D597
+:1007300028684760284600F09BF9300446D55FEAF8
+:10074000497040D5F00504D55FEAC87001D044F087
+:100750000104B00504D55FEA887001D544F00204B5
+:10076000700504D55FEA487001D544F004043005F3
+:1007700029D518F0700F26D008F07000402815D049
+:1007800006DC102809D020280AD0302816D10AE02B
+:1007900050280ED0602811D10EE044F008040DE07E
+:1007A00044F010040AE044F0200407E044F0400460
+:1007B00004E044F0800401E044F480742868816916
+:1007C00021F070018161296804204860002C05D067
+:1007D000686A204368622846FFF786FEBDE8F09FFE
+:1007E00070B5040003D094F8200010B104E001209B
+:1007F00070BD204600F082F82068016821F00201F7
+:10080000016000F039FA0546052604E000F034FAEC
+:10081000401B0A2811D8206840688007F6D4206859
+:10082000016841F00101016000F026FA05460BE085
+:1008300000F022FA401B0A2806D9606A40F4003012
+:10084000606284F82060D2E720684068C007EFD07B
+:10085000207E0128206801683DD021F080010160E0
+:10086000607E01282068016838D021F040010160D5
+:10087000A07E01282068016833D021F020010160AA
+:10088000E07E0128206801682ED041F0100101604F
+:10089000207F01282068016829D021F0080101602B
+:1008A000607F01282068016824D021F004010160E4
+:1008B000D4E902010843D4E90412114308436168F2
+:1008C000491E08432168C86100206062012084F845
+:1008D0002000002070BD41F08001C0E741F04001E0
+:1008E000C5E741F02001CAE721F01001CFE741F050
+:1008F0000801D4E741F00401D9E7000010B586B043
+:10090000044614216846FFF7A5FC1B49206888426D
+:100910002FD11A480021026842F00072026000687C
+:1009200000F00070059015481038026842F0080287
+:1009300002600068022200F0080005900320CDE963
+:100940000210CDE900020920049069460C4800F02D
+:10095000A3F800221146132000F0FAF9132000F04A
+:10096000EBF900221146142000F0F2F9142000F0F7
+:10097000E3F906B010BD00000064004040380240BA
+:10098000000C02407047000000B51A4A016889B0A7
+:10099000914204D107AB6A460021FFF7A6FD0099FA
+:1009A0001548A1F20121072917D20288C9B2521CA9
+:1009B00001EB410302801149BDF81C2001EB8301CA
+:1009C00052BA8A80BDF81E2052BACA80BDF82020D3
+:1009D00052BA0A819DF822208A720188B1F5FA7F05
+:1009E00006D1002101800648016881F48041016040
+:1009F00009B000BD006400401A000020F001002092
+:100A000014140240704770477047000070B50446E8
+:100A100090F82000012804D0606A40F40020606251
+:100A200018E0022084F820002068016821F001010C
+:100A3000016000F021F905460EE000BF00F01CF94E
+:100A4000401B0A2808D9606A40F400306062052023
+:100A500084F82000012070BD20684068C007EDD1F7
+:100A6000606270BD7047704770477047704770474D
+:100A70007047000070B5044600F0FEF80546601CA3
+:100A800002D004480078044400F0F6F8401BA0426D
+:100A9000FAD370BD080000202DE9F84FDFF890B1BF
+:100AA00000224FF001084FF0030A4FF00F090BF13D
+:100AB000040E00BF0B6808FA02F42340A3426ED173
+:100AC0004D68022D01D0122D0ED1D50800EB850CFA
+:100AD000DCF820505607F70E09FA07F6B5430E6901
+:100AE000BE402E43CCF82060066855000F790AFA04
+:100AF00005FC07F0030726EA0C06AF403743076002
+:100B00004E68012E05D0022E03D0112E01D0122ED8
+:100B10000ED18768CE6827EA0C07AE403E43866058
+:100B20004668A6430C79C4F30014944034434460EF
+:100B3000C4688E6824EA0C04AE402643C6604C6844
+:100B4000E4006FD53B4C256845F48045256024685A
+:100B500022F0030504F480440094374C2E19D6F893
+:100B6000084895072F0F09FA07F5AC43334DA84203
+:100B700001D100252EE0324DA84201D1012529E006
+:100B8000304DA84201D1022524E02F4DA84201D1C9
+:100B900003251FE02D4DA84202D104251AE041E0B3
+:100BA0002B4DA84201D1052514E02A4DA84201D1C0
+:100BB00006250FE0284DA84201D107250AE0274D60
+:100BC000A84201D1082505E0254DA84201D10925FB
+:100BD00000E00A25BD402543C6F80858DBF8004070
+:100BE0005D464E689C43F60300D51C432C60DEF83E
+:100BF000004075464E689C43B60300D51C432C60EC
+:100C00000B4D08352C684E689C43F60200D51C43FA
+:100C10002C60074D0C352C684E689C43B60200D5FD
+:100C20001C432C60521C102AFFF444AFBDE8F88F1F
+:100C3000003C0140443802400030014000000240C6
+:100C40000004024000080240000C02400010024074
+:100C50000014024000180240001C02400020024024
+:100C6000002402400069084000D0012070470AB10A
+:100C7000816170470904FBE7014880687047000004
+:100C800008000020024881680278114481607047A2
+:100C9000080000200B4810B5016841F400710160A4
+:100CA000016841F480610160016841F48071016074
+:100CB000032000F06DF8002000F006F800F024F8A2
+:100CC000002010BD003C024070B50D4D04464FF4AD
+:100CD0007A712878B1FBF0F00A490968B1FBF0F0AD
+:100CE00000F0C0FA48B9102C07D200222146501E4D
+:100CF00000F02EF800206C6070BD012070BD000077
+:100D000008000020140000200A4808B5016841F4DA
+:100D100080410160006800F4804000900548001F99
+:100D2000016841F080510160006800F0805000903F
+:100D300008BD00004438024000F01F02012191402C
+:100D40004009800000F1E020C0F800117047000069
+:100D5000F0B40E4B1B680C46C3F30223C3F1070526
+:100D6000042D00D90425191D072901D2002300E014
+:100D7000DB1E012606FA05F1491E214099409E40DE
+:100D8000761E16403143F0BC00F0DCBC0CED00E0F8
+:100D9000064900F0070208684FF6FF03184040EAD2
+:100DA0000220034A10430860704700000CED00E089
+:100DB0000000FA052DE9F0470E46050065D0DFF882
+:100DC0001481D8F80000F7B200F00F00B04207D24B
+:100DD00088F80070D8F8000000F00F00B04254D13D
+:100DE00028683D4C810712D5400703D5206840F4A0
+:100DF000E05020602878000703D5206840F4604068
+:100E000020602068A96820F0F0000843206028785E
+:100E1000C0072DD0304968680839012812D002284F
+:100E200013D0032811D00968890700292DDA216819
+:100E300021F0030101432160FFF71EFF814641F2CB
+:100E4000883A0EE009688903EFE709688901ECE751
+:100E5000FFF712FFA0EB0901514502D90320BDE8BD
+:100E6000F0872068696800F00C00B0EB810FEFD1CB
+:100E7000D8F80010404601F00F01B14207D90770C1
+:100E8000006800F00F00B04201D00120E7E72878A9
+:100E9000400705D52068E96820F4E0500843206049
+:100EA0002878000706D52068296920F4604040EAC8
+:100EB000C100206000F016F82168084AC1F3031150
+:100EC000515CC840064908600020FFF7FDFE002085
+:100ED000C5E70000003C024008380240A01E0008A0
+:100EE00014000020154810B5006810F00C021448DA
+:100EF00013D01449042A0FD0082A0ED10F4C241FF6
+:100F00002268236802F03F025B0207D52068C0F325
+:100F10008810A0FB010106E0084610BD2168C1F35E
+:100F20008811A1FB00010023FFF75CF92168C1F3E0
+:100F30000141491C4900B0FBF1F010BD08380240E6
+:100F40000024F400001BB7002DE9F84F050076D00F
+:100F50002878DFF8F8B2BE4CC00749D0DBF80010A3
+:100F60005846C1F38101012908D00068C0F381000F
+:100F700002280AD1201D0068400206D5206880039F
+:100F800036D568680028E2D032E06868B0F5803F66
+:100F900010D0B0F5A02F206810D020F48030206051
+:100FA000206820F4802020606868A0B1FFF764FE0C
+:100FB00006460CE0206840F48030F4E740F48020DE
+:100FC0002060F7E7FFF758FE801B642873D820687D
+:100FD0008003F7D50CE0FFF74FFE064605E000BFA3
+:100FE000FFF74AFE801B6428F0D820688003F7D4FE
+:100FF0002878DFF8608280074FF000093ED5DBF8E3
+:101000000010584611F00C0F09D00068C0F38100A1
+:1010100002280BD18D48001F0068400206D42068CA
+:10102000800715D5E868012809D111E0E868B8B152
+:101030000120C8F80000FFF71FFE064605E002E1A8
+:10104000FFF71AFE801B0228C0D820688007F7D55A
+:101050002068296920F0F80040EAC10020600DE016
+:10106000C8F80090FFF708FE064604E0FFF704FE0C
+:10107000801B02281FD820688007F7D42878000733
+:1010800022D5724E744869696C3671B101210160D4
+:10109000FFF7F2FD074604E0FFF7EEFDC01B022854
+:1010A00009D830688007F7D50EE0C0F80090FFF748
+:1010B000E3FD074605E083E0FFF7DEFDC01B0228E5
+:1010C0007ED830688007F7D42878400768D5DFF8E5
+:1010D0007CA100270AF1380ADAF80000C0000BD41E
+:1010E000DAF8001041F08051CAF80010DAF8000078
+:1010F000012700F080500090584E3068C00510D491
+:10110000306840F480703060FFF7B6FD009005E075
+:10111000FFF7B2FD0099401A022851D83068C00587
+:10112000F6D54A4EA868683601280FD005283068E1
+:1011300010D020F001003060306820F004003060F2
+:10114000A868B8B1FFF798FD00900FE0306840F054
+:101150000100F4E740F004003060F7E7FFF78CFD92
+:101160000099411A41F28830814264D83068800782
+:10117000F4D50EE0FFF780FD009007E0FFF77CFD5F
+:101180000099411A41F28830814254D83068800772
+:10119000F4D42FB1DAF8001021F08051CAF8001011
+:1011A000A869C0B3DBF80010C1F3810102294AD05D
+:1011B0000228484607D0C8F86000FFF75DFD00E050
+:1011C00039E005463AE04746C8F86000FFF754FDAD
+:1011D000064604E0FFF750FD801B02282BD820684C
+:1011E0008001F7D4D5E907010843A96A1C4A4908D8
+:1011F00002EB01416A6A41EA8211084395F82C101A
+:1012000040EA01611148001F016001203866FFF7C4
+:1012100033FD054605E014E0FFF72EFD401B0228D4
+:1012200009D820688001F7D50BE000BFFFF724FD47
+:10123000401B022802D90320BDE8F88F20688001F6
+:10124000F4D40020F8E70120F6E700000838024057
+:101250000038024000004742800E474200700040C4
+:101260000000FFFF10B5401EB0F1807F01D30120C8
+:1012700010BD4FF0E02460610F21601700F062FAAA
+:101280000020A06107202061002010BD10B590F85B
+:101290003820012A25D0012280F83820CA688C68BD
+:1012A00022F4407222434C6822F4806222430C688C
+:1012B00022F4006222430C6922F4805222434C69DA
+:1012C00022F4005222438C6922F48042224322F409
+:1012D0000041026800232143516480F83830002027
+:1012E00010BD022010BD30B590F83820012A20D062
+:1012F000012280F83820022380F8393003685C68C6
+:1013000024F070045C6003685C680D682C435C60CA
+:1013100003689C6824F080049C6003689C684968AA
+:101320000C439C6080F83920002180F83810084672
+:1013300030BD022030BD000070B586B004461421D7
+:101340006846FEF787FF18492068884229D1174868
+:101350000024016841F001010160016801F0010110
+:101360000591016841F0100101600068022500F05C
+:10137000100005904FF440700090CDE90154012613
+:10138000CDE9034669460A48FFF786FB4FF4C040A3
+:101390000090CDE90154CDE9034669460548FFF7C1
+:1013A0007BFB06B070BD00000000014030380240F9
+:1013B000000002400010024070B5044690F838006A
+:1013C0000D4601280DD0012684F83860022084F8EB
+:1013D000390042B1042A18D0082A2AD00C2A4DD14B
+:1013E00039E0022070BD206800F098FA2068816919
+:1013F00041F0080181612068816921F00401816167
+:10140000206881692A69114311E0206800F0B2FA6E
+:101410002068816941F4006181612068816921F45B
+:1014200080618161206881692A6941EA02218161C4
+:1014300024E0206800F0D0FA2068C16941F008017A
+:10144000C1612068C16921F00401C1612068C169DE
+:101450002A69114311E0206800F0EEFA2068C169A2
+:1014600041F40061C1612068C16921F48061C161FA
+:101470002068C1692A6941EA0221C16184F83960A2
+:10148000002084F8380070BD10B5040003D094F833
+:10149000390010B107E0012010BD002084F83800A9
+:1014A000204600F00DF8022084F83900211D206844
+:1014B00000F0C8F9012084F83900002010BD0000B8
+:1014C00008B500680649884208D10648016841F01D
+:1014D00001010160006800F00100009008BD0000FB
+:1014E000000001404438024010B504460068012263
+:1014F00000F008FA08492068884202D0074988426B
+:1015000003D1416C41F4004141642068016841F01D
+:1015100001010160002010BD0000014000040140F5
+:10152000FEE70000104810B50E490160032141603C
+:1015300000214FF400228160C0E903124FF44012F1
+:1015400042610176012242768176C1760177417748
+:10155000FFF746F9002803D0BDE81040FEF7C5BEEE
+:1015600010BD0000006400408C0100202DE9F04710
+:1015700086B014216846FEF76DFE374800240168E6
+:1015800041F008010160016801F00801059101685E
+:1015900041F001010160016801F00101059101685C
+:1015A00041F080010160016801F08001059101684E
+:1015B00041F002010160016801F00201059101683A
+:1015C00041F010010160016801F01001059101680E
+:1015D00041F0200101600068DFF8808000F0200009
+:1015E000059000223C214046FFF741FBDFF8709058
+:1015F0004FF40066002231464846FFF738FBDFF81B
+:1016000064A0F700002239465046FFF730FB3C202B
+:1016100000900125CDE90154694640460394FFF747
+:101620003BFA0420CDE9000469460F480294FFF715
+:1016300033FA0096CDE90154694648460394FFF712
+:101640002BFA0097CDE90154694650460394FFF701
+:1016500023FA06B0BDE8F08730380240001C024093
+:1016600000100240001402400004024010B590B087
+:1016700000240E941C2168460F94FEF7EBFD1C21FC
+:1016800007A8FEF7E7FD2D482B490160A721C0E917
+:10169000011444F62061C0E903144461FFF7F4FE2D
+:1016A00008B1FEF722FE0E940EA924480F94FFF70E
+:1016B0001AFE08B1FEF719FE602000904FF47A7010
+:1016C000CDE90104039404940594002269461B4863
+:1016D0000694FFF771FE08B1FEF707FE0422694683
+:1016E0001648FFF769FE08B1FEF7FFFD08226946BC
+:1016F0001248FFF761FE08B1FEF7F7FD0C226946BC
+:101700000E48FFF759FE08B1FEF7EFFD0794089465
+:1017100009944FF400500A94CDE90B4007A90748FB
+:101720000D94FFF7B3FD08B1FEF7DFFD0348FFF7A7
+:1017300003FE10B010BD000000000140B401002005
+:10174000FEE770470907090E002806DA00F00F00CF
+:1017500000F1E02080F8141D704700F1E02080F8CF
+:101760000014704770477047FFF78CBA30B593B0DC
+:1017700030216846FEF76EFD14210CA8FEF76AFDC5
+:1017800019480025016841F080510160006800F0AF
+:10179000805011901548016841F440410160006893
+:1017A000022400F4404011900120009000040190B8
+:1017B0008001CDE9064006200890A820CDE9090463
+:1017C00004200B906846FFF7BFFB0CA90F2081E8AF
+:1017D00031004FF4A0500F90E002109005210CA8AA
+:1017E000FFF7E8FA13B030BD403802400070004007
+:1017F0001048016841F4700101600F48016841F030
+:10180000010101600C4A00210832116002680B4B93
+:101810001A400260031D0A4A1A60026822F48022FC
+:10182000026005480C3001600249580680390860A2
+:101830007047000088ED00E000380240FFFFF6FE30
+:1018400010300024F0B50268234B244D244E254F60
+:10185000254C4FF0804C984209D0604507D0A842F3
+:1018600005D0B04203D0B84201D0A04204D122F04A
+:10187000700E4A6842EA0E0298421BD0604519D0A9
+:10188000A84217D0B04215D0B84213D0A04211D010
+:10189000164DA8420ED0164DA8420BD0154DA842A9
+:1018A00008D0154DA84205D0144DA84202D0144DC1
+:1018B000A84203D122F44075CA682A4302608A68AC
+:1018C000C2620A688262984201D0A04201D10969CD
+:1018D000016301214161F0BD0000014000040040AE
+:1018E00000080040000C004000040140004001409E
+:1018F000004401400048014000180040001C004026
+:101900000020004010B50123046A8B409C43046210
+:10191000036A8A401343036210BD000030B5026AB7
+:1019200022F001020262026A436884690D6824F0B1
+:101930007304254322F002048A6822430B4CA04220
+:1019400002D00B4CA0420BD122F00804CA6823F449
+:10195000407322434C6922F004021C438B692343E9
+:101960004360856149684163026230BD0000014007
+:101970000004014030B5026A22F010020262026ADD
+:10198000436884690D6824F4E64444EA05248D68BC
+:1019900022F0200242EA05120D4DA84202D00D4D60
+:1019A000A8420ED1CD6822F0800242EA05124D69AC
+:1019B00023F4406343EA85038D6922F0400243EA41
+:1019C00085034360846149688163026230BD000021
+:1019D000000001400004014030B5026A22F4807228
+:1019E0000262036A4268C46923F4007324F0730539
+:1019F0000C682C438D6843EA05230D4DA84202D0A4
+:101A00000C4DA8420ED1CD6823F4006343EA0523B0
+:101A10004D6922F4405242EA05128D6923F4806335
+:101A200042EA05124260C4614968C163036230BD85
+:101A3000000001400004014030B5026A22F48052E7
+:101A40000262046A4268C3690D6823F4E64343EA0C
+:101A500005238D6824F4005444EA0534084DA84257
+:101A600002D0084DA84204D14D6922F4804242EAD6
+:101A700085124260C36149680164046230BD0000A0
+:101A80000000014000040140FEE70000014A024955
+:101A900000F013B8191B00081C00002002E008C861
+:101AA000121F08C1002AFAD170477047002001E0D8
+:101AB00001C1121F002AFBD170472DE9F0411646E3
+:101AC0000F460446002503E03946B047641C6D1CF0
+:101AD00020780028F8D12846BDE8F08100B58BB009
+:101AE00000210122CDE90612059100910191029198
+:101AF000039104910E21CDE908216946FEF76EFCA1
+:101B00000448FEF783FF02210248FEF7EFFB0BB00B
+:101B100000BD00008C01002038B504468DF800009F
+:101B200069460320ABBE204638BD000010B5074C07
+:101B30000421607820700648FFF794F8607010B9AF
+:101B40002078012800D0002010BD000018000020DF
+:101B5000000402402DED048B82B0FFF79BF8FFF7E5
+:101B600005FEFFF703FDFFF7DDFCFFF77FFD012218
+:101B70003C216F48FFF77BF800F04EF96D48FFF706
+:101B8000ADFF00249FED6C8ADFED6C8A6C4D00BFC9
+:101B900004EB8400F0EE481A00EBC40005EB800073
+:101BA000B0EE612AB0EE001AF0EE680AB0EE000A5C
+:101BB00000F02FF9641CE4B2032CE9D304249FED58
+:101BC000619ADFED618A9FED618A00BF04EB8400BA
+:101BD000F0EE491A00EBC40005EB8000B0EE612A7C
+:101BE000B0EE481AF0EE080AB0EE680A00F011F9FB
+:101BF000641CE4B2072CE9D3DFF85481DFF854B158
+:101C0000F3EE048AA9464FF0000A53A0FFF73EFF07
+:101C1000B8F802004446401C00B2A8F80200FA28B6
+:101C200006D14F48A4F802A0416981F400614161E6
+:101C3000FFF77CFFA0B194ED010ADFED4A0A4A49A3
+:101C400030EE200A84ED010A2088D230208010EE88
+:101C5000100A884204DD84ED018A4FF487602080F9
+:101C6000A04600254E465C4605EB450004EB800788
+:101C7000B7F9060000EE100A05EB850000EBC50081
+:101C8000F8EEC00A98ED010A06EB800020EE280A63
+:101C900000F06EF8BDEEC00A6D1CEDB210EE100A39
+:101CA000032D7880E0D3B1460425464605EB450078
+:101CB00004EB8007B7F9060000EE100A05EB85007B
+:101CC00000EBC501F8EEC00A09EB810096ED010AB0
+:101CD00000F04EF8BDEEC00A6D1CEDB210EE100A19
+:101CE000072D7880E2D3B4F926000090B4F91A30B9
+:101CF000B4F90E20B4F90210002000F0A3F8CDF8DA
+:101D000000A0B4F94A30B4F93E20B4F932100120F1
+:101D100000F098F8154930880A6850630A689063A3
+:101D20000968C86308640020FEF7A4FE6DE70000A0
+:101D3000001C02408C01002000007A460AD7A33B19
+:101D4000200000200060EA46000020420000000061
+:101D500000000020F0010020544553540000000012
+:101D6000001002400000704200003443B401002023
+:101D700080ED050AC0ED060A90ED071A70EE600AC4
+:101D800080ED081AC0ED070A90ED000A20EE202A27
+:101D900080ED092A90ED0A0AD0ED011A01EEA00AA1
+:101DA00080ED0A0AD0ED021A11EEA01A80ED0B1A8E
+:101DB000D0ED030AF1EE601AB4EEE10AF1EE10FA8A
+:101DC00002D8B0EE610A06E0B4EEE00AF1EE10FAD5
+:101DD00001DBB0EE600A80ED0A0A32EE000A30EE56
+:101DE000010A80ED0C0AD0ED040AB1EE601AB4EEDF
+:101DF000C10AF1EE10FA02D8B0EE410A06E0B4EEE4
+:101E0000E00AF1EE10FA01DBB0EE600A80ED0C0A98
+:101E1000704780EC050A704710B500210848FFF7AD
+:101E200063FB04210648FFF75FFB08210448FFF726
+:101E30005BFBBDE810400C210148FFF755BB0000DB
+:101E4000B401002010B588B00A9C18B340F2FF100E
+:101E5000029000200490059008200690080A8DF852
+:101E600000008DF80110100A8DF80200180A8DF894
+:101E700004008DF80530200A8DF806008DF8032047
+:101E80008DF8074001236A4602A90448FEF742FA8A
+:101E900008B010BD4FF40070DAE700008C0100209C
+:101EA000000000000000000001020304060708090A
+:101EB000D01E000800000020200000009C1A00082E
+:101EC000F01E00082000002028060000AC1A0008C0
+:101ED00038040000000000000100000010000000B5
+:101EE000000000000024F4000000000000000000DA
+>>>>>>> Board-B-Motors
 :04000005080001AD41
 :00000001FF
diff --git a/Controle_moteurs_PID/Src/main.c b/Controle_moteurs_PID/Src/main.c
index 056a47729fa6a76851de83238f7c9888fb8be63e..0b403416f263c8d749b0c48b598e3ab384bba2c3 100644
--- a/Controle_moteurs_PID/Src/main.c
+++ b/Controle_moteurs_PID/Src/main.c
@@ -160,6 +160,7 @@ int main(void)
   /* USER CODE BEGIN WHILE */
   while (1)
   {
+		printf("TEST");
     /* led blink */
     led_cnt ++;
     if (led_cnt == 250)
diff --git a/Datasheets/RoboMaster GM6020 Brushless DC Motor User Guide.pdf b/Datasheets/RoboMaster GM6020 Brushless DC Motor User Guide.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..3ff5b71e5132f678db41ad7e1593d9269f8e5d16
Binary files /dev/null and b/Datasheets/RoboMaster GM6020 Brushless DC Motor User Guide.pdf differ
diff --git a/README.md b/README.md
index f95521f7ab06473a7c53385e8b6895b9437d24fb..30b20ab0d4d352283c4dcac69368ff62fc275b70 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# Contrôle et systèmes
+# Contrôle et systèmes
 
 ## Description de l'équipe
 
@@ -36,3 +36,85 @@
 * [RobotRTS, quickstart](https://robomaster.github.io/RoboRTS-Tutorial/#/en/roborts)
 * [Infantry Setup, UBC](https://docs.google.com/document/d/19cvIZilfux3r4_W7IBOViRhD_JSUb53r_CtSJ3eYy1E/edit)
 
+### Set up du ESC C610 et M2006
+* Set up manuel: 
+	a. In the normal working state of the ESC, press the SET button for a short time to enter the independent setting ID mode.
+	 At this time, the indicator light is off.
+	b. In the independent setting ID mode, short press the SET button (no more than 8 times) is the set ID number. Each
+	 Press briefly, the indicator light flashes once.
+	c. If the SET button is not operated for 3 seconds, the ESC will automatically save the current setting ID number. ESC needs to set ID 
+	 Duplicate IDs cannot occur on the same bus, otherwise ESCs with conflicting IDs will warn and close the output
+* Set up automatique:
+	a. Under normal working conditions, short press the SET button of any C610 ESC on the bus once to enter the independent mode.
+	 After the ID setting mode, press and hold the SET button again. At this time, all ESCs on the bus will enter the quick setting ID mode.
+	 The ESC indicator is solid orange.
+	b. Manually rotate the rotor of the M2006 motor corresponding to the C610 ESC in turn according to the preset ID (rotate at least in any direction)
+	 More than half a circle), the ESC will automatically start numbering from 1 in turn according to the rotation order, the numbered ESCs need to be 
+	 powered on again.
+	 Can enter normal working conditions. 
+* Calibration:
+	 After the ESC motor is connected and powered on, the user calibrates the motor's position sensor parameters to ensure that the motor can
+	 Enough to work normally, the specific operation is as follows:
+	a. Press and hold the SET button until the indicator light flashes green quickly and release the SET button.
+	b. The motor enters the automatic calibration mode, and it will automatically exit the calibration mode after the calibration is completed. 
+
+* Procédure du CAN:
+CAN communication protocol
+
+1. ESC receive message format
+	Used to send a control instruction to the ESC to control the ESC's current output. The two identifiers (0x200 and 0x1FF) correspond
+	Control ESC for 4 IDs. Control torque current value range -10000 ~ 0 ~ 10000, corresponding to the torque current of ESC output
+
+	The range is -10 ~ 0 ~ 10A.
+	Identifier: 0x200 Frame format: DATA
+	Frame type: Standard frame DLC: 8 bytes
+
+	Data field	content					ESC ID
+	DATA [0]	8-bit higher control current value	1
+	DATA [1]	8-bit lower control current value	1
+
+	DATA [2]	8-bit higher control current value	2
+	DATA [3]	8-bit lower control current value	2
+
+	DATA [4]	8-bit higher control current value	3
+	DATA [5]	8-bit lower control current value	3
+
+	DATA [6]	8-bit higher control current value	4
+	DATA [7]	8-bit lower control current value	4
+
+	Identifier: 0x1FF Frame format: DATA
+	Frame type: Standard frame DLC: 8 bytes
+
+	Data field	content					ESC ID
+	DATA [0]	8-bit higher control current value	5
+	DATA [1]	8-bit lower control current value	5
+
+	DATA [2]	8-bit higher control current value	6
+	DATA [3]	8-bit lower control current value	6
+
+	DATA [4]	8-bit higher control current value	7
+	DATA [5]	8-bit lower control current value	7
+
+	DATA [6]	8-bit higher control current value	8
+	DATA [7]	8-bit lower control current value	8
+
+2. ESC feedback message format
+	The feedback data sent by the ESC to the bus.
+	Identifier: 0x200 + ESC ID (eg: ID is 1, this identifier is 0x201)
+	Frame format: DATA
+	Frame type: standard frame
+	DLC: 8 bytes 
+
+	Data field	content
+	DATA [0]	8-bit higher rotor mechanical angle
+	DATA [1]	8-bit lower mechanical rotor angle
+
+	DATA [2]	8-bit higher rotor speed
+	DATA [3]	8 digits lower rotor speed
+
+	DATA [4]	8 digits higher actual output torque
+	DATA [5]	8 digits lower actual output torque
+
+	DATA [6]	Null
+	DATA [7]	Null 
+
diff --git a/Standard_robot/.mxproject b/Standard_robot/.mxproject
index 4270762981173fdc1e451e9b5979e43aada25c10..881dc69f87c2ceea4d32c3cec170e0299a768361 100644
--- a/Standard_robot/.mxproject
+++ b/Standard_robot/.mxproject
@@ -1,14 +1,14 @@
 [PreviousGenFiles]
 HeaderPath=D:/charl/Documents/Git/RM-Controle/Standard_robot/Inc
-HeaderFiles=gpio.h;stm32f4xx_it.h;stm32f4xx_hal_conf.h;main.h;dma.h;usart.h;adc.h;spi.h;
+HeaderFiles=gpio.h;stm32f4xx_it.h;stm32f4xx_hal_conf.h;main.h;dma.h;usart.h;adc.h;spi.h;can.h;tim.h;
 SourcePath=D:/charl/Documents/Git/RM-Controle/Standard_robot/Src
-SourceFiles=gpio.c;stm32f4xx_it.c;stm32f4xx_hal_msp.c;main.c;dma.c;usart.c;adc.c;spi.c;
+SourceFiles=gpio.c;stm32f4xx_it.c;stm32f4xx_hal_msp.c;main.c;dma.c;usart.c;adc.c;spi.c;can.c;tim.c;
 
 [PreviousLibFiles]
-LibFiles=Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_spi.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h;Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_spi.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h;Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f427xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armclang.h;Drivers/CMSIS/Include/cmsis_compiler.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/cmsis_iccarm.h;Drivers/CMSIS/Include/cmsis_version.h;Drivers/CMSIS/Include/core_armv8mbl.h;Drivers/CMSIS/Include/core_armv8mml.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm1.h;Drivers/CMSIS/Include/core_cm23.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm33.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h;Drivers/CMSIS/Include/mpu_armv7.h;Drivers/CMSIS/Include/mpu_armv8.h;Drivers/CMSIS/Include/tz_context.h;
+LibFiles=Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h;Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_can.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_spi.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h;Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_can.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_spi.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h;Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f427xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h;Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armclang.h;Drivers/CMSIS/Include/cmsis_compiler.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/cmsis_iccarm.h;Drivers/CMSIS/Include/cmsis_version.h;Drivers/CMSIS/Include/core_armv8mbl.h;Drivers/CMSIS/Include/core_armv8mml.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm1.h;Drivers/CMSIS/Include/core_cm23.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm33.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h;Drivers/CMSIS/Include/mpu_armv7.h;Drivers/CMSIS/Include/mpu_armv8.h;Drivers/CMSIS/Include/tz_context.h;
 
 [PreviousUsedKeilFiles]
-SourceFiles=..\Src\main.c;..\Src\gpio.c;..\Src\adc.c;..\Src\dma.c;..\Src\spi.c;..\Src\usart.c;..\Src\stm32f4xx_it.c;..\Src\stm32f4xx_hal_msp.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c;../\Src/system_stm32f4xx.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c;../\Src/system_stm32f4xx.c;../Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c;null;
+SourceFiles=..\Src\main.c;..\Src\gpio.c;..\Src\adc.c;..\Src\can.c;..\Src\dma.c;..\Src\spi.c;..\Src\tim.c;..\Src\usart.c;..\Src\stm32f4xx_it.c;..\Src\stm32f4xx_hal_msp.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;..\\Src/system_stm32f4xx.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c;..\Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c;..\\Src/system_stm32f4xx.c;..\Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c;;
 HeaderPath=..\Drivers\STM32F4xx_HAL_Driver\Inc;..\Drivers\STM32F4xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32F4xx\Include;..\Drivers\CMSIS\Include;..\Inc;
-CDefines=USE_HAL_DRIVER;STM32F427xx;USE_HAL_DRIVER;STM32F427xx;
+CDefines=USE_HAL_DRIVER;STM32F427xx;USE_HAL_DRIVER;USE_HAL_DRIVER;
 
diff --git a/Standard_robot/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_can.h b/Standard_robot/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_can.h
new file mode 100644
index 0000000000000000000000000000000000000000..0611a6521a342766bdc80a2ba1d9a7c7834af073
--- /dev/null
+++ b/Standard_robot/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_can.h
@@ -0,0 +1,848 @@
+/**
+  ******************************************************************************
+  * @file    stm32f4xx_hal_can.h
+  * @author  MCD Application Team
+  * @brief   Header file of CAN HAL module.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under BSD 3-Clause license,
+  * the "License"; You may not use this file except in compliance with the
+  * License. You may obtain a copy of the License at:
+  *                        opensource.org/licenses/BSD-3-Clause
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef STM32F4xx_HAL_CAN_H
+#define STM32F4xx_HAL_CAN_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32f4xx_hal_def.h"
+
+/** @addtogroup STM32F4xx_HAL_Driver
+  * @{
+  */
+
+#if defined (CAN1)
+/** @addtogroup CAN
+  * @{
+  */
+
+/* Exported types ------------------------------------------------------------*/
+/** @defgroup CAN_Exported_Types CAN Exported Types
+  * @{
+  */
+/**
+  * @brief  HAL State structures definition
+  */
+typedef enum
+{
+  HAL_CAN_STATE_RESET             = 0x00U,  /*!< CAN not yet initialized or disabled */
+  HAL_CAN_STATE_READY             = 0x01U,  /*!< CAN initialized and ready for use   */
+  HAL_CAN_STATE_LISTENING         = 0x02U,  /*!< CAN receive process is ongoing      */
+  HAL_CAN_STATE_SLEEP_PENDING     = 0x03U,  /*!< CAN sleep request is pending        */
+  HAL_CAN_STATE_SLEEP_ACTIVE      = 0x04U,  /*!< CAN sleep mode is active            */
+  HAL_CAN_STATE_ERROR             = 0x05U   /*!< CAN error state                     */
+
+} HAL_CAN_StateTypeDef;
+
+/**
+  * @brief  CAN init structure definition
+  */
+typedef struct
+{
+  uint32_t Prescaler;                  /*!< Specifies the length of a time quantum.
+                                            This parameter must be a number between Min_Data = 1 and Max_Data = 1024. */
+
+  uint32_t Mode;                       /*!< Specifies the CAN operating mode.
+                                            This parameter can be a value of @ref CAN_operating_mode */
+
+  uint32_t SyncJumpWidth;              /*!< Specifies the maximum number of time quanta the CAN hardware
+                                            is allowed to lengthen or shorten a bit to perform resynchronization.
+                                            This parameter can be a value of @ref CAN_synchronisation_jump_width */
+
+  uint32_t TimeSeg1;                   /*!< Specifies the number of time quanta in Bit Segment 1.
+                                            This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_1 */
+
+  uint32_t TimeSeg2;                   /*!< Specifies the number of time quanta in Bit Segment 2.
+                                            This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */
+
+  FunctionalState TimeTriggeredMode;   /*!< Enable or disable the time triggered communication mode.
+                                            This parameter can be set to ENABLE or DISABLE. */
+
+  FunctionalState AutoBusOff;          /*!< Enable or disable the automatic bus-off management.
+                                            This parameter can be set to ENABLE or DISABLE. */
+
+  FunctionalState AutoWakeUp;          /*!< Enable or disable the automatic wake-up mode.
+                                            This parameter can be set to ENABLE or DISABLE. */
+
+  FunctionalState AutoRetransmission;  /*!< Enable or disable the non-automatic retransmission mode.
+                                            This parameter can be set to ENABLE or DISABLE. */
+
+  FunctionalState ReceiveFifoLocked;   /*!< Enable or disable the Receive FIFO Locked mode.
+                                            This parameter can be set to ENABLE or DISABLE. */
+
+  FunctionalState TransmitFifoPriority;/*!< Enable or disable the transmit FIFO priority.
+                                            This parameter can be set to ENABLE or DISABLE. */
+
+} CAN_InitTypeDef;
+
+/**
+  * @brief  CAN filter configuration structure definition
+  */
+typedef struct
+{
+  uint32_t FilterIdHigh;          /*!< Specifies the filter identification number (MSBs for a 32-bit
+                                       configuration, first one for a 16-bit configuration).
+                                       This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */
+
+  uint32_t FilterIdLow;           /*!< Specifies the filter identification number (LSBs for a 32-bit
+                                       configuration, second one for a 16-bit configuration).
+                                       This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */
+
+  uint32_t FilterMaskIdHigh;      /*!< Specifies the filter mask number or identification number,
+                                       according to the mode (MSBs for a 32-bit configuration,
+                                       first one for a 16-bit configuration).
+                                       This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */
+
+  uint32_t FilterMaskIdLow;       /*!< Specifies the filter mask number or identification number,
+                                       according to the mode (LSBs for a 32-bit configuration,
+                                       second one for a 16-bit configuration).
+                                       This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */
+
+  uint32_t FilterFIFOAssignment;  /*!< Specifies the FIFO (0 or 1U) which will be assigned to the filter.
+                                       This parameter can be a value of @ref CAN_filter_FIFO */
+
+  uint32_t FilterBank;            /*!< Specifies the filter bank which will be initialized.
+                                       For single CAN instance(14 dedicated filter banks),
+                                       this parameter must be a number between Min_Data = 0 and Max_Data = 13.
+                                       For dual CAN instances(28 filter banks shared),
+                                       this parameter must be a number between Min_Data = 0 and Max_Data = 27. */
+
+  uint32_t FilterMode;            /*!< Specifies the filter mode to be initialized.
+                                       This parameter can be a value of @ref CAN_filter_mode */
+
+  uint32_t FilterScale;           /*!< Specifies the filter scale.
+                                       This parameter can be a value of @ref CAN_filter_scale */
+
+  uint32_t FilterActivation;      /*!< Enable or disable the filter.
+                                       This parameter can be a value of @ref CAN_filter_activation */
+
+  uint32_t SlaveStartFilterBank;  /*!< Select the start filter bank for the slave CAN instance.
+                                       For single CAN instances, this parameter is meaningless.
+                                       For dual CAN instances, all filter banks with lower index are assigned to master
+                                       CAN instance, whereas all filter banks with greater index are assigned to slave
+                                       CAN instance.
+                                       This parameter must be a number between Min_Data = 0 and Max_Data = 27. */
+
+} CAN_FilterTypeDef;
+
+/**
+  * @brief  CAN Tx message header structure definition
+  */
+typedef struct
+{
+  uint32_t StdId;    /*!< Specifies the standard identifier.
+                          This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */
+
+  uint32_t ExtId;    /*!< Specifies the extended identifier.
+                          This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */
+
+  uint32_t IDE;      /*!< Specifies the type of identifier for the message that will be transmitted.
+                          This parameter can be a value of @ref CAN_identifier_type */
+
+  uint32_t RTR;      /*!< Specifies the type of frame for the message that will be transmitted.
+                          This parameter can be a value of @ref CAN_remote_transmission_request */
+
+  uint32_t DLC;      /*!< Specifies the length of the frame that will be transmitted.
+                          This parameter must be a number between Min_Data = 0 and Max_Data = 8. */
+
+  FunctionalState TransmitGlobalTime; /*!< Specifies whether the timestamp counter value captured on start
+                          of frame transmission, is sent in DATA6 and DATA7 replacing pData[6] and pData[7].
+                          @note: Time Triggered Communication Mode must be enabled.
+                          @note: DLC must be programmed as 8 bytes, in order these 2 bytes are sent.
+                          This parameter can be set to ENABLE or DISABLE. */
+
+} CAN_TxHeaderTypeDef;
+
+/**
+  * @brief  CAN Rx message header structure definition
+  */
+typedef struct
+{
+  uint32_t StdId;    /*!< Specifies the standard identifier.
+                          This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */
+
+  uint32_t ExtId;    /*!< Specifies the extended identifier.
+                          This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */
+
+  uint32_t IDE;      /*!< Specifies the type of identifier for the message that will be transmitted.
+                          This parameter can be a value of @ref CAN_identifier_type */
+
+  uint32_t RTR;      /*!< Specifies the type of frame for the message that will be transmitted.
+                          This parameter can be a value of @ref CAN_remote_transmission_request */
+
+  uint32_t DLC;      /*!< Specifies the length of the frame that will be transmitted.
+                          This parameter must be a number between Min_Data = 0 and Max_Data = 8. */
+
+  uint32_t Timestamp; /*!< Specifies the timestamp counter value captured on start of frame reception.
+                          @note: Time Triggered Communication Mode must be enabled.
+                          This parameter must be a number between Min_Data = 0 and Max_Data = 0xFFFF. */
+
+  uint32_t FilterMatchIndex; /*!< Specifies the index of matching acceptance filter element.
+                          This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */
+
+} CAN_RxHeaderTypeDef;
+
+/**
+  * @brief  CAN handle Structure definition
+  */
+typedef struct __CAN_HandleTypeDef
+{
+  CAN_TypeDef                 *Instance;                 /*!< Register base address */
+
+  CAN_InitTypeDef             Init;                      /*!< CAN required parameters */
+
+  __IO HAL_CAN_StateTypeDef   State;                     /*!< CAN communication state */
+
+  __IO uint32_t               ErrorCode;                 /*!< CAN Error code.
+                                                              This parameter can be a value of @ref CAN_Error_Code */
+
+#if USE_HAL_CAN_REGISTER_CALLBACKS == 1
+  void (* TxMailbox0CompleteCallback)(struct __CAN_HandleTypeDef *hcan);/*!< CAN Tx Mailbox 0 complete callback    */
+  void (* TxMailbox1CompleteCallback)(struct __CAN_HandleTypeDef *hcan);/*!< CAN Tx Mailbox 1 complete callback    */
+  void (* TxMailbox2CompleteCallback)(struct __CAN_HandleTypeDef *hcan);/*!< CAN Tx Mailbox 2 complete callback    */
+  void (* TxMailbox0AbortCallback)(struct __CAN_HandleTypeDef *hcan);   /*!< CAN Tx Mailbox 0 abort callback       */
+  void (* TxMailbox1AbortCallback)(struct __CAN_HandleTypeDef *hcan);   /*!< CAN Tx Mailbox 1 abort callback       */
+  void (* TxMailbox2AbortCallback)(struct __CAN_HandleTypeDef *hcan);   /*!< CAN Tx Mailbox 2 abort callback       */
+  void (* RxFifo0MsgPendingCallback)(struct __CAN_HandleTypeDef *hcan); /*!< CAN Rx FIFO 0 msg pending callback    */
+  void (* RxFifo0FullCallback)(struct __CAN_HandleTypeDef *hcan);       /*!< CAN Rx FIFO 0 full callback           */
+  void (* RxFifo1MsgPendingCallback)(struct __CAN_HandleTypeDef *hcan); /*!< CAN Rx FIFO 1 msg pending callback    */
+  void (* RxFifo1FullCallback)(struct __CAN_HandleTypeDef *hcan);       /*!< CAN Rx FIFO 1 full callback           */
+  void (* SleepCallback)(struct __CAN_HandleTypeDef *hcan);             /*!< CAN Sleep callback                    */
+  void (* WakeUpFromRxMsgCallback)(struct __CAN_HandleTypeDef *hcan);   /*!< CAN Wake Up from Rx msg callback      */
+  void (* ErrorCallback)(struct __CAN_HandleTypeDef *hcan);             /*!< CAN Error callback                    */
+
+  void (* MspInitCallback)(struct __CAN_HandleTypeDef *hcan);           /*!< CAN Msp Init callback                 */
+  void (* MspDeInitCallback)(struct __CAN_HandleTypeDef *hcan);         /*!< CAN Msp DeInit callback               */
+
+#endif /* (USE_HAL_CAN_REGISTER_CALLBACKS) */
+} CAN_HandleTypeDef;
+
+#if USE_HAL_CAN_REGISTER_CALLBACKS == 1
+/**
+  * @brief  HAL CAN common Callback ID enumeration definition
+  */
+typedef enum
+{
+  HAL_CAN_TX_MAILBOX0_COMPLETE_CB_ID       = 0x00U,    /*!< CAN Tx Mailbox 0 complete callback ID         */
+  HAL_CAN_TX_MAILBOX1_COMPLETE_CB_ID       = 0x01U,    /*!< CAN Tx Mailbox 1 complete callback ID         */
+  HAL_CAN_TX_MAILBOX2_COMPLETE_CB_ID       = 0x02U,    /*!< CAN Tx Mailbox 2 complete callback ID         */
+  HAL_CAN_TX_MAILBOX0_ABORT_CB_ID          = 0x03U,    /*!< CAN Tx Mailbox 0 abort callback ID            */
+  HAL_CAN_TX_MAILBOX1_ABORT_CB_ID          = 0x04U,    /*!< CAN Tx Mailbox 1 abort callback ID            */
+  HAL_CAN_TX_MAILBOX2_ABORT_CB_ID          = 0x05U,    /*!< CAN Tx Mailbox 2 abort callback ID            */
+  HAL_CAN_RX_FIFO0_MSG_PENDING_CB_ID       = 0x06U,    /*!< CAN Rx FIFO 0 message pending callback ID     */
+  HAL_CAN_RX_FIFO0_FULL_CB_ID              = 0x07U,    /*!< CAN Rx FIFO 0 full callback ID                */
+  HAL_CAN_RX_FIFO1_MSG_PENDING_CB_ID       = 0x08U,    /*!< CAN Rx FIFO 1 message pending callback ID     */
+  HAL_CAN_RX_FIFO1_FULL_CB_ID              = 0x09U,    /*!< CAN Rx FIFO 1 full callback ID                */
+  HAL_CAN_SLEEP_CB_ID                      = 0x0AU,    /*!< CAN Sleep callback ID                         */
+  HAL_CAN_WAKEUP_FROM_RX_MSG_CB_ID         = 0x0BU,    /*!< CAN Wake Up fropm Rx msg callback ID          */
+  HAL_CAN_ERROR_CB_ID                      = 0x0CU,    /*!< CAN Error callback ID                         */
+
+  HAL_CAN_MSPINIT_CB_ID                    = 0x0DU,    /*!< CAN MspInit callback ID                       */
+  HAL_CAN_MSPDEINIT_CB_ID                  = 0x0EU,    /*!< CAN MspDeInit callback ID                     */
+
+} HAL_CAN_CallbackIDTypeDef;
+
+/**
+  * @brief  HAL CAN Callback pointer definition
+  */
+typedef  void (*pCAN_CallbackTypeDef)(CAN_HandleTypeDef *hcan); /*!< pointer to a CAN callback function   */
+
+#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */
+/**
+  * @}
+  */
+
+/* Exported constants --------------------------------------------------------*/
+
+/** @defgroup CAN_Exported_Constants CAN Exported Constants
+  * @{
+  */
+
+/** @defgroup CAN_Error_Code CAN Error Code
+  * @{
+  */
+#define HAL_CAN_ERROR_NONE            (0x00000000U)  /*!< No error                                             */
+#define HAL_CAN_ERROR_EWG             (0x00000001U)  /*!< Protocol Error Warning                               */
+#define HAL_CAN_ERROR_EPV             (0x00000002U)  /*!< Error Passive                                        */
+#define HAL_CAN_ERROR_BOF             (0x00000004U)  /*!< Bus-off error                                        */
+#define HAL_CAN_ERROR_STF             (0x00000008U)  /*!< Stuff error                                          */
+#define HAL_CAN_ERROR_FOR             (0x00000010U)  /*!< Form error                                           */
+#define HAL_CAN_ERROR_ACK             (0x00000020U)  /*!< Acknowledgment error                                 */
+#define HAL_CAN_ERROR_BR              (0x00000040U)  /*!< Bit recessive error                                  */
+#define HAL_CAN_ERROR_BD              (0x00000080U)  /*!< Bit dominant error                                   */
+#define HAL_CAN_ERROR_CRC             (0x00000100U)  /*!< CRC error                                            */
+#define HAL_CAN_ERROR_RX_FOV0         (0x00000200U)  /*!< Rx FIFO0 overrun error                               */
+#define HAL_CAN_ERROR_RX_FOV1         (0x00000400U)  /*!< Rx FIFO1 overrun error                               */
+#define HAL_CAN_ERROR_TX_ALST0        (0x00000800U)  /*!< TxMailbox 0 transmit failure due to arbitration lost */
+#define HAL_CAN_ERROR_TX_TERR0        (0x00001000U)  /*!< TxMailbox 1 transmit failure due to tranmit error    */
+#define HAL_CAN_ERROR_TX_ALST1        (0x00002000U)  /*!< TxMailbox 0 transmit failure due to arbitration lost */
+#define HAL_CAN_ERROR_TX_TERR1        (0x00004000U)  /*!< TxMailbox 1 transmit failure due to tranmit error    */
+#define HAL_CAN_ERROR_TX_ALST2        (0x00008000U)  /*!< TxMailbox 0 transmit failure due to arbitration lost */
+#define HAL_CAN_ERROR_TX_TERR2        (0x00010000U)  /*!< TxMailbox 1 transmit failure due to tranmit error    */
+#define HAL_CAN_ERROR_TIMEOUT         (0x00020000U)  /*!< Timeout error                                        */
+#define HAL_CAN_ERROR_NOT_INITIALIZED (0x00040000U)  /*!< Peripheral not initialized                           */
+#define HAL_CAN_ERROR_NOT_READY       (0x00080000U)  /*!< Peripheral not ready                                 */
+#define HAL_CAN_ERROR_NOT_STARTED     (0x00100000U)  /*!< Peripheral not started                               */
+#define HAL_CAN_ERROR_PARAM           (0x00200000U)  /*!< Parameter error                                      */
+
+#if USE_HAL_CAN_REGISTER_CALLBACKS == 1
+#define HAL_CAN_ERROR_INVALID_CALLBACK (0x00400000U) /*!< Invalid Callback error                               */
+#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */
+#define HAL_CAN_ERROR_INTERNAL        (0x00800000U)  /*!< Internal error                                       */
+
+/**
+  * @}
+  */
+
+/** @defgroup CAN_InitStatus CAN InitStatus
+  * @{
+  */
+#define CAN_INITSTATUS_FAILED       (0x00000000U)  /*!< CAN initialization failed */
+#define CAN_INITSTATUS_SUCCESS      (0x00000001U)  /*!< CAN initialization OK     */
+/**
+  * @}
+  */
+
+/** @defgroup CAN_operating_mode CAN Operating Mode
+  * @{
+  */
+#define CAN_MODE_NORMAL             (0x00000000U)                              /*!< Normal mode   */
+#define CAN_MODE_LOOPBACK           ((uint32_t)CAN_BTR_LBKM)                   /*!< Loopback mode */
+#define CAN_MODE_SILENT             ((uint32_t)CAN_BTR_SILM)                   /*!< Silent mode   */
+#define CAN_MODE_SILENT_LOOPBACK    ((uint32_t)(CAN_BTR_LBKM | CAN_BTR_SILM))  /*!< Loopback combined with silent mode */
+/**
+  * @}
+  */
+
+
+/** @defgroup CAN_synchronisation_jump_width CAN Synchronization Jump Width
+  * @{
+  */
+#define CAN_SJW_1TQ                 (0x00000000U)              /*!< 1 time quantum */
+#define CAN_SJW_2TQ                 ((uint32_t)CAN_BTR_SJW_0)  /*!< 2 time quantum */
+#define CAN_SJW_3TQ                 ((uint32_t)CAN_BTR_SJW_1)  /*!< 3 time quantum */
+#define CAN_SJW_4TQ                 ((uint32_t)CAN_BTR_SJW)    /*!< 4 time quantum */
+/**
+  * @}
+  */
+
+/** @defgroup CAN_time_quantum_in_bit_segment_1 CAN Time Quantum in Bit Segment 1
+  * @{
+  */
+#define CAN_BS1_1TQ                 (0x00000000U)                                                /*!< 1 time quantum  */
+#define CAN_BS1_2TQ                 ((uint32_t)CAN_BTR_TS1_0)                                    /*!< 2 time quantum  */
+#define CAN_BS1_3TQ                 ((uint32_t)CAN_BTR_TS1_1)                                    /*!< 3 time quantum  */
+#define CAN_BS1_4TQ                 ((uint32_t)(CAN_BTR_TS1_1 | CAN_BTR_TS1_0))                  /*!< 4 time quantum  */
+#define CAN_BS1_5TQ                 ((uint32_t)CAN_BTR_TS1_2)                                    /*!< 5 time quantum  */
+#define CAN_BS1_6TQ                 ((uint32_t)(CAN_BTR_TS1_2 | CAN_BTR_TS1_0))                  /*!< 6 time quantum  */
+#define CAN_BS1_7TQ                 ((uint32_t)(CAN_BTR_TS1_2 | CAN_BTR_TS1_1))                  /*!< 7 time quantum  */
+#define CAN_BS1_8TQ                 ((uint32_t)(CAN_BTR_TS1_2 | CAN_BTR_TS1_1 | CAN_BTR_TS1_0))  /*!< 8 time quantum  */
+#define CAN_BS1_9TQ                 ((uint32_t)CAN_BTR_TS1_3)                                    /*!< 9 time quantum  */
+#define CAN_BS1_10TQ                ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_0))                  /*!< 10 time quantum */
+#define CAN_BS1_11TQ                ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_1))                  /*!< 11 time quantum */
+#define CAN_BS1_12TQ                ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_1 | CAN_BTR_TS1_0))  /*!< 12 time quantum */
+#define CAN_BS1_13TQ                ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_2))                  /*!< 13 time quantum */
+#define CAN_BS1_14TQ                ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_2 | CAN_BTR_TS1_0))  /*!< 14 time quantum */
+#define CAN_BS1_15TQ                ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_2 | CAN_BTR_TS1_1))  /*!< 15 time quantum */
+#define CAN_BS1_16TQ                ((uint32_t)CAN_BTR_TS1) /*!< 16 time quantum */
+/**
+  * @}
+  */
+
+/** @defgroup CAN_time_quantum_in_bit_segment_2 CAN Time Quantum in Bit Segment 2
+  * @{
+  */
+#define CAN_BS2_1TQ                 (0x00000000U)                                /*!< 1 time quantum */
+#define CAN_BS2_2TQ                 ((uint32_t)CAN_BTR_TS2_0)                    /*!< 2 time quantum */
+#define CAN_BS2_3TQ                 ((uint32_t)CAN_BTR_TS2_1)                    /*!< 3 time quantum */
+#define CAN_BS2_4TQ                 ((uint32_t)(CAN_BTR_TS2_1 | CAN_BTR_TS2_0))  /*!< 4 time quantum */
+#define CAN_BS2_5TQ                 ((uint32_t)CAN_BTR_TS2_2)                    /*!< 5 time quantum */
+#define CAN_BS2_6TQ                 ((uint32_t)(CAN_BTR_TS2_2 | CAN_BTR_TS2_0))  /*!< 6 time quantum */
+#define CAN_BS2_7TQ                 ((uint32_t)(CAN_BTR_TS2_2 | CAN_BTR_TS2_1))  /*!< 7 time quantum */
+#define CAN_BS2_8TQ                 ((uint32_t)CAN_BTR_TS2)                      /*!< 8 time quantum */
+/**
+  * @}
+  */
+
+/** @defgroup CAN_filter_mode CAN Filter Mode
+  * @{
+  */
+#define CAN_FILTERMODE_IDMASK       (0x00000000U)  /*!< Identifier mask mode */
+#define CAN_FILTERMODE_IDLIST       (0x00000001U)  /*!< Identifier list mode */
+/**
+  * @}
+  */
+
+/** @defgroup CAN_filter_scale CAN Filter Scale
+  * @{
+  */
+#define CAN_FILTERSCALE_16BIT       (0x00000000U)  /*!< Two 16-bit filters */
+#define CAN_FILTERSCALE_32BIT       (0x00000001U)  /*!< One 32-bit filter  */
+/**
+  * @}
+  */
+
+/** @defgroup CAN_filter_activation CAN Filter Activation
+  * @{
+  */
+#define CAN_FILTER_DISABLE          (0x00000000U)  /*!< Disable filter */
+#define CAN_FILTER_ENABLE           (0x00000001U)  /*!< Enable filter  */
+/**
+  * @}
+  */
+
+/** @defgroup CAN_filter_FIFO CAN Filter FIFO
+  * @{
+  */
+#define CAN_FILTER_FIFO0            (0x00000000U)  /*!< Filter FIFO 0 assignment for filter x */
+#define CAN_FILTER_FIFO1            (0x00000001U)  /*!< Filter FIFO 1 assignment for filter x */
+/**
+  * @}
+  */
+
+/** @defgroup CAN_identifier_type CAN Identifier Type
+  * @{
+  */
+#define CAN_ID_STD                  (0x00000000U)  /*!< Standard Id */
+#define CAN_ID_EXT                  (0x00000004U)  /*!< Extended Id */
+/**
+  * @}
+  */
+
+/** @defgroup CAN_remote_transmission_request CAN Remote Transmission Request
+  * @{
+  */
+#define CAN_RTR_DATA                (0x00000000U)  /*!< Data frame   */
+#define CAN_RTR_REMOTE              (0x00000002U)  /*!< Remote frame */
+/**
+  * @}
+  */
+
+/** @defgroup CAN_receive_FIFO_number CAN Receive FIFO Number
+  * @{
+  */
+#define CAN_RX_FIFO0                (0x00000000U)  /*!< CAN receive FIFO 0 */
+#define CAN_RX_FIFO1                (0x00000001U)  /*!< CAN receive FIFO 1 */
+/**
+  * @}
+  */
+
+/** @defgroup CAN_Tx_Mailboxes CAN Tx Mailboxes
+  * @{
+  */
+#define CAN_TX_MAILBOX0             (0x00000001U)  /*!< Tx Mailbox 0  */
+#define CAN_TX_MAILBOX1             (0x00000002U)  /*!< Tx Mailbox 1  */
+#define CAN_TX_MAILBOX2             (0x00000004U)  /*!< Tx Mailbox 2  */
+/**
+  * @}
+  */
+
+/** @defgroup CAN_flags CAN Flags
+  * @{
+  */
+/* Transmit Flags */
+#define CAN_FLAG_RQCP0              (0x00000500U)  /*!< Request complete MailBox 0 flag   */
+#define CAN_FLAG_TXOK0              (0x00000501U)  /*!< Transmission OK MailBox 0 flag    */
+#define CAN_FLAG_ALST0              (0x00000502U)  /*!< Arbitration Lost MailBox 0 flag   */
+#define CAN_FLAG_TERR0              (0x00000503U)  /*!< Transmission error MailBox 0 flag */
+#define CAN_FLAG_RQCP1              (0x00000508U)  /*!< Request complete MailBox1 flag    */
+#define CAN_FLAG_TXOK1              (0x00000509U)  /*!< Transmission OK MailBox 1 flag    */
+#define CAN_FLAG_ALST1              (0x0000050AU)  /*!< Arbitration Lost MailBox 1 flag   */
+#define CAN_FLAG_TERR1              (0x0000050BU)  /*!< Transmission error MailBox 1 flag */
+#define CAN_FLAG_RQCP2              (0x00000510U)  /*!< Request complete MailBox2 flag    */
+#define CAN_FLAG_TXOK2              (0x00000511U)  /*!< Transmission OK MailBox 2 flag    */
+#define CAN_FLAG_ALST2              (0x00000512U)  /*!< Arbitration Lost MailBox 2 flag   */
+#define CAN_FLAG_TERR2              (0x00000513U)  /*!< Transmission error MailBox 2 flag */
+#define CAN_FLAG_TME0               (0x0000051AU)  /*!< Transmit mailbox 0 empty flag     */
+#define CAN_FLAG_TME1               (0x0000051BU)  /*!< Transmit mailbox 1 empty flag     */
+#define CAN_FLAG_TME2               (0x0000051CU)  /*!< Transmit mailbox 2 empty flag     */
+#define CAN_FLAG_LOW0               (0x0000051DU)  /*!< Lowest priority mailbox 0 flag    */
+#define CAN_FLAG_LOW1               (0x0000051EU)  /*!< Lowest priority mailbox 1 flag    */
+#define CAN_FLAG_LOW2               (0x0000051FU)  /*!< Lowest priority mailbox 2 flag    */
+
+/* Receive Flags */
+#define CAN_FLAG_FF0                (0x00000203U)  /*!< RX FIFO 0 Full flag               */
+#define CAN_FLAG_FOV0               (0x00000204U)  /*!< RX FIFO 0 Overrun flag            */
+#define CAN_FLAG_FF1                (0x00000403U)  /*!< RX FIFO 1 Full flag               */
+#define CAN_FLAG_FOV1               (0x00000404U)  /*!< RX FIFO 1 Overrun flag            */
+
+/* Operating Mode Flags */
+#define CAN_FLAG_INAK               (0x00000100U)  /*!< Initialization acknowledge flag   */
+#define CAN_FLAG_SLAK               (0x00000101U)  /*!< Sleep acknowledge flag            */
+#define CAN_FLAG_ERRI               (0x00000102U)  /*!< Error flag                        */
+#define CAN_FLAG_WKU                (0x00000103U)  /*!< Wake up interrupt flag            */
+#define CAN_FLAG_SLAKI              (0x00000104U)  /*!< Sleep acknowledge interrupt flag  */
+
+/* Error Flags */
+#define CAN_FLAG_EWG                (0x00000300U)  /*!< Error warning flag                */
+#define CAN_FLAG_EPV                (0x00000301U)  /*!< Error passive flag                */
+#define CAN_FLAG_BOF                (0x00000302U)  /*!< Bus-Off flag                      */
+/**
+  * @}
+  */
+
+
+/** @defgroup CAN_Interrupts CAN Interrupts
+  * @{
+  */
+/* Transmit Interrupt */
+#define CAN_IT_TX_MAILBOX_EMPTY     ((uint32_t)CAN_IER_TMEIE)   /*!< Transmit mailbox empty interrupt */
+
+/* Receive Interrupts */
+#define CAN_IT_RX_FIFO0_MSG_PENDING ((uint32_t)CAN_IER_FMPIE0)  /*!< FIFO 0 message pending interrupt */
+#define CAN_IT_RX_FIFO0_FULL        ((uint32_t)CAN_IER_FFIE0)   /*!< FIFO 0 full interrupt            */
+#define CAN_IT_RX_FIFO0_OVERRUN     ((uint32_t)CAN_IER_FOVIE0)  /*!< FIFO 0 overrun interrupt         */
+#define CAN_IT_RX_FIFO1_MSG_PENDING ((uint32_t)CAN_IER_FMPIE1)  /*!< FIFO 1 message pending interrupt */
+#define CAN_IT_RX_FIFO1_FULL        ((uint32_t)CAN_IER_FFIE1)   /*!< FIFO 1 full interrupt            */
+#define CAN_IT_RX_FIFO1_OVERRUN     ((uint32_t)CAN_IER_FOVIE1)  /*!< FIFO 1 overrun interrupt         */
+
+/* Operating Mode Interrupts */
+#define CAN_IT_WAKEUP               ((uint32_t)CAN_IER_WKUIE)   /*!< Wake-up interrupt                */
+#define CAN_IT_SLEEP_ACK            ((uint32_t)CAN_IER_SLKIE)   /*!< Sleep acknowledge interrupt      */
+
+/* Error Interrupts */
+#define CAN_IT_ERROR_WARNING        ((uint32_t)CAN_IER_EWGIE)   /*!< Error warning interrupt          */
+#define CAN_IT_ERROR_PASSIVE        ((uint32_t)CAN_IER_EPVIE)   /*!< Error passive interrupt          */
+#define CAN_IT_BUSOFF               ((uint32_t)CAN_IER_BOFIE)   /*!< Bus-off interrupt                */
+#define CAN_IT_LAST_ERROR_CODE      ((uint32_t)CAN_IER_LECIE)   /*!< Last error code interrupt        */
+#define CAN_IT_ERROR                ((uint32_t)CAN_IER_ERRIE)   /*!< Error Interrupt                  */
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/* Exported macros -----------------------------------------------------------*/
+/** @defgroup CAN_Exported_Macros CAN Exported Macros
+  * @{
+  */
+
+/** @brief  Reset CAN handle state
+  * @param  __HANDLE__ CAN handle.
+  * @retval None
+  */
+#if USE_HAL_CAN_REGISTER_CALLBACKS == 1
+#define __HAL_CAN_RESET_HANDLE_STATE(__HANDLE__) do{                                              \
+                                                     (__HANDLE__)->State = HAL_CAN_STATE_RESET;   \
+                                                     (__HANDLE__)->MspInitCallback = NULL;        \
+                                                     (__HANDLE__)->MspDeInitCallback = NULL;      \
+                                                   } while(0)
+#else
+#define __HAL_CAN_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_CAN_STATE_RESET)
+#endif /*USE_HAL_CAN_REGISTER_CALLBACKS */
+
+/**
+  * @brief  Enable the specified CAN interrupts.
+  * @param  __HANDLE__ CAN handle.
+  * @param  __INTERRUPT__ CAN Interrupt sources to enable.
+  *           This parameter can be any combination of @arg CAN_Interrupts
+  * @retval None
+  */
+#define __HAL_CAN_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) |= (__INTERRUPT__))
+
+/**
+  * @brief  Disable the specified CAN interrupts.
+  * @param  __HANDLE__ CAN handle.
+  * @param  __INTERRUPT__ CAN Interrupt sources to disable.
+  *           This parameter can be any combination of @arg CAN_Interrupts
+  * @retval None
+  */
+#define __HAL_CAN_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) &= ~(__INTERRUPT__))
+
+/** @brief  Check if the specified CAN interrupt source is enabled or disabled.
+  * @param  __HANDLE__ specifies the CAN Handle.
+  * @param  __INTERRUPT__ specifies the CAN interrupt source to check.
+  *           This parameter can be a value of @arg CAN_Interrupts
+  * @retval The state of __IT__ (TRUE or FALSE).
+  */
+#define __HAL_CAN_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) & (__INTERRUPT__))
+
+/** @brief  Check whether the specified CAN flag is set or not.
+  * @param  __HANDLE__ specifies the CAN Handle.
+  * @param  __FLAG__ specifies the flag to check.
+  *         This parameter can be one of @arg CAN_flags
+  * @retval The state of __FLAG__ (TRUE or FALSE).
+  */
+#define __HAL_CAN_GET_FLAG(__HANDLE__, __FLAG__) \
+  ((((__FLAG__) >> 8U) == 5U)? ((((__HANDLE__)->Instance->TSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \
+   (((__FLAG__) >> 8U) == 2U)? ((((__HANDLE__)->Instance->RF0R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \
+   (((__FLAG__) >> 8U) == 4U)? ((((__HANDLE__)->Instance->RF1R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \
+   (((__FLAG__) >> 8U) == 1U)? ((((__HANDLE__)->Instance->MSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \
+   (((__FLAG__) >> 8U) == 3U)? ((((__HANDLE__)->Instance->ESR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U)
+
+/** @brief  Clear the specified CAN pending flag.
+  * @param  __HANDLE__ specifies the CAN Handle.
+  * @param  __FLAG__ specifies the flag to check.
+  *         This parameter can be one of the following values:
+  *            @arg CAN_FLAG_RQCP0: Request complete MailBox 0 Flag
+  *            @arg CAN_FLAG_TXOK0: Transmission OK MailBox 0 Flag
+  *            @arg CAN_FLAG_ALST0: Arbitration Lost MailBox 0 Flag
+  *            @arg CAN_FLAG_TERR0: Transmission error MailBox 0 Flag
+  *            @arg CAN_FLAG_RQCP1: Request complete MailBox 1 Flag
+  *            @arg CAN_FLAG_TXOK1: Transmission OK MailBox 1 Flag
+  *            @arg CAN_FLAG_ALST1: Arbitration Lost MailBox 1 Flag
+  *            @arg CAN_FLAG_TERR1: Transmission error MailBox 1 Flag
+  *            @arg CAN_FLAG_RQCP2: Request complete MailBox 2 Flag
+  *            @arg CAN_FLAG_TXOK2: Transmission OK MailBox 2 Flag
+  *            @arg CAN_FLAG_ALST2: Arbitration Lost MailBox 2 Flag
+  *            @arg CAN_FLAG_TERR2: Transmission error MailBox 2 Flag
+  *            @arg CAN_FLAG_FF0:   RX FIFO 0 Full Flag
+  *            @arg CAN_FLAG_FOV0:  RX FIFO 0 Overrun Flag
+  *            @arg CAN_FLAG_FF1:   RX FIFO 1 Full Flag
+  *            @arg CAN_FLAG_FOV1:  RX FIFO 1 Overrun Flag
+  *            @arg CAN_FLAG_WKUI:  Wake up Interrupt Flag
+  *            @arg CAN_FLAG_SLAKI: Sleep acknowledge Interrupt Flag
+  * @retval None
+  */
+#define __HAL_CAN_CLEAR_FLAG(__HANDLE__, __FLAG__) \
+  ((((__FLAG__) >> 8U) == 5U)? (((__HANDLE__)->Instance->TSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \
+   (((__FLAG__) >> 8U) == 2U)? (((__HANDLE__)->Instance->RF0R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \
+   (((__FLAG__) >> 8U) == 4U)? (((__HANDLE__)->Instance->RF1R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \
+   (((__FLAG__) >> 8U) == 1U)? (((__HANDLE__)->Instance->MSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U)
+
+/**
+ * @}
+ */
+
+/* Exported functions --------------------------------------------------------*/
+/** @addtogroup CAN_Exported_Functions CAN Exported Functions
+  * @{
+  */
+
+/** @addtogroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions
+ *  @brief    Initialization and Configuration functions
+ * @{
+ */
+
+/* Initialization and de-initialization functions *****************************/
+HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan);
+HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef *hcan);
+void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan);
+void HAL_CAN_MspDeInit(CAN_HandleTypeDef *hcan);
+
+#if USE_HAL_CAN_REGISTER_CALLBACKS == 1
+/* Callbacks Register/UnRegister functions  ***********************************/
+HAL_StatusTypeDef HAL_CAN_RegisterCallback(CAN_HandleTypeDef *hcan, HAL_CAN_CallbackIDTypeDef CallbackID, void (* pCallback)(CAN_HandleTypeDef *_hcan));
+HAL_StatusTypeDef HAL_CAN_UnRegisterCallback(CAN_HandleTypeDef *hcan, HAL_CAN_CallbackIDTypeDef CallbackID);
+
+#endif /* (USE_HAL_CAN_REGISTER_CALLBACKS) */
+/**
+ * @}
+ */
+
+/** @addtogroup CAN_Exported_Functions_Group2 Configuration functions
+ *  @brief    Configuration functions
+ * @{
+ */
+
+/* Configuration functions ****************************************************/
+HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterTypeDef *sFilterConfig);
+
+/**
+ * @}
+ */
+
+/** @addtogroup CAN_Exported_Functions_Group3 Control functions
+ *  @brief    Control functions
+ * @{
+ */
+
+/* Control functions **********************************************************/
+HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan);
+HAL_StatusTypeDef HAL_CAN_Stop(CAN_HandleTypeDef *hcan);
+HAL_StatusTypeDef HAL_CAN_RequestSleep(CAN_HandleTypeDef *hcan);
+HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan);
+uint32_t HAL_CAN_IsSleepActive(CAN_HandleTypeDef *hcan);
+HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox);
+HAL_StatusTypeDef HAL_CAN_AbortTxRequest(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes);
+uint32_t HAL_CAN_GetTxMailboxesFreeLevel(CAN_HandleTypeDef *hcan);
+uint32_t HAL_CAN_IsTxMessagePending(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes);
+uint32_t HAL_CAN_GetTxTimestamp(CAN_HandleTypeDef *hcan, uint32_t TxMailbox);
+HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]);
+uint32_t HAL_CAN_GetRxFifoFillLevel(CAN_HandleTypeDef *hcan, uint32_t RxFifo);
+
+/**
+ * @}
+ */
+
+/** @addtogroup CAN_Exported_Functions_Group4 Interrupts management
+ *  @brief    Interrupts management
+ * @{
+ */
+/* Interrupts management ******************************************************/
+HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan, uint32_t ActiveITs);
+HAL_StatusTypeDef HAL_CAN_DeactivateNotification(CAN_HandleTypeDef *hcan, uint32_t InactiveITs);
+void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan);
+
+/**
+ * @}
+ */
+
+/** @addtogroup CAN_Exported_Functions_Group5 Callback functions
+ *  @brief    Callback functions
+ * @{
+ */
+/* Callbacks functions ********************************************************/
+
+void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan);
+void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan);
+void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan);
+void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan);
+void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan);
+void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan);
+void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan);
+void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *hcan);
+void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan);
+void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan);
+void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan);
+void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan);
+void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan);
+
+/**
+ * @}
+ */
+
+/** @addtogroup CAN_Exported_Functions_Group6 Peripheral State and Error functions
+ *  @brief   CAN Peripheral State functions
+ * @{
+ */
+/* Peripheral State and Error functions ***************************************/
+HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef *hcan);
+uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan);
+HAL_StatusTypeDef HAL_CAN_ResetError(CAN_HandleTypeDef *hcan);
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/* Private types -------------------------------------------------------------*/
+/** @defgroup CAN_Private_Types CAN Private Types
+  * @{
+  */
+
+/**
+  * @}
+  */
+
+/* Private variables ---------------------------------------------------------*/
+/** @defgroup CAN_Private_Variables CAN Private Variables
+  * @{
+  */
+
+/**
+  * @}
+  */
+
+/* Private constants ---------------------------------------------------------*/
+/** @defgroup CAN_Private_Constants CAN Private Constants
+  * @{
+  */
+#define CAN_FLAG_MASK  (0x000000FFU)
+/**
+  * @}
+  */
+
+/* Private Macros -----------------------------------------------------------*/
+/** @defgroup CAN_Private_Macros CAN Private Macros
+  * @{
+  */
+
+#define IS_CAN_MODE(MODE) (((MODE) == CAN_MODE_NORMAL) || \
+                           ((MODE) == CAN_MODE_LOOPBACK)|| \
+                           ((MODE) == CAN_MODE_SILENT) || \
+                           ((MODE) == CAN_MODE_SILENT_LOOPBACK))
+#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ) || \
+                         ((SJW) == CAN_SJW_3TQ) || ((SJW) == CAN_SJW_4TQ))
+#define IS_CAN_BS1(BS1) (((BS1) == CAN_BS1_1TQ) || ((BS1) == CAN_BS1_2TQ) || \
+                         ((BS1) == CAN_BS1_3TQ) || ((BS1) == CAN_BS1_4TQ) || \
+                         ((BS1) == CAN_BS1_5TQ) || ((BS1) == CAN_BS1_6TQ) || \
+                         ((BS1) == CAN_BS1_7TQ) || ((BS1) == CAN_BS1_8TQ) || \
+                         ((BS1) == CAN_BS1_9TQ) || ((BS1) == CAN_BS1_10TQ)|| \
+                         ((BS1) == CAN_BS1_11TQ)|| ((BS1) == CAN_BS1_12TQ)|| \
+                         ((BS1) == CAN_BS1_13TQ)|| ((BS1) == CAN_BS1_14TQ)|| \
+                         ((BS1) == CAN_BS1_15TQ)|| ((BS1) == CAN_BS1_16TQ))
+#define IS_CAN_BS2(BS2) (((BS2) == CAN_BS2_1TQ) || ((BS2) == CAN_BS2_2TQ) || \
+                         ((BS2) == CAN_BS2_3TQ) || ((BS2) == CAN_BS2_4TQ) || \
+                         ((BS2) == CAN_BS2_5TQ) || ((BS2) == CAN_BS2_6TQ) || \
+                         ((BS2) == CAN_BS2_7TQ) || ((BS2) == CAN_BS2_8TQ))
+#define IS_CAN_PRESCALER(PRESCALER) (((PRESCALER) >= 1U) && ((PRESCALER) <= 1024U))
+#define IS_CAN_FILTER_ID_HALFWORD(HALFWORD) ((HALFWORD) <= 0xFFFFU)
+#define IS_CAN_FILTER_BANK_DUAL(BANK) ((BANK) <= 27U)
+#define IS_CAN_FILTER_BANK_SINGLE(BANK) ((BANK) <= 13U)
+#define IS_CAN_FILTER_MODE(MODE) (((MODE) == CAN_FILTERMODE_IDMASK) || \
+                                  ((MODE) == CAN_FILTERMODE_IDLIST))
+#define IS_CAN_FILTER_SCALE(SCALE) (((SCALE) == CAN_FILTERSCALE_16BIT) || \
+                                    ((SCALE) == CAN_FILTERSCALE_32BIT))
+#define IS_CAN_FILTER_ACTIVATION(ACTIVATION) (((ACTIVATION) == CAN_FILTER_DISABLE) || \
+                                              ((ACTIVATION) == CAN_FILTER_ENABLE))
+#define IS_CAN_FILTER_FIFO(FIFO) (((FIFO) == CAN_FILTER_FIFO0) || \
+                                  ((FIFO) == CAN_FILTER_FIFO1))
+#define IS_CAN_TX_MAILBOX(TRANSMITMAILBOX) (((TRANSMITMAILBOX) == CAN_TX_MAILBOX0 ) || \
+                                            ((TRANSMITMAILBOX) == CAN_TX_MAILBOX1 ) || \
+                                            ((TRANSMITMAILBOX) == CAN_TX_MAILBOX2 ))
+#define IS_CAN_TX_MAILBOX_LIST(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= (CAN_TX_MAILBOX0 | CAN_TX_MAILBOX1 | CAN_TX_MAILBOX2))
+#define IS_CAN_STDID(STDID)   ((STDID) <= 0x7FFU)
+#define IS_CAN_EXTID(EXTID)   ((EXTID) <= 0x1FFFFFFFU)
+#define IS_CAN_DLC(DLC)       ((DLC) <= 8U)
+#define IS_CAN_IDTYPE(IDTYPE)  (((IDTYPE) == CAN_ID_STD) || \
+                                ((IDTYPE) == CAN_ID_EXT))
+#define IS_CAN_RTR(RTR) (((RTR) == CAN_RTR_DATA) || ((RTR) == CAN_RTR_REMOTE))
+#define IS_CAN_RX_FIFO(FIFO) (((FIFO) == CAN_RX_FIFO0) || ((FIFO) == CAN_RX_FIFO1))
+#define IS_CAN_IT(IT) ((IT) <= (CAN_IT_TX_MAILBOX_EMPTY     | CAN_IT_RX_FIFO0_MSG_PENDING      | \
+                                CAN_IT_RX_FIFO0_FULL        | CAN_IT_RX_FIFO0_OVERRUN          | \
+                                CAN_IT_RX_FIFO1_MSG_PENDING | CAN_IT_RX_FIFO1_FULL             | \
+                                CAN_IT_RX_FIFO1_OVERRUN     | CAN_IT_WAKEUP                    | \
+                                CAN_IT_SLEEP_ACK            | CAN_IT_ERROR_WARNING             | \
+                                CAN_IT_ERROR_PASSIVE        | CAN_IT_BUSOFF                    | \
+                                CAN_IT_LAST_ERROR_CODE      | CAN_IT_ERROR))
+
+/**
+  * @}
+  */
+/* End of private macros -----------------------------------------------------*/
+
+/**
+  * @}
+  */
+
+
+#endif /* CAN1 */
+/**
+  * @}
+  */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* STM32F4xx_HAL_CAN_H */
+
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Standard_robot/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c b/Standard_robot/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c
new file mode 100644
index 0000000000000000000000000000000000000000..009a4473fd032c93d10f46f7c6b5a30c64c34cc7
--- /dev/null
+++ b/Standard_robot/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c
@@ -0,0 +1,2464 @@
+/**
+  ******************************************************************************
+  * @file    stm32f4xx_hal_can.c
+  * @author  MCD Application Team
+  * @brief   CAN HAL module driver.
+  *          This file provides firmware functions to manage the following
+  *          functionalities of the Controller Area Network (CAN) peripheral:
+  *           + Initialization and de-initialization functions
+  *           + Configuration functions
+  *           + Control functions
+  *           + Interrupts management
+  *           + Callbacks functions
+  *           + Peripheral State and Error functions
+  *
+  @verbatim
+  ==============================================================================
+                        ##### How to use this driver #####
+  ==============================================================================
+    [..]
+      (#) Initialize the CAN low level resources by implementing the
+          HAL_CAN_MspInit():
+         (++) Enable the CAN interface clock using __HAL_RCC_CANx_CLK_ENABLE()
+         (++) Configure CAN pins
+             (+++) Enable the clock for the CAN GPIOs
+             (+++) Configure CAN pins as alternate function open-drain
+         (++) In case of using interrupts (e.g. HAL_CAN_ActivateNotification())
+             (+++) Configure the CAN interrupt priority using
+                   HAL_NVIC_SetPriority()
+             (+++) Enable the CAN IRQ handler using HAL_NVIC_EnableIRQ()
+             (+++) In CAN IRQ handler, call HAL_CAN_IRQHandler()
+
+      (#) Initialize the CAN peripheral using HAL_CAN_Init() function. This
+          function resorts to HAL_CAN_MspInit() for low-level initialization.
+
+      (#) Configure the reception filters using the following configuration
+          functions:
+            (++) HAL_CAN_ConfigFilter()
+
+      (#) Start the CAN module using HAL_CAN_Start() function. At this level
+          the node is active on the bus: it receive messages, and can send
+          messages.
+
+      (#) To manage messages transmission, the following Tx control functions
+          can be used:
+            (++) HAL_CAN_AddTxMessage() to request transmission of a new
+                 message.
+            (++) HAL_CAN_AbortTxRequest() to abort transmission of a pending
+                 message.
+            (++) HAL_CAN_GetTxMailboxesFreeLevel() to get the number of free Tx
+                 mailboxes.
+            (++) HAL_CAN_IsTxMessagePending() to check if a message is pending
+                 in a Tx mailbox.
+            (++) HAL_CAN_GetTxTimestamp() to get the timestamp of Tx message
+                 sent, if time triggered communication mode is enabled.
+
+      (#) When a message is received into the CAN Rx FIFOs, it can be retrieved
+          using the HAL_CAN_GetRxMessage() function. The function
+          HAL_CAN_GetRxFifoFillLevel() allows to know how many Rx message are
+          stored in the Rx Fifo.
+
+      (#) Calling the HAL_CAN_Stop() function stops the CAN module.
+
+      (#) The deinitialization is achieved with HAL_CAN_DeInit() function.
+
+
+      *** Polling mode operation ***
+      ==============================
+    [..]
+      (#) Reception:
+            (++) Monitor reception of message using HAL_CAN_GetRxFifoFillLevel()
+                 until at least one message is received.
+            (++) Then get the message using HAL_CAN_GetRxMessage().
+
+      (#) Transmission:
+            (++) Monitor the Tx mailboxes availability until at least one Tx
+                 mailbox is free, using HAL_CAN_GetTxMailboxesFreeLevel().
+            (++) Then request transmission of a message using
+                 HAL_CAN_AddTxMessage().
+
+
+      *** Interrupt mode operation ***
+      ================================
+    [..]
+      (#) Notifications are activated using HAL_CAN_ActivateNotification()
+          function. Then, the process can be controlled through the
+          available user callbacks: HAL_CAN_xxxCallback(), using same APIs
+          HAL_CAN_GetRxMessage() and HAL_CAN_AddTxMessage().
+
+      (#) Notifications can be deactivated using
+          HAL_CAN_DeactivateNotification() function.
+
+      (#) Special care should be taken for CAN_IT_RX_FIFO0_MSG_PENDING and
+          CAN_IT_RX_FIFO1_MSG_PENDING notifications. These notifications trig
+          the callbacks HAL_CAN_RxFIFO0MsgPendingCallback() and
+          HAL_CAN_RxFIFO1MsgPendingCallback(). User has two possible options
+          here.
+            (++) Directly get the Rx message in the callback, using
+                 HAL_CAN_GetRxMessage().
+            (++) Or deactivate the notification in the callback without
+                 getting the Rx message. The Rx message can then be got later
+                 using HAL_CAN_GetRxMessage(). Once the Rx message have been
+                 read, the notification can be activated again.
+
+
+      *** Sleep mode ***
+      ==================
+    [..]
+      (#) The CAN peripheral can be put in sleep mode (low power), using
+          HAL_CAN_RequestSleep(). The sleep mode will be entered as soon as the
+          current CAN activity (transmission or reception of a CAN frame) will
+          be completed.
+
+      (#) A notification can be activated to be informed when the sleep mode
+          will be entered.
+
+      (#) It can be checked if the sleep mode is entered using
+          HAL_CAN_IsSleepActive().
+          Note that the CAN state (accessible from the API HAL_CAN_GetState())
+          is HAL_CAN_STATE_SLEEP_PENDING as soon as the sleep mode request is
+          submitted (the sleep mode is not yet entered), and become
+          HAL_CAN_STATE_SLEEP_ACTIVE when the sleep mode is effective.
+
+      (#) The wake-up from sleep mode can be trigged by two ways:
+            (++) Using HAL_CAN_WakeUp(). When returning from this function,
+                 the sleep mode is exited (if return status is HAL_OK).
+            (++) When a start of Rx CAN frame is detected by the CAN peripheral,
+                 if automatic wake up mode is enabled.
+
+  *** Callback registration ***
+  =============================================
+
+  The compilation define  USE_HAL_CAN_REGISTER_CALLBACKS when set to 1
+  allows the user to configure dynamically the driver callbacks.
+  Use Function @ref HAL_CAN_RegisterCallback() to register an interrupt callback.
+
+  Function @ref HAL_CAN_RegisterCallback() allows to register following callbacks:
+    (+) TxMailbox0CompleteCallback   : Tx Mailbox 0 Complete Callback.
+    (+) TxMailbox1CompleteCallback   : Tx Mailbox 1 Complete Callback.
+    (+) TxMailbox2CompleteCallback   : Tx Mailbox 2 Complete Callback.
+    (+) TxMailbox0AbortCallback      : Tx Mailbox 0 Abort Callback.
+    (+) TxMailbox1AbortCallback      : Tx Mailbox 1 Abort Callback.
+    (+) TxMailbox2AbortCallback      : Tx Mailbox 2 Abort Callback.
+    (+) RxFifo0MsgPendingCallback    : Rx Fifo 0 Message Pending Callback.
+    (+) RxFifo0FullCallback          : Rx Fifo 0 Full Callback.
+    (+) RxFifo1MsgPendingCallback    : Rx Fifo 1 Message Pending Callback.
+    (+) RxFifo1FullCallback          : Rx Fifo 1 Full Callback.
+    (+) SleepCallback                : Sleep Callback.
+    (+) WakeUpFromRxMsgCallback      : Wake Up From Rx Message Callback.
+    (+) ErrorCallback                : Error Callback.
+    (+) MspInitCallback              : CAN MspInit.
+    (+) MspDeInitCallback            : CAN MspDeInit.
+  This function takes as parameters the HAL peripheral handle, the Callback ID
+  and a pointer to the user callback function.
+
+  Use function @ref HAL_CAN_UnRegisterCallback() to reset a callback to the default
+  weak function.
+  @ref HAL_CAN_UnRegisterCallback takes as parameters the HAL peripheral handle,
+  and the Callback ID.
+  This function allows to reset following callbacks:
+    (+) TxMailbox0CompleteCallback   : Tx Mailbox 0 Complete Callback.
+    (+) TxMailbox1CompleteCallback   : Tx Mailbox 1 Complete Callback.
+    (+) TxMailbox2CompleteCallback   : Tx Mailbox 2 Complete Callback.
+    (+) TxMailbox0AbortCallback      : Tx Mailbox 0 Abort Callback.
+    (+) TxMailbox1AbortCallback      : Tx Mailbox 1 Abort Callback.
+    (+) TxMailbox2AbortCallback      : Tx Mailbox 2 Abort Callback.
+    (+) RxFifo0MsgPendingCallback    : Rx Fifo 0 Message Pending Callback.
+    (+) RxFifo0FullCallback          : Rx Fifo 0 Full Callback.
+    (+) RxFifo1MsgPendingCallback    : Rx Fifo 1 Message Pending Callback.
+    (+) RxFifo1FullCallback          : Rx Fifo 1 Full Callback.
+    (+) SleepCallback                : Sleep Callback.
+    (+) WakeUpFromRxMsgCallback      : Wake Up From Rx Message Callback.
+    (+) ErrorCallback                : Error Callback.
+    (+) MspInitCallback              : CAN MspInit.
+    (+) MspDeInitCallback            : CAN MspDeInit.
+
+  By default, after the @ref HAL_CAN_Init() and when the state is HAL_CAN_STATE_RESET,
+  all callbacks are set to the corresponding weak functions:
+  example @ref HAL_CAN_ErrorCallback().
+  Exception done for MspInit and MspDeInit functions that are
+  reset to the legacy weak function in the @ref HAL_CAN_Init()/ @ref HAL_CAN_DeInit() only when
+  these callbacks are null (not registered beforehand).
+  if not, MspInit or MspDeInit are not null, the @ref HAL_CAN_Init()/ @ref HAL_CAN_DeInit()
+  keep and use the user MspInit/MspDeInit callbacks (registered beforehand)
+
+  Callbacks can be registered/unregistered in HAL_CAN_STATE_READY state only.
+  Exception done MspInit/MspDeInit that can be registered/unregistered
+  in HAL_CAN_STATE_READY or HAL_CAN_STATE_RESET state,
+  thus registered (user) MspInit/DeInit callbacks can be used during the Init/DeInit.
+  In that case first register the MspInit/MspDeInit user callbacks
+  using @ref HAL_CAN_RegisterCallback() before calling @ref HAL_CAN_DeInit()
+  or @ref HAL_CAN_Init() function.
+
+  When The compilation define USE_HAL_CAN_REGISTER_CALLBACKS is set to 0 or
+  not defined, the callback registration feature is not available and all callbacks
+  are set to the corresponding weak functions.
+
+  @endverbatim
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under BSD 3-Clause license,
+  * the "License"; You may not use this file except in compliance with the
+  * License. You may obtain a copy of the License at:
+  *                        opensource.org/licenses/BSD-3-Clause
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32f4xx_hal.h"
+
+/** @addtogroup STM32F4xx_HAL_Driver
+  * @{
+  */
+
+#if defined(CAN1)
+
+/** @defgroup CAN CAN
+  * @brief CAN driver modules
+  * @{
+  */
+
+#ifdef HAL_CAN_MODULE_ENABLED
+
+#ifdef HAL_CAN_LEGACY_MODULE_ENABLED
+  #error "The CAN driver cannot be used with its legacy, Please enable only one CAN module at once"
+#endif
+
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+/** @defgroup CAN_Private_Constants CAN Private Constants
+  * @{
+  */
+#define CAN_TIMEOUT_VALUE 10U
+/**
+  * @}
+  */
+/* Private macro -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+/* Private function prototypes -----------------------------------------------*/
+/* Exported functions --------------------------------------------------------*/
+
+/** @defgroup CAN_Exported_Functions CAN Exported Functions
+  * @{
+  */
+
+/** @defgroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions
+ *  @brief    Initialization and Configuration functions
+ *
+@verbatim
+  ==============================================================================
+              ##### Initialization and de-initialization functions #####
+  ==============================================================================
+    [..]  This section provides functions allowing to:
+      (+) HAL_CAN_Init                       : Initialize and configure the CAN.
+      (+) HAL_CAN_DeInit                     : De-initialize the CAN.
+      (+) HAL_CAN_MspInit                    : Initialize the CAN MSP.
+      (+) HAL_CAN_MspDeInit                  : DeInitialize the CAN MSP.
+
+@endverbatim
+  * @{
+  */
+
+/**
+  * @brief  Initializes the CAN peripheral according to the specified
+  *         parameters in the CAN_InitStruct.
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval HAL status
+  */
+HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan)
+{
+  uint32_t tickstart;
+
+  /* Check CAN handle */
+  if (hcan == NULL)
+  {
+    return HAL_ERROR;
+  }
+
+  /* Check the parameters */
+  assert_param(IS_CAN_ALL_INSTANCE(hcan->Instance));
+  assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TimeTriggeredMode));
+  assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoBusOff));
+  assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoWakeUp));
+  assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoRetransmission));
+  assert_param(IS_FUNCTIONAL_STATE(hcan->Init.ReceiveFifoLocked));
+  assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TransmitFifoPriority));
+  assert_param(IS_CAN_MODE(hcan->Init.Mode));
+  assert_param(IS_CAN_SJW(hcan->Init.SyncJumpWidth));
+  assert_param(IS_CAN_BS1(hcan->Init.TimeSeg1));
+  assert_param(IS_CAN_BS2(hcan->Init.TimeSeg2));
+  assert_param(IS_CAN_PRESCALER(hcan->Init.Prescaler));
+
+#if USE_HAL_CAN_REGISTER_CALLBACKS == 1
+  if (hcan->State == HAL_CAN_STATE_RESET)
+  {
+    /* Reset callbacks to legacy functions */
+    hcan->RxFifo0MsgPendingCallback  =  HAL_CAN_RxFifo0MsgPendingCallback;  /* Legacy weak RxFifo0MsgPendingCallback  */
+    hcan->RxFifo0FullCallback        =  HAL_CAN_RxFifo0FullCallback;        /* Legacy weak RxFifo0FullCallback        */
+    hcan->RxFifo1MsgPendingCallback  =  HAL_CAN_RxFifo1MsgPendingCallback;  /* Legacy weak RxFifo1MsgPendingCallback  */
+    hcan->RxFifo1FullCallback        =  HAL_CAN_RxFifo1FullCallback;        /* Legacy weak RxFifo1FullCallback        */
+    hcan->TxMailbox0CompleteCallback =  HAL_CAN_TxMailbox0CompleteCallback; /* Legacy weak TxMailbox0CompleteCallback */
+    hcan->TxMailbox1CompleteCallback =  HAL_CAN_TxMailbox1CompleteCallback; /* Legacy weak TxMailbox1CompleteCallback */
+    hcan->TxMailbox2CompleteCallback =  HAL_CAN_TxMailbox2CompleteCallback; /* Legacy weak TxMailbox2CompleteCallback */
+    hcan->TxMailbox0AbortCallback    =  HAL_CAN_TxMailbox0AbortCallback;    /* Legacy weak TxMailbox0AbortCallback    */
+    hcan->TxMailbox1AbortCallback    =  HAL_CAN_TxMailbox1AbortCallback;    /* Legacy weak TxMailbox1AbortCallback    */
+    hcan->TxMailbox2AbortCallback    =  HAL_CAN_TxMailbox2AbortCallback;    /* Legacy weak TxMailbox2AbortCallback    */
+    hcan->SleepCallback              =  HAL_CAN_SleepCallback;              /* Legacy weak SleepCallback              */
+    hcan->WakeUpFromRxMsgCallback    =  HAL_CAN_WakeUpFromRxMsgCallback;    /* Legacy weak WakeUpFromRxMsgCallback    */
+    hcan->ErrorCallback              =  HAL_CAN_ErrorCallback;              /* Legacy weak ErrorCallback              */
+
+    if (hcan->MspInitCallback == NULL)
+    {
+      hcan->MspInitCallback = HAL_CAN_MspInit; /* Legacy weak MspInit */
+    }
+
+    /* Init the low level hardware: CLOCK, NVIC */
+    hcan->MspInitCallback(hcan);
+  }
+
+#else
+  if (hcan->State == HAL_CAN_STATE_RESET)
+  {
+    /* Init the low level hardware: CLOCK, NVIC */
+    HAL_CAN_MspInit(hcan);
+  }
+#endif /* (USE_HAL_CAN_REGISTER_CALLBACKS) */
+
+  /* Exit from sleep mode */
+  CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP);
+
+  /* Get tick */
+  tickstart = HAL_GetTick();
+
+  /* Check Sleep mode leave acknowledge */
+  while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U)
+  {
+    if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE)
+    {
+      /* Update error code */
+      hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT;
+
+      /* Change CAN state */
+      hcan->State = HAL_CAN_STATE_ERROR;
+
+      return HAL_ERROR;
+    }
+  }
+
+  /* Request initialisation */
+  SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ);
+
+  /* Get tick */
+  tickstart = HAL_GetTick();
+
+  /* Wait initialisation acknowledge */
+  while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U)
+  {
+    if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE)
+    {
+      /* Update error code */
+      hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT;
+
+      /* Change CAN state */
+      hcan->State = HAL_CAN_STATE_ERROR;
+
+      return HAL_ERROR;
+    }
+  }
+
+  /* Set the time triggered communication mode */
+  if (hcan->Init.TimeTriggeredMode == ENABLE)
+  {
+    SET_BIT(hcan->Instance->MCR, CAN_MCR_TTCM);
+  }
+  else
+  {
+    CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TTCM);
+  }
+
+  /* Set the automatic bus-off management */
+  if (hcan->Init.AutoBusOff == ENABLE)
+  {
+    SET_BIT(hcan->Instance->MCR, CAN_MCR_ABOM);
+  }
+  else
+  {
+    CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_ABOM);
+  }
+
+  /* Set the automatic wake-up mode */
+  if (hcan->Init.AutoWakeUp == ENABLE)
+  {
+    SET_BIT(hcan->Instance->MCR, CAN_MCR_AWUM);
+  }
+  else
+  {
+    CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_AWUM);
+  }
+
+  /* Set the automatic retransmission */
+  if (hcan->Init.AutoRetransmission == ENABLE)
+  {
+    CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_NART);
+  }
+  else
+  {
+    SET_BIT(hcan->Instance->MCR, CAN_MCR_NART);
+  }
+
+  /* Set the receive FIFO locked mode */
+  if (hcan->Init.ReceiveFifoLocked == ENABLE)
+  {
+    SET_BIT(hcan->Instance->MCR, CAN_MCR_RFLM);
+  }
+  else
+  {
+    CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_RFLM);
+  }
+
+  /* Set the transmit FIFO priority */
+  if (hcan->Init.TransmitFifoPriority == ENABLE)
+  {
+    SET_BIT(hcan->Instance->MCR, CAN_MCR_TXFP);
+  }
+  else
+  {
+    CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TXFP);
+  }
+
+  /* Set the bit timing register */
+  WRITE_REG(hcan->Instance->BTR, (uint32_t)(hcan->Init.Mode           |
+                                            hcan->Init.SyncJumpWidth  |
+                                            hcan->Init.TimeSeg1       |
+                                            hcan->Init.TimeSeg2       |
+                                            (hcan->Init.Prescaler - 1U)));
+
+  /* Initialize the error code */
+  hcan->ErrorCode = HAL_CAN_ERROR_NONE;
+
+  /* Initialize the CAN state */
+  hcan->State = HAL_CAN_STATE_READY;
+
+  /* Return function status */
+  return HAL_OK;
+}
+
+/**
+  * @brief  Deinitializes the CAN peripheral registers to their default
+  *         reset values.
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval HAL status
+  */
+HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef *hcan)
+{
+  /* Check CAN handle */
+  if (hcan == NULL)
+  {
+    return HAL_ERROR;
+  }
+
+  /* Check the parameters */
+  assert_param(IS_CAN_ALL_INSTANCE(hcan->Instance));
+
+  /* Stop the CAN module */
+  (void)HAL_CAN_Stop(hcan);
+
+#if USE_HAL_CAN_REGISTER_CALLBACKS == 1
+  if (hcan->MspDeInitCallback == NULL)
+  {
+    hcan->MspDeInitCallback = HAL_CAN_MspDeInit; /* Legacy weak MspDeInit */
+  }
+
+  /* DeInit the low level hardware: CLOCK, NVIC */
+  hcan->MspDeInitCallback(hcan);
+
+#else
+  /* DeInit the low level hardware: CLOCK, NVIC */
+  HAL_CAN_MspDeInit(hcan);
+#endif /* (USE_HAL_CAN_REGISTER_CALLBACKS) */
+
+  /* Reset the CAN peripheral */
+  SET_BIT(hcan->Instance->MCR, CAN_MCR_RESET);
+
+  /* Reset the CAN ErrorCode */
+  hcan->ErrorCode = HAL_CAN_ERROR_NONE;
+
+  /* Change CAN state */
+  hcan->State = HAL_CAN_STATE_RESET;
+
+  /* Return function status */
+  return HAL_OK;
+}
+
+/**
+  * @brief  Initializes the CAN MSP.
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval None
+  */
+__weak void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan)
+{
+  /* Prevent unused argument(s) compilation warning */
+  UNUSED(hcan);
+
+  /* NOTE : This function Should not be modified, when the callback is needed,
+            the HAL_CAN_MspInit could be implemented in the user file
+   */
+}
+
+/**
+  * @brief  DeInitializes the CAN MSP.
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval None
+  */
+__weak void HAL_CAN_MspDeInit(CAN_HandleTypeDef *hcan)
+{
+  /* Prevent unused argument(s) compilation warning */
+  UNUSED(hcan);
+
+  /* NOTE : This function Should not be modified, when the callback is needed,
+            the HAL_CAN_MspDeInit could be implemented in the user file
+   */
+}
+
+#if USE_HAL_CAN_REGISTER_CALLBACKS == 1
+/**
+  * @brief  Register a CAN CallBack.
+  *         To be used instead of the weak predefined callback
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for CAN module
+  * @param  CallbackID ID of the callback to be registered
+  *         This parameter can be one of the following values:
+  *           @arg @ref HAL_CAN_TX_MAILBOX0_COMPLETE_CALLBACK_CB_ID Tx Mailbox 0 Complete callback ID
+  *           @arg @ref HAL_CAN_TX_MAILBOX1_COMPLETE_CALLBACK_CB_ID Tx Mailbox 1 Complete callback ID
+  *           @arg @ref HAL_CAN_TX_MAILBOX2_COMPLETE_CALLBACK_CB_ID Tx Mailbox 2 Complete callback ID
+  *           @arg @ref HAL_CAN_TX_MAILBOX0_ABORT_CALLBACK_CB_ID Tx Mailbox 0 Abort callback ID
+  *           @arg @ref HAL_CAN_TX_MAILBOX1_ABORT_CALLBACK_CB_ID Tx Mailbox 1 Abort callback ID
+  *           @arg @ref HAL_CAN_TX_MAILBOX2_ABORT_CALLBACK_CB_ID Tx Mailbox 2 Abort callback ID
+  *           @arg @ref HAL_CAN_RX_FIFO0_MSG_PENDING_CALLBACK_CB_ID Rx Fifo 0 message pending callback ID
+  *           @arg @ref HAL_CAN_RX_FIFO0_FULL_CALLBACK_CB_ID Rx Fifo 0 full callback ID
+  *           @arg @ref HAL_CAN_RX_FIFO1_MSGPENDING_CALLBACK_CB_ID Rx Fifo 1 message pending callback ID
+  *           @arg @ref HAL_CAN_RX_FIFO1_FULL_CALLBACK_CB_ID Rx Fifo 1 full callback ID
+  *           @arg @ref HAL_CAN_SLEEP_CALLBACK_CB_ID Sleep callback ID
+  *           @arg @ref HAL_CAN_WAKEUP_FROM_RX_MSG_CALLBACK_CB_ID Wake Up from Rx message callback ID
+  *           @arg @ref HAL_CAN_ERROR_CALLBACK_CB_ID Error callback ID
+  *           @arg @ref HAL_CAN_MSPINIT_CB_ID MspInit callback ID
+  *           @arg @ref HAL_CAN_MSPDEINIT_CB_ID MspDeInit callback ID
+  * @param  pCallback pointer to the Callback function
+  * @retval HAL status
+  */
+HAL_StatusTypeDef HAL_CAN_RegisterCallback(CAN_HandleTypeDef *hcan, HAL_CAN_CallbackIDTypeDef CallbackID, void (* pCallback)(CAN_HandleTypeDef *_hcan))
+{
+  HAL_StatusTypeDef status = HAL_OK;
+
+  if (pCallback == NULL)
+  {
+    /* Update the error code */
+    hcan->ErrorCode |= HAL_CAN_ERROR_INVALID_CALLBACK;
+
+    return HAL_ERROR;
+  }
+
+  if (hcan->State == HAL_CAN_STATE_READY)
+  {
+    switch (CallbackID)
+    {
+      case HAL_CAN_TX_MAILBOX0_COMPLETE_CB_ID :
+        hcan->TxMailbox0CompleteCallback = pCallback;
+        break;
+
+      case HAL_CAN_TX_MAILBOX1_COMPLETE_CB_ID :
+        hcan->TxMailbox1CompleteCallback = pCallback;
+        break;
+
+      case HAL_CAN_TX_MAILBOX2_COMPLETE_CB_ID :
+        hcan->TxMailbox2CompleteCallback = pCallback;
+        break;
+
+      case HAL_CAN_TX_MAILBOX0_ABORT_CB_ID :
+        hcan->TxMailbox0AbortCallback = pCallback;
+        break;
+
+      case HAL_CAN_TX_MAILBOX1_ABORT_CB_ID :
+        hcan->TxMailbox1AbortCallback = pCallback;
+        break;
+
+      case HAL_CAN_TX_MAILBOX2_ABORT_CB_ID :
+        hcan->TxMailbox2AbortCallback = pCallback;
+        break;
+
+      case HAL_CAN_RX_FIFO0_MSG_PENDING_CB_ID :
+        hcan->RxFifo0MsgPendingCallback = pCallback;
+        break;
+
+      case HAL_CAN_RX_FIFO0_FULL_CB_ID :
+        hcan->RxFifo0FullCallback = pCallback;
+        break;
+
+      case HAL_CAN_RX_FIFO1_MSG_PENDING_CB_ID :
+        hcan->RxFifo1MsgPendingCallback = pCallback;
+        break;
+
+      case HAL_CAN_RX_FIFO1_FULL_CB_ID :
+        hcan->RxFifo1FullCallback = pCallback;
+        break;
+
+      case HAL_CAN_SLEEP_CB_ID :
+        hcan->SleepCallback = pCallback;
+        break;
+
+      case HAL_CAN_WAKEUP_FROM_RX_MSG_CB_ID :
+        hcan->WakeUpFromRxMsgCallback = pCallback;
+        break;
+
+      case HAL_CAN_ERROR_CB_ID :
+        hcan->ErrorCallback = pCallback;
+        break;
+
+      case HAL_CAN_MSPINIT_CB_ID :
+        hcan->MspInitCallback = pCallback;
+        break;
+
+      case HAL_CAN_MSPDEINIT_CB_ID :
+        hcan->MspDeInitCallback = pCallback;
+        break;
+
+      default :
+        /* Update the error code */
+        hcan->ErrorCode |= HAL_CAN_ERROR_INVALID_CALLBACK;
+
+        /* Return error status */
+        status =  HAL_ERROR;
+        break;
+    }
+  }
+  else if (hcan->State == HAL_CAN_STATE_RESET)
+  {
+    switch (CallbackID)
+    {
+      case HAL_CAN_MSPINIT_CB_ID :
+        hcan->MspInitCallback = pCallback;
+        break;
+
+      case HAL_CAN_MSPDEINIT_CB_ID :
+        hcan->MspDeInitCallback = pCallback;
+        break;
+
+      default :
+        /* Update the error code */
+        hcan->ErrorCode |= HAL_CAN_ERROR_INVALID_CALLBACK;
+
+        /* Return error status */
+        status =  HAL_ERROR;
+        break;
+    }
+  }
+  else
+  {
+    /* Update the error code */
+    hcan->ErrorCode |= HAL_CAN_ERROR_INVALID_CALLBACK;
+
+    /* Return error status */
+    status =  HAL_ERROR;
+  }
+
+  return status;
+}
+
+/**
+  * @brief  Unregister a CAN CallBack.
+  *         CAN callabck is redirected to the weak predefined callback
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for CAN module
+  * @param  CallbackID ID of the callback to be unregistered
+  *         This parameter can be one of the following values:
+  *           @arg @ref HAL_CAN_TX_MAILBOX0_COMPLETE_CALLBACK_CB_ID Tx Mailbox 0 Complete callback ID
+  *           @arg @ref HAL_CAN_TX_MAILBOX1_COMPLETE_CALLBACK_CB_ID Tx Mailbox 1 Complete callback ID
+  *           @arg @ref HAL_CAN_TX_MAILBOX2_COMPLETE_CALLBACK_CB_ID Tx Mailbox 2 Complete callback ID
+  *           @arg @ref HAL_CAN_TX_MAILBOX0_ABORT_CALLBACK_CB_ID Tx Mailbox 0 Abort callback ID
+  *           @arg @ref HAL_CAN_TX_MAILBOX1_ABORT_CALLBACK_CB_ID Tx Mailbox 1 Abort callback ID
+  *           @arg @ref HAL_CAN_TX_MAILBOX2_ABORT_CALLBACK_CB_ID Tx Mailbox 2 Abort callback ID
+  *           @arg @ref HAL_CAN_RX_FIFO0_MSG_PENDING_CALLBACK_CB_ID Rx Fifo 0 message pending callback ID
+  *           @arg @ref HAL_CAN_RX_FIFO0_FULL_CALLBACK_CB_ID Rx Fifo 0 full callback ID
+  *           @arg @ref HAL_CAN_RX_FIFO1_MSGPENDING_CALLBACK_CB_ID Rx Fifo 1 message pending callback ID
+  *           @arg @ref HAL_CAN_RX_FIFO1_FULL_CALLBACK_CB_ID Rx Fifo 1 full callback ID
+  *           @arg @ref HAL_CAN_SLEEP_CALLBACK_CB_ID Sleep callback ID
+  *           @arg @ref HAL_CAN_WAKEUP_FROM_RX_MSG_CALLBACK_CB_ID Wake Up from Rx message callback ID
+  *           @arg @ref HAL_CAN_ERROR_CALLBACK_CB_ID Error callback ID
+  *           @arg @ref HAL_CAN_MSPINIT_CB_ID MspInit callback ID
+  *           @arg @ref HAL_CAN_MSPDEINIT_CB_ID MspDeInit callback ID
+  * @retval HAL status
+  */
+HAL_StatusTypeDef HAL_CAN_UnRegisterCallback(CAN_HandleTypeDef *hcan, HAL_CAN_CallbackIDTypeDef CallbackID)
+{
+  HAL_StatusTypeDef status = HAL_OK;
+
+  if (hcan->State == HAL_CAN_STATE_READY)
+  {
+    switch (CallbackID)
+    {
+      case HAL_CAN_TX_MAILBOX0_COMPLETE_CB_ID :
+        hcan->TxMailbox0CompleteCallback = HAL_CAN_TxMailbox0CompleteCallback;
+        break;
+
+      case HAL_CAN_TX_MAILBOX1_COMPLETE_CB_ID :
+        hcan->TxMailbox1CompleteCallback = HAL_CAN_TxMailbox1CompleteCallback;
+        break;
+
+      case HAL_CAN_TX_MAILBOX2_COMPLETE_CB_ID :
+        hcan->TxMailbox2CompleteCallback = HAL_CAN_TxMailbox2CompleteCallback;
+        break;
+
+      case HAL_CAN_TX_MAILBOX0_ABORT_CB_ID :
+        hcan->TxMailbox0AbortCallback = HAL_CAN_TxMailbox0AbortCallback;
+        break;
+
+      case HAL_CAN_TX_MAILBOX1_ABORT_CB_ID :
+        hcan->TxMailbox1AbortCallback = HAL_CAN_TxMailbox1AbortCallback;
+        break;
+
+      case HAL_CAN_TX_MAILBOX2_ABORT_CB_ID :
+        hcan->TxMailbox2AbortCallback = HAL_CAN_TxMailbox2AbortCallback;
+        break;
+
+      case HAL_CAN_RX_FIFO0_MSG_PENDING_CB_ID :
+        hcan->RxFifo0MsgPendingCallback = HAL_CAN_RxFifo0MsgPendingCallback;
+        break;
+
+      case HAL_CAN_RX_FIFO0_FULL_CB_ID :
+        hcan->RxFifo0FullCallback = HAL_CAN_RxFifo0FullCallback;
+        break;
+
+      case HAL_CAN_RX_FIFO1_MSG_PENDING_CB_ID :
+        hcan->RxFifo1MsgPendingCallback = HAL_CAN_RxFifo1MsgPendingCallback;
+        break;
+
+      case HAL_CAN_RX_FIFO1_FULL_CB_ID :
+        hcan->RxFifo1FullCallback = HAL_CAN_RxFifo1FullCallback;
+        break;
+
+      case HAL_CAN_SLEEP_CB_ID :
+        hcan->SleepCallback = HAL_CAN_SleepCallback;
+        break;
+
+      case HAL_CAN_WAKEUP_FROM_RX_MSG_CB_ID :
+        hcan->WakeUpFromRxMsgCallback = HAL_CAN_WakeUpFromRxMsgCallback;
+        break;
+
+      case HAL_CAN_ERROR_CB_ID :
+        hcan->ErrorCallback = HAL_CAN_ErrorCallback;
+        break;
+
+      case HAL_CAN_MSPINIT_CB_ID :
+        hcan->MspInitCallback = HAL_CAN_MspInit;
+        break;
+
+      case HAL_CAN_MSPDEINIT_CB_ID :
+        hcan->MspDeInitCallback = HAL_CAN_MspDeInit;
+        break;
+
+      default :
+        /* Update the error code */
+        hcan->ErrorCode |= HAL_CAN_ERROR_INVALID_CALLBACK;
+
+        /* Return error status */
+        status =  HAL_ERROR;
+        break;
+    }
+  }
+  else if (hcan->State == HAL_CAN_STATE_RESET)
+  {
+    switch (CallbackID)
+    {
+      case HAL_CAN_MSPINIT_CB_ID :
+        hcan->MspInitCallback = HAL_CAN_MspInit;
+        break;
+
+      case HAL_CAN_MSPDEINIT_CB_ID :
+        hcan->MspDeInitCallback = HAL_CAN_MspDeInit;
+        break;
+
+      default :
+        /* Update the error code */
+        hcan->ErrorCode |= HAL_CAN_ERROR_INVALID_CALLBACK;
+
+        /* Return error status */
+        status =  HAL_ERROR;
+        break;
+    }
+  }
+  else
+  {
+    /* Update the error code */
+    hcan->ErrorCode |= HAL_CAN_ERROR_INVALID_CALLBACK;
+
+    /* Return error status */
+    status =  HAL_ERROR;
+  }
+
+  return status;
+}
+#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */
+
+/**
+  * @}
+  */
+
+/** @defgroup CAN_Exported_Functions_Group2 Configuration functions
+ *  @brief    Configuration functions.
+ *
+@verbatim
+  ==============================================================================
+              ##### Configuration functions #####
+  ==============================================================================
+    [..]  This section provides functions allowing to:
+      (+) HAL_CAN_ConfigFilter            : Configure the CAN reception filters
+
+@endverbatim
+  * @{
+  */
+
+/**
+  * @brief  Configures the CAN reception filter according to the specified
+  *         parameters in the CAN_FilterInitStruct.
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @param  sFilterConfig pointer to a CAN_FilterTypeDef structure that
+  *         contains the filter configuration information.
+  * @retval None
+  */
+HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterTypeDef *sFilterConfig)
+{
+  uint32_t filternbrbitpos;
+  CAN_TypeDef *can_ip = hcan->Instance;
+  HAL_CAN_StateTypeDef state = hcan->State;
+
+  if ((state == HAL_CAN_STATE_READY) ||
+      (state == HAL_CAN_STATE_LISTENING))
+  {
+    /* Check the parameters */
+    assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterIdHigh));
+    assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterIdLow));
+    assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterMaskIdHigh));
+    assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterMaskIdLow));
+    assert_param(IS_CAN_FILTER_MODE(sFilterConfig->FilterMode));
+    assert_param(IS_CAN_FILTER_SCALE(sFilterConfig->FilterScale));
+    assert_param(IS_CAN_FILTER_FIFO(sFilterConfig->FilterFIFOAssignment));
+    assert_param(IS_CAN_FILTER_ACTIVATION(sFilterConfig->FilterActivation));
+
+#if defined(CAN3)
+    /* Check the CAN instance */
+    if (hcan->Instance == CAN3)
+    {
+      /* CAN3 is single instance with 14 dedicated filters banks */
+
+      /* Check the parameters */
+      assert_param(IS_CAN_FILTER_BANK_SINGLE(sFilterConfig->FilterBank));
+    }
+    else
+    {
+      /* CAN1 and CAN2 are dual instances with 28 common filters banks */
+      /* Select master instance to access the filter banks */
+      can_ip = CAN1;
+
+      /* Check the parameters */
+      assert_param(IS_CAN_FILTER_BANK_DUAL(sFilterConfig->FilterBank));
+      assert_param(IS_CAN_FILTER_BANK_DUAL(sFilterConfig->SlaveStartFilterBank));
+    }
+#elif defined(CAN2)
+    /* CAN1 and CAN2 are dual instances with 28 common filters banks */
+    /* Select master instance to access the filter banks */
+    can_ip = CAN1;
+
+    /* Check the parameters */
+    assert_param(IS_CAN_FILTER_BANK_DUAL(sFilterConfig->FilterBank));
+    assert_param(IS_CAN_FILTER_BANK_DUAL(sFilterConfig->SlaveStartFilterBank));
+#else
+    /* CAN1 is single instance with 14 dedicated filters banks */
+
+    /* Check the parameters */
+    assert_param(IS_CAN_FILTER_BANK_SINGLE(sFilterConfig->FilterBank));
+#endif
+
+    /* Initialisation mode for the filter */
+    SET_BIT(can_ip->FMR, CAN_FMR_FINIT);
+
+#if defined(CAN3)
+    /* Check the CAN instance */
+    if (can_ip == CAN1)
+    {
+      /* Select the start filter number of CAN2 slave instance */
+      CLEAR_BIT(can_ip->FMR, CAN_FMR_CAN2SB);
+      SET_BIT(can_ip->FMR, sFilterConfig->SlaveStartFilterBank << CAN_FMR_CAN2SB_Pos);
+    }
+
+#elif defined(CAN2)
+    /* Select the start filter number of CAN2 slave instance */
+    CLEAR_BIT(can_ip->FMR, CAN_FMR_CAN2SB);
+    SET_BIT(can_ip->FMR, sFilterConfig->SlaveStartFilterBank << CAN_FMR_CAN2SB_Pos);
+
+#endif
+    /* Convert filter number into bit position */
+    filternbrbitpos = (uint32_t)1 << (sFilterConfig->FilterBank & 0x1FU);
+
+    /* Filter Deactivation */
+    CLEAR_BIT(can_ip->FA1R, filternbrbitpos);
+
+    /* Filter Scale */
+    if (sFilterConfig->FilterScale == CAN_FILTERSCALE_16BIT)
+    {
+      /* 16-bit scale for the filter */
+      CLEAR_BIT(can_ip->FS1R, filternbrbitpos);
+
+      /* First 16-bit identifier and First 16-bit mask */
+      /* Or First 16-bit identifier and Second 16-bit identifier */
+      can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 =
+        ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) |
+        (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow);
+
+      /* Second 16-bit identifier and Second 16-bit mask */
+      /* Or Third 16-bit identifier and Fourth 16-bit identifier */
+      can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 =
+        ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) |
+        (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh);
+    }
+
+    if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT)
+    {
+      /* 32-bit scale for the filter */
+      SET_BIT(can_ip->FS1R, filternbrbitpos);
+
+      /* 32-bit identifier or First 32-bit identifier */
+      can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 =
+        ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) |
+        (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow);
+
+      /* 32-bit mask or Second 32-bit identifier */
+      can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 =
+        ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) |
+        (0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow);
+    }
+
+    /* Filter Mode */
+    if (sFilterConfig->FilterMode == CAN_FILTERMODE_IDMASK)
+    {
+      /* Id/Mask mode for the filter*/
+      CLEAR_BIT(can_ip->FM1R, filternbrbitpos);
+    }
+    else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */
+    {
+      /* Identifier list mode for the filter*/
+      SET_BIT(can_ip->FM1R, filternbrbitpos);
+    }
+
+    /* Filter FIFO assignment */
+    if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO0)
+    {
+      /* FIFO 0 assignation for the filter */
+      CLEAR_BIT(can_ip->FFA1R, filternbrbitpos);
+    }
+    else
+    {
+      /* FIFO 1 assignation for the filter */
+      SET_BIT(can_ip->FFA1R, filternbrbitpos);
+    }
+
+    /* Filter activation */
+    if (sFilterConfig->FilterActivation == CAN_FILTER_ENABLE)
+    {
+      SET_BIT(can_ip->FA1R, filternbrbitpos);
+    }
+
+    /* Leave the initialisation mode for the filter */
+    CLEAR_BIT(can_ip->FMR, CAN_FMR_FINIT);
+
+    /* Return function status */
+    return HAL_OK;
+  }
+  else
+  {
+    /* Update error code */
+    hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED;
+
+    return HAL_ERROR;
+  }
+}
+
+/**
+  * @}
+  */
+
+/** @defgroup CAN_Exported_Functions_Group3 Control functions
+ *  @brief    Control functions
+ *
+@verbatim
+  ==============================================================================
+                      ##### Control functions #####
+  ==============================================================================
+    [..]  This section provides functions allowing to:
+      (+) HAL_CAN_Start                    : Start the CAN module
+      (+) HAL_CAN_Stop                     : Stop the CAN module
+      (+) HAL_CAN_RequestSleep             : Request sleep mode entry.
+      (+) HAL_CAN_WakeUp                   : Wake up from sleep mode.
+      (+) HAL_CAN_IsSleepActive            : Check is sleep mode is active.
+      (+) HAL_CAN_AddTxMessage             : Add a message to the Tx mailboxes
+                                             and activate the corresponding
+                                             transmission request
+      (+) HAL_CAN_AbortTxRequest           : Abort transmission request
+      (+) HAL_CAN_GetTxMailboxesFreeLevel  : Return Tx mailboxes free level
+      (+) HAL_CAN_IsTxMessagePending       : Check if a transmission request is
+                                             pending on the selected Tx mailbox
+      (+) HAL_CAN_GetRxMessage             : Get a CAN frame from the Rx FIFO
+      (+) HAL_CAN_GetRxFifoFillLevel       : Return Rx FIFO fill level
+
+@endverbatim
+  * @{
+  */
+
+/**
+  * @brief  Start the CAN module.
+  * @param  hcan pointer to an CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval HAL status
+  */
+HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan)
+{
+  uint32_t tickstart;
+
+  if (hcan->State == HAL_CAN_STATE_READY)
+  {
+    /* Change CAN peripheral state */
+    hcan->State = HAL_CAN_STATE_LISTENING;
+
+    /* Request leave initialisation */
+    CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_INRQ);
+
+    /* Get tick */
+    tickstart = HAL_GetTick();
+
+    /* Wait the acknowledge */
+    while ((hcan->Instance->MSR & CAN_MSR_INAK) != 0U)
+    {
+      /* Check for the Timeout */
+      if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE)
+      {
+        /* Update error code */
+        hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT;
+
+        /* Change CAN state */
+        hcan->State = HAL_CAN_STATE_ERROR;
+
+        return HAL_ERROR;
+      }
+    }
+
+    /* Reset the CAN ErrorCode */
+    hcan->ErrorCode = HAL_CAN_ERROR_NONE;
+
+    /* Return function status */
+    return HAL_OK;
+  }
+  else
+  {
+    /* Update error code */
+    hcan->ErrorCode |= HAL_CAN_ERROR_NOT_READY;
+
+    return HAL_ERROR;
+  }
+}
+
+/**
+  * @brief  Stop the CAN module and enable access to configuration registers.
+  * @param  hcan pointer to an CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval HAL status
+  */
+HAL_StatusTypeDef HAL_CAN_Stop(CAN_HandleTypeDef *hcan)
+{
+  uint32_t tickstart;
+
+  if (hcan->State == HAL_CAN_STATE_LISTENING)
+  {
+    /* Request initialisation */
+    SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ);
+
+    /* Get tick */
+    tickstart = HAL_GetTick();
+
+    /* Wait the acknowledge */
+    while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U)
+    {
+      /* Check for the Timeout */
+      if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE)
+      {
+        /* Update error code */
+        hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT;
+
+        /* Change CAN state */
+        hcan->State = HAL_CAN_STATE_ERROR;
+
+        return HAL_ERROR;
+      }
+    }
+
+    /* Exit from sleep mode */
+    CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP);
+
+    /* Change CAN peripheral state */
+    hcan->State = HAL_CAN_STATE_READY;
+
+    /* Return function status */
+    return HAL_OK;
+  }
+  else
+  {
+    /* Update error code */
+    hcan->ErrorCode |= HAL_CAN_ERROR_NOT_STARTED;
+
+    return HAL_ERROR;
+  }
+}
+
+/**
+  * @brief  Request the sleep mode (low power) entry.
+  *         When returning from this function, Sleep mode will be entered
+  *         as soon as the current CAN activity (transmission or reception
+  *         of a CAN frame) has been completed.
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval HAL status.
+  */
+HAL_StatusTypeDef HAL_CAN_RequestSleep(CAN_HandleTypeDef *hcan)
+{
+  HAL_CAN_StateTypeDef state = hcan->State;
+
+  if ((state == HAL_CAN_STATE_READY) ||
+      (state == HAL_CAN_STATE_LISTENING))
+  {
+    /* Request Sleep mode */
+    SET_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP);
+
+    /* Return function status */
+    return HAL_OK;
+  }
+  else
+  {
+    /* Update error code */
+    hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED;
+
+    /* Return function status */
+    return HAL_ERROR;
+  }
+}
+
+/**
+  * @brief  Wake up from sleep mode.
+  *         When returning with HAL_OK status from this function, Sleep mode
+  *         is exited.
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval HAL status.
+  */
+HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan)
+{
+  __IO uint32_t count = 0;
+  uint32_t timeout = 1000000U;
+  HAL_CAN_StateTypeDef state = hcan->State;
+
+  if ((state == HAL_CAN_STATE_READY) ||
+      (state == HAL_CAN_STATE_LISTENING))
+  {
+    /* Wake up request */
+    CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP);
+
+    /* Wait sleep mode is exited */
+    do
+    {
+      /* Increment counter */
+      count++;
+
+      /* Check if timeout is reached */
+      if (count > timeout)
+      {
+        /* Update error code */
+        hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT;
+
+        return HAL_ERROR;
+      }
+    }
+    while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U);
+
+    /* Return function status */
+    return HAL_OK;
+  }
+  else
+  {
+    /* Update error code */
+    hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED;
+
+    return HAL_ERROR;
+  }
+}
+
+/**
+  * @brief  Check is sleep mode is active.
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval Status
+  *          - 0 : Sleep mode is not active.
+  *          - 1 : Sleep mode is active.
+  */
+uint32_t HAL_CAN_IsSleepActive(CAN_HandleTypeDef *hcan)
+{
+  uint32_t status = 0U;
+  HAL_CAN_StateTypeDef state = hcan->State;
+
+  if ((state == HAL_CAN_STATE_READY) ||
+      (state == HAL_CAN_STATE_LISTENING))
+  {
+    /* Check Sleep mode */
+    if ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U)
+    {
+      status = 1U;
+    }
+  }
+
+  /* Return function status */
+  return status;
+}
+
+/**
+  * @brief  Add a message to the first free Tx mailbox and activate the
+  *         corresponding transmission request.
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @param  pHeader pointer to a CAN_TxHeaderTypeDef structure.
+  * @param  aData array containing the payload of the Tx frame.
+  * @param  pTxMailbox pointer to a variable where the function will return
+  *         the TxMailbox used to store the Tx message.
+  *         This parameter can be a value of @arg CAN_Tx_Mailboxes.
+  * @retval HAL status
+  */
+HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox)
+{
+  uint32_t transmitmailbox;
+  HAL_CAN_StateTypeDef state = hcan->State;
+  uint32_t tsr = READ_REG(hcan->Instance->TSR);
+
+  /* Check the parameters */
+  assert_param(IS_CAN_IDTYPE(pHeader->IDE));
+  assert_param(IS_CAN_RTR(pHeader->RTR));
+  assert_param(IS_CAN_DLC(pHeader->DLC));
+  if (pHeader->IDE == CAN_ID_STD)
+  {
+    assert_param(IS_CAN_STDID(pHeader->StdId));
+  }
+  else
+  {
+    assert_param(IS_CAN_EXTID(pHeader->ExtId));
+  }
+  assert_param(IS_FUNCTIONAL_STATE(pHeader->TransmitGlobalTime));
+
+  if ((state == HAL_CAN_STATE_READY) ||
+      (state == HAL_CAN_STATE_LISTENING))
+  {
+    /* Check that all the Tx mailboxes are not full */
+    if (((tsr & CAN_TSR_TME0) != 0U) ||
+        ((tsr & CAN_TSR_TME1) != 0U) ||
+        ((tsr & CAN_TSR_TME2) != 0U))
+    {
+      /* Select an empty transmit mailbox */
+      transmitmailbox = (tsr & CAN_TSR_CODE) >> CAN_TSR_CODE_Pos;
+
+      /* Check transmit mailbox value */
+      if (transmitmailbox > 2U)
+      {
+        /* Update error code */
+        hcan->ErrorCode |= HAL_CAN_ERROR_INTERNAL;
+
+        return HAL_ERROR;
+      }
+
+      /* Store the Tx mailbox */
+      *pTxMailbox = (uint32_t)1 << transmitmailbox;
+
+      /* Set up the Id */
+      if (pHeader->IDE == CAN_ID_STD)
+      {
+        hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->StdId << CAN_TI0R_STID_Pos) |
+                                                           pHeader->RTR);
+      }
+      else
+      {
+        hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->ExtId << CAN_TI0R_EXID_Pos) |
+                                                           pHeader->IDE |
+                                                           pHeader->RTR);
+      }
+
+      /* Set up the DLC */
+      hcan->Instance->sTxMailBox[transmitmailbox].TDTR = (pHeader->DLC);
+
+      /* Set up the Transmit Global Time mode */
+      if (pHeader->TransmitGlobalTime == ENABLE)
+      {
+        SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TDTR, CAN_TDT0R_TGT);
+      }
+
+      /* Set up the data field */
+      WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR,
+                ((uint32_t)aData[7] << CAN_TDH0R_DATA7_Pos) |
+                ((uint32_t)aData[6] << CAN_TDH0R_DATA6_Pos) |
+                ((uint32_t)aData[5] << CAN_TDH0R_DATA5_Pos) |
+                ((uint32_t)aData[4] << CAN_TDH0R_DATA4_Pos));
+      WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR,
+                ((uint32_t)aData[3] << CAN_TDL0R_DATA3_Pos) |
+                ((uint32_t)aData[2] << CAN_TDL0R_DATA2_Pos) |
+                ((uint32_t)aData[1] << CAN_TDL0R_DATA1_Pos) |
+                ((uint32_t)aData[0] << CAN_TDL0R_DATA0_Pos));
+
+      /* Request transmission */
+      SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TIR, CAN_TI0R_TXRQ);
+
+      /* Return function status */
+      return HAL_OK;
+    }
+    else
+    {
+      /* Update error code */
+      hcan->ErrorCode |= HAL_CAN_ERROR_PARAM;
+
+      return HAL_ERROR;
+    }
+  }
+  else
+  {
+    /* Update error code */
+    hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED;
+
+    return HAL_ERROR;
+  }
+}
+
+/**
+  * @brief  Abort transmission requests
+  * @param  hcan pointer to an CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @param  TxMailboxes List of the Tx Mailboxes to abort.
+  *         This parameter can be any combination of @arg CAN_Tx_Mailboxes.
+  * @retval HAL status
+  */
+HAL_StatusTypeDef HAL_CAN_AbortTxRequest(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes)
+{
+  HAL_CAN_StateTypeDef state = hcan->State;
+
+  /* Check function parameters */
+  assert_param(IS_CAN_TX_MAILBOX_LIST(TxMailboxes));
+
+  if ((state == HAL_CAN_STATE_READY) ||
+      (state == HAL_CAN_STATE_LISTENING))
+  {
+    /* Check Tx Mailbox 0 */
+    if ((TxMailboxes & CAN_TX_MAILBOX0) != 0U)
+    {
+      /* Add cancellation request for Tx Mailbox 0 */
+      SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ0);
+    }
+
+    /* Check Tx Mailbox 1 */
+    if ((TxMailboxes & CAN_TX_MAILBOX1) != 0U)
+    {
+      /* Add cancellation request for Tx Mailbox 1 */
+      SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ1);
+    }
+
+    /* Check Tx Mailbox 2 */
+    if ((TxMailboxes & CAN_TX_MAILBOX2) != 0U)
+    {
+      /* Add cancellation request for Tx Mailbox 2 */
+      SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ2);
+    }
+
+    /* Return function status */
+    return HAL_OK;
+  }
+  else
+  {
+    /* Update error code */
+    hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED;
+
+    return HAL_ERROR;
+  }
+}
+
+/**
+  * @brief  Return Tx Mailboxes free level: number of free Tx Mailboxes.
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval Number of free Tx Mailboxes.
+  */
+uint32_t HAL_CAN_GetTxMailboxesFreeLevel(CAN_HandleTypeDef *hcan)
+{
+  uint32_t freelevel = 0U;
+  HAL_CAN_StateTypeDef state = hcan->State;
+
+  if ((state == HAL_CAN_STATE_READY) ||
+      (state == HAL_CAN_STATE_LISTENING))
+  {
+    /* Check Tx Mailbox 0 status */
+    if ((hcan->Instance->TSR & CAN_TSR_TME0) != 0U)
+    {
+      freelevel++;
+    }
+
+    /* Check Tx Mailbox 1 status */
+    if ((hcan->Instance->TSR & CAN_TSR_TME1) != 0U)
+    {
+      freelevel++;
+    }
+
+    /* Check Tx Mailbox 2 status */
+    if ((hcan->Instance->TSR & CAN_TSR_TME2) != 0U)
+    {
+      freelevel++;
+    }
+  }
+
+  /* Return Tx Mailboxes free level */
+  return freelevel;
+}
+
+/**
+  * @brief  Check if a transmission request is pending on the selected Tx
+  *         Mailboxes.
+  * @param  hcan pointer to an CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @param  TxMailboxes List of Tx Mailboxes to check.
+  *         This parameter can be any combination of @arg CAN_Tx_Mailboxes.
+  * @retval Status
+  *          - 0 : No pending transmission request on any selected Tx Mailboxes.
+  *          - 1 : Pending transmission request on at least one of the selected
+  *                Tx Mailbox.
+  */
+uint32_t HAL_CAN_IsTxMessagePending(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes)
+{
+  uint32_t status = 0U;
+  HAL_CAN_StateTypeDef state = hcan->State;
+
+  /* Check function parameters */
+  assert_param(IS_CAN_TX_MAILBOX_LIST(TxMailboxes));
+
+  if ((state == HAL_CAN_STATE_READY) ||
+      (state == HAL_CAN_STATE_LISTENING))
+  {
+    /* Check pending transmission request on the selected Tx Mailboxes */
+    if ((hcan->Instance->TSR & (TxMailboxes << CAN_TSR_TME0_Pos)) != (TxMailboxes << CAN_TSR_TME0_Pos))
+    {
+      status = 1U;
+    }
+  }
+
+  /* Return status */
+  return status;
+}
+
+/**
+  * @brief  Return timestamp of Tx message sent, if time triggered communication
+            mode is enabled.
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @param  TxMailbox Tx Mailbox where the timestamp of message sent will be
+  *         read.
+  *         This parameter can be one value of @arg CAN_Tx_Mailboxes.
+  * @retval Timestamp of message sent from Tx Mailbox.
+  */
+uint32_t HAL_CAN_GetTxTimestamp(CAN_HandleTypeDef *hcan, uint32_t TxMailbox)
+{
+  uint32_t timestamp = 0U;
+  uint32_t transmitmailbox;
+  HAL_CAN_StateTypeDef state = hcan->State;
+
+  /* Check function parameters */
+  assert_param(IS_CAN_TX_MAILBOX(TxMailbox));
+
+  if ((state == HAL_CAN_STATE_READY) ||
+      (state == HAL_CAN_STATE_LISTENING))
+  {
+    /* Select the Tx mailbox */
+    transmitmailbox = POSITION_VAL(TxMailbox);
+
+    /* Get timestamp */
+    timestamp = (hcan->Instance->sTxMailBox[transmitmailbox].TDTR & CAN_TDT0R_TIME) >> CAN_TDT0R_TIME_Pos;
+  }
+
+  /* Return the timestamp */
+  return timestamp;
+}
+
+/**
+  * @brief  Get an CAN frame from the Rx FIFO zone into the message RAM.
+  * @param  hcan pointer to an CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @param  RxFifo Fifo number of the received message to be read.
+  *         This parameter can be a value of @arg CAN_receive_FIFO_number.
+  * @param  pHeader pointer to a CAN_RxHeaderTypeDef structure where the header
+  *         of the Rx frame will be stored.
+  * @param  aData array where the payload of the Rx frame will be stored.
+  * @retval HAL status
+  */
+HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[])
+{
+  HAL_CAN_StateTypeDef state = hcan->State;
+
+  assert_param(IS_CAN_RX_FIFO(RxFifo));
+
+  if ((state == HAL_CAN_STATE_READY) ||
+      (state == HAL_CAN_STATE_LISTENING))
+  {
+    /* Check the Rx FIFO */
+    if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */
+    {
+      /* Check that the Rx FIFO 0 is not empty */
+      if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) == 0U)
+      {
+        /* Update error code */
+        hcan->ErrorCode |= HAL_CAN_ERROR_PARAM;
+
+        return HAL_ERROR;
+      }
+    }
+    else /* Rx element is assigned to Rx FIFO 1 */
+    {
+      /* Check that the Rx FIFO 1 is not empty */
+      if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) == 0U)
+      {
+        /* Update error code */
+        hcan->ErrorCode |= HAL_CAN_ERROR_PARAM;
+
+        return HAL_ERROR;
+      }
+    }
+
+    /* Get the header */
+    pHeader->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[RxFifo].RIR;
+    if (pHeader->IDE == CAN_ID_STD)
+    {
+      pHeader->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_TI0R_STID_Pos;
+    }
+    else
+    {
+      pHeader->ExtId = ((CAN_RI0R_EXID | CAN_RI0R_STID) & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_RI0R_EXID_Pos;
+    }
+    pHeader->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[RxFifo].RIR);
+    pHeader->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_DLC_Pos;
+    pHeader->FilterMatchIndex = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_FMI_Pos;
+    pHeader->Timestamp = (CAN_RDT0R_TIME & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_TIME_Pos;
+
+    /* Get the data */
+    aData[0] = (uint8_t)((CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA0_Pos);
+    aData[1] = (uint8_t)((CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA1_Pos);
+    aData[2] = (uint8_t)((CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA2_Pos);
+    aData[3] = (uint8_t)((CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA3_Pos);
+    aData[4] = (uint8_t)((CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA4_Pos);
+    aData[5] = (uint8_t)((CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA5_Pos);
+    aData[6] = (uint8_t)((CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA6_Pos);
+    aData[7] = (uint8_t)((CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA7_Pos);
+
+    /* Release the FIFO */
+    if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */
+    {
+      /* Release RX FIFO 0 */
+      SET_BIT(hcan->Instance->RF0R, CAN_RF0R_RFOM0);
+    }
+    else /* Rx element is assigned to Rx FIFO 1 */
+    {
+      /* Release RX FIFO 1 */
+      SET_BIT(hcan->Instance->RF1R, CAN_RF1R_RFOM1);
+    }
+
+    /* Return function status */
+    return HAL_OK;
+  }
+  else
+  {
+    /* Update error code */
+    hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED;
+
+    return HAL_ERROR;
+  }
+}
+
+/**
+  * @brief  Return Rx FIFO fill level.
+  * @param  hcan pointer to an CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @param  RxFifo Rx FIFO.
+  *         This parameter can be a value of @arg CAN_receive_FIFO_number.
+  * @retval Number of messages available in Rx FIFO.
+  */
+uint32_t HAL_CAN_GetRxFifoFillLevel(CAN_HandleTypeDef *hcan, uint32_t RxFifo)
+{
+  uint32_t filllevel = 0U;
+  HAL_CAN_StateTypeDef state = hcan->State;
+
+  /* Check function parameters */
+  assert_param(IS_CAN_RX_FIFO(RxFifo));
+
+  if ((state == HAL_CAN_STATE_READY) ||
+      (state == HAL_CAN_STATE_LISTENING))
+  {
+    if (RxFifo == CAN_RX_FIFO0)
+    {
+      filllevel = hcan->Instance->RF0R & CAN_RF0R_FMP0;
+    }
+    else /* RxFifo == CAN_RX_FIFO1 */
+    {
+      filllevel = hcan->Instance->RF1R & CAN_RF1R_FMP1;
+    }
+  }
+
+  /* Return Rx FIFO fill level */
+  return filllevel;
+}
+
+/**
+  * @}
+  */
+
+/** @defgroup CAN_Exported_Functions_Group4 Interrupts management
+ *  @brief    Interrupts management
+ *
+@verbatim
+  ==============================================================================
+                       ##### Interrupts management #####
+  ==============================================================================
+    [..]  This section provides functions allowing to:
+      (+) HAL_CAN_ActivateNotification      : Enable interrupts
+      (+) HAL_CAN_DeactivateNotification    : Disable interrupts
+      (+) HAL_CAN_IRQHandler                : Handles CAN interrupt request
+
+@endverbatim
+  * @{
+  */
+
+/**
+  * @brief  Enable interrupts.
+  * @param  hcan pointer to an CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @param  ActiveITs indicates which interrupts will be enabled.
+  *         This parameter can be any combination of @arg CAN_Interrupts.
+  * @retval HAL status
+  */
+HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan, uint32_t ActiveITs)
+{
+  HAL_CAN_StateTypeDef state = hcan->State;
+
+  /* Check function parameters */
+  assert_param(IS_CAN_IT(ActiveITs));
+
+  if ((state == HAL_CAN_STATE_READY) ||
+      (state == HAL_CAN_STATE_LISTENING))
+  {
+    /* Enable the selected interrupts */
+    __HAL_CAN_ENABLE_IT(hcan, ActiveITs);
+
+    /* Return function status */
+    return HAL_OK;
+  }
+  else
+  {
+    /* Update error code */
+    hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED;
+
+    return HAL_ERROR;
+  }
+}
+
+/**
+  * @brief  Disable interrupts.
+  * @param  hcan pointer to an CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @param  InactiveITs indicates which interrupts will be disabled.
+  *         This parameter can be any combination of @arg CAN_Interrupts.
+  * @retval HAL status
+  */
+HAL_StatusTypeDef HAL_CAN_DeactivateNotification(CAN_HandleTypeDef *hcan, uint32_t InactiveITs)
+{
+  HAL_CAN_StateTypeDef state = hcan->State;
+
+  /* Check function parameters */
+  assert_param(IS_CAN_IT(InactiveITs));
+
+  if ((state == HAL_CAN_STATE_READY) ||
+      (state == HAL_CAN_STATE_LISTENING))
+  {
+    /* Disable the selected interrupts */
+    __HAL_CAN_DISABLE_IT(hcan, InactiveITs);
+
+    /* Return function status */
+    return HAL_OK;
+  }
+  else
+  {
+    /* Update error code */
+    hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED;
+
+    return HAL_ERROR;
+  }
+}
+
+/**
+  * @brief  Handles CAN interrupt request
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval None
+  */
+void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan)
+{
+  uint32_t errorcode = HAL_CAN_ERROR_NONE;
+  uint32_t interrupts = READ_REG(hcan->Instance->IER);
+  uint32_t msrflags = READ_REG(hcan->Instance->MSR);
+  uint32_t tsrflags = READ_REG(hcan->Instance->TSR);
+  uint32_t rf0rflags = READ_REG(hcan->Instance->RF0R);
+  uint32_t rf1rflags = READ_REG(hcan->Instance->RF1R);
+  uint32_t esrflags = READ_REG(hcan->Instance->ESR);
+
+  /* Transmit Mailbox empty interrupt management *****************************/
+  if ((interrupts & CAN_IT_TX_MAILBOX_EMPTY) != 0U)
+  {
+    /* Transmit Mailbox 0 management *****************************************/
+    if ((tsrflags & CAN_TSR_RQCP0) != 0U)
+    {
+      /* Clear the Transmission Complete flag (and TXOK0,ALST0,TERR0 bits) */
+      __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP0);
+
+      if ((tsrflags & CAN_TSR_TXOK0) != 0U)
+      {
+        /* Transmission Mailbox 0 complete callback */
+#if USE_HAL_CAN_REGISTER_CALLBACKS == 1
+        /* Call registered callback*/
+        hcan->TxMailbox0CompleteCallback(hcan);
+#else
+        /* Call weak (surcharged) callback */
+        HAL_CAN_TxMailbox0CompleteCallback(hcan);
+#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */
+      }
+      else
+      {
+        if ((tsrflags & CAN_TSR_ALST0) != 0U)
+        {
+          /* Update error code */
+          errorcode |= HAL_CAN_ERROR_TX_ALST0;
+        }
+        else if ((tsrflags & CAN_TSR_TERR0) != 0U)
+        {
+          /* Update error code */
+          errorcode |= HAL_CAN_ERROR_TX_TERR0;
+        }
+        else
+        {
+          /* Transmission Mailbox 0 abort callback */
+#if USE_HAL_CAN_REGISTER_CALLBACKS == 1
+          /* Call registered callback*/
+          hcan->TxMailbox0AbortCallback(hcan);
+#else
+          /* Call weak (surcharged) callback */
+          HAL_CAN_TxMailbox0AbortCallback(hcan);
+#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */
+        }
+      }
+    }
+
+    /* Transmit Mailbox 1 management *****************************************/
+    if ((tsrflags & CAN_TSR_RQCP1) != 0U)
+    {
+      /* Clear the Transmission Complete flag (and TXOK1,ALST1,TERR1 bits) */
+      __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP1);
+
+      if ((tsrflags & CAN_TSR_TXOK1) != 0U)
+      {
+        /* Transmission Mailbox 1 complete callback */
+#if USE_HAL_CAN_REGISTER_CALLBACKS == 1
+        /* Call registered callback*/
+        hcan->TxMailbox1CompleteCallback(hcan);
+#else
+        /* Call weak (surcharged) callback */
+        HAL_CAN_TxMailbox1CompleteCallback(hcan);
+#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */
+      }
+      else
+      {
+        if ((tsrflags & CAN_TSR_ALST1) != 0U)
+        {
+          /* Update error code */
+          errorcode |= HAL_CAN_ERROR_TX_ALST1;
+        }
+        else if ((tsrflags & CAN_TSR_TERR1) != 0U)
+        {
+          /* Update error code */
+          errorcode |= HAL_CAN_ERROR_TX_TERR1;
+        }
+        else
+        {
+          /* Transmission Mailbox 1 abort callback */
+#if USE_HAL_CAN_REGISTER_CALLBACKS == 1
+          /* Call registered callback*/
+          hcan->TxMailbox1AbortCallback(hcan);
+#else
+          /* Call weak (surcharged) callback */
+          HAL_CAN_TxMailbox1AbortCallback(hcan);
+#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */
+        }
+      }
+    }
+
+    /* Transmit Mailbox 2 management *****************************************/
+    if ((tsrflags & CAN_TSR_RQCP2) != 0U)
+    {
+      /* Clear the Transmission Complete flag (and TXOK2,ALST2,TERR2 bits) */
+      __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP2);
+
+      if ((tsrflags & CAN_TSR_TXOK2) != 0U)
+      {
+        /* Transmission Mailbox 2 complete callback */
+#if USE_HAL_CAN_REGISTER_CALLBACKS == 1
+        /* Call registered callback*/
+        hcan->TxMailbox2CompleteCallback(hcan);
+#else
+        /* Call weak (surcharged) callback */
+        HAL_CAN_TxMailbox2CompleteCallback(hcan);
+#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */
+      }
+      else
+      {
+        if ((tsrflags & CAN_TSR_ALST2) != 0U)
+        {
+          /* Update error code */
+          errorcode |= HAL_CAN_ERROR_TX_ALST2;
+        }
+        else if ((tsrflags & CAN_TSR_TERR2) != 0U)
+        {
+          /* Update error code */
+          errorcode |= HAL_CAN_ERROR_TX_TERR2;
+        }
+        else
+        {
+          /* Transmission Mailbox 2 abort callback */
+#if USE_HAL_CAN_REGISTER_CALLBACKS == 1
+          /* Call registered callback*/
+          hcan->TxMailbox2AbortCallback(hcan);
+#else
+          /* Call weak (surcharged) callback */
+          HAL_CAN_TxMailbox2AbortCallback(hcan);
+#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */
+        }
+      }
+    }
+  }
+
+  /* Receive FIFO 0 overrun interrupt management *****************************/
+  if ((interrupts & CAN_IT_RX_FIFO0_OVERRUN) != 0U)
+  {
+    if ((rf0rflags & CAN_RF0R_FOVR0) != 0U)
+    {
+      /* Set CAN error code to Rx Fifo 0 overrun error */
+      errorcode |= HAL_CAN_ERROR_RX_FOV0;
+
+      /* Clear FIFO0 Overrun Flag */
+      __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV0);
+    }
+  }
+
+  /* Receive FIFO 0 full interrupt management ********************************/
+  if ((interrupts & CAN_IT_RX_FIFO0_FULL) != 0U)
+  {
+    if ((rf0rflags & CAN_RF0R_FULL0) != 0U)
+    {
+      /* Clear FIFO 0 full Flag */
+      __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF0);
+
+      /* Receive FIFO 0 full Callback */
+#if USE_HAL_CAN_REGISTER_CALLBACKS == 1
+      /* Call registered callback*/
+      hcan->RxFifo0FullCallback(hcan);
+#else
+      /* Call weak (surcharged) callback */
+      HAL_CAN_RxFifo0FullCallback(hcan);
+#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */
+    }
+  }
+
+  /* Receive FIFO 0 message pending interrupt management *********************/
+  if ((interrupts & CAN_IT_RX_FIFO0_MSG_PENDING) != 0U)
+  {
+    /* Check if message is still pending */
+    if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) != 0U)
+    {
+      /* Receive FIFO 0 mesage pending Callback */
+#if USE_HAL_CAN_REGISTER_CALLBACKS == 1
+      /* Call registered callback*/
+      hcan->RxFifo0MsgPendingCallback(hcan);
+#else
+      /* Call weak (surcharged) callback */
+      HAL_CAN_RxFifo0MsgPendingCallback(hcan);
+#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */
+    }
+  }
+
+  /* Receive FIFO 1 overrun interrupt management *****************************/
+  if ((interrupts & CAN_IT_RX_FIFO1_OVERRUN) != 0U)
+  {
+    if ((rf1rflags & CAN_RF1R_FOVR1) != 0U)
+    {
+      /* Set CAN error code to Rx Fifo 1 overrun error */
+      errorcode |= HAL_CAN_ERROR_RX_FOV1;
+
+      /* Clear FIFO1 Overrun Flag */
+      __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV1);
+    }
+  }
+
+  /* Receive FIFO 1 full interrupt management ********************************/
+  if ((interrupts & CAN_IT_RX_FIFO1_FULL) != 0U)
+  {
+    if ((rf1rflags & CAN_RF1R_FULL1) != 0U)
+    {
+      /* Clear FIFO 1 full Flag */
+      __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF1);
+
+      /* Receive FIFO 1 full Callback */
+#if USE_HAL_CAN_REGISTER_CALLBACKS == 1
+      /* Call registered callback*/
+      hcan->RxFifo1FullCallback(hcan);
+#else
+      /* Call weak (surcharged) callback */
+      HAL_CAN_RxFifo1FullCallback(hcan);
+#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */
+    }
+  }
+
+  /* Receive FIFO 1 message pending interrupt management *********************/
+  if ((interrupts & CAN_IT_RX_FIFO1_MSG_PENDING) != 0U)
+  {
+    /* Check if message is still pending */
+    if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) != 0U)
+    {
+      /* Receive FIFO 1 mesage pending Callback */
+#if USE_HAL_CAN_REGISTER_CALLBACKS == 1
+      /* Call registered callback*/
+      hcan->RxFifo1MsgPendingCallback(hcan);
+#else
+      /* Call weak (surcharged) callback */
+      HAL_CAN_RxFifo1MsgPendingCallback(hcan);
+#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */
+    }
+  }
+
+  /* Sleep interrupt management *********************************************/
+  if ((interrupts & CAN_IT_SLEEP_ACK) != 0U)
+  {
+    if ((msrflags & CAN_MSR_SLAKI) != 0U)
+    {
+      /* Clear Sleep interrupt Flag */
+      __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_SLAKI);
+
+      /* Sleep Callback */
+#if USE_HAL_CAN_REGISTER_CALLBACKS == 1
+      /* Call registered callback*/
+      hcan->SleepCallback(hcan);
+#else
+      /* Call weak (surcharged) callback */
+      HAL_CAN_SleepCallback(hcan);
+#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */
+    }
+  }
+
+  /* WakeUp interrupt management *********************************************/
+  if ((interrupts & CAN_IT_WAKEUP) != 0U)
+  {
+    if ((msrflags & CAN_MSR_WKUI) != 0U)
+    {
+      /* Clear WakeUp Flag */
+      __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_WKU);
+
+      /* WakeUp Callback */
+#if USE_HAL_CAN_REGISTER_CALLBACKS == 1
+      /* Call registered callback*/
+      hcan->WakeUpFromRxMsgCallback(hcan);
+#else
+      /* Call weak (surcharged) callback */
+      HAL_CAN_WakeUpFromRxMsgCallback(hcan);
+#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */
+    }
+  }
+
+  /* Error interrupts management *********************************************/
+  if ((interrupts & CAN_IT_ERROR) != 0U)
+  {
+    if ((msrflags & CAN_MSR_ERRI) != 0U)
+    {
+      /* Check Error Warning Flag */
+      if (((interrupts & CAN_IT_ERROR_WARNING) != 0U) &&
+          ((esrflags & CAN_ESR_EWGF) != 0U))
+      {
+        /* Set CAN error code to Error Warning */
+        errorcode |= HAL_CAN_ERROR_EWG;
+
+        /* No need for clear of Error Warning Flag as read-only */
+      }
+
+      /* Check Error Passive Flag */
+      if (((interrupts & CAN_IT_ERROR_PASSIVE) != 0U) &&
+          ((esrflags & CAN_ESR_EPVF) != 0U))
+      {
+        /* Set CAN error code to Error Passive */
+        errorcode |= HAL_CAN_ERROR_EPV;
+
+        /* No need for clear of Error Passive Flag as read-only */
+      }
+
+      /* Check Bus-off Flag */
+      if (((interrupts & CAN_IT_BUSOFF) != 0U) &&
+          ((esrflags & CAN_ESR_BOFF) != 0U))
+      {
+        /* Set CAN error code to Bus-Off */
+        errorcode |= HAL_CAN_ERROR_BOF;
+
+        /* No need for clear of Error Bus-Off as read-only */
+      }
+
+      /* Check Last Error Code Flag */
+      if (((interrupts & CAN_IT_LAST_ERROR_CODE) != 0U) &&
+          ((esrflags & CAN_ESR_LEC) != 0U))
+      {
+        switch (esrflags & CAN_ESR_LEC)
+        {
+          case (CAN_ESR_LEC_0):
+            /* Set CAN error code to Stuff error */
+            errorcode |= HAL_CAN_ERROR_STF;
+            break;
+          case (CAN_ESR_LEC_1):
+            /* Set CAN error code to Form error */
+            errorcode |= HAL_CAN_ERROR_FOR;
+            break;
+          case (CAN_ESR_LEC_1 | CAN_ESR_LEC_0):
+            /* Set CAN error code to Acknowledgement error */
+            errorcode |= HAL_CAN_ERROR_ACK;
+            break;
+          case (CAN_ESR_LEC_2):
+            /* Set CAN error code to Bit recessive error */
+            errorcode |= HAL_CAN_ERROR_BR;
+            break;
+          case (CAN_ESR_LEC_2 | CAN_ESR_LEC_0):
+            /* Set CAN error code to Bit Dominant error */
+            errorcode |= HAL_CAN_ERROR_BD;
+            break;
+          case (CAN_ESR_LEC_2 | CAN_ESR_LEC_1):
+            /* Set CAN error code to CRC error */
+            errorcode |= HAL_CAN_ERROR_CRC;
+            break;
+          default:
+            break;
+        }
+
+        /* Clear Last error code Flag */
+        CLEAR_BIT(hcan->Instance->ESR, CAN_ESR_LEC);
+      }
+    }
+
+    /* Clear ERRI Flag */
+    __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_ERRI);
+  }
+
+  /* Call the Error call Back in case of Errors */
+  if (errorcode != HAL_CAN_ERROR_NONE)
+  {
+    /* Update error code in handle */
+    hcan->ErrorCode |= errorcode;
+
+    /* Call Error callback function */
+#if USE_HAL_CAN_REGISTER_CALLBACKS == 1
+    /* Call registered callback*/
+    hcan->ErrorCallback(hcan);
+#else
+    /* Call weak (surcharged) callback */
+    HAL_CAN_ErrorCallback(hcan);
+#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */
+  }
+}
+
+/**
+  * @}
+  */
+
+/** @defgroup CAN_Exported_Functions_Group5 Callback functions
+ *  @brief   CAN Callback functions
+ *
+@verbatim
+  ==============================================================================
+                          ##### Callback functions #####
+  ==============================================================================
+    [..]
+    This subsection provides the following callback functions:
+      (+) HAL_CAN_TxMailbox0CompleteCallback
+      (+) HAL_CAN_TxMailbox1CompleteCallback
+      (+) HAL_CAN_TxMailbox2CompleteCallback
+      (+) HAL_CAN_TxMailbox0AbortCallback
+      (+) HAL_CAN_TxMailbox1AbortCallback
+      (+) HAL_CAN_TxMailbox2AbortCallback
+      (+) HAL_CAN_RxFifo0MsgPendingCallback
+      (+) HAL_CAN_RxFifo0FullCallback
+      (+) HAL_CAN_RxFifo1MsgPendingCallback
+      (+) HAL_CAN_RxFifo1FullCallback
+      (+) HAL_CAN_SleepCallback
+      (+) HAL_CAN_WakeUpFromRxMsgCallback
+      (+) HAL_CAN_ErrorCallback
+
+@endverbatim
+  * @{
+  */
+
+/**
+  * @brief  Transmission Mailbox 0 complete callback.
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval None
+  */
+__weak void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan)
+{
+  /* Prevent unused argument(s) compilation warning */
+  UNUSED(hcan);
+
+  /* NOTE : This function Should not be modified, when the callback is needed,
+            the HAL_CAN_TxMailbox0CompleteCallback could be implemented in the
+            user file
+   */
+}
+
+/**
+  * @brief  Transmission Mailbox 1 complete callback.
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval None
+  */
+__weak void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan)
+{
+  /* Prevent unused argument(s) compilation warning */
+  UNUSED(hcan);
+
+  /* NOTE : This function Should not be modified, when the callback is needed,
+            the HAL_CAN_TxMailbox1CompleteCallback could be implemented in the
+            user file
+   */
+}
+
+/**
+  * @brief  Transmission Mailbox 2 complete callback.
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval None
+  */
+__weak void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan)
+{
+  /* Prevent unused argument(s) compilation warning */
+  UNUSED(hcan);
+
+  /* NOTE : This function Should not be modified, when the callback is needed,
+            the HAL_CAN_TxMailbox2CompleteCallback could be implemented in the
+            user file
+   */
+}
+
+/**
+  * @brief  Transmission Mailbox 0 Cancellation callback.
+  * @param  hcan pointer to an CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval None
+  */
+__weak void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan)
+{
+  /* Prevent unused argument(s) compilation warning */
+  UNUSED(hcan);
+
+  /* NOTE : This function Should not be modified, when the callback is needed,
+            the HAL_CAN_TxMailbox0AbortCallback could be implemented in the
+            user file
+   */
+}
+
+/**
+  * @brief  Transmission Mailbox 1 Cancellation callback.
+  * @param  hcan pointer to an CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval None
+  */
+__weak void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan)
+{
+  /* Prevent unused argument(s) compilation warning */
+  UNUSED(hcan);
+
+  /* NOTE : This function Should not be modified, when the callback is needed,
+            the HAL_CAN_TxMailbox1AbortCallback could be implemented in the
+            user file
+   */
+}
+
+/**
+  * @brief  Transmission Mailbox 2 Cancellation callback.
+  * @param  hcan pointer to an CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval None
+  */
+__weak void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan)
+{
+  /* Prevent unused argument(s) compilation warning */
+  UNUSED(hcan);
+
+  /* NOTE : This function Should not be modified, when the callback is needed,
+            the HAL_CAN_TxMailbox2AbortCallback could be implemented in the
+            user file
+   */
+}
+
+/**
+  * @brief  Rx FIFO 0 message pending callback.
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval None
+  */
+__weak void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
+{
+  /* Prevent unused argument(s) compilation warning */
+  UNUSED(hcan);
+
+  /* NOTE : This function Should not be modified, when the callback is needed,
+            the HAL_CAN_RxFifo0MsgPendingCallback could be implemented in the
+            user file
+   */
+}
+
+/**
+  * @brief  Rx FIFO 0 full callback.
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval None
+  */
+__weak void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *hcan)
+{
+  /* Prevent unused argument(s) compilation warning */
+  UNUSED(hcan);
+
+  /* NOTE : This function Should not be modified, when the callback is needed,
+            the HAL_CAN_RxFifo0FullCallback could be implemented in the user
+            file
+   */
+}
+
+/**
+  * @brief  Rx FIFO 1 message pending callback.
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval None
+  */
+__weak void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan)
+{
+  /* Prevent unused argument(s) compilation warning */
+  UNUSED(hcan);
+
+  /* NOTE : This function Should not be modified, when the callback is needed,
+            the HAL_CAN_RxFifo1MsgPendingCallback could be implemented in the
+            user file
+   */
+}
+
+/**
+  * @brief  Rx FIFO 1 full callback.
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval None
+  */
+__weak void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan)
+{
+  /* Prevent unused argument(s) compilation warning */
+  UNUSED(hcan);
+
+  /* NOTE : This function Should not be modified, when the callback is needed,
+            the HAL_CAN_RxFifo1FullCallback could be implemented in the user
+            file
+   */
+}
+
+/**
+  * @brief  Sleep callback.
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval None
+  */
+__weak void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan)
+{
+  /* Prevent unused argument(s) compilation warning */
+  UNUSED(hcan);
+
+  /* NOTE : This function Should not be modified, when the callback is needed,
+            the HAL_CAN_SleepCallback could be implemented in the user file
+   */
+}
+
+/**
+  * @brief  WakeUp from Rx message callback.
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval None
+  */
+__weak void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan)
+{
+  /* Prevent unused argument(s) compilation warning */
+  UNUSED(hcan);
+
+  /* NOTE : This function Should not be modified, when the callback is needed,
+            the HAL_CAN_WakeUpFromRxMsgCallback could be implemented in the
+            user file
+   */
+}
+
+/**
+  * @brief  Error CAN callback.
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval None
+  */
+__weak void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan)
+{
+  /* Prevent unused argument(s) compilation warning */
+  UNUSED(hcan);
+
+  /* NOTE : This function Should not be modified, when the callback is needed,
+            the HAL_CAN_ErrorCallback could be implemented in the user file
+   */
+}
+
+/**
+  * @}
+  */
+
+/** @defgroup CAN_Exported_Functions_Group6 Peripheral State and Error functions
+ *  @brief   CAN Peripheral State functions
+ *
+@verbatim
+  ==============================================================================
+            ##### Peripheral State and Error functions #####
+  ==============================================================================
+    [..]
+    This subsection provides functions allowing to :
+      (+) HAL_CAN_GetState()  : Return the CAN state.
+      (+) HAL_CAN_GetError()  : Return the CAN error codes if any.
+      (+) HAL_CAN_ResetError(): Reset the CAN error codes if any.
+
+@endverbatim
+  * @{
+  */
+
+/**
+  * @brief  Return the CAN state.
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval HAL state
+  */
+HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef *hcan)
+{
+  HAL_CAN_StateTypeDef state = hcan->State;
+
+  if ((state == HAL_CAN_STATE_READY) ||
+      (state == HAL_CAN_STATE_LISTENING))
+  {
+    /* Check sleep mode acknowledge flag */
+    if ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U)
+    {
+      /* Sleep mode is active */
+      state = HAL_CAN_STATE_SLEEP_ACTIVE;
+    }
+    /* Check sleep mode request flag */
+    else if ((hcan->Instance->MCR & CAN_MCR_SLEEP) != 0U)
+    {
+      /* Sleep mode request is pending */
+      state = HAL_CAN_STATE_SLEEP_PENDING;
+    }
+    else
+    {
+      /* Neither sleep mode request nor sleep mode acknowledge */
+    }
+  }
+
+  /* Return CAN state */
+  return state;
+}
+
+/**
+  * @brief  Return the CAN error code.
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval CAN Error Code
+  */
+uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan)
+{
+  /* Return CAN error code */
+  return hcan->ErrorCode;
+}
+
+/**
+  * @brief  Reset the CAN error code.
+  * @param  hcan pointer to a CAN_HandleTypeDef structure that contains
+  *         the configuration information for the specified CAN.
+  * @retval HAL status
+  */
+HAL_StatusTypeDef HAL_CAN_ResetError(CAN_HandleTypeDef *hcan)
+{
+  HAL_StatusTypeDef status = HAL_OK;
+  HAL_CAN_StateTypeDef state = hcan->State;
+
+  if ((state == HAL_CAN_STATE_READY) ||
+      (state == HAL_CAN_STATE_LISTENING))
+  {
+    /* Reset CAN error code */
+    hcan->ErrorCode = 0U;
+  }
+  else
+  {
+    /* Update error code */
+    hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED;
+
+    status = HAL_ERROR;
+  }
+
+  /* Return the status */
+  return status;
+}
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+#endif /* HAL_CAN_MODULE_ENABLED */
+
+/**
+  * @}
+  */
+
+#endif /* CAN1 */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Standard_robot/Inc/can.h b/Standard_robot/Inc/can.h
new file mode 100644
index 0000000000000000000000000000000000000000..8e586fd26015883575faf25e3eb0929b94ecd4c3
--- /dev/null
+++ b/Standard_robot/Inc/can.h
@@ -0,0 +1,58 @@
+/**
+  ******************************************************************************
+  * File Name          : CAN.h
+  * Description        : This file provides code for the configuration
+  *                      of the CAN instances.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under BSD 3-Clause license,
+  * the "License"; You may not use this file except in compliance with the
+  * License. You may obtain a copy of the License at:
+  *                        opensource.org/licenses/BSD-3-Clause
+  *
+  ******************************************************************************
+  */
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __can_H
+#define __can_H
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+extern CAN_HandleTypeDef hcan1;
+
+/* USER CODE BEGIN Private defines */
+
+/* USER CODE END Private defines */
+
+void MX_CAN1_Init(void);
+
+/* USER CODE BEGIN Prototypes */
+
+/* USER CODE END Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*__ can_H */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Standard_robot/Inc/main.h b/Standard_robot/Inc/main.h
index 25ceb9835c66ec588632e2a6dd636a7cb44d6f8b..3eaffd9977089e1731d19971c5254e6c47fff0f0 100644
--- a/Standard_robot/Inc/main.h
+++ b/Standard_robot/Inc/main.h
@@ -17,6 +17,7 @@
   *
   ******************************************************************************
   */
+#define LIMIT_MIN_MAX(x,min,max) (x) = (((x)<=(min))?(min):(((x)>=(max))?(max):(x)))
 /* USER CODE END Header */
 
 /* Define to prevent recursive inclusion -------------------------------------*/
@@ -60,8 +61,24 @@ void Error_Handler(void);
 /* Private defines -----------------------------------------------------------*/
 #define OLED_DC_Pin GPIO_PIN_9
 #define OLED_DC_GPIO_Port GPIOB
+#define Z_Pin GPIO_PIN_2
+#define Z_GPIO_Port GPIOI
+#define POWER1_CTRL_Pin GPIO_PIN_2
+#define POWER1_CTRL_GPIO_Port GPIOH
+#define POWER2_CTRL_Pin GPIO_PIN_3
+#define POWER2_CTRL_GPIO_Port GPIOH
+#define POWER3_CTRL_Pin GPIO_PIN_4
+#define POWER3_CTRL_GPIO_Port GPIOH
 #define LED_A_Pin GPIO_PIN_8
 #define LED_A_GPIO_Port GPIOG
+#define POWER4_CTRL_Pin GPIO_PIN_5
+#define POWER4_CTRL_GPIO_Port GPIOH
+#define KEY_Pin GPIO_PIN_2
+#define KEY_GPIO_Port GPIOB
+#define LED_RED_Pin GPIO_PIN_11
+#define LED_RED_GPIO_Port GPIOE
+#define LED_GREEN_Pin GPIO_PIN_14
+#define LED_GREEN_GPIO_Port GPIOF
 #define OLED_RST_Pin GPIO_PIN_10
 #define OLED_RST_GPIO_Port GPIOB
 /* USER CODE BEGIN Private defines */
diff --git a/Standard_robot/Inc/stm32f4xx_hal_conf.h b/Standard_robot/Inc/stm32f4xx_hal_conf.h
index 87bc48150e0984a09b28cb3f6f996e167fbaa994..3c274787870a534e99fd3a3fde63995589f158f9 100644
--- a/Standard_robot/Inc/stm32f4xx_hal_conf.h
+++ b/Standard_robot/Inc/stm32f4xx_hal_conf.h
@@ -38,7 +38,7 @@
 
   #define HAL_ADC_MODULE_ENABLED
 /* #define HAL_CRYP_MODULE_ENABLED   */
-/* #define HAL_CAN_MODULE_ENABLED   */
+#define HAL_CAN_MODULE_ENABLED
 /* #define HAL_CRC_MODULE_ENABLED   */
 /* #define HAL_CRYP_MODULE_ENABLED   */
 /* #define HAL_DAC_MODULE_ENABLED   */
@@ -61,11 +61,12 @@
 /* #define HAL_SD_MODULE_ENABLED   */
 /* #define HAL_MMC_MODULE_ENABLED   */
 #define HAL_SPI_MODULE_ENABLED
-/* #define HAL_TIM_MODULE_ENABLED   */
+#define HAL_TIM_MODULE_ENABLED
 #define HAL_UART_MODULE_ENABLED
 /* #define HAL_USART_MODULE_ENABLED   */
 /* #define HAL_IRDA_MODULE_ENABLED   */
 /* #define HAL_SMARTCARD_MODULE_ENABLED   */
+/* #define HAL_SMBUS_MODULE_ENABLED   */
 /* #define HAL_WWDG_MODULE_ENABLED   */
 /* #define HAL_PCD_MODULE_ENABLED   */
 /* #define HAL_HCD_MODULE_ENABLED   */
@@ -77,7 +78,6 @@
 /* #define HAL_SPDIFRX_MODULE_ENABLED   */
 /* #define HAL_DFSDM_MODULE_ENABLED   */
 /* #define HAL_LPTIM_MODULE_ENABLED   */
-/* #define HAL_EXTI_MODULE_ENABLED   */
 #define HAL_GPIO_MODULE_ENABLED
 #define HAL_EXTI_MODULE_ENABLED
 #define HAL_DMA_MODULE_ENABLED
@@ -264,6 +264,10 @@
   #include "stm32f4xx_hal_cryp.h" 
 #endif /* HAL_CRYP_MODULE_ENABLED */
 
+#ifdef HAL_SMBUS_MODULE_ENABLED
+#include "stm32f4xx_hal_smbus.h"
+#endif /* HAL_SMBUS_MODULE_ENABLED */
+
 #ifdef HAL_DMA2D_MODULE_ENABLED
   #include "stm32f4xx_hal_dma2d.h"
 #endif /* HAL_DMA2D_MODULE_ENABLED */
diff --git a/Standard_robot/Inc/stm32f4xx_it.h b/Standard_robot/Inc/stm32f4xx_it.h
index 1c02bb865c4ab33b305e5616d352958355891f97..482e4a5716d4ed668a0dc1c8027048c7a021e01d 100644
--- a/Standard_robot/Inc/stm32f4xx_it.h
+++ b/Standard_robot/Inc/stm32f4xx_it.h
@@ -56,6 +56,8 @@ void SVC_Handler(void);
 void DebugMon_Handler(void);
 void PendSV_Handler(void);
 void SysTick_Handler(void);
+void CAN1_TX_IRQHandler(void);
+void CAN1_RX0_IRQHandler(void);
 void USART1_IRQHandler(void);
 void DMA2_Stream7_IRQHandler(void);
 /* USER CODE BEGIN EFP */
diff --git a/Standard_robot/Inc/tim.h b/Standard_robot/Inc/tim.h
new file mode 100644
index 0000000000000000000000000000000000000000..b573a6b215d8f66ee99f4e10b8e6b4ca309592f4
--- /dev/null
+++ b/Standard_robot/Inc/tim.h
@@ -0,0 +1,60 @@
+/**
+  ******************************************************************************
+  * File Name          : TIM.h
+  * Description        : This file provides code for the configuration
+  *                      of the TIM instances.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under BSD 3-Clause license,
+  * the "License"; You may not use this file except in compliance with the
+  * License. You may obtain a copy of the License at:
+  *                        opensource.org/licenses/BSD-3-Clause
+  *
+  ******************************************************************************
+  */
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __tim_H
+#define __tim_H
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+extern TIM_HandleTypeDef htim1;
+
+/* USER CODE BEGIN Private defines */
+
+/* USER CODE END Private defines */
+
+void MX_TIM1_Init(void);
+                        
+void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
+                    
+/* USER CODE BEGIN Prototypes */
+
+/* USER CODE END Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*__ tim_H */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Standard_robot/MDK-ARM/Standard_robot.uvguix.charl b/Standard_robot/MDK-ARM/Standard_robot.uvguix.charl
index 9088ab291c5ac1dd3c38a1f670b7c8f4693b8ea0..1af8b016c891c53007fd9e81d09bde5a77f2259f 100644
--- a/Standard_robot/MDK-ARM/Standard_robot.uvguix.charl
+++ b/Standard_robot/MDK-ARM/Standard_robot.uvguix.charl
@@ -110,8 +110,8 @@
     <MDIClientArea>
       <RegID>0</RegID>
       <MDITabState>
-        <Len>636</Len>
-        <Data>0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000500000001000000010000003C443A5C636861726C5C446F63756D656E74735C4769745C524D2D436F6E74726F6C655C5374616E646172645F726F626F745C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF47443A5C636861726C5C446F63756D656E74735C4769745C524D2D436F6E74726F6C655C5374616E646172645F726F626F745C4253505C4472697665725C6273705F6F6C65642E63000000000A6273705F6F6C65642E6300000000FFDC7800FFFFFFFF47443A5C636861726C5C446F63756D656E74735C4769745C524D2D436F6E74726F6C655C5374616E646172645F726F626F745C4253505C4472697665725C6273705F6F6C65642E68000000000A6273705F6F6C65642E6800000000F0A0A100FFFFFFFF43443A5C636861726C5C446F63756D656E74735C4769745C524D2D436F6E74726F6C655C5374616E646172645F726F626F745C4253505C4465766963655C6F6C65642E6300000000066F6C65642E6300000000F0A0A100FFFFFFFF43443A5C636861726C5C446F63756D656E74735C4769745C524D2D436F6E74726F6C655C5374616E646172645F726F626F745C4253505C4465766963655C6F6C65642E6800000000066F6C65642E6800000000BCA8E100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000D1000000660000005805000070020000</Data>
+        <Len>820</Len>
+        <Data>0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000700000000000000010000003C443A5C636861726C5C446F63756D656E74735C4769745C524D2D436F6E74726F6C655C5374616E646172645F726F626F745C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF44443A5C636861726C5C446F63756D656E74735C4769745C524D2D436F6E74726F6C655C5374616E646172645F726F626F745C4253505C4465766963655C6D6F746F722E6300000000076D6F746F722E6300000000FFDC7800FFFFFFFF44443A5C636861726C5C446F63756D656E74735C4769745C524D2D436F6E74726F6C655C5374616E646172645F726F626F745C4253505C4465766963655C6D6F746F722E6800000000076D6F746F722E6800000000BECEA100FFFFFFFF46443A5C636861726C5C446F63756D656E74735C4769745C524D2D436F6E74726F6C655C5374616E646172645F726F626F745C4253505C4472697665725C6273705F63616E2E6300000000096273705F63616E2E6300000000F0A0A100FFFFFFFF46443A5C636861726C5C446F63756D656E74735C4769745C524D2D436F6E74726F6C655C5374616E646172645F726F626F745C4253505C4472697665725C6273705F63616E2E6800000000096273705F63616E2E6800000000BCA8E100FFFFFFFF45443A5C636861726C5C446F63756D656E74735C4769745C524D2D436F6E74726F6C655C5374616E646172645F726F626F745C4253505C416C676F726974686D5C7069642E6300000000057069642E63000000009CC1B600FFFFFFFF45443A5C636861726C5C446F63756D656E74735C4769745C524D2D436F6E74726F6C655C5374616E646172645F726F626F745C4253505C416C676F726974686D5C7069642E6800000000057069642E6800000000F7B88600FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000F3000000660000005805000091020000</Data>
       </MDITabState>
     </MDIClientArea>
     <ViewEx>
@@ -134,7 +134,7 @@
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>AF00000066000000F2030000DB000000</Data>
+          <Data>A4000000BB0000009D02000030010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -150,11 +150,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000066000000CA00000040020000</Data>
+          <Data>0300000066000000EC00000061020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -170,11 +170,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000066000000CA00000040020000</Data>
+          <Data>0300000066000000EC00000061020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C000000530000000601000027020000</Data>
+          <Data>A4000000BB0000006E0100008F020000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -190,11 +190,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000C4010000EF0300001D020000</Data>
+          <Data>00000000C1010000F203000036020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C0000005300000035020000C8000000</Data>
+          <Data>A4000000BB0000009D02000030010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -210,11 +210,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000C4010000EF0300001D020000</Data>
+          <Data>03000000C4010000EF03000009020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C0000005300000035020000C8000000</Data>
+          <Data>A4000000BB0000009D02000030010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -230,11 +230,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000C4010000EF0300001D020000</Data>
+          <Data>03000000C4010000EF03000009020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C0000005300000035020000C8000000</Data>
+          <Data>A4000000BB0000009D02000030010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -250,11 +250,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000C4010000EF0300001D020000</Data>
+          <Data>03000000C4010000EF03000009020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C0000005300000035020000C8000000</Data>
+          <Data>A4000000BB0000009D02000030010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -270,11 +270,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF030000E1000000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -294,7 +294,7 @@
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C0000005300000035020000C8000000</Data>
+          <Data>A4000000BB0000009D02000030010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -314,7 +314,7 @@
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -330,11 +330,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000C4010000EF0300001D020000</Data>
+          <Data>03000000C4010000EF03000009020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -350,11 +350,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000C4010000EF0300001D020000</Data>
+          <Data>03000000C4010000EF03000009020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -370,11 +370,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000C4010000EF0300001D020000</Data>
+          <Data>03000000C4010000EF03000009020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C0000005300000035020000C8000000</Data>
+          <Data>A4000000BB0000009D02000030010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -390,11 +390,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000C4010000EF0300001D020000</Data>
+          <Data>03000000C4010000EF03000009020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C0000005300000035020000C8000000</Data>
+          <Data>A4000000BB0000009D02000030010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -410,11 +410,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000C4010000EF0300001D020000</Data>
+          <Data>03000000C4010000EF03000009020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C0000005300000035020000C8000000</Data>
+          <Data>A4000000BB0000009D02000030010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -430,11 +430,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000C4010000EF0300001D020000</Data>
+          <Data>03000000C4010000EF03000009020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C0000005300000035020000C8000000</Data>
+          <Data>A4000000BB0000009D02000030010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -450,11 +450,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000066000000CA00000040020000</Data>
+          <Data>0300000066000000EC00000061020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C000000530000000601000027020000</Data>
+          <Data>A4000000BB0000006E0100008F020000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -470,11 +470,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000066000000CA00000040020000</Data>
+          <Data>0300000066000000EC00000061020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C000000530000000601000027020000</Data>
+          <Data>A4000000BB0000006E0100008F020000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -490,11 +490,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>00000000710200005805000048030000</Data>
+          <Data>00000000920200005805000048030000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C0000005300000035020000C8000000</Data>
+          <Data>A4000000BB0000009D02000030010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -514,7 +514,7 @@
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C0000005300000035020000C8000000</Data>
+          <Data>A4000000BB0000009D02000030010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -530,11 +530,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000074020000550500002F030000</Data>
+          <Data>0300000095020000EF030000DA020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C0000005300000035020000C8000000</Data>
+          <Data>A4000000BB0000009D02000030010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -550,11 +550,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>B200000066000000EF030000AB000000</Data>
+          <Data>AF00000063000000F2030000C4000000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C0000005300000035020000C8000000</Data>
+          <Data>A4000000BB0000009D02000030010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -574,7 +574,7 @@
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C0000005300000035020000C8000000</Data>
+          <Data>A4000000BB0000009D02000030010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -610,11 +610,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4703000063000000F2030000BD010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -630,11 +630,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000C4010000EF0300001D020000</Data>
+          <Data>00000000C1010000F203000022020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C0000005300000035020000C8000000</Data>
+          <Data>A4000000BB0000009D02000030010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -654,7 +654,7 @@
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C0000005300000035020000C8000000</Data>
+          <Data>A4000000BB0000009D02000030010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -674,7 +674,7 @@
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C0000005300000035020000C8000000</Data>
+          <Data>A4000000BB0000009D02000030010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -690,11 +690,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>B200000066000000EF030000AB000000</Data>
+          <Data>AF00000063000000F2030000C4000000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -714,7 +714,7 @@
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C0000005300000035020000C8000000</Data>
+          <Data>A4000000BB0000009D02000030010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -730,11 +730,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -750,11 +750,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -770,11 +770,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -790,11 +790,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -810,11 +810,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -830,11 +830,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -850,11 +850,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -870,11 +870,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -890,11 +890,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -910,11 +910,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -930,11 +930,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -950,11 +950,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -970,11 +970,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -990,11 +990,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1010,11 +1010,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1030,11 +1030,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1050,11 +1050,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1070,11 +1070,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1090,11 +1090,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1110,11 +1110,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1130,11 +1130,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1150,11 +1150,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000066000000A800000040020000</Data>
+          <Data>0300000066000000A80000001D020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C000000530000000601000027020000</Data>
+          <Data>A4000000BB0000006E0100008F020000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1170,11 +1170,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000074020000550500002F030000</Data>
+          <Data>0000000092020000F2030000F3020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C0000005300000035020000C8000000</Data>
+          <Data>A4000000BB0000009D02000030010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1190,11 +1190,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000074020000550500002F030000</Data>
+          <Data>0300000095020000EF030000DA020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C000000530000000601000027020000</Data>
+          <Data>A4000000BB0000006E0100008F020000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1210,11 +1210,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000C4010000EF0300001D020000</Data>
+          <Data>03000000C4010000EF03000009020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1230,11 +1230,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000C4010000EF0300001D020000</Data>
+          <Data>03000000C4010000EF03000009020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1250,11 +1250,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000074020000550500002F030000</Data>
+          <Data>0300000095020000EF030000DA020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C000000530000000601000027020000</Data>
+          <Data>A4000000BB0000006E0100008F020000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1270,11 +1270,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000074020000550500002F030000</Data>
+          <Data>0300000095020000EF030000DA020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C000000530000000601000027020000</Data>
+          <Data>A4000000BB0000006E0100008F020000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1294,7 +1294,7 @@
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C0000005300000035020000C8000000</Data>
+          <Data>A4000000BB0000009D02000030010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1310,11 +1310,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1330,11 +1330,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1350,11 +1350,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1370,11 +1370,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1390,11 +1390,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1410,11 +1410,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1430,11 +1430,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1450,11 +1450,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1470,11 +1470,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1490,11 +1490,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1510,11 +1510,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1530,11 +1530,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1550,11 +1550,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1570,17 +1570,17 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RegID>50014</RegID>
         <PaneID>50014</PaneID>
-        <IsVisible>0</IsVisible>
+        <IsVisible>1</IsVisible>
         <IsFloating>0</IsFloating>
         <IsTabbed>0</IsTabbed>
         <IsActivated>0</IsActivated>
@@ -1590,11 +1590,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>B200000066000000EF03000081000000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>0A0000000A0000006E0000006E000000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1610,11 +1610,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1630,11 +1630,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1650,11 +1650,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1670,11 +1670,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1690,11 +1690,11 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>4A03000066000000EF030000A4010000</Data>
+          <Data>4A03000066000000EF0300002B010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
@@ -1704,7 +1704,7 @@
         <IsFloating>0</IsFloating>
         <IsTabbed>0</IsTabbed>
         <IsActivated>0</IsActivated>
-        <MRUWidth>966</MRUWidth>
+        <MRUWidth>32767</MRUWidth>
         <PinState>0</PinState>
         <RecentFrameAlignment>8192</RecentFrameAlignment>
         <RecentRowIndex>0</RecentRowIndex>
@@ -1744,7 +1744,7 @@
         <IsFloating>0</IsFloating>
         <IsTabbed>0</IsTabbed>
         <IsActivated>0</IsActivated>
-        <MRUWidth>476</MRUWidth>
+        <MRUWidth>32767</MRUWidth>
         <PinState>0</PinState>
         <RecentFrameAlignment>8192</RecentFrameAlignment>
         <RecentRowIndex>1</RecentRowIndex>
@@ -1764,7 +1764,7 @@
         <IsFloating>0</IsFloating>
         <IsTabbed>0</IsTabbed>
         <IsActivated>0</IsActivated>
-        <MRUWidth>612</MRUWidth>
+        <MRUWidth>32767</MRUWidth>
         <PinState>0</PinState>
         <RecentFrameAlignment>8192</RecentFrameAlignment>
         <RecentRowIndex>2</RecentRowIndex>
@@ -1790,23 +1790,23 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000C4010000EF0300001D020000</Data>
+          <Data>03000000C4010000EF03000009020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>3C00000053000000E7000000FE000000</Data>
+          <Data>A4000000BB0000004F01000066010000</Data>
         </RectRecentFloat>
       </Window>
       <DockMan>
         <Len>3312</Len>
-        <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFAF000000C4000000F2030000C8000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000AF00000066000000F2030000DB000000AF0000004F000000F2030000C40000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF430300004F00000047030000BD010000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000004703000066000000F2030000D4010000470300004F000000F2030000BD01000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFCD0000004F000000D1000000590200000100000002000010040000000100000057FFFFFFA4040000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000AB00000070020000000000004F000000CD000000590200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000A9010000F2030000AD01000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000000000000C4010000F20300004D02000000000000AD010000F20300003602000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFF9010000AD010000FD0100003602000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF0000000059020000580500005D0200000100000001000010040000000100000085FDFFFF73000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000010000000000000074020000580500005F030000000000005D02000058050000480300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data>
+        <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFAF000000C4000000F2030000C8000000000000000100001004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000A4000000BB0000009D02000030010000AF0000004F000000F2030000C40000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF430300004F00000047030000BD010000000000000200001004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000A4000000BB0000004F01000066010000470300004F000000F2030000BD01000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFEF0000004F000000F30000007A0200000100000002000010040000000100000057FFFFFFA4040000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000A4000000BB0000004F01000066010000000000004F000000EF0000007A0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000A9010000F2030000AD01000000000000010000100400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000A4000000BB0000004F0100006601000000000000AD010000F20300003602000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFF9010000AD010000FD0100003602000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000007A020000580500007E02000001000000010000100400000001000000E2FDFFFFD0000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000A4000000BB0000009D02000030010000000000007E02000058050000480300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data>
       </DockMan>
       <ToolBar>
         <RegID>59392</RegID>
         <Name>File</Name>
         <Buttons>
           <Len>2606</Len>
-          <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000574696D6528960000000000000005000574696D6528085F5F434C49424E530D63757272656E745F73746174650A49525148616E646C65720341534D0000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000</Data>
+          <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000574696D6528960000000000000005000574696D6528085F5F434C49424E530D63757272656E745F73746174650A49525148616E646C65720341534D0000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000000000000010000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65FF7F0000</Data>
         </Buttons>
         <OriginalItems>
           <Len>1423</Len>
@@ -1822,7 +1822,7 @@
         <Name>Build</Name>
         <Buttons>
           <Len>988</Len>
-          <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000E5374616E646172645F726F626F74960000000000000001000E5374616E646172645F726F626F74000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data>
+          <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000E5374616E646172645F726F626F74960000000000000001000E5374616E646172645F726F626F74000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64FF7F0000</Data>
         </Buttons>
         <OriginalItems>
           <Len>583</Len>
@@ -1838,7 +1838,7 @@
         <Name>Debug</Name>
         <Buttons>
           <Len>2373</Len>
-          <Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data>
+          <Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000000000000100000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000000000000100000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000000000000100000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000000000000100000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F720100000000000000000000000100000001000000000000000000000001000000000000000000054465627567FF7F0000</Data>
         </Buttons>
         <OriginalItems>
           <Len>898</Len>
@@ -1862,48 +1862,66 @@
     <ActiveMDIGroup>0</ActiveMDIGroup>
     <MDIGroup>
       <Size>100</Size>
-      <ActiveTab>1</ActiveTab>
+      <ActiveTab>0</ActiveTab>
       <Doc>
         <Name>../Src/main.c</Name>
-        <ColumnNumber>26</ColumnNumber>
-        <TopLine>116</TopLine>
-        <CurrentLine>128</CurrentLine>
+        <ColumnNumber>30</ColumnNumber>
+        <TopLine>134</TopLine>
+        <CurrentLine>148</CurrentLine>
         <Folding>1</Folding>
-        <ContractedFolders>134,139,180,185,192</ContractedFolders>
+        <ContractedFolders>188,229,234,241</ContractedFolders>
         <PaneID>0</PaneID>
       </Doc>
       <Doc>
-        <Name>..\BSP\Driver\bsp_oled.c</Name>
-        <ColumnNumber>18</ColumnNumber>
-        <TopLine>83</TopLine>
-        <CurrentLine>269</CurrentLine>
+        <Name>..\BSP\Device\motor.c</Name>
+        <ColumnNumber>8</ColumnNumber>
+        <TopLine>13</TopLine>
+        <CurrentLine>25</CurrentLine>
         <Folding>1</Folding>
-        <ContractedFolders>17,33,50,67,81,87,94,107,128,153,171,179,222,230,309,317,366,393</ContractedFolders>
+        <ContractedFolders></ContractedFolders>
         <PaneID>0</PaneID>
       </Doc>
       <Doc>
-        <Name>..\BSP\Driver\bsp_oled.h</Name>
-        <ColumnNumber>92</ColumnNumber>
-        <TopLine>3</TopLine>
-        <CurrentLine>4</CurrentLine>
+        <Name>..\BSP\Device\motor.h</Name>
+        <ColumnNumber>24</ColumnNumber>
+        <TopLine>42</TopLine>
+        <CurrentLine>46</CurrentLine>
         <Folding>1</Folding>
         <ContractedFolders></ContractedFolders>
         <PaneID>0</PaneID>
       </Doc>
       <Doc>
-        <Name>..\BSP\Device\oled.c</Name>
+        <Name>..\BSP\Driver\bsp_can.c</Name>
         <ColumnNumber>0</ColumnNumber>
-        <TopLine>1</TopLine>
-        <CurrentLine>6</CurrentLine>
+        <TopLine>26</TopLine>
+        <CurrentLine>69</CurrentLine>
         <Folding>1</Folding>
-        <ContractedFolders>6,32</ContractedFolders>
+        <ContractedFolders>30,49,88,95</ContractedFolders>
+        <PaneID>0</PaneID>
+      </Doc>
+      <Doc>
+        <Name>..\BSP\Driver\bsp_can.h</Name>
+        <ColumnNumber>0</ColumnNumber>
+        <TopLine>16</TopLine>
+        <CurrentLine>20</CurrentLine>
+        <Folding>1</Folding>
+        <ContractedFolders></ContractedFolders>
+        <PaneID>0</PaneID>
+      </Doc>
+      <Doc>
+        <Name>..\BSP\Algorithm\pid.c</Name>
+        <ColumnNumber>40</ColumnNumber>
+        <TopLine>8</TopLine>
+        <CurrentLine>47</CurrentLine>
+        <Folding>1</Folding>
+        <ContractedFolders></ContractedFolders>
         <PaneID>0</PaneID>
       </Doc>
       <Doc>
-        <Name>../BSP/Device/oled.h</Name>
-        <ColumnNumber>47</ColumnNumber>
-        <TopLine>3</TopLine>
-        <CurrentLine>28</CurrentLine>
+        <Name>../BSP/Algorithm/pid.h</Name>
+        <ColumnNumber>13</ColumnNumber>
+        <TopLine>21</TopLine>
+        <CurrentLine>39</CurrentLine>
         <Folding>1</Folding>
         <ContractedFolders></ContractedFolders>
         <PaneID>0</PaneID>
diff --git a/Standard_robot/MDK-ARM/Standard_robot.uvoptx b/Standard_robot/MDK-ARM/Standard_robot.uvoptx
index b2f22d1584481fe46ccc9595f4d731ccf6c51354..2bb4092e93a36ada6b68ac05eb4f3b991ec51a3f 100644
--- a/Standard_robot/MDK-ARM/Standard_robot.uvoptx
+++ b/Standard_robot/MDK-ARM/Standard_robot.uvoptx
@@ -128,7 +128,24 @@
           <Name>-U-O142 -O2254 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_2048.FLM -FS08000000 -FL0200000 -FP0($$Device:STM32F427IIHx$CMSIS\Flash\STM32F4xx_2048.FLM)</Name>
         </SetRegEntry>
       </TargetDriverDllRegistry>
-      <Breakpoint/>
+      <Breakpoint>
+        <Bp>
+          <Number>0</Number>
+          <Type>0</Type>
+          <LineNumber>150</LineNumber>
+          <EnabledFlag>1</EnabledFlag>
+          <Address>0</Address>
+          <ByteObject>0</ByteObject>
+          <HtxType>0</HtxType>
+          <ManyObjects>0</ManyObjects>
+          <SizeOfObject>0</SizeOfObject>
+          <BreakByAccess>0</BreakByAccess>
+          <BreakIfRCount>0</BreakIfRCount>
+          <Filename>../Src/main.c</Filename>
+          <ExecCommand></ExecCommand>
+          <Expression></Expression>
+        </Bp>
+      </Breakpoint>
       <Tracepoint>
         <THDelay>0</THDelay>
       </Tracepoint>
@@ -183,7 +200,7 @@
 
   <Group>
     <GroupName>Application/MDK-ARM</GroupName>
-    <tvExp>1</tvExp>
+    <tvExp>0</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -203,7 +220,7 @@
 
   <Group>
     <GroupName>Application/User</GroupName>
-    <tvExp>1</tvExp>
+    <tvExp>0</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -250,6 +267,18 @@
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
+      <PathWithFileName>../Src/can.c</PathWithFileName>
+      <FilenameWithoutPath>can.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>2</GroupNumber>
+      <FileNumber>6</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
       <PathWithFileName>../Src/dma.c</PathWithFileName>
       <FilenameWithoutPath>dma.c</FilenameWithoutPath>
       <RteFlg>0</RteFlg>
@@ -257,7 +286,7 @@
     </File>
     <File>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>6</FileNumber>
+      <FileNumber>7</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -269,7 +298,19 @@
     </File>
     <File>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>7</FileNumber>
+      <FileNumber>8</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>../Src/tim.c</PathWithFileName>
+      <FilenameWithoutPath>tim.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>2</GroupNumber>
+      <FileNumber>9</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -281,7 +322,7 @@
     </File>
     <File>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>8</FileNumber>
+      <FileNumber>10</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -293,7 +334,7 @@
     </File>
     <File>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>9</FileNumber>
+      <FileNumber>11</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -306,86 +347,166 @@
   </Group>
 
   <Group>
-    <GroupName>Drivers/STM32F4xx_HAL_Driver</GroupName>
+    <GroupName>Drivers/CMSIS</GroupName>
     <tvExp>0</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>10</FileNumber>
+      <FileNumber>12</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
-      <PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c</PathWithFileName>
-      <FilenameWithoutPath>stm32f4xx_hal_adc.c</FilenameWithoutPath>
+      <PathWithFileName>../Src/system_stm32f4xx.c</PathWithFileName>
+      <FilenameWithoutPath>system_stm32f4xx.c</FilenameWithoutPath>
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
+  </Group>
+
+  <Group>
+    <GroupName>BSP</GroupName>
+    <tvExp>1</tvExp>
+    <tvExpOptDlg>0</tvExpOptDlg>
+    <cbSel>0</cbSel>
+    <RteFlg>0</RteFlg>
     <File>
-      <GroupNumber>3</GroupNumber>
-      <FileNumber>11</FileNumber>
+      <GroupNumber>4</GroupNumber>
+      <FileNumber>13</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
-      <PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c</PathWithFileName>
-      <FilenameWithoutPath>stm32f4xx_hal_adc_ex.c</FilenameWithoutPath>
+      <PathWithFileName>..\BSP\Driver\bsp_usart.c</PathWithFileName>
+      <FilenameWithoutPath>bsp_usart.c</FilenameWithoutPath>
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>3</GroupNumber>
-      <FileNumber>12</FileNumber>
+      <GroupNumber>4</GroupNumber>
+      <FileNumber>14</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
-      <PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c</PathWithFileName>
-      <FilenameWithoutPath>stm32f4xx_hal_spi.c</FilenameWithoutPath>
+      <PathWithFileName>..\BSP\Driver\bsp_oled.c</PathWithFileName>
+      <FilenameWithoutPath>bsp_oled.c</FilenameWithoutPath>
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>3</GroupNumber>
-      <FileNumber>13</FileNumber>
+      <GroupNumber>4</GroupNumber>
+      <FileNumber>15</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
-      <PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c</PathWithFileName>
-      <FilenameWithoutPath>stm32f4xx_hal_tim.c</FilenameWithoutPath>
+      <PathWithFileName>..\BSP\Driver\bsp_can.c</PathWithFileName>
+      <FilenameWithoutPath>bsp_can.c</FilenameWithoutPath>
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>3</GroupNumber>
-      <FileNumber>14</FileNumber>
+      <GroupNumber>4</GroupNumber>
+      <FileNumber>16</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
-      <PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c</PathWithFileName>
-      <FilenameWithoutPath>stm32f4xx_hal_tim_ex.c</FilenameWithoutPath>
+      <PathWithFileName>..\BSP\Driver\bsp_key.c</PathWithFileName>
+      <FilenameWithoutPath>bsp_key.c</FilenameWithoutPath>
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
+  </Group>
+
+  <Group>
+    <GroupName>Device</GroupName>
+    <tvExp>1</tvExp>
+    <tvExpOptDlg>0</tvExpOptDlg>
+    <cbSel>0</cbSel>
+    <RteFlg>0</RteFlg>
     <File>
-      <GroupNumber>3</GroupNumber>
-      <FileNumber>15</FileNumber>
+      <GroupNumber>5</GroupNumber>
+      <FileNumber>17</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
-      <PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c</PathWithFileName>
-      <FilenameWithoutPath>stm32f4xx_hal_uart.c</FilenameWithoutPath>
+      <PathWithFileName>..\BSP\Device\oled.c</PathWithFileName>
+      <FilenameWithoutPath>oled.c</FilenameWithoutPath>
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>3</GroupNumber>
-      <FileNumber>16</FileNumber>
+      <GroupNumber>5</GroupNumber>
+      <FileNumber>18</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\BSP\Device\motor.c</PathWithFileName>
+      <FilenameWithoutPath>motor.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+  </Group>
+
+  <Group>
+    <GroupName>Algorithm</GroupName>
+    <tvExp>1</tvExp>
+    <tvExpOptDlg>0</tvExpOptDlg>
+    <cbSel>0</cbSel>
+    <RteFlg>0</RteFlg>
+    <File>
+      <GroupNumber>6</GroupNumber>
+      <FileNumber>19</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>1</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\BSP\Algorithm\pid.c</PathWithFileName>
+      <FilenameWithoutPath>pid.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+  </Group>
+
+  <Group>
+    <GroupName>Drivers/STM32F4xx_HAL_Driver</GroupName>
+    <tvExp>0</tvExp>
+    <tvExpOptDlg>0</tvExpOptDlg>
+    <cbSel>0</cbSel>
+    <RteFlg>0</RteFlg>
+    <File>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>20</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c</PathWithFileName>
+      <FilenameWithoutPath>stm32f4xx_hal_adc.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>21</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c</PathWithFileName>
+      <FilenameWithoutPath>stm32f4xx_hal_adc_ex.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>22</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -396,8 +517,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>3</GroupNumber>
-      <FileNumber>17</FileNumber>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>23</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -408,8 +529,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>3</GroupNumber>
-      <FileNumber>18</FileNumber>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>24</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -420,8 +541,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>3</GroupNumber>
-      <FileNumber>19</FileNumber>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>25</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -432,8 +553,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>3</GroupNumber>
-      <FileNumber>20</FileNumber>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>26</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -444,8 +565,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>3</GroupNumber>
-      <FileNumber>21</FileNumber>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>27</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -456,8 +577,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>3</GroupNumber>
-      <FileNumber>22</FileNumber>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>28</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -468,8 +589,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>3</GroupNumber>
-      <FileNumber>23</FileNumber>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>29</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -480,8 +601,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>3</GroupNumber>
-      <FileNumber>24</FileNumber>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>30</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -492,8 +613,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>3</GroupNumber>
-      <FileNumber>25</FileNumber>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>31</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -504,8 +625,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>3</GroupNumber>
-      <FileNumber>26</FileNumber>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>32</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -516,8 +637,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>3</GroupNumber>
-      <FileNumber>27</FileNumber>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>33</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -528,8 +649,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>3</GroupNumber>
-      <FileNumber>28</FileNumber>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>34</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -539,75 +660,63 @@
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
-  </Group>
-
-  <Group>
-    <GroupName>Drivers/CMSIS</GroupName>
-    <tvExp>1</tvExp>
-    <tvExpOptDlg>0</tvExpOptDlg>
-    <cbSel>0</cbSel>
-    <RteFlg>0</RteFlg>
     <File>
-      <GroupNumber>4</GroupNumber>
-      <FileNumber>29</FileNumber>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>35</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
-      <PathWithFileName>../Src/system_stm32f4xx.c</PathWithFileName>
-      <FilenameWithoutPath>system_stm32f4xx.c</FilenameWithoutPath>
+      <PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c</PathWithFileName>
+      <FilenameWithoutPath>stm32f4xx_hal_can.c</FilenameWithoutPath>
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
-  </Group>
-
-  <Group>
-    <GroupName>BSP</GroupName>
-    <tvExp>1</tvExp>
-    <tvExpOptDlg>0</tvExpOptDlg>
-    <cbSel>0</cbSel>
-    <RteFlg>0</RteFlg>
     <File>
-      <GroupNumber>5</GroupNumber>
-      <FileNumber>30</FileNumber>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>36</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
-      <PathWithFileName>..\BSP\Driver\bsp_usart.c</PathWithFileName>
-      <FilenameWithoutPath>bsp_usart.c</FilenameWithoutPath>
+      <PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c</PathWithFileName>
+      <FilenameWithoutPath>stm32f4xx_hal_spi.c</FilenameWithoutPath>
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>5</GroupNumber>
-      <FileNumber>31</FileNumber>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>37</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
-      <PathWithFileName>..\BSP\Driver\bsp_oled.c</PathWithFileName>
-      <FilenameWithoutPath>bsp_oled.c</FilenameWithoutPath>
+      <PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c</PathWithFileName>
+      <FilenameWithoutPath>stm32f4xx_hal_tim.c</FilenameWithoutPath>
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
-  </Group>
-
-  <Group>
-    <GroupName>Device</GroupName>
-    <tvExp>1</tvExp>
-    <tvExpOptDlg>0</tvExpOptDlg>
-    <cbSel>0</cbSel>
-    <RteFlg>0</RteFlg>
     <File>
-      <GroupNumber>6</GroupNumber>
-      <FileNumber>32</FileNumber>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>38</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
-      <PathWithFileName>..\BSP\Device\oled.c</PathWithFileName>
-      <FilenameWithoutPath>oled.c</FilenameWithoutPath>
+      <PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c</PathWithFileName>
+      <FilenameWithoutPath>stm32f4xx_hal_tim_ex.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>39</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c</PathWithFileName>
+      <FilenameWithoutPath>stm32f4xx_hal_uart.c</FilenameWithoutPath>
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
diff --git a/Standard_robot/MDK-ARM/Standard_robot.uvprojx b/Standard_robot/MDK-ARM/Standard_robot.uvprojx
index cf9749dd4789e689560e2398dc1314ddee2a0193..508c54ea5c67e1316d0f5b6aa10bd44d1b3f12e8 100644
--- a/Standard_robot/MDK-ARM/Standard_robot.uvprojx
+++ b/Standard_robot/MDK-ARM/Standard_robot.uvprojx
@@ -338,7 +338,7 @@
               <MiscControls></MiscControls>
               <Define>USE_HAL_DRIVER,STM32F427xx,USE_HAL_DRIVER,STM32F427xx</Define>
               <Undefine></Undefine>
-              <IncludePath>../Inc;../Drivers/STM32F4xx_HAL_Driver/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F4xx/Include;../Drivers/CMSIS/Include;../BSP/Algorithm;../BSP/Controller;../BSP/Device;../BSP/Driver;../BSP/Modules</IncludePath>
+              <IncludePath>../Inc;    ../Drivers/STM32F4xx_HAL_Driver/Inc;    ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy;    ../Drivers/CMSIS/Device/ST/STM32F4xx/Include;    ../Drivers/CMSIS/Include;    ../BSP/Algorithm;    ../BSP/Controller;    ../BSP/Device;    ../BSP/Driver;    ../BSP/Modules</IncludePath>
             </VariousControls>
           </Cads>
           <Aads>
@@ -407,6 +407,11 @@
               <FileType>1</FileType>
               <FilePath>../Src/adc.c</FilePath>
             </File>
+            <File>
+              <FileName>can.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../Src/can.c</FilePath>
+            </File>
             <File>
               <FileName>dma.c</FileName>
               <FileType>1</FileType>
@@ -417,6 +422,11 @@
               <FileType>1</FileType>
               <FilePath>../Src/spi.c</FilePath>
             </File>
+            <File>
+              <FileName>tim.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../Src/tim.c</FilePath>
+            </File>
             <File>
               <FileName>usart.c</FileName>
               <FileType>1</FileType>
@@ -434,106 +444,6 @@
             </File>
           </Files>
         </Group>
-        <Group>
-          <GroupName>Drivers/STM32F4xx_HAL_Driver</GroupName>
-          <Files>
-            <File>
-              <FileName>stm32f4xx_hal_adc.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c</FilePath>
-            </File>
-            <File>
-              <FileName>stm32f4xx_hal_adc_ex.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c</FilePath>
-            </File>
-            <File>
-              <FileName>stm32f4xx_hal_spi.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c</FilePath>
-            </File>
-            <File>
-              <FileName>stm32f4xx_hal_tim.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c</FilePath>
-            </File>
-            <File>
-              <FileName>stm32f4xx_hal_tim_ex.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c</FilePath>
-            </File>
-            <File>
-              <FileName>stm32f4xx_hal_uart.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c</FilePath>
-            </File>
-            <File>
-              <FileName>stm32f4xx_hal_rcc.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c</FilePath>
-            </File>
-            <File>
-              <FileName>stm32f4xx_hal_rcc_ex.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c</FilePath>
-            </File>
-            <File>
-              <FileName>stm32f4xx_hal_flash.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c</FilePath>
-            </File>
-            <File>
-              <FileName>stm32f4xx_hal_flash_ex.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c</FilePath>
-            </File>
-            <File>
-              <FileName>stm32f4xx_hal_flash_ramfunc.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c</FilePath>
-            </File>
-            <File>
-              <FileName>stm32f4xx_hal_gpio.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c</FilePath>
-            </File>
-            <File>
-              <FileName>stm32f4xx_hal_dma_ex.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c</FilePath>
-            </File>
-            <File>
-              <FileName>stm32f4xx_hal_dma.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c</FilePath>
-            </File>
-            <File>
-              <FileName>stm32f4xx_hal_pwr.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c</FilePath>
-            </File>
-            <File>
-              <FileName>stm32f4xx_hal_pwr_ex.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c</FilePath>
-            </File>
-            <File>
-              <FileName>stm32f4xx_hal_cortex.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c</FilePath>
-            </File>
-            <File>
-              <FileName>stm32f4xx_hal.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c</FilePath>
-            </File>
-            <File>
-              <FileName>stm32f4xx_hal_exti.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c</FilePath>
-            </File>
-          </Files>
-        </Group>
         <Group>
           <GroupName>Drivers/CMSIS</GroupName>
           <Files>
@@ -557,6 +467,16 @@
               <FileType>1</FileType>
               <FilePath>..\BSP\Driver\bsp_oled.c</FilePath>
             </File>
+            <File>
+              <FileName>bsp_can.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\BSP\Driver\bsp_can.c</FilePath>
+            </File>
+            <File>
+              <FileName>bsp_key.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\BSP\Driver\bsp_key.c</FilePath>
+            </File>
           </Files>
         </Group>
         <Group>
@@ -636,6 +556,126 @@
               <FileType>1</FileType>
               <FilePath>..\BSP\Device\oled.c</FilePath>
             </File>
+            <File>
+              <FileName>motor.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\BSP\Device\motor.c</FilePath>
+            </File>
+          </Files>
+        </Group>
+        <Group>
+          <GroupName>Algorithm</GroupName>
+          <Files>
+            <File>
+              <FileName>pid.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\BSP\Algorithm\pid.c</FilePath>
+            </File>
+          </Files>
+        </Group>
+        <Group>
+          <GroupName>Drivers/STM32F4xx_HAL_Driver</GroupName>
+          <Files>
+            <File>
+              <FileName>stm32f4xx_hal_adc.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c</FilePath>
+            </File>
+            <File>
+              <FileName>stm32f4xx_hal_adc_ex.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c</FilePath>
+            </File>
+            <File>
+              <FileName>stm32f4xx_hal_rcc.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c</FilePath>
+            </File>
+            <File>
+              <FileName>stm32f4xx_hal_rcc_ex.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c</FilePath>
+            </File>
+            <File>
+              <FileName>stm32f4xx_hal_flash.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c</FilePath>
+            </File>
+            <File>
+              <FileName>stm32f4xx_hal_flash_ex.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c</FilePath>
+            </File>
+            <File>
+              <FileName>stm32f4xx_hal_flash_ramfunc.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c</FilePath>
+            </File>
+            <File>
+              <FileName>stm32f4xx_hal_gpio.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c</FilePath>
+            </File>
+            <File>
+              <FileName>stm32f4xx_hal_dma_ex.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c</FilePath>
+            </File>
+            <File>
+              <FileName>stm32f4xx_hal_dma.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c</FilePath>
+            </File>
+            <File>
+              <FileName>stm32f4xx_hal_pwr.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c</FilePath>
+            </File>
+            <File>
+              <FileName>stm32f4xx_hal_pwr_ex.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c</FilePath>
+            </File>
+            <File>
+              <FileName>stm32f4xx_hal_cortex.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c</FilePath>
+            </File>
+            <File>
+              <FileName>stm32f4xx_hal.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c</FilePath>
+            </File>
+            <File>
+              <FileName>stm32f4xx_hal_exti.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c</FilePath>
+            </File>
+            <File>
+              <FileName>stm32f4xx_hal_can.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c</FilePath>
+            </File>
+            <File>
+              <FileName>stm32f4xx_hal_spi.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c</FilePath>
+            </File>
+            <File>
+              <FileName>stm32f4xx_hal_tim.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c</FilePath>
+            </File>
+            <File>
+              <FileName>stm32f4xx_hal_tim_ex.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c</FilePath>
+            </File>
+            <File>
+              <FileName>stm32f4xx_hal_uart.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c</FilePath>
+            </File>
           </Files>
         </Group>
         <Group>
diff --git a/Standard_robot/MDK-ARM/Standard_robot/Standard_robot.hex b/Standard_robot/MDK-ARM/Standard_robot/Standard_robot.hex
index 3571b7f566269b986f71b42f41114c6073faa3c7..2fa347e3265a1fbbf38f7564396e8b6910e58548 100644
--- a/Standard_robot/MDK-ARM/Standard_robot/Standard_robot.hex
+++ b/Standard_robot/MDK-ARM/Standard_robot/Standard_robot.hex
@@ -1,18 +1,18 @@
 :020000040800F2
-:1000000050090020C1010008471E0008891C000893
-:10001000451E0008710800083D220008000000008D
-:10002000000000000000000000000000391F000870
-:10003000FD08000800000000491E00083B1F0008E2
+:10000000900A0020C1010008BB280008F92400085C
+:10001000B928000871080008FD2E00080000000043
+:10002000000000000000000000000000AD290008F2
+:100030001509000800000000BD280008AF290008CD
 :10004000DB010008DB010008DB010008DB01000820
 :10005000DB010008DB010008DB010008DB01000810
 :10006000DB010008DB010008DB010008DB01000800
 :10007000DB010008DB010008DB010008DB010008F0
-:10008000DB010008DB010008DB010008DB010008E0
-:10009000DB010008DB010008DB010008DB010008D0
+:10008000DB010008DB010008DB0100088108000833
+:1000900075080008DB010008DB010008DB0100082F
 :1000A000DB010008DB010008DB010008DB010008C0
 :1000B000DB010008DB010008DB010008DB010008B0
 :1000C000DB010008DB010008DB010008DB010008A0
-:1000D000DB01000831220008DB010008DB01000819
+:1000D000DB010008F12E0008DB010008DB0100084D
 :1000E000DB010008DB010008DB010008DB01000880
 :1000F000DB010008DB010008DB010008DB01000870
 :10010000DB010008DB010008DB010008DB0100085F
@@ -20,15 +20,15 @@
 :10012000DB010008DB010008DB010008DB0100083F
 :10013000DB010008DB010008DB010008DB0100082F
 :10014000DB010008DB010008DB010008DB0100081F
-:10015000DB010008DB01000875080008DB0100086E
+:10015000DB010008DB0100088D080008DB01000856
 :10016000DB010008DB010008DB010008DB010008FF
 :10017000DB010008DB010008DB01000800000000D3
 :10018000DB010008DB010008DB010008DB010008DF
 :10019000DB010008DB010008DB010008DB010008CF
 :1001A0000000000000000000DB010008DFF80CD0B8
-:1001B00000F048FA00480047612B00085009002071
+:1001B00000F048FA004800476D390008900A002016
 :1001C0000648804706480047FEE7FEE7FEE7FEE7F1
-:1001D000FEE7FEE7FEE7FEE7FEE7FEE7C51F0008D5
+:1001D000FEE7FEE7FEE7FEE7FEE7FEE7392A000856
 :1001E000AD0100082DE9F05F0546002092469B46D0
 :1001F00088460646814640241BE02846414647463D
 :10020000224600F057F853465A46C01A914110D37F
@@ -101,7 +101,7 @@
 :100630001C464FF00043524263EB0403994208BF4B
 :10064000904230BD064C074D06E0E06840F00103E3
 :1006500094E8070098471034AC42F6D3FFF7AAFDA0
-:100660001439000834390008202A06DBCB17203A59
+:100660005447000874470008202A06DBCB17203ABD
 :1006700041FA02F043EAE07306E041FA02F3D040A7
 :10068000C2F12002914008431946704710B5141E6C
 :1006900073F1000408DA401C41F1000192185B413B
@@ -134,787 +134,1015 @@
 :100840008A6890F8303042EA43228A6001688A68F8
 :1008500022F480628A6001688A68406942EA8020E6
 :10086000886010BD0023014000E0FFFF0000F0FFA2
-:10087000FEE70000014800F02DBA0000F000002063
-:1008800001681823CAB2103AB2FBF3F2054B6FF3BA
-:100890000901032A9B5CC36500D9091D81650846CF
-:1008A000704700008030000810B5014600208B69B9
-:1008B0008A6A4FF0C07453B1B3F5005F15D072B1BE
-:1008C000012A0CD0022A0AD0032A09D104E01AB165
-:1008D000012A06D0022A03D1C96AC90100D5012024
-:1008E00010BDC96AA142FAD010BD002AF7D0012A72
-:1008F000F2D0022AF3D0032AF3D010BD704770471C
-:1009000078B50024009490F83C20012A19D00122E7
-:1009100080F83C200A6807230568092A13D9EE6885
-:100920000A3A02EB420293409E43EE600B788A68DB
-:100930000A3B03EB43039A400368DD682A43DA600D
-:1009400010E0022078BD2E6902EB420293409E43E4
-:100950002E610B788A6803EB43039A4003681D6994
-:100960002A431A614A681F23072A13D205686E6B4F
-:10097000521E02EB820293409E436E630A8893B23A
-:100980000A79521E02EB820293400268556B2B4398
-:10099000536327E005680D2A12D22E6BD21F02EB9B
-:1009A000820293409E432E630B790A88DB1F92B22A
-:1009B00003EB83039A4003681D6B2A431A6311E01B
-:1009C000EE6A0D3A02EB820293409E43EE620B798F
-:1009D0000A880D3B92B203EB83039A400368DD6AF9
-:1009E0002A43DA621B4B0568194A9D420AD10D68F9
-:1009F000122D07D1556825F400055560556845F45A
-:100A00008005556005689D421DD1134D0B68AB42B2
-:100A100001D0112B17D1536823F48003536053681E
-:100A200043F4000353600968A9420CD10B490C4AF6
-:100A30000968B1FBF2F101EB8101490000E0491EB8
-:100A400000910029FBD180F83C40002078BD0000D7
-:100A50000023014000200140120000100C00002083
-:100A600040420F000068C06C704770B504004FF042
-:100A7000000503D0206C002610B107E0012070BDF6
-:100A8000204600F01DF8666484F83C60206CC006C7
-:100A900010D4206C20F4885040F0020020642046DE
-:100AA000FFF752FE6664206C20F0020040F0010067
-:100AB000206400E0012584F83C60284670BD0000F9
-:100AC00010B586B0044614216846FFF7C3FB1149F0
-:100AD000206888421CD110480021026842F48072CC
-:100AE0000260006800F4807005900B4814380268BA
-:100AF00042F001020260006800F001000590402011
-:100B000000900320CDE901016946044800F02EFA67
-:100B100006B010BD002001404438024000000240F1
-:100B20002DE9F041044600680D4681684FF000074A
-:100B300049050BD58068C00508D5206C40F0200021
-:100B4000206484F83C700120BDE8F08100F0FEFADA
-:100B500006460FE0681C0DD025B100F0F7FA801BA7
-:100B6000A84207D9206C40F00400206484F83C704F
-:100B70000320E9E7206800688007EBD521686FF063
-:100B800012000860206C40F40070206420688168C6
-:100B900011F0405F13D1217E89B9C16A11F4700F41
-:100BA00002D0806840050AD4206C20F48070206454
-:100BB000206CC00403D4206C40F0010020640020AD
-:100BC000C2E7000018B50021009190F83C20012AEE
-:100BD00007D0012280F83C2002689368DB0702D02E
-:100BE00011E0022018BD936843F0010393602A4A84
-:100BF0002A4B1268B2FBF3F202EB420200E0521EF3
-:100C00000092002AFBD102689368DB0741D0036C95
-:100C100040F20164A34343F48073036453685B05AB
-:100C200005D5036C23F4005343F480530364036C31
-:100C3000DB0404D5436C23F00603436400E0416405
-:100C400080F83C1016496FF0220313604968006871
-:100C5000CA06144906D088421BD1816811F0405F52
-:100C600013D016E08842F8D00F4A904203D1D1F851
-:100C70000423D206F1D00D4A90420AD1D1F80413D0
-:100C800001F01F011029E8D303E0816841F08041A1
-:100C90008160002018BD00000C00002040420F00C1
-:100CA00000230140002001400021014000220140BA
-:100CB00090F83510022903D080214165012070474A
-:100CC000052180F835100068016821F001010160FC
-:100CD000002070472DE9F84304464FF00009CDF895
-:100CE000009063484FF41651A56D0068B0FBF1F712
-:100CF0002E6894F85C10082000FA01F131420FD000
-:100D000021680A6852070BD50A6822F004020A60BB
-:100D100094F85C108840A860606D40F00100606548
-:100D200094F85C104FF0010808FA01F0304208D046
-:100D300021684969090604D5A860606D40F0020089
-:100D4000606594F85C1004208840304208D0216827
-:100D50000968890704D5A860606D40F004006065EB
-:100D600094F85C1010208840304218D0216809683F
-:100D7000090714D5A86020680168490304D50068F4
-:100D8000000308D5A16C07E00168C90503D4016818
-:100D900021F008010160216C09B12046884794F8D0
-:100DA0005C1020208840304231D021680968C90693
-:100DB0002DD5A86094F8350005282068016806D074
-:100DC000490347D5006800031DD4616C1CE021F085
-:100DD000160101602068416921F080014161206CA9
-:100DE00008B9A06C20B12068016821F008010160F9
-:100DF00094F85C103F208840A86084F8349084F810
-:100E00003580216D1FE0E16B09B120468847606D98
-:100E100000282BD0606DC00714D0052084F8350061
-:100E20002068016821F0010101600098401C0090D9
-:100E3000B84203D820680068C007F6D184F834901F
-:100E400084F83580E16C002910D001B02046BDE85F
-:100E5000F04308470168C905D5D4016821F01001A5
-:100E6000016084F8349084F83580CCE7BDE8F883DD
-:100E70000C0000202DE9F041044600F067F9064619
-:100E80005CB1002584F83450022084F835002068D5
-:100E9000016821F0010101600DE00120BDE8F08151
-:100EA00000F054F9801B052805D920206065032037
-:100EB00084F83500F2E720680068C007F0D12268A6
-:100EC000116820480140D4E901031843D4E90336EE
-:100ED0003343184363691843A3691843E36918430C
-:100EE000236A18430843616A042903D1D4E90B1328
-:100EF00019430843106020684069666A20F00701C2
-:100F000030460E43012704280CD1A06A0643E06A4C
-:100F100040B12046FFF7C8FC20B14020606584F84E
-:100F20003570BAE7206846612046FFF7A9FC94F8BF
-:100F30005C203F2191408160656584F83570002018
-:100F4000ACE700003F8010F070B5044600F0FEF8FA
-:100F50000546601C02D004480078044400F0F6F80E
-:100F6000401BA042FAD370BD000000202DE9F84FCD
-:100F700000224FF0010803254FF00F0E0B6808FA0E
-:100F800002F42340A3426ED14E68012E05D0022EFA
-:100F900003D0112E01D0122E12D186684FEA420CD6
-:100FA00005FA0CF7BE43CF6807FA0CF737438760A2
-:100FB0004668A6430C79C4F300149440344344605B
-:100FC000C668570005FA07FC8C6826EA0C06BC4088
-:100FD0003443C4604C68022C01D0122C13D1D408C5
-:100FE00000EB8404A346D4F8209054074FEAD46A57
-:100FF0000EFA0AF629EA06090E6906FA0AF646EA20
-:101000000906CBF8206004680E7924EA0C0406F087
-:101010000306BE40264306604C68E4006FD53B4C97
-:10102000266846F480462660246822F0030604F40D
-:1010300080440094364C3444A446D4F808489607BB
-:10104000360F0EFA06F7BC43324FB84201D10027E3
-:101050002EE0314FB84201D1012729E02F4FB8428D
-:1010600002D1022724E04AE02D4FB84201D10327E4
-:101070001EE02C4FB84201D1042719E02A4FB84294
-:1010800001D1052714E0294FB84201D106270FE00E
-:10109000274FB84201D107270AE0264FB84201D1B5
-:1010A000082705E0244FB84201D1092700E00A27AC
-:1010B000B7402743CCF80878204E34684F689C43EB
-:1010C000FF0300D51C4334601C4E361D34684F6846
-:1010D0009C43BF0300D51C433460184E0836346867
-:1010E0004F689C43FF0200D51C433460134E0C36FE
-:1010F00034684F689C43BF0200D51C433460521CC7
-:10110000102AFFF43BAFBDE8F88F000044380240DE
-:10111000003001400000024000040240000802408C
-:10112000000C02400010024000140240001802406F
-:10113000001C02400020024000240240003C01400C
-:101140000AB1816170470904FBE70000014880682B
-:1011500070470000000000200248816802781144B6
-:1011600081607047000000200B4810B5016841F411
-:1011700000710160016841F480610160016841F41F
-:1011800080710160032000F06FF8002000F006F885
-:1011900000F024F8002010BD003C024070B50D4D59
-:1011A00004464FF47A712878B1FBF0F00A490968D7
-:1011B000B1FBF0F000F03AFC48B9102C07D2002245
-:1011C0002146501E00F030F800206C6070BD0120F8
-:1011D00070BD0000000000200C0000200A4808B587
-:1011E000016841F480410160006800F48040009093
-:1011F0000548001F016841F080510160006800F05F
-:101200008050009008BD000044380240002809DBEF
-:1012100000F01F02012191404009800000F1E02010
-:10122000C0F8001170470000F0B40E4B1B680C466C
-:10123000C3F30223C3F10705042D00D90425191DAA
-:10124000072901D2002300E0DB1E012606FA05F182
-:10125000491E214099409E40761E16403143F0BC05
-:1012600001F000B80CED00E0064900F00702086844
-:101270004FF6FF03184040EA0220034A104308607B
-:10128000704700000CED00E00000FA052DE9F04782
-:101290000E46050065D0DFF81481D8F80000F7B2DB
-:1012A00000F00F00B04207D288F80070D8F80000B4
-:1012B00000F00F00B04254D128683D4C810712D590
-:1012C000400703D5206840F4E050206028780007EC
-:1012D00003D5206840F4604020602068A96820F0B1
-:1012E000F000084320602878C0072DD03049686896
-:1012F0000839012812D0022813D0032811D0096818
-:10130000890700292DDA216821F0030101432160BA
-:10131000FFF71CFF814641F2883A0EE00968890315
-:10132000EFE709688901ECE7FFF710FFA0EB09017F
-:10133000514502D90320BDE8F0872068696800F0B4
-:101340000C00B0EB810FEFD1D8F80010404601F04F
-:101350000F01B14207D90770006800F00F00B042DA
-:1013600001D00120E7E72878400705D52068E96823
-:1013700020F4E050084320602878000706D5206854
-:10138000296920F4604040EAC100206000F038F88C
-:101390002168084AC1F30311515CC840064908603E
-:1013A00006480068FFF7FAFE0020C4E7003C024050
-:1013B00008380240883000080C000020040000209B
-:1013C0000448054900680968044AC1F38221515C58
-:1013D000C84070470C0000200838024098300008D0
-:1013E0000448054900680968044AC1F34231515C68
-:1013F000C84070470C0000200838024098300008B0
-:10140000154810B5006810F00C02144813D01449A8
-:10141000042A0FD0082A0ED10F4C241F22682368FB
-:1014200002F03F025B0207D52068C0F38810A0FBE2
-:10143000010106E0084610BD2168C1F38811A1FB37
-:1014400000010023FEF7CEFE2168C1F30141491CD3
-:101450004900B0FBF1F010BD083802400024F40050
-:10146000001BB7002DE9F84F040076D02078DFF894
-:1014700038A3CE4DC00749D0DAF800105046C1F36A
-:101480008101012908D00068C0F3810002280AD137
-:10149000281D0068400206D52868800336D560689C
-:1014A0000028E2D032E06068B0F5803F10D0B0F59F
-:1014B000A02F286810D020F480302860286820F4FD
-:1014C000802028606068A0B1FFF740FE06460CE06F
-:1014D000286840F48030F4E740F480202860F7E783
-:1014E000FFF734FE801B642873D828688003F7D583
-:1014F0000CE0FFF72BFE064605E000BFFFF726FED7
-:10150000801B6428F0D828688003F7D42078DFF89F
-:10151000A08280074FF000093ED5DAF8001050464F
-:1015200011F00C0F09D00068C0F3810002280BD124
-:101530009D48001F0068400206D42868800715D522
-:10154000E068012809D111E0E068B8B10120C8F8CD
-:101550000000FFF7FBFD064605E020E1FFF7F6FD82
-:10156000801B0228C0D828688007F7D52868216921
-:1015700020F0F80040EAC10028600DE0C8F80090B3
-:10158000FFF7E4FD064604E0FFF7E0FD801B0228BC
-:101590001FD828688007F7D42078000722D5824E0C
-:1015A000844861696C3671B101210160FFF7CEFD9D
-:1015B000074604E0FFF7CAFDC01B022809D83068BF
-:1015C0008007F7D50EE0C0F80090FFF7BFFD074693
-:1015D00005E082E0FFF7BAFDC01B02287DD8306825
-:1015E0008007F7D42078400768D5DFF8BCB1002722
-:1015F0000BF1380BDBF80000C0000BD4DBF8001057
-:1016000041F08051CBF80010DBF80000012700F01A
-:1016100080500090684E3068C00510D4306840F4A7
-:1016200080703060FFF792FD009005E0FFF78EFDBF
-:101630000099401A022850D83068C005F6D55A4E95
-:10164000A068683601280FD00528306810D020F037
-:1016500001003060306820F004003060A068B8B14C
-:10166000FFF774FD00900FE0306840F00100F4E7F0
-:1016700040F004003060F7E7FFF768FD0099411A79
-:1016800041F28830814266D830688007F4D50EE098
-:10169000FFF75CFD009007E0FFF758FD0099411A45
-:1016A00041F28830814256D830688007F4D42FB197
-:1016B000DBF8001021F08051CBF80010A069D0B306
-:1016C000DAF800205146C2F38102022A4AD00228E9
-:1016D000484607D0C8F8600000E03CE0FFF736FD60
-:1016E00004463BE04746C8F86000FFF72FFD06467A
-:1016F00005E000BFFFF72AFD801B02282BD82868D1
-:101700008001F7D4D4E907010843A16A2B4A4908AC
-:1017100002EB0141626A41EA8211084394F82C10FD
-:1017200040EA01612048001F016001203866FFF790
-:101730000DFD044605E034E0FFF708FD001B02281C
-:1017400009D828688001F7D52BE000BFFFF7FEFC21
-:10175000001B022802D90320BDE8F88F2868800109
-:10176000F4D41EE00128F7D00868E26900F4800193
-:10177000914214D1226A00F03F0191420FD147F605
-:10178000C071626A0140914209D1A26A00F44031FD
-:10179000914204D1E16A00F07060884201D00120DA
-:1017A000DAE70020D8E7000008380240003802409D
-:1017B00000004742800E4742007000400000FFFFDB
-:1017C00070B5040005D00025A56294F8510010B151
-:1017D00006E0012070BD84F85050204600F030F83B
-:1017E000022084F851002068016821F04001016066
-:1017F000D4E901010843D4E90312114308436169A4
-:101800000843218B01F400710843E1690843216A10
-:101810000843A16A084321680860A069042101EA1D
-:101820001040616A0843216848602068C16921F45A
-:101830000061C1616565012084F85100002070BD20
-:10184000F0B587B0044614216846FEF703FD1C4935
-:101850002068884232D11B480024016841F480513D
-:101860000160006800F48050059016481438016843
-:1018700041F002010160016801F002010591016877
-:1018800041F0010101600068022500F001000590AF
-:101890001820CDE9000502AA0326052782E8D0001A
-:1018A00069460948FFF762FB8020CDE9000502AADE
-:1018B000694682E8D0000548FFF758FB07B0F0BD45
-:1018C0000030014044380240000402400000024061
-:1018D0002DE9F84F044690F8500000271D461646A3
-:1018E000894601280DD04FF0010B84F850B0FFF766
-:1018F0002DFC804694F85100BA46012804D00227F6
-:101900008EE00220BDE8F88FB9F1000F7DD0002EE7
-:101910007BD0032084F85100C4F854A0C4F8309060
-:10192000A686E686C4F838A0A4F83CA0A4F83EA099
-:10193000C4F844A0C4F840A0A068B0F5004F04D19A
-:101940002068016841F4804101602068016849060F
-:1019500003D4016841F040010160E068B0F5006F18
-:10196000606803D030B3012E24D040E008B1012ECE
-:101970001CD1206B21680088C86006E0206881685F
-:10198000890709D5216B0988C160206B801C206301
-:10199000E08E401EE08609E0FFF7D8FBA0EB0800D0
-:1019A000A84202D3681C01D031E07DB3E08E00284C
-:1019B000E4D11FE0206B21680078087306E02068FE
-:1019C0008168890709D5216B09780173206B401C58
-:1019D0002063E08E401EE08609E0FFF7B7FBA0EB36
-:1019E0000800A84202D3681C01D010E075B1E08E57
-:1019F0000028E4D142462946204600F027FA08B1E3
-:101A000020206065A06820B107E008E0FFE7032719
-:101A100006E02068C16880680090606D00B1012711
-:101A200084F851B084F850A038466BE710B5401EDA
-:101A3000B0F1807F01D3012010BD4FF0E024606140
-:101A40000F21601700F00EFC0020A061072020612C
-:101A5000002010BD7047000070B502680446106891
-:101A6000D168536910F00F0F52D003F0010501F453
-:101A700090762E435FD0C20705D0CA0503D5E26B2E
-:101A800042F00102E263420705D5DA0703D0E26BB8
-:101A900042F00202E263820705D5DA0703D0E26B67
-:101AA00042F00402E263020707D501F020022A4354
-:101AB00003D0E26B42F00802E263E26B002A33D00B
-:101AC000800604D5880602D5204600F09FFA2068DB
-:101AD0004069E16BC0F38010090700D428B32046A9
-:101AE00000F086FA2068416949061AD5416921F05B
-:101AF00040014161606BA0B11B490165606BFFF75C
-:101B0000D7F8002810D0606B016DBDE87040084721
-:101B1000830610D58B060ED52046BDE8704000F038
-:101B200075BA2046FFF796FF70BD2046FFF792FF7B
-:101B30000020E06370BD030606D50B0604D52046E1
-:101B4000BDE8704000F042BB4006F3D54806F1D531
-:101B5000D168204621F04001D160202184F839105D
-:101B600000F091F870BD0000E11F000870B504009E
-:101B700004D094F83900002510B106E0012070BDB2
-:101B800084F83850204600F023F8242084F83900E7
-:101B90002068C16821F40051C160204600F082FA3B
-:101BA0002068016921F4904101612068416921F0B8
-:101BB0002A0141612068C16841F40051C160E563B8
-:101BC000202084F8390084F83A00002070BD00001D
-:101BD00070B586B0064614216846FEF73BFB2449E3
-:101BE0003068884241D123480025016841F0100146
-:101BF0000160006800F0100005901E48143801686C
-:101C000041F0020101600068694600F002000590A1
-:101C1000C020009002200190012002900320039038
-:101C2000072004901448FFF7A1F9154C13482060D1
-:101C30004FF0006060604020C4E902050001C4E983
-:101C40000405A561E561256220466562FFF712F98A
-:101C500008B1FEF754FE3463002211462520A66326
-:101C6000FFF7E2FA2520FFF7D1FA06B070BD0000B9
-:101C7000001001404438024000040240B8640240B1
-:101C8000F000002070477047FEE700007FB5002499
-:101C900015480094019402941249039401604FF492
-:101CA0008031C0E901140461047680F820400F49B6
-:101CB000C0E90A140125C561C46080F8304045615F
-:101CC000FEF7D3FE08B1FEF71AFE0620CDE90005A7
-:101CD000694602940448FEF713FE002801D0FEF77F
-:101CE0000EFE7FBD00200140100000200100000F0B
-:101CF000094808B5016841F48001016000680022CC
-:101D000000F48000009011464620FFF78DFABDE8F0
-:101D100008404620FFF77ABA303802402DE9F041FA
-:101D200086B014216846FEF795FA2348002401681E
-:101D300041F002010160016801F0020105910168B2
-:101D400041F001010160016801F0010105910168A4
-:101D500041F080010160016801F080010591016896
-:101D600041F0400101600068144F00F040004FF462
-:101D7000C0650590002229463846FFF7E1F9DFF8F3
-:101D80004080BE15002231464046FFF7D9F9009544
-:101D90000125CDE90154694638460394FFF7E6F87A
-:101DA0000096CDE90154694640460394FFF7DEF8FA
-:101DB00006B0BDE8F0810000303802400004024067
-:101DC00000180240104810B50E4901604FF48271AE
-:101DD000416000218160C1604FF400720161C0E97F
-:101DE00005122822C0E90721416281620A21C162ED
-:101DF000FFF7E6FC002803D0BDE81040FEF77FBDEA
-:101E000010BD000000300140580000200C4810B503
-:101E10000A4901604FF4E1314160002181600C22E8
-:101E2000C160C0E904128161C161FFF79FFE002813
-:101E300003D0BDE81040FEF762BD10BD00100140A8
-:101E4000B0000020FEE770477047000038B5044638
-:101E50001248134B0068B0FBF3F04FF47A73584309
-:101E600000906068B0F5827F0DD10B460092002291
-:101E70008021204600F016F870B1606D40F020001F
-:101E80006065032038BD009830B1401E0090206886
-:101E90008068C0430006F6D5002038BD0C00002045
-:101EA00000366E012DE9F0411D4617460E460446E8
-:101EB000DDF8188008E0681C06D0FFF747F9A0EBB2
-:101EC0000800A8420BD255B12068806836EA0000AD
-:101ED00030D00020B842EED10020BDE8F08120686B
-:101EE000416821F0E00141606068B0F5827F0BD16C
-:101EF000A068B0F5004F02D0B0F5806F04D1206823
-:101F0000016821F040010160A06AB0F5005F09D1CD
-:101F10002068016821F4005101602068016841F4E3
-:101F200000510160012084F85100002084F8500025
-:101F30000320D2E70120CDE77047FFF70DB900007D
-:101F400030B593B030216846FEF784F914210CA80F
-:101F5000FEF780F919480025016841F080510160C1
-:101F6000006800F0805011901548016841F440412C
-:101F700001600068022400F44040119001200090AC
-:101F8000000401908001CDE9064006200890A820B9
-:101F9000CDE9090404200B906846FFF763FA0CA909
-:101FA0000F2081E831004FF4A0500F90E002109014
-:101FB00005210CA8FFF76AF913B030BD4038024084
-:101FC000007000400548016841F470010160034958
-:101FD0004FF00060803908607047000088ED00E035
-:101FE00010B5806B0021C185C184FFF733FD10BDA2
-:101FF0000168CA6822F49072CA6001684A6922F0D6
-:1020000001024A61202180F83A10704710B590F81B
-:102010003A10222901D0022010BD8168B1F5805FFD
-:1020200011D00169002901681FD0496801F07F03C0
-:10203000816A4A1C82620B70C18D491E0904090C19
-:10204000C18518D02BE00269816A002A02685268B3
-:1020500005D0D2B20A80816A491C8162ECE7C2F3E2
-:1020600008020A80816A891CF7E74A68816A4B1C6A
-:1020700083620A70E0E70168CA6822F02002CA6041
-:102080000168CA6822F48072CA6001684A6922F055
-:1020900001024A61202180F83A10FFF7F3FD002089
-:1020A00010BD00002DE9F041044600680169E268B6
-:1020B00021F44051114301612169A068E26908439C
-:1020C0006169114308432168CA6849F20C639A4365
-:1020D0000243CA6020684169A26921F4407111433A
-:1020E0004161E069192764253226B0F5004F354A71
-:1020F000354920684FF0000806D0884201D0904250
-:1021000036D1FFF76DF935E0884201D0904202D117
-:10211000FFF766F901E0FFF753F961684A18A0FB81
-:10212000070148EB0803FEF75DF80146B0FBF5F048
-:102130000201B1FBF5F06FF01803584301EB80008A
-:1021400006EBC000B0FBF5F000F0F80002EB400237
-:10215000B1FBF5F0584301EB800006EBC000B0FB8B
-:10216000F5F000F00700216810448860BDE8F081B8
-:10217000FFF726F961688B0F8A00A0FB0701FEF7C5
-:1021800031F80146B0FBF5F06FF01802504301EB57
-:10219000800006EB0010B0FBF5F000F0F002B1FBA0
-:1021A000F5F002EB0012B1FBF5F06FF018035843A5
-:1021B00001EB800006EB0010B0FBF5F000F00F0023
-:1021C000D1E70000001401400010014090F83910E0
-:1021D000212901D0022070478168B1F5805F016A32
-:1021E0000BD04A1C0262026809785160C18C491EFA
-:1021F0000904090CC1840ED017E009880268C1F3F4
-:102200000801516001690029016A02D0491C01627C
-:10221000ECE7891CFBE70168CA6822F08002CA600B
-:102220000068C16841F04001C160002070470000B3
-:102230000148FFF711BC0000B0000020FEE70000DD
-:1022400037B514460846064B6A46214600F0ECF8BE
-:1022500004466946002000F07EFC20463EBD00009A
-:10226000572B00080907090E002804DB00F1E020C5
-:1022700080F80014704700F00F0000F1E02080F8B3
-:10228000141D704702E008C8121F08C1002AFAD1C5
-:1022900070477047002001E001C1121F002AFBD1E6
-:1022A000704700002DE9FF5F82B00021DDE90430B6
-:1022B000020DDDF840B0034318D044F61050A2F2EE
-:1022C000FF3242431514119801281FD0A5EB0B00D3
-:1022D000401C5FEA000A4FF000064E4FDFF83891CD
-:1022E000B046504615D5CAF1000413E011980124F8
-:1022F0004AA3012801D16FEA0B010298119AC0E9A3
-:102300000031C0E9024206B0BDE8F09FCBF1000009
-:10231000DFE704460021404A491842EB0450CDE96A
-:10232000001012E0E00707D032463B4640464946DF
-:10233000FEF777F88046894632463B4610461946F6
-:10234000FEF76FF806460F466410002CEAD1DDE96F
-:102350000401DDE90023BAF1000F06DAFEF761F8A7
-:1023600042464B46FEF75DF805E0FEF7CCF84246E4
-:102370004B46FEF7C8F804460E460022284BFEF7EF
-:1023800049F903D84FF0FF30014607E00022254B02
-:1023900020463146FDF79EFFFEF724F9102409E0A0
-:1023A000002C0ADB0A220023FDF71CFF039B3032BE
-:1023B0001A55641E50EA0102F2D1641C039AC4F15A
-:1023C00011031444119A012A03D0012208430DD1AC
-:1023D0000AE0084304D000204FF0110B119072E77F
-:1023E000A3EB0B056D1E0DE05B4504DD4FF0000215
-:1023F00005F1010504E003DA4FF00002A5F1010543
-:10240000002AECD002981199C0E90231C0E90045D8
-:1024100079E70000000014400000F03F30000000A9
-:102420000000F0430000E03F2DE9FF4F95B09B46D0
-:102430008946064600250FE2252877D10024274645
-:10244000F84A0121059400E0044316F8013F203BBF
-:1024500001FA03F01042F7D130782A2811D06FF03A
-:102460002F033078A0F13002092A16D8059A44F0DB
-:10247000020402EB820203EB42021044761C059038
-:10248000EFE759F8042B0592002A03DA504244F48E
-:102490000054059044F00204761C30782E2816D1A2
-:1024A00016F8010F44F004042A280DD06FF02F0213
-:1024B0003078A0F13003092B09D807EB870302EB32
-:1024C0004303C718761CF3E759F8047B761C307871
-:1024D0006C280FD006DC4C2817D068280DD06A284D
-:1024E00014D104E0742810D07A280FD10DE044F400
-:1024F00000140AE044F4801401E044F440147278BB
-:10250000824202D104F58014761C761C307866284D
-:102510000BD013DC582877D009DC002875D045286B
-:10252000F6D04628F4D047281AD19DE118E0632858
-:1025300035D0642879D0652812D195E1702873D000
-:1025400008DC6728F1D069286FD06E280DD06F287D
-:1025500006D1B5E073282CD0752875D0782874D0B2
-:102560005A46179990476D1C75E1C4F30250022832
-:1025700009D003280DD0D9F8001004280DD00D6023
-:1025800009F1040967E1D9F80010EA17C1E900521E
-:10259000F6E7D9F800100D80F2E70D70F0E719F8B2
-:1025A000041B8DF8001000208DF80100EA46012080
-:1025B00003E059F804AB4FF0FF3061074FF0000122
-:1025C00002D40DE008F101018846B9420FDA8045D6
-:1025D000F8DB1AF808100029F4D108E008F101012D
-:1025E00088468142FADB1AF808100029F6D10598CE
-:1025F0005B46A0EB080721463846179A00F094FA8C
-:10260000284400EB080507E04DE029E10DE01AF849
-:10261000010B5A4617999047B8F10108F7D25B466B
-:1026200021463846179A13E142E00A220092C4F389
-:1026300002524FF0000A022A08D059F804CB032AAC
-:102640004FEAEC710AD00DE029E02AE009F1070118
-:1026500021F00702F2E802C1914609E00FFA8CFC72
-:102660004FEAEC71042A03D14FFA8CFC4FEAEC716B
-:10267000002907DA0A460021DCF1000C61EB0201B7
-:102680002D2202E0220504D52B228DF80420012200
-:1026900003E0E20701D02022F7E7904659E00A2143
-:1026A00002E010220DE010214FF0000A00910BE033
-:1026B00010224FF0000A44F004040827009203E0BF
-:1026C00008224FF0000A0092C4F30252022A05D0F9
-:1026D00059F804CB0021032A08D009E009F10701C9
-:1026E00021F00702F2E802C1914605E01FFA8CFCD6
-:1026F000042A01D10CF0FF0C4FF00008220728D566
-:10270000702806D0009B83F0100353EA0A0305D01B
-:102710000EE040228DF80420012208E05CEA01026C
-:1027200006D030228DF804208DF805000222904654
-:10273000009B83F0080353EA0A030AD15CEA010212
-:1027400001D1620705D530228DF804204FF0010831
-:102750007F1E582804D034A003900EA802900DE0EC
-:1027600036A0F9E753466046009AFDF73BFD8446E4
-:102770000398825C0298401E029002705CEA01009D
-:10278000F0D1029806A9081A00F1200A600702D5C4
-:1027900024F4803400E00127574502DDA7EB0A004E
-:1027A00000E0002000EB0A01009005984144401A27
-:1027B0000590E00306D45B462146179A059800F081
-:1027C000B3F90544002706E001A85A46C05D1799F1
-:1027D00090476D1C7F1C4745F6DBE0030CD55B463C
-:1027E0002146179A059800F09FF9054404E030202F
-:1027F0005A46179990476D1C0099481E0090002971
-:10280000F5DC08E0029802995A460078491C0291CA
-:10281000179990476D1CBAF10001AAF1010AF1DC89
-:1028200065E1000009280100303132333435363794
-:10283000383961626364656600000000303132330C
-:1028400034353637383941424344454600000000AC
-:1028500000F058F90544761C307800287FF4ECAD80
-:1028600019B02846BDE8F08F620700D4062709F1A9
-:10287000070222F0070CFCE80223E14603F00048BF
-:102880005FEA080C02D00FF2702C0DE05FEA045CE6
-:1028900002D50FF2682C07E05FEAC47C02D00FF289
-:1028A000602C01E0AFF2700C4FF0FF3823F00043D2
-:1028B000CDF850C065280CD006DC452809D0462844
-:1028C0001DD047283DD13DE0662818D067287ED12D
-:1028D00038E00021112F01DB112000E0781CCDE948
-:1028E000000106A90EA8FFF7DDFCDDE90F010E9A35
-:1028F00003910021009207F1010A04914DE04FF08D
-:1029000000400097CDE9011006A90EA8FFF7CAFC08
-:10291000DDE90F0203920E9B11990022DDF80CA055
-:102920000093049211B9791C00EB010AB7EB0A007D
-:1029300004D4C0F1FF3007F1010A0490AAEB0700AC
-:10294000019044E0012F00DA01270021112F01DD61
-:10295000112000E03846CDE9000106A90EA8FFF7D6
-:10296000A1FCDDE90F010E9A039100210491009270
-:10297000BA4621070CD40399514500DA8A46BAF1C8
-:10298000010F05DD009AAAF10101515C302908D040
-:10299000B84202DA10F1040F06DA0121CDE9011084
-:1029A00015E0AAF10101E9E7002805DC04990144DA
-:1029B0000491AAEB000102E0411C514500DD8A466A
-:1029C0000499401A401C01904FF0004002902007EB
-:1029D00004D40198504501DBCDF8048000208DF827
-:1029E0004F0002980DF14F07B0F1004F25D02B207A
-:1029F0000E9002984FF0020800280CDA4042029034
-:102A00002D200E9007E00A210298FDF72EFC3031B0
-:102A1000029007F8011DB8F10001A8F10108F2DCED
-:102A200002980028EFD1791E0E980870307800F0D7
-:102A3000200040F0450007F8020D12A8C01B00F16D
-:102A400007081498007800B1012000EB0A010198F2
-:102A500001EBE07105984144401A401E0590E003E7
-:102A600006D45B462146179A059800F05DF80544A8
-:102A70001498007818B15A46179990476D1CE003D6
-:102A800024D55B462146179A059800F04DF8054479
-:102A90001CE00498002807DBDDE90301884203DD20
-:102AA0000098405C179901E0179930205A469047EA
-:102AB000049805F10105401C04900198401E019006
-:102AC00004D12E205A46179990476D1CBAF1000187
-:102AD000AAF1010ADDDC05E017F8010B5A46179947
-:102AE00090476D1CB8F10001A8F10108F4DC5B46C9
-:102AF0002146179A0598ABE62D0000002B00000038
-:102B0000200000002DE9F041044600251E4617462E
-:102B1000880404D405E039462020B0476D1C641EAB
-:102B2000F9D52846BDE8F0812DE9F041044600259D
-:102B30001E469046C80301D5302700E020278804B0
-:102B400004D505E041463846B0476D1C641EF9D5F2
-:102B50002846BDE8F0810A68531C0B60107070476E
-:102B6000FEF702FBFFF7ECF9FFF7D8F8FFF7C0F824
-:102B7000FFF74CF9FFF78AF8FFF724F900F076FA2F
-:102B800000F0E4F8002000F09DF800F01BF800F0E1
-:102B9000D3F900224FF480710948FEF7D1FA4FF4BF
-:102BA000FA70FEF7D1F9002000F08CF800F0C4F9BB
-:102BB0000121084600F05CF96420FEF7C5F9F7E74B
-:102BC000001802402DE9F047002000F07BF8DFF804
-:102BD000549000245FF0000609EBC60000EBD4001F
-:102BE000002507784FFA86F8380604EB050041B255
-:102BF00001D5012200E00022404600F083F878066B
-:102C00006D1C070EEDB2082DEED3761CF6B2802EA9
-:102C1000E2D30834E4B2402CDCD3BDE8F04700F046
-:102C20008BB900001435000810B50748FDF7CAFF3E
-:102C300064210548FDF774FF0348FDF713FF00EE1C
-:102C4000100AB8EE400A10BD1000002010B5FFF7C2
-:102C5000EBFFBDEEC00A10EE100AD0F54D6100D5B5
-:102C60004942802901DC002010BDA0F24F314942C9
-:102C700000D54942802901DC012010BDA0F2C261CB
-:102C8000494200D54942802901DC022010BDA0F64E
-:102C90009911494200D54942802901DC032010BD29
-:102CA000414200D54942802901DC042010BDA0F634
-:102CB000FA70404200D54042802801DC052010BD5A
-:102CC000062010BDF0B500210D4BFF260C4600225A
-:102CD00001280FD003EBC20580B16F5CC7F1FF077D
-:102CE0006F54521CD2B2802AF2D9491CC9B20829A9
-:102CF000EDD3F0BD03EBC2056E54F2E76C54F0E780
-:102D00005001002070B5802817D2002915DB3F291B
-:102D100013DCCB1701EB5375C5F3C70325F007058B
-:102D20000124094E491B8C4006EBC000012A05D046
-:102D3000C15C022A05D0A143C15470BDC15C2143CE
-:102D4000FAE76140F8E700005001002070B5474DF8
-:102D50004FF48064002221462846FEF7F1F94FF433
-:102D6000FA70FEF7F1F8012221462846FEF7E8F94D
-:102D70000021AE2000F064F90021084600F060F95F
-:102D80000021102000F05CF90021402000F058F9EB
-:102D90000021812000F054F90021CF2000F050F9EB
-:102DA0000021A12000F04CF90021C82000F048F9D2
-:102DB0000021A62000F044F90021A82000F040F9ED
-:102DC00000213F2000F03CF90021D32000F038F929
-:102DD0000021084600F034F90021D52000F030F938
-:102DE0000021802000F02CF90021D92000F028F9E2
-:102DF0000021F12000F024F90021DA2000F020F970
-:102E00000021122000F01CF90021DB2000F018F94D
-:102E10000021402000F014F90021202000F010F9DA
-:102E20000021022000F00CF900218D2000F008F9AB
-:102E30000021142000F004F90021A42000F000F982
-:102E40000021A62000F0FCF80021AF2000F0F8F8E7
-:102E50000021AF2000F0F4F80020FFF733FFBDE8B9
-:102E600070400021084600F081B8000000040240D4
-:102E700070B505460C460020FFF724FFFFF7E6FE7D
-:102E800007280CD2DFE800F004060F111315170015
-:102E90000AA200E00BA22146284600F029F8BDE86E
-:102EA000704000F049B809A2F5E70AA2F3E70AA2C8
-:102EB000F1E70BA2EFE70CA2EDE70000444F574EFD
-:102EC000000000004C4546540000000052494748AD
-:102ED00054000000555000005052455353454400E3
-:102EE00053544154494300004552524F5200000090
-:102EF0000FB430B5A1B00C46054680216846FDF7F9
-:102F0000A9F9042D13D8142C11D8002C0FD027AAFE
-:102F100068462699FFF794F9C4F11500C0B2002164
-:102F20000DF800106A462146284600F071F821B0DD
-:102F300030BC5DF814FB000070B50B4E0024214638
-:102F4000002000F013F8002506EBC5000121005D0C
-:102F500000F076F86D1CEDB2802DF5D3641CE4B260
-:102F6000082CECD370BD00005001002010B5801C6F
-:102F7000C4B2B031C8B2002100F062F8102040EABB
-:102F80001410002100F05CF804F0F000BDE81040DF
-:102F9000002100F055B800002DE9F04F01EB410190
-:102FA00000EB400049068006040E203A4FEA116902
-:102FB000D0B2164900EB4000A046002501EB800B83
-:102FC00000261BF805704FFA89FA380601D5012250
-:102FD00000E0002261B25046FFF794FE7806641CC0
-:102FE000070EE4B2A4EB08000C2809D0761CF6B258
-:102FF000082EEAD36D1CEDB20C2DE1D3BDE8F08FA5
-:1030000009F10100444600F0FF09F3E7A030000891
-:10301000F0B517460C46064600250CE02146304622
-:10302000FFF7BAFF641CE4B2142C02D90024761C0A
-:10303000F6B26D1CEDB27A5D002AEFD1F0BD000052
-:1030400013B508484FF4007309B1012200E00022D3
-:103050001946FEF775F80A23012269460248FEF771
-:1030600037FC1CBD000402405800002003480068E3
-:10307000416941F08001416170470000B0000020CB
-:1030800000061016000610160000000000000000E8
-:1030900001020304060708090000000001020304FE
-:1030A0000000000000000000000000000000000020
-:1030B0003F400000000000000000300040003000F1
-:1030C0004000000009000BC03D000BC03D0009009E
-:1030D00018C024407FE0224031800000180024C046
-:1030E0001B000D803240018003801C4027401C8063
-:1030F00007400040100060000000000000000000D9
-:103100000000000000001F80204040200000402000
-:1031100020401F8000000000090006001F800600FC
-:1031200009000000040004003F80040004000000C7
-:103130000010006000000000000000000400040017
-:103140000400040004000000000000400000000033
-:1031500000000000002001C0060038004000000010
-:103160001F802040204020401F80000000001040B1
-:103170003FC000400000000018C021402240244011
-:103180001840000010802040244024401B80000094
-:1031900002000D0011003FC0014000003C802440AF
-:1031A00024402440238000001F80244024403440D9
-:1031B000038000003000200027C0380020000000FD
-:1031C0001B802440244024401B8000001C0022C09F
-:1031D000224022401F800000000000000840000044
-:1031E000000000000000000004600000000000007B
-:1031F000000004000A00110020804040090009007E
-:103200000900090009000000000040402080110072
-:103210000A000400180020002340240018000000C9
-:103220001F802040274029401F400000004007C069
-:1032300039000F0001C0004020403FC0244024401E
-:103240001B8000001F802040204020403080000074
-:1032500020403FC0204020401F80000020403FC051
-:1032600024402E4030C0000020403FC024402E00AB
-:10327000300000000F001080204022403380020008
-:1032800020403FC0040004003FC0204020402040B8
-:103290003FC02040204000000060202020203FC090
-:1032A0002000200020403FC024400B0030C02040C0
-:1032B00020403FC020400040004000C03FC03C00D4
-:1032C00003C03C003FC0000020403FC00C40230032
-:1032D0003FC020001F802040204020401F80000071
-:1032E00020403FC024402400180000001F802140DF
-:1032F000214020E01FA0000020403FC024402600C5
-:1033000019C0004018C024402440224031800000F1
-:10331000300020403FC020403000000020003F80AF
-:10332000004000403F80200020003E0001C0070018
-:1033300038002000380007C03C0007C038000000FB
-:10334000204039C0060039C020400000200038402D
-:1033500007C0384020000000304021C026403840DF
-:1033600020C00000000000007FE04020402000005E
-:10337000000070000C0003800040000000004020AE
-:1033800040207FE0000000000000200040002000FE
-:1033900000000000001000100010001000100010CD
-:1033A000000000004000000000000000000002805B
-:1033B0000540054003C0004020003FC004400440D9
-:1033C0000380000000000380044004400640000029
-:1033D00000000380044024403FC000400000038000
-:1033E0000540054003400000000004401FC0244089
-:1033F00024402000000002E0055005500650042043
-:1034000020403FC00440040003C0004000000440CE
-:1034100027C000400000000000100010041027E04A
-:103420000000000020403FC00140070004C00440ED
-:10343000204020403FC000400040000007C0040082
-:1034400007C0040003C00000044007C0044004009B
-:1034500003C00040000003800440044003800000DB
-:10346000041007F0045004400380000000000380B3
-:103470000440045007F00010044007C0024004005C
-:1034800004000000000006400540054004C00000A4
-:10349000000004001F80044000400000040007807A
-:1034A0000040044007C000400400070004C0018041
-:1034B00006000400060001C0070001C0060000006D
-:1034C000044006C0010006C00440000004100710BC
-:1034D00004E00180060004000000044005C006402E
-:1034E000044000000000000004007BE040200000D9
-:1034F000000000000000FFF000000000000040207D
-:103500007BE004000000000040008000400020003C
-:10351000200040000000000000000000000000004B
-:10352000000000000000000000000000000000009B
-:10353000000000000000000000000000000000008B
-:10354000000000000000000000000000000000007B
-:103550000000000000000000000000060000000065
-:103560000000001E00000000000000DE000000005F
-:10357000000000D800000000000000D8000000009B
-:10358000000000D800000000000000DE0000000085
-:10359000000000FE00000000000000F60000000037
-:1035A00000000072000000000000000000000000A9
-:1035B0000000007C00000000000000FE0000000091
-:1035C000000000C600000000000000C6000000006F
-:1035D000000000C600000000000000FE0000000027
-:1035E0000000007C0000000000000000000000005F
-:1035F0000000001E00000000000000DE00000000CF
-:10360000000000D600000000000000D6000000000E
-:10361000000000D600000000000000D600000000FE
-:10362000000000DE40000000000000FE600000001E
-:103630000010006C700000000030000078000000F6
-:1036400000F0007C7C00000007F000FE7E0000001F
-:103650003FF000C67F000001FFF000C67F80000F32
-:10366000FFF000C67FC0007FFFF000FE7FE003FF99
-:10367000FFF0007C7FF03FFFFFF000027FF83FFF8C
-:10368000FFF000067FFC3FFFFFF0001E7FFE3FFFC4
-:10369000FFF000BC7FFF3FFFFFF000E07FFFBFFFB8
-:1036A000FF8000F87FFFFFFFFC00003E7FFFFFFF71
-:1036B000E000000E7FFFFFFF000000B87FFFFFF873
-:1036C000000000E07FFFFFF0000000FE7FFFFFF042
-:1036D0000000001E7FFFFFF0000000027FFFFFF0F0
-:1036E000000000007FEFFFF0020000067FE7FFF020
-:1036F0000200000E7FE3FFF00200001C7FE1FFF8F4
-:10370000030000BA7FE0FFFC030000F67FE07FFECD
-:10371000038000E67FE03FFF038000F67FE03FFF8D
-:1037200083C0003E7FE03FFFC3C0000E7FE03FFF4D
-:10373000E3E000027FE03FFFF3E000007FE03FFFB7
-:10374000FBF000027FE03FFFFFF000667FE03FFFFD
-:10375000FFF800F67FE03FFFFFF800D67FE03FFF75
-:10376000FFFC00D67FF07FFFFFFC00D67FF8FFF75D
-:10377000FFFE00D67FFFFFF3FFFE00DE3FFFFFE10D
-:10378000FFFF008C3FFFFFE0FFCF00401FFFFFC0A7
-:103790007FC780C01FFFFFC03FC380C00FFFFF80F7
-:1037A0001FC1C0FE07FFFF000FC0C0FE03FFFE00E9
-:1037B00007C060C001FFFC0003C020C0007FF00014
-:1037C00001C00086000F800000C00016000000004D
-:1037D000004000D600000000000000D600000000FD
-:1037E000000000D600000000000000D6000000002D
-:1037F000000000D600000000000000D00000000023
-:10380000000000C0000000000000000600000000F2
-:103810000000001E00000000000000DE00000000AC
-:10382000000000D800000000000000D800000000E8
-:10383000000000D800000000000000DE00000000D2
-:10384000000000DE00000000000000F600000000A4
-:1038500000000072000000000000000000000000F6
-:103860000000006200000000000000F60000000000
-:10387000000000F600000000000000D6000000007C
-:10388000000000D600000000000000D6000000008C
-:10389000000000DE000000000000008C00000000BE
-:1038A0000000000000000000000000000000000018
-:1038B0000000000000000000000000000000000008
-:1038C00000000000000000000000000000000000F8
-:1038D00000000000000000000000000000000000E8
-:1038E00000000000000000000000000000000000D8
-:1038F00000000000000000000000000000000000C8
-:1039000000000000000000000000000000000000B7
-:103910000000000034390008000000201000000002
-:1039200084220008443900081000002040090000EB
-:1039300094220008010000001000000000000000B8
-:043940000024F4006B
+:10087000FEE70000014800F0CCBA0000F8000020BC
+:10088000014800F0C6BA0000F8000020014800F05E
+:100890000DBD0000F801002001681823CAB2103A0B
+:1008A000B2FBF3F2054B6FF30901032A9B5CC365AE
+:1008B00000D9091D81650846704700004A470008B5
+:1008C00010B5014600208B698A6A4FF0C07453B19D
+:1008D000B3F5005F15D072B1012A0CD0022A0AD0FC
+:1008E000032A09D104E01AB1012A06D0022A03D151
+:1008F000C96AC90100D5012010BDC96AA142FAD058
+:1009000010BD002AF7D0012AF2D0022AF3D0032A20
+:10091000F3D010BD7047704778B50024009490F86C
+:100920003C20012A19D0012280F83C200A680723C4
+:100930000568092A13D9EE680A3A02EB420293408D
+:100940009E43EE600B788A680A3B03EB43039A40B0
+:100950000368DD682A43DA6010E0022078BD2E6962
+:1009600002EB420293409E432E610B788A6803EBB0
+:1009700043039A4003681D692A431A614A681F238A
+:10098000072A13D205686E6B521E02EB8202934057
+:100990009E436E630A8893B20A79521E02EB82026A
+:1009A00093400268556B2B43536327E005680D2A7B
+:1009B00012D22E6BD21F02EB820293409E432E6313
+:1009C0000B790A88DB1F92B203EB83039A4003681A
+:1009D0001D6B2A431A6311E0EE6A0D3A02EB8202A4
+:1009E00093409E43EE620B790A880D3B92B203EB73
+:1009F00083039A400368DD6A2A43DA621B4B056869
+:100A0000194A9D420AD10D68122D07D1556825F467
+:100A100000055560556845F48005556005689D42A0
+:100A20001DD1134D0B68AB4201D0112B17D1536868
+:100A300023F480035360536843F400035360096850
+:100A4000A9420CD10B490C4A0968B1FBF2F101EB48
+:100A50008101490000E0491E00910029FBD180F886
+:100A60003C40002078BD00000023014000200140F0
+:100A7000120000100400002040420F0070B5040076
+:100A80004FF0000503D0206C002610B107E00120D4
+:100A900070BD204600F01CF8666484F83C60206C51
+:100AA000C00610D4206C20F4885040F0020020646E
+:100AB0002046FFF749FE6664206C20F0020040F0FB
+:100AC0000100206400E0012584F83C60284670BDE8
+:100AD00010B586B0044614216846FFF7BBFB1149E8
+:100AE000206888421CD110480021026842F48072BC
+:100AF0000260006800F4807005900B4814380268AA
+:100B000042F001020260006800F001000590402000
+:100B100000900320CDE901016946044800F012FD70
+:100B200006B010BD002001404438024000000240E1
+:100B300090F82020012A07D0022A05D0416A41F40A
+:100B40008021416201207047006842690A43426186
+:100B500000207047F0B590F820500468A468012D7B
+:100B600005D0022D03D0416A41F4802153E014F0F6
+:100B7000406F01D1E5004BD5C4F30164022C03D9C9
+:100B8000416A41F4000146E00125A5401D608D68E1
+:100B90004FF4C0739DB1CE6835434E6845EAC60533
+:100BA000066803EB0417F5514FF4C275076805EBAF
+:100BB00004150E697E51097D012905D009E00E88D2
+:100BC000CD6845EA4655EBE701684E5946F4807614
+:100BD0004E511179D2F805504FF4C67641EA0525F9
+:100BE000016806EB04168D511178D2F801204FF4FC
+:100BF000C47541EA0221026805EB041551510068F1
+:100C000003EB0411425842F0010242500020F0BDB3
+:100C1000416A41F4001141620120F0BD10B590F825
+:100C20002020012A07D0022A05D0416A41F4802100
+:100C30004162012010BD3B48D0F8002242F0010281
+:100C4000C0F80022D0F8002222F47C52C0F8002222
+:100C5000D0F800224B6A42EA0322C0F800220A7D43
+:100C600002F01F0301229A40D0F81C329343C0F8CF
+:100C70001C32CB69B3B9D0F80C329343C0F80C32B4
+:100C80008C894B6864F31F434C6900EBC404C4F8BF
+:100C900040320C890B6864F31F434C6900EBC404B9
+:100CA000C4F84432CB69012B16D1D0F80C3213436F
+:100CB000C0F80C320C884B6864F31F434C6900EB9E
+:100CC000C404C4F840320C89CB6864F31F434C69F8
+:100CD00000EBC404C4F844328B69002BD0F8043212
+:100CE0000ED01343C0F804320B69002BD0F8143235
+:100CF00008D01343C0F81432096A012904D008E06F
+:100D00009343EFE79343F5E7D0F81C121143C0F883
+:100D10001C12D0F8001221F00101C0F800120020CE
+:100D200010BD000000640040704730B590F82040CE
+:100D3000012C05D0022C03D0416A41F480215DE0F2
+:100D40000468002955D02469A40754D04FF4D874FE
+:100D5000056804EB01142D5915F00405956005682C
+:100D60002D594ED0ED08556005682C5904F0020449
+:100D7000D4604FF4DA74056804EB01142D5905F0C2
+:100D80000F05156105682D59C5F30725956105689F
+:100D90002C59240C54614FF4DC72046802EB0112EC
+:100DA000A4581C700468A458240A5C700468A458F1
+:100DB000240C9C700468A258120EDA704FF4DE7294
+:100DC000046802EB0112A4581C710468A458240A98
+:100DD0005C710468A458240C9C710468A258120E1B
+:100DE000DA71006881B1016941F0200101610020E0
+:100DF00030BDE468A8E7416A41F400114162012076
+:100E000030BD6D0D1560AFE7C16841F02001C160D4
+:100E1000EDE72DE9F05F0546006800244669D0F84B
+:100E200004908768D0F80CB0D0F810A0D0F81880E3
+:100E3000F10748D0F90714D001218160B80703D524
+:100E4000284600F01AFA0CE0780702D54FF4006447
+:100E500007E0380702D54FF4805402E0284600F03E
+:100E60000BFAF80516D529684FF480708860B8052C
+:100E700003D5284600F003FA0CE0780502D544F4C7
+:100E8000005407E0380502D544F4804402E02846C7
+:100E900000F0F4F9F80316D529684FF48030886023
+:100EA000B80303D5284600F0ECF90CE0780302D52E
+:100EB00044F4004407E0380302D544F4803402E0EF
+:100EC000284600F0DDF9300707D55FEACB6004D58E
+:100ED0002968102044F40074C86070074FF00807B8
+:100EE00007D55FEA0B7004D52868C760284600F074
+:100EF0005FF9B00706D52868C068800702D0284689
+:100F000000F058F9700607D55FEACA6004D5296871
+:100F1000102044F480640861B00607D55FEA0A70C7
+:100F200004D528680761284600F076F9F00606D552
+:100F300028680069800702D0284600F06EF9B003E7
+:100F400008D55FEAC96005D52968102048602846A1
+:100F500000F064F9F00307D55FEA097004D528684A
+:100F60004760284600F08EF9300446D55FEA4970A4
+:100F700040D5F00504D55FEAC87001D044F0010403
+:100F8000B00504D55FEA887001D544F0020470050D
+:100F900004D55FEA487001D544F00404300529D532
+:100FA00018F0700F26D008F07000402815D006DC2D
+:100FB000102809D020280AD0302816D10AE050285D
+:100FC0000ED0602811D10EE044F008040DE044F08A
+:100FD00010040AE044F0200407E044F0400404E078
+:100FE00044F0800401E044F480742868816921F0B1
+:100FF00070018161296804204860002C05D0686A6E
+:10100000204368622846FFF78FFEBDE8F09F70B569
+:10101000040003D094F8200010B104E0012070BD5A
+:10102000204600F081F82068016821F0020101608B
+:1010300000F07CFB0546052604E000F077FB401B32
+:101040000A2811D8206840688007F6D42068016813
+:1010500041F00101016000F069FB05460BE000F082
+:1010600065FB401B0A2806D9606A40F400306062C4
+:1010700084F82060D2E720684068C007EFD0207E67
+:101080000128206801683DD021F080010160607E68
+:1010900001282068016838D021F040010160A07E5D
+:1010A00001282068016833D021F020010160E07E32
+:1010B0000128206801682ED041F010010160207FD6
+:1010C00001282068016829D021F008010160607FB3
+:1010D00001282068016824D021F004010160D4E9CE
+:1010E00002010843D4E90412114308436168491E10
+:1010F00008432168C86100206062012084F8200054
+:10110000002070BD41F08001C0E741F04001C5E71B
+:1011100041F02001CAE721F01001CFE741F00801BA
+:10112000D4E741F00401D9E710B586B00446142194
+:101130006846FFF78FF81B49206888422FD11A486C
+:101140000021026842F000720260006800F0007046
+:10115000059015481038026842F0080202600068E5
+:10116000022200F0080005900320CDE90210CDE92D
+:1011700000020920049069460C4800F0E3F90022BF
+:101180001146132000F040FB132000F02FFB00223B
+:101190001146142000F038FB142000F027FB06B0A5
+:1011A00010BD00000064004040380240000C0240C6
+:1011B0007047000010B5016888B0D1F8B011124A2C
+:1011C000490D00910168114C91420FD10099A1F293
+:1011D000052107290AD22288C9B2521C22800C4A52
+:1011E00002EBC1036A460021FFF79FFD2088B0F59E
+:1011F000FA7F06D1002020800648016881F48041F2
+:10120000016008B010BD000000640040080000202C
+:1012100058060020141402407047704770470000C1
+:1012200070B5044690F82000012804D0606A40F4AC
+:101230000020606218E0022084F820002068016825
+:1012400021F00101016000F071FA05460EE000BFD7
+:1012500000F06CFA401B0A2808D9606A40F400309C
+:101260006062052084F82000012070BD206840687D
+:10127000C007EDD1606270BD70477047704770471E
+:1012800070477047704790F83510022903D08021CD
+:10129000416501207047052180F83510006801681C
+:1012A00021F0010101600020704700002DE9F843A2
+:1012B00004464FF00009CDF8009063484FF41651F2
+:1012C000A56D0068B0FBF1F72E6894F85C1008205B
+:1012D00000FA01F131420FD021680A6852070BD59C
+:1012E0000A6822F004020A6094F85C108840A86042
+:1012F000606D40F00100606594F85C104FF00108EB
+:1013000008FA01F0304208D021684969090604D57D
+:10131000A860606D40F00200606594F85C100420E5
+:101320008840304208D021680968890704D5A86040
+:10133000606D40F00400606594F85C1010208840F7
+:10134000304218D021680968090714D5A8602068C0
+:101350000168490304D50068000308D5A16C07E0C3
+:101360000168C90503D4016821F008010160216CFE
+:1013700009B12046884794F85C102020884030420C
+:1013800031D021680968C9062DD5A86094F83500C8
+:1013900005282068016806D0490347D50068000386
+:1013A0001DD4616C1CE021F01601016020684169C8
+:1013B00021F080014161206C08B9A06C20B1206847
+:1013C000016821F00801016094F85C103F2088401A
+:1013D000A86084F8349084F83580216D1FE0E16BBB
+:1013E00009B120468847606D00282BD0606DC0078A
+:1013F00014D0052084F835002068016821F001012F
+:1014000001600098401C0090B84203D82068006832
+:10141000C007F6D184F8349084F83580E16C002957
+:1014200010D001B02046BDE8F04308470168C90567
+:10143000D5D4016821F01001016084F8349084F85B
+:101440003580CCE7BDE8F883040000202DE9F041A9
+:10145000044600F06BF906465CB1002584F8345070
+:10146000022084F835002068016821F00101016044
+:101470000DE00120BDE8F08100F058F9801B05283F
+:1014800005D920206065032084F83500F2E7206844
+:101490000068C007F0D12268116820480140D4E9F3
+:1014A00001031843D4E903363343184363691843EF
+:1014B000A3691843E3691843236A18430843616A20
+:1014C000042903D1D4E90B131943084310602068A1
+:1014D0004069666A20F0070130460E430127042860
+:1014E0000CD1A06A0643E06A40B12046FFF7E8F954
+:1014F00020B14020606584F83570BAE72068466105
+:101500002046FFF7C9F994F85C203F2191408160A3
+:10151000656584F835700020ACE700003F8010F06E
+:1015200070B5044600F002F90546601C02D004487C
+:101530000078044400F0FAF8401BA042FAD370BDD2
+:101540000C0000202DE9F84F00224FF00108032580
+:101550004FF00F0E0B6808FA02F42340A3426ED13D
+:101560004E68012E05D0022E03D0112E01D0122E6E
+:1015700012D186684FEA420C05FA0CF7BE43CF68D9
+:1015800007FA0CF7374387604668A6430C79C4F323
+:101590000014944034434460C668570005FA07FCC1
+:1015A0008C6826EA0C06BC403443C4604C68022CAC
+:1015B00001D0122C13D1D40800EB8404A346D4F834
+:1015C000209054074FEAD46A0EFA0AF629EA06096F
+:1015D0000E6906FA0AF646EA0906CBF820600468A6
+:1015E0000E7924EA0C0406F00306BE40264306608A
+:1015F0004C68E4006FD53B4C266846F48046266074
+:10160000246822F0030604F480440094364C3444E9
+:10161000A446D4F808489607360F0EFA06F7BC43DE
+:10162000324FB84201D100272EE0314FB84201D1EC
+:10163000012729E02F4FB84202D1022724E04AE0D7
+:101640002D4FB84201D103271EE02C4FB84201D1E3
+:10165000042719E02A4FB84201D1052714E0294F89
+:10166000B84201D106270FE0274FB84201D1072722
+:101670000AE0264FB84201D1082705E0244FB842BE
+:1016800001D1092700E00A27B7402743CCF80878A2
+:10169000204E34684F689C43FF0300D51C433460E0
+:1016A0001C4E361D34684F689C43BF0300D51C4355
+:1016B0003460184E083634684F689C43FF0200D5EA
+:1016C0001C433460134E0C3634684F689C43BF0291
+:1016D00000D51C433460521C102AFFF43BAFBDE818
+:1016E000F88F000044380240003001400000024002
+:1016F0000004024000080240000C024000100240BA
+:101700000014024000180240001C02400020024069
+:1017100000240240003C01400069084000D0012044
+:1017200070470AB1816170470904FBE7014880688E
+:10173000704700000C0000200248816802781144C4
+:10174000816070470C0000200B4810B5016841F41F
+:1017500000710160016841F480610160016841F439
+:1017600080710160032000F06FF8002000F006F89F
+:1017700000F024F8002010BD003C024070B50D4D73
+:1017800004464FF47A712878B1FBF0F00A490968F1
+:10179000B1FBF0F000F03AFC48B9102C07D200225F
+:1017A0002146501E00F030F800206C6070BD012012
+:1017B00070BD00000C000020040000200A4808B59D
+:1017C000016841F480410160006800F480400090AD
+:1017D0000548001F016841F080510160006800F079
+:1017E0008050009008BD000044380240002809DB0A
+:1017F00000F01F02012191404009800000F1E0202B
+:10180000C0F8001170470000F0B40E4B1B680C4686
+:10181000C3F30223C3F10705042D00D90425191DC4
+:10182000072901D2002300E0DB1E012606FA05F19C
+:10183000491E214099409E40761E16403143F0BC1F
+:1018400001F070BB0CED00E0064900F007020868EB
+:101850004FF6FF03184040EA0220034A1043086095
+:10186000704700000CED00E00000FA052DE9F0479C
+:101870000E46050065D0DFF81481D8F80000F7B2F5
+:1018800000F00F00B04207D288F80070D8F80000CE
+:1018900000F00F00B04254D128683D4C810712D5AA
+:1018A000400703D5206840F4E05020602878000706
+:1018B00003D5206840F4604020602068A96820F0CB
+:1018C000F000084320602878C0072DD030496868B0
+:1018D0000839012812D0022813D0032811D0096832
+:1018E000890700292DDA216821F0030101432160D5
+:1018F000FFF71CFF814641F2883A0EE00968890330
+:10190000EFE709688901ECE7FFF710FFA0EB090199
+:10191000514502D90320BDE8F0872068696800F0CE
+:101920000C00B0EB810FEFD1D8F80010404601F069
+:101930000F01B14207D90770006800F00F00B042F4
+:1019400001D00120E7E72878400705D52068E9683D
+:1019500020F4E050084320602878000706D520686E
+:10196000296920F4604040EAC100206000F038F8A6
+:101970002168084AC1F30311515CC8400649086058
+:1019800006480068FFF7FAFE0020C4E7003C02406A
+:1019900008380240BE3E000804000020100000206D
+:1019A0000448054900680968044AC1F38221515C72
+:1019B000C84070470400002008380240CE3E0008AE
+:1019C0000448054900680968044AC1F34231515C82
+:1019D000C84070470400002008380240CE3E00088E
+:1019E000154810B5006810F00C02144813D01449C3
+:1019F000042A0FD0082A0ED10F4C241F2268236816
+:101A000002F03F025B0207D52068C0F38810A0FBFC
+:101A1000010106E0084610BD2168C1F38811A1FB51
+:101A200000010023FEF7DEFB2168C1F30141491CE0
+:101A30004900B0FBF1F010BD083802400024F4006A
+:101A4000001BB7002DE9F84F040076D02078DFF8AE
+:101A500038A3CE4DC00749D0DAF800105046C1F384
+:101A60008101012908D00068C0F3810002280AD151
+:101A7000281D0068400206D52868800336D56068B6
+:101A80000028E2D032E06068B0F5803F10D0B0F5B9
+:101A9000A02F286810D020F480302860286820F417
+:101AA000802028606068A0B1FFF740FE06460CE089
+:101AB000286840F48030F4E740F480202860F7E79D
+:101AC000FFF734FE801B642873D828688003F7D59D
+:101AD0000CE0FFF72BFE064605E000BFFFF726FEF1
+:101AE000801B6428F0D828688003F7D42078DFF8BA
+:101AF000A08280074FF000093ED5DAF8001050466A
+:101B000011F00C0F09D00068C0F3810002280BD13E
+:101B10009D48001F0068400206D42868800715D53C
+:101B2000E068012809D111E0E068B8B10120C8F8E7
+:101B30000000FFF7FBFD064605E020E1FFF7F6FD9C
+:101B4000801B0228C0D828688007F7D5286821693B
+:101B500020F0F80040EAC10028600DE0C8F80090CD
+:101B6000FFF7E4FD064604E0FFF7E0FD801B0228D6
+:101B70001FD828688007F7D42078000722D5824E26
+:101B8000844861696C3671B101210160FFF7CEFDB7
+:101B9000074604E0FFF7CAFDC01B022809D83068D9
+:101BA0008007F7D50EE0C0F80090FFF7BFFD0746AD
+:101BB00005E082E0FFF7BAFDC01B02287DD830683F
+:101BC0008007F7D42078400768D5DFF8BCB100273C
+:101BD0000BF1380BDBF80000C0000BD4DBF8001071
+:101BE00041F08051CBF80010DBF80000012700F035
+:101BF00080500090684E3068C00510D4306840F4C2
+:101C000080703060FFF792FD009005E0FFF78EFDD9
+:101C10000099401A022850D83068C005F6D55A4EAF
+:101C2000A068683601280FD00528306810D020F051
+:101C300001003060306820F004003060A068B8B166
+:101C4000FFF774FD00900FE0306840F00100F4E70A
+:101C500040F004003060F7E7FFF768FD0099411A93
+:101C600041F28830814266D830688007F4D50EE0B2
+:101C7000FFF75CFD009007E0FFF758FD0099411A5F
+:101C800041F28830814256D830688007F4D42FB1B1
+:101C9000DBF8001021F08051CBF80010A069D0B320
+:101CA000DAF800205146C2F38102022A4AD0022803
+:101CB000484607D0C8F8600000E03CE0FFF736FD7A
+:101CC00004463BE04746C8F86000FFF72FFD064694
+:101CD00005E000BFFFF72AFD801B02282BD82868EB
+:101CE0008001F7D4D4E907010843A16A2B4A4908C7
+:101CF00002EB0141626A41EA8211084394F82C1018
+:101D000040EA01612048001F016001203866FFF7AA
+:101D10000DFD044605E034E0FFF708FD001B022836
+:101D200009D828688001F7D52BE000BFFFF7FEFC3B
+:101D3000001B022802D90320BDE8F88F2868800123
+:101D4000F4D41EE00128F7D00868E26900F48001AD
+:101D5000914214D1226A00F03F0191420FD147F61F
+:101D6000C071626A0140914209D1A26A00F4403117
+:101D7000914204D1E16A00F07060884201D00120F4
+:101D8000DAE70020D8E700000838024000380240B7
+:101D900000004742800E4742007000400000FFFFF5
+:101DA00070B5040005D00025A56294F8510010B16B
+:101DB00006E0012070BD84F85050204600F030F855
+:101DC000022084F851002068016821F04001016080
+:101DD000D4E901010843D4E90312114308436169BE
+:101DE0000843218B01F400710843E1690843216A2B
+:101DF0000843A16A084321680860A069042101EA38
+:101E00001040616A0843216848602068C16921F474
+:101E10000061C1616565012084F85100002070BD3A
+:101E2000F0B587B0044614216846FEF713FA1C4942
+:101E30002068884232D11B480024016841F4805157
+:101E40000160006800F4805005901648143801685D
+:101E500041F002010160016801F002010591016891
+:101E600041F0010101600068022500F001000590C9
+:101E70001820CDE9000502AA0326052782E8D00034
+:101E800069460948FFF75EFB8020CDE9000502AAFC
+:101E9000694682E8D0000548FFF754FB07B0F0BD63
+:101EA000003001404438024000040240000002407B
+:101EB0002DE9F84F044690F8500000271D461646BD
+:101EC000894601280DD04FF0010B84F850B0FFF780
+:101ED0002DFC804694F85100BA46012804D0022710
+:101EE0008EE00220BDE8F88FB9F1000F7DD0002E02
+:101EF0007BD0032084F85100C4F854A0C4F830907B
+:101F0000A686E686C4F838A0A4F83CA0A4F83EA0B3
+:101F1000C4F844A0C4F840A0A068B0F5004F04D1B4
+:101F20002068016841F48041016020680168490629
+:101F300003D4016841F040010160E068B0F5006F32
+:101F4000606803D030B3012E24D040E008B1012EE8
+:101F50001CD1206B21680088C86006E02068816879
+:101F6000890709D5216B0988C160206B801C20631B
+:101F7000E08E401EE08609E0FFF7D8FBA0EB0800EA
+:101F8000A84202D3681C01D031E07DB3E08E002866
+:101F9000E4D11FE0206B21680078087306E0206818
+:101FA0008168890709D5216B09780173206B401C72
+:101FB0002063E08E401EE08609E0FFF7B7FBA0EB50
+:101FC0000800A84202D3681C01D010E075B1E08E71
+:101FD0000028E4D142462946204600F071FC08B1B1
+:101FE00020206065A06820B107E008E0FFE7032734
+:101FF00006E02068C16880680090606D00B101272C
+:1020000084F851B084F850A038466BE710B5401EF4
+:10201000B0F1807F01D3012010BD4FF0E02460615A
+:102020000F21601700F07EFF0020A06107202061D3
+:10203000002010BD10B590F83C20012A22D00122CA
+:1020400080F83C20CA688C6822F4407222434C68B5
+:1020500022F4806222430C6822F4006222430C695D
+:1020600022F4805222434C6922F400522243C9696F
+:10207000002322F480420A4301684A6480F83C301D
+:10208000002010BD022010BD70B590F83C20012A40
+:1020900032D0012480F83C40022280F83D200368C1
+:1020A0005A689D6822F070060A6832435A60134BE2
+:1020B00002689A4214D0B2F1804F11D0104B9A426C
+:1020C0000ED0104B9A420BD00F4B9A4208D00F4BB8
+:1020D0009A4205D00E4B9A4202D00E4B9A4204D13E
+:1020E000496825F080031943916080F83D40002144
+:1020F00080F83C10084670BD022070BD0000014011
+:102100000004004000080040000C004000040140B2
+:10211000004001400018004070B586B0044614210C
+:102120006846FEF797F818492068884229D1174871
+:102130000024016841F001010160016801F0010122
+:102140000591016841F0100101600068022500F06E
+:10215000100005904FF440700090CDE90154012625
+:10216000CDE9034669460A48FFF7ECF94FF4C04051
+:102170000090CDE90154CDE9034669460548FFF7D3
+:10218000E1F906B070BD00000000014030380240A7
+:10219000000002400010024070B5044690F83C0078
+:1021A0000D4601280DD0012684F83C60022084F8F9
+:1021B0003D0042B1042A18D0082A2AD00C2A4DD159
+:1021C00039E0022070BD206800F0A8FC2068816919
+:1021D00041F0080181612068816921F00401816179
+:1021E000206881692A69114311E0206800F0C6FC6B
+:1021F0002068816941F4006181612068816921F46E
+:1022000080618161206881692A6941EA02218161D6
+:1022100024E0206800F0E8FC2068C16941F0080172
+:10222000C1612068C16921F00401C1612068C169F0
+:102230002A69114311E0206800F00AFD2068C16995
+:1022400041F40061C1612068C16921F48061C1610C
+:102250002068C1692A6941EA0221C16184F83D60B0
+:10226000002084F83C0070BD10B5040003D094F841
+:102270003D0010B107E0012010BD002084F83C00B3
+:10228000204600F00DF8022084F83D00211D206852
+:1022900000F0E0FB012084F83D00002010BD0000AC
+:1022A00008B500680649884208D10648016841F02F
+:1022B00001010160006800F00100009008BD00000D
+:1022C00000000140443802407047000070B50268C9
+:1022D00004461068D168536910F00F0F52D003F014
+:1022E000010501F490762E435FD0C20705D0CA05E0
+:1022F00003D5E26B42F00102E263420705D5DA073B
+:1023000003D0E26B42F00202E263820705D5DA07EE
+:1023100003D0E26B42F00402E263020707D501F04A
+:1023200020022A4303D0E26B42F00802E263E26B30
+:10233000002A33D0800604D5880602D5204600F056
+:10234000C5FC20684069E16BC0F38010090700D428
+:1023500028B3204600F0ACFC2068416949061AD534
+:10236000416921F040014161606BA0B11B490165E9
+:10237000606BFEF788FF002810D0606B016DBDE830
+:1023800070400847830610D58B060ED52046BDE861
+:10239000704000F09BBC2046FFF796FF70BD2046C2
+:1023A000FFF792FF0020E06370BD030606D50B0621
+:1023B00004D52046BDE8704000F068BD4006F3D566
+:1023C0004806F1D5D168204621F04001D160202196
+:1023D00084F8391000F08FF870BD0000A12C0008BF
+:1023E00070B5040004D094F83900002510B106E05F
+:1023F000012070BD84F83850204600F023F82420D6
+:1024000084F839002068C16821F40051C160204679
+:1024100000F0A8FC2068016921F490410161206866
+:10242000416921F02A0141612068C16841F40051ED
+:10243000C160E563202084F8390084F83A00002068
+:1024400070BD000070B586B0064614216846FDF7E1
+:1024500001FF23493068884240D1224800250168A5
+:1024600041F010010160006800F0100005901D4867
+:102470001438016841F0020101600068694600F00B
+:1024800002000590C02000900220CDE90105032044
+:102490000390072004901448FFF754F8144C134895
+:1024A00020604FF0006060604020C4E90205000138
+:1024B000C4E90405A561E561256220466562FEF771
+:1024C000C5FF08B1FEF727FA346300221146252024
+:1024D000A663FFF799F92520FFF788F906B070BDCC
+:1024E000001001404438024000040240B864024039
+:1024F000F801002070477047FEE700007FB5002418
+:1025000015480094019402941249039401604FF419
+:102510008031C0E901140461047680F820400F493D
+:10252000C0E90A140125C561C46080F830404561E6
+:10253000FEF7A4FA08B1FEF7EEF90620CDE9000592
+:10254000694602940448FEF7E7F9002801D0FEF737
+:10255000E2F97FBD00200140B00000200100000F23
+:10256000104810B50E4901600321416000214FF46D
+:1025700000228160C0E903124FF4401242610176EB
+:10258000012242768176C17601774177FEF73FFDE1
+:10259000002803D0BDE81040FEF7BDB910BD000013
+:1025A00000640040F8000020094808B5016841F4C3
+:1025B000800101600068002200F480000090114654
+:1025C0004620FFF721F9BDE808404620FFF70EB985
+:1025D000303802402DE9F04F87B014216846FDF7EE
+:1025E00039FE59480024016841F002010160016888
+:1025F00001F002010591016841F0010101600168EB
+:1026000001F001010591016841F0080101600168D4
+:1026100001F008010591016841F4807101600168D1
+:1026200001F480710591016841F080010160016849
+:1026300001F080010591016841F0400101600168ED
+:1026400001F040010591016841F01001016001684D
+:1026500001F010010591016841F02001016000685E
+:102660004FF4C06500F0200005900022294637484D
+:10267000FFF757F8DFF8D8A0002204215046FFF7F3
+:1026800050F800222C213348FFF74BF8DFF8C8B090
+:102690004FF48077002239465846FFF742F84FF44E
+:1026A0000068002241462D48FFF73BF84FF480496F
+:1026B000002249462A48FFF734F800950125CDE964
+:1026C0000154694621480394FEF73CFF0426009616
+:1026D000CDE90154694650460394FEF733FF2C20A0
+:1026E0000090CDE9015469461A480394FEF72AFF89
+:1026F0001020CDE90004694616480294FEF722FF37
+:102700000097CDE90154694658460394FEF71AFF35
+:10271000CDE9006469460D480294FEF713FFCDF839
+:102720000080CDE9015469460C480394FEF70AFF86
+:10273000CDF80090CDE90154694609480394FEF7AD
+:1027400001FF07B0BDE8F08F3038024000040240BE
+:1027500000200240001C024000180240001002400D
+:1027600000140240104810B50E4901604FF4827108
+:10277000416000218160C1604FF400720161C0E9D5
+:1027800005122822C0E90721416281620A21C16243
+:10279000FFF706FB002803D0BDE81040FEF7BBB8EA
+:1027A00010BD0000003001402001002010B592B0A3
+:1027B00000240F941C2168461094FDF74BFD202146
+:1027C00007A8FDF747FD2D482B490160A721C0E967
+:1027D000011444F62061C0E9031444618461FFF7E9
+:1027E00043FD08B1FEF797F80F940FA92348109402
+:1027F000FFF74AFC08B1FEF78EF8602000904FF416
+:102800007A70CDE90104039404940594002269468A
+:102810001A480694FFF7C0FC08B1FEF77CF80422C2
+:1028200069461648FFF7B8FC08B1FEF774F80822AD
+:1028300069461248FFF7B0FC08B1FEF76CF80C22AD
+:1028400069460E48FFF7A8FC08B1FEF764F8079444
+:10285000089409944FF400500A94CDE90B4007A95D
+:1028600006480E94FFF7E6FB08B1FEF754F803485C
+:10287000FFF752FC12B010BD0000014078010020AB
+:102880000C4810B50A4901604FF4E1314160002164
+:1028900081600C22C160C0E904128161C161FFF74F
+:1028A0009FFD002803D0BDE81040FEF734B810BDEE
+:1028B00000100140B8010020FEE77047704700009B
+:1028C00038B504461248134B0068B0FBF3F04FF4E0
+:1028D0007A73584300906068B0F5827F0DD10B4643
+:1028E000009200228021204600F016F870B1606D41
+:1028F00040F020006065032038BD009830B1401ED4
+:10290000009020688068C0430006F6D5002038BDDE
+:102910000400002000366E012DE9F0411D461746E7
+:102920000E460446DDF8188008E0681C06D0FEF765
+:10293000FDFEA0EB0800A8420BD255B120688068CC
+:1029400036EA000030D00020B842EED10020BDE8C9
+:10295000F0812068416821F0E00141606068B0F5D5
+:10296000827F0BD1A068B0F5004F02D0B0F5806F28
+:1029700004D12068016821F040010160A06AB0F52F
+:10298000005F09D12068016821F4005101602068CE
+:10299000016841F400510160012084F851000020D9
+:1029A00084F850000320D2E70120CDE77047FEF7FE
+:1029B000C3BE000030B593B030216846FDF74AFC35
+:1029C00014210CA8FDF746FC19480025016841F0C8
+:1029D00080510160006800F0805011901548016836
+:1029E00041F4404101600068022400F4404011902D
+:1029F00001200090000401908001CDE906400620EE
+:102A00000890A820CDE9090404200B906846FFF740
+:102A100019F80CA90F2081E831004FF4A0500F9055
+:102A2000E002109005210CA8FEF720FF13B030BD86
+:102A300040380240007000400548016841F47001D0
+:102A4000016003494FF00060803908607047000062
+:102A500088ED00E0F0B50268254C264D264E274F44
+:102A6000274B4FF0804CA04209D0604507D0A842C8
+:102A700005D0B04203D0B84201D0984204D122F030
+:102A8000700E4A6842EA0E02A0421BD0604519D07F
+:102A9000A84217D0B04215D0B84213D0984211D0F6
+:102AA000184DA8420ED0184DA8420BD0174DA84281
+:102AB00008D0174DA84205D0164DA84202D0164D99
+:102AC000A84203D122F44075CA682A434D6922F016
+:102AD00080022A4302608A68C2620A688262A04257
+:102AE00001D0984201D10969016301214161F0BD22
+:102AF000000001400004004000080040000C0040BD
+:102B000000040140004001400044014000480140F1
+:102B100000180040001C004000200040F0B5026A90
+:102B200022F001020262036A42688469124E24F0B4
+:102B300073050C682C4323F002058B682B430D4D65
+:102B4000A84201D0B04205D123F00807CB683B432F
+:102B500023F00403A84201D0B04205D14D6922F40C
+:102B6000407215438A692A4342608461496841631F
+:102B70000362F0BD0000014000040140F0B5026AAC
+:102B800022F010020262026A436884690D6824F42C
+:102B9000E64444EA05248D6822F0200242EA051248
+:102BA0000F4D104EA84201D0B04206D1CF6822F09E
+:102BB000800242EA071222F04002A84201D0B0424D
+:102BC00007D14D6923F4406343EA85038D6943EAE5
+:102BD000850343608461496881630262F0BD00003F
+:102BE0000000014000040140F0B5026A22F4807246
+:102BF0000262026A4368C46922F4007224F0730519
+:102C00000C68124E2C438D6842EA05220E4DA842F4
+:102C100001D0B04206D1CF6822F4006242EA072216
+:102C200022F48062A84201D0B04207D14D6923F45A
+:102C3000405343EA05138D6943EA05134360C461B9
+:102C40004968C1630262F0BD000001400004014018
+:102C500030B5026A22F480520262046A4268C36993
+:102C60000D6823F4E64343EA05238D6824F40054F9
+:102C700044EA0534084DA84202D0084DA84204D1C8
+:102C80004D6922F4804242EA85124260C36149687C
+:102C90000164046230BD00000000014000040140F6
+:102CA00010B5806B0021C185C184FFF70DFB10BDFD
+:102CB0000168CA6822F49072CA6001684A6922F009
+:102CC00001024A61202180F83A10704710B590F84F
+:102CD0003A10222901D0022010BD8168B1F5805F31
+:102CE00011D00169002901681FD0496801F07F03F4
+:102CF000816A4A1C82620B70C18D491E0904090C4D
+:102D0000C18518D02BE00269816A002A02685268E6
+:102D100005D0D2B20A80816A491C8162ECE7C2F315
+:102D200008020A80816A891CF7E74A68816A4B1C9D
+:102D300083620A70E0E70168CA6822F02002CA6074
+:102D40000168CA6822F48072CA6001684A6922F088
+:102D500001024A61202180F83A10FFF7CBFB0020E6
+:102D600010BD00002DE9F041044600680169E268E9
+:102D700021F44051114301612169A068E2690843CF
+:102D80006169114308432168CA6849F20C639A4398
+:102D90000243CA6020684169A26921F4407111436D
+:102DA0004161E069192764253226B0F5004F354AA4
+:102DB000354920684FF0000806D0884201D0904283
+:102DC00036D1FEF7FDFD35E0884201D0904202D1B8
+:102DD000FEF7F6FD01E0FEF7E3FD61684A18A0FB8F
+:102DE000070148EB0803FDF7FDF90146B0FBF5F0DC
+:102DF0000201B1FBF5F06FF01803584301EB8000BE
+:102E000006EBC000B0FBF5F000F0F80002EB40026A
+:102E1000B1FBF5F0584301EB800006EBC000B0FBBE
+:102E2000F5F000F00700216810448860BDE8F081EB
+:102E3000FEF7B6FD61688B0F8A00A0FB0701FDF766
+:102E4000D1F90146B0FBF5F06FF01802504301EBE9
+:102E5000800006EB0010B0FBF5F000F0F002B1FBD3
+:102E6000F5F002EB0012B1FBF5F06FF018035843D8
+:102E700001EB800006EB0010B0FBF5F000F00F0056
+:102E8000D1E70000001401400010014090F8391013
+:102E9000212901D0022070478168B1F5805F016A65
+:102EA0000BD04A1C0262026809785160C18C491E2D
+:102EB0000904090CC1840ED017E009880268C1F327
+:102EC0000801516001690029016A02D0491C0162B0
+:102ED000ECE7891CFBE70168CA6822F08002CA603F
+:102EE0000068C16841F04001C160002070470000E7
+:102EF0000148FFF7EBB90000B8010020FEE7000031
+:102F000037B514460846064B6A46214600F0ECF8F1
+:102F100004466946002000F07EFC20463EBD0000CD
+:102F2000173800080907090E002804DB00F1E0202B
+:102F300080F80014704700F00F0000F1E02080F8E6
+:102F4000141D704702E008C8121F08C1002AFAD1F8
+:102F500070477047002001E001C1121F002AFBD119
+:102F6000704700002DE9FF5F82B00021DDE90430E9
+:102F7000020DDDF840B0034318D044F61050A2F221
+:102F8000FF3242431514119801281FD0A5EB0B0006
+:102F9000401C5FEA000A4FF000064E4FDFF8389100
+:102FA000B046504615D5CAF1000413E0119801242B
+:102FB0004AA3012801D16FEA0B010298119AC0E9D6
+:102FC0000031C0E9024206B0BDE8F09FCBF100003D
+:102FD000DFE704460021404A491842EB0450CDE99E
+:102FE000001012E0E00707D032463B464046494613
+:102FF000FDF717FA8046894632463B461046194689
+:10300000FDF70FFA06460F466410002CEAD1DDE901
+:103010000401DDE90023BAF1000F06DAFDF701FA39
+:1030200042464B46FDF7FDF905E0FDF76CFA4246D6
+:103030004B46FDF768FA04460E460022284BFDF782
+:10304000E9FA03D84FF0FF30014607E00022254B94
+:1030500020463146FDF73EF9FDF7C4FA102409E099
+:10306000002C0ADB0A220023FDF7BCF8039B303258
+:103070001A55641E50EA0102F2D1641C039AC4F18D
+:1030800011031444119A012A03D0012208430DD1DF
+:103090000AE0084304D000204FF0110B119072E7B2
+:1030A000A3EB0B056D1E0DE05B4504DD4FF0000248
+:1030B00005F1010504E003DA4FF00002A5F1010576
+:1030C000002AECD002981199C0E90231C0E900450C
+:1030D00079E70000000014400000F03F30000000DD
+:1030E0000000F0430000E03F2DE9FF4F95B09B4604
+:1030F0008946064600250FE2252877D10024274679
+:10310000F84A0121059400E0044316F8013F203BF2
+:1031100001FA03F01042F7D130782A2811D06FF06D
+:103120002F033078A0F13002092A16D8059A44F00E
+:10313000020402EB820203EB42021044761C05906B
+:10314000EFE759F8042B0592002A03DA504244F4C1
+:103150000054059044F00204761C30782E2816D1D5
+:1031600016F8010F44F004042A280DD06FF02F0246
+:103170003078A0F13003092B09D807EB870302EB65
+:103180004303C718761CF3E759F8047B761C3078A4
+:103190006C280FD006DC4C2817D068280DD06A2880
+:1031A00014D104E0742810D07A280FD10DE044F433
+:1031B00000140AE044F4801401E044F440147278EE
+:1031C000824202D104F58014761C761C3078662881
+:1031D0000BD013DC582877D009DC002875D045289F
+:1031E000F6D04628F4D047281AD19DE118E063288C
+:1031F00035D0642879D0652812D195E1702873D034
+:1032000008DC6728F1D069286FD06E280DD06F28B0
+:1032100006D1B5E073282CD0752875D0782874D0E5
+:103220005A46179990476D1C75E1C4F30250022865
+:1032300009D003280DD0D9F8001004280DD00D6056
+:1032400009F1040967E1D9F80010EA17C1E9005251
+:10325000F6E7D9F800100D80F2E70D70F0E719F8E5
+:10326000041B8DF8001000208DF80100EA460120B3
+:1032700003E059F804AB4FF0FF3061074FF0000155
+:1032800002D40DE008F101018846B9420FDA804509
+:10329000F8DB1AF808100029F4D108E008F1010160
+:1032A00088468142FADB1AF808100029F6D1059801
+:1032B0005B46A0EB080721463846179A00F094FABF
+:1032C000284400EB080507E04DE029E10DE01AF87D
+:1032D000010B5A4617999047B8F10108F7D25B469F
+:1032E00021463846179A13E142E00A220092C4F3BD
+:1032F00002524FF0000A022A08D059F804CB032AE0
+:103300004FEAEC710AD00DE029E02AE009F107014B
+:1033100021F00702F2E802C1914609E00FFA8CFCA5
+:103320004FEAEC71042A03D14FFA8CFC4FEAEC719E
+:10333000002907DA0A460021DCF1000C61EB0201EA
+:103340002D2202E0220504D52B228DF80420012233
+:1033500003E0E20701D02022F7E7904659E00A2176
+:1033600002E010220DE010214FF0000A00910BE066
+:1033700010224FF0000A44F004040827009203E0F2
+:1033800008224FF0000A0092C4F30252022A05D02C
+:1033900059F804CB0021032A08D009E009F10701FC
+:1033A00021F00702F2E802C1914605E01FFA8CFC09
+:1033B000042A01D10CF0FF0C4FF00008220728D599
+:1033C000702806D0009B83F0100353EA0A0305D04F
+:1033D0000EE040228DF80420012208E05CEA0102A0
+:1033E00006D030228DF804208DF805000222904688
+:1033F000009B83F0080353EA0A030AD15CEA010246
+:1034000001D1620705D530228DF804204FF0010864
+:103410007F1E582804D034A003900EA802900DE01F
+:1034200036A0F9E753466046009AFCF7DBFE844677
+:103430000398825C0298401E029002705CEA0100D0
+:10344000F0D1029806A9081A00F1200A600702D5F7
+:1034500024F4803400E00127574502DDA7EB0A0081
+:1034600000E0002000EB0A01009005984144401A5A
+:103470000590E00306D45B462146179A059800F0B4
+:10348000B3F90544002706E001A85A46C05D179924
+:1034900090476D1C7F1C4745F6DBE0030CD55B466F
+:1034A0002146179A059800F09FF9054404E0302062
+:1034B0005A46179990476D1C0099481E00900029A4
+:1034C000F5DC08E0029802995A460078491C0291FE
+:1034D000179990476D1CBAF10001AAF1010AF1DCBD
+:1034E00065E10000092801003031323334353637C8
+:1034F0003839616263646566000000003031323340
+:1035000034353637383941424344454600000000DF
+:1035100000F058F90544761C307800287FF4ECADB3
+:1035200019B02846BDE8F08F620700D4062709F1DC
+:10353000070222F0070CFCE80223E14603F00048F2
+:103540005FEA080C02D00FF2702C0DE05FEA045C19
+:1035500002D50FF2682C07E05FEAC47C02D00FF2BC
+:10356000602C01E0AFF2700C4FF0FF3823F0004305
+:10357000CDF850C065280CD006DC452809D0462877
+:103580001DD047283DD13DE0662818D067287ED160
+:1035900038E00021112F01DB112000E0781CCDE97B
+:1035A000000106A90EA8FFF7DDFCDDE90F010E9A68
+:1035B00003910021009207F1010A04914DE04FF0C0
+:1035C00000400097CDE9011006A90EA8FFF7CAFC3C
+:1035D000DDE90F0203920E9B11990022DDF80CA089
+:1035E0000093049211B9791C00EB010AB7EB0A00B1
+:1035F00004D4C0F1FF3007F1010A0490AAEB0700E0
+:10360000019044E0012F00DA01270021112F01DD94
+:10361000112000E03846CDE9000106A90EA8FFF709
+:10362000A1FCDDE90F010E9A0391002104910092A3
+:10363000BA4621070CD40399514500DA8A46BAF1FB
+:10364000010F05DD009AAAF10101515C302908D073
+:10365000B84202DA10F1040F06DA0121CDE90110B7
+:1036600015E0AAF10101E9E7002805DC049901440D
+:103670000491AAEB000102E0411C514500DD8A469D
+:103680000499401A401C01904FF00040029020071E
+:1036900004D40198504501DBCDF8048000208DF85A
+:1036A0004F0002980DF14F07B0F1004F25D02B20AD
+:1036B0000E9002984FF0020800280CDA4042029067
+:1036C0002D200E9007E00A210298FCF7CEFD303144
+:1036D000029007F8011DB8F10001A8F10108F2DC21
+:1036E00002980028EFD1791E0E980870307800F00B
+:1036F000200040F0450007F8020D12A8C01B00F1A1
+:1037000007081498007800B1012000EB0A01019825
+:1037100001EBE07105984144401A401E0590E0031A
+:1037200006D45B462146179A059800F05DF80544DB
+:103730001498007818B15A46179990476D1CE00309
+:1037400024D55B462146179A059800F04DF80544AC
+:103750001CE00498002807DBDDE90301884203DD53
+:103760000098405C179901E0179930205A4690471D
+:10377000049805F10105401C04900198401E019039
+:1037800004D12E205A46179990476D1CBAF10001BA
+:10379000AAF1010ADDDC05E017F8010B5A4617997A
+:1037A00090476D1CB8F10001A8F10108F4DC5B46FC
+:1037B0002146179A0598ABE62D0000002B0000006B
+:1037C000200000002DE9F041044600251E46174662
+:1037D000880404D405E039462020B0476D1C641EDF
+:1037E000F9D52846BDE8F0812DE9F04104460025D1
+:1037F0001E469046C80301D5302700E020278804E4
+:1038000004D505E041463846B0476D1C641EF9D525
+:103810002846BDE8F0810A68531C0B6010707047A1
+:10382000401F044AC0B202EBC00002680A60406850
+:10383000486070475806002038B5C0B2049C009418
+:1038400000F002F838BD000030B589B00C9C28B3F8
+:1038500040F2FF100290002008250490CDE90505F4
+:103860008DF81C00080A8DF800008DF80110100A70
+:103870008DF80200180A8DF804008DF80530200A32
+:103880008DF806008DF803208DF8074001236A4665
+:1038900002A90448FDF75EF909B030BD4FF400708D
+:1038A000D8E70000F800002000B58BB0002101220D
+:1038B000CDE90612059100910191029103910491C5
+:1038C0000E21CDE908216946FDF7A8F90448FDF766
+:1038D000A7FC02210248FDF72BF90BB000BD000048
+:1038E000F800002090ED120ABDEEC00A10EE100A9A
+:1038F00000B270471CB5044600886946FFF790FF88
+:1039000001219DF802300DA2084600F0EFF9A07BDE
+:10391000012801D000201CBDBDF8000040BAE080A5
+:10392000BDF8020040BA2081BDF8040040BA6081B1
+:103930009DF80600207301201CBD000056616C3A02
+:103940002025690010B5074C0421607820700648D6
+:10395000FDF7E2FE607010B92078012800D0002049
+:1039600010BD00000A0000200004024008B5FDF769
+:10397000EBFEFFF71FF8FEF72DFEFEF715FEFEF734
+:103980007FFFFEF7BBFDFEF7EDFEFEF7E9FDFEF75C
+:103990000DFF01223C213C48FDF7C3FE00F014F965
+:1039A000002000F0CDF800F099F800F0C3F90022F3
+:1039B0004FF480713548FDF7B4FE0A20FDF7B0FDE5
+:1039C000002000F0BDF800F0B5F93148FFF76CFFBA
+:1039D000304C01200025A0732571608040F2052045
+:1039E0002D4E20802B48FFF785FFFFF7ABFF80B1FE
+:1039F00094ED120ADFED290A294930EE200A10EE73
+:103A0000100A84ED120A884203DD9FED260A84ED38
+:103A1000120A012124A2084600F068F9B4F9063020
+:103A200023A20121022000F061F9B4F9063024A29A
+:103A30000121032000F05AF9B4F9083023A2012132
+:103A4000042000F053F93088401C00B23080FA287E
+:103A500005D121483580416981F40061416100232D
+:103A60001A460C490120009500F0FEF9002309498F
+:103A70001A464C311846009500F0F6F900F05AF954
+:103A80000A20FDF74DFDADE7001C02400018024082
+:103A9000F8000020180000200000002000401C4614
+:103AA0000060EA4600000000474D3630323000002A
+:103AB0002020566F6C746167653A2025660000000F
+:103AC0002020416E676C653A2025660020205370E7
+:103AD0006565643A20256600001002402DE9F04734
+:103AE000002000F02DF8DFF8549000245FF000066D
+:103AF00009EBC60000EBD400002507784FFA86F8E2
+:103B0000380604EB050041B201D5012200E0002295
+:103B1000404600F035F878066D1C070EEDB2082D12
+:103B2000EED3761CF6B2802EE2D30834E4B2402CF9
+:103B3000DCD3BDE8F04700F0FDB800004A430008C0
+:103B4000F0B500210D4BFF260C46002201280FD0B6
+:103B500003EBC20580B16F5CC7F1FF076F54521CC5
+:103B6000D2B2802AF2D9491CC9B20829EDD3F0BDDE
+:103B700003EBC2056E54F2E76C54F0E758020020E4
+:103B800070B5802817D2002915DB3F2913DCCB172D
+:103B900001EB5375C5F3C70325F007050124094E52
+:103BA000491B8C4006EBC000012A05D0C15C022AEB
+:103BB00005D0A143C15470BDC15C2143FAE7614007
+:103BC000F8E700005802002070B5474D4FF48064BC
+:103BD000002221462846FDF7A4FD4FF4FA70FDF7B8
+:103BE0009FFC012221462846FDF79BFD0021AE20C7
+:103BF00000F024F90021084600F020F900211020EF
+:103C000000F01CF90021402000F018F9002181206B
+:103C100000F014F90021CF2000F010F90021A120BC
+:103C200000F00CF90021C82000F008F90021A620BE
+:103C300000F004F90021A82000F000F900213F2045
+:103C400000F0FCF80021D32000F0F8F8002108462D
+:103C500000F0F4F80021D52000F0F0F800218020D9
+:103C600000F0ECF80021D92000F0E8F80021F12064
+:103C700000F0E4F80021DA2000F0E0F80021122042
+:103C800000F0DCF80021DB2000F0D8F80021402013
+:103C900000F0D4F80021202000F0D0F8002102200C
+:103CA00000F0CCF800218D2000F0C8F8002114208D
+:103CB00000F0C4F80021A42000F0C0F80021A620E4
+:103CC00000F0BCF80021AF2000F0B8F80021AF20D0
+:103CD00000F0B4F80020FFF733FFBDE8704000218A
+:103CE000084600F041B80000000402400FB430B5AF
+:103CF000A1B00C46054680216846FCF7ABFA042DBE
+:103D000013D8142C11D8002C0FD027AA6846269956
+:103D1000FFF7F6F8C4F11500C0B200210DF800104D
+:103D20006A462146284600F071F821B030BC5DF8A3
+:103D300014FB000070B50B4E00242146002000F05B
+:103D400013F8002506EBC5000121005D00F076F8B0
+:103D50006D1CEDB2802DF5D3641CE4B2082CECD3BD
+:103D600070BD00005802002010B5801CC4B2B031F4
+:103D7000C8B2002100F062F8102040EA14100021BF
+:103D800000F05CF804F0F000BDE81040002100F005
+:103D900055B800002DE9F04F01EB410100EB400068
+:103DA00049068006040E203A4FEA1169D0B216493E
+:103DB00000EB4000A046002501EB800B00261BF81D
+:103DC00005704FFA89FA380601D5012200E0002279
+:103DD00061B25046FFF7D4FE7806641C070EE4B2C9
+:103DE000A4EB08000C2809D0761CF6B2082EEAD302
+:103DF0006D1CEDB20C2DE1D3BDE8F08F09F101008F
+:103E0000444600F0FF09F3E7D63E0008F0B5174638
+:103E10000C46064600250CE021463046FFF7BAFF67
+:103E2000641CE4B2142C02D90024761CF6B26D1C7A
+:103E3000EDB27A5D002AEFD1F0BD000013B508485D
+:103E40004FF4007309B1012200E000221946FDF78A
+:103E500068FC0A23012269460248FEF729F81CBDC6
+:103E600000040240200100202DE9F84F00252F46D4
+:103E70003E46DDF828B0994692463446804619B150
+:103E80000846FFF72FFD0446BAF1000002D0FFF705
+:103E900029FD0646B9F1000002D0FFF723FD0746D1
+:103EA000BBF1000002D0FFF71DFD05463B46324640
+:103EB000214640460095FFF7BFFCBDE8F88F0000A3
+:103EC00000000000000001020304060708090000CA
+:103ED00000000102030400000000000000000000D8
+:103EE0000000000000003F40000000000000000053
+:103EF0003000400030004000000009000BC03D00D1
+:103F00000BC03D00090018C024407FE022403180F2
+:103F10000000180024C01B000D8032400180038087
+:103F20001C4027401C80074000401000600000003B
+:103F30000000000000000000000000001F80204082
+:103F400040200000402020401F80000000000900A9
+:103F500006001F80060009000000040004003F80E6
+:103F600004000400000000100060000000000000D9
+:103F7000000004000400040004000400000000002D
+:103F800000400000000000000000002001C006000A
+:103F90003800400000001F802040204020401F804B
+:103FA0000000000010403FC000400000000018C0AA
+:103FB000214022402440184000001080204024402E
+:103FC00024401B80000002000D0011003FC0014092
+:103FD00000003C80244024402440238000001F80B7
+:103FE000244024403440038000003000200027C0DB
+:103FF0003800200000001B802440244024401B8007
+:1040000000001C0022C0224022401F80000000004F
+:1040100000000840000000000000000000000460F4
+:10402000000000000000000004000A0011002080D1
+:1040300040400900090009000900090000000000D3
+:104040004040208011000A00040018002000234096
+:104050002400180000001F802040274029401F40F6
+:104060000000004007C039000F0001C000402040A0
+:104070003FC0244024401B8000001F80204020407F
+:1040800020403080000020403FC0204020401F8062
+:10409000000020403FC024402E4030C0000020409F
+:1040A0003FC024402E00300000000F001080204050
+:1040B00022403380020020403FC0040004003FC083
+:1040C0002040204020403FC02040204000000060B1
+:1040D000202020203FC02000200020403FC024405E
+:1040E0000B0030C0204020403FC020400040004036
+:1040F00000C03FC03C0003C03C003FC00000204067
+:104100003FC00C4023003FC020001F8020402040C3
+:1041100020401F80000020403FC0244024001800A1
+:1041200000001F802140214020E01FA0000020400F
+:104130003FC02440260019C0004018C0244024403D
+:10414000224031800000300020403FC0204030003D
+:10415000000020003F80004000403F802000200001
+:104160003E0001C0070038002000380007C03C00B6
+:1041700007C038000000204039C0060039C0204088
+:1041800000002000384007C03840200000003040C8
+:1041900021C02640384020C00000000000007FE021
+:1041A000402040200000000070000C000380004010
+:1041B00000000000402040207FE0000000000000E0
+:1041C000200040002000000000000010001000103F
+:1041D000001000100010000000004000000000006F
+:1041E0000000000002800540054003C000402000A0
+:1041F0003FC00440044003800000000003800440EE
+:1042000004400640000000000380044024403FC0FA
+:10421000004000000380054005400340000000000E
+:1042200004401FC0244024402000000002E005504C
+:1042300005500650042020403FC00440040003C045
+:1042400000400000044027C00040000000000010B3
+:104250000010041027E00000000020403FC0014093
+:10426000070004C00440204020403FC00040004000
+:10427000000007C0040007C0040003C000000440A1
+:1042800007C00440040003C0004000000380044055
+:10429000044003800000041007F004500440038031
+:1042A0000000000003800440045007F000100440A8
+:1042B00007C0024004000400000000000640054062
+:1042C000054004C00000000004001F8004400040BE
+:1042D0000000040007800040044007C000400400C4
+:1042E000070004C0018006000400060001C00700AA
+:1042F00001C006000000044006C0010006C00440E2
+:1043000000000410071004E0018006000400000013
+:10431000044005C006400440000000000000040006
+:104320007BE040200000000000000000FFF00000E3
+:104330000000000040207BE004000000000040007E
+:10434000800040002000200040000000000000002D
+:10435000000000000000000000000000000000005D
+:10436000000000000000000000000000000000004D
+:10437000000000000000000000000000000000003D
+:10438000000000000000000000000000000000002D
+:104390000006000000000000001E000000000000F9
+:1043A00000DE00000000000000D800000000000057
+:1043B00000D800000000000000D80000000000004D
+:1043C00000DE00000000000000FE00000000000011
+:1043D00000F6000000000000007200000000000075
+:1043E0000000000000000000007C00000000000051
+:1043F00000FE00000000000000C6000000000000F9
+:1044000000C600000000000000C600000000000020
+:1044100000FE000000000000007C00000000000022
+:104420000000000000000000001E0000000000006E
+:1044300000DE00000000000000D6000000000000C8
+:1044400000D600000000000000D6000000000000C0
+:1044500000D600000000000000DE40000000000068
+:1044600000FE600000000010006C700000000030D2
+:1044700000007800000000F0007C7C00000007F0E5
+:1044800000FE7E0000003FF000C67F000001FFF04C
+:1044900000C67F80000FFFF000C67FC0007FFFF0E6
+:1044A00000FE7FE003FFFFF0007C7FF03FFFFFF0A6
+:1044B00000027FF83FFFFFF000067FFC3FFFFFF0A8
+:1044C000001E7FFE3FFFFFF000BC7FFF3FFFFFF0BD
+:1044D00000E07FFFBFFFFF8000F87FFFFFFFFC00D1
+:1044E000003E7FFFFFFFE000000E7FFFFFFF0000A8
+:1044F00000B87FFFFFF8000000E07FFFFFF0000042
+:1045000000FE7FFFFFF00000001E7FFFFFF00000B5
+:1045100000027FFFFFF0000000007FEFFFF00200CD
+:1045200000067FE7FFF00200000E7FE3FFF00200CD
+:10453000001C7FE1FFF8030000BA7FE0FFFC0300EE
+:1045400000F67FE07FFE038000E67FE03FFF038010
+:1045500000F67FE03FFF83C0003E7FE03FFFC3C027
+:10456000000E7FE03FFFE3E000027FE03FFFF3E06B
+:1045700000007FE03FFFFBF000027FE03FFFFFF025
+:1045800000667FE03FFFFFF800F67FE03FFFFFF8A7
+:1045900000D67FE03FFFFFFC00D67FF07FFFFFFCEF
+:1045A00000D67FF8FFF7FFFE00D67FFFFFF3FFFE88
+:1045B00000DE3FFFFFE1FFFF008C3FFFFFE0FFCF8A
+:1045C00000401FFFFFC07FC780C01FFFFFC03FC369
+:1045D00080C00FFFFF801FC1C0FE07FFFF000FC09C
+:1045E000C0FE03FFFE0007C060C001FFFC0003C067
+:1045F00020C0007FF00001C00086000F800000C0D6
+:10460000001600000000004000D60000000000007E
+:1046100000D600000000000000D6000000000000EE
+:1046200000D600000000000000D6000000000000DE
+:1046300000D000000000000000C0000000000000EA
+:104640000006000000000000001E00000000000046
+:1046500000DE00000000000000D8000000000000A4
+:1046600000D800000000000000D80000000000009A
+:1046700000DE00000000000000DE0000000000007E
+:1046800000F60000000000000072000000000000C2
+:1046900000000000000000000062000000000000B8
+:1046A00000F600000000000000F60000000000001E
+:1046B00000D600000000000000D60000000000004E
+:1046C00000D600000000000000DE00000000000036
+:1046D000008C00000000000000000000000000004E
+:1046E00000000000000000000000000000000000CA
+:1046F00000000000000000000000000000000000BA
+:1047000000000000000000000000000000000000A9
+:104710000000000000000000000000000000000099
+:104720000000000000000000000000000000000089
+:104730000000000000000000000000000000000079
+:104740000000000000000000000000061016000637
+:104750001016000074470008000000201800000038
+:10476000442F00088C47000818000020780A000039
+:10477000542F0008000000000024F4000000000096
+:0C4780000100000010000000000000001C
 :04000005080001AD41
 :00000001FF
diff --git a/Standard_robot/Src/can.c b/Standard_robot/Src/can.c
new file mode 100644
index 0000000000000000000000000000000000000000..dc0dc5ca42ed57be5c5e0c75563e48f9d33c1623
--- /dev/null
+++ b/Standard_robot/Src/can.c
@@ -0,0 +1,117 @@
+/**
+  ******************************************************************************
+  * File Name          : CAN.c
+  * Description        : This file provides code for the configuration
+  *                      of the CAN instances.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under BSD 3-Clause license,
+  * the "License"; You may not use this file except in compliance with the
+  * License. You may obtain a copy of the License at:
+  *                        opensource.org/licenses/BSD-3-Clause
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "can.h"
+
+/* USER CODE BEGIN 0 */
+
+/* USER CODE END 0 */
+
+CAN_HandleTypeDef hcan1;
+
+/* CAN1 init function */
+void MX_CAN1_Init(void)
+{
+
+  hcan1.Instance = CAN1;
+  hcan1.Init.Prescaler = 3;
+  hcan1.Init.Mode = CAN_MODE_NORMAL;
+  hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ;
+  hcan1.Init.TimeSeg1 = CAN_BS1_9TQ;
+  hcan1.Init.TimeSeg2 = CAN_BS2_4TQ;
+  hcan1.Init.TimeTriggeredMode = DISABLE;
+  hcan1.Init.AutoBusOff = ENABLE;
+  hcan1.Init.AutoWakeUp = DISABLE;
+  hcan1.Init.AutoRetransmission = DISABLE;
+  hcan1.Init.ReceiveFifoLocked = DISABLE;
+  hcan1.Init.TransmitFifoPriority = DISABLE;
+  if (HAL_CAN_Init(&hcan1) != HAL_OK)
+  {
+    Error_Handler();
+  }
+
+}
+
+void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle)
+{
+
+  GPIO_InitTypeDef GPIO_InitStruct = {0};
+  if(canHandle->Instance==CAN1)
+  {
+  /* USER CODE BEGIN CAN1_MspInit 0 */
+
+  /* USER CODE END CAN1_MspInit 0 */
+    /* CAN1 clock enable */
+    __HAL_RCC_CAN1_CLK_ENABLE();
+  
+    __HAL_RCC_GPIOD_CLK_ENABLE();
+    /**CAN1 GPIO Configuration    
+    PD0     ------> CAN1_RX
+    PD1     ------> CAN1_TX 
+    */
+    GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
+    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+    GPIO_InitStruct.Alternate = GPIO_AF9_CAN1;
+    HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
+
+    /* CAN1 interrupt Init */
+    HAL_NVIC_SetPriority(CAN1_TX_IRQn, 0, 0);
+    HAL_NVIC_EnableIRQ(CAN1_TX_IRQn);
+    HAL_NVIC_SetPriority(CAN1_RX0_IRQn, 0, 0);
+    HAL_NVIC_EnableIRQ(CAN1_RX0_IRQn);
+  /* USER CODE BEGIN CAN1_MspInit 1 */
+
+  /* USER CODE END CAN1_MspInit 1 */
+  }
+}
+
+void HAL_CAN_MspDeInit(CAN_HandleTypeDef* canHandle)
+{
+
+  if(canHandle->Instance==CAN1)
+  {
+  /* USER CODE BEGIN CAN1_MspDeInit 0 */
+
+  /* USER CODE END CAN1_MspDeInit 0 */
+    /* Peripheral clock disable */
+    __HAL_RCC_CAN1_CLK_DISABLE();
+  
+    /**CAN1 GPIO Configuration    
+    PD0     ------> CAN1_RX
+    PD1     ------> CAN1_TX 
+    */
+    HAL_GPIO_DeInit(GPIOD, GPIO_PIN_0|GPIO_PIN_1);
+
+    /* CAN1 interrupt Deinit */
+    HAL_NVIC_DisableIRQ(CAN1_TX_IRQn);
+    HAL_NVIC_DisableIRQ(CAN1_RX0_IRQn);
+  /* USER CODE BEGIN CAN1_MspDeInit 1 */
+
+  /* USER CODE END CAN1_MspDeInit 1 */
+  }
+} 
+
+/* USER CODE BEGIN 1 */
+
+/* USER CODE END 1 */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Standard_robot/Src/gpio.c b/Standard_robot/Src/gpio.c
index 69a65cb881223e9b9071adecf941891a80452ee1..2f78994346ee036490ac34cb7184d2c823ff30c5 100644
--- a/Standard_robot/Src/gpio.c
+++ b/Standard_robot/Src/gpio.c
@@ -45,15 +45,31 @@ void MX_GPIO_Init(void)
   /* GPIO Ports Clock Enable */
   __HAL_RCC_GPIOB_CLK_ENABLE();
   __HAL_RCC_GPIOA_CLK_ENABLE();
+  __HAL_RCC_GPIOD_CLK_ENABLE();
+  __HAL_RCC_GPIOI_CLK_ENABLE();
   __HAL_RCC_GPIOH_CLK_ENABLE();
   __HAL_RCC_GPIOG_CLK_ENABLE();
+  __HAL_RCC_GPIOE_CLK_ENABLE();
+  __HAL_RCC_GPIOF_CLK_ENABLE();
 
   /*Configure GPIO pin Output Level */
   HAL_GPIO_WritePin(GPIOB, OLED_DC_Pin|OLED_RST_Pin, GPIO_PIN_RESET);
 
+  /*Configure GPIO pin Output Level */
+  HAL_GPIO_WritePin(Z_GPIO_Port, Z_Pin, GPIO_PIN_RESET);
+
+  /*Configure GPIO pin Output Level */
+  HAL_GPIO_WritePin(GPIOH, POWER1_CTRL_Pin|POWER2_CTRL_Pin|POWER4_CTRL_Pin, GPIO_PIN_RESET);
+
   /*Configure GPIO pin Output Level */
   HAL_GPIO_WritePin(LED_A_GPIO_Port, LED_A_Pin, GPIO_PIN_RESET);
 
+  /*Configure GPIO pin Output Level */
+  HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);
+
+  /*Configure GPIO pin Output Level */
+  HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_RESET);
+
   /*Configure GPIO pins : PBPin PBPin */
   GPIO_InitStruct.Pin = OLED_DC_Pin|OLED_RST_Pin;
   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
@@ -61,6 +77,26 @@ void MX_GPIO_Init(void)
   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 
+  /*Configure GPIO pin : PtPin */
+  GPIO_InitStruct.Pin = Z_Pin;
+  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+  HAL_GPIO_Init(Z_GPIO_Port, &GPIO_InitStruct);
+
+  /*Configure GPIO pins : PHPin PHPin PHPin */
+  GPIO_InitStruct.Pin = POWER1_CTRL_Pin|POWER2_CTRL_Pin|POWER4_CTRL_Pin;
+  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+  HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
+
+  /*Configure GPIO pin : PtPin */
+  GPIO_InitStruct.Pin = POWER3_CTRL_Pin;
+  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  HAL_GPIO_Init(POWER3_CTRL_GPIO_Port, &GPIO_InitStruct);
+
   /*Configure GPIO pin : PtPin */
   GPIO_InitStruct.Pin = LED_A_Pin;
   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
@@ -68,6 +104,26 @@ void MX_GPIO_Init(void)
   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
   HAL_GPIO_Init(LED_A_GPIO_Port, &GPIO_InitStruct);
 
+  /*Configure GPIO pin : PtPin */
+  GPIO_InitStruct.Pin = KEY_Pin;
+  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  HAL_GPIO_Init(KEY_GPIO_Port, &GPIO_InitStruct);
+
+  /*Configure GPIO pin : PtPin */
+  GPIO_InitStruct.Pin = LED_RED_Pin;
+  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+  HAL_GPIO_Init(LED_RED_GPIO_Port, &GPIO_InitStruct);
+
+  /*Configure GPIO pin : PtPin */
+  GPIO_InitStruct.Pin = LED_GREEN_Pin;
+  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+  HAL_GPIO_Init(LED_GREEN_GPIO_Port, &GPIO_InitStruct);
+
 }
 
 /* USER CODE BEGIN 2 */
diff --git a/Standard_robot/Src/main.c b/Standard_robot/Src/main.c
index 6142dca6b372caa98e8ef324f96c894d05c016f7..c5c827b5ca6bc18fdd99b95e60470a0be43ff8a7 100644
--- a/Standard_robot/Src/main.c
+++ b/Standard_robot/Src/main.c
@@ -21,8 +21,10 @@
 /* Includes ------------------------------------------------------------------*/
 #include "main.h"
 #include "adc.h"
+#include "can.h"
 #include "dma.h"
 #include "spi.h"
+#include "tim.h"
 #include "usart.h"
 #include "gpio.h"
 
@@ -31,6 +33,12 @@
 
 #include "bsp_oled.h"
 #include "bsp_usart.h"
+#include "bsp_key.h"
+#include "bsp_led.h"
+#include "bsp_can.h"
+
+#include "motor.h"
+#include "pid.h"
 #include "oled.h"
 #include "string.h"
 
@@ -54,6 +62,10 @@
 /* Private variables ---------------------------------------------------------*/
 
 /* USER CODE BEGIN PV */
+int16_t led_cnt;
+float target_speed;
+motor_t gm6020;
+motor_t m2006;
 
 /* USER CODE END PV */
 
@@ -101,33 +113,70 @@ int main(void)
   MX_USART1_UART_Init();
   MX_ADC1_Init();
   MX_SPI1_Init();
+  MX_CAN1_Init();
+  MX_TIM1_Init();
   /* USER CODE BEGIN 2 */
-	usart1_tx_dma_init();
+	HAL_GPIO_WritePin(GPIOH, POWER1_CTRL_Pin|POWER2_CTRL_Pin|POWER3_CTRL_Pin|POWER4_CTRL_Pin, GPIO_PIN_SET); // switch on 24v power
 	
+	//Init OLED
 	oled_init();
 	oled_clear(Pen_Clear);
 	oled_LOGO();
 	oled_refresh_gram();
 	
 	HAL_GPIO_WritePin(LED_A_GPIO_Port, LED_A_Pin, GPIO_PIN_RESET);
-	
-	HAL_Delay(500);
+	HAL_Delay(10);  
 	
 	oled_clear(Pen_Clear);
 	oled_refresh_gram();
 	
+	
+	can_user_init(&hcan1);                   // config can filter, start can
+	
+	
   /* USER CODE END 2 */
+	gm6020.type = GM6020;
+	gm6020.can_info.can_id = 0;
+	gm6020.can_info.tx_id = 1;
+	gm6020.can_info.rx_id = 0x205;
 
   /* Infinite loop */
   /* USER CODE BEGIN WHILE */
   while (1)
   {
     /* USER CODE END WHILE */
-	
-    /* USER CODE BEGIN 3 */	
-		oled_print_button(1, 1);
-    HAL_Delay(100);
+    /* USER CODE BEGIN 3 */		
+		
+		get_motor_data(&gm6020);
+		
+		/* scan is key be pressd down to change target speed and pwm pulse */
+    if (key_scan())
+    {
+			gm6020.voltage += 10000;
+      if (gm6020.voltage > 30000)
+      {
+				gm6020.voltage = 0;
+      }
+    }
+		
+		oled_printf(1, 1, "GM6020");
+		oled_printf(2, 1,"  Voltage: %f", gm6020.info.GM6020_info.angle);
+		oled_printf(3, 1,"  Angle: %f", gm6020.info.GM6020_info.angle);
+		oled_printf(4, 1,"  Speed: %f", gm6020.info.GM6020_info.speed);
+		
+     /* led blink */
+    led_cnt ++;
+    if (led_cnt == 250)
+    {
+      led_cnt = 0;
+      LED_RED_TOGGLE(); //blink cycle 500ms
+    }
+    
+    set_motor_voltage(1, &gm6020, NULL, NULL, NULL); //0x1ff
+		set_motor_voltage(0, &m2006, NULL, NULL, NULL); //0x200
 		
+		oled_refresh_gram();
+		HAL_Delay(10);	
   }
   /* USER CODE END 3 */
 }
diff --git a/Standard_robot/Src/stm32f4xx_it.c b/Standard_robot/Src/stm32f4xx_it.c
index 25e8ef6f727b92ad5bb0389ec5f6bb6c1c284b45..c808776deb8df3793869dc4a9a6fba7e6a780543 100644
--- a/Standard_robot/Src/stm32f4xx_it.c
+++ b/Standard_robot/Src/stm32f4xx_it.c
@@ -56,6 +56,7 @@
 /* USER CODE END 0 */
 
 /* External variables --------------------------------------------------------*/
+extern CAN_HandleTypeDef hcan1;
 extern DMA_HandleTypeDef hdma_usart1_tx;
 extern UART_HandleTypeDef huart1;
 /* USER CODE BEGIN EV */
@@ -198,6 +199,34 @@ void SysTick_Handler(void)
 /* please refer to the startup file (startup_stm32f4xx.s).                    */
 /******************************************************************************/
 
+/**
+  * @brief This function handles CAN1 TX interrupts.
+  */
+void CAN1_TX_IRQHandler(void)
+{
+  /* USER CODE BEGIN CAN1_TX_IRQn 0 */
+
+  /* USER CODE END CAN1_TX_IRQn 0 */
+  HAL_CAN_IRQHandler(&hcan1);
+  /* USER CODE BEGIN CAN1_TX_IRQn 1 */
+
+  /* USER CODE END CAN1_TX_IRQn 1 */
+}
+
+/**
+  * @brief This function handles CAN1 RX0 interrupts.
+  */
+void CAN1_RX0_IRQHandler(void)
+{
+  /* USER CODE BEGIN CAN1_RX0_IRQn 0 */
+
+  /* USER CODE END CAN1_RX0_IRQn 0 */
+  HAL_CAN_IRQHandler(&hcan1);
+  /* USER CODE BEGIN CAN1_RX0_IRQn 1 */
+
+  /* USER CODE END CAN1_RX0_IRQn 1 */
+}
+
 /**
   * @brief This function handles USART1 global interrupt.
   */
diff --git a/Standard_robot/Src/tim.c b/Standard_robot/Src/tim.c
new file mode 100644
index 0000000000000000000000000000000000000000..e3ea8b8d3f36a84801647b2448d81c9dc307c652
--- /dev/null
+++ b/Standard_robot/Src/tim.c
@@ -0,0 +1,165 @@
+/**
+  ******************************************************************************
+  * File Name          : TIM.c
+  * Description        : This file provides code for the configuration
+  *                      of the TIM instances.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under BSD 3-Clause license,
+  * the "License"; You may not use this file except in compliance with the
+  * License. You may obtain a copy of the License at:
+  *                        opensource.org/licenses/BSD-3-Clause
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "tim.h"
+
+/* USER CODE BEGIN 0 */
+
+/* USER CODE END 0 */
+
+TIM_HandleTypeDef htim1;
+
+/* TIM1 init function */
+void MX_TIM1_Init(void)
+{
+  TIM_MasterConfigTypeDef sMasterConfig = {0};
+  TIM_OC_InitTypeDef sConfigOC = {0};
+  TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
+
+  htim1.Instance = TIM1;
+  htim1.Init.Prescaler = 167;
+  htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
+  htim1.Init.Period = 20000;
+  htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+  htim1.Init.RepetitionCounter = 0;
+  htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
+  if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
+  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
+  if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  sConfigOC.OCMode = TIM_OCMODE_PWM1;
+  sConfigOC.Pulse = 1000;
+  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
+  sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
+  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
+  sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
+  sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
+  if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
+  sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
+  sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
+  sBreakDeadTimeConfig.DeadTime = 0;
+  sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
+  sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
+  sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
+  if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  HAL_TIM_MspPostInit(&htim1);
+
+}
+
+void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* tim_pwmHandle)
+{
+
+  if(tim_pwmHandle->Instance==TIM1)
+  {
+  /* USER CODE BEGIN TIM1_MspInit 0 */
+
+  /* USER CODE END TIM1_MspInit 0 */
+    /* TIM1 clock enable */
+    __HAL_RCC_TIM1_CLK_ENABLE();
+  /* USER CODE BEGIN TIM1_MspInit 1 */
+
+  /* USER CODE END TIM1_MspInit 1 */
+  }
+}
+void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
+{
+
+  GPIO_InitTypeDef GPIO_InitStruct = {0};
+  if(timHandle->Instance==TIM1)
+  {
+  /* USER CODE BEGIN TIM1_MspPostInit 0 */
+
+  /* USER CODE END TIM1_MspPostInit 0 */
+  
+    __HAL_RCC_GPIOA_CLK_ENABLE();
+    __HAL_RCC_GPIOE_CLK_ENABLE();
+    /**TIM1 GPIO Configuration    
+    PA9     ------> TIM1_CH2
+    PA8     ------> TIM1_CH1
+    PE13     ------> TIM1_CH3
+    PE14     ------> TIM1_CH4 
+    */
+    GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_8;
+    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+    GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
+    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
+    GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14;
+    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+    GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
+    HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
+
+  /* USER CODE BEGIN TIM1_MspPostInit 1 */
+
+  /* USER CODE END TIM1_MspPostInit 1 */
+  }
+
+}
+
+void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef* tim_pwmHandle)
+{
+
+  if(tim_pwmHandle->Instance==TIM1)
+  {
+  /* USER CODE BEGIN TIM1_MspDeInit 0 */
+
+  /* USER CODE END TIM1_MspDeInit 0 */
+    /* Peripheral clock disable */
+    __HAL_RCC_TIM1_CLK_DISABLE();
+  /* USER CODE BEGIN TIM1_MspDeInit 1 */
+
+  /* USER CODE END TIM1_MspDeInit 1 */
+  }
+} 
+
+/* USER CODE BEGIN 1 */
+
+/* USER CODE END 1 */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Standard_robot/Src/usart.c b/Standard_robot/Src/usart.c
index 8aafaf24393c193cb0e9c7c9f6e2b7884092af06..4d313aeffe63e84ce9676e01c8574f21230134c3 100644
--- a/Standard_robot/Src/usart.c
+++ b/Standard_robot/Src/usart.c
@@ -66,7 +66,7 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
     */
     GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_6;
     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
-    GPIO_InitStruct.Pull = GPIO_PULLUP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
     GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
diff --git a/Standard_robot/Standard_robot.ioc b/Standard_robot/Standard_robot.ioc
index dbfc3f9eaf516dcd323cc26271489af1be2b0f83..8255080ffd09ddde12160587fa066778e04085b3 100644
--- a/Standard_robot/Standard_robot.ioc
+++ b/Standard_robot/Standard_robot.ioc
@@ -6,6 +6,12 @@ ADC1.NbrOfConversionFlag=1
 ADC1.Rank-0\#ChannelRegularConversion=1
 ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_3CYCLES
 ADC1.master=1
+CAN1.ABOM=ENABLE
+CAN1.BS1=CAN_BS1_9TQ
+CAN1.BS2=CAN_BS2_4TQ
+CAN1.CalculateTimeQuantum=71.42857142857143
+CAN1.IPParameters=CalculateTimeQuantum,Prescaler,ABOM,BS1,BS2
+CAN1.Prescaler=3
 Dma.Request0=USART1_TX
 Dma.RequestsNb=1
 Dma.USART1_TX.0.Direction=DMA_MEMORY_TO_PERIPH
@@ -19,41 +25,61 @@ Dma.USART1_TX.0.PeriphInc=DMA_PINC_DISABLE
 Dma.USART1_TX.0.Priority=DMA_PRIORITY_LOW
 Dma.USART1_TX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode
 File.Version=6
+GPIO.groupedBy=Group By Peripherals
 KeepUserPlacement=false
 Mcu.Family=STM32F4
 Mcu.IP0=ADC1
-Mcu.IP1=DMA
-Mcu.IP2=NVIC
-Mcu.IP3=RCC
-Mcu.IP4=SPI1
-Mcu.IP5=SYS
-Mcu.IP6=USART1
-Mcu.IPNb=7
+Mcu.IP1=CAN1
+Mcu.IP2=DMA
+Mcu.IP3=NVIC
+Mcu.IP4=RCC
+Mcu.IP5=SPI1
+Mcu.IP6=SYS
+Mcu.IP7=TIM1
+Mcu.IP8=USART1
+Mcu.IPNb=9
 Mcu.Name=STM32F427I(G-I)Hx
 Mcu.Package=UFBGA176
 Mcu.Pin0=PB4
 Mcu.Pin1=PB3
-Mcu.Pin10=PA6
-Mcu.Pin11=PA7
-Mcu.Pin12=PB10
-Mcu.Pin13=VP_SYS_VS_Systick
+Mcu.Pin10=PA9
+Mcu.Pin11=PH2
+Mcu.Pin12=PA8
+Mcu.Pin13=PH0/OSC_IN
+Mcu.Pin14=PH3
+Mcu.Pin15=PH1/OSC_OUT
+Mcu.Pin16=PH4
+Mcu.Pin17=PG8
+Mcu.Pin18=PH5
+Mcu.Pin19=PB2/BOOT1
 Mcu.Pin2=PA14
+Mcu.Pin20=PE13
+Mcu.Pin21=PA6
+Mcu.Pin22=PE11
+Mcu.Pin23=PE14
+Mcu.Pin24=PA7
+Mcu.Pin25=PF14
+Mcu.Pin26=PB10
+Mcu.Pin27=VP_SYS_VS_Systick
 Mcu.Pin3=PA13
 Mcu.Pin4=PB9
 Mcu.Pin5=PB7
 Mcu.Pin6=PB6
-Mcu.Pin7=PH0/OSC_IN
-Mcu.Pin8=PH1/OSC_OUT
-Mcu.Pin9=PG8
-Mcu.PinsNb=14
+Mcu.Pin7=PD0
+Mcu.Pin8=PD1
+Mcu.Pin9=PI2
+Mcu.PinsNb=28
 Mcu.ThirdPartyNb=0
 Mcu.UserConstants=
 Mcu.UserName=STM32F427IIHx
-MxCube.Version=5.3.0
-MxDb.Version=DB.5.0.30
+MxCube.Version=5.5.0
+MxDb.Version=DB.5.0.50
 NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false
+NVIC.CAN1_RX0_IRQn=true\:0\:0\:false\:false\:true\:true\:true
+NVIC.CAN1_TX_IRQn=true\:0\:0\:false\:false\:true\:true\:true
 NVIC.DMA2_Stream7_IRQn=true\:0\:0\:false\:false\:true\:false\:true
 NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false
+NVIC.ForceEnableDMAVector=true
 NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false
 NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false
 NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false
@@ -71,10 +97,16 @@ PA6.Signal=ADCx_IN6
 PA7.Locked=true
 PA7.Mode=Full_Duplex_Master
 PA7.Signal=SPI1_MOSI
+PA8.Signal=S_TIM1_CH1
+PA9.Signal=S_TIM1_CH2
 PB10.GPIOParameters=GPIO_Label
 PB10.GPIO_Label=OLED_RST
 PB10.Locked=true
 PB10.Signal=GPIO_Output
+PB2/BOOT1.GPIOParameters=GPIO_Label
+PB2/BOOT1.GPIO_Label=KEY
+PB2/BOOT1.Locked=true
+PB2/BOOT1.Signal=GPIO_Input
 PB3.Mode=Full_Duplex_Master
 PB3.Signal=SPI1_SCK
 PB4.Mode=Full_Duplex_Master
@@ -95,6 +127,24 @@ PCC.Seq0=0
 PCC.Series=STM32F4
 PCC.Temperature=25
 PCC.Vdd=3.3
+PD0.Locked=true
+PD0.Mode=Master
+PD0.Signal=CAN1_RX
+PD1.Locked=true
+PD1.Mode=Master
+PD1.Signal=CAN1_TX
+PE11.GPIOParameters=GPIO_Label
+PE11.GPIO_Label=LED_RED
+PE11.Locked=true
+PE11.Signal=GPIO_Output
+PE13.Locked=true
+PE13.Signal=S_TIM1_CH3
+PE14.Locked=true
+PE14.Signal=S_TIM1_CH4
+PF14.GPIOParameters=GPIO_Label
+PF14.GPIO_Label=LED_GREEN
+PF14.Locked=true
+PF14.Signal=GPIO_Output
 PG8.GPIOParameters=GPIO_Label
 PG8.GPIO_Label=LED_A
 PG8.Locked=true
@@ -103,6 +153,26 @@ PH0/OSC_IN.Mode=HSE-External-Oscillator
 PH0/OSC_IN.Signal=RCC_OSC_IN
 PH1/OSC_OUT.Mode=HSE-External-Oscillator
 PH1/OSC_OUT.Signal=RCC_OSC_OUT
+PH2.GPIOParameters=GPIO_Label
+PH2.GPIO_Label=POWER1_CTRL
+PH2.Locked=true
+PH2.Signal=GPIO_Output
+PH3.GPIOParameters=GPIO_Label
+PH3.GPIO_Label=POWER2_CTRL
+PH3.Locked=true
+PH3.Signal=GPIO_Output
+PH4.GPIOParameters=GPIO_Label
+PH4.GPIO_Label=POWER3_CTRL
+PH4.Locked=true
+PH4.Signal=GPIO_Input
+PH5.GPIOParameters=GPIO_Label
+PH5.GPIO_Label=POWER4_CTRL
+PH5.Locked=true
+PH5.Signal=GPIO_Output
+PI2.GPIOParameters=GPIO_Label
+PI2.GPIO_Label=Z
+PI2.Locked=true
+PI2.Signal=GPIO_Output
 PinOutPanel.CurrentBGAView=Top
 PinOutPanel.RotationAngle=0
 ProjectManager.AskForMigrate=true
@@ -131,7 +201,7 @@ ProjectManager.StackSize=0x400
 ProjectManager.TargetToolchain=MDK-ARM V5
 ProjectManager.ToolChainLocation=
 ProjectManager.UnderRoot=false
-ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_USART1_UART_Init-USART1-false-HAL-true,4-MX_ADC1_Init-ADC1-false-HAL-true,5-MX_SPI1_Init-SPI1-false-HAL-true
+ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-SystemClock_Config-RCC-false-HAL-false,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_ADC1_Init-ADC1-false-HAL-true,6-MX_SPI1_Init-SPI1-false-HAL-true,7-MX_CAN1_Init-CAN1-false-HAL-true,8-MX_TIM1_Init-TIM1-false-HAL-true
 RCC.48MHZClocksFreq_Value=84000000
 RCC.AHBFreq_Value=168000000
 RCC.APB1CLKDivider=RCC_HCLK_DIV4
@@ -172,12 +242,31 @@ RCC.VcooutputI2S=192000000
 RCC.VcooutputI2SQ=192000000
 SH.ADCx_IN6.0=ADC1_IN6,IN6
 SH.ADCx_IN6.ConfNb=1
+SH.S_TIM1_CH1.0=TIM1_CH1,PWM Generation1 CH1
+SH.S_TIM1_CH1.ConfNb=1
+SH.S_TIM1_CH2.0=TIM1_CH2,PWM Generation2 CH2
+SH.S_TIM1_CH2.ConfNb=1
+SH.S_TIM1_CH3.0=TIM1_CH3,PWM Generation3 CH3
+SH.S_TIM1_CH3.ConfNb=1
+SH.S_TIM1_CH4.0=TIM1_CH4,PWM Generation4 CH4
+SH.S_TIM1_CH4.ConfNb=1
 SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_64
 SPI1.CalculateBaudRate=1.3125 MBits/s
 SPI1.Direction=SPI_DIRECTION_2LINES
 SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler
 SPI1.Mode=SPI_MODE_MASTER
 SPI1.VirtualType=VM_MASTER
+TIM1.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
+TIM1.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2
+TIM1.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3
+TIM1.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4
+TIM1.IPParameters=Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2,Channel-PWM Generation3 CH3,Channel-PWM Generation4 CH4,Prescaler,Period,Pulse-PWM Generation1 CH1,Pulse-PWM Generation2 CH2,Pulse-PWM Generation3 CH3,Pulse-PWM Generation4 CH4
+TIM1.Period=20000
+TIM1.Prescaler=167
+TIM1.Pulse-PWM\ Generation1\ CH1=1000
+TIM1.Pulse-PWM\ Generation2\ CH2=1000
+TIM1.Pulse-PWM\ Generation3\ CH3=1000
+TIM1.Pulse-PWM\ Generation4\ CH4=1000
 USART1.IPParameters=VirtualMode
 USART1.VirtualMode=VM_ASYNC
 VP_SYS_VS_Systick.Mode=SysTick