diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c
index 632ddd4..7d058ef 100644
--- a/Core/Src/gpio.c
+++ b/Core/Src/gpio.c
@@ -33,14 +33,14 @@
/* USER CODE END 1 */
/** Configure pins as
- * Analog
- * Input
- * Output
- * EVENT_OUT
- * EXTI
- * Free pins are configured automatically as Analog (this feature is enabled through
- * the Code Generation settings)
-*/
+ * Analog
+ * Input
+ * Output
+ * EVENT_OUT
+ * EXTI
+ * Free pins are configured automatically as Analog (this feature is enabled through
+ * the Code Generation settings)
+ */
void MX_GPIO_Init(void)
{
@@ -56,7 +56,7 @@ void MX_GPIO_Init(void)
LL_GPIO_ResetOutputPin(LED_BLUE_GPIO_Port, LED_BLUE_Pin);
/**/
- LL_GPIO_ResetOutputPin(GPIOB, OLED_SDA_Pin|OLDE_SCK_Pin);
+ LL_GPIO_ResetOutputPin(GPIOB, OLED_SDA_Pin | OLDE_SCK_Pin);
/**/
GPIO_InitStruct.Pin = LED_BLUE_Pin;
@@ -66,32 +66,27 @@ void MX_GPIO_Init(void)
LL_GPIO_Init(LED_BLUE_GPIO_Port, &GPIO_InitStruct);
/**/
- GPIO_InitStruct.Pin = LL_GPIO_PIN_14|LL_GPIO_PIN_15;
+ GPIO_InitStruct.Pin = LL_GPIO_PIN_14 | LL_GPIO_PIN_15;
GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG;
LL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/**/
- GPIO_InitStruct.Pin = LL_GPIO_PIN_0|LL_GPIO_PIN_2|LL_GPIO_PIN_3|LL_GPIO_PIN_4
- |LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7|LL_GPIO_PIN_8
- |LL_GPIO_PIN_11|LL_GPIO_PIN_12|LL_GPIO_PIN_15;
+ GPIO_InitStruct.Pin = LL_GPIO_PIN_0 | LL_GPIO_PIN_2 | LL_GPIO_PIN_3 | LL_GPIO_PIN_4 | LL_GPIO_PIN_5 | LL_GPIO_PIN_6 | LL_GPIO_PIN_7 | LL_GPIO_PIN_8 | LL_GPIO_PIN_11 | LL_GPIO_PIN_12 | LL_GPIO_PIN_15;
GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG;
LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/**/
- GPIO_InitStruct.Pin = LL_GPIO_PIN_0|LL_GPIO_PIN_1|LL_GPIO_PIN_2|LL_GPIO_PIN_10
- |LL_GPIO_PIN_11|LL_GPIO_PIN_14|LL_GPIO_PIN_15|LL_GPIO_PIN_3
- |LL_GPIO_PIN_4|LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7
- |LL_GPIO_PIN_8|LL_GPIO_PIN_9;
+ GPIO_InitStruct.Pin = LL_GPIO_PIN_0 | LL_GPIO_PIN_1 | LL_GPIO_PIN_2 | LL_GPIO_PIN_10 | LL_GPIO_PIN_11 | LL_GPIO_PIN_14 | LL_GPIO_PIN_15 | LL_GPIO_PIN_3 | LL_GPIO_PIN_4 | LL_GPIO_PIN_5 | LL_GPIO_PIN_6 | LL_GPIO_PIN_7 | LL_GPIO_PIN_8 | LL_GPIO_PIN_9;
GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG;
LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/**/
- GPIO_InitStruct.Pin = OLED_SDA_Pin|OLDE_SCK_Pin;
+ GPIO_InitStruct.Pin = OLED_SDA_Pin | OLDE_SCK_Pin;
GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
+ GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
-
}
/* USER CODE BEGIN 2 */
diff --git a/Core/Src/stm32f1xx_it.c b/Core/Src/stm32f1xx_it.c
index f374bdc..a09fd58 100644
--- a/Core/Src/stm32f1xx_it.c
+++ b/Core/Src/stm32f1xx_it.c
@@ -68,8 +68,8 @@
/* Cortex-M3 Processor Interruption and Exception Handlers */
/******************************************************************************/
/**
- * @brief This function handles Non maskable interrupt.
- */
+ * @brief This function handles Non maskable interrupt.
+ */
void NMI_Handler(void)
{
/* USER CODE BEGIN NonMaskableInt_IRQn 0 */
@@ -83,8 +83,8 @@ void NMI_Handler(void)
}
/**
- * @brief This function handles Hard fault interrupt.
- */
+ * @brief This function handles Hard fault interrupt.
+ */
void HardFault_Handler(void)
{
/* USER CODE BEGIN HardFault_IRQn 0 */
@@ -98,8 +98,8 @@ void HardFault_Handler(void)
}
/**
- * @brief This function handles Memory management fault.
- */
+ * @brief This function handles Memory management fault.
+ */
void MemManage_Handler(void)
{
/* USER CODE BEGIN MemoryManagement_IRQn 0 */
@@ -113,8 +113,8 @@ void MemManage_Handler(void)
}
/**
- * @brief This function handles Prefetch fault, memory access fault.
- */
+ * @brief This function handles Prefetch fault, memory access fault.
+ */
void BusFault_Handler(void)
{
/* USER CODE BEGIN BusFault_IRQn 0 */
@@ -128,8 +128,8 @@ void BusFault_Handler(void)
}
/**
- * @brief This function handles Undefined instruction or illegal state.
- */
+ * @brief This function handles Undefined instruction or illegal state.
+ */
void UsageFault_Handler(void)
{
/* USER CODE BEGIN UsageFault_IRQn 0 */
@@ -143,8 +143,8 @@ void UsageFault_Handler(void)
}
/**
- * @brief This function handles System service call via SWI instruction.
- */
+ * @brief This function handles System service call via SWI instruction.
+ */
void SVC_Handler(void)
{
/* USER CODE BEGIN SVCall_IRQn 0 */
@@ -156,8 +156,8 @@ void SVC_Handler(void)
}
/**
- * @brief This function handles Debug monitor.
- */
+ * @brief This function handles Debug monitor.
+ */
void DebugMon_Handler(void)
{
/* USER CODE BEGIN DebugMonitor_IRQn 0 */
@@ -169,8 +169,8 @@ void DebugMon_Handler(void)
}
/**
- * @brief This function handles Pendable request for system service.
- */
+ * @brief This function handles Pendable request for system service.
+ */
void PendSV_Handler(void)
{
/* USER CODE BEGIN PendSV_IRQn 0 */
@@ -182,8 +182,8 @@ void PendSV_Handler(void)
}
/**
- * @brief This function handles System tick timer.
- */
+ * @brief This function handles System tick timer.
+ */
void SysTick_Handler(void)
{
/* USER CODE BEGIN SysTick_IRQn 0 */
@@ -203,8 +203,8 @@ void SysTick_Handler(void)
/******************************************************************************/
/**
- * @brief This function handles DMA1 channel4 global interrupt.
- */
+ * @brief This function handles DMA1 channel4 global interrupt.
+ */
void DMA1_Channel4_IRQHandler(void)
{
/* USER CODE BEGIN DMA1_Channel4_IRQn 0 */
@@ -217,8 +217,8 @@ void DMA1_Channel4_IRQHandler(void)
}
/**
- * @brief This function handles DMA1 channel5 global interrupt.
- */
+ * @brief This function handles DMA1 channel5 global interrupt.
+ */
void DMA1_Channel5_IRQHandler(void)
{
/* USER CODE BEGIN DMA1_Channel5_IRQn 0 */
@@ -231,8 +231,8 @@ void DMA1_Channel5_IRQHandler(void)
}
/**
- * @brief This function handles TIM1 update interrupt.
- */
+ * @brief This function handles TIM1 update interrupt.
+ */
void TIM1_UP_IRQHandler(void)
{
/* USER CODE BEGIN TIM1_UP_IRQn 0 */
@@ -249,8 +249,8 @@ void TIM1_UP_IRQHandler(void)
}
/**
- * @brief This function handles TIM3 global interrupt.
- */
+ * @brief This function handles TIM3 global interrupt.
+ */
void TIM3_IRQHandler(void)
{
/* USER CODE BEGIN TIM3_IRQn 0 */
@@ -265,8 +265,8 @@ void TIM3_IRQHandler(void)
}
/**
- * @brief This function handles USART1 global interrupt.
- */
+ * @brief This function handles USART1 global interrupt.
+ */
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
diff --git a/MDK-ARM/motor.uvoptx b/MDK-ARM/motor.uvoptx
index ec749b9..c491601 100644
--- a/MDK-ARM/motor.uvoptx
+++ b/MDK-ARM/motor.uvoptx
@@ -125,7 +125,7 @@
0
CMSIS_AGDI
- -X"Any" -UAny -O206 -S0 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0CS32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:CS32F103C8$Flash\CS32F10x_128.FLM)
+ -X"" -O206 -S0 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0CS32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:CS32F103C8$Flash\CS32F10x_128.FLM)
0
@@ -148,24 +148,7 @@
-
-
- 0
- 0
- 146
- 1
- 134224336
- 0
- 0
- 0
- 0
- 0
- 1
- ..\User\board\ssd096_oled.c
-
- \\motor\../User/board/ssd096_oled.c\146
-
-
+
0
@@ -187,6 +170,26 @@
1
ch
+
+ 4
+ 1
+ dd
+
+
+ 5
+ 1
+ i,0x0A
+
+
+ 6
+ 1
+ progress_text
+
+
+ 7
+ 1
+ x,0x0A
+
0
@@ -794,8 +797,8 @@
0
0
0
- ..\User\board\ssd096_oled.c
- ssd096_oled.c
+ ..\User\lib\driver\ssd1306_oled.c
+ ssd1306_oled.c
0
0
diff --git a/MDK-ARM/motor.uvprojx b/MDK-ARM/motor.uvprojx
index 6464715..06e1df5 100644
--- a/MDK-ARM/motor.uvprojx
+++ b/MDK-ARM/motor.uvprojx
@@ -339,7 +339,7 @@
STM32,STM32F103xB,USE_FULL_LL_DRIVER,HSE_VALUE=8000000,HSE_STARTUP_TIMEOUT=100,LSE_STARTUP_TIMEOUT=5000,LSE_VALUE=32768,HSI_VALUE=8000000,LSI_VALUE=40000,VDD_VALUE=3300,PREFETCH_ENABLE=1
- ../Core/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc;../Drivers/CMSIS/Device/ST/STM32F1xx/Include;../Drivers/CMSIS/Include;../User;../User/application;../User/board;../User/system/inc;../User/system/bsp;../User/lib/inc;../User/lib/flow;../User/lib/control/inc
+ ../Core/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc;../Drivers/CMSIS/Device/ST/STM32F1xx/Include;../Drivers/CMSIS/Include;../User;../User/application;../User/board;../User/system/inc;../User/system/bsp;../User/lib/inc;../User/lib/flow;../User/lib/control/inc;../User/lib/driver
@@ -1254,9 +1254,9 @@
..\User\board\board.c
- ssd096_oled.c
+ ssd1306_oled.c
1
- ..\User\board\ssd096_oled.c
+ ..\User\lib\driver\ssd1306_oled.c
diff --git a/MDK-ARM/motor/motor.hex b/MDK-ARM/motor/motor.hex
index fc504b8..12cb931 100644
--- a/MDK-ARM/motor/motor.hex
+++ b/MDK-ARM/motor/motor.hex
@@ -1,543 +1,1060 @@
:020000040800F2
-:10000000802C002005010008A50D0008AB010008A8
-:10001000A10D00087101000889130008000000000C
-:10002000000000000000000000000000F5100008C3
-:10003000A901000800000000F50F0008F7100008F3
+:100000008034002005010008CD1300088707000890
+:10001000C91300084D070008B119000800000000CE
+:100020000000000000000000000000001D17000894
+:1000300085070008000000001D1600081F170008B3
:100040001F0100081F0100081F0100081F01000810
:100050001F0100081F0100081F0100081F01000800
:100060001F0100081F0100081F0100081F010008F0
-:100070001F0100081F0100088901000899010008FC
+:100070001F0100081F010008650700087507000838
:100080001F0100081F0100081F0100081F010008D0
:100090001F0100081F0100081F0100081F010008C0
-:1000A0001F010008ED1100081F0100081F010008D2
-:1000B0001F010008BD1200081F0100081F010008F1
+:1000A0001F010008151800081F0100081F010008A3
+:1000B0001F010008E51800081F0100081F010008C3
:1000C0001F0100081F0100081F0100081F01000890
-:1000D0001F010008791300081F0100081F01000814
+:1000D0001F010008A11900081F0100081F010008E6
:1000E0001F0100081F0100081F010008DFF810D0E1
-:1000F00000F02CF800480047CD160008AFF3008050
-:10010000802C00200648804706480047FEE7FEE7AF
+:1000F00000F01AFB0048004779230008AFF30080A6
+:10010000803400200648804706480047FEE7FEE7A7
:10011000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7B7
-:10012000E9110008ED000008D2B201E000F8012B4F
+:1001200011180008ED000008D2B201E000F8012B20
:10013000491EFBD270470022F6E710B513460A4667
-:1001400004461946FFF7F0FF204610BD064C074D48
-:1001500006E0E06840F0010394E807009847103497
-:10016000AC42F6D3FFF7C6FF28210008482100085B
-:1001700000BFFEE7024600BF1AB901E000BF00BFA2
-:10018000FCE700BF0120704710B50248006801F08D
-:10019000A2FC10BD5C00002010B50248006801F010
-:1001A0009AFC10BD5C000020704700BFFEE7000015
-:1001B00008B50549C9690143034AD1611146C969B6
-:1001C0000140009100BF08BD0010024008B505497C
-:1001D00089690143034A916111468969014000918F
-:1001E00000BF08BD0010024008B5054989690143F8
-:1001F000034A9161114689690140009100BF08BD21
-:100200000010024008B5054989690143034A91611C
-:10021000114689690140009100BF08BD00100240ED
-:1002200010B54A1E044B9A5C825822F001034A1E04
-:10023000014CA25C835010BDCC20000810B54A1EB2
-:10024000044B9A5C825842F001034A1E014CA25CA6
-:10025000835010BDCC20000810B54A1E044B9A5C98
-:10026000825842F002034A1E014CA25C835010BD2A
-:10027000CC20000830B54B1E054CE35CC35823F47A
-:10028000405313434C1E024D2C5D035130BD000002
-:100290008A20000830B54B1E064CE35C03445B68C3
-:1002A0006FF30F0313434C1E024D2C5D0444636037
-:1002B00030BD0000CC20000830B54B1E054CE35C7F
-:1002C000C35844F21004A34313434C1E014D2C5D4C
-:1002D000035130BD8A20000810B54B1E024CE35C70
-:1002E0000344DA6010BD0000CC20000830B54B1E7E
-:1002F000054CE35CC35823F0800313434C1E024DAE
-:100300002C5D035130BD00008A20000830B54B1E23
-:10031000054CE35CC35823F4406313434C1E024D69
-:100320002C5D035130BD00008A20000830B54B1E03
-:10033000054CE35CC35823F0200313434C1E024DCD
-:100340002C5D035130BD00008A20000810B54B1E03
-:10035000024CE35C03449A6010BD0000CC2000080E
-:1003600030B54B1E054CE35CC35823F040031343E8
-:100370004C1E024D2C5D035130BD00008A20000848
-:1003800030B54B1E054CE35CC35823F44073134354
-:100390004C1E024D2C5D035130BD00008A20000828
-:1003A0002DE9F04102460B461868C0F30F2595FA77
-:1003B000A5F0B0FA80F480E00120A0402840002899
-:1003C0007AD0082C04D240F2011000FA04F106E0C1
-:1003D000A4F108004FF00116864046F0806158688D
-:1003E00008280ED11869D66826EA11260F0A97FA4E
-:1003F000A7F7B7FA87F700FA07F73E43D66000BFC2
-:1004000000BF586802EB116691FAA1FCBCFA8CFCA3
-:100410004FEA8C084FF00F0C0CFA08FC376827EAFB
-:100420000C0791FAA1FCBCFA8CFC4FEA8C0C00FA88
-:100430000CFC47EA0C07376000BF5868012802D05F
-:100440005868092838D1986802EB116691FAA1FC26
-:10045000BCFA8CFC4FEA8C084FF0030C0CFA08FC39
-:10046000376827EA0C0791FAA1FCBCFA8CFC4FEA2A
-:100470008C0C00FA0CFC47EA0C07376000BFD86808
-:1004800002EB116691FAA1FCBCFA8CFC4FEA8C08D5
-:100490004FF0040C0CFA08FC376827EA0C0791FAB5
-:1004A000A1FCBCFA8CFC4FEA8C0C00FA0CFC47EA6D
-:1004B0000C07376000BF00BF641C25FA04F0002859
-:1004C0007FF47AAFBDE8F081C1F30F22426170473B
-:1004D000C1F30F2242617047C1F30F2202617047DE
-:1004E00002480068401C0149086070472000002055
-:1004F0004FF47A71B0FBF1F2521E4FF0E0235A61D3
-:1005000000229A6105221A6100BF704710B50446A7
-:1005100000F0A6FD2060206800F06EFD606060685D
-:1005200000F07AFDA060606800F088FDE06010BD1A
-:10053000014908607047000000000020016821F0B8
-:10054000800101607047816821F0800181607047FF
-:10055000016841F0010101607047C16841F001018B
-:10056000C160704710B5024613681C48824208D02B
-:10057000B2F1804F05D01A48824202D01948824217
-:1005800004D123F070004C6840EA0403134882420F
-:1005900008D0B2F1804F05D01148824202D01148F4
-:1005A000824204D123F44070CC6840EA0403136013
-:1005B0008868D06200BF0888906200BF0748824206
-:1005C00003D10869106300BF00BF00BF506940F04D
-:1005D0000100506100BF002010BD0000002C014050
-:1005E000000400400008004001460869C0F34000D4
-:1005F000704701460869C0F38000704701460869EA
-:10060000C0F3C000704701460869C0F3001070478E
-:100610000146086900F0010070470146C868C0F350
-:10062000400070470146C868C0F38000704701462B
-:10063000C868C0F3C00070470146C868C0F3001026
-:1006400070470146C86800F00100704770B5024667
-:10065000012901D1002416E0042901D1012412E06E
-:10066000102901D102240EE0402901D103240AE01F
-:10067000B1F5807F01D1042405E0B1F5806F01D18F
-:10068000052400E006242346064CE55C02F118042C
-:1006900028190468044DEE5C0425B5402C43046021
-:1006A00070BD0000672000086E20000870B502468B
-:1006B000012901D1002416E0042901D1012412E00E
-:1006C000102901D102240EE0402901D103240AE0BF
-:1006D000B1F5807F01D1042405E0B1F5806F01D12F
-:1006E000052400E006242346064CE55C02F11804CC
-:1006F00028190468044DEE5C0825B5402C430460BD
-:1007000070BD0000672000086E2000082DE9F04150
-:1007100006460C4615460127012C08D0102C0CD09B
-:10072000B4F5807F0FD0B4F5805F18D111E0294671
-:10073000304600F079FB074612E02946304600F0CB
-:10074000AFFB07460CE02946304600F0EBFB0746BE
-:1007500006E02946304600F021FC074600E000BFD5
-:1007600000BF3846BDE8F08181637047826844F27B
-:1007700007039A430A4382607047426822F070027E
-:100780000A434260704708B50168009100BF4168A4
-:10079000009100BF08BD6FF040010160704700008C
-:1007A0002DE9FF4104460D4601270026204600F0B2
-:1007B00055F8002833D1E968686808432969084377
-:1007C000E16841F20C6291430843E060A868216946
-:1007D00021F440510143216100BF6869616921F43E
-:1007E00040710143616100BF6846FFF78FFE0E480C
-:1007F000844201D1039E08E00C48844201D1029E4C
-:1008000003E00B48844200D1029E46B1286830B113
-:100810000027314620462A6800F025F800BF3846F8
-:1008200004B0BDE8F0810000003801400044004001
-:100830000048004001460868C0F340007047014688
-:100840000868C0F38000704701460868C0F3C00024
-:10085000704701460868C0F3801070470146C868B9
-:10086000C0F34030704770B501EBC10303EB0113D7
-:100870009400B3FBF4F301EBC10404EB0114950005
-:10088000B4FBF5F46425B4FBF5F404EBC40505EB07
-:100890000414A3EB8403322404EB03136424B3FB9A
-:1008A000F4F303F0F00301EBC10404EB0114950031
-:1008B000B4FBF5F46425B4FBF5F403EB041401EB8D
-:1008C000C10303EB01139500B3FBF5F301EBC10585
-:1008D00005EB01159600B5FBF6F56426B5FBF6F5BC
-:1008E00005EBC50606EB0515A3EB8503322505EBE5
-:1008F00003136425B3FBF5F303F00F0323449BB20A
-:10090000836070BD38B50120144949690143134A19
-:100910005161114649690140009100BF00BF00F0DC
-:100920004FFD05460022114600F03EFA04462146DE
-:100930000E2000F055FD0E2000F028FD00F040FDD7
-:1009400005460022114600F02FFA044621460F20EA
-:1009500000F046FD0F2000F019FD38BD00100240E8
-:1009600000B585B014216846FFF7E5FB1020FFF7BE
-:100970002DFC2020FFF72AFC0420FFF727FC08208D
-:10098000FFF724FC1C491D48FFF79EFD1C491D482C
-:10099000FFF79AFD18480090012001900220029074
-:1009A0000020039069461548FFF7FAFC16480090AE
-:1009B0000020019069461148FFF7F2FC13480090AF
-:1009C0000020019069461248FFF7EAFC11480090A8
-:1009D0000020019069460B48FFF7E2FC08480090B0
-:1009E00001200190032002900020039069460548F1
-:1009F000FFF7D6FC05B000BD200020040010014028
-:100A000030003004000C0140C000C004FDFD99041A
-:100A100000080140FFFFCF0430B585B014216846BF
-:100A2000FFF789FB4FF40060FFF7DEFB00F0D0FC1E
-:100A300005460022032100F0D7F90446214619207B
-:100A400000F0E2FC192000F0AEFC41F61F40ADF8CA
-:100A50000000002001906320029000200390049089
-:100A600069460948FFF77EFD0748FFF767FD00214B
-:100A70000548FFF77BFE00210348FFF77EFE024892
-:100A8000FFF761FD05B030BD002C014000B593B00B
-:100A900014210EA8FFF74FFB202106A8FFF74BFB00
-:100AA000142101A8FFF747FB0120FFF781FB00207D
-:100AB000ADF838000F9041F61F40109000201190C3
-:100AC0000EA94FF08040FFF74DFD00BF4FF0804072
-:100AD000006840F080004FF08041086000BF0021B6
-:100AE0004FF08040FFF742FE10218806FFF7DEFD41
-:100AF00070200690002007900890099002200A902C
-:100B000006AA10214007FFF701FE10218806FFF713
-:100B10009DFD00214FF08040FFF72FFE4FF08040F9
-:100B2000FFF711FD0420FFF75FFB40F20220019068
-:100B300009200290022003900020049001A902489D
-:100B4000FFF72EFC13B000BD0008014030B585B0A2
-:100B500014216846FFF7EFFA0220FFF729FB00F0A7
-:100B600037FC05460022032100F03EF904462146E9
-:100B70001D2000F049FC1D2000F015FC41F61F402F
-:100B8000ADF8000000200190632002900020039047
-:100B900069460948FFF7E6FC0748FFF7CFFC00214C
-:100BA0000548FFF7E3FD00210348FFF7E6FD024893
-:100BB000FFF7C9FC05B030BD000400402DE9F0414D
-:100BC0008CB01C2105A8FFF7B6FA14216846FFF780
-:100BD000B2FA4FF48040FFF715FB0420FFF712FB39
-:100BE00068480090092001900320029000200390A3
-:100BF00069466548FFF7D4FB6448009004200190E3
-:100C000069466148FFF7CCFB002205216048FFF7E9
-:100C100053FB002205215E48FFF72CFB0022052133
-:100C20005B48FFF783FB002205215948FFF798FB3B
-:100C3000802205215648FFF759FB00220521544820
-:100C4000FFF79EFB002205215148FFF75FFB1022B2
-:100C500004214F48FFF730FB002204214C48FFF7E6
-:100C600009FB002204214A48FFF760FB002204210F
-:100C70004748FFF775FB802204214548FFF736FB04
-:100C8000002204214248FFF77BFB00220421404858
-:100C9000FFF73CFB25213F4B1B68C3F302200524D3
-:100CA00000250346C3F1070CBCF1040F02D94FF035
-:100CB000040C01E0C3F1070C674603F1040CBCF11E
-:100CC000070F02D24FF0000C01E0A3F1030C6646BF
-:100CD0004FF0010C0CFA07FCACF1010C0CEA040C0F
-:100CE0000CFA06FC4FF0010808FA06F8A8F1010812
-:100CF00008EA05084CEA080200BF002904DB1007D7
-:100D0000030E2548435407E01007040E21480C3019
-:100D100001F00F031B1FC45400BF2520002809DB6E
-:100D200000F01F02012191404209920002F1E022ED
-:100D3000C2F8001100BF4FF4E1300590002006908A
-:100D4000079008900C20099000200A900B9005A9AC
-:100D50001248FFF725FD00BF1048006920F49040BD
-:100D60000E4908610846406920F02A00486100BF2A
-:100D700000BF0846C06840F40050C86000BF0CB017
-:100D8000BDE8F081020002040008014004000404F0
-:100D9000000002400CED00E000E400E000380140FB
-:100DA00000BFFEE700BFFEE7F0B503460C4603F0C8
-:100DB0000701C1F10700042801D9042001E0C1F1B5
-:100DC00007000646081D072801D2002000E0C81EC3
-:100DD00005460120B040401E2040A8400127AF40FA
-:100DE0007F1E17403843F0BDF0B503460C4603F0B4
-:100DF0000701C1F10700042801D9042001E0C1F175
-:100E000007000646081D072801D2002000E0C81E82
-:100E100005460120B040401E2040A8400127AF40B9
-:100E20007F1E17403843F0BD70B50246106A20F0AF
-:100E300001001062136A5568946924F0030424F0D9
-:100E400070000E6840EA060423F002000E6940EAD2
-:100E5000060323F001004E6840EA06030F48824271
-:100E600013D123F008004E6940EA860323F0040002
-:100E70008E6840EA860325F480708E6940EA060594
-:100E800025F40070CE6940EA460555609461C86853
-:100E9000506300BF1362002070BD0000002C0140B1
-:100EA0002DE9F04104460D46206A20F01000206232
-:100EB000266AD4F80480A76927F4407727F4E04035
-:100EC000296840EA012726F02000296940EA011636
-:100ED00026F01000696840EA01161148844213D1D7
-:100EE00026F08000696940EA811626F04000A96872
-:100EF00040EA811628F48060A96940EA810828F454
-:100F00000060E96940EAC108C4F80480A76120468E
-:100F1000E968FFF729FC26620020BDE8F0810000A7
-:100F2000002C014070B50246106A20F480701062F7
-:100F3000136A5568D46924F0030424F070000E6825
-:100F400040EA060423F400700E6940EA062323F405
-:100F500080704E6840EA06230F48824213D123F482
-:100F600000604E6940EA862323F480608E6840EA80
-:100F7000862325F480508E6940EA061525F400503A
-:100F8000CE6940EA46155560D461C868D06300BF99
-:100F90001362002070BD0000002C014070B50246B5
-:100FA000106A20F480501062146A5568D36923F4E3
-:100FB000407323F4E0400E6840EA062324F4005016
-:100FC0000E6940EA063424F480504E6840EA063444
-:100FD0000748824204D125F480408E6940EA861594
-:100FE0005560D361C868106400BF1462002070BDF2
-:100FF000002C014070470000014600BF04484068D3
-:1010000000F0F0000009034A125C21FA02F0704778
-:1010100000100240B4200008014600BF05484068A7
-:1010200000F4E060044A02EB1020027821FA02F09A
-:101030007047000000100240C4200008014600BFB5
-:101040000548406800F46050044A02EBD020027862
-:1010500021FA02F07047000000100240C42000088E
-:1010600010B5002400BF0B48406800F00C0020B110
-:10107000042804D0082808D103E0074C07E0064CF8
-:1010800005E000F00BF8044601E0034C00BF00BF90
-:10109000204610BD0010024000127A0000210022FC
-:1010A00000BF1148406800F4803002461AB1B2F522
-:1010B000803F0CD101E00D490BE000BF0A484068B9
-:1010C000C0F34040401C0A4BB3FBF0F101E007497C
-:1010D00000BF00BF00BF0448406800F47010022346
-:1010E00003EB9040484370470010024000093D0068
-:1010F00000127A007047704710B50220374909681E
-:1011000021F007010143354A116000BF00BF00BF55
-:101110003248006800F007000228F8D100BF3048CC
-:10112000006840F480302E49086000BF00BF00BF57
-:101130002B480068C0F340400028F8D04FF48030BE
-:101140004FF4E011264A526822F47C1200F4403336
-:101150000B431A43224B5A6000BF00BF1846006879
-:1011600040F080701946086000BF00BF00BF1C48F7
-:101170000068C0F340600028F8D000201849496892
-:1011800021F0F0010143164A516000BF10151146CD
-:10119000496821F4E0610143516000BF002011461D
-:1011A000496821F460510143516000BF022011469B
-:1011B000496821F003010143516000BF00BF00BF37
-:1011C0000748406800F00C000828F8D10548FFF7F0
-:1011D0008FF90448FFF7ACF910BD00000020024071
-:1011E0000010024000A24A047047000010B53148C8
-:1011F000FFF70EFA01285CD100BF2E48FFF7F4F983
-:1012000001280AD12B48FFF708FA012805D100BFB1
-:10121000001F2849086100BF00BF2648FFF7E9F911
-:1012200001280AD12348FFF7FDF9012805D100BFA5
-:10123000801F2049086100BF00BF1E48FFF7DEF98C
-:1012400001280BD11B48FFF7F2F9012806D100BF96
-:101250006FF008001749086100BF00BF1548FFF78D
-:10126000D2F901280BD11348FFF7E6F9012806D17E
-:1012700000BF6FF010000F49086100BF00BF0D48AC
-:10128000FFF7C6F901280AD10A48FFF7DAF9012861
-:1012900005D100BFC01E0749086100BF00BF00BFE5
-:1012A000FFF71EF900BF04480068401C02490860AF
-:1012B00000BF10BD002C01405800002010B52D4883
-:1012C000FFF7A6F9012853D100BF2A48FFF78CF990
-:1012D00001280AD12748FFF7A0F9012805D100BF4E
-:1012E000001F2449086100BF00BF2248FFF781F9B1
-:1012F00001280AD11F48FFF795F9012805D100BF41
-:10130000801F1C49086100BF00BF1A48FFF776F92B
-:1013100001280BD11748FFF78AF9012806D100BF31
-:101320006FF008001349086100BF00BF1148FFF7C4
-:101330006AF901280BD10F48FFF77EF9012806D181
-:1013400000BF6FF010000B49086100BF00BF0948E3
-:10135000FFF75EF901280AD10648FFF772F9012864
-:1013600005D100BFC01E0349086100BF00BF00BF18
-:1013700010BD00000004004010B50248006800F0F5
-:10138000D5FC10BD5C00002000BFFEE7002809DB93
-:1013900000F01F02012191404209920002F1E02277
-:1013A000C2F800117047002809DB00F01F0201217C
-:1013B00091404209920002F1E022C2F80011704708
-:1013C00002480068C0F30220704700000CED00E006
-:1013D00002480068C0F30220704700000CED00E0F6
-:1013E00010B5002804DB0A07130E054A135406E063
-:1013F0000A07140E034A00F00F031B1FD45410BD3C
-:1014000000E400E018ED00E010B5002804DB0A0756
-:10141000130E054A135406E00A07140E034A00F09F
-:101420000F031B1FD45410BD00E400E018ED00E0D2
-:1014300002E008C8121F08C1002AFAD1704770479D
-:10144000002001E001C1121F002AFBD170470000FB
-:10145000014601F1100000E0001D02681AB9024ABD
-:1014600012689042F8D370473400002010B5064847
-:10147000046803E02046FFF7EBFF044603480068DA
-:101480008442F7D310BD000030000020340000205B
-:1014900010B504462146002000F00CFA10BD10B52E
-:1014A00001E000F8011B131EA2F10104A2B2F8D161
-:1014B00010BD000010B500200A4908600A49086004
-:1014C00000BF0A48FFF744F80848FFF746F800BF96
-:1014D00000BF0748FFF73CF80548FFF73EF800BF9C
-:1014E00010BD0000040000200C000020002C014072
-:1014F0000004004010B5034800F00EF8024800F068
-:10150000AFF810BD040000200C00002010B500F062
-:10151000DDFB00F017FA10BD08B501460020009071
-:10152000086810B1122813D108E000BF00BF0B48B3
-:101530000068486000BF1220086000BF074A486882
-:101540001268101A0A2801D2002008BD00BFEDE77A
-:101550000020086000900320F7E7000058000020FA
-:1015600001490860704700001C00002010B50849C0
-:101570000848FEF7B1FF08490648FEF7ADFF0449E9
-:101580000448FEF7A5FF04490248FEF7A1FF10BD7D
-:1015900010001004000C01402000200410B5064982
-:1015A0000648FEF795FF06490448FEF795FF0249F5
-:1015B0000248FEF791FF10BD10001004000C01401E
-:1015C0002000200470B50446002518E004F08000D7
-:1015D000284120B10F491048FEF77EFF03E00D4976
-:1015E0000D48FEF775FF6006040E0C490A48FEF729
-:1015F00073FF0A490848FEF76BFF681CC5B2082D47
-:10160000E4DB06490448FEF767FF04490248FEF799
-:101610005FFF70BD10001004000C0140200020048A
-:1016200010B50446FFF7A2FF7820FFF7CBFF00209C
-:10163000FFF7C8FF2046FFF7C5FFFFF7AFFF10BD5C
-:1016400010B50446FFF792FF7820FFF7BBFF40205C
-:10165000FFF7B8FF2046FFF7B5FFFFF79FFF10BD6C
-:1016600038B5014600200090086810B1252821D126
-:1016700016E000BF124B134CE068C3F30F2222EABE
-:10168000000400EA020544EA05440E4D2C6100BF47
-:1016900000BF0D480068486000BF2520086000BFFB
-:1016A000094A48681268101A642801D2002038BD1F
-:1016B00000BFDFE70020086000900320F7E700008C
-:1016C00020002004001001405800002008B501202F
-:1016D000274989690143264A916111468969014078
-:1016E000009100BF00BF00071146C9690143D161E5
-:1016F0001146C9690140009100BF00BF03200246A6
-:101700001C4B19684FF6FF0319401B4B0B4343EA70
-:101710000221184B196000BF00BF1848406820F034
-:10172000E06040F000701549486000BFFFF7E4FC3E
-:10173000134800681349B0FBF1F084B22046FFF76C
-:101740000FFFFFF70DF9FFF7DDF8FFF79FF9FFF740
-:1017500035FAFFF761F9FFF7F9F9002000F014F806
-:10176000FFF7D4FEFFF7A6FE01E0FFF7C3FEFCE79C
-:10177000001002400CED00E00000FA0500000140FE
-:101780000000002040420F0010B504460C4951F8FB
-:1017900024104A000B4951F82400002100F09EF863
-:1017A000094951F824200749083951F8240000213B
-:1017B00000F094F8012103480830015510BD0000E5
-:1017C000102100084C000020202100082DE9F047DE
-:1017D00004460F460025A9462348005D20B922484B
-:1017E00018380168204688471FB94FF0FF30BDE820
-:1017F000F0871E4850F82400B7FBF0F61B4850F85D
-:101800002400B7FBF0F100FB117000B1761C184802
-:1018100050F82400451E22E01348083850F82400F0
-:1018200030F8150010B909F1010901E04FF0000985
-:10183000B14513D14FF0000809E00B48083850F8C3
-:10184000240005EB080220F8126008F10108B045F9
-:10185000F3D3064850F824006843C8E76D1E002DF6
-:10186000DADA4FF0FF30C2E75400002018210008F8
-:101870001021000810B501460023002207E00B48A4
-:1018800050F8210030F8120000B15B1C521C0848CF
-:1018900050F821009042F2D864205843044C54F888
-:1018A0002140B0FBF4F0C0B210BD00004C0000209D
-:1018B0001021000870B504460E4631462046FFF759
-:1018C00085FF0546681C08B9002070BD024850F825
-:1018D00024002844F9E700004400002030B5034606
-:1018E00001E003F8011B141EA2F10102F9D130BD81
-:1018F00070B500240EE00021204600F06EF80025AF
-:1019000004E00020FFF79CFE681CC5B2802DF8DBC8
-:10191000601CC4B2082CEEDB70BD70B500240EE074
-:101920000021204600F059F8002504E0FF20FFF7D1
-:1019300087FE681CC5B2802DF8DB601CC4B2082C81
-:10194000EEDB70BD10B5AE20FFF76AFED520FFF7C5
-:1019500067FE8020FFF764FEA820FFF761FE3F20AE
-:10196000FFF75EFED320FFF75BFE0020FFF758FE77
-:101970004020FFF755FEA120FFF752FEC820FFF7D9
-:101980004FFEDA20FFF74CFE1220FFF749FE8120C0
-:10199000FFF746FECF20FFF743FED920FFF740FEBA
-:1019A000F120FFF73DFEDB20FFF73AFE3020FFF786
-:1019B00037FEA420FFF734FEA620FFF731FE8D206E
-:1019C000FFF72EFE1420FFF72BFEAF20FFF728FEB7
-:1019D000FFF78EFFFFF7A1FF10BD70B504460D465F
-:1019E00045F0B000FFF71CFE102141EA1410FFF78C
-:1019F00017FE04F00F00FFF713FE70BD10B504468C
-:101A000004B910BD00202085A07D012808D1606A9E
-:101A100030B1218C89040A0C0021606AFFF73FFD78
-:101A200000BFEEE72DE9F05F064688461546994669
-:101A3000DDE90B7BDDF828A00EB1012100E00021DB
-:101A400008462921FEF796FB4420FFF721FD0446B6
-:101A50000CB1012100E0002108462C21FEF78AFB91
-:101A60000120E07500202076C4F83C902584C4F85D
-:101A700040B0A786002D0CDD2846FFF709FDE06188
-:101A8000E16909B1012100E0002108463E21FEF78D
-:101A900071FB002F0CDD3846FFF7FAFC2063216B49
-:101AA00009B1012100E0002108464521FEF762FB53
-:101AB00084F8158084F82CA066602046BDE8F09F6D
-:101AC00010B5044604B910BD002060852046FFF71C
-:101AD00095FF00BFF7E710B504460CB1012100E007
-:101AE0000021084640F2D711FEF744FB012084F89C
-:101AF00038002169A068FEF793FB2069082865D2A9
-:101B0000DFE800F06404111E2C3A485600BFA068BC
-:101B10000168C1F3400121B1A0680221416000BF0A
-:101B200000BF00BF53E000BFA0680168C1F34011CF
-:101B300021B1A0682021416000BF00BF00BF46E086
-:101B400000BFA0680168C1F3402129B1A0684FF42B
-:101B50000071416000BF00BF00BF38E000BFA06857
-:101B60000168C1F3403129B1A0684FF400514160D0
-:101B700000BF00BF00BF2AE000BFA0680168C1F33A
-:101B8000404129B1A0684FF40031416000BF00BF5F
-:101B900000BF1CE000BFA0680168C1F3405129B13B
-:101BA000A0684FF40011416000BF00BF00BF0EE00D
-:101BB00000BFA0680168C1F3406129B1A0684FF07F
-:101BC0000071416000BF00BF00BF00E000BF00BF68
-:101BD000606800BF00BF00BF00F10C0252E8002F98
-:101BE00042F0400100F10C0242E80013002BF3D157
-:101BF00000BF00BF2069082865D2DFE800F0640458
-:101C0000111E2C3A485600BFA0680168C1F3C001FC
-:101C100021B1A0680821416000BF00BF00BF53E0B0
-:101C200000BFA0680168C1F3C01121B1A068802184
-:101C3000416000BF00BF00BF46E000BFA068016870
-:101C4000C1F3C02129B1A0684FF40061416000BF19
-:101C500000BF00BF38E000BFA0680168C1F3C03119
-:101C600029B1A0684FF40041416000BF00BF00BF30
-:101C70002AE000BFA0680168C1F3C04129B1A06893
-:101C80004FF40021416000BF00BF00BF1CE000BF57
-:101C9000A0680168C1F3C05129B1A0684FF40001E8
-:101CA000416000BF00BF00BF0EE000BFA068016838
-:101CB000C1F3C06129B1A0684FF00061416000BF6D
-:101CC00000BF00BF00E000BF00BF10BD0EB513484D
-:101CD000006808BB0020F0210122114BCDE9002152
-:101CE00002900A4601210F48FFF79CFE0B4908604D
-:101CF0000020096808700C480849096888600520B8
-:101D000006490968C860042004490968086100217F
-:101D10000248006800F0E2F80EBD00005C00002000
-:101D20005F200008003801400000024038B504463A
-:101D300004B938BD6068C168C1F34011B9B16068C9
-:101D40000168C1F3401191B1608D218C884202DBA2
-:101D50002046FFF7B5FE61684A68D2B2608D411C2B
-:101D60006185E1690A5400202076E0753FE06068F3
-:101D7000C168C1F30011002939D060680168C1F35E
-:101D80000011002933D0607D01282BD1D4E9020154
-:101D90004A1E514B9A5C02445268208C801A60851E
-:101DA000207DF8B9D4E90201FEF73AFAE06B80B180
-:101DB000608D00280DDD608D218C884209DC628DEC
-:101DC0002078E36BE1699847228C0021E069FFF7F6
-:101DD00066FB228CD4E90201FEF75CFAD4E9020129
-:101DE000FEF72CFA002060856068FEF7CCFC606886
-:101DF000C168C1F3801151B16068FEF72AFD30B1AE
-:101E0000206C08B1206C80476068FEF7C4FCA07DA0
-:101E100001285ED101256068C168C1F3002171B15C
-:101E20006068016801F0010149B10225606801683C
-:101E3000009100BF4168009100BF00BF00BF606813
-:101E4000FEF7F8FC68B16068FEF7F4FC48B10425C1
-:101E500060680168009100BF4168009100BF00BF49
-:101E600000BF6068FEF7EBFC60B16068FEF7E7FC5E
-:101E700040B160680168009100BF4168009100BFF7
-:101E800000BF00BF6068FEF7DFFC68B16068FEF766
-:101E9000DBFC48B1102560680168009100BF416813
-:101EA000009100BF00BF00BF012D11D0606A78B162
-:101EB000618D491E88B2228D616A01EB82014880E2
-:101EC000228D616A01F82250218D491C218500BFB5
-:101ED00000BF00BF2DE70000CC20000870B504460D
-:101EE0000D46607D90B9A575606800BF00BF00BF5A
-:101EF00000F10C0252E8002F42F0200100F10C0228
-:101F000042E80013002BF3D100BF70E00020A07561
-:101F10006068FEF738FC2169A068FEF781F9D4E912
-:101F20000201FEF77DF96068011D0E463246D4E9D4
-:101F30000201FEF70BFAE269D4E90201FEF7CCF9DF
-:101F4000228CD4E90201FEF7A5F9D4E90201FEF7DB
-:101F500083F9D4E90201FEF771F9606800BF00BFA0
-:101F600000BF00F1140252E8002F42F0400100F1DE
-:101F7000140242E80013002BF3D100BF00BF6068D9
-:101F800000BF00BF00BF00F10C0252E8002F42F07A
-:101F9000100100F10C0242E80013002BF3D100BF46
-:101FA00000BF6068011D0E4632462169A068FEF739
-:101FB000CDF9226B2169A068FEF78EF92169A0682E
-:101FC000FEF74AF9606800BF00BF00BF00F11402CD
-:101FD00052E8002F42F0800100F1140242E80013A1
-:101FE000002BF3D100BF00BF012084F83800A07D92
-:101FF000012833D1606A68B9218C8800FFF748FA5C
-:102000006062616A09B1012100E000210846822175
-:10201000FEF7B0F8606800BF00BF00BF00F10C021F
-:1020200052E8002F42F4807100F10C0242E80013E4
-:10203000002BF3D100BF00BF606800BF00BF00BF2E
-:1020400000F1140252E8002F42F0010100F11402E5
-:1020500042E80013002BF3D100BF00BF70BD7047F2
-:10206000081C3044586C8000000000040404000088
-:102070000800000008000008000000080002040634
-:10208000080A0C00010203040506081C3044586CC1
-:1020900080000000000404040000080000000800A4
-:1020A00000080000000800020406080A0C000102F3
-:1020B0000304050600000000000000000102030404
-:1020C000060708090000000001020304081C304450
-:1020D000586C8000000000040404000008000000A8
-:1020E000080000080000000800020406080A0C00AE
-:1020F0000102030405065F6C697374006C697374F4
-:1021000020616C6C20636F6D6D616E640000000077
-:1021100000040000000000000800000008000000AB
-:1021200000200000000000004821000800000020FE
-:102130007000000030140008B82100087000002072
-:10214000102C0000401400080024F40000000000DF
-:10215000000000000000000000000000000000007F
-:10216000000000000000000000000000000000006F
-:10217000000000000000000000000000000000005F
-:102180000000000089170008751800088000002072
-:1021900000C0012080200020380000200000000046
-:1021A0000000000000000000F6200008FC200008ED
-:0821B000C6E533B46D1400080C
+:1001400004461946FFF7F0FF204610BD421C10F888
+:10015000011B0029FBD1801A7047F0B480EA01022C
+:10016000D40F4200B2EB410F02D2024608461146BC
+:100170004A0042D0C30DDDB2C1F3C752AD1A202DE3
+:1001800035DAC1F3160141F4000204B15242C5F15F
+:10019000200602FA06F12A411044B3EBD05F23D0C7
+:1001A000C4B1012DA0EBC35009DCF0BC4FF00042FC
+:1001B00002EAC352DBB200F5000000F02ABA4000A8
+:1001C00000F1807000EBC350A0F1807040EAD17064
+:1001D000490009E0490841EAC071A0EBC35000F5AD
+:1001E0000000400800EBC350F0BC00F009BA6142C7
+:1001F000012202EB4101001BF6E7F0BC704781F0E1
+:100200000041AAE780F00040A7E780EA010210B5AC
+:1002100002F00043400022D04A001FD0010E01EB43
+:100220001261C0F35600C2F3560240F4000042F4DB
+:100230000002A0FB022000047F39140400D0401CFF
+:1002400050EA124001D44000491EC2B20C0604EB31
+:10025000D010401C4008802A02D003E0002010BDCE
+:1002600020F00100002900DA0020184310BD30B44E
+:1002700080EA010202F0004530F0004221F0004027
+:1002800013D090B1C30DD40DC2F31601C0F3160004
+:10029000E41A41F4000140F400027D34914201D39C
+:1002A000641C00E04900002C02DA30BC00207047DA
+:1002B0004FF400000023914201D3891A0343400800
+:1002C0004FEA4101F7D151B1914202D14FF00041C3
+:1002D00005E002D24FF0010101E06FF0010103EBF4
+:1002E000C450284430BC00F08BB92DE9FE4F804645
+:1002F00081EA0300C00F0C46009021F0004123F07A
+:100300000045B8EB0200A94105D24046214690467F
+:100310001C460B46024623F00040104347D0270DF1
+:10032000C7F30A00C3F30A510290401A0190402813
+:100330006BDAC3F3130040F4801B0098924620B19F
+:100340000023D2EB030A63EB0B0B01985946C0F173
+:100350004002504600F023F906460D4650465946E5
+:10036000019A00F03BF910EB08006141002487EA94
+:10037000115284EAE7731A4340D0009A62B3019A9B
+:10038000012A4FEA075215DC001B61EB02014FF016
+:10039000004202EA0752CDE90042001C41F58011FB
+:1003A00032462B4600F072F903B0BDE8F08F4046AC
+:1003B0002146F9E7001B61EB0201001C41F58013A7
+:1003C00000185B412018A2F5001747EB030140EA33
+:1003D000D570B6196D4111E06D084FEA360645EA51
+:1003E000C0754FEA0752001B61EB0201001C41F58A
+:1003F000801149084FEA30000019514132462B461E
+:1004000003B0BDE8F04F00F032B90098012240007F
+:100410000023D0EB020263EBE073009821464FEA21
+:10042000E074B8EB000061EB0401E9E783F00043FE
+:100430005BE781F0004158E7C10F80EAE0700844B3
+:10044000CA079623002100F0E4B896230022114643
+:1004500000F0DFB800F0004220F00040C10DC0F312
+:10046000160040F400007F2901DA00207047962929
+:1004700003DCC1F19601C84001E096398840002AAA
+:10048000F4D04042704720F00040C10DC0F3160088
+:1004900040F400007F2901DA00207047962903DC30
+:1004A000C1F19601C840704796398840704770B5D1
+:1004B000C1F30A5201F000450024C1F3130140F2D8
+:1004C000FF3341F480119A4201DA002070BD40F2FE
+:1004D00033439A42A2F2334203DC524200F06EF8F8
+:1004E00000E090402C43F1D0404270BD00F000424B
+:1004F00030F000400AD0C10D01F56071C0F3160064
+:1005000042EA0151C20840071143704700200146EA
+:1005100070470000002801DBC0F10040002901DB2A
+:10052000C1F1004181427047002801DBC0F1004069
+:10053000002901DBC1F10041884270472DE9F05FDD
+:100540000546002092469B46884606468146402442
+:100550001BE0284641464746224600F02FF8534606
+:100560005A46C01A914110D311461846224600F04F
+:1005700016F82D1A67EB01084F462246012000218C
+:1005800000F00DF817EB00094E41201EA4F1010404
+:10059000DFDC484631462A464346BDE8F09F202A24
+:1005A00004DB203A00FA02F1002070479140C2F1CA
+:1005B000200320FA03F3194390407047202A04DBFC
+:1005C000203A21FA02F00021704721FA02F3D040CC
+:1005D000C2F120029140084319467047202A06DBE9
+:1005E000CB17203A41FA02F043EAE07306E041FA01
+:1005F00002F3D040C2F120029140084319467047EF
+:100600000029A8BF7047401C490008BF20F0010026
+:10061000704710B4B0FA80FC00FA0CF050EA010404
+:1006200004BF10BC704749B1CCF1200421FA04F496
+:1006300011FA0CF118BF012121430843A3EB0C016F
+:10064000CB1D4FEA00614FEA102042BF002010BCD2
+:10065000704700EBC35010440029A4BF10BC704782
+:10066000401C490008BF20F0010010BC704710B5C5
+:10067000141E73F1000408DA401C41F100019218C5
+:100680005B411A4301D120F0010010BD2DE9F04D6E
+:1006900092469B4611B1B1FA81F202E0B0FA80F2C3
+:1006A00020329046FFF77BFF04460F4640EA0A00DF
+:1006B00041EA0B0153465A46084313D0114653EA08
+:1006C000010019D0C8F140025046FFF777FF0546F8
+:1006D0000E46504659464246FFF761FF084305D093
+:1006E000012004E020463946BDE8F08D0020054396
+:1006F00046EAE0762C4337430A986305E40AA0EB08
+:1007000008000022FD0A44EA47540A3002D50020BE
+:100710000146E9E7010510196941DDE908450019BD
+:100720006941BDE8F04DA2E7064C074D06E0E068E0
+:1007300040F0010394E8070098471034AC42F6D328
+:10074000FFF7D8FC744100089441000800BFFEE7A1
+:10075000024600BF1AB901E000BF00BFFCE700BFBE
+:100760000120704710B50248006802F0B8FB10BDC8
+:100770006000002010B50248006802F0B0FB10BD18
+:1007800060000020704700BFFEE7000008B5054983
+:10079000C9690143034AD1611146C9690140009109
+:1007A00000BF08BD0010024008B505498969014332
+:1007B000034A9161114689690140009100BF08BD5B
+:1007C0000010024008B5054989690143034A916157
+:1007D000114689690140009100BF08BD0010024028
+:1007E00008B5054989690143034A91611146896940
+:1007F0000140009100BF08BD0010024010B54A1E24
+:10080000044B9A5C825822F001034A1E014CA25C00
+:10081000835010BDD434000810B54A1E044B9A5CB6
+:10082000825842F001034A1E014CA25C835010BD65
+:10083000D434000810B54A1E044B9A5C825842F02A
+:1008400002034A1E014CA25C835010BDD434000840
+:1008500030B54B1E054CE35CC35823F4405313439F
+:100860004C1E024D2C5D035130BD00009234000837
+:1008700030B54B1E064CE35C03445B686FF30F031B
+:1008800013434C1E024D2C5D0444636030BD0000D8
+:10089000D434000830B54B1E054CE35CC35844F219
+:1008A0001004A34313434C1E014D2C5D035130BD76
+:1008B0009234000810B54B1E024CE35C0344DA602E
+:1008C00010BD0000D434000830B54B1E054CE35C6D
+:1008D000C35823F0800313434C1E024D2C5D03517B
+:1008E00030BD00009234000830B54B1E054CE35C6F
+:1008F000C35823F4406313434C1E024D2C5D035137
+:1009000030BD00009234000830B54B1E054CE35C4E
+:10091000C35823F0200313434C1E024D2C5D03519A
+:1009200030BD00009234000810B54B1E024CE35C51
+:1009300003449A6010BD0000D434000830B54B1E4B
+:10094000054CE35CC35823F0400313434C1E024D97
+:100950002C5D035130BD00009234000830B54B1EB1
+:10096000054CE35CC35823F4407313434C1E024D03
+:100970002C5D035130BD0000923400082DE9F04198
+:1009800002460B461868C0F30F2595FAA5F0B0FA99
+:1009900080F480E00120A040284000287AD0082C74
+:1009A00004D240F2011000FA04F106E0A4F10800BC
+:1009B0004FF00116864046F08061586808280ED135
+:1009C0001869D66826EA11260F0A97FAA7F7B7FA28
+:1009D00087F700FA07F73E43D66000BF00BF5868AC
+:1009E00002EB116691FAA1FCBCFA8CFC4FEA8C0870
+:1009F0004FF00F0C0CFA08FC376827EA0C0791FA45
+:100A0000A1FCBCFA8CFC4FEA8C0C00FA0CFC47EA07
+:100A10000C07376000BF5868012802D058680928C1
+:100A200038D1986802EB116691FAA1FCBCFA8CFCF3
+:100A30004FEA8C084FF0030C0CFA08FC376827EAE1
+:100A40000C0791FAA1FCBCFA8CFC4FEA8C0C00FA62
+:100A50000CFC47EA0C07376000BFD86802EB116650
+:100A600091FAA1FCBCFA8CFC4FEA8C084FF0040C04
+:100A70000CFA08FC376827EA0C0791FAA1FCBCFACB
+:100A80008CFC4FEA8C0C00FA0CFC47EA0C07376030
+:100A900000BF00BF641C25FA04F000287FF47AAF81
+:100AA000BDE8F08102469068C1F30F231840C1F3FE
+:100AB0000F23984201D1012070470020FCE7C1F3C9
+:100AC0000F2242617047C1F30F2242617047C1F3A8
+:100AD0000F220261704770B500EB116391FAA1F526
+:100AE000B5FA85F5AE000F25B5401C68AC4391FA08
+:100AF000A1F5B5FA85F5AD0002FA05F52C431C60A9
+:100B000070BD000002480068401C01490860704741
+:100B1000240000204FF47A71B0FBF1F2521E4FF026
+:100B2000E0235A6100229A6105221A6100BF7047D2
+:100B300010B5044600F0A8FD2060206800F070FDAC
+:100B40006060606800F07CFDA060606800F08AFD75
+:100B5000E06010BD014908607047000000000020FF
+:100B6000016821F0800101607047816821F08001F7
+:100B700081607047016841F0010101607047C16800
+:100B800041F00101C160704710B5024613681C486E
+:100B9000824208D0B2F1804F05D01A48824202D07A
+:100BA0001948824204D123F070004C6840EA0403E3
+:100BB0001348824208D0B2F1804F05D011488242DA
+:100BC00002D01148824204D123F44070CC6840EA3C
+:100BD000040313608868D06200BF0888906200BF79
+:100BE0000748824203D10869106300BF00BF00BFFD
+:100BF000506940F00100506100BF002010BD0000AE
+:100C0000002C014000040040000800400146086933
+:100C1000C0F34000704701460869C0F38000704788
+:100C200001460869C0F3C000704701460869C0F377
+:100C3000001070470146086900F001007047014646
+:100C4000C868C0F3400070470146C868C0F3800020
+:100C500070470146C868C0F3C00070470146C868C5
+:100C6000C0F3001070470146C86800F001007047EB
+:100C700070B50246012901D1002416E0042901D1F2
+:100C8000012412E0102901D102240EE0402901D1F3
+:100C900003240AE0B1F5807F01D1042405E0B1F519
+:100CA000806F01D1052400E006242346064CE55C54
+:100CB00002F1180428190468044DEE5C0425B540BF
+:100CC0002C43046070BD00006F34000876340008C7
+:100CD00070B50246012901D1002416E0042901D192
+:100CE000012412E0102901D102240EE0402901D193
+:100CF00003240AE0B1F5807F01D1042405E0B1F5B9
+:100D0000806F01D1052400E006242346064CE55CF3
+:100D100002F1180428190468044DEE5C0825B5405A
+:100D20002C43046070BD00006F3400087634000866
+:100D30002DE9F04106460C4615460127012C08D046
+:100D4000102C0CD0B4F5807F0FD0B4F5805F18D193
+:100D500011E02946304600F07BFB074612E02946A9
+:100D6000304600F0B1FB07460CE02946304600F063
+:100D7000EDFB074606E02946304600F023FC074617
+:100D800000E000BF00BF3846BDE8F08181637047D6
+:100D9000826844F207039A430A43826070474268BC
+:100DA00022F070020A434260704708B50168009162
+:100DB00000BF4168009100BF08BD6FF040010160B5
+:100DC000704700002DE9FF4104460D46012700262B
+:100DD000204600F055F8002833D1E96868680843D8
+:100DE00029690843E16841F20C6291430843E060DD
+:100DF000A868216921F440510143216100BF68695D
+:100E0000616921F440710143616100BF6846FFF7E9
+:100E10008FFE0E48844201D1039E08E00C488442B4
+:100E200001D1029E03E00B48844200D1029E46B1EC
+:100E3000286830B10027314620462A6800F025F89E
+:100E400000BF384604B0BDE8F08100000038014022
+:100E5000004400400048004001460868C0F34000DC
+:100E6000704701460868C0F3800070470146086873
+:100E7000C0F3C000704701460868C0F38010704797
+:100E80000146C868C0F34030704770B501EBC1033C
+:100E900003EB01139400B3FBF4F301EBC10404EB87
+:100EA00001149500B4FBF5F46425B4FBF5F404EBF0
+:100EB000C40505EB0414A3EB8403322404EB0313F1
+:100EC0006424B3FBF4F303F0F00301EBC10404EB7F
+:100ED00001149500B4FBF5F46425B4FBF5F403EBC1
+:100EE000041401EBC10303EB01139500B3FBF5F30D
+:100EF00001EBC10505EB01159600B5FBF6F564267F
+:100F0000B5FBF6F505EBC50606EB0515A3EB85036A
+:100F1000322505EB03136425B3FBF5F303F00F0350
+:100F200023449BB2836070BD38B5012014494969E0
+:100F30000143134A5161114649690140009100BFC4
+:100F400000BF00F06BFD05460022114600F040FA9C
+:100F5000044621460E2000F071FD0E2000F044FDF5
+:100F600000F05CFD05460022114600F031FA04460F
+:100F700021460F2000F062FD0F2000F035FD38BD46
+:100F80000010024000B585B014216846FFF7D3F881
+:100F90001020FFF709FC2020FFF706FC0420FFF7D4
+:100FA00003FC0820FFF700FC1D491E48FFF787FDE2
+:100FB0001D491E48FFF783FD19480090012001904C
+:100FC000022002900020039069461648FFF7D6FCE5
+:100FD000174800900020019069461248FFF7CEFCA8
+:100FE000144800900020019069461348FFF7C6FCA2
+:100FF000124800900020019069460C48FFF7BEFCA3
+:1010000009480090012001900320029000200390E5
+:101010000120049069460548FFF7B0FC05B000BD0B
+:10102000200020040010014030003004000C01407A
+:10103000C000C004FDFD990400080140FFFFCF047B
+:1010400030B585B014216846FFF775F84FF400609D
+:10105000FFF7B8FB00F0EAFC05460022032100F090
+:10106000D7F904462146192000F0FCFC192000F0B5
+:10107000C8FC41F61F40ADF800000020019063203D
+:10108000029000200390049069460948FFF77CFD18
+:101090000748FFF765FD00210548FFF779FE0021AD
+:1010A0000348FFF77CFE0248FFF75FFD05B030BD47
+:1010B000002C014000B593B014210EA8FFF73BF8B7
+:1010C000202106A8FFF737F8142101A8FFF733F80D
+:1010D0000120FFF75BFB0020ADF838000F9041F6D0
+:1010E0001F401090002011900EA94FF08040FFF794
+:1010F0004BFD00BF4FF08040006840F080004FF093
+:101100008041086000BF00214FF08040FFF740FEA3
+:1011100010218806FFF7DCFD702006900020079064
+:101120000890099002200A9006AA10214007FFF7B4
+:10113000FFFD10218806FFF79BFD00214FF0804046
+:10114000FFF72DFE4FF08040FFF70FFD0420FFF763
+:1011500039FB40F202200190092002900220039006
+:101160000020049001A90248FFF708FC13B000BD5D
+:101170000008014030B585B014216846FEF7DBFF5A
+:101180000220FFF703FB00F051FC0546002203217B
+:1011900000F03EF9044621461D2000F063FC1D20AE
+:1011A00000F02FFC41F61F40ADF800000020019038
+:1011B000632002900020039069460948FFF7E4FC91
+:1011C0000748FFF7CDFC00210548FFF7E1FD0021AE
+:1011D0000348FFF7E4FD0248FFF7C7FC05B030BD48
+:1011E000000400402DE9F0418CB01C2105A8FEF759
+:1011F000A2FF14216846FEF79EFF4FF48040FFF7E0
+:10120000EFFA0420FFF7ECFA6848009009200190FB
+:10121000032002900020039069466548FFF7AEFB6B
+:10122000644800900420019069466148FFF7A6FBDE
+:10123000002205216048FFF72DFB002205215E48B2
+:10124000FFF706FB002205215B48FFF75DFB00224C
+:1012500005215948FFF772FB802205215648FFF708
+:1012600033FB002205215448FFF778FB00220521BB
+:101270005148FFF739FB102204214F48FFF70AFBC2
+:10128000002204214C48FFF7E3FA002204214A48D7
+:10129000FFF73AFB002204214748FFF74FFB80226B
+:1012A00004214548FFF710FB002204214248FFF7C4
+:1012B00055FB002204214048FFF716FB25213F4B38
+:1012C0001B68C3F30220052400250346C3F1070C65
+:1012D000BCF1040F02D94FF0040C01E0C3F1070C7C
+:1012E000674603F1040CBCF1070F02D24FF0000C6B
+:1012F00001E0A3F1030C66464FF0010C0CFA07FC69
+:10130000ACF1010C0CEA040C0CFA06FC4FF00108DD
+:1013100008FA06F8A8F1010808EA05084CEA0802EC
+:1013200000BF002904DB1007030E2548435407E0E3
+:101330001007040E21480C3001F00F031B1FC4548A
+:1013400000BF2520002809DB00F01F020121914089
+:101350004209920002F1E022C2F8001100BF4FF4EE
+:10136000E130059000200690079008900C2009902D
+:1013700000200A900B9005A91248FFF723FD00BF3B
+:101380001048006920F490400E4908610846406901
+:1013900020F02A00486100BF00BF0846C06840F442
+:1013A0000050C86000BF0CB0BDE8F081020002042C
+:1013B0000008014004000404000002400CED00E0BD
+:1013C00000E400E00038014000BFFEE700BFFEE798
+:1013D000F0B503460C4603F00701C1F107000428ED
+:1013E00001D9042001E0C1F107000646081D0728C5
+:1013F00001D2002000E0C81E05460120B040401E7A
+:101400002040A8400127AF407F1E17403843F0BD61
+:10141000F0B503460C4603F00701C1F107000428AC
+:1014200001D9042001E0C1F107000646081D072884
+:1014300001D2002000E0C81E05460120B040401E39
+:101440002040A8400127AF407F1E17403843F0BD21
+:1014500070B50246106A20F001001062136A5568E8
+:10146000946924F0030424F070000E6840EA060436
+:1014700023F002000E6940EA060323F001004E68E3
+:1014800040EA06030F48824213D123F008004E6958
+:1014900040EA860323F004008E6840EA860325F4C0
+:1014A00080708E6940EA060525F40070CE6940EA36
+:1014B000460555609461C868506300BF1362002000
+:1014C00070BD0000002C01402DE9F04104460D469E
+:1014D000206A20F010002062266AD4F80480A769F0
+:1014E00027F4407727F4E040296840EA012726F0F6
+:1014F0002000296940EA011626F01000696840EAD8
+:1015000001161148844213D126F08000696940EA2F
+:10151000811626F04000A96840EA811628F4806010
+:10152000A96940EA810828F40060E96940EAC10835
+:10153000C4F80480A7612046E968FFF727FC26620B
+:101540000020BDE8F0810000002C014070B502468B
+:10155000106A20F480701062136A5568D46924F010
+:10156000030424F070000E6840EA060423F40070BF
+:101570000E6940EA062323F480704E6840EA062391
+:101580000F48824213D123F400604E6940EA86235B
+:1015900023F480608E6840EA862325F480508E69AB
+:1015A00040EA061525F40050CE6940EA461555601C
+:1015B000D461C868D06300BF1362002070BD000012
+:1015C000002C014070B50246106A20F48050106271
+:1015D000146A5568D36923F4407323F4E0400E681D
+:1015E00040EA062324F400500E6940EA063424F44D
+:1015F00080504E6840EA06340748824204D125F400
+:1016000080408E6940EA86155560D361C8681064D1
+:1016100000BF1462002070BD002C01407047000024
+:10162000014600BF0448406800F0F0000009034A8A
+:10163000125C21FA02F0704700100240BC3400082E
+:10164000014600BF0548406800F4E060044A02EB30
+:101650001020027821FA02F07047000000100240CA
+:10166000CC340008014600BF0548406800F46050D3
+:10167000044A02EBD020027821FA02F07047000001
+:1016800000100240CC34000810B5002400BF0B4805
+:10169000406800F00C0020B1042804D0082808D1CC
+:1016A00003E0074C07E0064C05E000F00BF80446A9
+:1016B00001E0034C00BF00BF204610BD00100240F7
+:1016C00000127A000021002200BF1148406800F497
+:1016D000803002461AB1B2F5803F0CD101E00D49CD
+:1016E0000BE000BF0A484068C0F34040401C0A4B72
+:1016F000B3FBF0F101E0074900BF00BF00BF0448A1
+:10170000406800F47010022303EB90404843704798
+:101710000010024000093D0000127A007047704737
+:1017200010B502203749096821F007010143354A05
+:10173000116000BF00BF00BF3248006800F0070022
+:101740000228F8D100BF3048006840F480302E49AC
+:10175000086000BF00BF00BF2B480068C0F34040D6
+:101760000028F8D04FF480304FF4E011264A526838
+:1017700022F47C1200F440330B431A43224B5A608C
+:1017800000BF00BF1846006840F08070194608602E
+:1017900000BF00BF00BF1C480068C0F340600028C5
+:1017A000F8D000201849496821F0F0010143164A99
+:1017B000516000BF10151146496821F4E0610143F2
+:1017C000516000BF00201146496821F46051014377
+:1017D000516000BF02201146496821F00301014316
+:1017E000516000BF00BF00BF0748406800F00C0018
+:1017F0000828F8D10548FFF78DF90448FFF7AAF942
+:1018000010BD0000002002400010024000A24A0467
+:101810007047000010B53148FFF70CFA01285CD181
+:1018200000BF2E48FFF7F2F901280AD12B48FFF735
+:1018300006FA012805D100BF001F2849086100BF32
+:1018400000BF2648FFF7E7F901280AD12348FFF730
+:10185000FBF9012805D100BF801F2049086100BFA6
+:1018600000BF1E48FFF7DCF901280BD11B48FFF72A
+:10187000F0F9012806D100BF6FF008001749086190
+:1018800000BF00BF1548FFF7D0F901280BD113485E
+:10189000FFF7E4F9012806D100BF6FF010000F49EF
+:1018A000086100BF00BF0D48FFF7C4F901280AD145
+:1018B0000A48FFF7D8F9012805D100BFC01E074923
+:1018C000086100BF00BF00BFFFF71CF900BF04485C
+:1018D0000068401C0249086000BF10BD002C014098
+:1018E0005C00002010B52D48FFF7A4F9012853D162
+:1018F00000BF2A48FFF78AF901280AD12748FFF7D5
+:101900009EF9012805D100BF001F2449086100BFCE
+:1019100000BF2248FFF77FF901280AD11F48FFF7CF
+:1019200093F9012805D100BF801F1C49086100BF41
+:1019300000BF1A48FFF774F901280BD11748FFF7C9
+:1019400088F9012806D100BF6FF00800134908612B
+:1019500000BF00BF1148FFF768F901280BD10F48FD
+:10196000FFF77CF9012806D100BF6FF010000B498A
+:10197000086100BF00BF0948FFF75CF901280AD1E0
+:101980000648FFF770F9012805D100BFC01E0349C2
+:10199000086100BF00BF00BF10BD00000004004090
+:1019A00010B50248006801F0C5FB10BD60000020C2
+:1019B00000BFFEE70FB47CB50C0009AD01D0611E7D
+:1019C00000E00021CDE90001064B6A46294608984F
+:1019D00000F0A8F8002C02D0009A002111707CBC05
+:1019E0005DF814FB7B1F0008002809DB00F01F02D4
+:1019F000012191404209920002F1E022C2F8001157
+:101A00007047002809DB00F01F02012191404209C4
+:101A1000920002F1E022C2F800117047024800680B
+:101A2000C0F30220704700000CED00E0024800689F
+:101A3000C0F30220704700000CED00E010B5002854
+:101A400004DB0A07130E054A135406E00A07140EB6
+:101A5000034A00F00F031B1FD45410BD00E400E044
+:101A600018ED00E010B5002804DB0A07130E054A44
+:101A7000135406E00A07140E034A00F00F031B1F5D
+:101A8000D45410BD00E400E018ED00E002E008C806
+:101A9000121F08C1002AFAD170477047002001E0E8
+:101AA00001C1121F002AFBD170470000014601F15D
+:101AB000100000E0001D02681AB9024A1268904244
+:101AC000F8D370473800002010B50648046803E0DA
+:101AD0002046FFF7EBFF0446034800688442F7D333
+:101AE00010BD0000340000203800002010B504466E
+:101AF0002146002000F034FD10BD10B501E000F8D3
+:101B0000011B131EA2F10104A2B2F8D110BD10B541
+:101B100001E000F8011B131EA2F10104A2B2F8D1EA
+:101B200010BD00002DE9FF4F8DB00F460546002681
+:101B300006E025280BD0DDE90F1290476D1C761CBE
+:101B400028780028F5D111B03046BDE8F08F002488
+:101B5000A246A1460122E94900E0044315F8013FED
+:101B6000203B02FA03F00842F7D128782A2810D047
+:101B70006FF02F022878A0F13001092914D80AEB60
+:101B80008A0102EB410144F0020400EB010A6D1CE2
+:101B9000F0E701CF5FEA000A03D544F40054CAF12C
+:101BA000000A44F002046D1C28782E2817D115F87D
+:101BB000010F44F004042A280ED06FF02F02287879
+:101BC000A0F1300109290AD809EB890102EB410192
+:101BD00000EB01096D1CF2E757F8049B6D1C287897
+:101BE0006C280FD006DC4C2817D068280DD06A2846
+:101BF00014D104E0742810D07A280FD10DE044F4F9
+:101C000000140AE044F4801401E044F440146978BC
+:101C1000814202D104F580146D1C6D1C28786E2859
+:101C20001ED00CDC632830D004DC00288BD0582870
+:101C300011D19FE0642867D069280CD164E0732833
+:101C40002DD004DC6F2872D0702804D194E0752860
+:101C50006ED078286DD0DDE90F129047761C4BE1ED
+:101C6000C4F30250022806D0032809D0042801CF6B
+:101C700009D0066040E101CFF117C0E900613BE106
+:101C800001CF068038E1067036E117F8040B8DF8B5
+:101C9000000000208DF80100EB46012003E057F81A
+:101CA00004BB4FF0FF3061074FF0000102D40DE09C
+:101CB00008F10101884649450FDA8045F8DB1BF839
+:101CC00008100029F4D108E008F10101884681429A
+:101CD000FADB1BF808100029F6D1DDE90F23AAEB87
+:101CE00008008146214600F031F9304400EB080637
+:101CF00004E0DDE90F121BF8010B9047B8F1010871
+:101D0000F7D221464846F2E00A21C4F302524FF0CE
+:101D1000000B0891022A04D001CFC117032A09D071
+:101D20000AE0FF1D27F00707F7E8020108E02CE0B2
+:101D30001EE01FE000B2C117042A01D140B2C11752
+:101D4000021E71F1000206DA0023D0EB030063EB00
+:101D500001012D2202E0220504D52B228DF824203A
+:101D6000012203E0E20701D02022F7E7904653E08A
+:101D70000A210BE0102109E010214FF0000B44F084
+:101D800004044FF00809089103E008214FF0000B0C
+:101D90000891C4F30252022A04D001CF0021032A81
+:101DA00006D006E0FF1D27F00707F7E8020103E071
+:101DB00080B2042A00D1C0B24FF0000822072BD510
+:101DC0002A78702A07D0DDF820C08CF0100C5CEA6D
+:101DD0000B0C05D00EE040228DF82420012208E0F3
+:101DE00050EA010306D030238DF824308DF82520E9
+:101DF00002229046089B83F0080353EA0B030BD1A1
+:101E000050EA010201D1620706D530228DF8242064
+:101E10004FF00108A9F101092A78582A04D038A204
+:101E20000B9208AA0A920BE03AA2F9E75B46089ADD
+:101E3000FEF784FB0B9B9B5C0A9A521E0A9213705E
+:101E400050EA0102F2D10A98ADEB000000F1200B3C
+:101E5000600702D524F4803401E04FF00109D94530
+:101E600002DDA9EB0B0000E0002000EB0B01414478
+:101E70000890AAEB010AE00306D4DDE90F2321460E
+:101E8000504600F063F806444FF0000908E009A945
+:101E900011F80900DDE90F12904709F10109761CDC
+:101EA000C145F4DBE0030CD5DDE90F2321465046A4
+:101EB00000F04CF8064404E0DDE90F1230209047B2
+:101EC000761C0899481E08900029F5DC08E00A985D
+:101ED0000A990078491C0A91DDE90F129047761C97
+:101EE000BBF10001ABF1010BF1DC21465046DDE90D
+:101EF0000F2300F019F806446D1C21E609280100A3
+:101F0000303132333435363738396162636465666F
+:101F10000000000030313233343536373839414231
+:101F200043444546000000002DE9F04104460025E9
+:101F30001E461746880404D405E039462020B047E1
+:101F40006D1C641EF9D52846BDE8F0812DE9F041ED
+:101F5000044600251E469046C80301D5302700E000
+:101F60002027880404D505E041463846B0476D1C5B
+:101F7000641EF9D52846BDE8F0814A68002A06D0DB
+:101F80000A68531C0B6010704868401E4860704718
+:101F900010B515A1032000F005FCC82000F06EF874
+:101FA00000F002FB002405E0204600F0A1FB04F154
+:101FB0000A00C4B2642CF7DD00200E4908600E4907
+:101FC000086000BF0D48FEF7D5FD0C48FEF7D7FDB1
+:101FD00000BF00BF0A48FEF7CDFD0948FEF7CFFD60
+:101FE00000BF00F0DBFA10BD4C4F4144494E472E74
+:101FF0002E2E0000040000200C000020002C0140C8
+:102000000004004010B5034800F00EF8024800F04C
+:1020100061F910BD040000200C00002010B501F093
+:1020200059F800F052FE10BD08B50146002000909E
+:10203000086810B1112813D108E000BF00BF0B4899
+:102040000068486000BF1120086000BF074A486868
+:102050001268101A642801D2002008BD00BFEDE705
+:102060000020086000900320F7E700005C000020DB
+:1020700001490860704700002000002070B5044648
+:102080001E2094FBF0F594FBF0F100FB114604E0F8
+:1020900047F2305000F00CF86D1E002DF8D12EB133
+:1020A0004FF47A7106FB01F000F002F870BD0000F9
+:1020B00070B5034600224FF0E02675690D4E366874
+:1020C00003FB06F44FF0E026B16910E04FF0E02684
+:1020D000B06988420BD0884202D20E1A324402E024
+:1020E0002E1A0E4432440146A24200D300E0EDE72E
+:1020F00000BF70BD2000002010B500BF01220E49B6
+:102100000E48FEF7E8FC00BF0B490C48FEF7DFFC69
+:102110000B490A48FEF7DBFC0420FFF7C9FF06491C
+:102120000648FEF7D0FC0420FFF7C2FF044903482D
+:10213000FEF7C9FC10BD000010001004000C0140A7
+:102140002000200410B500BF01220E490E48FEF702
+:10215000C2FC00BF0D490C48FEF7B5FC09490A480E
+:10216000FEF7B1FC0420FFF7A3FF08490648FEF77D
+:10217000AEFC04490448FEF7AAFC0420FFF798FFD0
+:1021800010BD000010001004000C014020002004CD
+:1021900010B50024082213491348FEF79CFC11498E
+:1021A0001148FEF794FC0420FFF782FF0F490E4808
+:1021B000FEF78DFC0420FFF77BFF07E0601CC4B234
+:1021C000FA2C03DDFFF7BEFF002010BD05490648CD
+:1021D000FEF768FC0028F1D104490348FEF773FCC0
+:1021E0000120F2E710001004000C01402000200440
+:1021F00070B50446002500BF012217491748FEF7B5
+:102200006AFC00BF16491548FEF75DFC00BF1FE0E1
+:10221000E00920B110491148FEF759FC03E00E49CE
+:102220000E48FEF750FC6006040E0220FFF740FF48
+:102230000B490A48FEF74BFC0220FFF739FF08491B
+:102240000648FEF740FC0220FFF732FF681CC5B2CB
+:10225000082DDDDB70BD000010001004000C0140F3
+:102260002000200438B5044600208DF800008DF8C9
+:102270000140FFF741FF7820FFF7BAFFFFF788FF23
+:102280009DF80000FFF7B4FFFFF782FF9DF8010003
+:10229000FFF7AEFFFFF77CFFFFF754FF38BD38B5FF
+:1022A000044640208DF800008DF80140FFF724FF20
+:1022B0007820FFF79DFFFFF76BFF9DF80000FFF709
+:1022C00097FFFFF765FF9DF80100FFF791FFFFF70C
+:1022D0005FFF38BD38B5044600200090206810B17B
+:1022E0002E2837D12CE000BF1D481E4BD968C0F303
+:1022F0000F2222EA010301EA020543EA0543194DD0
+:102300002B6100BF18A20221002000F055FC1849E3
+:1023100008680968491C164B1960FEF796F80546CF
+:1023200000232A460221282000F052FA00F022FD64
+:1023300000BF10480068606000BF2E20206000BF12
+:102340000C4960680968081A642801D2002038BD69
+:1023500000BFC9E70020206000900320F7E70000DD
+:102360002000200400100140207469636B3A0000D3
+:102370001C0000205C00002008B501202749896965
+:102380000143264A9161114689690140009100BFCD
+:1023900000BF00071146C9690143D1611146C969EF
+:1023A0000140009100BF00BF032002461C4B19688A
+:1023B0004FF6FF0319401B4B0B4343EA0221184B16
+:1023C000196000BF00BF1848406820F0E06040F08E
+:1023D00000701549486000BFFFF7A2F91348006874
+:1023E0001349B0FBF1F084B22046FFF741FEFEF73F
+:1023F000C9FDFEF799FDFEF75DFEFEF7F3FEFEF761
+:102400001FFEFEF7B7FE002000F014F8FFF706FEEF
+:10241000FFF7BEFD01E0FFF7F5FDFCE7001002400D
+:102420000CED00E00000FA05000001400000002073
+:1024300040420F0010B504460C4951F824104A00E0
+:102440000B4951F82400002100F09EF8094951F889
+:1024500024200749083951F82400002100F094F89D
+:10246000012103480830015510BD0000183500084F
+:1024700050000020283500082DE9F04704460F469B
+:102480000025A9462348005D20B922481838016874
+:10249000204688471FB94FF0FF30BDE8F0871E483F
+:1024A00050F82400B7FBF0F61B4850F82400B7FBA7
+:1024B000F0F100FB117000B1761C184850F82400B0
+:1024C000451E22E01348083850F8240030F8150063
+:1024D00010B909F1010901E04FF00009B14513D12C
+:1024E0004FF0000809E00B48083850F8240005EBCD
+:1024F000080220F8126008F10108B045F3D306483D
+:1025000050F824006843C8E76D1E002DDADA4FF05A
+:10251000FF30C2E7580000202035000818350008B9
+:1025200010B501460023002207E00B4850F82100B7
+:1025300030F8120000B15B1C521C084850F8210012
+:102540009042F2D864205843044C54F82140B0FB28
+:10255000F4F0C0B210BD0000500000201835000893
+:1025600070B504460E4631462046FFF785FF054606
+:10257000681C08B9002070BD024850F824002844A7
+:10258000F9E700004800002030B5034601E003F8F9
+:10259000011B141EA2F10102F9D130BD10B500F0EB
+:1025A00003F800F0E7FB10BD10B54FF48062002186
+:1025B0000448FFF7ACFA4FF48062FF210248FFF7AE
+:1025C000A6FA10BD80280020802C00202DE9FC4FA9
+:1025D00004460D4616461F46301B01D5A01B00E0E1
+:1025E000301B8146781B01D5E81B00E0781B824632
+:1025F000B44201DA012001E04FF0FF300190BD420A
+:1026000001DA012001E04FF0FF300090A9EB0A0051
+:102610000FFA80F821E0294620460B9A00F022F8B4
+:10262000B44202D1BD4200D118E04FEA48000FFA8F
+:1026300080FBCAF10000834506DDA8EB0A000FFA13
+:1026400080F801982044C4B2CB4506DA08EB0900B3
+:102650000FFA80F800982844C5B2DCE700BFBDE857
+:10266000FC8F0000F0B503461446802B01DA4029A8
+:1026700000DBF0BD012C1CD1CD1701EB5575ED1021
+:1026800003EBC515194E755D0A46CE1701EB56765C
+:10269000F610A1EBC6070126BE403543EEB2084650
+:1026A000CD1701EB5575ED1003EBC5150F4F7E559A
+:1026B0001AE0CD1701EB5575ED1003EBC5150B4E68
+:1026C000755D0A46CE1701EB5676F610A1EBC607EC
+:1026D0000126BE40B5430846CE1701EB5676F610EC
+:1026E00003EBC616014FBD5500BFC2E7802800208E
+:1026F0003EB504460A25012005F118010A236C2283
+:102700000090184600F01CF801200090201DC2B275
+:1027100005F11A0107230C2000F0BCFA234606A29B
+:10272000052101A8FFF746F901AA02212C2000F09B
+:1027300071FA00F01FFB3EBD253364252500000023
+:102740002DE9F84104460D4616461F46DDF81C806B
+:10275000A019C2B22B4629462046CDF80080FFF7CB
+:1027600035FFE819C3B2A019C2B2E819C1B22046B8
+:10277000CDF80080FFF72AFFE819C3B222462946A8
+:102780002046CDF80080FFF721FFE919CBB2A1194F
+:10279000CAB2A119C8B22946CDF80080FFF716FFCA
+:1027A000BDE8F88170B505460C462046FDF7CEFC25
+:1027B00000EB40008021A1EB4000C0F34706224619
+:1027C0002946304600F0F8F900F0D4FA70BD000058
+:1027D0002DE9F04F87B005460E4691469A460020F7
+:1027E00003900490059002900024834600214846FF
+:1027F000FDF790FE07D22D222046611CCCB203A922
+:102800000A5489F00049E3494846FDF78DFE02D29B
+:1028100007B0BDE8F08FC4F10800C0B20290DE49F5
+:102820004846FDF781FE59D8DB494846FDF71FFDB4
+:102830008046DA49FDF791FC0746FDF724FEC2B257
+:102840002046611CCCB203A90A544846FDF702FE9B
+:1028500042F2107190FBF1F201FB12004FF47A7119
+:1028600090FBF1F03030C2B22046611CCCB203A91B
+:102870000A544846FDF7EEFD4FF47A7190FBF1F2F1
+:1028800001FB1200642190FBF1F03030C2B220460F
+:10289000611CCCB203A90A544846FDF7DBFD642154
+:1028A00090FBF1F201FB12000A2190FBF1F03030B5
+:1028B000C2B22046611CCCB203A90A544846FDF7B7
+:1028C000C9FD0A2190FBF1F201FB12003030C2B2C7
+:1028D0002046611CCCB203A90A54C2E0B049484664
+:1028E000FDF722FE48D84846FDF7B4FD42F21071CC
+:1028F00090FBF1F201FB12004FF47A7190FBF1F0C2
+:102900003030C2B22046611CCCB203A90A544846FA
+:10291000FDF7A0FD4FF47A7190FBF1F201FB12007C
+:10292000642190FBF1F03030C2B22046611CCCB281
+:1029300003A90A544846FDF78DFD642190FBF1F28E
+:1029400001FB12000A2190FBF1F03030C2B22046A8
+:10295000611CCCB203A90A544846FDF77BFD0A214D
+:1029600090FBF1F201FB12003030C2B22046611C34
+:10297000CCB203A90A5474E08A494846FDF7D4FD55
+:1029800034D84846FDF766FD4FF47A7190FBF1F2BA
+:1029900001FB1200642190FBF1F03030C2B22046FE
+:1029A000611CCCB203A90A544846FDF753FD6421CB
+:1029B00090FBF1F201FB12000A2190FBF1F03030A4
+:1029C000C2B22046611CCCB203A90A544846FDF7A6
+:1029D00041FD0A2190FBF1F201FB12003030C2B23E
+:1029E0002046611CCCB203A90A543AE06E4948461D
+:1029F000FDF79AFD21D84846FDF72CFD642190FB98
+:102A0000F1F201FB12000A2190FBF1F03030C2B26A
+:102A10002046611CCCB203A90A544846FDF71AFDB2
+:102A20000A2190FBF1F201FB12003030C2B22046C5
+:102A3000611CCCB203A90A5413E000214846FDF7FB
+:102A400073FD0ED84846FDF705FD0A2190FBF1F213
+:102A500001FB12003030C2B22046611CCCB203A987
+:102A60000A54BAF1000F6ADD072C68DA2E222046DC
+:102A7000611CCCB203A90A544846FDF7EBFC804622
+:102A8000FDF7DAFC07464946FDF7BCFB8146BAF183
+:102A9000010F1ED1082C1CDA43494846FDF7B5FB4F
+:102AA00081464846FDF722FD0022404BCDE900015A
+:102AB000FDF71BFC0746FDF7FAFC0A2190FBF1F23B
+:102AC00001FB12003030C2B22046611CCCB203A917
+:102AD0000A54BAF1020F32DB082C30DA3149484689
+:102AE000FDF793FB81464846FDF7B4FC642190FB5B
+:102AF000F1F201FB12000A2190FBF1F03030C2B27A
+:102B00002046611CCCB203A90A54082C17DA4846A7
+:102B1000FDF7ECFC0022254BCDE90001FDF7E5FBBC
+:102B20000746FDF7C4FC0A2190FBF1F201FB1200FD
+:102B30003030C2B22046611CCCB203A90A5422E054
+:102B400003A810F80B002038C0B20290782D02DDE7
+:102B50000025701CC6B200240DE0029800EB400076
+:102B6000134901EB4000005D05EBC6112144114AF9
+:102B70005054601CC4B2062CEFDBA81DC5B20BF18B
+:102B8000010000F0FF0B03A810F80B000028D7D1BC
+:102B900000BF3DE60000FA4600401C4600004042EF
+:102BA00000007A440000C842000020410000E03FDD
+:102BB0005A35000880280020F0B513460025002271
+:102BC00000241EE01E5D203EF5B27E2802DD0020BE
+:102BD0004E1CF1B200220EE005EB45060B4F07EB51
+:102BE0004606B65C00EBC1171744DFF824C00CF8AA
+:102BF0000760561CF2B2062AEEDB861DF0B2661C98
+:102C0000F4B21E5D002EDDD1F0BD00005A35000883
+:102C100080280020F0B5034614460022002000253D
+:102C200030E0665D203EF2B2782B02DD00234E1CC0
+:102C3000F1B200200CE000EB0216144FBE5D03EB76
+:102C4000C1170744DFF848C00CF80760461CF0B213
+:102C50000828F0DB00200EE000EB021608360B4FD0
+:102C6000BF5D4E1C03EBC6160644DFF824C00CF80B
+:102C70000670461CF0B20828EEDB03F10806F3B23A
+:102C80006E1CF5B2665D002ECBD1F0BD8237000818
+:102C9000802800202DE9F84306460D461746984641
+:102CA000DDF8209000240CE02819C3B2F019C2B25C
+:102CB0002819C1B23046CDF80090FFF787FC601CA0
+:102CC000C4B24445F0DBBDE8F88310B5AE20FFF791
+:102CD000C9FA2020FFF7C6FA1020FFF7C3FAC82070
+:102CE000FFF7C0FA0020FFF7BDFA1020FFF7BAFA8D
+:102CF0004020FFF7B7FA8120FFF7B4FAFF20FFF773
+:102D0000B1FAA120FFF7AEFAA620FFF7ABFAA82090
+:102D1000FFF7A8FA3F20FFF7A5FAA420FFF7A2FAD1
+:102D2000D320FFF79FFA0020FFF79CFAD520FFF78A
+:102D300099FAF020FFF796FAD920FFF793FA2220AC
+:102D4000FFF790FADA20FFF78DFA1220FFF78AFAE0
+:102D5000DB20FFF787FA2020FFF784FA8D20FFF7AA
+:102D600081FA1420FFF77EFAAF20FFF77BFAFFF716
+:102D700015FC10BD70B500242DE0002600200DE0EC
+:102D800000EBC4111D4A515C00EBC4121C4B9A5C51
+:102D9000914201D0012603E0411CC8B28028EFDB3C
+:102DA00000BFB6B104F1B001C8B2FFF75BFA012071
+:102DB000FFF758FA1020FFF755FA002507E005EB5A
+:102DC000C4110E4A505CFFF76AFA681CC5B2802D28
+:102DD000F5DB601CC4B2082CCFDB094807494FF46F
+:102DE000806203E011F8013B00F8013B131EA2F1E1
+:102DF0000104A2B2F6D100BF70BD000080280020FF
+:102E0000802C002010B5044604B910BD0020208598
+:102E1000A07D012808D1606A30B1218C89040A0C98
+:102E20000021606AFEF769FE00BFEEE72DE9F05F62
+:102E30000646884615469946DDE90B7BDDF828A055
+:102E40000EB1012100E0002108462921FDF780FC98
+:102E50004420FEF74BFE04460CB1012100E00021A6
+:102E600008462C21FDF774FC0120E0750020207637
+:102E7000C4F83C902584C4F840B0A786002D0CDD32
+:102E80002846FEF733FEE061E16909B1012100E067
+:102E9000002108463E21FDF75BFC002F0CDD384683
+:102EA000FEF724FE2063216B09B1012100E000211F
+:102EB00008464521FDF74CFC84F8158084F82CA0C9
+:102EC00066602046BDE8F09F10B5044604B910BD09
+:102ED000002060852046FFF795FF00BFF7E710B59B
+:102EE00004460CB1012100E00021084640F2D71150
+:102EF000FDF72EFC012084F838002169A068FDF759
+:102F00007DFC2069082865D2DFE800F06404111E0A
+:102F10002C3A485600BFA0680168C1F3400121B1B6
+:102F2000A0680221416000BF00BF00BF53E000BFA6
+:102F3000A0680168C1F3401121B1A068202141605F
+:102F400000BF00BF00BF46E000BFA0680168C1F33A
+:102F5000402129B1A0684FF40071416000BF00BF5B
+:102F600000BF38E000BFA0680168C1F3403129B15B
+:102F7000A0684FF40051416000BF00BF00BF2AE0CD
+:102F800000BFA0680168C1F3404129B1A0684FF4B7
+:102F90000031416000BF00BF00BF1CE000BFA0685F
+:102FA0000168C1F3405129B1A0684FF4001141609C
+:102FB00000BF00BF00BF0EE000BFA0680168C1F302
+:102FC000406129B1A0684FF00071416000BF00BFAF
+:102FD00000BF00E000BF00BF606800BF00BF00BFCF
+:102FE00000F10C0252E8002F42F0400100F10C0207
+:102FF00042E80013002BF3D100BF00BF206908286E
+:1030000065D2DFE800F06404111E2C3A485600BF78
+:10301000A0680168C1F3C00121B1A0680821416026
+:1030200000BF00BF00BF53E000BFA0680168C1F34C
+:10303000C01121B1A0688021416000BF00BF00BF66
+:1030400046E000BFA0680168C1F3C02129B1A068B3
+:103050004FF40061416000BF00BF00BF38E000BF17
+:10306000A0680168C1F3C03129B1A0684FF40041E4
+:10307000416000BF00BF00BF2AE000BFA068016838
+:10308000C1F3C04129B1A0684FF40021416000BFE5
+:1030900000BF00BF1CE000BFA0680168C1F3C051C1
+:1030A00029B1A0684FF40001416000BF00BF00BF1C
+:1030B0000EE000BFA0680168C1F3C06129B1A0683B
+:1030C0004FF00061416000BF00BF00BF00E000BFE3
+:1030D00000BF10BD0EB51348006808BB0020F021EA
+:1030E0000122114BCDE9002102900A4601210F482F
+:1030F000FFF79CFE0B4908600020096808700C4827
+:10310000084909688860052006490968C8600420E4
+:1031100004490968086100210248006800F0E2F8EB
+:103120000EBD000060000020673400080038014038
+:103130000000024038B5044604B938BD6068C16873
+:10314000C1F34011B9B160680168C1F3401191B198
+:10315000608D218C884202DB2046FFF7B5FE616856
+:103160004A68D2B2608D411C6185E1690A54002031
+:103170002076E0753FE06068C168C1F30011002966
+:1031800039D060680168C1F30011002933D0607D37
+:1031900001282BD1D4E902014A1E514B9A5C02440A
+:1031A0005268208C801A6085207DF8B9D4E902012C
+:1031B000FDF724FBE06B80B1608D00280DDD608D94
+:1031C000218C884209DC628D2078E36BE1699847A5
+:1031D000228C0021E069FEF790FC228CD4E90201E8
+:1031E000FDF746FBD4E90201FDF716FB00206085E0
+:1031F0006068FDF7DAFD6068C168C1F3801151B104
+:103200006068FDF738FE30B1206C08B1206C804753
+:103210006068FDF7D2FDA07D01285ED101256068C0
+:10322000C168C1F3002171B16068016801F001015A
+:1032300049B1022560680168009100BF41680091B2
+:1032400000BF00BF00BF6068FDF706FE68B16068A0
+:10325000FDF702FE48B1042560680168009100BFD7
+:103260004168009100BF00BF00BF6068FDF7F9FD35
+:1032700060B16068FDF7F5FD40B1606801680091DC
+:1032800000BF4168009100BF00BF00BF6068FDF74C
+:10329000EDFD68B16068FDF7E9FD48B11025606893
+:1032A0000168009100BF4168009100BF00BF00BFEE
+:1032B000012D11D0606A78B1618D491E88B2228DCE
+:1032C000616A01EB82014880228D616A01F8225017
+:1032D000218D491C218500BF00BF00BF2DE70000E4
+:1032E000D434000870B504460D46607D90B9A575CC
+:1032F000606800BF00BF00BF00F10C0252E8002F61
+:1033000042F0200100F10C0242E80013002BF3D13F
+:1033100000BF70E00020A0756068FDF746FD2169E0
+:10332000A068FDF76BFAD4E90201FDF767FA60685F
+:10333000011D0E463246D4E90201FDF7F5FAE269B5
+:10334000D4E90201FDF7B6FA228CD4E90201FDF7B7
+:103350008FFAD4E90201FDF76DFAD4E90201FDF715
+:103360005BFA606800BF00BF00BF00F1140252E8C2
+:10337000002F42F0400100F1140242E80013002B3C
+:10338000F3D100BF00BF606800BF00BF00BF00F105
+:103390000C0252E8002F42F0100100F10C0242E84A
+:1033A0000013002BF3D100BF00BF6068011D0E4663
+:1033B00032462169A068FDF7B7FA226B2169A0683F
+:1033C000FDF778FA2169A068FDF734FA606800BF5C
+:1033D00000BF00BF00F1140252E8002F42F080014C
+:1033E00000F1140242E80013002BF3D100BF00BF2C
+:1033F000012084F83800A07D012833D1606A68B9C3
+:10340000218C8800FEF772FB6062616A09B10121BC
+:1034100000E0002108468221FDF79AF9606800BFAC
+:1034200000BF00BF00F10C0252E8002F42F480718F
+:1034300000F10C0242E80013002BF3D100BF00BFE3
+:10344000606800BF00BF00BF00F1140252E8002F07
+:1034500042F0010100F1140242E80013002BF3D105
+:1034600000BF00BF70BD7047081C3044586C80001E
+:103470000000000404040000080000000800000828
+:103480000000000800020406080A0C000102030400
+:103490000506081C3044586C800000000004040439
+:1034A00000000800000008000008000000080002FA
+:1034B0000406080A0C0001020304050600000000CF
+:1034C00000000000010203040607080900000000D4
+:1034D00001020304081C3044586C80000000000402
+:1034E00004040000080000000800000800000008B4
+:1034F00000020406080A0C000102030405065F6CC2
+:10350000697374006C69737420616C6C20636F6DF7
+:103510006D616E6400000000000400000000000007
+:10352000080000000800000000200000000000006B
+:10353000081C3044586C80000000000404040000A3
+:10354000080000000800000800000008000204064F
+:10355000080A0C0001020304050600000000000038
+:103560000000002F000000000700070000147F1477
+:103570007F1400242A7F2A12006264081323003675
+:103580004955225000000503000000001C224100A4
+:10359000000041221C000014083E08140008083EE8
+:1035A0000808000000A060000008080808080000E3
+:1035B00060600000002010080402003E5149453EB2
+:1035C0000000427F400000426151494600214145D0
+:1035D0004B31001814127F10002745454539003C37
+:1035E0004A49493000017109050300364949493605
+:1035F00000064949291E00003636000000005636F4
+:1036000000000008142241000014141414140000D7
+:103610004122140800020151090600324959513E65
+:10362000007C1211127C007F49494936003E41411D
+:103630004122007F4141221C007F49494941007FCE
+:1036400009090901003E4149497A007F0808087FBD
+:103650000000417F4100002040413F01007F0814ED
+:103660002241007F40404040007F020C027F007FEB
+:103670000408107F003E4141413E007F09090906D0
+:10368000003E4151215E007F091929460046494903
+:1036900049310001017F0101003F4040403F001FD0
+:1036A0002040201F003F4038403F0063140814634F
+:1036B00000070870080700615149454300007F4139
+:1036C000410000552A552A55000041417F00000461
+:1036D000020102040040404040400000010204009A
+:1036E000002054545478007F4844443800384444FF
+:1036F000442000384444487F00385454541800088B
+:103700007E0901020018A4A4A47C007F08040478A8
+:103710000000447D4000004080847D00007F102830
+:1037200044000000417F4000007C04180478007CC5
+:103730000804047800384444443800FC2424241845
+:103740000018242418FC007C080404080048545481
+:10375000542000043F444020003C4040207C001C9A
+:103760002040201C003C4030403C004428102844AD
+:10377000001CA0A0A07C004464544C4414141414F5
+:103780001414000000000000000000000000000011
+:103790000000000000F800000000000000333000CE
+:1037A000000000100C06100C0600000000000000D5
+:1037B000000040C07840C0784000043F04043F044B
+:1037C0000400007088FC08300000001820FF211E53
+:1037D0000000F008F000E018000000211C031E218A
+:1037E0001E0000F00888700000001E212324192705
+:1037F000211010160E000000000000000000000064
+:103800000000000000E0180402000000000718207B
+:10381000400000020418E0000000004020180700EB
+:103820000000404080F0804040000202010F010291
+:103830000200000000F0000000000101011F010172
+:103840000100000000000000000080B070000000D7
+:103850000000000000000000000000010101010163
+:1038600001010000000000000000003030000000F6
+:1038700000000000000080601804006018060100CD
+:10388000000000E010080810E000000F10202010D9
+:103890000F00001010F8000000000020203F202042
+:1038A00000000070080808887000003028242221D9
+:1038B000300000300888884830000018202020118F
+:1038C0000E000000C02010F8000000070424243F70
+:1038D000240000F808888808080000192120201119
+:1038E0000E0000E0108888180000000F1120201141
+:1038F0000E0000380808C83808000000003F00002B
+:1039000000000070880808887000001C2221212215
+:103910001C0000E010080810E00000003122221115
+:103920000F00000000C0C0000000000000303000A8
+:103930000000000000800000000000008060000027
+:103940000000000080402010080000010204081060
+:10395000200040404040404040000404040404046F
+:10396000040000081020408000000020100804021D
+:103970000100007048080808F0000000003036011F
+:103980000000C030C828E810E000071827242314DE
+:103990000B000000C038E0000000203C230202279A
+:1039A000382008F8888888700000203F20202011E7
+:1039B0000E00C03008080808380007182020201022
+:1039C000080008F808080810E000203F2020201018
+:1039D0000F0008F88888E8081000203F20202320E6
+:1039E000180008F88888E8081000203F200003002D
+:1039F0000000C03008080838000007182020221EE8
+:103A0000020008F808000008F808203F2101012101
+:103A10003F20000808F8080800000020203F202070
+:103A2000000000000808F8080800C08080807F00BF
+:103A3000000008F888C028180800203F2001263818
+:103A4000200008F8080000000000203F202020206F
+:103A5000300008F8F800F8F80800203F003F003F69
+:103A6000200008F830C00008F808203F20000718A0
+:103A70003F00E01008080810E0000F102020201080
+:103A80000F0008F808080808F000203F2101010194
+:103A90000000E01008080810E0000F182424385037
+:103AA0004F0008F8888888887000203F2000030CA9
+:103AB00030200070880808083800003820212122B2
+:103AC0001C00180808F8080818000000203F200013
+:103AD000000008F808000008F808001F2020202037
+:103AE0001F000878880000C83808000007380E0159
+:103AF0000000F80800F80008F800033C0700073C45
+:103B00000300081868808068180820302C03032CF4
+:103B100030200838C800C83808000000203F2000C6
+:103B2000000010080808C838080020382621202086
+:103B30001800000000FE020202000000007F40406A
+:103B40004000000C30C000000000000000010638FA
+:103B5000C00000020202FE000000004040407F0062
+:103B60000000000004020202040000000000000047
+:103B70000000000000000000000080808080808045
+:103B8000808000020204000000000000000000002D
+:103B90000000000080808080000000192422222282
+:103BA0003F2008F8008080000000003F1120201115
+:103BB0000E000000008080800000000E11202020F8
+:103BC0001100000000808088F800000E11202010F5
+:103BD0003F200000808080800000001F22222222DF
+:103BE0001300008080F0888888180020203F202063
+:103BF00000000000808080808000006B949494938B
+:103C0000600008F8008080800000203F2100002034
+:103C10003F2000809898000000000020203F2020D6
+:103C20000000000000809898000000C08080807F25
+:103C3000000008F8000080808000203F24022D3022
+:103C40002000000808F8000000000020203F20208D
+:103C500000008080808080808000203F20003F2006
+:103C6000003F8080008080800000203F21000020F5
+:103C70003F200000808080800000001F2020202046
+:103C80001F00808000808000000080FFA1202011A4
+:103C90000E000000008080808000000E112020A017
+:103CA000FF80808080008080800020203F212000D5
+:103CB00001000000808080808000003324242424C0
+:103CC0001900008080E0808000000000001F20209C
+:103CD00000008080000000808000001F2020201055
+:103CE0003F20808080000080808000010E30080628
+:103CF000010080800080008080800F300C030C3039
+:103D00000F0000808000808080000020312E0E3166
+:103D10002000808080000080808080818E70180666
+:103D2000010000808080808080000021302C2221D2
+:103D3000300000000000807C020200000000003F14
+:103D4000404000000000FF00000000000000FF00F5
+:103D500000000002027C800000000040403F0000A4
+:103D6000000000060101020204040000000000003F
+:103D700000000003050911FF118905C300E000F0F0
+:103D800000F8000000000000004428FF11AA4400D1
+:103D90000000000000000000000000000000000023
+:103DA0000000000000000000000000000000000013
+:103DB0000000000000000000000000000000000003
+:103DC00000000000000000000000000083013844F3
+:103DD000829292740183000000000000007C44C7BE
+:103DE000017D7D7D7D017D7D7D7D017D7D7D7D01F3
+:103DF000FF000000000000010001000100010001BF
+:103E000000010000000000000000000101000000AF
+:103E100000000000000000000000000000000000A2
+:103E20000000000000000000000000000000000092
+:103E30000000000000000000000000000000000082
+:103E40000000000000000000000000000101000070
+:103E5000000000000101000000000000000000015F
+:103E60000101010101010101010101010101010142
+:103E70000100000000000000000000404040404001
+:103E800000006D6D6D6D6D00006060606060000031
+:103E900040404040400000000000000000000000E2
+:103EA0000000000000000000000000000000000012
+:103EB0000000000000000000000000000000000002
+:103EC00000000000000000000000000000000000F2
+:103ED00000000000000000000000000000000000E2
+:103EE00000000000000000000000000000000000D2
+:103EF0000000000000000000000000DBDBDBDBDB7B
+:103F00000000DBDBDBDBDB0000DBDBDBDBDB000023
+:103F1000DBDBDBDBDB0000DADADADADA0000D8D868
+:103F2000D8D8D80000C0C0C0C0C00000C0C0C0C049
+:103F3000C00000C0C0C0C0C00000C0C0C0C0C00041
+:103F400000808080808000000000000000000000F1
+:103F50000000000000000000000000000000000061
+:103F60000000000000000000000000000000000051
+:103F70000000000000000000000000060606060623
+:103F800000000606060606000006060606060000F5
+:103F900006060606060000060606E6662000060679
+:103FA00086060600000606060686000006060606C9
+:103FB000060000868686868680808686068686C07F
+:103FC000C08686860606D0307606060606000006FF
+:103FD0000606060600000606060606000006060699
+:103FE00006060000060606060600000000000000A7
+:103FF00000000000000000000000000000000000C1
+:1040000000000000000000000000000000000000B0
+:10401000000000000000000000000000601C00FE26
+:1040200000010200C41820029E63B20E00FF8181CD
+:10403000FF00008040300F00000000FF0023EAAACC
+:10404000BFAAEA033F00FF000000000000000000DC
+:104050000000000000000000000000000000000060
+:104060000000000000000000000000000000000050
+:104070000000000000808080000000000080808040
+:104080000000000000000000000000000000000030
+:10409000000000000000000000000E0C08000001FD
+:1040A0000101010100000001000000010081808089
+:1040B0008180818080808001010101000000010079
+:1040C000000001000101090C0E00000000000000CA
+:1040D00000000000000000000000C0C0C0C0C0C060
+:1040E000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0
+:1040F000C000001E21404050215E001E2140405063
+:10410000215E000000000000000000000000000030
+:10411000000000000000000000000000000000009F
+:1041200000000000000000000000000000FFFFC1D0
+:10413000C1FFFFC1C1FFFF00000000000000000040
+:10414000000000000000000000000000000000006F
+:1041500000000000000000000000FFFF80FCF3EF03
+:10416000F3FC80FF80EEEEEEF5FBFF9CBEB6B6885A
+:10417000FF000000944100080000002074000000CF
+:104180008C1A000808420008740000200C3400005B
+:104190009C1A00080024F400000000000000000049
+:1041A000000000000000000000000000000000000F
+:1041B00000000000000000000000000000000000FF
+:1041C00000000000000000000000000000000000EF
+:1041D0000000000035240008212500088000002090
+:1041E00000C00120802000203C00002000000000D2
+:1041F0000000000000000000FE3400080435000844
+:08420000C6E533B4C91A000839
:04000005080000ED02
:00000001FF
diff --git a/User/application/app.c b/User/application/app.c
index 7ed4a70..529428f 100644
--- a/User/application/app.c
+++ b/User/application/app.c
@@ -3,7 +3,6 @@
#include "board.h"
#include "flow.h"
-
static struct flow business_fw; // 业务流程
static struct flow idle_fw; // 空闲任务
@@ -15,7 +14,13 @@ static uint8_t business_inspection(struct flow *fl)
for (;;)
{
- FL_LOCK_DELAY(fl, FL_CLOCK_100MSEC);
+ FL_LOCK_DELAY(fl, FL_CLOCK_SEC);
+ // ssd1306_clear_buffer();
+ // ssd1306_f8x16_string(0, 0, " PERCENT:");
+ // ssd1306_f8x16_number(88, 0, 100, 0);
+ // ssd1306_f8x16_string(0, 2, " CUR:");
+ // ssd1306_f8x16_number(48, 2, 0, 0);
+ // ssd1306_update_screen();
}
FL_TAIL(fl);
}
@@ -31,9 +36,13 @@ static uint8_t business_inspection(struct flow *fl)
static uint8_t idle_inspection(struct flow *fl)
{
FL_HEAD(fl);
+ static uint32_t tick = 0;
for (;;)
{
GPIO_TOGGLE(LED_BLUE_GPIO_Port, LED_BLUE_Pin);
+ ssd1306_f6x8_string(0, 2, " tick:");
+ ssd1306_f6x8_number(40, 2, tick++, 0);
+ ssd1306_update_screen();
FL_LOCK_DELAY(fl, FL_CLOCK_SEC);
}
FL_TAIL(fl);
@@ -59,10 +68,20 @@ void app_run(void)
*/
void app_init(void)
{
+ ssd1306_draw_text_center(3, "LOADING...");
+ delay_ms(200);
+ // 显示加载进度条
+ ssd1306_clear_buffer();
+ for (uint8_t i = 0; i <= 100; i += 10)
+ {
+ ssd1306_draw_progress_bar(i);
+ }
FL_INIT(&business_fw); // 业务流程
FL_INIT(&idle_fw); // 空闲任务
ENABLE_TIM(TASK_TIM);
ENABLE_TIM(WORK_TIM);
+
+ ssd1306_clear();
}
diff --git a/User/board/board.c b/User/board/board.c
index bbc564b..7c203f4 100644
--- a/User/board/board.c
+++ b/User/board/board.c
@@ -38,5 +38,5 @@ void uart_send(uint8_t *data, uint16_t len)
void board_init(void)
{
uart_init();
- ssd096_init();
+ ssd1306_init();
}
diff --git a/User/board/board.h b/User/board/board.h
index bf2e21c..1568bba 100644
--- a/User/board/board.h
+++ b/User/board/board.h
@@ -1,7 +1,7 @@
#ifndef __BOARD_H__
#define __BOARD_H__
#include "lib.h"
-#include "ssd096_oled.h"
+#include "ssd1306_oled.h"
#define UART_RXSIZE (240u) // 接收240个字节
#define UART_TXSIZE (240u) // 发送240个字节
diff --git a/User/board/ssd096_oled.c b/User/board/ssd096_oled.c
deleted file mode 100644
index c13a23e..0000000
--- a/User/board/ssd096_oled.c
+++ /dev/null
@@ -1,147 +0,0 @@
-#include "ssd096_oled.h"
-static void i2c_start(void)
-{
- GPIO_SET(SSD096_SDA_PORT, SSD096_SDA_PIN);
- GPIO_SET(SSD096_SCK_PORT, SSD096_SCK_PIN);
- GPIO_RESET(SSD096_SDA_PORT, SSD096_SDA_PIN);
- GPIO_RESET(SSD096_SCK_PORT, SSD096_SCK_PIN);
-}
-
-static void i2c_stop(void)
-{
- GPIO_RESET(SSD096_SDA_PORT, SSD096_SDA_PIN);
- GPIO_SET(SSD096_SCK_PORT, SSD096_SCK_PIN);
- GPIO_SET(SSD096_SDA_PORT, SSD096_SDA_PIN);
-}
-
-void i2c_write_byte(uint8_t data)
-{
- uint8_t i;
- for (i = 0; i < 8; i++)
- {
- if ((data & 0x80) >> i)
- GPIO_SET(SSD096_SDA_PORT, SSD096_SDA_PIN);
- else
- GPIO_RESET(SSD096_SDA_PORT, SSD096_SDA_PIN);
- data <<= 1;
- GPIO_SET(SSD096_SCK_PORT, SSD096_SCK_PIN);
- GPIO_RESET(SSD096_SCK_PORT, SSD096_SCK_PIN);
- }
- GPIO_SET(SSD096_SCK_PORT, SSD096_SCK_PIN); // 额外的一个时钟,不处理应答信号
- GPIO_RESET(SSD096_SCK_PORT, SSD096_SCK_PIN);
-}
-
-/**
- * @brief 向I2C设备写入命令
- *
- * 通过I2C接口向指定设备写入一个命令字节。
- *
- * @param command 要写入的命令字节
- */
-static void i2c_write_command(uint8_t command)
-{
- i2c_start();
- i2c_write_byte(0x78);
- i2c_write_byte(0x00);
- i2c_write_byte(command);
- i2c_stop();
-}
-
-/**
- * @brief 向I2C设备写入一个字节的数据
- *
- * 该函数通过I2C总线向指定设备写入一个字节的数据。
- *
- * @param data 要写入的数据字节
- */
-static void i2c_write_data(uint8_t data)
-{
- i2c_start();
- i2c_write_byte(0x78);
- i2c_write_byte(0x40);
- i2c_write_byte(data);
- i2c_stop();
-}
-
-/**
- * @brief 设置SSD096 OLED显示屏上的光标位置
- *
- * 设置SSD096 OLED显示屏上的光标位置到指定的x和y坐标。
- *
- * @param x 横向位置,取值范围为0到127
- * @param y 纵向位置,取值范围为0到63
- */
-void ssd096_set_position(uint8_t x, uint8_t y)
-{
- i2c_write_command(0xb0 | y);
- i2c_write_command(0x10 | ((x & 0xf0) >> 4));
- i2c_write_command(0x00 | (x & 0x0f));
-}
-
-/**
- * @brief 清空SSD096显示屏
- *
- * 该函数将SSD096显示屏的内容清空,即将所有像素点设置为关闭状态。
- *
- * @note 该函数通过I2C接口向SSD096发送数据,以实现清屏操作。
- */
-void ssd096_clear(void)
-{
- uint8_t i, j;
- for (i = 0; i < 8; i++)
- {
- ssd096_set_position(i, 0);
- for (j = 0; j < 128; j++)
- {
- i2c_write_data(0x00);
- }
- }
-}
-void ssd096_full(void)
-{
- uint8_t i, j;
- for (i = 0; i < 8; i++)
- {
- ssd096_set_position(i, 0);
- for (j = 0; j < 128; j++)
- {
- i2c_write_data(0xff);
- }
- }
-}
-
-/**
- * @brief 初始化SSD096显示驱动
- *
- * 该函数用于初始化SSD096显示驱动,完成基本的配置和初始化工作。
- */
-void ssd096_init(void)
-{
- i2c_write_command(0xae);
- i2c_write_command(0xd5);
- i2c_write_command(0x80);
- i2c_write_command(0xa8);
- i2c_write_command(0x3f);
- i2c_write_command(0xd3);
- i2c_write_command(0x00);
- i2c_write_command(0x40);
- i2c_write_command(0xa1);
- i2c_write_command(0xc8);
- i2c_write_command(0xda);
- i2c_write_command(0x12);
- i2c_write_command(0x81);
- i2c_write_command(0xcf);
- i2c_write_command(0xd9);
- i2c_write_command(0xf1);
- i2c_write_command(0xdb);
- i2c_write_command(0x30);
- i2c_write_command(0xa4);
- i2c_write_command(0xa6);
- i2c_write_command(0x8d);
- i2c_write_command(0x14);
- i2c_write_command(0xaf);
-
- ssd096_clear();
-
- ssd096_full();
-}
diff --git a/User/board/ssd096_oled.h b/User/board/ssd096_oled.h
deleted file mode 100644
index e66a082..0000000
--- a/User/board/ssd096_oled.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef __SSD096_OLED_H
-#define __SSD096_OLED_H
-#include "main.h"
-#define SSD096_SDA_PORT OLED_SDA_GPIO_Port
-#define SSD096_SDA_PIN OLED_SDA_Pin
-#define SSD096_SCK_PORT OLDE_SCK_GPIO_Port
-#define SSD096_SCK_PIN OLDE_SCK_Pin
-
-void ssd096_init(void);
-void ssd096_clear(void);
-void ssd096_set_position(uint8_t x, uint8_t y);
-#endif // __SSD096_OLED_H
diff --git a/User/lib/driver/ssd1306_oled.c b/User/lib/driver/ssd1306_oled.c
index fad35c0..a232cae 100644
--- a/User/lib/driver/ssd1306_oled.c
+++ b/User/lib/driver/ssd1306_oled.c
@@ -1,13 +1,12 @@
/**
* @file ssd1306_oled.c
* @author xushenghao
- * @brief SSD1306 OLED display driver
+ * @brief 0.96 SSD1306 OLED display driver
* @version 0.1
* @note PB13-SCK PB12-SDA
*/
#include "ssd1306_oled.h"
-
-#include "ssd1306_oled.h"
+#include "string.h"
/************************************6*8的点阵************************************/
const uint8_t F6x8[][6] =
@@ -205,7 +204,76 @@ const uint8_t F8X16[] =
0x00, 0x06, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //~ 94
};
-static uint8_t _buffer[SSD1306_WIDTH * SSD1306_HEIGHT / 8]; // 定义屏幕缓冲区
+const uint8_t LOGO[] = {
+ 0x00, 0x03, 0x05, 0x09, 0x11, 0xFF, 0x11, 0x89, 0x05, 0xC3, 0x00, 0xE0, 0x00, 0xF0, 0x00, 0xF8,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x28, 0xFF, 0x11, 0xAA, 0x44, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x38, 0x44, 0x82, 0x92,
+ 0x92, 0x74, 0x01, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x44, 0xC7, 0x01, 0x7D,
+ 0x7D, 0x7D, 0x7D, 0x01, 0x7D, 0x7D, 0x7D, 0x7D, 0x01, 0x7D, 0x7D, 0x7D, 0x7D, 0x01, 0xFF, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
+ 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x00, 0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x40, 0x40,
+ 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x00, 0x00,
+ 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x00, 0x00, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x00, 0x00, 0xDB, 0xDB,
+ 0xDB, 0xDB, 0xDB, 0x00, 0x00, 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, 0x00, 0x00, 0xD8, 0xD8, 0xD8, 0xD8,
+ 0xD8, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00,
+ 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x06, 0xE6, 0x66, 0x20, 0x00, 0x06, 0x06, 0x86, 0x06,
+ 0x06, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x86, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00,
+ 0x00, 0x86, 0x86, 0x86, 0x86, 0x86, 0x80, 0x80, 0x86, 0x86, 0x06, 0x86, 0x86, 0xC0, 0xC0, 0x86,
+ 0x86, 0x86, 0x06, 0x06, 0xD0, 0x30, 0x76, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x1C, 0x00, 0xFE, 0x00, 0x01,
+ 0x02, 0x00, 0xC4, 0x18, 0x20, 0x02, 0x9E, 0x63, 0xB2, 0x0E, 0x00, 0xFF, 0x81, 0x81, 0xFF, 0x00,
+ 0x00, 0x80, 0x40, 0x30, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x23, 0xEA, 0xAA, 0xBF, 0xAA,
+ 0xEA, 0x03, 0x3F, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x0C, 0x08, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x81, 0x80, 0x80, 0x81, 0x80,
+ 0x81, 0x80, 0x80, 0x80, 0x80, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x01, 0x01, 0x09, 0x0C, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
+ 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00,
+ 0x00, 0x1E, 0x21, 0x40, 0x40, 0x50, 0x21, 0x5E, 0x00, 0x1E, 0x21, 0x40, 0x40, 0x50, 0x21, 0x5E,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC1, 0xC1, 0xFF,
+ 0xFF, 0xC1, 0xC1, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0xFC, 0xF3, 0xEF, 0xF3, 0xFC,
+ 0x80, 0xFF, 0x80, 0xEE, 0xEE, 0xEE, 0xF5, 0xFB, 0xFF, 0x9C, 0xBE, 0xB6, 0xB6, 0x88, 0xFF, 0x00,
+ // end
+};
+
+static uint8_t _buffer[SSD1306_WIDTH * SSD1306_HEIGHT / 8]; // 定义屏幕缓冲区
+static uint8_t _buffer_copy[SSD1306_WIDTH * SSD1306_HEIGHT / 8]; // 屏幕缓冲区副本
static void i2c_start(void)
{
@@ -408,11 +476,16 @@ void ssd1306_init(void)
i2c_write_command(SSD1306_CMD_CHARGE_PUMP); //--set DC-DC enable
i2c_write_command(SSD1306_CMD_SET_DC_DC_ENABLE); //
i2c_write_command(SSD1306_CMD_DISPLAY_ON); //--turn on oled panel
- ssd1306_fill(0);
+ ssd1306_clear();
// ssd1306_test();
}
+void ssd1306_logo(void)
+{
+ ssd1306_draw_bmp(0, 0, SSD1306_WIDTH, 2, LOGO);
+}
+
void ssd1306_display_on(void)
{
i2c_write_command(SSD1306_CMD_CHARGE_PUMP); // 设置电荷泵
@@ -440,14 +513,28 @@ void ssd1306_update_screen(void)
{
for (uint8_t i = 0; i < SSD1306_HEIGHT / 8; i++)
{
- i2c_write_command(0xb0 + i);
- i2c_write_command(0x01);
- i2c_write_command(0x10);
+ uint8_t update_needed = 0;
for (uint8_t j = 0; j < SSD1306_WIDTH; j++)
{
- i2c_write_data(_buffer[j + i * SSD1306_WIDTH]);
+ if (_buffer[j + i * SSD1306_WIDTH] != _buffer_copy[j + i * SSD1306_WIDTH])
+ {
+ update_needed = 1;
+ break;
+ }
+ }
+ if (update_needed)
+ {
+ i2c_write_command(0xb0 + i);
+ i2c_write_command(0x01);
+ i2c_write_command(0x10);
+ for (uint8_t j = 0; j < SSD1306_WIDTH; j++)
+ {
+ i2c_write_data(_buffer[j + i * SSD1306_WIDTH]);
+ }
}
}
+
+ osel_memcpy(_buffer_copy, _buffer, ARRAY_LEN(_buffer));
}
/**
@@ -455,10 +542,11 @@ void ssd1306_update_screen(void)
*
* 该函数将 SSD1306 OLED 显示屏的每一个像素点都设置为指定的颜色。
*
- * @param color 颜色值,0x00 表示关闭像素点(黑色),0xFF 表示打开像素点(白色)
+ * @param color 颜色值,SSD1306_BLACK 表示关闭像素点(黑色),SSD1306_WHITE 表示打开像素点(白色)
*/
void ssd1306_fill(uint8_t color)
{
+ ssd1306_clear_buffer();
osel_memset(_buffer, color, ARRAY_LEN(_buffer));
ssd1306_update_screen();
}
@@ -478,13 +566,14 @@ void ssd1306_fill(uint8_t color)
*/
void ssd1306_clear(void)
{
- osel_memset(_buffer, 0, ARRAY_LEN(_buffer));
+ ssd1306_clear_buffer();
ssd1306_update_screen();
}
void ssd1306_clear_buffer(void)
{
- osel_memset(_buffer, 0, ARRAY_LEN(_buffer));
+ osel_memset(_buffer, SSD1306_BLACK, ARRAY_LEN(_buffer));
+ osel_memset(_buffer_copy, 0xff, ARRAY_LEN(_buffer_copy));
}
/**
@@ -497,11 +586,11 @@ void ssd1306_clear_buffer(void)
* @param x1 BMP绘制的结束X坐标
* @param y1 BMP绘制的结束Y坐标
*/
-void ssd1306_draw_bmp(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t *bmp)
+void ssd1306_draw_bmp(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, const uint8_t *bmp)
{
uint8_t j = 0;
uint8_t x, y;
- osel_memset(_buffer, 0, ARRAY_LEN(_buffer));
+ ssd1306_clear_buffer();
if (y1 % 8 == 0)
y = y1 / 8;
else
@@ -543,6 +632,93 @@ void ssd1306_f6x8_string(uint8_t x, uint8_t y, const uint8_t *ch)
}
}
+/**
+ * @brief 将浮点数显示在SSD1306显示屏上
+ *
+ * 该函数将给定的浮点数num转换为字符串,并将其显示在SSD1306显示屏的指定位置。
+ *
+ * @param x 显示的起始x坐标
+ * @param y 显示的起始y坐标
+ * @param num 要显示的浮点数
+ * @param dot_num 小数点后的位数,0表示不显示小数部分
+ */
+void ssd1306_f6x8_number(uint8_t x, uint8_t y, float32 num, uint8_t dot_num)
+{
+ uint8_t ch[9] = {'\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0'};
+ uint8_t c = 0, i = 0, j = 0;
+ if (num < 0)
+ {
+ ch[i++] = '-';
+ num = -num;
+ }
+ if (num > 32000)
+ return;
+
+ c = 8 - i;
+
+ if (num >= 10000)
+ {
+ ch[i++] = num / 10000 + 48;
+ ch[i++] = (int32_t)(num) % 10000 / 1000 + 48;
+ ch[i++] = (int32_t)(num) % 1000 / 100 + 48;
+ ch[i++] = (int32_t)(num) % 100 / 10 + 48;
+ ch[i++] = (int32_t)(num) % 10 + 48;
+ }
+ else if (num >= 1000)
+ {
+ ch[i++] = (int32_t)(num) % 10000 / 1000 + 48;
+ ch[i++] = (int32_t)(num) % 1000 / 100 + 48;
+ ch[i++] = (int32_t)(num) % 100 / 10 + 48;
+ ch[i++] = (int32_t)(num) % 10 + 48;
+ }
+ else if (num >= 100)
+ {
+ ch[i++] = (int32_t)(num) % 1000 / 100 + 48;
+ ch[i++] = (int32_t)(num) % 100 / 10 + 48;
+ ch[i++] = (int32_t)(num) % 10 + 48;
+ }
+ else if (num >= 10)
+ {
+ ch[i++] = (int32_t)(num) % 100 / 10 + 48;
+ ch[i++] = (int32_t)(num) % 10 + 48;
+ }
+ else if (num >= 0)
+ {
+ ch[i++] = (int32_t)(num) % 10 + 48;
+ }
+ if (dot_num > 0 && i < 7)
+ {
+ ch[i++] = '.';
+ num = num - (int32_t)num;
+
+ if (dot_num == 1 && i < 8)
+ {
+ num = num * 10;
+ ch[i++] = (int32_t)(num + 0.5) % 10 + 48;
+ }
+ if (dot_num >= 2 && i < 8)
+ {
+ num = num * 100;
+ ch[i++] = (int32_t)num % 100 / 10 + 48;
+ if (i < 8)
+ ch[i++] = (int32_t)(num + 0.5) % 10 + 48;
+ }
+ }
+
+ while (ch[j] != '\0')
+ {
+ c = ch[j] - 32;
+ if (x > 120)
+ {
+ x = 0;
+ y++;
+ }
+ for (i = 0; i < 6; i++)
+ _buffer[(y * SSD1306_WIDTH) + x + i] = F6x8[c][i];
+ x += 6;
+ j++;
+ }
+}
/**
* @brief 在SSD1306 OLED屏幕上显示字符串和数字
*
@@ -735,3 +911,101 @@ void ssd1306_f8x16_number(uint8_t x, uint8_t y, float32 num, uint8_t dot_num)
j++;
}
}
+
+// 在 SSD1306 显示屏上绘制一个像素
+void ssd1306_draw_pixel(uint8_t x, uint8_t y, uint8_t color)
+{
+ if (x >= SSD1306_WIDTH || y >= SSD1306_HEIGHT)
+ {
+ // 超出屏幕范围
+ return;
+ }
+
+ // 设置像素颜色
+ if (color == SSD1306_WHITE)
+ {
+ _buffer[x + (y / 8) * SSD1306_WIDTH] |= 1 << (y % 8);
+ }
+ else
+ {
+ _buffer[x + (y / 8) * SSD1306_WIDTH] &= ~(1 << (y % 8));
+ }
+}
+
+// 在 SSD1306 显示屏上绘制一条线
+void ssd1306_draw_line(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint8_t color)
+{
+ int16_t dx, dy, sx, sy, err, e2;
+
+ dx = ABS(x2 - x1);
+ dy = ABS(y2 - y1);
+ sx = (x1 < x2) ? 1 : -1;
+ sy = (y1 < y2) ? 1 : -1;
+ err = dx - dy;
+
+ while (1)
+ {
+ ssd1306_draw_pixel(x1, y1, color);
+ if (x1 == x2 && y1 == y2)
+ break;
+ e2 = err * 2;
+ if (e2 > -dy)
+ {
+ err -= dy;
+ x1 += sx;
+ }
+ if (e2 < dx)
+ {
+ err += dx;
+ y1 += sy;
+ }
+ }
+}
+
+// 在 SSD1306 显示屏上绘制一个矩形
+void ssd1306_draw_rect_angle(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t color)
+{
+ // 绘制矩形的四条边
+ ssd1306_draw_line(x, y, x + w, y, color); // 上边
+ ssd1306_draw_line(x, y + h, x + w, y + h, color); // 下边
+ ssd1306_draw_line(x, y, x, y + h, color); // 左边
+ ssd1306_draw_line(x + w, y, x + w, y + h, color); // 右边
+}
+
+// 在 SSD1306 显示屏上绘制一个填充矩形
+void ssd1306_fill_rect_angle(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t color)
+{
+ for (uint8_t i = 0; i < h; i++)
+ {
+ ssd1306_draw_line(x, y + i, x + w, y + i, color);
+ }
+}
+
+// 绘制进度条
+void ssd1306_draw_progress_bar(uint8_t progress)
+{
+ uint8_t offset_y = 10;
+ char progress_text[5]; // 用于存储百分比文本
+ // 绘制边框
+ ssd1306_draw_rect_angle(10, 24 + offset_y, 108, 10, SSD1306_WHITE);
+
+ // 绘制进度条
+ ssd1306_fill_rect_angle(12, 26 + offset_y, 4 + progress, 7, SSD1306_WHITE);
+
+ // 显示百分比文本
+ snprintf(progress_text, sizeof(progress_text), "%3d%%", progress);
+ ssd1306_f8x16_string(SSD1306_WIDTH * 0.35, 2, (const uint8_t *)progress_text);
+
+ // 更新显示
+ ssd1306_update_screen();
+}
+
+// 在中间显示文字
+void ssd1306_draw_text_center(uint8_t y, const char *text)
+{
+ uint8_t x = (SSD1306_WIDTH - strlen(text) * 6) / 2;
+ ssd1306_f6x8_string(x, y, (const uint8_t *)text);
+
+ // 更新显示
+ ssd1306_update_screen();
+}
diff --git a/User/lib/driver/ssd1306_oled.h b/User/lib/driver/ssd1306_oled.h
index 013ea30..32a3304 100644
--- a/User/lib/driver/ssd1306_oled.h
+++ b/User/lib/driver/ssd1306_oled.h
@@ -14,6 +14,9 @@
// OLED显示参数
#define SSD1306_WIDTH 128
#define SSD1306_HEIGHT 64
+// OLED颜色
+#define SSD1306_WHITE 1
+#define SSD1306_BLACK 0
// OLED命令定义
#define SSD1306_CMD_DISPLAY_OFF 0xAE
@@ -53,6 +56,7 @@
// 函数声明
void ssd1306_init(void);
+void ssd1306_logo(void);
void ssd1306_display_on(void);
void ssd1306_display_off(void);
void ssd1306_update_screen(void);
@@ -60,9 +64,17 @@ void ssd1306_update_screen(void);
void ssd1306_fill(uint8_t color);
void ssd1306_clear(void);
void ssd1306_clear_buffer(void);
-void ssd1306_draw_bmp(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t *bmp);
+void ssd1306_draw_bmp(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, const uint8_t *bmp);
void ssd1306_f6x8_string(uint8_t x, uint8_t y, const uint8_t *ch);
+void ssd1306_f6x8_number(uint8_t x, uint8_t y, float32 num, uint8_t dot_num);
void ssd1306_f6x8_string_number(uint8_t x, uint8_t y, const uint8_t *ch, uint8_t unit, float32 num);
void ssd1306_f8x16_string(uint8_t x, uint8_t y, const uint8_t *ch);
void ssd1306_f8x16_number(uint8_t x, uint8_t y, float32 num, uint8_t dot_num);
+
+void ssd1306_draw_text_center(uint8_t y, const char *text);
+void ssd1306_draw_progress_bar(uint8_t progress);
+void ssd1306_fill_rect_angle(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t color);
+void ssd1306_draw_rect_angle(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t color);
+void ssd1306_draw_line(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint8_t color);
+void ssd1306_draw_pixel(uint8_t x, uint8_t y, uint8_t color);
#endif // __SSD1306_OLED_H
diff --git a/motor.ioc b/motor.ioc
index 84d0141..533bdec 100644
--- a/motor.ioc
+++ b/motor.ioc
@@ -88,14 +88,14 @@ PA9.Signal=USART1_TX
PB12.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP
PB12.GPIO_Label=OLED_SDA
PB12.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_PP
-PB12.GPIO_PuPd=GPIO_NOPULL
+PB12.GPIO_PuPd=GPIO_PULLUP
PB12.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
PB12.PinState=GPIO_PIN_RESET
PB12.Signal=GPIO_Output
PB13.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP
PB13.GPIO_Label=OLDE_SCK
PB13.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_PP
-PB13.GPIO_PuPd=GPIO_NOPULL
+PB13.GPIO_PuPd=GPIO_PULLUP
PB13.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
PB13.PinState=GPIO_PIN_RESET
PB13.Signal=GPIO_Output