From 635b5567e3442b89aa3941d74622df9aceb7cab9 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Mon, 16 Aug 2021 11:31:51 -0700 Subject: [PATCH 01/59] outputs --- for_rusefi/wideband_image.h | 4 ++-- for_rusefi/wideband_image_with_bl.bin | Bin 31744 -> 31744 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/for_rusefi/wideband_image.h b/for_rusefi/wideband_image.h index 9526e82..cae3ba4 100644 --- a/for_rusefi/wideband_image.h +++ b/for_rusefi/wideband_image.h @@ -769,7 +769,7 @@ static const unsigned char build_wideband_image_bin[] = { 0x01, 0x3b, 0x13, 0x60, 0x2d, 0x4b, 0x28, 0x49, 0x1c, 0x68, 0x20, 0x1c, 0xfd, 0xf7, 0x92, 0xff, 0x00, 0x28, 0xe3, 0xd0, 0x20, 0x1c, 0x2a, 0x49, 0xfd, 0xf7, 0xcc, 0xff, 0x27, 0x4b, 0x04, 0x1c, 0x18, 0x60, 0xdb, 0xe7, - 0x96, 0x23, 0x52, 0x46, 0x9b, 0x00, 0x81, 0x24, 0x13, 0x60, 0x01, 0x23, + 0xe1, 0x23, 0x52, 0x46, 0x9b, 0x00, 0x81, 0x24, 0x13, 0x60, 0x01, 0x23, 0xe4, 0x05, 0x33, 0x60, 0x20, 0x1c, 0x22, 0x49, 0xfd, 0xf7, 0xbc, 0xff, 0x1f, 0x4b, 0x04, 0x1c, 0x18, 0x60, 0xcb, 0xe7, 0x02, 0x23, 0x33, 0x60, 0xba, 0xe7, 0x04, 0x23, 0x1d, 0x4a, 0x00, 0x24, 0x13, 0x60, 0x01, 0x3b, @@ -2132,6 +2132,6 @@ static const unsigned char build_wideband_image_bin[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x3c, 0xe8, 0x62, 0x45 + 0xb4, 0x6c, 0x14, 0x87 }; unsigned int build_wideband_image_bin_len = 25600; diff --git a/for_rusefi/wideband_image_with_bl.bin b/for_rusefi/wideband_image_with_bl.bin index 93d9aa9554d0e0121843c1e2d87d2c4bb6ed9e6a..5d5591b26d35f6781ba27df5c43f5154a3964b66 100644 GIT binary patch delta 21 dcmZqp!PxMFaf5^n Date: Wed, 3 Nov 2021 22:40:43 -0700 Subject: [PATCH 02/59] rusefi data --- firmware/can.cpp | 6 ++++++ firmware/can.h | 1 + 2 files changed, 7 insertions(+) diff --git a/firmware/can.cpp b/firmware/can.cpp index 1f50ea6..98e9b35 100644 --- a/firmware/can.cpp +++ b/firmware/can.cpp @@ -16,6 +16,7 @@ void CanTxThread(void*) while(1) { SendEmulatedAemXseries(configuration.CanIndexOffset); + SendRusefiFormat(configuration.CanIndexOffset); chThdSleepMilliseconds(10); } @@ -146,6 +147,11 @@ void SendEmulatedAemXseries(uint8_t idx) { frame[4] = (int)(GetNernstDc() * 200); } +void SendRusefiFormat(uint8_t idx) +{ + +} + void SendCanData(float lambda, uint16_t measuredResistance) { CanTxTyped frame(0x130); diff --git a/firmware/can.h b/firmware/can.h index 2e630e6..553e65e 100644 --- a/firmware/can.h +++ b/firmware/can.h @@ -5,3 +5,4 @@ void InitCan(); void SendCanData(float lambda, uint16_t measuredResistance); void SendEmulatedAemXseries(uint8_t idx); +void SendRusefiFormat(uint8_t idx); From 0a117089b8decd0fafd07a4c934c4070cbe2a2e4 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Wed, 3 Nov 2021 23:02:11 -0700 Subject: [PATCH 03/59] uppercase functions --- firmware/fault.cpp | 6 +++--- firmware/fault.h | 10 ++++++---- firmware/heater_control.cpp | 6 +++--- firmware/main.cpp | 2 +- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/firmware/fault.cpp b/firmware/fault.cpp index c315794..1b0ace8 100644 --- a/firmware/fault.cpp +++ b/firmware/fault.cpp @@ -2,17 +2,17 @@ static Fault currentFault = Fault::None; -void setFault(Fault fault) +void SetFault(Fault fault) { currentFault = fault; } -bool hasFault() +bool HasFault() { return currentFault != Fault::None; } -Fault getCurrentFault() +Fault GetCurrentFault() { return currentFault; } diff --git a/firmware/fault.h b/firmware/fault.h index b65813c..b4477e5 100644 --- a/firmware/fault.h +++ b/firmware/fault.h @@ -1,6 +1,8 @@ #pragma once -enum class Fault +#include + +enum class Fault : uint8_t { None = 0, @@ -10,6 +12,6 @@ enum class Fault SensorUnderheat = 5, }; -void setFault(Fault fault); -bool hasFault(); -Fault getCurrentFault(); +void SetFault(Fault fault); +bool HasFault(); +Fault GetCurrentFault(); diff --git a/firmware/heater_control.cpp b/firmware/heater_control.cpp index 54621b5..c270ae1 100644 --- a/firmware/heater_control.cpp +++ b/firmware/heater_control.cpp @@ -61,7 +61,7 @@ static HeaterState GetNextState(HeaterState state, float sensorEsr) } else if (timeCounter == 0) { - setFault(Fault::SensorDidntHeat); + SetFault(Fault::SensorDidntHeat); return HeaterState::Stopped; } @@ -71,12 +71,12 @@ static HeaterState GetNextState(HeaterState state, float sensorEsr) case HeaterState::ClosedLoop: if (sensorEsr < HEATER_OVERHEAT_ESR) { - setFault(Fault::SensorOverheat); + SetFault(Fault::SensorOverheat); return HeaterState::Stopped; } else if (sensorEsr > HEATER_UNDERHEAT_ESR) { - setFault(Fault::SensorUnderheat); + SetFault(Fault::SensorUnderheat); return HeaterState::Stopped; } diff --git a/firmware/main.cpp b/firmware/main.cpp index 3ca7d52..5e69b87 100644 --- a/firmware/main.cpp +++ b/firmware/main.cpp @@ -28,7 +28,7 @@ int main() { while(true) { - auto fault = getCurrentFault(); + auto fault = GetCurrentFault(); if (fault == Fault::None) { From d86f076c378c7bfb891a24ee2d65855f52100ea7 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Wed, 3 Nov 2021 23:12:20 -0700 Subject: [PATCH 04/59] new format --- firmware/can.cpp | 55 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 15 deletions(-) diff --git a/firmware/can.cpp b/firmware/can.cpp index 98e9b35..3595304 100644 --- a/firmware/can.cpp +++ b/firmware/can.cpp @@ -1,6 +1,7 @@ #include "can.h" #include "hal.h" +#include "fault.h" #include "can_helper.h" #include "heater_control.h" #include "lambda_conversion.h" @@ -96,13 +97,6 @@ void InitCan() chThdCreateStatic(waCanRxThread, sizeof(waCanRxThread), NORMALPRIO - 4, CanRxThread, nullptr); } -struct StandardDataFrame -{ - uint16_t lambda; - uint16_t measuredResistance; - uint8_t pad[4]; -}; - #define SWAP_UINT16(x) (((x) << 8) | ((x) >> 8)) void SendEmulatedAemXseries(uint8_t idx) { @@ -147,15 +141,46 @@ void SendEmulatedAemXseries(uint8_t idx) { frame[4] = (int)(GetNernstDc() * 200); } +struct StandardData +{ + uint16_t Lambda; + uint16_t TemperatureC; + uint8_t Valid; + + uint8_t pad1; + uint16_t pad2; +}; + +struct DiagData +{ + uint16_t Esr; + uint16_t NernstDc; + uint8_t PumpDuty; + Fault Status; + + uint16_t pad; +}; + void SendRusefiFormat(uint8_t idx) { + { + CanTxTyped frame(0x170 + idx); -} - -void SendCanData(float lambda, uint16_t measuredResistance) -{ - CanTxTyped frame(0x130); - - frame.get().lambda = lambda * 10000; - frame.get().measuredResistance = measuredResistance; + uint16_t lambda = GetLambda() * 10000; + frame.get().Lambda = lambda; + + // TODO: decode temperatature + frame.get().TemperatureC = 0; + + frame.get().Valid = IsRunningClosedLoop() ? 0x01 : 0x00; + } + + { + CanTxTyped frame(0x190 + idx); + + frame.get().Esr = GetSensorInternalResistance(); + frame.get().NernstDc = GetNernstDc() * 1000; + frame.get().PumpDuty = GetPumpOutputDuty() / 4; + frame.get().Status = GetCurrentFault(); + } } From 4494fb9823f707b6aa33a8d2d55550a95cac483b Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Wed, 3 Nov 2021 23:12:38 -0700 Subject: [PATCH 05/59] image --- for_rusefi/wideband_image.h | 758 +++++++++++++------------- for_rusefi/wideband_image_with_bl.bin | Bin 31744 -> 31744 bytes 2 files changed, 379 insertions(+), 379 deletions(-) diff --git a/for_rusefi/wideband_image.h b/for_rusefi/wideband_image.h index cae3ba4..2cdab06 100644 --- a/for_rusefi/wideband_image.h +++ b/for_rusefi/wideband_image.h @@ -1,5 +1,5 @@ static const unsigned char build_wideband_image_bin[] = { - 0x00, 0x04, 0x00, 0x20, 0xa1, 0x19, 0x00, 0x08, 0xf1, 0x4c, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x20, 0xa1, 0x19, 0x00, 0x08, 0xb1, 0x4d, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, @@ -7,38 +7,38 @@ static const unsigned char build_wideband_image_bin[] = { 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, - 0xa3, 0x19, 0x00, 0x08, 0x21, 0x4e, 0x00, 0x08, 0x81, 0x50, 0x00, 0x08, - 0x51, 0x50, 0x00, 0x08, 0xa1, 0x4f, 0x00, 0x08, 0x21, 0x4d, 0x00, 0x08, - 0x41, 0x4d, 0x00, 0x08, 0x51, 0x4d, 0x00, 0x08, 0x01, 0x4d, 0x00, 0x08, + 0xa3, 0x19, 0x00, 0x08, 0xe1, 0x4e, 0x00, 0x08, 0x41, 0x51, 0x00, 0x08, + 0x11, 0x51, 0x00, 0x08, 0x61, 0x50, 0x00, 0x08, 0xe1, 0x4d, 0x00, 0x08, + 0x01, 0x4e, 0x00, 0x08, 0x11, 0x4e, 0x00, 0x08, 0xc1, 0x4d, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, - 0xa3, 0x19, 0x00, 0x08, 0xd1, 0x50, 0x00, 0x08, 0xb1, 0x50, 0x00, 0x08, - 0xc1, 0x50, 0x00, 0x08, 0x41, 0x4e, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, - 0x81, 0x44, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa3, 0x19, 0x00, 0x08, 0x91, 0x51, 0x00, 0x08, 0x71, 0x51, 0x00, 0x08, + 0x81, 0x51, 0x00, 0x08, 0x01, 0x4f, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, + 0x41, 0x45, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0xb6, 0x24, 0x48, 0x80, 0xf3, 0x08, 0x88, 0x23, 0x48, 0x80, 0xf3, 0x09, 0x88, 0x02, 0x20, 0x80, 0xf3, 0x14, 0x88, - 0xbf, 0xf3, 0x6f, 0x8f, 0x03, 0xf0, 0x82, 0xfc, 0x03, 0xf0, 0x58, 0xf9, + 0xbf, 0xf3, 0x6f, 0x8f, 0x03, 0xf0, 0xe2, 0xfc, 0x03, 0xf0, 0xb8, 0xf9, 0x1e, 0x48, 0x1f, 0x49, 0x1b, 0x4a, 0x91, 0x42, 0x02, 0xda, 0x08, 0x60, 0x04, 0x31, 0xfa, 0xe7, 0x1c, 0x49, 0x19, 0x4a, 0x91, 0x42, 0x02, 0xda, 0x08, 0x60, 0x04, 0x31, 0xfa, 0xe7, 0x1a, 0x49, 0x1a, 0x4a, 0x1b, 0x4b, 0x9a, 0x42, 0x04, 0xda, 0x08, 0x68, 0x10, 0x60, 0x04, 0x31, 0x04, 0x32, 0xf8, 0xe7, 0x00, 0x20, 0x17, 0x49, 0x18, 0x4a, 0x91, 0x42, 0x02, 0xda, - 0x08, 0x60, 0x04, 0x31, 0xfa, 0xe7, 0x03, 0xf0, 0x1d, 0xfc, 0x03, 0xf0, - 0x53, 0xfc, 0x14, 0x4c, 0x14, 0x4d, 0xac, 0x42, 0x03, 0xda, 0x21, 0x68, - 0x88, 0x47, 0x04, 0x34, 0xf9, 0xe7, 0x02, 0xf0, 0xe9, 0xfd, 0x11, 0x4c, + 0x08, 0x60, 0x04, 0x31, 0xfa, 0xe7, 0x03, 0xf0, 0x7d, 0xfc, 0x03, 0xf0, + 0xb3, 0xfc, 0x14, 0x4c, 0x14, 0x4d, 0xac, 0x42, 0x03, 0xda, 0x21, 0x68, + 0x88, 0x47, 0x04, 0x34, 0xf9, 0xe7, 0x02, 0xf0, 0x49, 0xfe, 0x11, 0x4c, 0x11, 0x4d, 0xac, 0x42, 0x03, 0xda, 0x21, 0x68, 0x88, 0x47, 0x04, 0x34, 0xf9, 0xe7, 0x0f, 0x49, 0x08, 0x47, 0x00, 0x00, 0x00, 0x04, 0x00, 0x20, 0x00, 0x06, 0x00, 0x20, 0x55, 0x55, 0x55, 0x55, 0x00, 0x02, 0x00, 0x20, - 0x00, 0x04, 0x00, 0x20, 0x3c, 0x57, 0x00, 0x08, 0x00, 0x06, 0x00, 0x20, + 0x00, 0x04, 0x00, 0x20, 0xfc, 0x57, 0x00, 0x08, 0x00, 0x06, 0x00, 0x20, 0x24, 0x06, 0x00, 0x20, 0x28, 0x06, 0x00, 0x20, 0x48, 0x12, 0x00, 0x20, 0xc0, 0x18, 0x00, 0x08, 0xc4, 0x18, 0x00, 0x08, 0xc4, 0x18, 0x00, 0x08, - 0xc4, 0x18, 0x00, 0x08, 0xd1, 0x51, 0x00, 0x08, 0x96, 0xe7, 0x00, 0xf0, + 0xc4, 0x18, 0x00, 0x08, 0x91, 0x52, 0x00, 0x08, 0x96, 0xe7, 0x00, 0xf0, 0x00, 0xf8, 0xfe, 0xe7, 0xf0, 0xb5, 0x44, 0x46, 0x4d, 0x46, 0x56, 0x46, 0x5f, 0x46, 0xf0, 0xb4, 0x6b, 0x46, 0x4b, 0x61, 0x43, 0x69, 0x9d, 0x46, 0xf0, 0xbc, 0xa0, 0x46, 0xa9, 0x46, 0xb2, 0x46, 0xbb, 0x46, 0xf0, 0xbd, - 0x62, 0xb6, 0x28, 0x1c, 0xa0, 0x47, 0x00, 0x20, 0x03, 0xf0, 0x16, 0xfc, - 0xfe, 0xe7, 0x03, 0xf0, 0x3b, 0xfc, 0x02, 0x4a, 0x02, 0x4b, 0x13, 0x60, + 0x62, 0xb6, 0x28, 0x1c, 0xa0, 0x47, 0x00, 0x20, 0x03, 0xf0, 0x76, 0xfc, + 0xfe, 0xe7, 0x03, 0xf0, 0x9b, 0xfc, 0x02, 0x4a, 0x02, 0x4b, 0x13, 0x60, 0xfe, 0xe7, 0xc0, 0x46, 0x04, 0xed, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x80, 0x00, 0x22, 0x43, 0x08, 0x8b, 0x42, 0x74, 0xd3, 0x03, 0x09, 0x8b, 0x42, 0x5f, 0xd3, 0x03, 0x0a, 0x8b, 0x42, 0x44, 0xd3, 0x03, 0x0b, 0x8b, 0x42, @@ -189,8 +189,8 @@ static const unsigned char build_wideband_image_bin[] = { 0x00, 0x29, 0xf3, 0xd1, 0x50, 0x1e, 0x82, 0x41, 0x38, 0x00, 0x7f, 0x30, 0x1e, 0x00, 0x15, 0x43, 0x00, 0x28, 0x00, 0xdd, 0x4b, 0xe7, 0xaa, 0xe7, 0x1a, 0x21, 0x01, 0x25, 0x12, 0x1a, 0xe4, 0xe7, 0xad, 0x01, 0x00, 0x20, - 0x6d, 0x0a, 0x58, 0xe7, 0x38, 0x53, 0x00, 0x08, 0xff, 0xff, 0xff, 0xf7, - 0x78, 0x53, 0x00, 0x08, 0x70, 0xb5, 0x42, 0x00, 0x4e, 0x02, 0x4c, 0x00, + 0x6d, 0x0a, 0x58, 0xe7, 0xf8, 0x53, 0x00, 0x08, 0xff, 0xff, 0xff, 0xf7, + 0x38, 0x54, 0x00, 0x08, 0x70, 0xb5, 0x42, 0x00, 0x4e, 0x02, 0x4c, 0x00, 0x45, 0x02, 0x6d, 0x0a, 0x12, 0x0e, 0xc3, 0x0f, 0x76, 0x0a, 0x24, 0x0e, 0xc9, 0x0f, 0xff, 0x2a, 0x0f, 0xd0, 0xff, 0x2c, 0x11, 0xd0, 0x01, 0x20, 0xa2, 0x42, 0x00, 0xd0, 0x70, 0xbd, 0xb5, 0x42, 0xfc, 0xd1, 0x8b, 0x42, @@ -268,7 +268,7 @@ static const unsigned char build_wideband_image_bin[] = { 0xc0, 0x03, 0x04, 0x43, 0x64, 0x02, 0x37, 0x00, 0xff, 0x20, 0x64, 0x0a, 0x42, 0xe7, 0x29, 0x00, 0x8e, 0xe7, 0xa4, 0x01, 0x00, 0x20, 0x64, 0x0a, 0x3c, 0xe7, 0x80, 0x20, 0xc0, 0x03, 0x04, 0x43, 0x64, 0x02, 0xff, 0x20, - 0x64, 0x0a, 0x35, 0xe7, 0xb8, 0x53, 0x00, 0x08, 0xff, 0xff, 0xff, 0xf7, + 0x64, 0x0a, 0x35, 0xe7, 0x78, 0x54, 0x00, 0x08, 0xff, 0xff, 0xff, 0xf7, 0xf0, 0xb5, 0x46, 0x46, 0xd6, 0x46, 0x4f, 0x46, 0x43, 0x02, 0x5b, 0x0a, 0xda, 0x00, 0x94, 0x46, 0x4a, 0x02, 0xc0, 0xb5, 0x44, 0x00, 0x56, 0x0a, 0x05, 0x1c, 0xb0, 0x46, 0x24, 0x0e, 0x4e, 0x00, 0x92, 0x09, 0x1f, 0x00, @@ -380,17 +380,17 @@ static const unsigned char build_wideband_image_bin[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x4b, 0x9b, 0x68, 0x00, 0x2b, 0x00, 0xd1, 0x70, 0x47, 0x72, 0xb6, 0x02, 0x4b, 0x03, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, 0x00, 0x24, 0x01, 0x40, 0x94, 0x10, 0x00, 0x20, - 0x94, 0x55, 0x00, 0x08, 0x20, 0x22, 0x83, 0x5c, 0x00, 0x2b, 0x0f, 0xd0, + 0x54, 0x56, 0x00, 0x08, 0x20, 0x22, 0x83, 0x5c, 0x00, 0x2b, 0x0f, 0xd0, 0x0f, 0x2b, 0x0d, 0xd0, 0x00, 0x23, 0x83, 0x54, 0x82, 0x68, 0x08, 0x4b, 0x1b, 0x68, 0x99, 0x68, 0x91, 0x42, 0xfb, 0xd2, 0x5a, 0x68, 0x03, 0x60, 0x42, 0x60, 0x10, 0x60, 0x58, 0x60, 0x70, 0x47, 0x72, 0xb6, 0x02, 0x4b, 0x02, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, 0xc0, 0x46, 0x94, 0x10, 0x00, 0x20, - 0xb0, 0x54, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x20, 0x22, 0x83, 0x5c, + 0x70, 0x55, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x20, 0x22, 0x83, 0x5c, 0x00, 0x2b, 0x0f, 0xd0, 0x0f, 0x2b, 0x0d, 0xd0, 0x00, 0x23, 0x83, 0x54, 0x82, 0x68, 0x08, 0x4b, 0x1b, 0x68, 0x99, 0x68, 0x91, 0x42, 0xfb, 0xd8, 0x5a, 0x68, 0x03, 0x60, 0x42, 0x60, 0x10, 0x60, 0x58, 0x60, 0x70, 0x47, 0x72, 0xb6, 0x02, 0x4b, 0x02, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, 0xc0, 0x46, - 0x94, 0x10, 0x00, 0x20, 0xdc, 0x54, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x94, 0x10, 0x00, 0x20, 0x9c, 0x55, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xe7, 0xc0, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xb5, 0xc6, 0x46, 0x04, 0x00, 0x00, 0xb5, 0x08, 0x1c, 0x11, 0x1c, 0xff, 0xf7, 0x14, 0xfd, 0x27, 0x68, 0x06, 0x1c, @@ -404,25 +404,41 @@ static const unsigned char build_wideband_image_bin[] = { 0x61, 0x68, 0x30, 0x1c, 0xff, 0xf7, 0xca, 0xfb, 0xe1, 0x68, 0x06, 0x1c, 0x40, 0x46, 0xff, 0xf7, 0xc5, 0xfb, 0x01, 0x1c, 0x30, 0x1c, 0xff, 0xf7, 0x5b, 0xf8, 0x29, 0x1c, 0xff, 0xf7, 0x58, 0xf8, 0x80, 0xbc, 0xb8, 0x46, - 0xf0, 0xbd, 0xc0, 0x46, 0x10, 0xb5, 0x72, 0xb6, 0x20, 0x23, 0xc3, 0x5c, - 0x04, 0x2b, 0x14, 0xd0, 0x0d, 0xd8, 0x00, 0x2b, 0x09, 0xd0, 0x03, 0x2b, - 0x02, 0xd1, 0x00, 0x22, 0x43, 0x6a, 0x1a, 0x60, 0x01, 0x23, 0x5b, 0x42, - 0x43, 0x62, 0xff, 0xf7, 0x5d, 0xff, 0x62, 0xb6, 0x10, 0xbd, 0x05, 0x2b, - 0xf6, 0xd1, 0x42, 0x6a, 0x93, 0x68, 0x01, 0x33, 0x93, 0x60, 0x42, 0x68, - 0x03, 0x68, 0x13, 0x60, 0x5a, 0x60, 0xed, 0xe7, 0x70, 0xb5, 0x05, 0x00, - 0x80, 0x89, 0x0c, 0x1c, 0xff, 0xf7, 0x96, 0xfe, 0xfe, 0x21, 0x06, 0x1c, - 0x89, 0x05, 0x20, 0x1c, 0xfe, 0xf7, 0xf2, 0xff, 0x00, 0x28, 0x01, 0xd1, - 0xfe, 0x24, 0xa4, 0x05, 0x00, 0x21, 0x20, 0x1c, 0xfe, 0xf7, 0xfe, 0xff, - 0x00, 0x28, 0x00, 0xd1, 0x00, 0x24, 0x21, 0x1c, 0x30, 0x1c, 0xff, 0xf7, - 0x7f, 0xfb, 0xfe, 0xf7, 0xff, 0xff, 0x2b, 0x68, 0xe8, 0x81, 0x9a, 0x69, - 0x2b, 0x79, 0x0c, 0x33, 0x9b, 0x00, 0xd3, 0x18, 0x58, 0x60, 0x70, 0xbd, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0x4b, 0x10, 0xb5, 0x1b, 0x68, 0x02, 0x2b, - 0x0f, 0xd1, 0xff, 0xf7, 0x6d, 0xfe, 0x09, 0x49, 0xff, 0xf7, 0x68, 0xfb, - 0x08, 0x49, 0xfe, 0xf7, 0xff, 0xff, 0x08, 0x49, 0xff, 0xf7, 0x62, 0xfb, - 0x01, 0x1c, 0x07, 0x48, 0xff, 0xf7, 0xc4, 0xff, 0x10, 0xbd, 0xfc, 0x21, - 0x89, 0x05, 0xf8, 0xe7, 0xb8, 0x0f, 0x00, 0x20, 0xa2, 0x61, 0xa8, 0xb9, - 0x33, 0x33, 0xd3, 0x3f, 0xca, 0x26, 0x9b, 0x3e, 0xbc, 0x0f, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0xbd, 0xc0, 0x46, 0x08, 0x4b, 0x10, 0xb5, 0x19, 0x68, 0x08, 0x48, + 0xff, 0xf7, 0xea, 0xf9, 0xfe, 0x21, 0x89, 0x05, 0xff, 0xf7, 0xca, 0xfc, + 0x01, 0x1c, 0x05, 0x48, 0xff, 0xf7, 0xe2, 0xf9, 0x04, 0x49, 0xff, 0xf7, + 0xc3, 0xfc, 0x10, 0xbd, 0x3c, 0x12, 0x00, 0x20, 0x33, 0x33, 0x53, 0x40, + 0x00, 0xe0, 0xab, 0x46, 0x00, 0x00, 0x20, 0x41, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xb5, 0x72, 0xb6, + 0x20, 0x23, 0xc3, 0x5c, 0x04, 0x2b, 0x14, 0xd0, 0x0d, 0xd8, 0x00, 0x2b, + 0x09, 0xd0, 0x03, 0x2b, 0x02, 0xd1, 0x00, 0x22, 0x43, 0x6a, 0x1a, 0x60, + 0x01, 0x23, 0x5b, 0x42, 0x43, 0x62, 0xff, 0xf7, 0x3d, 0xff, 0x62, 0xb6, + 0x10, 0xbd, 0x05, 0x2b, 0xf6, 0xd1, 0x42, 0x6a, 0x93, 0x68, 0x01, 0x33, + 0x93, 0x60, 0x42, 0x68, 0x03, 0x68, 0x13, 0x60, 0x5a, 0x60, 0xed, 0xe7, + 0x70, 0xb5, 0x05, 0x00, 0x80, 0x89, 0x0c, 0x1c, 0xff, 0xf7, 0x76, 0xfe, + 0xfe, 0x21, 0x06, 0x1c, 0x89, 0x05, 0x20, 0x1c, 0xfe, 0xf7, 0xd2, 0xff, + 0x00, 0x28, 0x01, 0xd1, 0xfe, 0x24, 0xa4, 0x05, 0x00, 0x21, 0x20, 0x1c, + 0xfe, 0xf7, 0xde, 0xff, 0x00, 0x28, 0x00, 0xd1, 0x00, 0x24, 0x21, 0x1c, + 0x30, 0x1c, 0xff, 0xf7, 0x5f, 0xfb, 0xfe, 0xf7, 0xdf, 0xff, 0x2b, 0x68, + 0xe8, 0x81, 0x9a, 0x69, 0x2b, 0x79, 0x0c, 0x33, 0x9b, 0x00, 0xd3, 0x18, + 0x58, 0x60, 0x70, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x4b, 0x10, 0xb5, + 0x1b, 0x68, 0x02, 0x2b, 0x0f, 0xd1, 0xff, 0xf7, 0x4d, 0xfe, 0x09, 0x49, + 0xff, 0xf7, 0x48, 0xfb, 0x08, 0x49, 0xfe, 0xf7, 0xdf, 0xff, 0x08, 0x49, + 0xff, 0xf7, 0x42, 0xfb, 0x01, 0x1c, 0x07, 0x48, 0xff, 0xf7, 0xc4, 0xff, + 0x10, 0xbd, 0xfc, 0x21, 0x89, 0x05, 0xf8, 0xe7, 0xb8, 0x0f, 0x00, 0x20, + 0xa2, 0x61, 0xa8, 0xb9, 0x33, 0x33, 0xd3, 0x3f, 0xca, 0x26, 0x9b, 0x3e, + 0xbc, 0x0f, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x16, 0x4b, 0x10, 0xb5, 0x1c, 0x68, 0x16, 0x49, + 0x20, 0x1c, 0xfe, 0xf7, 0x7d, 0xff, 0x00, 0x28, 0x1f, 0xd1, 0x14, 0x49, + 0x20, 0x1c, 0xfe, 0xf7, 0x8b, 0xff, 0x00, 0x28, 0x16, 0xd1, 0x12, 0x49, + 0x20, 0x1c, 0xff, 0xf7, 0x17, 0xfb, 0x00, 0x21, 0x04, 0x1c, 0xfe, 0xf7, + 0x6d, 0xff, 0x00, 0x28, 0x12, 0xd1, 0x0e, 0x48, 0x21, 0x1c, 0xff, 0xf7, + 0x0d, 0xfb, 0x0d, 0x49, 0xfe, 0xf7, 0xa4, 0xff, 0x01, 0x1c, 0xfe, 0x20, + 0x80, 0x05, 0xff, 0xf7, 0x3b, 0xf9, 0x10, 0xbd, 0xfc, 0x20, 0x80, 0x05, + 0xfb, 0xe7, 0x80, 0x20, 0xc0, 0x05, 0xf8, 0xe7, 0x06, 0x48, 0xeb, 0xe7, + 0x44, 0x12, 0x00, 0x20, 0x21, 0xe5, 0x2f, 0xbf, 0xef, 0xa7, 0x0a, 0x40, + 0xff, 0xc8, 0xce, 0xbf, 0x8a, 0x76, 0xe5, 0xbe, 0xfc, 0xde, 0x7e, 0x3f, + 0x11, 0xe4, 0x90, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x30, 0x00, 0xd1, 0x70, 0x47, 0x72, 0xb6, 0xef, 0xf3, 0x09, 0x83, 0x20, 0x3b, 0x83, 0xf3, 0x09, 0x88, 0x80, 0x22, 0x52, 0x04, 0xda, 0x61, 0x06, 0x4a, 0x11, 0x68, 0x52, 0x69, 0x89, 0x68, 0x92, 0x68, 0x91, 0x42, @@ -474,7 +490,7 @@ static const unsigned char build_wideband_image_bin[] = { 0xa2, 0x60, 0x01, 0x2b, 0x29, 0xd0, 0x00, 0x23, 0xa5, 0x69, 0x2b, 0x60, 0x6b, 0x63, 0xab, 0x63, 0xeb, 0x63, 0x2b, 0x64, 0x6b, 0x62, 0x78, 0x4b, 0x9a, 0x46, 0x66, 0x68, 0x67, 0x69, 0x33, 0x68, 0x38, 0x00, 0x19, 0x00, - 0x99, 0x46, 0xfe, 0xf7, 0xd1, 0xfd, 0x80, 0x22, 0x43, 0x1e, 0x52, 0x02, + 0x99, 0x46, 0xfe, 0xf7, 0x71, 0xfd, 0x80, 0x22, 0x43, 0x1e, 0x52, 0x02, 0x93, 0x42, 0x03, 0xd2, 0x4a, 0x46, 0x50, 0x43, 0x87, 0x42, 0x1c, 0xd0, 0x72, 0xb6, 0x6f, 0x4b, 0x6f, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, 0x72, 0xb6, 0x6c, 0x4b, 0x6e, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, 0x72, 0xb6, 0x6a, 0x4b, @@ -513,10 +529,10 @@ static const unsigned char build_wideband_image_bin[] = { 0x10, 0x49, 0x0a, 0x40, 0xda, 0x60, 0x03, 0x21, 0xdb, 0x68, 0xff, 0xf7, 0xc7, 0xfe, 0x03, 0x21, 0x0e, 0x20, 0xff, 0xf7, 0xc3, 0xfe, 0x0a, 0x4b, 0x63, 0x61, 0x3d, 0xe7, 0x72, 0xb6, 0x0a, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, - 0x8c, 0x06, 0x00, 0x20, 0x94, 0x10, 0x00, 0x20, 0xe4, 0x55, 0x00, 0x08, - 0xcc, 0x55, 0x00, 0x08, 0xa8, 0x06, 0x00, 0x20, 0x68, 0x68, 0x00, 0x00, + 0x8c, 0x06, 0x00, 0x20, 0x94, 0x10, 0x00, 0x20, 0xa4, 0x56, 0x00, 0x08, + 0x8c, 0x56, 0x00, 0x08, 0xa8, 0x06, 0x00, 0x20, 0x68, 0x68, 0x00, 0x00, 0x00, 0x10, 0x02, 0x40, 0x00, 0x6c, 0xdc, 0x02, 0xff, 0xf7, 0xff, 0xff, - 0x54, 0x54, 0x00, 0x08, 0x30, 0xb5, 0x72, 0xb6, 0x00, 0x29, 0x19, 0xd0, + 0x14, 0x55, 0x00, 0x08, 0x30, 0xb5, 0x72, 0xb6, 0x00, 0x29, 0x19, 0xd0, 0x4b, 0x1e, 0x19, 0x42, 0x16, 0xd1, 0x11, 0x4c, 0x65, 0x68, 0x2b, 0x1a, 0x48, 0x42, 0x18, 0x40, 0x23, 0x68, 0x82, 0x1a, 0x9a, 0x42, 0x16, 0xd3, 0x95, 0x42, 0x14, 0xd3, 0x62, 0x60, 0x0c, 0x4b, 0x1a, 0x68, 0x9a, 0x42, @@ -524,20 +540,20 @@ static const unsigned char build_wideband_image_bin[] = { 0x62, 0xb6, 0x30, 0xbd, 0x72, 0xb6, 0x06, 0x4b, 0x06, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, 0x72, 0xb6, 0x05, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, 0x00, 0x20, 0xe9, 0xe7, 0xc0, 0x46, 0xd0, 0x11, 0x00, 0x20, 0x94, 0x10, 0x00, 0x20, - 0xf0, 0x54, 0x00, 0x08, 0x84, 0x54, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0xb0, 0x55, 0x00, 0x08, 0x44, 0x55, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xb5, 0x00, 0x28, - 0x02, 0xd0, 0xff, 0xf7, 0x93, 0xfc, 0x10, 0xbd, 0x72, 0xb6, 0x02, 0x4b, + 0x02, 0xd0, 0xff, 0xf7, 0x33, 0xfc, 0x10, 0xbd, 0x72, 0xb6, 0x02, 0x4b, 0x02, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, 0xc0, 0x46, 0x94, 0x10, 0x00, 0x20, - 0x4c, 0x55, 0x00, 0x08, 0x70, 0xb5, 0x04, 0x00, 0x00, 0x68, 0x84, 0x42, + 0x0c, 0x56, 0x00, 0x08, 0x70, 0xb5, 0x04, 0x00, 0x00, 0x68, 0x84, 0x42, 0x12, 0xd0, 0x20, 0x25, 0x00, 0x26, 0x03, 0x68, 0x23, 0x60, 0x5c, 0x60, 0x43, 0x5d, 0x04, 0x2b, 0x04, 0xd0, 0x72, 0xb6, 0x05, 0x4b, 0x06, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, 0x46, 0x62, 0xff, 0xf7, 0xdb, 0xff, 0x20, 0x68, 0x84, 0x42, 0xee, 0xd1, 0x70, 0xbd, 0xc0, 0x46, 0x94, 0x10, 0x00, 0x20, - 0x90, 0x54, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x68, + 0x50, 0x55, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x68, 0x10, 0xb5, 0x00, 0x28, 0x08, 0xd0, 0x20, 0x22, 0x82, 0x5c, 0x03, 0x2a, 0x05, 0xd1, 0x00, 0x22, 0x1a, 0x60, 0x41, 0x62, 0xff, 0xf7, 0xc2, 0xff, 0x10, 0xbd, 0x72, 0xb6, 0x01, 0x4b, 0x02, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, - 0x94, 0x10, 0x00, 0x20, 0x74, 0x55, 0x00, 0x08, 0x10, 0xb5, 0x04, 0x00, + 0x94, 0x10, 0x00, 0x20, 0x34, 0x56, 0x00, 0x08, 0x10, 0xb5, 0x04, 0x00, 0x0b, 0x07, 0x11, 0xd4, 0x03, 0x69, 0x00, 0x2b, 0x0d, 0xd0, 0x8a, 0x07, 0x23, 0xd5, 0x1a, 0x78, 0x00, 0x2a, 0x2c, 0xd0, 0x5b, 0x68, 0x00, 0x2b, 0x05, 0xd0, 0x04, 0x22, 0x02, 0x70, 0x98, 0x47, 0x23, 0x78, 0x04, 0x2b, @@ -554,12 +570,12 @@ static const unsigned char build_wideband_image_bin[] = { 0xc3, 0xe7, 0x02, 0x23, 0x23, 0x70, 0x00, 0x23, 0x23, 0x61, 0xef, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x80, 0x23, 0xdb, 0x05, 0xda, 0x68, 0x92, 0x07, 0x01, 0xd5, 0x58, 0x63, 0x70, 0x47, 0x72, 0xb6, 0x01, 0x4b, 0x02, 0x4a, - 0x5a, 0x66, 0xfe, 0xe7, 0x94, 0x10, 0x00, 0x20, 0xd8, 0x55, 0x00, 0x08, + 0x5a, 0x66, 0xfe, 0xe7, 0x94, 0x10, 0x00, 0x20, 0x98, 0x56, 0x00, 0x08, 0x20, 0x22, 0x0c, 0x4b, 0x10, 0xb5, 0x59, 0x69, 0x88, 0x54, 0x18, 0x68, 0x04, 0x68, 0x63, 0x60, 0x1c, 0x60, 0x01, 0x24, 0x58, 0x61, 0x84, 0x54, 0xef, 0xf3, 0x09, 0x82, 0xcc, 0x69, 0x24, 0x3a, 0x94, 0x42, 0x02, 0xd8, - 0xfe, 0xf7, 0xb8, 0xfb, 0x10, 0xbd, 0x72, 0xb6, 0x02, 0x4a, 0x5a, 0x66, - 0xfe, 0xe7, 0xc0, 0x46, 0x94, 0x10, 0x00, 0x20, 0xf8, 0x53, 0x00, 0x08, + 0xfe, 0xf7, 0x58, 0xfb, 0x10, 0xbd, 0x72, 0xb6, 0x02, 0x4a, 0x5a, 0x66, + 0xfe, 0xe7, 0xc0, 0x46, 0x94, 0x10, 0x00, 0x20, 0xb8, 0x54, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xb5, 0x57, 0x46, 0x4e, 0x46, 0x45, 0x46, 0xde, 0x46, 0xe0, 0xb5, 0x05, 0x00, 0x0e, 0x00, 0x17, 0x00, 0x85, 0xb0, 0x72, 0xb6, 0x22, 0x21, 0xb3, 0x4c, 0xe2, 0x68, 0x53, 0x5c, 0x01, 0x33, @@ -607,12 +623,12 @@ static const unsigned char build_wideband_image_bin[] = { 0xab, 0x18, 0xab, 0x50, 0x60, 0x69, 0x22, 0x68, 0x5b, 0x60, 0x83, 0x68, 0xa2, 0x42, 0x02, 0xd0, 0x92, 0x68, 0x93, 0x42, 0x2f, 0xd3, 0x00, 0x22, 0x41, 0x46, 0x4a, 0x62, 0x9e, 0x42, 0x13, 0xd8, 0x40, 0x46, 0xff, 0xf7, - 0xaf, 0xfa, 0x23, 0x68, 0xa3, 0x42, 0x04, 0xd0, 0x62, 0x69, 0x9b, 0x68, + 0x4f, 0xfa, 0x23, 0x68, 0xa3, 0x42, 0x04, 0xd0, 0x62, 0x69, 0x9b, 0x68, 0x92, 0x68, 0x9a, 0x42, 0x23, 0xd3, 0x62, 0xb6, 0x40, 0x46, 0x05, 0xb0, 0xf0, 0xbc, 0xbb, 0x46, 0xb2, 0x46, 0xa9, 0x46, 0xa0, 0x46, 0xf0, 0xbd, - 0xff, 0xf7, 0xbc, 0xfa, 0x01, 0x23, 0xa1, 0x35, 0xff, 0x35, 0x2b, 0x70, + 0xff, 0xf7, 0x5c, 0xfa, 0x01, 0x23, 0xa1, 0x35, 0xff, 0x35, 0x2b, 0x70, 0x43, 0x46, 0x01, 0x00, 0x63, 0x61, 0xef, 0xf3, 0x09, 0x83, 0xc2, 0x69, - 0x24, 0x3b, 0x9a, 0x42, 0x0f, 0xd8, 0x40, 0x46, 0xfe, 0xf7, 0x70, 0xfa, + 0x24, 0x3b, 0x9a, 0x42, 0x0f, 0xd8, 0x40, 0x46, 0xfe, 0xf7, 0x10, 0xfa, 0xdb, 0xe7, 0x72, 0xb6, 0x24, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x72, 0xb6, 0x23, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x72, 0xb6, 0x1c, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x72, 0xb6, 0x20, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x01, 0x23, @@ -623,10 +639,10 @@ static const unsigned char build_wideband_image_bin[] = { 0x03, 0x60, 0x42, 0x60, 0x10, 0x60, 0x58, 0x60, 0x3f, 0xe7, 0x01, 0x9b, 0x00, 0x9a, 0x5b, 0x6b, 0x9a, 0x42, 0x25, 0xd0, 0x72, 0xb6, 0x06, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x94, 0x10, 0x00, 0x20, 0xff, 0x00, 0xff, 0x00, - 0xa4, 0x54, 0x00, 0x08, 0x84, 0x55, 0x00, 0x08, 0x3c, 0x55, 0x00, 0x08, - 0xc4, 0x54, 0x00, 0x08, 0x6c, 0x54, 0x00, 0x08, 0x04, 0x55, 0x00, 0x08, - 0xc9, 0x19, 0x00, 0x08, 0x08, 0x54, 0x00, 0x08, 0x18, 0x55, 0x00, 0x08, - 0x64, 0x55, 0x00, 0x08, 0xf8, 0x53, 0x00, 0x08, 0x01, 0x9b, 0x02, 0x9a, + 0x64, 0x55, 0x00, 0x08, 0x44, 0x56, 0x00, 0x08, 0xfc, 0x55, 0x00, 0x08, + 0x84, 0x55, 0x00, 0x08, 0x2c, 0x55, 0x00, 0x08, 0xc4, 0x55, 0x00, 0x08, + 0xc9, 0x19, 0x00, 0x08, 0xc8, 0x54, 0x00, 0x08, 0xd8, 0x55, 0x00, 0x08, + 0x24, 0x56, 0x00, 0x08, 0xb8, 0x54, 0x00, 0x08, 0x01, 0x9b, 0x02, 0x9a, 0x59, 0x6b, 0x53, 0x61, 0x91, 0x61, 0x00, 0x9a, 0x01, 0x91, 0x5a, 0x63, 0x23, 0x68, 0xa3, 0x42, 0x04, 0xd0, 0x62, 0x69, 0x9b, 0x68, 0x92, 0x68, 0x9a, 0x42, 0x78, 0xd3, 0x02, 0x9b, 0x19, 0x1d, 0x62, 0xb6, 0x0b, 0x00, @@ -656,14 +672,14 @@ static const unsigned char build_wideband_image_bin[] = { 0x48, 0x61, 0x8a, 0x61, 0x43, 0x63, 0xff, 0xf7, 0xff, 0xfc, 0x23, 0x68, 0x60, 0x69, 0x98, 0x46, 0x82, 0x68, 0x9b, 0x68, 0x93, 0x42, 0x00, 0xd8, 0x14, 0xe6, 0x43, 0x46, 0x1b, 0x68, 0x41, 0x46, 0x5c, 0x60, 0x01, 0x22, - 0x23, 0x60, 0x20, 0x23, 0xca, 0x54, 0x61, 0x61, 0xff, 0xf7, 0xa4, 0xf9, + 0x23, 0x60, 0x20, 0x23, 0xca, 0x54, 0x61, 0x61, 0xff, 0xf7, 0x44, 0xf9, 0x01, 0x00, 0xef, 0xf3, 0x09, 0x83, 0xc2, 0x69, 0x24, 0x3b, 0x9a, 0x42, - 0x10, 0xd8, 0x40, 0x46, 0xfe, 0xf7, 0x5e, 0xf9, 0x23, 0x68, 0xa3, 0x42, + 0x10, 0xd8, 0x40, 0x46, 0xfe, 0xf7, 0xfe, 0xf8, 0x23, 0x68, 0xa3, 0x42, 0x00, 0xd1, 0xfb, 0xe5, 0x62, 0x69, 0x9b, 0x68, 0x92, 0x68, 0x9a, 0x42, 0x00, 0xd3, 0xf5, 0xe5, 0x72, 0xb6, 0x07, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x72, 0xb6, 0x06, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x00, 0x23, 0x02, 0x9a, - 0x53, 0x61, 0xe9, 0xe7, 0x18, 0x55, 0x00, 0x08, 0x24, 0x55, 0x00, 0x08, - 0x78, 0x54, 0x00, 0x08, 0xf8, 0x53, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x53, 0x61, 0xe9, 0xe7, 0xd8, 0x55, 0x00, 0x08, 0xe4, 0x55, 0x00, 0x08, + 0x38, 0x55, 0x00, 0x08, 0xb8, 0x54, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xb5, 0x45, 0x46, 0xde, 0x46, 0x57, 0x46, 0x4e, 0x46, 0xe0, 0xb5, 0x64, 0x4d, 0x83, 0x46, 0x6b, 0x69, 0x87, 0xb0, 0x98, 0x46, 0x4b, 0x1c, 0x4e, 0xd0, 0x00, 0x29, 0x03, 0xd1, 0x72, 0xb6, @@ -699,8 +715,8 @@ static const unsigned char build_wideband_image_bin[] = { 0x07, 0xd1, 0x49, 0x44, 0x59, 0x63, 0x1c, 0x61, 0xda, 0x60, 0x80, 0xe7, 0x6a, 0x62, 0x1a, 0x00, 0xb7, 0xe7, 0x72, 0xb6, 0x06, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, 0x80, 0x23, 0xdb, 0x05, 0xd9, 0x60, 0x8e, 0xe7, 0xc0, 0x46, - 0x94, 0x10, 0x00, 0x20, 0xd0, 0x54, 0x00, 0x08, 0x01, 0x2b, 0x00, 0x08, - 0xa4, 0x55, 0x00, 0x08, 0xf8, 0xb5, 0x47, 0x46, 0xce, 0x46, 0x80, 0x46, + 0x94, 0x10, 0x00, 0x20, 0x90, 0x55, 0x00, 0x08, 0x41, 0x2b, 0x00, 0x08, + 0x64, 0x56, 0x00, 0x08, 0xf8, 0xb5, 0x47, 0x46, 0xce, 0x46, 0x80, 0x46, 0x0d, 0x00, 0x80, 0xb5, 0x72, 0xb6, 0x3d, 0x4c, 0x23, 0x78, 0x1a, 0x1f, 0x01, 0x2a, 0x50, 0xd8, 0xe0, 0x22, 0x27, 0x00, 0x52, 0x05, 0x91, 0x46, 0x39, 0x4e, 0x08, 0x37, 0x0f, 0xe0, 0x73, 0x69, 0x00, 0x2d, 0x4b, 0xd0, @@ -722,232 +738,232 @@ static const unsigned char build_wideband_image_bin[] = { 0xf8, 0xbd, 0x41, 0x46, 0x8c, 0x88, 0xd1, 0x06, 0xc9, 0x0f, 0x64, 0x05, 0x49, 0x00, 0x21, 0x43, 0xc0, 0xe7, 0x72, 0xb6, 0x06, 0x4b, 0x73, 0x66, 0xfe, 0xe7, 0x72, 0xb6, 0x04, 0x4b, 0x73, 0x66, 0xfe, 0xe7, 0xc0, 0x46, - 0x4c, 0x06, 0x00, 0x20, 0x94, 0x10, 0x00, 0x20, 0x18, 0x56, 0x00, 0x08, - 0x48, 0x54, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0x87, 0xb0, 0x03, 0x9b, 0x0a, 0x4a, - 0x01, 0x93, 0x5b, 0x0f, 0x5b, 0x07, 0x13, 0x43, 0x3f, 0x22, 0x03, 0x93, - 0x02, 0xab, 0x1b, 0x78, 0x01, 0x21, 0x93, 0x43, 0x20, 0x22, 0x13, 0x43, - 0x02, 0xaa, 0x10, 0x00, 0x13, 0x70, 0x49, 0x42, 0xff, 0xf7, 0x5a, 0xff, - 0x07, 0xb0, 0x00, 0xbd, 0x73, 0x75, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0xb5, - 0x72, 0xb6, 0x08, 0x20, 0xff, 0xf7, 0x72, 0xfe, 0x07, 0x4b, 0x1a, 0x68, - 0x9a, 0x42, 0x04, 0xd0, 0x59, 0x69, 0x92, 0x68, 0x89, 0x68, 0x91, 0x42, - 0x01, 0xd3, 0x62, 0xb6, 0x10, 0xbd, 0x72, 0xb6, 0x02, 0x4a, 0x5a, 0x66, - 0xfe, 0xe7, 0xc0, 0x46, 0x94, 0x10, 0x00, 0x20, 0x6c, 0x54, 0x00, 0x08, + 0x4c, 0x06, 0x00, 0x20, 0x94, 0x10, 0x00, 0x20, 0xd8, 0x56, 0x00, 0x08, + 0x08, 0x55, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0xb5, 0x04, 0x00, 0x00, 0x21, 0xff, 0xf7, + 0x6b, 0xff, 0x20, 0x00, 0x10, 0xbd, 0xc0, 0x46, 0x00, 0xb5, 0x87, 0xb0, + 0x03, 0x9b, 0x0a, 0x4a, 0x01, 0x93, 0x5b, 0x0f, 0x5b, 0x07, 0x13, 0x43, + 0x3f, 0x22, 0x03, 0x93, 0x02, 0xab, 0x1b, 0x78, 0x01, 0x21, 0x93, 0x43, + 0x20, 0x22, 0x13, 0x43, 0x02, 0xaa, 0x10, 0x00, 0x13, 0x70, 0x49, 0x42, + 0xff, 0xf7, 0x52, 0xff, 0x07, 0xb0, 0x00, 0xbd, 0x73, 0x75, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0xb5, 0x0d, 0x4c, 0x0d, 0x4e, 0x0e, 0x4d, 0x0e, 0xe0, 0x32, 0x68, - 0x0d, 0x49, 0x28, 0x00, 0xfe, 0xf7, 0xee, 0xff, 0x0c, 0x49, 0xfe, 0xf7, - 0xed, 0xfb, 0xfe, 0xf7, 0xcd, 0xfe, 0xff, 0xf7, 0x77, 0xf8, 0x14, 0x20, - 0xff, 0xf7, 0xcc, 0xff, 0x23, 0x68, 0x02, 0x2b, 0xed, 0xd0, 0x00, 0x20, - 0xff, 0xf7, 0x6e, 0xf8, 0xf5, 0xe7, 0xc0, 0x46, 0xb8, 0x0f, 0x00, 0x20, - 0x40, 0x12, 0x00, 0x20, 0xcc, 0x0f, 0x00, 0x20, 0x66, 0x66, 0xe6, 0x3e, - 0x00, 0x00, 0x7a, 0x44, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xb5, 0xde, 0x46, - 0x57, 0x46, 0x4e, 0x46, 0x45, 0x46, 0x63, 0x48, 0xe0, 0xb5, 0xff, 0xf7, - 0xaf, 0xff, 0x62, 0x4b, 0x62, 0x4e, 0x99, 0x46, 0x62, 0x4b, 0x63, 0x4f, - 0x9a, 0x46, 0x63, 0x4b, 0x9b, 0x46, 0x63, 0x4b, 0x98, 0x46, 0x2c, 0xe0, - 0x5b, 0x46, 0x62, 0x48, 0x19, 0x68, 0xfe, 0xf7, 0xef, 0xf9, 0xfe, 0x21, - 0x89, 0x05, 0xfe, 0xf7, 0xcf, 0xfc, 0x01, 0x1c, 0x5e, 0x48, 0xfe, 0xf7, - 0xe7, 0xf9, 0x33, 0x68, 0x04, 0x1c, 0x01, 0x2b, 0x62, 0xd0, 0x02, 0x2b, - 0x3f, 0xd0, 0x00, 0x2b, 0x2e, 0xd0, 0x00, 0x24, 0x43, 0x46, 0x1d, 0x68, - 0x58, 0x49, 0x28, 0x1c, 0xfd, 0xf7, 0xfc, 0xff, 0x00, 0x28, 0x20, 0xd0, - 0x29, 0x1c, 0x20, 0x1c, 0xfe, 0xf7, 0xd2, 0xf9, 0x01, 0x1c, 0xfe, 0xf7, - 0x99, 0xfb, 0x01, 0x1c, 0x38, 0x00, 0xfe, 0xf7, 0xfb, 0xff, 0xfa, 0x20, - 0x40, 0x00, 0xff, 0xf7, 0x77, 0xff, 0x4b, 0x46, 0x1b, 0x78, 0x00, 0x2b, - 0xce, 0xd1, 0x33, 0x60, 0x43, 0x46, 0x51, 0x46, 0x64, 0x22, 0xff, 0x24, - 0x1d, 0x68, 0x0a, 0x60, 0x28, 0x1c, 0x48, 0x49, 0xa4, 0x05, 0xfd, 0xf7, - 0xdb, 0xff, 0x00, 0x28, 0xde, 0xd1, 0x00, 0x21, 0x38, 0x00, 0xfe, 0xf7, - 0xe1, 0xff, 0xe4, 0xe7, 0x53, 0x46, 0x52, 0x46, 0x1b, 0x68, 0x01, 0x3b, - 0x13, 0x60, 0x00, 0x2b, 0x44, 0xdd, 0x40, 0x49, 0xfd, 0xf7, 0xca, 0xff, - 0x00, 0x28, 0x3f, 0xd1, 0xff, 0x24, 0xa4, 0x05, 0xc2, 0xe7, 0x3d, 0x49, - 0xfd, 0xf7, 0xc2, 0xff, 0x00, 0x28, 0x4a, 0xd1, 0x3b, 0x49, 0x20, 0x1c, - 0xfd, 0xf7, 0xd0, 0xff, 0x00, 0x28, 0x4b, 0xd1, 0x39, 0x49, 0x20, 0x1c, - 0xfe, 0xf7, 0x76, 0xfc, 0x38, 0x49, 0x02, 0x1c, 0x38, 0x48, 0xfe, 0xf7, - 0x55, 0xff, 0x01, 0x1c, 0x37, 0x48, 0xfe, 0xf7, 0x6d, 0xfc, 0x04, 0x1c, - 0x36, 0x49, 0x20, 0x1c, 0xfd, 0xf7, 0xb2, 0xff, 0x00, 0x28, 0xa3, 0xd1, - 0x33, 0x4c, 0xa1, 0xe7, 0x2b, 0x49, 0xfd, 0xf7, 0xa1, 0xff, 0x00, 0x28, - 0x26, 0xd1, 0x53, 0x46, 0x1b, 0x68, 0x00, 0x2b, 0x33, 0xd0, 0x52, 0x46, - 0x01, 0x3b, 0x13, 0x60, 0x2d, 0x4b, 0x28, 0x49, 0x1c, 0x68, 0x20, 0x1c, - 0xfd, 0xf7, 0x92, 0xff, 0x00, 0x28, 0xe3, 0xd0, 0x20, 0x1c, 0x2a, 0x49, - 0xfd, 0xf7, 0xcc, 0xff, 0x27, 0x4b, 0x04, 0x1c, 0x18, 0x60, 0xdb, 0xe7, - 0xe1, 0x23, 0x52, 0x46, 0x9b, 0x00, 0x81, 0x24, 0x13, 0x60, 0x01, 0x23, - 0xe4, 0x05, 0x33, 0x60, 0x20, 0x1c, 0x22, 0x49, 0xfd, 0xf7, 0xbc, 0xff, - 0x1f, 0x4b, 0x04, 0x1c, 0x18, 0x60, 0xcb, 0xe7, 0x02, 0x23, 0x33, 0x60, - 0xba, 0xe7, 0x04, 0x23, 0x1d, 0x4a, 0x00, 0x24, 0x13, 0x60, 0x01, 0x3b, - 0x33, 0x60, 0x6b, 0xe7, 0x05, 0x23, 0x1a, 0x4a, 0x00, 0x24, 0x13, 0x60, - 0x02, 0x3b, 0x33, 0x60, 0x64, 0xe7, 0x17, 0x4a, 0x03, 0x33, 0x00, 0x24, - 0x13, 0x60, 0x33, 0x60, 0x5e, 0xe7, 0xc0, 0x46, 0x10, 0x27, 0x00, 0x00, - 0xb0, 0x08, 0x00, 0x20, 0xb8, 0x0f, 0x00, 0x20, 0x00, 0x06, 0x00, 0x20, - 0x2c, 0x12, 0x00, 0x20, 0x3c, 0x12, 0x00, 0x20, 0x04, 0x06, 0x00, 0x20, - 0x33, 0x33, 0x53, 0x40, 0x00, 0xe0, 0xab, 0x46, 0x00, 0x00, 0xb8, 0x41, - 0x00, 0x00, 0xcd, 0x43, 0x00, 0x00, 0x20, 0x43, 0x00, 0x80, 0x18, 0x44, - 0x00, 0x00, 0x20, 0x41, 0x00, 0x00, 0x96, 0x43, 0x78, 0x10, 0x00, 0x20, - 0x00, 0x00, 0xf0, 0x40, 0x00, 0x00, 0x30, 0x41, 0xe8, 0x06, 0x00, 0x20, - 0x90, 0xc2, 0x75, 0x3c, 0xec, 0x06, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0xf0, 0xb5, 0x01, 0x25, 0x2b, 0x00, 0x8b, 0x40, 0xc6, 0x46, 0x04, 0x00, - 0x98, 0x46, 0x0e, 0x00, 0x00, 0xb5, 0x19, 0x00, 0x40, 0x22, 0xfe, 0xf7, - 0xdb, 0xff, 0x0a, 0x20, 0xff, 0xf7, 0xb0, 0xfe, 0x20, 0x22, 0x41, 0x46, - 0x20, 0x00, 0x27, 0x69, 0xfe, 0xf7, 0xd2, 0xff, 0x0a, 0x20, 0xff, 0xf7, - 0xa7, 0xfe, 0x23, 0x69, 0xf7, 0x40, 0xf3, 0x40, 0x01, 0x20, 0x2b, 0x40, - 0x3d, 0x40, 0x9d, 0x42, 0x00, 0xd1, 0x68, 0x00, 0x80, 0xbc, 0xb8, 0x46, - 0xf0, 0xbd, 0xc0, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x70, 0xb5, - 0x03, 0x71, 0x1b, 0x4b, 0x1b, 0x4a, 0x19, 0x68, 0x04, 0x00, 0x02, 0x60, - 0x91, 0x42, 0x02, 0xd1, 0x02, 0x00, 0x03, 0xcb, 0x03, 0xc2, 0x01, 0x21, - 0x17, 0x48, 0xff, 0xf7, 0xc7, 0xff, 0x05, 0x00, 0x90, 0x20, 0x08, 0x21, - 0xc0, 0x05, 0xff, 0xf7, 0xc1, 0xff, 0x6b, 0x00, 0x5b, 0x19, 0x18, 0x18, - 0x08, 0x28, 0x05, 0xd8, 0x11, 0x4b, 0x80, 0x00, 0x1b, 0x58, 0x9f, 0x46, - 0x07, 0x23, 0x23, 0x71, 0x20, 0x00, 0x70, 0xbd, 0x02, 0x23, 0x23, 0x71, - 0xfa, 0xe7, 0x00, 0x23, 0x23, 0x71, 0xf7, 0xe7, 0x03, 0x23, 0x23, 0x71, - 0xf4, 0xe7, 0x04, 0x23, 0x23, 0x71, 0xf1, 0xe7, 0x01, 0x23, 0x23, 0x71, - 0xee, 0xe7, 0x05, 0x23, 0x23, 0x71, 0xeb, 0xe7, 0x06, 0x23, 0x23, 0x71, - 0xe8, 0xe7, 0xc0, 0x46, 0x00, 0x7c, 0x00, 0x08, 0x01, 0xbe, 0xad, 0xde, - 0x00, 0x04, 0x00, 0x48, 0x10, 0x54, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xb5, 0xde, 0x46, - 0x57, 0x46, 0x4e, 0x46, 0x45, 0x46, 0xe0, 0xb5, 0x85, 0xb0, 0x72, 0xb6, - 0x6d, 0x4c, 0x63, 0x69, 0x00, 0x2b, 0x04, 0xd0, 0x6c, 0x4d, 0x72, 0xb6, - 0x6c, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, 0x00, 0x23, 0x99, 0x46, 0x9a, 0x46, - 0x6a, 0x4b, 0x68, 0x4d, 0x9b, 0x46, 0x6a, 0x4b, 0x6a, 0x4f, 0x98, 0x46, - 0x6a, 0x4e, 0x23, 0x78, 0x02, 0x2b, 0x05, 0xd0, 0x05, 0x2b, 0x03, 0xd0, - 0x72, 0xb6, 0x68, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, 0x18, 0x23, 0x30, 0x78, - 0xe3, 0x60, 0x15, 0x3b, 0x21, 0x6a, 0xf2, 0x68, 0xa7, 0x60, 0x26, 0x61, - 0x23, 0x70, 0x00, 0x28, 0x00, 0xd0, 0xa9, 0xe0, 0x02, 0x3b, 0x1a, 0x43, - 0x00, 0x92, 0xe3, 0x69, 0x5b, 0x68, 0xdf, 0x60, 0x70, 0x88, 0x84, 0x46, - 0x18, 0x20, 0x62, 0x46, 0x50, 0x43, 0x58, 0x60, 0x19, 0x60, 0x01, 0x21, - 0x18, 0x68, 0x32, 0x69, 0x01, 0x43, 0x19, 0x60, 0xa3, 0x69, 0x03, 0x20, - 0x19, 0x68, 0x19, 0x60, 0x90, 0x21, 0x59, 0x60, 0x1a, 0x62, 0x72, 0x69, - 0x5a, 0x61, 0xb2, 0x69, 0x9a, 0x62, 0x00, 0x9a, 0xda, 0x60, 0x04, 0x22, - 0x99, 0x68, 0x0a, 0x43, 0x9a, 0x60, 0x22, 0x00, 0x6b, 0x69, 0x14, 0x32, - 0x63, 0x61, 0x5a, 0x62, 0xff, 0xf7, 0xde, 0xf9, 0x2b, 0x68, 0xab, 0x42, - 0x05, 0xd0, 0x6a, 0x69, 0x9b, 0x68, 0x92, 0x68, 0x9a, 0x42, 0x00, 0xd2, - 0x7b, 0xe0, 0x62, 0xb6, 0x3a, 0x00, 0x3b, 0x00, 0x00, 0x20, 0x90, 0x32, - 0x19, 0x88, 0x06, 0x33, 0x40, 0x18, 0x9a, 0x42, 0xfa, 0xd1, 0xfe, 0xf7, - 0x43, 0xfd, 0x42, 0x49, 0xfe, 0xf7, 0xf8, 0xf9, 0x3a, 0x00, 0x01, 0x90, - 0x00, 0x20, 0x40, 0x4b, 0x92, 0x32, 0x19, 0x88, 0x06, 0x33, 0x40, 0x18, - 0x9a, 0x42, 0xfa, 0xd1, 0xfe, 0xf7, 0x34, 0xfd, 0x3a, 0x00, 0x00, 0x21, - 0x3b, 0x4b, 0x03, 0x90, 0x94, 0x32, 0x00, 0x91, 0x00, 0x98, 0x19, 0x88, - 0x84, 0x46, 0x8c, 0x44, 0x61, 0x46, 0x06, 0x33, 0x00, 0x91, 0x9a, 0x42, - 0xf6, 0xd1, 0x80, 0x23, 0x35, 0x4a, 0x01, 0x98, 0x51, 0x69, 0x4b, 0x40, - 0x53, 0x61, 0x49, 0x46, 0xfd, 0xf7, 0x6e, 0xfe, 0xfc, 0x21, 0x89, 0x05, - 0xfe, 0xf7, 0xd0, 0xf9, 0x51, 0x46, 0x81, 0x46, 0xfd, 0xf7, 0x66, 0xfe, - 0xfc, 0x21, 0x89, 0x05, 0xfe, 0xf7, 0xc8, 0xf9, 0x2c, 0x4b, 0x51, 0x46, - 0x18, 0x60, 0x48, 0x46, 0xfe, 0xf7, 0xdc, 0xfa, 0x40, 0x00, 0x2a, 0x49, - 0x40, 0x08, 0xfe, 0xf7, 0xbd, 0xf9, 0x5b, 0x46, 0x81, 0x46, 0x28, 0x49, - 0x18, 0x68, 0xfe, 0xf7, 0xb7, 0xf9, 0x01, 0x1c, 0x48, 0x46, 0xfd, 0xf7, - 0x4d, 0xfe, 0x5b, 0x46, 0x18, 0x60, 0x43, 0x46, 0x1b, 0x68, 0x00, 0x98, - 0x02, 0x93, 0xfe, 0xf7, 0xf3, 0xfc, 0x01, 0x1c, 0x03, 0x98, 0xfe, 0xf7, - 0xc1, 0xfa, 0x1f, 0x49, 0xfe, 0xf7, 0xa4, 0xf9, 0x1e, 0x49, 0x81, 0x46, - 0x02, 0x98, 0xfe, 0xf7, 0x9f, 0xf9, 0x01, 0x1c, 0x48, 0x46, 0xfd, 0xf7, - 0x35, 0xfe, 0x43, 0x46, 0x18, 0x60, 0x72, 0xb6, 0x63, 0x69, 0xd1, 0x46, - 0x00, 0x2b, 0x00, 0xd0, 0x35, 0xe7, 0x01, 0x9b, 0x9a, 0x46, 0x40, 0xe7, - 0x1a, 0x43, 0x24, 0x23, 0x00, 0x92, 0x19, 0x43, 0x53, 0xe7, 0x72, 0xb6, - 0x12, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, 0xc0, 0x46, 0x28, 0x06, 0x00, 0x20, - 0x94, 0x10, 0x00, 0x20, 0x2c, 0x56, 0x00, 0x08, 0x3c, 0x12, 0x00, 0x20, - 0x44, 0x12, 0x00, 0x20, 0xe8, 0x0f, 0x00, 0x20, 0x08, 0x06, 0x00, 0x20, - 0xf4, 0x55, 0x00, 0x08, 0xbe, 0xa4, 0x50, 0x37, 0xea, 0x0f, 0x00, 0x20, - 0xec, 0x0f, 0x00, 0x20, 0x00, 0x04, 0x00, 0x48, 0x40, 0x12, 0x00, 0x20, - 0x6f, 0x12, 0x03, 0x3b, 0xee, 0x7c, 0x7f, 0x3f, 0x9c, 0x44, 0x34, 0x35, - 0x48, 0xe1, 0x7a, 0x3f, 0x3c, 0x54, 0x00, 0x08, 0xf0, 0xb5, 0x57, 0x46, - 0x4e, 0x46, 0xde, 0x46, 0x45, 0x46, 0x00, 0x23, 0xe0, 0xb5, 0x8d, 0xb0, - 0x9a, 0x46, 0x99, 0x46, 0x00, 0x93, 0x72, 0xb6, 0xb9, 0x4c, 0xba, 0x4d, - 0x23, 0x78, 0x04, 0x3b, 0x01, 0x2b, 0x00, 0xd9, 0xb0, 0xe0, 0x01, 0x23, - 0x9b, 0x46, 0x27, 0x00, 0x03, 0x26, 0x10, 0x37, 0x23, 0x78, 0x05, 0x2b, - 0x00, 0xd1, 0x87, 0xe0, 0xe3, 0x6b, 0xda, 0x68, 0x16, 0x42, 0x00, 0xd1, - 0x7e, 0xe0, 0x03, 0x22, 0xd9, 0x68, 0x11, 0x42, 0x00, 0xd1, 0xa1, 0xe0, - 0xd8, 0x21, 0xda, 0x20, 0xdc, 0x26, 0x49, 0x00, 0x40, 0x00, 0x76, 0x00, - 0x59, 0x58, 0x18, 0x58, 0x9e, 0x59, 0x0a, 0x96, 0xde, 0x26, 0x76, 0x00, - 0x9e, 0x59, 0x20, 0x26, 0xde, 0x60, 0xde, 0x68, 0x16, 0x42, 0x03, 0xd1, - 0x02, 0x22, 0x5e, 0x69, 0x32, 0x43, 0x5a, 0x61, 0x5b, 0x46, 0x4a, 0x08, - 0x13, 0x40, 0x99, 0x46, 0x5b, 0x46, 0x0f, 0x27, 0x8e, 0x08, 0x33, 0x40, - 0x00, 0x93, 0x02, 0xab, 0x1b, 0x7d, 0x4a, 0x46, 0xbb, 0x43, 0x57, 0x46, - 0x3b, 0x43, 0x10, 0x27, 0x12, 0x01, 0xbb, 0x43, 0x13, 0x43, 0x5a, 0x46, - 0x16, 0x40, 0x20, 0x22, 0xdb, 0xb2, 0x76, 0x01, 0x93, 0x43, 0x33, 0x43, - 0x02, 0xae, 0x33, 0x75, 0x13, 0x42, 0x00, 0xd0, 0x87, 0xe0, 0x02, 0xab, - 0x1b, 0x8b, 0x49, 0x0d, 0xdb, 0x0a, 0xdb, 0x02, 0x19, 0x43, 0x02, 0xab, - 0x19, 0x83, 0x0f, 0x23, 0x03, 0x40, 0x9a, 0x46, 0x2b, 0x68, 0xab, 0x42, - 0x05, 0xd0, 0x6a, 0x69, 0x9b, 0x68, 0x92, 0x68, 0x9a, 0x42, 0x00, 0xd2, - 0x7b, 0xe0, 0x62, 0xb6, 0x4a, 0x46, 0x0f, 0x20, 0x11, 0x01, 0x52, 0x46, - 0x02, 0xab, 0x1b, 0x7d, 0x83, 0x43, 0x13, 0x43, 0x10, 0x22, 0x93, 0x43, - 0x0b, 0x43, 0x20, 0x21, 0x00, 0x9a, 0x8b, 0x43, 0x52, 0x01, 0x13, 0x43, - 0x02, 0xaa, 0x13, 0x75, 0x0b, 0x42, 0x39, 0xd0, 0x03, 0x40, 0x02, 0x2b, - 0x00, 0xd1, 0xd3, 0xe0, 0x00, 0x2b, 0x64, 0xd1, 0xef, 0x22, 0x08, 0x9b, - 0x12, 0x05, 0x01, 0x93, 0xdb, 0x00, 0xdb, 0x08, 0x93, 0x42, 0x2b, 0xd1, - 0xff, 0xf7, 0x94, 0xfc, 0x32, 0x20, 0xff, 0xf7, 0xb1, 0xfc, 0xbf, 0xf3, - 0x4f, 0x8f, 0x75, 0x4b, 0x75, 0x4a, 0xda, 0x60, 0xbf, 0xf3, 0x4f, 0x8f, - 0xc0, 0x46, 0xfd, 0xe7, 0x1a, 0x69, 0x16, 0x42, 0x00, 0xd0, 0x7c, 0xe7, - 0x6b, 0x69, 0x04, 0x20, 0x1f, 0x60, 0x62, 0x69, 0x5a, 0x60, 0x13, 0x60, - 0x63, 0x61, 0x6b, 0x69, 0x98, 0x46, 0xff, 0xf7, 0x81, 0xf8, 0x43, 0x46, - 0x5b, 0x6a, 0x00, 0x2b, 0x00, 0xd1, 0x63, 0xe7, 0x2b, 0x68, 0xab, 0x42, - 0x05, 0xd0, 0x6a, 0x69, 0x9b, 0x68, 0x92, 0x68, 0x9a, 0x42, 0x00, 0xd2, - 0x9a, 0xe0, 0x62, 0xb6, 0x72, 0xb6, 0x23, 0x78, 0x04, 0x3b, 0x01, 0x2b, - 0x00, 0xd8, 0x50, 0xe7, 0x72, 0xb6, 0x61, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, - 0x19, 0x69, 0x11, 0x42, 0x9a, 0xd0, 0xe0, 0x21, 0xe2, 0x20, 0xe4, 0x26, - 0x49, 0x00, 0x40, 0x00, 0x76, 0x00, 0x59, 0x58, 0x18, 0x58, 0x9e, 0x59, - 0x0a, 0x96, 0xe6, 0x26, 0x76, 0x00, 0x9e, 0x59, 0x20, 0x26, 0x1e, 0x61, - 0x1e, 0x69, 0x16, 0x42, 0x00, 0xd0, 0x5d, 0xe7, 0x10, 0x26, 0x5a, 0x69, - 0x32, 0x43, 0x5a, 0x61, 0x58, 0xe7, 0x08, 0x9b, 0xc9, 0x08, 0x01, 0x93, - 0x5b, 0x0f, 0x5b, 0x07, 0x19, 0x43, 0x08, 0x91, 0x77, 0xe7, 0x72, 0xb6, - 0x4e, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, 0x01, 0x2b, 0xcc, 0xd1, 0x08, 0x9b, - 0x4c, 0x4a, 0x01, 0x93, 0xdb, 0x00, 0xdb, 0x08, 0x93, 0x42, 0xc5, 0xd1, - 0x04, 0xa8, 0xff, 0xf7, 0xb5, 0xfd, 0x20, 0x22, 0x02, 0xab, 0x9b, 0x18, - 0x1b, 0x78, 0x02, 0xaa, 0x13, 0x73, 0x46, 0x4b, 0x1a, 0x69, 0x12, 0x06, - 0x03, 0xd5, 0x45, 0x4a, 0x5a, 0x60, 0x45, 0x4a, 0x5a, 0x60, 0x42, 0x4b, - 0x59, 0x46, 0xda, 0x68, 0x0a, 0x42, 0xfb, 0xd1, 0x02, 0x22, 0x19, 0x69, - 0x0a, 0x43, 0x1a, 0x61, 0xf8, 0x22, 0xd2, 0x01, 0x5a, 0x61, 0x40, 0x22, - 0x19, 0x69, 0x0a, 0x43, 0x1a, 0x61, 0xc0, 0x46, 0x39, 0x4b, 0x59, 0x46, - 0xda, 0x68, 0x0a, 0x42, 0xfb, 0xd1, 0x02, 0x21, 0x1a, 0x69, 0x8a, 0x43, - 0x1a, 0x61, 0x1a, 0x69, 0x7e, 0x31, 0x0a, 0x43, 0x1a, 0x61, 0x1a, 0x69, - 0x0a, 0x42, 0x03, 0xd0, 0x32, 0x4a, 0x5a, 0x60, 0x32, 0x4a, 0x5a, 0x60, - 0x2f, 0x4a, 0x59, 0x46, 0x58, 0x46, 0xd3, 0x68, 0x19, 0x40, 0x03, 0x42, - 0xf9, 0xd1, 0x2c, 0x4a, 0x08, 0x20, 0x5e, 0x46, 0x02, 0xab, 0x1b, 0x18, - 0x58, 0x5a, 0x13, 0x69, 0x33, 0x43, 0x13, 0x61, 0x2a, 0x4b, 0x58, 0x52, - 0x58, 0x46, 0xd3, 0x68, 0x18, 0x42, 0xfb, 0xd1, 0x13, 0x69, 0x02, 0x31, - 0x83, 0x43, 0x13, 0x61, 0x08, 0x29, 0xeb, 0xd1, 0x80, 0x23, 0x11, 0x69, - 0x02, 0xa8, 0x0b, 0x43, 0x13, 0x61, 0xff, 0xf7, 0x5f, 0xfd, 0x22, 0x4b, - 0x02, 0xaa, 0x03, 0xca, 0x03, 0xc3, 0xff, 0xf7, 0xd1, 0xfb, 0x65, 0xe7, - 0x72, 0xb6, 0x18, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, 0x08, 0x9b, 0x1d, 0x4a, - 0x01, 0x93, 0xdb, 0x00, 0xdb, 0x08, 0x93, 0x42, 0x00, 0xd0, 0x59, 0xe7, - 0x02, 0xab, 0x5b, 0x18, 0x18, 0x78, 0xfe, 0xf7, 0xfb, 0xfa, 0x18, 0x49, - 0x06, 0x1c, 0xfd, 0xf7, 0x4f, 0xfc, 0x00, 0x28, 0x0e, 0xd1, 0x16, 0x49, - 0x30, 0x1c, 0xfd, 0xf7, 0xef, 0xff, 0x21, 0x22, 0x14, 0x4b, 0x18, 0x60, - 0x02, 0xab, 0x9b, 0x18, 0x5a, 0x46, 0x1b, 0x78, 0x13, 0x40, 0x12, 0x4a, - 0x13, 0x70, 0x3f, 0xe7, 0x11, 0x48, 0xf2, 0xe7, 0x4c, 0x06, 0x00, 0x20, - 0x94, 0x10, 0x00, 0x20, 0x00, 0xed, 0x00, 0xe0, 0x04, 0x00, 0xfa, 0x05, - 0x38, 0x56, 0x00, 0x08, 0x48, 0x54, 0x00, 0x08, 0x00, 0x00, 0xf4, 0x0e, - 0x00, 0x20, 0x02, 0x40, 0x23, 0x01, 0x67, 0x45, 0xab, 0x89, 0xef, 0xcd, - 0x00, 0x7c, 0x00, 0x08, 0xd8, 0x11, 0x00, 0x20, 0x00, 0x00, 0xf5, 0x0e, - 0x00, 0x00, 0x48, 0x42, 0xcd, 0xcc, 0xcc, 0x3d, 0x04, 0x06, 0x00, 0x20, - 0xb0, 0x08, 0x00, 0x20, 0x00, 0x00, 0x60, 0x41, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf0, 0xb5, 0x4e, 0x46, 0x45, 0x46, 0x57, 0x46, - 0xde, 0x46, 0x47, 0x4b, 0xe0, 0xb5, 0x9a, 0x46, 0x46, 0x4b, 0x47, 0x4e, - 0x99, 0x46, 0x47, 0x4b, 0x47, 0x4d, 0x98, 0x46, 0x87, 0xb0, 0x5e, 0xe0, - 0x46, 0x49, 0x38, 0x1c, 0xfd, 0xf7, 0x14, 0xfc, 0x00, 0x28, 0x78, 0xd1, - 0x44, 0x49, 0x38, 0x1c, 0xfd, 0xf7, 0xa0, 0xff, 0x00, 0x21, 0x83, 0x46, - 0xfd, 0xf7, 0xf6, 0xfb, 0x00, 0x28, 0x70, 0xd1, 0x40, 0x48, 0x59, 0x46, - 0xfd, 0xf7, 0x96, 0xff, 0x3f, 0x49, 0xfd, 0xf7, 0x2d, 0xfc, 0x01, 0x1c, - 0x3e, 0x48, 0xfd, 0xf7, 0xc5, 0xfd, 0xfd, 0xf7, 0x0f, 0xfc, 0x40, 0xba, - 0x80, 0xb2, 0x02, 0xab, 0x02, 0x3c, 0x18, 0x81, 0x63, 0x42, 0x63, 0x41, - 0x80, 0x22, 0x5b, 0x42, 0x13, 0x40, 0x02, 0xa9, 0x02, 0x33, 0x8b, 0x73, - 0x36, 0x4b, 0xca, 0x73, 0xdb, 0x89, 0x36, 0x48, 0x9b, 0x08, 0x8b, 0x72, - 0x31, 0x68, 0xfd, 0xf7, 0xad, 0xfd, 0xfe, 0x21, 0x89, 0x05, 0xfe, 0xf7, - 0x8d, 0xf8, 0x01, 0x1c, 0x31, 0x48, 0xfd, 0xf7, 0xa5, 0xfd, 0x31, 0x49, - 0xfe, 0xf7, 0x86, 0xf8, 0xfe, 0xf7, 0x4c, 0xfa, 0x80, 0x22, 0xff, 0x23, - 0xd2, 0x00, 0x90, 0x42, 0x08, 0xda, 0x00, 0x23, 0xc2, 0x1c, 0x05, 0xdb, - 0xc2, 0x17, 0x03, 0x33, 0x13, 0x40, 0x18, 0x18, 0x80, 0x10, 0xc3, 0xb2, - 0x02, 0xaa, 0xd3, 0x72, 0x27, 0x49, 0x28, 0x68, 0xfd, 0xf7, 0x56, 0xff, - 0xfe, 0xf7, 0x36, 0xfa, 0x02, 0xab, 0x18, 0x73, 0x00, 0x21, 0x18, 0x00, - 0xff, 0xf7, 0x84, 0xfa, 0x64, 0x20, 0xff, 0xf7, 0x31, 0xfb, 0x53, 0x46, - 0x1a, 0x79, 0x03, 0x9b, 0x81, 0x32, 0x01, 0x93, 0x5b, 0x0f, 0xff, 0x32, - 0x5b, 0x07, 0x13, 0x43, 0x3f, 0x22, 0x03, 0x93, 0x02, 0xab, 0x1b, 0x78, - 0x1a, 0x49, 0x93, 0x43, 0x28, 0x22, 0x13, 0x43, 0x02, 0xaa, 0x13, 0x70, - 0x00, 0x23, 0x53, 0x73, 0x4b, 0x46, 0x1c, 0x68, 0x43, 0x46, 0x1f, 0x68, - 0x38, 0x1c, 0xfd, 0xf7, 0x89, 0xfb, 0x00, 0x28, 0x82, 0xd0, 0x13, 0x48, - 0x9f, 0xe7, 0x13, 0x48, 0x9d, 0xe7, 0x13, 0x48, 0x8d, 0xe7, 0xc0, 0x46, - 0xd8, 0x11, 0x00, 0x20, 0xb8, 0x0f, 0x00, 0x20, 0x3c, 0x12, 0x00, 0x20, - 0x44, 0x12, 0x00, 0x20, 0x40, 0x12, 0x00, 0x20, 0xef, 0xa7, 0x0a, 0x40, - 0xff, 0xc8, 0xce, 0xbf, 0x8a, 0x76, 0xe5, 0xbe, 0xfc, 0xde, 0x7e, 0x3f, - 0x00, 0x40, 0x1c, 0x46, 0xbc, 0x0f, 0x00, 0x20, 0x33, 0x33, 0x53, 0x40, - 0x00, 0xe0, 0xab, 0x46, 0x00, 0x00, 0x20, 0x41, 0x00, 0x00, 0x48, 0x43, - 0x21, 0xe5, 0x2f, 0xbf, 0x4e, 0x20, 0x00, 0x00, 0x13, 0x88, 0x00, 0x00, - 0x11, 0xe4, 0x90, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x10, 0xb5, 0x72, 0xb6, 0x08, 0x20, 0xff, 0xf7, 0x6a, 0xfe, + 0x07, 0x4b, 0x1a, 0x68, 0x9a, 0x42, 0x04, 0xd0, 0x59, 0x69, 0x92, 0x68, + 0x89, 0x68, 0x91, 0x42, 0x01, 0xd3, 0x62, 0xb6, 0x10, 0xbd, 0x72, 0xb6, + 0x02, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, 0xc0, 0x46, 0x94, 0x10, 0x00, 0x20, + 0x2c, 0x55, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0xb5, 0x0d, 0x4c, 0x0d, 0x4e, 0x0e, 0x4d, + 0x0e, 0xe0, 0x32, 0x68, 0x0d, 0x49, 0x28, 0x00, 0xfe, 0xf7, 0x86, 0xff, + 0x0c, 0x49, 0xfe, 0xf7, 0x85, 0xfb, 0xfe, 0xf7, 0x65, 0xfe, 0xff, 0xf7, + 0x2f, 0xf8, 0x14, 0x20, 0xff, 0xf7, 0xcc, 0xff, 0x23, 0x68, 0x02, 0x2b, + 0xed, 0xd0, 0x00, 0x20, 0xff, 0xf7, 0x26, 0xf8, 0xf5, 0xe7, 0xc0, 0x46, + 0xb8, 0x0f, 0x00, 0x20, 0x40, 0x12, 0x00, 0x20, 0xcc, 0x0f, 0x00, 0x20, + 0x66, 0x66, 0xe6, 0x3e, 0x00, 0x00, 0x7a, 0x44, 0x00, 0x00, 0x00, 0x00, + 0xf8, 0xb5, 0xde, 0x46, 0x57, 0x46, 0x4e, 0x46, 0x45, 0x46, 0x5b, 0x48, + 0xe0, 0xb5, 0xff, 0xf7, 0xaf, 0xff, 0x5a, 0x4b, 0x5a, 0x4e, 0x99, 0x46, + 0x5a, 0x4b, 0x5b, 0x4f, 0x9a, 0x46, 0x5b, 0x4b, 0x9b, 0x46, 0x5b, 0x4b, + 0x98, 0x46, 0x21, 0xe0, 0xfe, 0xf7, 0x9a, 0xff, 0x33, 0x68, 0x04, 0x1c, + 0x01, 0x2b, 0x5e, 0xd0, 0x02, 0x2b, 0x3f, 0xd0, 0x00, 0x2b, 0x2e, 0xd0, + 0x00, 0x24, 0x43, 0x46, 0x1d, 0x68, 0x54, 0x49, 0x28, 0x1c, 0xfd, 0xf7, + 0x9f, 0xff, 0x00, 0x28, 0x20, 0xd0, 0x29, 0x1c, 0x20, 0x1c, 0xfe, 0xf7, + 0x75, 0xf9, 0x01, 0x1c, 0xfe, 0xf7, 0x3c, 0xfb, 0x01, 0x1c, 0x38, 0x00, + 0xfe, 0xf7, 0xbe, 0xff, 0xfa, 0x20, 0x40, 0x00, 0xff, 0xf7, 0x82, 0xff, + 0x4b, 0x46, 0x1b, 0x78, 0x00, 0x2b, 0xd9, 0xd1, 0x33, 0x60, 0x43, 0x46, + 0x51, 0x46, 0x64, 0x22, 0xff, 0x24, 0x1d, 0x68, 0x0a, 0x60, 0x28, 0x1c, + 0x43, 0x49, 0xa4, 0x05, 0xfd, 0xf7, 0x7e, 0xff, 0x00, 0x28, 0xde, 0xd1, + 0x00, 0x21, 0x38, 0x00, 0xfe, 0xf7, 0xa4, 0xff, 0xe4, 0xe7, 0x53, 0x46, + 0x52, 0x46, 0x1b, 0x68, 0x01, 0x3b, 0x13, 0x60, 0x00, 0x2b, 0x40, 0xdd, + 0x3b, 0x49, 0xfd, 0xf7, 0x6d, 0xff, 0x00, 0x28, 0x3b, 0xd1, 0xff, 0x24, + 0xa4, 0x05, 0xc2, 0xe7, 0x38, 0x49, 0xfd, 0xf7, 0x65, 0xff, 0x00, 0x28, + 0x46, 0xd1, 0x37, 0x49, 0x20, 0x1c, 0xfd, 0xf7, 0x73, 0xff, 0x00, 0x28, + 0x47, 0xd1, 0x22, 0x1c, 0x34, 0x49, 0x35, 0x48, 0xfe, 0xf7, 0xfc, 0xfe, + 0x01, 0x1c, 0x34, 0x48, 0xfe, 0xf7, 0x14, 0xfc, 0x04, 0x1c, 0x33, 0x49, + 0x20, 0x1c, 0xfd, 0xf7, 0x59, 0xff, 0x00, 0x28, 0xa7, 0xd1, 0x30, 0x4c, + 0xa5, 0xe7, 0x29, 0x49, 0xfd, 0xf7, 0x48, 0xff, 0x00, 0x28, 0x26, 0xd1, + 0x53, 0x46, 0x1b, 0x68, 0x00, 0x2b, 0x33, 0xd0, 0x52, 0x46, 0x01, 0x3b, + 0x13, 0x60, 0x5b, 0x46, 0x1c, 0x68, 0x29, 0x49, 0x20, 0x1c, 0xfd, 0xf7, + 0x39, 0xff, 0x00, 0x28, 0xe3, 0xd0, 0x20, 0x1c, 0x26, 0x49, 0xfd, 0xf7, + 0x73, 0xff, 0x5b, 0x46, 0x04, 0x1c, 0x18, 0x60, 0xdb, 0xe7, 0xe1, 0x23, + 0x52, 0x46, 0x9b, 0x00, 0x81, 0x24, 0x13, 0x60, 0x01, 0x23, 0xe4, 0x05, + 0x33, 0x60, 0x20, 0x1c, 0x1e, 0x49, 0xfd, 0xf7, 0x63, 0xff, 0x5b, 0x46, + 0x04, 0x1c, 0x18, 0x60, 0xcb, 0xe7, 0x02, 0x23, 0x33, 0x60, 0xbe, 0xe7, + 0x04, 0x23, 0x1a, 0x4a, 0x00, 0x24, 0x13, 0x70, 0x01, 0x3b, 0x33, 0x60, + 0x6f, 0xe7, 0x05, 0x23, 0x16, 0x4a, 0x00, 0x24, 0x13, 0x70, 0x02, 0x3b, + 0x33, 0x60, 0x68, 0xe7, 0x13, 0x4a, 0x03, 0x33, 0x00, 0x24, 0x13, 0x70, + 0x33, 0x60, 0x62, 0xe7, 0x10, 0x27, 0x00, 0x00, 0xb0, 0x08, 0x00, 0x20, + 0xb8, 0x0f, 0x00, 0x20, 0x00, 0x06, 0x00, 0x20, 0x2c, 0x12, 0x00, 0x20, + 0xe8, 0x06, 0x00, 0x20, 0x04, 0x06, 0x00, 0x20, 0x00, 0x00, 0xb8, 0x41, + 0x00, 0x00, 0xc8, 0x43, 0x00, 0x00, 0x16, 0x43, 0x00, 0x00, 0x16, 0x44, + 0x00, 0x00, 0x96, 0x43, 0x78, 0x10, 0x00, 0x20, 0x00, 0x00, 0xf0, 0x40, + 0x00, 0x00, 0x30, 0x41, 0x00, 0x00, 0x20, 0x41, 0x90, 0xc2, 0x75, 0x3c, + 0xec, 0x06, 0x00, 0x20, 0xf0, 0xb5, 0x01, 0x25, 0x2b, 0x00, 0x8b, 0x40, + 0xc6, 0x46, 0x04, 0x00, 0x98, 0x46, 0x0e, 0x00, 0x00, 0xb5, 0x19, 0x00, + 0x40, 0x22, 0xfe, 0xf7, 0xeb, 0xff, 0x0a, 0x20, 0xff, 0xf7, 0xc8, 0xfe, + 0x20, 0x22, 0x41, 0x46, 0x20, 0x00, 0x27, 0x69, 0xfe, 0xf7, 0xe2, 0xff, + 0x0a, 0x20, 0xff, 0xf7, 0xbf, 0xfe, 0x23, 0x69, 0xf7, 0x40, 0xf3, 0x40, + 0x01, 0x20, 0x2b, 0x40, 0x3d, 0x40, 0x9d, 0x42, 0x00, 0xd1, 0x68, 0x00, + 0x80, 0xbc, 0xb8, 0x46, 0xf0, 0xbd, 0xc0, 0x46, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x23, 0x70, 0xb5, 0x03, 0x71, 0x1b, 0x4b, 0x1b, 0x4a, 0x19, 0x68, + 0x04, 0x00, 0x02, 0x60, 0x91, 0x42, 0x02, 0xd1, 0x02, 0x00, 0x03, 0xcb, + 0x03, 0xc2, 0x01, 0x21, 0x17, 0x48, 0xff, 0xf7, 0xc7, 0xff, 0x05, 0x00, + 0x90, 0x20, 0x08, 0x21, 0xc0, 0x05, 0xff, 0xf7, 0xc1, 0xff, 0x6b, 0x00, + 0x5b, 0x19, 0x18, 0x18, 0x08, 0x28, 0x05, 0xd8, 0x11, 0x4b, 0x80, 0x00, + 0x1b, 0x58, 0x9f, 0x46, 0x07, 0x23, 0x23, 0x71, 0x20, 0x00, 0x70, 0xbd, + 0x02, 0x23, 0x23, 0x71, 0xfa, 0xe7, 0x00, 0x23, 0x23, 0x71, 0xf7, 0xe7, + 0x03, 0x23, 0x23, 0x71, 0xf4, 0xe7, 0x04, 0x23, 0x23, 0x71, 0xf1, 0xe7, + 0x01, 0x23, 0x23, 0x71, 0xee, 0xe7, 0x05, 0x23, 0x23, 0x71, 0xeb, 0xe7, + 0x06, 0x23, 0x23, 0x71, 0xe8, 0xe7, 0xc0, 0x46, 0x00, 0x7c, 0x00, 0x08, + 0x01, 0xbe, 0xad, 0xde, 0x00, 0x04, 0x00, 0x48, 0xd0, 0x54, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0xb5, 0xde, 0x46, 0x57, 0x46, 0x4e, 0x46, 0x45, 0x46, 0xe0, 0xb5, + 0x85, 0xb0, 0x72, 0xb6, 0x6d, 0x4c, 0x63, 0x69, 0x00, 0x2b, 0x04, 0xd0, + 0x6c, 0x4d, 0x72, 0xb6, 0x6c, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, 0x00, 0x23, + 0x99, 0x46, 0x9a, 0x46, 0x6a, 0x4b, 0x68, 0x4d, 0x9b, 0x46, 0x6a, 0x4b, + 0x6a, 0x4f, 0x98, 0x46, 0x6a, 0x4e, 0x23, 0x78, 0x02, 0x2b, 0x05, 0xd0, + 0x05, 0x2b, 0x03, 0xd0, 0x72, 0xb6, 0x68, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, + 0x18, 0x23, 0x30, 0x78, 0xe3, 0x60, 0x15, 0x3b, 0x21, 0x6a, 0xf2, 0x68, + 0xa7, 0x60, 0x26, 0x61, 0x23, 0x70, 0x00, 0x28, 0x00, 0xd0, 0xa9, 0xe0, + 0x02, 0x3b, 0x1a, 0x43, 0x00, 0x92, 0xe3, 0x69, 0x5b, 0x68, 0xdf, 0x60, + 0x70, 0x88, 0x84, 0x46, 0x18, 0x20, 0x62, 0x46, 0x50, 0x43, 0x58, 0x60, + 0x19, 0x60, 0x01, 0x21, 0x18, 0x68, 0x32, 0x69, 0x01, 0x43, 0x19, 0x60, + 0xa3, 0x69, 0x03, 0x20, 0x19, 0x68, 0x19, 0x60, 0x90, 0x21, 0x59, 0x60, + 0x1a, 0x62, 0x72, 0x69, 0x5a, 0x61, 0xb2, 0x69, 0x9a, 0x62, 0x00, 0x9a, + 0xda, 0x60, 0x04, 0x22, 0x99, 0x68, 0x0a, 0x43, 0x9a, 0x60, 0x22, 0x00, + 0x6b, 0x69, 0x14, 0x32, 0x63, 0x61, 0x5a, 0x62, 0xff, 0xf7, 0xee, 0xf9, + 0x2b, 0x68, 0xab, 0x42, 0x05, 0xd0, 0x6a, 0x69, 0x9b, 0x68, 0x92, 0x68, + 0x9a, 0x42, 0x00, 0xd2, 0x7b, 0xe0, 0x62, 0xb6, 0x3a, 0x00, 0x3b, 0x00, + 0x00, 0x20, 0x90, 0x32, 0x19, 0x88, 0x06, 0x33, 0x40, 0x18, 0x9a, 0x42, + 0xfa, 0xd1, 0xfe, 0xf7, 0xf3, 0xfc, 0x42, 0x49, 0xfe, 0xf7, 0xa8, 0xf9, + 0x3a, 0x00, 0x01, 0x90, 0x00, 0x20, 0x40, 0x4b, 0x92, 0x32, 0x19, 0x88, + 0x06, 0x33, 0x40, 0x18, 0x9a, 0x42, 0xfa, 0xd1, 0xfe, 0xf7, 0xe4, 0xfc, + 0x3a, 0x00, 0x00, 0x21, 0x3b, 0x4b, 0x03, 0x90, 0x94, 0x32, 0x00, 0x91, + 0x00, 0x98, 0x19, 0x88, 0x84, 0x46, 0x8c, 0x44, 0x61, 0x46, 0x06, 0x33, + 0x00, 0x91, 0x9a, 0x42, 0xf6, 0xd1, 0x80, 0x23, 0x35, 0x4a, 0x01, 0x98, + 0x51, 0x69, 0x4b, 0x40, 0x53, 0x61, 0x49, 0x46, 0xfd, 0xf7, 0x1e, 0xfe, + 0xfc, 0x21, 0x89, 0x05, 0xfe, 0xf7, 0x80, 0xf9, 0x51, 0x46, 0x81, 0x46, + 0xfd, 0xf7, 0x16, 0xfe, 0xfc, 0x21, 0x89, 0x05, 0xfe, 0xf7, 0x78, 0xf9, + 0x2c, 0x4b, 0x51, 0x46, 0x18, 0x60, 0x48, 0x46, 0xfe, 0xf7, 0x8c, 0xfa, + 0x40, 0x00, 0x2a, 0x49, 0x40, 0x08, 0xfe, 0xf7, 0x6d, 0xf9, 0x5b, 0x46, + 0x81, 0x46, 0x28, 0x49, 0x18, 0x68, 0xfe, 0xf7, 0x67, 0xf9, 0x01, 0x1c, + 0x48, 0x46, 0xfd, 0xf7, 0xfd, 0xfd, 0x5b, 0x46, 0x18, 0x60, 0x43, 0x46, + 0x1b, 0x68, 0x00, 0x98, 0x02, 0x93, 0xfe, 0xf7, 0xa3, 0xfc, 0x01, 0x1c, + 0x03, 0x98, 0xfe, 0xf7, 0x71, 0xfa, 0x1f, 0x49, 0xfe, 0xf7, 0x54, 0xf9, + 0x1e, 0x49, 0x81, 0x46, 0x02, 0x98, 0xfe, 0xf7, 0x4f, 0xf9, 0x01, 0x1c, + 0x48, 0x46, 0xfd, 0xf7, 0xe5, 0xfd, 0x43, 0x46, 0x18, 0x60, 0x72, 0xb6, + 0x63, 0x69, 0xd1, 0x46, 0x00, 0x2b, 0x00, 0xd0, 0x35, 0xe7, 0x01, 0x9b, + 0x9a, 0x46, 0x40, 0xe7, 0x1a, 0x43, 0x24, 0x23, 0x00, 0x92, 0x19, 0x43, + 0x53, 0xe7, 0x72, 0xb6, 0x12, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, 0xc0, 0x46, + 0x28, 0x06, 0x00, 0x20, 0x94, 0x10, 0x00, 0x20, 0xec, 0x56, 0x00, 0x08, + 0x3c, 0x12, 0x00, 0x20, 0x44, 0x12, 0x00, 0x20, 0xe8, 0x0f, 0x00, 0x20, + 0x08, 0x06, 0x00, 0x20, 0xb4, 0x56, 0x00, 0x08, 0xbe, 0xa4, 0x50, 0x37, + 0xea, 0x0f, 0x00, 0x20, 0xec, 0x0f, 0x00, 0x20, 0x00, 0x04, 0x00, 0x48, + 0x40, 0x12, 0x00, 0x20, 0x6f, 0x12, 0x03, 0x3b, 0xee, 0x7c, 0x7f, 0x3f, + 0x9c, 0x44, 0x34, 0x35, 0x48, 0xe1, 0x7a, 0x3f, 0xfc, 0x54, 0x00, 0x08, + 0xf0, 0xb5, 0x57, 0x46, 0x4e, 0x46, 0xde, 0x46, 0x45, 0x46, 0x00, 0x23, + 0xe0, 0xb5, 0x8d, 0xb0, 0x9a, 0x46, 0x99, 0x46, 0x00, 0x93, 0x72, 0xb6, + 0xb9, 0x4c, 0xba, 0x4d, 0x23, 0x78, 0x04, 0x3b, 0x01, 0x2b, 0x00, 0xd9, + 0xb0, 0xe0, 0x01, 0x23, 0x9b, 0x46, 0x27, 0x00, 0x03, 0x26, 0x10, 0x37, + 0x23, 0x78, 0x05, 0x2b, 0x00, 0xd1, 0x87, 0xe0, 0xe3, 0x6b, 0xda, 0x68, + 0x16, 0x42, 0x00, 0xd1, 0x7e, 0xe0, 0x03, 0x22, 0xd9, 0x68, 0x11, 0x42, + 0x00, 0xd1, 0xa1, 0xe0, 0xd8, 0x21, 0xda, 0x20, 0xdc, 0x26, 0x49, 0x00, + 0x40, 0x00, 0x76, 0x00, 0x59, 0x58, 0x18, 0x58, 0x9e, 0x59, 0x0a, 0x96, + 0xde, 0x26, 0x76, 0x00, 0x9e, 0x59, 0x20, 0x26, 0xde, 0x60, 0xde, 0x68, + 0x16, 0x42, 0x03, 0xd1, 0x02, 0x22, 0x5e, 0x69, 0x32, 0x43, 0x5a, 0x61, + 0x5b, 0x46, 0x4a, 0x08, 0x13, 0x40, 0x99, 0x46, 0x5b, 0x46, 0x0f, 0x27, + 0x8e, 0x08, 0x33, 0x40, 0x00, 0x93, 0x02, 0xab, 0x1b, 0x7d, 0x4a, 0x46, + 0xbb, 0x43, 0x57, 0x46, 0x3b, 0x43, 0x10, 0x27, 0x12, 0x01, 0xbb, 0x43, + 0x13, 0x43, 0x5a, 0x46, 0x16, 0x40, 0x20, 0x22, 0xdb, 0xb2, 0x76, 0x01, + 0x93, 0x43, 0x33, 0x43, 0x02, 0xae, 0x33, 0x75, 0x13, 0x42, 0x00, 0xd0, + 0x87, 0xe0, 0x02, 0xab, 0x1b, 0x8b, 0x49, 0x0d, 0xdb, 0x0a, 0xdb, 0x02, + 0x19, 0x43, 0x02, 0xab, 0x19, 0x83, 0x0f, 0x23, 0x03, 0x40, 0x9a, 0x46, + 0x2b, 0x68, 0xab, 0x42, 0x05, 0xd0, 0x6a, 0x69, 0x9b, 0x68, 0x92, 0x68, + 0x9a, 0x42, 0x00, 0xd2, 0x7b, 0xe0, 0x62, 0xb6, 0x4a, 0x46, 0x0f, 0x20, + 0x11, 0x01, 0x52, 0x46, 0x02, 0xab, 0x1b, 0x7d, 0x83, 0x43, 0x13, 0x43, + 0x10, 0x22, 0x93, 0x43, 0x0b, 0x43, 0x20, 0x21, 0x00, 0x9a, 0x8b, 0x43, + 0x52, 0x01, 0x13, 0x43, 0x02, 0xaa, 0x13, 0x75, 0x0b, 0x42, 0x39, 0xd0, + 0x03, 0x40, 0x02, 0x2b, 0x00, 0xd1, 0xd3, 0xe0, 0x00, 0x2b, 0x64, 0xd1, + 0xef, 0x22, 0x08, 0x9b, 0x12, 0x05, 0x01, 0x93, 0xdb, 0x00, 0xdb, 0x08, + 0x93, 0x42, 0x2b, 0xd1, 0xff, 0xf7, 0xac, 0xfc, 0x32, 0x20, 0xff, 0xf7, + 0xc9, 0xfc, 0xbf, 0xf3, 0x4f, 0x8f, 0x75, 0x4b, 0x75, 0x4a, 0xda, 0x60, + 0xbf, 0xf3, 0x4f, 0x8f, 0xc0, 0x46, 0xfd, 0xe7, 0x1a, 0x69, 0x16, 0x42, + 0x00, 0xd0, 0x7c, 0xe7, 0x6b, 0x69, 0x04, 0x20, 0x1f, 0x60, 0x62, 0x69, + 0x5a, 0x60, 0x13, 0x60, 0x63, 0x61, 0x6b, 0x69, 0x98, 0x46, 0xff, 0xf7, + 0x91, 0xf8, 0x43, 0x46, 0x5b, 0x6a, 0x00, 0x2b, 0x00, 0xd1, 0x63, 0xe7, + 0x2b, 0x68, 0xab, 0x42, 0x05, 0xd0, 0x6a, 0x69, 0x9b, 0x68, 0x92, 0x68, + 0x9a, 0x42, 0x00, 0xd2, 0x9a, 0xe0, 0x62, 0xb6, 0x72, 0xb6, 0x23, 0x78, + 0x04, 0x3b, 0x01, 0x2b, 0x00, 0xd8, 0x50, 0xe7, 0x72, 0xb6, 0x61, 0x4b, + 0x6b, 0x66, 0xfe, 0xe7, 0x19, 0x69, 0x11, 0x42, 0x9a, 0xd0, 0xe0, 0x21, + 0xe2, 0x20, 0xe4, 0x26, 0x49, 0x00, 0x40, 0x00, 0x76, 0x00, 0x59, 0x58, + 0x18, 0x58, 0x9e, 0x59, 0x0a, 0x96, 0xe6, 0x26, 0x76, 0x00, 0x9e, 0x59, + 0x20, 0x26, 0x1e, 0x61, 0x1e, 0x69, 0x16, 0x42, 0x00, 0xd0, 0x5d, 0xe7, + 0x10, 0x26, 0x5a, 0x69, 0x32, 0x43, 0x5a, 0x61, 0x58, 0xe7, 0x08, 0x9b, + 0xc9, 0x08, 0x01, 0x93, 0x5b, 0x0f, 0x5b, 0x07, 0x19, 0x43, 0x08, 0x91, + 0x77, 0xe7, 0x72, 0xb6, 0x4e, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, 0x01, 0x2b, + 0xcc, 0xd1, 0x08, 0x9b, 0x4c, 0x4a, 0x01, 0x93, 0xdb, 0x00, 0xdb, 0x08, + 0x93, 0x42, 0xc5, 0xd1, 0x04, 0xa8, 0xff, 0xf7, 0xb5, 0xfd, 0x20, 0x22, + 0x02, 0xab, 0x9b, 0x18, 0x1b, 0x78, 0x02, 0xaa, 0x13, 0x73, 0x46, 0x4b, + 0x1a, 0x69, 0x12, 0x06, 0x03, 0xd5, 0x45, 0x4a, 0x5a, 0x60, 0x45, 0x4a, + 0x5a, 0x60, 0x42, 0x4b, 0x59, 0x46, 0xda, 0x68, 0x0a, 0x42, 0xfb, 0xd1, + 0x02, 0x22, 0x19, 0x69, 0x0a, 0x43, 0x1a, 0x61, 0xf8, 0x22, 0xd2, 0x01, + 0x5a, 0x61, 0x40, 0x22, 0x19, 0x69, 0x0a, 0x43, 0x1a, 0x61, 0xc0, 0x46, + 0x39, 0x4b, 0x59, 0x46, 0xda, 0x68, 0x0a, 0x42, 0xfb, 0xd1, 0x02, 0x21, + 0x1a, 0x69, 0x8a, 0x43, 0x1a, 0x61, 0x1a, 0x69, 0x7e, 0x31, 0x0a, 0x43, + 0x1a, 0x61, 0x1a, 0x69, 0x0a, 0x42, 0x03, 0xd0, 0x32, 0x4a, 0x5a, 0x60, + 0x32, 0x4a, 0x5a, 0x60, 0x2f, 0x4a, 0x59, 0x46, 0x58, 0x46, 0xd3, 0x68, + 0x19, 0x40, 0x03, 0x42, 0xf9, 0xd1, 0x2c, 0x4a, 0x08, 0x20, 0x5e, 0x46, + 0x02, 0xab, 0x1b, 0x18, 0x58, 0x5a, 0x13, 0x69, 0x33, 0x43, 0x13, 0x61, + 0x2a, 0x4b, 0x58, 0x52, 0x58, 0x46, 0xd3, 0x68, 0x18, 0x42, 0xfb, 0xd1, + 0x13, 0x69, 0x02, 0x31, 0x83, 0x43, 0x13, 0x61, 0x08, 0x29, 0xeb, 0xd1, + 0x80, 0x23, 0x11, 0x69, 0x02, 0xa8, 0x0b, 0x43, 0x13, 0x61, 0xff, 0xf7, + 0x5f, 0xfd, 0x22, 0x4b, 0x02, 0xaa, 0x03, 0xca, 0x03, 0xc3, 0xff, 0xf7, + 0xe9, 0xfb, 0x65, 0xe7, 0x72, 0xb6, 0x18, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, + 0x08, 0x9b, 0x1d, 0x4a, 0x01, 0x93, 0xdb, 0x00, 0xdb, 0x08, 0x93, 0x42, + 0x00, 0xd0, 0x59, 0xe7, 0x02, 0xab, 0x5b, 0x18, 0x18, 0x78, 0xfe, 0xf7, + 0xab, 0xfa, 0x18, 0x49, 0x06, 0x1c, 0xfd, 0xf7, 0xff, 0xfb, 0x00, 0x28, + 0x0e, 0xd1, 0x16, 0x49, 0x30, 0x1c, 0xfd, 0xf7, 0x9f, 0xff, 0x21, 0x22, + 0x14, 0x4b, 0x18, 0x60, 0x02, 0xab, 0x9b, 0x18, 0x5a, 0x46, 0x1b, 0x78, + 0x13, 0x40, 0x12, 0x4a, 0x13, 0x70, 0x3f, 0xe7, 0x11, 0x48, 0xf2, 0xe7, + 0x4c, 0x06, 0x00, 0x20, 0x94, 0x10, 0x00, 0x20, 0x00, 0xed, 0x00, 0xe0, + 0x04, 0x00, 0xfa, 0x05, 0xf8, 0x56, 0x00, 0x08, 0x08, 0x55, 0x00, 0x08, + 0x00, 0x00, 0xf4, 0x0e, 0x00, 0x20, 0x02, 0x40, 0x23, 0x01, 0x67, 0x45, + 0xab, 0x89, 0xef, 0xcd, 0x00, 0x7c, 0x00, 0x08, 0xd8, 0x11, 0x00, 0x20, + 0x00, 0x00, 0xf5, 0x0e, 0x00, 0x00, 0x48, 0x42, 0xcd, 0xcc, 0xcc, 0x3d, + 0x04, 0x06, 0x00, 0x20, 0xb0, 0x08, 0x00, 0x20, 0x00, 0x00, 0x60, 0x41, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xb5, 0x4e, 0x46, + 0x45, 0x46, 0x57, 0x46, 0xde, 0x46, 0x5b, 0x4b, 0xe0, 0xb5, 0x98, 0x46, + 0x5a, 0x4b, 0x5b, 0x4f, 0x99, 0x46, 0x5b, 0x4e, 0x5b, 0x4d, 0x87, 0xb0, + 0x43, 0x46, 0x1a, 0x79, 0x03, 0x9b, 0x81, 0x32, 0x01, 0x93, 0x5b, 0x0f, + 0xff, 0x32, 0x5b, 0x07, 0x13, 0x43, 0x3f, 0x22, 0x03, 0x93, 0x02, 0xab, + 0x1b, 0x78, 0x00, 0x21, 0x93, 0x43, 0x28, 0x22, 0x13, 0x43, 0x02, 0xaa, + 0x13, 0x70, 0x04, 0xa8, 0x08, 0x22, 0x00, 0xf0, 0xb3, 0xff, 0x3c, 0x68, + 0xfe, 0xf7, 0x18, 0xfc, 0x4e, 0x49, 0xfd, 0xf7, 0x3f, 0xff, 0xfd, 0xf7, + 0xbf, 0xfb, 0x02, 0x3c, 0x40, 0xba, 0x02, 0xab, 0x18, 0x81, 0x63, 0x42, + 0x63, 0x41, 0x80, 0x22, 0x5b, 0x42, 0x13, 0x40, 0x02, 0xa9, 0x02, 0x33, + 0xca, 0x73, 0x8b, 0x73, 0xf3, 0x89, 0x9b, 0x08, 0x8b, 0x72, 0xfe, 0xf7, + 0x71, 0xfb, 0xfe, 0xf7, 0x0b, 0xfa, 0x80, 0x22, 0xff, 0x23, 0xd2, 0x00, + 0x90, 0x42, 0x08, 0xda, 0x00, 0x23, 0xc2, 0x1c, 0x05, 0xdb, 0xc2, 0x17, + 0x03, 0x33, 0x13, 0x40, 0x18, 0x18, 0x80, 0x10, 0xc3, 0xb2, 0x02, 0xaa, + 0xd3, 0x72, 0x3b, 0x49, 0x28, 0x68, 0xfd, 0xf7, 0x15, 0xff, 0xfe, 0xf7, + 0xf5, 0xf9, 0x02, 0xab, 0x18, 0x73, 0x18, 0x00, 0xff, 0xf7, 0x34, 0xfb, + 0x43, 0x46, 0x1b, 0x79, 0x08, 0x24, 0x1a, 0x00, 0x9b, 0x46, 0x03, 0x9b, + 0x71, 0x32, 0x01, 0x93, 0x5b, 0x0f, 0xff, 0x32, 0x5b, 0x07, 0x13, 0x43, + 0x3f, 0x22, 0x03, 0x93, 0x02, 0xab, 0x1b, 0x78, 0x92, 0x46, 0x93, 0x43, + 0x23, 0x43, 0x02, 0xaa, 0x13, 0x70, 0x00, 0x21, 0x08, 0x22, 0x04, 0xa8, + 0x00, 0xf0, 0x62, 0xff, 0xfe, 0xf7, 0xc8, 0xfb, 0x26, 0x49, 0xfd, 0xf7, + 0xef, 0xfe, 0xfd, 0xf7, 0x6f, 0xfb, 0x02, 0xab, 0x18, 0x81, 0x00, 0x23, + 0x02, 0xaa, 0x53, 0x81, 0x3b, 0x68, 0x02, 0x3b, 0x5a, 0x42, 0x53, 0x41, + 0x02, 0xaa, 0x13, 0x73, 0x10, 0x00, 0xff, 0xf7, 0x05, 0xfb, 0x5a, 0x46, + 0x03, 0x9b, 0x91, 0x32, 0x01, 0x93, 0x5b, 0x0f, 0xff, 0x32, 0x5b, 0x07, + 0x13, 0x43, 0x52, 0x46, 0x03, 0x93, 0x02, 0xab, 0x1b, 0x78, 0x00, 0x21, + 0x93, 0x43, 0x1c, 0x43, 0x02, 0xab, 0x37, 0x3a, 0x1c, 0x70, 0x04, 0xa8, + 0x00, 0xf0, 0x38, 0xff, 0xfe, 0xf7, 0x0e, 0xfb, 0xfd, 0xf7, 0x48, 0xfb, + 0x02, 0xab, 0x12, 0x49, 0x18, 0x81, 0x28, 0x68, 0xfd, 0xf7, 0xc0, 0xfe, + 0xfd, 0xf7, 0x40, 0xfb, 0x02, 0xab, 0x58, 0x81, 0xf3, 0x89, 0x02, 0xaa, + 0x9b, 0x08, 0x13, 0x73, 0x4b, 0x46, 0x1b, 0x78, 0x10, 0x00, 0x53, 0x73, + 0xff, 0xf7, 0xd8, 0xfa, 0x64, 0x20, 0xff, 0xf7, 0xfd, 0xfa, 0x51, 0xe7, + 0xd8, 0x11, 0x00, 0x20, 0xec, 0x06, 0x00, 0x20, 0xb8, 0x0f, 0x00, 0x20, + 0xbc, 0x0f, 0x00, 0x20, 0x40, 0x12, 0x00, 0x20, 0x00, 0x40, 0x1c, 0x46, + 0x00, 0x00, 0x48, 0x43, 0x00, 0x00, 0x7a, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x4b, 0x16, 0x4a, 0x16, 0x49, 0x1a, 0x60, 0x16, 0x4a, 0x17, 0x48, 0x5a, 0x60, 0x17, 0x4a, 0x9a, 0x60, 0x00, 0x22, 0xda, 0x60, 0x16, 0x4a, 0x1a, 0x61, 0x16, 0x4b, 0x16, 0x4a, 0x99, 0x60, @@ -987,7 +1003,7 @@ static const unsigned char build_wideband_image_bin[] = { 0x3b, 0x62, 0x7c, 0x60, 0xbc, 0x60, 0xfc, 0x60, 0x3c, 0x61, 0x7c, 0x61, 0xbd, 0x61, 0xfc, 0x61, 0xfe, 0xf7, 0xa8, 0xfb, 0x80, 0x22, 0xaa, 0x4b, 0x92, 0x00, 0x99, 0x69, 0x0a, 0x43, 0x9a, 0x61, 0x9b, 0x69, 0xb5, 0x4b, - 0x1c, 0x60, 0xfe, 0xf7, 0xb5, 0xf9, 0x80, 0x23, 0xaa, 0x68, 0x1b, 0x06, + 0x1c, 0x60, 0xfe, 0xf7, 0x55, 0xf9, 0x80, 0x23, 0xaa, 0x68, 0x1b, 0x06, 0x13, 0x43, 0xab, 0x60, 0x2b, 0x00, 0x9a, 0x68, 0x00, 0x2a, 0xfc, 0xdb, 0x00, 0x25, 0xa0, 0x4c, 0x9d, 0x60, 0xa3, 0x69, 0xad, 0x4a, 0xae, 0x4e, 0x13, 0x40, 0xa3, 0x61, 0xa3, 0x69, 0x01, 0x23, 0x98, 0x46, 0x33, 0x70, @@ -1031,17 +1047,17 @@ static const unsigned char build_wideband_image_bin[] = { 0xb8, 0x31, 0x99, 0x50, 0x1a, 0x00, 0x18, 0x00, 0xbc, 0x21, 0xbc, 0x32, 0x5a, 0x50, 0x90, 0x30, 0x04, 0x31, 0x5a, 0x50, 0x60, 0x63, 0x20, 0x61, 0xfe, 0xf7, 0x2c, 0xfc, 0x23, 0x68, 0xa3, 0x42, 0x05, 0xd0, 0x62, 0x69, - 0x9b, 0x68, 0x92, 0x68, 0x9a, 0x42, 0x00, 0xd2, 0x57, 0xe1, 0x62, 0xb6, - 0x72, 0xb6, 0x3b, 0x78, 0x5a, 0x1e, 0x01, 0x2a, 0x00, 0xd9, 0x58, 0xe1, - 0x00, 0x21, 0x79, 0x60, 0x01, 0x2b, 0x00, 0xd1, 0x07, 0xe1, 0x02, 0x23, + 0x9b, 0x68, 0x92, 0x68, 0x9a, 0x42, 0x00, 0xd2, 0x55, 0xe1, 0x62, 0xb6, + 0x72, 0xb6, 0x3b, 0x78, 0x5a, 0x1e, 0x01, 0x2a, 0x00, 0xd9, 0x56, 0xe1, + 0x00, 0x21, 0x79, 0x60, 0x01, 0x2b, 0x00, 0xd1, 0x05, 0xe1, 0x02, 0x23, 0x3b, 0x70, 0x23, 0x68, 0xa3, 0x42, 0x05, 0xd0, 0x62, 0x69, 0x9b, 0x68, - 0x92, 0x68, 0x9a, 0x42, 0x00, 0xd2, 0x44, 0xe1, 0x62, 0xb6, 0x3f, 0x4a, + 0x92, 0x68, 0x9a, 0x42, 0x00, 0xd2, 0x42, 0xe1, 0x62, 0xb6, 0x3f, 0x4a, 0x85, 0x21, 0x3f, 0x48, 0xfe, 0xf7, 0xd6, 0xfc, 0x3e, 0x48, 0xfe, 0xf7, - 0x9b, 0xfa, 0x00, 0x20, 0xfe, 0xf7, 0x70, 0xf9, 0x3c, 0x4d, 0x28, 0x00, + 0x9b, 0xfa, 0x00, 0x20, 0xfe, 0xf7, 0x30, 0xf9, 0x3c, 0x4d, 0x28, 0x00, 0xfe, 0xf7, 0x94, 0xfa, 0x28, 0x00, 0x6d, 0x46, 0x00, 0x21, 0xfe, 0xf7, - 0x3f, 0xf9, 0x81, 0x21, 0x38, 0x4a, 0x39, 0x48, 0xfe, 0xf7, 0xc2, 0xfc, + 0xff, 0xf8, 0x81, 0x21, 0x38, 0x4a, 0x39, 0x48, 0xfe, 0xf7, 0xc2, 0xfc, 0x38, 0x4a, 0x84, 0x21, 0x38, 0x48, 0xfe, 0xf7, 0xbd, 0xfc, 0x38, 0x4f, - 0x28, 0x00, 0xff, 0xf7, 0x19, 0xfa, 0x0c, 0xcd, 0x0c, 0xc7, 0x72, 0xb6, + 0x28, 0x00, 0xff, 0xf7, 0x09, 0xfa, 0x0c, 0xcd, 0x0c, 0xc7, 0x72, 0xb6, 0x35, 0x78, 0x01, 0x2d, 0x6c, 0xd0, 0x67, 0xe0, 0x00, 0x10, 0x02, 0x40, 0xff, 0xff, 0xb1, 0xff, 0xff, 0xff, 0xbf, 0xff, 0x00, 0x70, 0x00, 0x40, 0xfc, 0x11, 0x00, 0x20, 0x08, 0x00, 0x02, 0x40, 0x1c, 0x00, 0x02, 0x40, @@ -1054,52 +1070,52 @@ static const unsigned char build_wideband_image_bin[] = { 0xc4, 0x06, 0x00, 0x20, 0x00, 0x6c, 0xdc, 0x02, 0x00, 0x58, 0x01, 0x40, 0xbf, 0x12, 0x00, 0x00, 0xd0, 0x11, 0x00, 0x20, 0x48, 0x12, 0x00, 0x20, 0xff, 0xff, 0x00, 0xff, 0x00, 0x19, 0x00, 0x20, 0x94, 0x10, 0x00, 0x20, - 0xe0, 0x11, 0x00, 0x20, 0x41, 0x30, 0x00, 0x08, 0x00, 0xed, 0x00, 0xe0, - 0xa4, 0x56, 0x00, 0x08, 0x00, 0x04, 0x00, 0x20, 0x00, 0x11, 0x00, 0x20, - 0x61, 0x2a, 0x00, 0x08, 0xc9, 0x19, 0x00, 0x08, 0x34, 0x54, 0x00, 0x08, - 0xa1, 0x3d, 0x00, 0x08, 0xf8, 0x0d, 0x00, 0x20, 0xbc, 0x0f, 0x00, 0x20, - 0x2c, 0x12, 0x00, 0x20, 0xd1, 0x3a, 0x00, 0x08, 0x38, 0x0c, 0x00, 0x20, - 0x81, 0x3a, 0x00, 0x08, 0xf0, 0x06, 0x00, 0x20, 0xd8, 0x11, 0x00, 0x20, - 0x72, 0xb6, 0x5f, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x02, 0x22, 0x80, 0x21, - 0x32, 0x70, 0x5d, 0x4a, 0x89, 0x04, 0x72, 0x60, 0x5c, 0x4a, 0x08, 0x27, + 0xe0, 0x11, 0x00, 0x20, 0x01, 0x31, 0x00, 0x08, 0x00, 0xed, 0x00, 0xe0, + 0x64, 0x57, 0x00, 0x08, 0x00, 0x04, 0x00, 0x20, 0x00, 0x11, 0x00, 0x20, + 0x61, 0x2a, 0x00, 0x08, 0xc9, 0x19, 0x00, 0x08, 0xf4, 0x54, 0x00, 0x08, + 0x41, 0x3e, 0x00, 0x08, 0xf8, 0x0d, 0x00, 0x20, 0xbc, 0x0f, 0x00, 0x20, + 0x2c, 0x12, 0x00, 0x20, 0xa1, 0x3b, 0x00, 0x08, 0x38, 0x0c, 0x00, 0x20, + 0x51, 0x3b, 0x00, 0x08, 0xf0, 0x06, 0x00, 0x20, 0xd8, 0x11, 0x00, 0x20, + 0x72, 0xb6, 0x5e, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x02, 0x22, 0x80, 0x21, + 0x32, 0x70, 0x5c, 0x4a, 0x89, 0x04, 0x72, 0x60, 0x5b, 0x4a, 0x08, 0x27, 0xd0, 0x69, 0x01, 0x43, 0xd1, 0x61, 0xd2, 0x69, 0xf2, 0x6b, 0x15, 0x60, 0x03, 0xe0, 0x29, 0x00, 0x38, 0x00, 0xfe, 0xf7, 0xa3, 0xfe, 0xf3, 0x6b, 0x5a, 0x68, 0x2a, 0x42, 0xf7, 0xd0, 0x72, 0x68, 0x51, 0x68, 0x12, 0x68, - 0xd9, 0x61, 0x1a, 0x60, 0x52, 0x4a, 0x5a, 0x61, 0x04, 0x23, 0x33, 0x70, + 0xd9, 0x61, 0x1a, 0x60, 0x51, 0x4a, 0x5a, 0x61, 0x04, 0x23, 0x33, 0x70, 0x23, 0x68, 0xa3, 0x42, 0x05, 0xd0, 0x62, 0x69, 0x9b, 0x68, 0x92, 0x68, - 0x9a, 0x42, 0x00, 0xd2, 0x8d, 0xe0, 0x62, 0xb6, 0x80, 0x21, 0x4c, 0x4a, - 0x4c, 0x48, 0xfe, 0xf7, 0x17, 0xfc, 0x7c, 0x21, 0x4b, 0x4a, 0x4c, 0x48, - 0xfe, 0xf7, 0x12, 0xfc, 0x40, 0x23, 0x98, 0x46, 0x4a, 0x4f, 0x4b, 0x4e, - 0x4b, 0x4c, 0x3b, 0x68, 0x00, 0x2b, 0x13, 0xd1, 0x42, 0x46, 0x20, 0x33, - 0x63, 0x83, 0x63, 0x69, 0x53, 0x40, 0x63, 0x61, 0x33, 0x68, 0x98, 0x1e, - 0x43, 0x42, 0x58, 0x41, 0x45, 0x4b, 0x40, 0x42, 0x18, 0x40, 0xf5, 0x30, - 0xff, 0x30, 0xfe, 0xf7, 0xf1, 0xff, 0x3b, 0x68, 0x00, 0x2b, 0xeb, 0xd0, - 0x42, 0x46, 0x5b, 0x00, 0x99, 0x46, 0x62, 0x83, 0x00, 0x2b, 0x0c, 0xdd, - 0x20, 0x23, 0x00, 0x25, 0x9a, 0x46, 0x52, 0x46, 0x63, 0x69, 0x3c, 0x48, - 0x53, 0x40, 0x63, 0x61, 0x01, 0x35, 0xfe, 0xf7, 0xdd, 0xff, 0x4d, 0x45, - 0xf5, 0xd1, 0x39, 0x48, 0xfe, 0xf7, 0xd8, 0xff, 0xd1, 0xe7, 0x4a, 0x46, - 0x12, 0x68, 0x1a, 0x42, 0x04, 0xd0, 0xf9, 0x61, 0x72, 0xb6, 0x35, 0x4b, - 0x63, 0x66, 0xfe, 0xe7, 0x48, 0x46, 0x1a, 0x43, 0x02, 0x60, 0x33, 0x49, - 0x25, 0x4a, 0x81, 0x60, 0x51, 0x69, 0xc7, 0x60, 0x19, 0x43, 0x51, 0x61, - 0x52, 0x69, 0x42, 0x68, 0x90, 0x46, 0x1a, 0x42, 0x03, 0xd1, 0x02, 0x21, - 0x09, 0x20, 0xfe, 0xf7, 0x63, 0xf9, 0x01, 0x25, 0x43, 0x46, 0x4a, 0x46, - 0x0f, 0x21, 0x2b, 0x43, 0x53, 0x60, 0x29, 0x4b, 0x1a, 0x68, 0x8a, 0x43, - 0x1a, 0x60, 0x28, 0x4a, 0x01, 0x39, 0x51, 0x60, 0x00, 0x22, 0x1a, 0x60, - 0x90, 0x46, 0x26, 0x4a, 0xfa, 0x61, 0x15, 0x4a, 0x91, 0x69, 0x8c, 0x46, - 0x80, 0x21, 0x60, 0x46, 0x89, 0x00, 0x01, 0x43, 0x91, 0x61, 0x92, 0x69, - 0x21, 0x4a, 0x9a, 0x60, 0x42, 0x46, 0xbb, 0x69, 0x1a, 0x61, 0xfd, 0xf7, - 0x59, 0xff, 0xbb, 0x69, 0x9d, 0x60, 0x1a, 0x68, 0x2a, 0x42, 0xfc, 0xd0, - 0xb3, 0xe6, 0x72, 0xb6, 0x1b, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x72, 0xb6, - 0x1a, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x72, 0xb6, 0x19, 0x4b, 0x63, 0x66, - 0xfe, 0xe7, 0x72, 0xb6, 0x18, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0xc0, 0x46, - 0xc0, 0x55, 0x00, 0x08, 0x9c, 0x56, 0x00, 0x08, 0x00, 0x10, 0x02, 0x40, - 0x5b, 0x87, 0x01, 0x00, 0x01, 0x43, 0x00, 0x08, 0x78, 0x0a, 0x00, 0x20, - 0xb1, 0x3f, 0x00, 0x08, 0xb8, 0x08, 0x00, 0x20, 0xec, 0x06, 0x00, 0x20, - 0xb8, 0x0f, 0x00, 0x20, 0x00, 0x04, 0x00, 0x48, 0x64, 0x19, 0x00, 0x00, - 0xb8, 0x0b, 0x00, 0x00, 0x20, 0x4e, 0x00, 0x00, 0x08, 0x56, 0x00, 0x08, - 0x41, 0x31, 0x00, 0x08, 0x08, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x40, - 0x4c, 0x56, 0x00, 0x08, 0x40, 0x24, 0x01, 0x40, 0x60, 0x54, 0x00, 0x08, - 0x3c, 0x54, 0x00, 0x08, 0xb4, 0x55, 0x00, 0x08, 0x48, 0x54, 0x00, 0x08, + 0x9a, 0x42, 0x00, 0xd2, 0x8b, 0xe0, 0x62, 0xb6, 0x80, 0x21, 0x4b, 0x4a, + 0x4b, 0x48, 0xfe, 0xf7, 0x17, 0xfc, 0x7c, 0x21, 0x4a, 0x4a, 0x4b, 0x48, + 0xfe, 0xf7, 0x12, 0xfc, 0x4a, 0x4b, 0x40, 0x25, 0x98, 0x46, 0x4a, 0x4e, + 0x4a, 0x4c, 0x43, 0x46, 0x1b, 0x78, 0x00, 0x2b, 0x13, 0xd1, 0x20, 0x33, + 0x63, 0x83, 0x63, 0x69, 0x6b, 0x40, 0x63, 0x61, 0x33, 0x68, 0x98, 0x1e, + 0x43, 0x42, 0x58, 0x41, 0x44, 0x4b, 0x40, 0x42, 0x18, 0x40, 0xf5, 0x30, + 0xff, 0x30, 0xfe, 0xf7, 0xf9, 0xff, 0x43, 0x46, 0x1b, 0x78, 0x00, 0x2b, + 0xeb, 0xd0, 0x5b, 0x00, 0x99, 0x46, 0x20, 0x23, 0x00, 0x27, 0x9a, 0x46, + 0x65, 0x83, 0x52, 0x46, 0x63, 0x69, 0x3c, 0x48, 0x53, 0x40, 0x63, 0x61, + 0x01, 0x37, 0xfe, 0xf7, 0xe7, 0xff, 0x4f, 0x45, 0xf5, 0xd1, 0x39, 0x48, + 0xfe, 0xf7, 0xe2, 0xff, 0xd3, 0xe7, 0x4a, 0x46, 0x12, 0x68, 0x1a, 0x42, + 0x04, 0xd0, 0xf9, 0x61, 0x72, 0xb6, 0x35, 0x4b, 0x63, 0x66, 0xfe, 0xe7, + 0x48, 0x46, 0x1a, 0x43, 0x02, 0x60, 0x33, 0x49, 0x25, 0x4a, 0x81, 0x60, + 0x51, 0x69, 0xc7, 0x60, 0x19, 0x43, 0x51, 0x61, 0x52, 0x69, 0x42, 0x68, + 0x90, 0x46, 0x1a, 0x42, 0x03, 0xd1, 0x02, 0x21, 0x09, 0x20, 0xfe, 0xf7, + 0x65, 0xf9, 0x01, 0x25, 0x43, 0x46, 0x4a, 0x46, 0x0f, 0x21, 0x2b, 0x43, + 0x53, 0x60, 0x29, 0x4b, 0x1a, 0x68, 0x8a, 0x43, 0x1a, 0x60, 0x28, 0x4a, + 0x01, 0x39, 0x51, 0x60, 0x00, 0x22, 0x1a, 0x60, 0x90, 0x46, 0x26, 0x4a, + 0xfa, 0x61, 0x15, 0x4a, 0x91, 0x69, 0x8c, 0x46, 0x80, 0x21, 0x60, 0x46, + 0x89, 0x00, 0x01, 0x43, 0x91, 0x61, 0x92, 0x69, 0x21, 0x4a, 0x9a, 0x60, + 0x42, 0x46, 0xbb, 0x69, 0x1a, 0x61, 0xfd, 0xf7, 0xfb, 0xfe, 0xbb, 0x69, + 0x9d, 0x60, 0x1a, 0x68, 0x2a, 0x42, 0xfc, 0xd0, 0xb5, 0xe6, 0x72, 0xb6, + 0x1b, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x72, 0xb6, 0x1a, 0x4b, 0x63, 0x66, + 0xfe, 0xe7, 0x72, 0xb6, 0x19, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x72, 0xb6, + 0x18, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0xc0, 0x46, 0x80, 0x56, 0x00, 0x08, + 0x5c, 0x57, 0x00, 0x08, 0x00, 0x10, 0x02, 0x40, 0x5b, 0x87, 0x01, 0x00, + 0xa1, 0x43, 0x00, 0x08, 0x78, 0x0a, 0x00, 0x20, 0x51, 0x40, 0x00, 0x08, + 0xb8, 0x08, 0x00, 0x20, 0xec, 0x06, 0x00, 0x20, 0xb8, 0x0f, 0x00, 0x20, + 0x00, 0x04, 0x00, 0x48, 0x64, 0x19, 0x00, 0x00, 0xb8, 0x0b, 0x00, 0x00, + 0x20, 0x4e, 0x00, 0x00, 0xc8, 0x56, 0x00, 0x08, 0x01, 0x32, 0x00, 0x08, + 0x08, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x40, 0x0c, 0x57, 0x00, 0x08, + 0x40, 0x24, 0x01, 0x40, 0x20, 0x55, 0x00, 0x08, 0xfc, 0x54, 0x00, 0x08, + 0x74, 0x56, 0x00, 0x08, 0x08, 0x55, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x22, 0x46, 0x4b, 0xd2, 0x03, 0x99, 0x6a, 0x10, 0xb5, 0x11, 0x43, 0x99, 0x62, 0x99, 0x6a, 0x43, 0x48, 0xa8, 0x24, 0x01, 0x40, 0x99, 0x62, 0x99, 0x6a, 0x59, 0x69, 0x41, 0x48, 0x0a, 0x43, @@ -1152,10 +1168,10 @@ static const unsigned char build_wideband_image_bin[] = { 0x28, 0x00, 0xfe, 0xf7, 0x01, 0xfa, 0x80, 0x23, 0xdb, 0x05, 0x62, 0x6a, 0x5b, 0x6a, 0x9b, 0x1a, 0xaa, 0x1a, 0x93, 0x42, 0x03, 0xd8, 0x62, 0xb6, 0xb6, 0xe7, 0x04, 0x22, 0xef, 0xe7, 0x72, 0xb6, 0x02, 0x4b, 0x63, 0x66, - 0xfe, 0xe7, 0xc0, 0x46, 0x94, 0x10, 0x00, 0x20, 0x30, 0x55, 0x00, 0x08, + 0xfe, 0xe7, 0xc0, 0x46, 0x94, 0x10, 0x00, 0x20, 0xf0, 0x55, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xb5, 0x74, 0x46, 0x03, 0x48, 0xfd, 0xf7, 0x73, 0xff, 0x20, 0x00, 0xfd, 0xf7, 0xd8, 0xfe, - 0x10, 0xbd, 0xc0, 0x46, 0x4c, 0x56, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xbd, 0xc0, 0x46, 0x0c, 0x57, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xb5, 0x55, 0x4c, 0x76, 0x46, 0xe2, 0x6b, 0x93, 0x68, 0x93, 0x60, 0x01, 0x22, 0x15, 0x00, 0x1d, 0x40, 0x1a, 0x42, 0x02, 0xd0, 0x0b, 0x32, 0x1a, 0x42, 0x3c, 0xd1, 0xda, 0x05, 0x06, 0xd5, @@ -1203,11 +1219,11 @@ static const unsigned char build_wideband_image_bin[] = { 0x00, 0x00, 0x00, 0x00, 0x70, 0xb5, 0x07, 0x4c, 0x75, 0x46, 0x20, 0x00, 0x30, 0x30, 0xfd, 0xf7, 0x59, 0xfe, 0x20, 0x00, 0x40, 0x30, 0xfd, 0xf7, 0x55, 0xfe, 0x28, 0x00, 0xfd, 0xf7, 0xba, 0xfd, 0x70, 0xbd, 0xc0, 0x46, - 0x4c, 0x56, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x57, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xb5, 0x07, 0x4c, 0x75, 0x46, 0x20, 0x00, 0x10, 0x30, 0xfd, 0xf7, 0x41, 0xfe, 0x20, 0x00, 0x20, 0x30, 0xfd, 0xf7, 0x3d, 0xfe, 0x28, 0x00, 0xfd, 0xf7, 0xa2, 0xfd, 0x70, 0xbd, 0xc0, 0x46, - 0x4c, 0x56, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x57, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xb5, 0x70, 0x46, 0xfd, 0xf7, 0x94, 0xfd, 0x10, 0xbd, 0xc0, 0x46, 0x00, 0x00, 0x00, 0x00, 0x10, 0xb5, 0xff, 0xf7, 0xf5, 0xff, 0x10, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -1230,9 +1246,9 @@ static const unsigned char build_wideband_image_bin[] = { 0xfb, 0xd8, 0x01, 0x39, 0xc9, 0x1a, 0x89, 0x08, 0x01, 0x31, 0x89, 0x00, 0x5b, 0x18, 0x9c, 0x42, 0x02, 0xd9, 0x20, 0xc3, 0x9c, 0x42, 0xfc, 0xd8, 0x10, 0x36, 0x66, 0x45, 0x04, 0xd0, 0x30, 0x68, 0x73, 0x68, 0xb1, 0x68, - 0xf4, 0x68, 0xe5, 0xe7, 0xf0, 0xbd, 0xc0, 0x46, 0xbc, 0x56, 0x00, 0x08, + 0xf4, 0x68, 0xe5, 0xe7, 0xf0, 0xbd, 0xc0, 0x46, 0x7c, 0x57, 0x00, 0x08, 0x48, 0x12, 0x00, 0x20, 0x48, 0x12, 0x00, 0x20, 0x48, 0x12, 0x00, 0x20, - 0x60, 0x57, 0x00, 0x08, 0xfe, 0xe7, 0xc0, 0x46, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x58, 0x00, 0x08, 0xfe, 0xe7, 0xc0, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x47, 0xc0, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x47, 0xc0, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -1242,13 +1258,13 @@ static const unsigned char build_wideband_image_bin[] = { 0xf8, 0xd1, 0x22, 0x23, 0xe3, 0x5c, 0x00, 0x2b, 0x07, 0xd1, 0x21, 0x33, 0xe3, 0x5c, 0x9b, 0x07, 0x03, 0xd1, 0x22, 0x69, 0xe3, 0x68, 0xd3, 0x60, 0x1a, 0x61, 0x0f, 0x20, 0xfd, 0xf7, 0xe8, 0xff, 0x72, 0xb6, 0x02, 0x4b, - 0x6b, 0x66, 0xfe, 0xe7, 0x94, 0x10, 0x00, 0x20, 0x58, 0x55, 0x00, 0x08, + 0x6b, 0x66, 0xfe, 0xe7, 0x94, 0x10, 0x00, 0x20, 0x18, 0x56, 0x00, 0x08, 0x70, 0xb5, 0x0d, 0x4c, 0x01, 0x22, 0x25, 0x68, 0x60, 0x69, 0x2b, 0x68, 0x5c, 0x60, 0x23, 0x60, 0x20, 0x23, 0xea, 0x54, 0x65, 0x61, 0xfd, 0xf7, - 0xdb, 0xfb, 0x01, 0x00, 0xef, 0xf3, 0x09, 0x83, 0xc2, 0x69, 0x24, 0x3b, - 0x9a, 0x42, 0x03, 0xd8, 0x28, 0x00, 0xfc, 0xf7, 0x95, 0xfb, 0x70, 0xbd, + 0x7b, 0xfb, 0x01, 0x00, 0xef, 0xf3, 0x09, 0x83, 0xc2, 0x69, 0x24, 0x3b, + 0x9a, 0x42, 0x03, 0xd8, 0x28, 0x00, 0xfc, 0xf7, 0x35, 0xfb, 0x70, 0xbd, 0x72, 0xb6, 0x02, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x94, 0x10, 0x00, 0x20, - 0xf8, 0x53, 0x00, 0x08, 0xf0, 0xb5, 0x05, 0x00, 0x83, 0x07, 0x4a, 0xd0, + 0xb8, 0x54, 0x00, 0x08, 0xf0, 0xb5, 0x05, 0x00, 0x83, 0x07, 0x4a, 0xd0, 0x54, 0x1e, 0x00, 0x2a, 0x44, 0xd0, 0x03, 0x00, 0x03, 0x22, 0xce, 0xb2, 0x02, 0xe0, 0x01, 0x35, 0x01, 0x3c, 0x3d, 0xd3, 0x01, 0x33, 0x2e, 0x70, 0x13, 0x42, 0xf8, 0xd1, 0x03, 0x2c, 0x2f, 0xd9, 0xff, 0x22, 0x0a, 0x40, @@ -1280,10 +1296,10 @@ static const unsigned char build_wideband_image_bin[] = { 0xd6, 0x23, 0x00, 0x08, 0xd6, 0x23, 0x00, 0x08, 0xd6, 0x23, 0x00, 0x08, 0x5a, 0x24, 0x00, 0x08, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x00, 0x00, 0x6e, 0x6f, 0x6e, 0x61, - 0x6d, 0x65, 0x00, 0x00, 0x58, 0x3d, 0x00, 0x08, 0x5e, 0x3d, 0x00, 0x08, - 0x64, 0x3d, 0x00, 0x08, 0x6a, 0x3d, 0x00, 0x08, 0x54, 0x3d, 0x00, 0x08, - 0x70, 0x3d, 0x00, 0x08, 0x76, 0x3d, 0x00, 0x08, 0x7c, 0x3d, 0x00, 0x08, - 0x50, 0x3d, 0x00, 0x08, 0x69, 0x64, 0x6c, 0x65, 0x00, 0x00, 0x00, 0x00, + 0x6d, 0x65, 0x00, 0x00, 0xf8, 0x3d, 0x00, 0x08, 0xfe, 0x3d, 0x00, 0x08, + 0x04, 0x3e, 0x00, 0x08, 0x0a, 0x3e, 0x00, 0x08, 0xf4, 0x3d, 0x00, 0x08, + 0x10, 0x3e, 0x00, 0x08, 0x16, 0x3e, 0x00, 0x08, 0x1c, 0x3e, 0x00, 0x08, + 0xf0, 0x3d, 0x00, 0x08, 0x69, 0x64, 0x6c, 0x65, 0x00, 0x00, 0x00, 0x00, 0x63, 0x68, 0x53, 0x79, 0x73, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x00, 0x63, 0x68, 0x53, 0x79, 0x73, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x00, 0x63, 0x68, 0x53, 0x79, 0x73, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x00, @@ -1337,16 +1353,16 @@ static const unsigned char build_wideband_image_bin[] = { 0x78, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x0b, 0x64, 0x00, 0x00, 0x00, 0x05, 0x00, 0x1c, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x16, 0x80, 0x30, 0x04, 0x04, 0x3c, 0x08, 0x14, 0x0c, 0x10, 0x18, 0x1c, 0x20, 0x21, 0x22, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x57, 0x00, 0x08, 0x48, 0x12, 0x00, 0x20, - 0x48, 0x12, 0x00, 0x20, 0x48, 0x12, 0x00, 0x20, 0x60, 0x57, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x58, 0x00, 0x08, 0x48, 0x12, 0x00, 0x20, + 0x48, 0x12, 0x00, 0x20, 0x48, 0x12, 0x00, 0x20, 0x20, 0x58, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x57, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x57, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x57, 0x00, 0x08, + 0x20, 0x58, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x58, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x58, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x57, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x57, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x57, 0x00, 0x08, + 0x20, 0x58, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x58, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x58, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x41, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, @@ -2116,22 +2132,6 @@ static const unsigned char build_wideband_image_bin[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xb4, 0x6c, 0x14, 0x87 + 0xb8, 0x09, 0xba, 0x0b }; unsigned int build_wideband_image_bin_len = 25600; diff --git a/for_rusefi/wideband_image_with_bl.bin b/for_rusefi/wideband_image_with_bl.bin index 5d5591b26d35f6781ba27df5c43f5154a3964b66..635917cb322262a0854a7b4174c18b8b7783216b 100644 GIT binary patch delta 2706 zcmb_deNYt174IH)apZ(sS;PfLoMBg7SW96S6ot@5`#Z+@^PDRGmLe;Ts+N;_Bxw3g&`}gw z1g?~$@)r}Te2eV0nT_@8T$sa?V7<^oS&&`iLt9yYF06_R<$ATTufW(P(VUcg5airw zHpo<7m_ULK>@PrHb~MW)KwoAe6C$0Ym{a)y$i*2qTu?wt#0L1w`l(pD=YFgXvJvjB zy!7x?hDb-RUHbZ-dl!|P`)cOjJ#_I&Vv$?6E(Y(8cvt)p7o2QI?Aw6T>4*=7z{9|Z z==r}eRHihijZ~Lzv!822Y#m_Mz97RevNB^-cEASqj4*!2*YPDac3FDIfcSasbmiPJAh|j*7!Hpzbz7%gIr^=UL1Nl|?-jbc# zys$I{+SdTf0lxrT1wM_oB6b{P3)msTv#XxRxpi@j9zL48|4Ns|dCX-P7bR6zr^tiV z%d<4syMPJ+xEHPY5zaUSa;*)qJKG~SE3&X<973_s_xUt+2nkevj`GNG;j(n3vII91 zTjdh`Eb&(^b!$tS?cY6|xiPaLt3GSO9?JAukt)AI=fRo14xHGfQhDW64o~IZP;-c} zeL99fE+Uc2W&Huq#4wdVq#gc_hNDu4KhStg3iyWrgOV_z%Ezc9q~ow{+Zbc38AG-e zW60u`7Kd8BRxT-@0FLlu#hk{cm*T(@)_EO}ydsCR0RoMk$c~N~{9( zT`)q5t^u+puMwIQ5h?{6Uwi1vOH~iRmt3wg<=v+laFU}c zUsx;gXjzvk-%0gcBLAv7fyc<Ug4fZq7T|6bA!{yig|T~P@U zZ_P6Nfb6a@GCyf2Z`2fFCGx|XVm#*q#SUp+B{#&C_;4h%wh`mMlP|c;3(iiPyy-v# znn2d9Xs)+Z<0Sc}%a%Tsx>Mwrt~z7DKQTO*qV`cK&=9D9^PHR9a_9MxK-|_sqnkNn z?AD!T3(;hRRzWT%r2!7Oh9>1p38qT?h&gKtce*-j2MPl&qsaV#aeUHyu=mk{A@*Po zWCj=PDRROs^gF%QP*Pq%Rrzro#`Kzi{^beSi@mHR9}P)qL%Z#m1fHh$z#OByrZ9~# zXBYJyk%-%zS_2Z;LfvUJxdS4MCNvU0RFm?H32lC4X3n&Pogv2A;cBUc755q-x<1hX zQ4h~V?N5bmmS)0g$#HJx?3zjrl0%af5Hu?RR{+9gdre_&sh1(V2>O=rqXW#DA=cQd z-Bkl>>80}c^iJ6Fp344RshN5~B_AJ=o0&9)$b)g3C>K~M9_zz7ZUX@GZRrT7_ z_0F^vy&xe$mFZMisPL@?k1I-r?=_(Uqzg(#qZP8BOKy0Ep221C5Ppg#c5a4N2TOzH zZZDa6t3QLcy0#jzQ<*bM*Y4W8PI!#xA-)OPNk~geuV-YNzZ0qmQ#c^lySMrd=z4+y z67||}6G?g(_8*+sF)|?deSVmIq4KieOG(*^&o3?=lza`ojd05F$Qh%&qjP^}*K=a$ zc1LKi!0p;nTjv*DCh>78Emh?>o$3L-`E6iP5`m z#P(%Cej;i27c3tIGqyv0L5zq1^T1WKV3CLVp}_WhWmfHp9QXGzc#EVC z8VyD88_lm`VQL*>Re%o8Cj;;q$OdS00UTg5Qr3Eq>F2ln?}VSPdzu~1`u@*)#JL$; Lbm!-O^wfUcurS9 z?9_SevHdy^)miJx)~&XyHkG+fTjgx$bk4fGozubM+CDytn((u5q_z3+SP_xruy@8{k-I86qp$!V>gx#y?Z`i+#;YnGUrKs)ppXj>2`n?Y-81g#U% zf*^EAZ_g8P<_zKz!imHfn=^fxAApX#ve`LeGQt` z@fb7pNs87I8>ykY3}!}bp)VO$&(2HAv5cwe$VUd}wg!xj^Ix zma0tVa2vg~qKY})O7m^C%#BvM#r7l0*)8M=`W5@KRYzpmG|RX@lQqiHKNPSMQMQa` zf=Sh7)IkJ`$yj1kq=AGiDfH)dvu?XQ$E!%;gw~5+6fMeKbkbfLdAT^u5HT`m)gQ>x zJ8hu7g81<)V8dYm$YD6xc7svSqqUXFC7oqct)Sh5z{xLuIcLGjL=}l9b1w9aF#_Y; zvQ>^<u;mal~yr_TIuD|GUgj?R4%>BTx+9O%dENQ5^4K~tfvE!EJp=H-lWd* zW#l~lYIy7$FQm$}t5JZ#W=cAkG;Q+8waL|J&A*9x-qcV#YK_g#F14`fC9)^skb zNLLhdn6clD0?JR(;p(D+kZ0noBE6|}30+Mu@?Aox`6wR}jv+?);)xEv%VP-3(qvpV z?a!2@-zJH%(<4iplWJWM?DaP}Z%Vq17ImV6+#8RrLwy`|pIGf>@c>bj1#vCPva~Z<>1B+Sc<45T z7}wyqJ*hEPr0w2P2Eh7?=Q=J=(b!8;6`9~L^ts2c8>~HuQ9AH`U1}WDasmc zXn92`5;R7A@OtdFc>{k8hAg@uG2h8_1X*Jt&YxEb((}KGF=j{botVbF#0RQPwIlfT zSf)8YtufV(o?v%ukuSrcPC9~}NZgzvfYVxF&piSxU@jCd0Ja99LD}I5a4>O-2RP>h z_`nUox?xaXk0a_w-2F&;fGG~3#Q7JrKQ#W$n!n+w5`_lW=?&MFEPVOXGF#~6St#nk z_eprT0lJ=5_jAcuhEgcr&T`(`;f{ZZG9C`+qTw5D$5 zz*BNEO^ax}g&*Qm($>%Q_v6Jv3$G7)koY%dIIwv+tt?%Lcc7Kks}IZ4&yW@#^k|ej z(9W%1`3OU0={^!HV?>rN%@pAFqw%HQA)Z0~#OL6|B2rA}b2{dq zZFD)eoYX`bxfNvg;ba+xd4_)5xrz)$-f%V(BGQ!0yf87N_s+t%Y)*nTTg>y8pgc*- z-S%0P>7=7u-Sqe349wflp zD{`LAC?8Sk@cAFbC~7?^=~tXYeiN6jP%g3b{hg!NLxgj$?kpI1cQn5H9by zzQ4kAOnacOG@O#&NMV}gVV)hFCdN`+;D@PFyoT>g%aWg(>P-bjUMreyRAi}QhB>9* z0VX|W)1H}b47W59pcmYRfqXA@TMKn=<~3a}m;*Zm-WYcC1!490`|+r|qdL!tn9g$? zaS#c2ZT@FuQ%P2j;1H9qW^u~4EI3s@^3Hcuas)X~nO&_m%uLu(TpHnOlm#~3!jl-S^-_S<0E6~tmE&ZbW9!iIXB zt@Ax=s>8JWeX2do;0np9#HXe;LeJA~sD zCW(3vePdr1LfAi;!a-A6?-RcLn!e!U^m(71Y@io>iv|u(bd3#~{60VKz9{*$Nk~fz zlAL*j_caSmg1;JThfZ|ytRplW>Irb6CmrFDrEXWdbG^X1^xUTn+2&kF8&o0VVm91rG) zZLVZALO&GD!Hd{dzOTlPjk9Af0pi9slLhRVI?$fOf}$3JbWzcOr`v!fQbIp$Dq#E@BM+LY7#wL?%Su)4YRM-H z&ZDabulC;vZlcd^c!p_jquGJ{<<}Drx5bQWR!B Date: Thu, 4 Nov 2021 15:07:47 -0700 Subject: [PATCH 06/59] comment --- firmware/heater_control.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/firmware/heater_control.cpp b/firmware/heater_control.cpp index c270ae1..5498a99 100644 --- a/firmware/heater_control.cpp +++ b/firmware/heater_control.cpp @@ -69,6 +69,7 @@ static HeaterState GetNextState(HeaterState state, float sensorEsr) break; case HeaterState::ClosedLoop: + // Check that the sensor's ESR is acceptable for normal operation if (sensorEsr < HEATER_OVERHEAT_ESR) { SetFault(Fault::SensorOverheat); From f484c1ff417a3bdb01109aa2321af6a8b008fd14 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sat, 6 Nov 2021 02:12:29 -0700 Subject: [PATCH 07/59] extract definitions --- firmware/can.cpp | 30 ++++++++---------------------- for_rusefi/wideband_can.h | 27 +++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 22 deletions(-) create mode 100644 for_rusefi/wideband_can.h diff --git a/firmware/can.cpp b/firmware/can.cpp index 3595304..d2406cd 100644 --- a/firmware/can.cpp +++ b/firmware/can.cpp @@ -9,6 +9,9 @@ #include "pump_dac.h" #include "port.h" +// this same header is imported by rusEFI to get struct layouts and firmware version +#include "../for_rusefi/wideband_can.h" + Configuration configuration; static THD_WORKING_AREA(waCanTxThread, 256); @@ -141,30 +144,13 @@ void SendEmulatedAemXseries(uint8_t idx) { frame[4] = (int)(GetNernstDc() * 200); } -struct StandardData -{ - uint16_t Lambda; - uint16_t TemperatureC; - uint8_t Valid; - - uint8_t pad1; - uint16_t pad2; -}; - -struct DiagData -{ - uint16_t Esr; - uint16_t NernstDc; - uint8_t PumpDuty; - Fault Status; - - uint16_t pad; -}; - void SendRusefiFormat(uint8_t idx) { { - CanTxTyped frame(0x170 + idx); + CanTxTyped frame(0x170 + idx); + + // The same header is imported by the ECU and checked against this data in the frame + frame.get().Version = RUSEFI_WIDEBAND_VERSION; uint16_t lambda = GetLambda() * 10000; frame.get().Lambda = lambda; @@ -176,7 +162,7 @@ void SendRusefiFormat(uint8_t idx) } { - CanTxTyped frame(0x190 + idx); + CanTxTyped frame(0x190 + idx); frame.get().Esr = GetSensorInternalResistance(); frame.get().NernstDc = GetNernstDc() * 1000; diff --git a/for_rusefi/wideband_can.h b/for_rusefi/wideband_can.h new file mode 100644 index 0000000..40ef9de --- /dev/null +++ b/for_rusefi/wideband_can.h @@ -0,0 +1,27 @@ +#pragma once + +#define RUSEFI_WIDEBAND_VERSION 01 + +namespace wbo +{ +struct StandardData +{ + uint8_t Version; + uint8_t Valid; + + uint16_t Lambda; + uint16_t TemperatureC; + + uint16_t pad; +}; + +struct DiagData +{ + uint16_t Esr; + uint16_t NernstDc; + uint8_t PumpDuty; + Fault Status; + + uint16_t pad; +}; +} // namespace wbo From 4714f5cfef44579f886a4ca7ba048370386055da Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sat, 6 Nov 2021 02:17:07 -0700 Subject: [PATCH 08/59] remove aem format --- firmware/can.cpp | 48 ++++-------------------------------------------- 1 file changed, 4 insertions(+), 44 deletions(-) diff --git a/firmware/can.cpp b/firmware/can.cpp index d2406cd..539ca03 100644 --- a/firmware/can.cpp +++ b/firmware/can.cpp @@ -102,52 +102,12 @@ void InitCan() #define SWAP_UINT16(x) (((x) << 8) | ((x) >> 8)) -void SendEmulatedAemXseries(uint8_t idx) { - CanTxMessage frame(0x180 + idx, 8, true); - - bool isValid = IsRunningClosedLoop(); - - float lambda = GetLambda(); - uint16_t intLambda = lambda * 10000; - - // swap endian - intLambda = SWAP_UINT16(intLambda); - *reinterpret_cast(&frame[0]) = intLambda; - - // bit 1 = LSU 4.9 detected - // bit 7 = reading valid - frame[6] = 0x02 | (isValid ? 0x80 : 0x00); - - // Hijack a reserved bit to indicate that we're NOT an AEM controller - frame[7] = 0x80; - - // Now we embed some extra data for debug - // bytes 2-3 are officially oxygen percent - // byte 4 is officially supply voltage - - // Report pump output PWM in byte 2, 0-255 for min to max target (128 = 0 current) - frame[2] = GetPumpOutputDuty() / 4; - - // Report sensor ESR in byte 3, 4 ohm steps - int esrVal = (int)GetSensorInternalResistance() / 4; - - // Clamp to uint8_t limits - if (esrVal > 255) { - esrVal = 255; - } else if (esrVal < 0) { - esrVal = 0; - } - - frame[3] = esrVal; - - // Report current nernst voltage in byte 4, 5mv steps - frame[4] = (int)(GetNernstDc() * 200); -} - void SendRusefiFormat(uint8_t idx) { + auto baseAddress = 0x180 + 2 * idx; + { - CanTxTyped frame(0x170 + idx); + CanTxTyped frame(baseAddress + 0); // The same header is imported by the ECU and checked against this data in the frame frame.get().Version = RUSEFI_WIDEBAND_VERSION; @@ -162,7 +122,7 @@ void SendRusefiFormat(uint8_t idx) } { - CanTxTyped frame(0x190 + idx); + CanTxTyped frame(baseAddress + 1); frame.get().Esr = GetSensorInternalResistance(); frame.get().NernstDc = GetNernstDc() * 1000; From 4d1d0f4534f949d075fc9700ac2cef6130b61cdb Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sat, 6 Nov 2021 02:17:50 -0700 Subject: [PATCH 09/59] unlikely value as version --- for_rusefi/wideband_can.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/for_rusefi/wideband_can.h b/for_rusefi/wideband_can.h index 40ef9de..6418703 100644 --- a/for_rusefi/wideband_can.h +++ b/for_rusefi/wideband_can.h @@ -1,6 +1,6 @@ #pragma once -#define RUSEFI_WIDEBAND_VERSION 01 +#define RUSEFI_WIDEBAND_VERSION (0xA0) namespace wbo { From fb7d67ac7e84ec40d0896fa71f369691bcf3c418 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sat, 6 Nov 2021 02:20:47 -0700 Subject: [PATCH 10/59] put esr in temp field fo rnow --- firmware/can.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/firmware/can.cpp b/firmware/can.cpp index 539ca03..7b60496 100644 --- a/firmware/can.cpp +++ b/firmware/can.cpp @@ -105,6 +105,7 @@ void InitCan() void SendRusefiFormat(uint8_t idx) { auto baseAddress = 0x180 + 2 * idx; + auto esr = GetSensorInternalResistance(); { CanTxTyped frame(baseAddress + 0); @@ -115,8 +116,8 @@ void SendRusefiFormat(uint8_t idx) uint16_t lambda = GetLambda() * 10000; frame.get().Lambda = lambda; - // TODO: decode temperatature - frame.get().TemperatureC = 0; + // TODO: decode temperatature instead of putting ESR here + frame.get().TemperatureC = esr; frame.get().Valid = IsRunningClosedLoop() ? 0x01 : 0x00; } @@ -124,7 +125,7 @@ void SendRusefiFormat(uint8_t idx) { CanTxTyped frame(baseAddress + 1); - frame.get().Esr = GetSensorInternalResistance(); + frame.get().Esr = esr; frame.get().NernstDc = GetNernstDc() * 1000; frame.get().PumpDuty = GetPumpOutputDuty() / 4; frame.get().Status = GetCurrentFault(); From 04943f25ebe69e15ccba0adee989ec6db00eb536 Mon Sep 17 00:00:00 2001 From: rusefillc <48498823+rusefillc@users.noreply.github.com> Date: Sat, 6 Nov 2021 15:05:21 -0400 Subject: [PATCH 11/59] Create README.md (#20) --- README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..4acbcb4 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# wideband + +[User Documentation](https://rusefi.com/s/wb) From 89b272e3b1e4d97163c369db685fb6f28e8e43cc Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sat, 6 Nov 2021 12:11:09 -0700 Subject: [PATCH 12/59] read me --- README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4acbcb4..f3cec29 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,11 @@ -# wideband +# rusEFI Wideband Controller [User Documentation](https://rusefi.com/s/wb) + +[Forum Thread](https://rusefi.com/forum/viewtopic.php?f=4&t=1856) + +## Building Firmware + +The `firmware/boards` directory contains configuration for each board this firmware supports. + +For the standalone board and the module built in to rusEFI Hellen boards, `f0_module` is the correct target. Use the `build_wideband.sh` script to build and package the wideband firmware: both a bin including the bootloader, and a header file consumed by rusEFI that contains no bootloader, to be uploaded over CAN (via the aforementioned bootloader). From b1372e47f66b0a3476cfddde7379a61e1b82bb36 Mon Sep 17 00:00:00 2001 From: rusefillc <48498823+rusefillc@users.noreply.github.com> Date: Mon, 8 Nov 2021 01:52:13 -0500 Subject: [PATCH 13/59] Extract io (#25) * LEDs for BL * more reuse * Windows exists * extract NERNST pin * Matt is asking to move Co-authored-by: rusefillc --- .gitattributes | 2 ++ .../boards/f0_module/bootloader/bootloader.cpp | 18 +++++++++--------- firmware/boards/f0_module/io_pins.h | 8 ++++++++ firmware/main.cpp | 7 ++++--- firmware/sampling.cpp | 9 +++++---- 5 files changed, 28 insertions(+), 16 deletions(-) create mode 100644 .gitattributes create mode 100644 firmware/boards/f0_module/io_pins.h diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..6007d2e --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ + +*.sh text eol=lf diff --git a/firmware/boards/f0_module/bootloader/bootloader.cpp b/firmware/boards/f0_module/bootloader/bootloader.cpp index 53ef9cd..08e12dd 100644 --- a/firmware/boards/f0_module/bootloader/bootloader.cpp +++ b/firmware/boards/f0_module/bootloader/bootloader.cpp @@ -2,6 +2,7 @@ #include "hal.h" #include "flash.h" +#include "../io_pins.h" #include @@ -244,24 +245,23 @@ int main(void) { chThdCreateStatic(waBootloaderThread, sizeof(waBootloaderThread), NORMALPRIO + 1, BootloaderThread, nullptr); - // PB5 is blue LED - palSetPadMode(GPIOB, 5, PAL_MODE_OUTPUT_PUSHPULL); - // PB6 is green LED - palSetPadMode(GPIOB, 6, PAL_MODE_OUTPUT_PUSHPULL); - palTogglePad(GPIOB, 6); + palSetPadMode(BLUE_LED_PORT, BLUE_LED_PIN, PAL_MODE_OUTPUT_PUSHPULL); + + palSetPadMode(GREEN_LED_PORT, GREEN_LED_PIN, PAL_MODE_OUTPUT_PUSHPULL); + palTogglePad(GREEN_LED_PORT, GREEN_LED_PIN); for (size_t i = 0; i < 20; i++) { - palTogglePad(GPIOB, 5); - palTogglePad(GPIOB, 6); + palTogglePad(BLUE_LED_PORT, BLUE_LED_PIN); + palTogglePad(GREEN_LED_PORT, GREEN_LED_PIN); chThdSleepMilliseconds(40); } // Block until booting the app is allowed and CRC matches while (bootloaderBusy || !isAppValid()) { - palTogglePad(GPIOB, 5); - palTogglePad(GPIOB, 6); + palTogglePad(BLUE_LED_PORT, BLUE_LED_PIN); + palTogglePad(GREEN_LED_PORT, GREEN_LED_PIN); chThdSleepMilliseconds(200); } diff --git a/firmware/boards/f0_module/io_pins.h b/firmware/boards/f0_module/io_pins.h new file mode 100644 index 0000000..79293e1 --- /dev/null +++ b/firmware/boards/f0_module/io_pins.h @@ -0,0 +1,8 @@ +#define BLUE_LED_PORT GPIOB +#define BLUE_LED_PIN 5 + +#define GREEN_LED_PORT GPIOB +#define GREEN_LED_PIN 6 + +#define NERNST_ESR_DRIVER_PORT GPIOB +#define NERNST_ESR_DRIVER_PIN 7 diff --git a/firmware/main.cpp b/firmware/main.cpp index 5e69b87..7fca755 100644 --- a/firmware/main.cpp +++ b/firmware/main.cpp @@ -8,6 +8,7 @@ #include "pump_dac.h" #include "sampling.h" #include "uart.h" +#include "io_pins.h" /* @@ -33,10 +34,10 @@ int main() { if (fault == Fault::None) { // blue is off - palClearPad(GPIOB, 5); + palClearPad(BLUE_LED_PORT, BLUE_LED_PIN); // Green is blinking - palTogglePad(GPIOB, 6); + palTogglePad(GREEN_LED_PORT, GREEN_LED_PIN); // Slow blink if closed loop, fast if not chThdSleepMilliseconds(IsRunningClosedLoop() ? 700 : 50); @@ -50,7 +51,7 @@ int main() { for (int i = 0; i < 2 * static_cast(fault); i++) { // Blue is blinking - palTogglePad(GPIOB, 5); + palTogglePad(BLUE_LED_PORT, BLUE_LED_PIN); // fast blink chThdSleepMilliseconds(300); diff --git a/firmware/sampling.cpp b/firmware/sampling.cpp index 577a859..b861d89 100644 --- a/firmware/sampling.cpp +++ b/firmware/sampling.cpp @@ -6,11 +6,12 @@ #include "wideband_config.h" #include "port.h" +#include "io_pins.h" // Stored results -float nernstAc = 0; -float nernstDc = 0; -volatile float pumpCurrentSenseVoltage = 0; +static float nernstAc = 0; +static float nernstDc = 0; +static volatile float pumpCurrentSenseVoltage = 0; constexpr float f_abs(float x) { @@ -29,7 +30,7 @@ static void SamplingThread(void*) auto result = AnalogSample(); // Toggle the pin after sampling so that any switching noise occurs while we're doing our math instead of when sampling - palTogglePad(GPIOB, 7); + palTogglePad(NERNST_ESR_DRIVER_PORT, NERNST_ESR_DRIVER_PIN); float r_1 = result.NernstVoltage; From 66f4921310b544d00648895eb663ddb262cd3924 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sun, 7 Nov 2021 22:53:20 -0800 Subject: [PATCH 14/59] now it links --- firmware/can.cpp | 1 - firmware/can.h | 1 - 2 files changed, 2 deletions(-) diff --git a/firmware/can.cpp b/firmware/can.cpp index 7b60496..caba597 100644 --- a/firmware/can.cpp +++ b/firmware/can.cpp @@ -19,7 +19,6 @@ void CanTxThread(void*) { while(1) { - SendEmulatedAemXseries(configuration.CanIndexOffset); SendRusefiFormat(configuration.CanIndexOffset); chThdSleepMilliseconds(10); diff --git a/firmware/can.h b/firmware/can.h index 553e65e..25bd081 100644 --- a/firmware/can.h +++ b/firmware/can.h @@ -4,5 +4,4 @@ void InitCan(); void SendCanData(float lambda, uint16_t measuredResistance); -void SendEmulatedAemXseries(uint8_t idx); void SendRusefiFormat(uint8_t idx); From 455e5381b62daa7f9353f88dbbc1670e35b12595 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sun, 7 Nov 2021 22:55:07 -0800 Subject: [PATCH 15/59] pragma once --- firmware/boards/f0_module/io_pins.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/firmware/boards/f0_module/io_pins.h b/firmware/boards/f0_module/io_pins.h index 79293e1..9b416ab 100644 --- a/firmware/boards/f0_module/io_pins.h +++ b/firmware/boards/f0_module/io_pins.h @@ -1,3 +1,5 @@ +#pragma once + #define BLUE_LED_PORT GPIOB #define BLUE_LED_PIN 5 From 3146bac6452efaff3cce69fb6d0b17c06adaded4 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sun, 7 Nov 2021 22:56:20 -0800 Subject: [PATCH 16/59] missed one --- firmware/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/main.cpp b/firmware/main.cpp index 7fca755..d67b179 100644 --- a/firmware/main.cpp +++ b/firmware/main.cpp @@ -45,7 +45,7 @@ int main() { else { // green is off - palClearPad(GPIOB, 6); + palClearPad(GREEN_LED_PORT, GREEN_LED_PIN); // Blink out the error code for (int i = 0; i < 2 * static_cast(fault); i++) From 28ac0c61f0c0cff5c780d8eb1dc039961cd02448 Mon Sep 17 00:00:00 2001 From: rusefillc <48498823+rusefillc@users.noreply.github.com> Date: Mon, 8 Nov 2021 14:01:16 -0500 Subject: [PATCH 17/59] Can magic constants (#26) * CAN api * CAN api * CAN api * CAN api Co-authored-by: rusefillc --- firmware/can.cpp | 8 ++++---- for_rusefi/wideband_can.h | 6 ++++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/firmware/can.cpp b/firmware/can.cpp index caba597..8d5bcfa 100644 --- a/firmware/can.cpp +++ b/firmware/can.cpp @@ -30,7 +30,7 @@ static void SendAck() CANTxFrame frame; frame.IDE = CAN_IDE_EXT; - frame.EID = 0x727573; // ascii "rus" + frame.EID = WB_ACK; frame.RTR = CAN_RTR_DATA; frame.DLC = 0; @@ -57,7 +57,7 @@ void CanRxThread(void*) continue; } - if (frame.DLC == 2 && frame.EID == 0xEF5'0000) { + if (frame.DLC == 2 && frame.EID == WB_MGS_ECU_STATUS) { // This is status from ECU - battery voltage and heater enable signal // data0 contains battery voltage in tenths of a volt @@ -69,7 +69,7 @@ void CanRxThread(void*) SetHeaterAllowed(heaterAllowed); } // If it's a bootloader entry request, reboot to the bootloader! - else if (frame.DLC == 0 && frame.EID == 0xEF0'0000) + else if (frame.DLC == 0 && frame.EID == WB_BL_ENTER) { SendAck(); @@ -79,7 +79,7 @@ void CanRxThread(void*) NVIC_SystemReset(); } // Check if it's an "index set" message - else if (frame.DLC == 1 && frame.EID == 0xEF4'0000) + else if (frame.DLC == 1 && frame.EID == WB_MSG_SET_INDEX) { auto newCfg = GetConfiguration(); newCfg.CanIndexOffset = frame.data8[0]; diff --git a/for_rusefi/wideband_can.h b/for_rusefi/wideband_can.h index 6418703..b37dca0 100644 --- a/for_rusefi/wideband_can.h +++ b/for_rusefi/wideband_can.h @@ -2,6 +2,12 @@ #define RUSEFI_WIDEBAND_VERSION (0xA0) +// ascii "rus" +#define WB_ACK 0x727573 +#define WB_BL_ENTER 0xEF0'0000 +#define WB_MSG_SET_INDEX 0xEF4'0000 +#define WB_MGS_ECU_STATUS 0xEF5'0000 + namespace wbo { struct StandardData From fa8e2b1deb7d812ca1109bb96815f271a12ae0d4 Mon Sep 17 00:00:00 2001 From: rusefillc <48498823+rusefillc@users.noreply.github.com> Date: Mon, 27 Dec 2021 22:08:58 -0500 Subject: [PATCH 18/59] better io file arrangement - Makefile gives more flexibility than relative path from .cpp file (#30) Co-authored-by: rusefillc --- firmware/Makefile | 2 +- firmware/boards/f0_module/bootloader/Makefile | 3 ++- firmware/boards/f0_module/bootloader/bootloader.cpp | 2 +- firmware/boards/f0_module/{ => io}/io_pins.h | 0 4 files changed, 4 insertions(+), 3 deletions(-) rename firmware/boards/f0_module/{ => io}/io_pins.h (100%) diff --git a/firmware/Makefile b/firmware/Makefile index 6e09f65..9c5bc57 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -152,7 +152,7 @@ ASMSRC = $(ALLASMSRC) ASMXSRC = $(ALLXASMSRC) # Inclusion directories. -INCDIR = $(CONFDIR) $(ALLINC) $(TESTINC) boards/ +INCDIR = $(CONFDIR) $(ALLINC) boards/ $(BOARDDIR)/io/ # Define C warning options here. CWARN = -Wall -Wextra -Wundef -Wstrict-prototypes diff --git a/firmware/boards/f0_module/bootloader/Makefile b/firmware/boards/f0_module/bootloader/Makefile index 2bf70b0..7c2ec31 100644 --- a/firmware/boards/f0_module/bootloader/Makefile +++ b/firmware/boards/f0_module/bootloader/Makefile @@ -128,7 +128,8 @@ ASMSRC = $(ALLASMSRC) ASMXSRC = $(ALLXASMSRC) # Inclusion directories. -INCDIR = $(CONFDIR) $(ALLINC) $(TESTINC) $(SRCDIR)/shared/ +INCDIR = $(CONFDIR) $(ALLINC) $(SRCDIR)/shared/ \ + ../io # Define C warning options here. CWARN = -Wall -Wextra -Wundef -Wstrict-prototypes diff --git a/firmware/boards/f0_module/bootloader/bootloader.cpp b/firmware/boards/f0_module/bootloader/bootloader.cpp index 08e12dd..6ce5993 100644 --- a/firmware/boards/f0_module/bootloader/bootloader.cpp +++ b/firmware/boards/f0_module/bootloader/bootloader.cpp @@ -2,7 +2,7 @@ #include "hal.h" #include "flash.h" -#include "../io_pins.h" +#include "io_pins.h" #include diff --git a/firmware/boards/f0_module/io_pins.h b/firmware/boards/f0_module/io/io_pins.h similarity index 100% rename from firmware/boards/f0_module/io_pins.h rename to firmware/boards/f0_module/io/io_pins.h From 020dd4a3925438fee7e232f38481d252b5a2e446 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Mon, 27 Dec 2021 20:20:03 -0800 Subject: [PATCH 19/59] wild swing at ADC --- firmware/boards/f1_dave/port.cpp | 52 ++++++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/firmware/boards/f1_dave/port.cpp b/firmware/boards/f1_dave/port.cpp index 60be120..c556891 100644 --- a/firmware/boards/f1_dave/port.cpp +++ b/firmware/boards/f1_dave/port.cpp @@ -1,9 +1,57 @@ #include "port.h" + +#include "wideband_config.h" + +#include "hal.h" + +#define ADC_CHANNEL_COUNT 3 +#define ADC_SAMPLE ADC_SAMPLE_7P5 + +static adcsample_t adcBuffer[ADC_CHANNEL_COUNT * ADC_OVERSAMPLE]; + +ADCConversionGroup convGroup = +{ + false, + ADC_CHANNEL_COUNT, + nullptr, + nullptr, + 0, ADC_CR2_CONT, // CR1, CR2 + // SMPR1 + 0, + // SMPR2 + ADC_SMPR2_SMP_AN0(ADC_SAMPLE) | ADC_SMPR2_SMP_AN2(ADC_SAMPLE) | ADC_SMPR2_SMP_AN3(ADC_SAMPLE), + // SQR + ADC_SQR1_NUM_CH(ADC_CHANNEL_COUNT), + 0, + ADC_SQR3_SQ1_N(0) | ADC_SQR3_SQ2_N(2) | ADC_SQR3_SQ3_N(3) +}; + +static float AverageSamples(adcsample_t* buffer, size_t idx) +{ + uint32_t sum = 0; + + for (size_t i = 0; i < ADC_OVERSAMPLE; i++) + { + sum += buffer[idx]; + idx += ADC_CHANNEL_COUNT; + } + + constexpr float scale = VCC_VOLTS / (ADC_MAX_COUNT * ADC_OVERSAMPLE); + + return (float)sum * scale; +} + AnalogResult AnalogSample() { - // TODO: implement me! - return {}; + adcConvert(&ADCD1, &convGroup, adcBuffer, ADC_OVERSAMPLE); + + return + { + .NernstVoltage = AverageSamples(adcBuffer, 0) * NERNST_INPUT_GAIN, + .PumpCurrentVoltage = AverageSamples(adcBuffer, 1), + .VirtualGroundVoltageInt = AverageSamples(adcBuffer, 2), + }; } const CANConfig canConfig500 = From 637ed6cbe0ec648197026015840ceb10b0b82796 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Mon, 27 Dec 2021 20:23:26 -0800 Subject: [PATCH 20/59] scripts and ci --- firmware/boards/f0_module/build_wideband.sh | 2 +- firmware/boards/f1_dave/board.mk | 2 ++ firmware/boards/f1_dave/build_wideband.sh | 7 +++++++ 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 firmware/boards/f1_dave/build_wideband.sh diff --git a/firmware/boards/f0_module/build_wideband.sh b/firmware/boards/f0_module/build_wideband.sh index 01cfdac..71e5c52 100755 --- a/firmware/boards/f0_module/build_wideband.sh +++ b/firmware/boards/f0_module/build_wideband.sh @@ -12,7 +12,7 @@ rm -r build/ rm ../for_rusefi/wideband_image.h # build app firmware! -make -j12 +make -j12 BOARD=f0_module # Copy the bin without the bootloader (the image consumed by rusEfi has no bootloader on it) dd if=build/wideband.bin of=build/wideband_noboot_no_pad.bin skip=6144 bs=1 diff --git a/firmware/boards/f1_dave/board.mk b/firmware/boards/f1_dave/board.mk index 73e96ab..add0892 100644 --- a/firmware/boards/f1_dave/board.mk +++ b/firmware/boards/f1_dave/board.mk @@ -1,3 +1,5 @@ +USE_BOOTLOADER = no + MCU = cortex-m3 include $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/mk/startup_stm32f1xx.mk diff --git a/firmware/boards/f1_dave/build_wideband.sh b/firmware/boards/f1_dave/build_wideband.sh new file mode 100644 index 0000000..193abce --- /dev/null +++ b/firmware/boards/f1_dave/build_wideband.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +# back out to the root +cd ../.. + +# build app firmware! +make -j12 BOARD=f1_dave From c163f49a703271b377ddf010d6a79e745648fbba Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Mon, 27 Dec 2021 20:25:04 -0800 Subject: [PATCH 21/59] ci --- .github/workflows/build-firmware.yaml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-firmware.yaml b/.github/workflows/build-firmware.yaml index c504efb..4e219a0 100644 --- a/.github/workflows/build-firmware.yaml +++ b/.github/workflows/build-firmware.yaml @@ -1,4 +1,4 @@ -name: Build F0 Module Firmware +name: Build Firmware on: [push, pull_request] @@ -6,6 +6,14 @@ jobs: build-firmware: runs-on: ubuntu-latest + strategy: + # Let all builds finish even if one fails early + fail-fast: false + matrix: + include: + - build-target: f0_module + - build-target: f1_dave + steps: - uses: actions/checkout@v1 with: @@ -25,5 +33,5 @@ jobs: run: arm-none-eabi-gcc -v - name: Build Firmware - working-directory: ./firmware/boards/f0_module + working-directory: ./firmware/boards/${{matrix.build-target}} run: ./build_wideband.sh From df07bb4ec8aac54b65f12c9af4516236e4ed8d69 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Mon, 27 Dec 2021 20:34:02 -0800 Subject: [PATCH 22/59] chmod +x --- firmware/boards/f1_dave/build_wideband.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 firmware/boards/f1_dave/build_wideband.sh diff --git a/firmware/boards/f1_dave/build_wideband.sh b/firmware/boards/f1_dave/build_wideband.sh old mode 100644 new mode 100755 From 17bf809a5f4b6d24fcb601ca765a74faa5d554cd Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Mon, 27 Dec 2021 20:35:45 -0800 Subject: [PATCH 23/59] io pins f1 --- firmware/boards/f1_dave/io/io_pins.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 firmware/boards/f1_dave/io/io_pins.h diff --git a/firmware/boards/f1_dave/io/io_pins.h b/firmware/boards/f1_dave/io/io_pins.h new file mode 100644 index 0000000..50fa080 --- /dev/null +++ b/firmware/boards/f1_dave/io/io_pins.h @@ -0,0 +1,12 @@ +#pragma once + +// TODO: is this correct? + +#define BLUE_LED_PORT GPIOB +#define BLUE_LED_PIN 5 + +#define GREEN_LED_PORT GPIOB +#define GREEN_LED_PIN 6 + +#define NERNST_ESR_DRIVER_PORT GPIOB +#define NERNST_ESR_DRIVER_PIN 7 From 41105cd29fa0193903a4ba5c04a7f97317180026 Mon Sep 17 00:00:00 2001 From: rusefillc <48498823+rusefillc@users.noreply.github.com> Date: Mon, 27 Dec 2021 23:39:02 -0500 Subject: [PATCH 24/59] extracting hardware-specifc CAN from BL (#32) * extracting hardware-specifc CAN from BL reusing CAN settings between FW and BL moving CRC into better location * spelling M0 stuff as M0 stuff Co-authored-by: rusefillc --- firmware/boards/f0_module/bootloader/Makefile | 8 ++++++-- .../boards/f0_module/bootloader/bootloader.cpp | 18 +++++++----------- firmware/boards/f0_module/port.cpp | 6 ------ firmware/boards/f0_module/port_shared.cpp | 9 +++++++++ firmware/boards/port.h | 2 +- firmware/boards/port_shared.h | 4 ++++ .../f0_module/bootloader => shared}/crc.cpp | 0 7 files changed, 27 insertions(+), 20 deletions(-) create mode 100644 firmware/boards/f0_module/port_shared.cpp create mode 100644 firmware/boards/port_shared.h rename firmware/{boards/f0_module/bootloader => shared}/crc.cpp (100%) diff --git a/firmware/boards/f0_module/bootloader/Makefile b/firmware/boards/f0_module/bootloader/Makefile index 7c2ec31..0996f78 100644 --- a/firmware/boards/f0_module/bootloader/Makefile +++ b/firmware/boards/f0_module/bootloader/Makefile @@ -119,7 +119,11 @@ CSRC = $(ALLCSRC) cfg/board.c # C++ sources that can be compiled in ARM or THUMB mode depending on the global # setting. -CPPSRC = $(ALLCPPSRC) bootloader.cpp $(SRCDIR)/shared/flash.cpp crc.cpp +CPPSRC = $(ALLCPPSRC) \ + bootloader.cpp \ + ../port_shared.cpp \ + $(SRCDIR)/shared/flash.cpp \ + $(SRCDIR)/shared/crc.cpp # List ASM source files here. ASMSRC = $(ALLASMSRC) @@ -129,7 +133,7 @@ ASMXSRC = $(ALLXASMSRC) # Inclusion directories. INCDIR = $(CONFDIR) $(ALLINC) $(SRCDIR)/shared/ \ - ../io + ../io ../.. # Define C warning options here. CWARN = -Wall -Wextra -Wundef -Wstrict-prototypes diff --git a/firmware/boards/f0_module/bootloader/bootloader.cpp b/firmware/boards/f0_module/bootloader/bootloader.cpp index 6ce5993..f274105 100644 --- a/firmware/boards/f0_module/bootloader/bootloader.cpp +++ b/firmware/boards/f0_module/bootloader/bootloader.cpp @@ -1,6 +1,5 @@ -#include "ch.h" -#include "hal.h" +#include "port_shared.h" #include "flash.h" #include "io_pins.h" @@ -37,15 +36,18 @@ void boot_app() { const uint32_t* appFlash = __appflash_start__; + // The reset vector is at offset 4 (second uint32) + uint32_t reset_vector = appFlash[1]; + +#ifdef STM32F0XX // copy vector table to sram // TODO: use __ram_vectors_size__ memcpy(reinterpret_cast(&__ram_vectors_start__), appFlash, 256); - // The reset vector is at offset 4 (second uint32) - uint32_t reset_vector = appFlash[1]; - + // M0 core version, newer cores do same thing a bit nicer // switch to use vectors in ram SYSCFG->CFGR1 |= 3; +#endif // TODO: is this necessary? //uint32_t app_msp = appLocation[0]; @@ -214,12 +216,6 @@ void RunBootloaderLoop() } } -static const CANConfig canConfig500 = -{ - CAN_MCR_ABOM | CAN_MCR_AWUM | CAN_MCR_TXFP, - CAN_BTR_SJW(0) | CAN_BTR_BRP(5) | CAN_BTR_TS1(12) | CAN_BTR_TS2(1), -}; - THD_WORKING_AREA(waBootloaderThread, 512); THD_FUNCTION(BootloaderThread, arg) { diff --git a/firmware/boards/f0_module/port.cpp b/firmware/boards/f0_module/port.cpp index 63c5bf6..61097a5 100644 --- a/firmware/boards/f0_module/port.cpp +++ b/firmware/boards/f0_module/port.cpp @@ -129,9 +129,3 @@ void SetConfiguration(const Configuration& newConfig) sizeof(Configuration) ); } - -const CANConfig canConfig500 = -{ - CAN_MCR_ABOM | CAN_MCR_AWUM | CAN_MCR_TXFP, - CAN_BTR_SJW(0) | CAN_BTR_BRP(5) | CAN_BTR_TS1(12) | CAN_BTR_TS2(1), -}; diff --git a/firmware/boards/f0_module/port_shared.cpp b/firmware/boards/f0_module/port_shared.cpp new file mode 100644 index 0000000..6642113 --- /dev/null +++ b/firmware/boards/f0_module/port_shared.cpp @@ -0,0 +1,9 @@ +#include "port_shared.h" + +// board-specific stuff shared between bootloader and firmware + +const CANConfig canConfig500 = +{ + CAN_MCR_ABOM | CAN_MCR_AWUM | CAN_MCR_TXFP, + CAN_BTR_SJW(0) | CAN_BTR_BRP(5) | CAN_BTR_TS1(12) | CAN_BTR_TS2(1), +}; diff --git a/firmware/boards/port.h b/firmware/boards/port.h index e9b4b78..064c022 100644 --- a/firmware/boards/port.h +++ b/firmware/boards/port.h @@ -1,6 +1,7 @@ #pragma once #include "hal.h" +#include "port_shared.h" struct AnalogResult { @@ -33,4 +34,3 @@ public: Configuration GetConfiguration(); void SetConfiguration(const Configuration& newConfig); -extern const CANConfig canConfig500; diff --git a/firmware/boards/port_shared.h b/firmware/boards/port_shared.h new file mode 100644 index 0000000..e04aa74 --- /dev/null +++ b/firmware/boards/port_shared.h @@ -0,0 +1,4 @@ +#include "ch.h" +#include "hal.h" + +extern const CANConfig canConfig500; \ No newline at end of file diff --git a/firmware/boards/f0_module/bootloader/crc.cpp b/firmware/shared/crc.cpp similarity index 100% rename from firmware/boards/f0_module/bootloader/crc.cpp rename to firmware/shared/crc.cpp From 8cb60d5b18ce1298b7bd67546d4014e49ba8ca23 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Mon, 27 Dec 2021 20:42:57 -0800 Subject: [PATCH 25/59] pal heater device --- firmware/boards/f0_module/io/io_pins.h | 3 +++ firmware/boards/f1_dave/io/io_pins.h | 3 +++ firmware/heater_control.cpp | 2 +- firmware/wideband_config.h | 2 ++ 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/firmware/boards/f0_module/io/io_pins.h b/firmware/boards/f0_module/io/io_pins.h index 9b416ab..2edd9b0 100644 --- a/firmware/boards/f0_module/io/io_pins.h +++ b/firmware/boards/f0_module/io/io_pins.h @@ -8,3 +8,6 @@ #define NERNST_ESR_DRIVER_PORT GPIOB #define NERNST_ESR_DRIVER_PIN 7 + +#define HEATER_PWM_DEVICE PWMD1 +#define HEATER_PWM_CHANNEL 0 diff --git a/firmware/boards/f1_dave/io/io_pins.h b/firmware/boards/f1_dave/io/io_pins.h index 50fa080..264b8a7 100644 --- a/firmware/boards/f1_dave/io/io_pins.h +++ b/firmware/boards/f1_dave/io/io_pins.h @@ -10,3 +10,6 @@ #define NERNST_ESR_DRIVER_PORT GPIOB #define NERNST_ESR_DRIVER_PIN 7 + +#define HEATER_PWM_DEVICE PWMD1 +#define HEATER_PWM_CHANNEL 0 diff --git a/firmware/heater_control.cpp b/firmware/heater_control.cpp index 5498a99..c3d9d41 100644 --- a/firmware/heater_control.cpp +++ b/firmware/heater_control.cpp @@ -10,7 +10,7 @@ #include "pid.h" // 400khz / 1024 = 390hz PWM -Pwm heaterPwm(PWMD1, 0, 400'000, 1024); +Pwm heaterPwm(HEATER_PWM_DEVICE, HEATER_PWM_CHANNEL, 400'000, 1024); enum class HeaterState { diff --git a/firmware/wideband_config.h b/firmware/wideband_config.h index dc73050..d5db4c9 100644 --- a/firmware/wideband_config.h +++ b/firmware/wideband_config.h @@ -1,5 +1,7 @@ #pragma once +#include "io_pins.h" + // Fundamental board constants #define VCC_VOLTS (3.3f) #define HALF_VCC (VCC_VOLTS / 2) From dd8d3c5c20c5fc6860afd3b70b14923f9c268562 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Mon, 27 Dec 2021 20:44:15 -0800 Subject: [PATCH 26/59] pal pump dac --- firmware/boards/f0_module/io/io_pins.h | 3 +++ firmware/boards/f1_dave/io/io_pins.h | 3 +++ firmware/pump_dac.cpp | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/firmware/boards/f0_module/io/io_pins.h b/firmware/boards/f0_module/io/io_pins.h index 2edd9b0..c9a4446 100644 --- a/firmware/boards/f0_module/io/io_pins.h +++ b/firmware/boards/f0_module/io/io_pins.h @@ -11,3 +11,6 @@ #define HEATER_PWM_DEVICE PWMD1 #define HEATER_PWM_CHANNEL 0 + +#define PUMP_DAC_PWM_DEVICE PWMD3 +#define PUMP_DAC_PWM_CHANNEL 0 diff --git a/firmware/boards/f1_dave/io/io_pins.h b/firmware/boards/f1_dave/io/io_pins.h index 264b8a7..d861b70 100644 --- a/firmware/boards/f1_dave/io/io_pins.h +++ b/firmware/boards/f1_dave/io/io_pins.h @@ -13,3 +13,6 @@ #define HEATER_PWM_DEVICE PWMD1 #define HEATER_PWM_CHANNEL 0 + +#define PUMP_DAC_PWM_DEVICE PWMD3 +#define PUMP_DAC_PWM_CHANNEL 0 diff --git a/firmware/pump_dac.cpp b/firmware/pump_dac.cpp index 43bc03e..77fa203 100644 --- a/firmware/pump_dac.cpp +++ b/firmware/pump_dac.cpp @@ -7,7 +7,7 @@ #include "hal.h" // 48MHz / 1024 = 46.8khz PWM -static Pwm pumpDac(PWMD3, 0, 48'000'000, 1024); +static Pwm pumpDac(PUMP_DAC_PWM_DEVICE, PUMP_DAC_PWM_CHANNEL, 48'000'000, 1024); void InitPumpDac() { From 0bc41184e826d9d2d479253cab3ce0ed6523849a Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Mon, 27 Dec 2021 20:45:55 -0800 Subject: [PATCH 27/59] word order --- .../boards/f0_module/bootloader/bootloader.cpp | 14 +++++++------- firmware/boards/f0_module/io/io_pins.h | 8 ++++---- firmware/boards/f1_dave/io/io_pins.h | 8 ++++---- firmware/main.cpp | 8 ++++---- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/firmware/boards/f0_module/bootloader/bootloader.cpp b/firmware/boards/f0_module/bootloader/bootloader.cpp index f274105..8a63115 100644 --- a/firmware/boards/f0_module/bootloader/bootloader.cpp +++ b/firmware/boards/f0_module/bootloader/bootloader.cpp @@ -241,23 +241,23 @@ int main(void) { chThdCreateStatic(waBootloaderThread, sizeof(waBootloaderThread), NORMALPRIO + 1, BootloaderThread, nullptr); - palSetPadMode(BLUE_LED_PORT, BLUE_LED_PIN, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(LED_BLUE_PORT, LED_BLUE_PIN, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GREEN_LED_PORT, GREEN_LED_PIN, PAL_MODE_OUTPUT_PUSHPULL); - palTogglePad(GREEN_LED_PORT, GREEN_LED_PIN); + palSetPadMode(LED_GREEN_PORT, LED_GREEN_PIN, PAL_MODE_OUTPUT_PUSHPULL); + palTogglePad(LED_GREEN_PORT, LED_GREEN_PIN); for (size_t i = 0; i < 20; i++) { - palTogglePad(BLUE_LED_PORT, BLUE_LED_PIN); - palTogglePad(GREEN_LED_PORT, GREEN_LED_PIN); + palTogglePad(LED_BLUE_PORT, LED_BLUE_PIN); + palTogglePad(LED_GREEN_PORT, LED_GREEN_PIN); chThdSleepMilliseconds(40); } // Block until booting the app is allowed and CRC matches while (bootloaderBusy || !isAppValid()) { - palTogglePad(BLUE_LED_PORT, BLUE_LED_PIN); - palTogglePad(GREEN_LED_PORT, GREEN_LED_PIN); + palTogglePad(LED_BLUE_PORT, LED_BLUE_PIN); + palTogglePad(LED_GREEN_PORT, LED_GREEN_PIN); chThdSleepMilliseconds(200); } diff --git a/firmware/boards/f0_module/io/io_pins.h b/firmware/boards/f0_module/io/io_pins.h index c9a4446..02bc297 100644 --- a/firmware/boards/f0_module/io/io_pins.h +++ b/firmware/boards/f0_module/io/io_pins.h @@ -1,10 +1,10 @@ #pragma once -#define BLUE_LED_PORT GPIOB -#define BLUE_LED_PIN 5 +#define LED_BLUE_PORT GPIOB +#define LED_BLUE_PIN 5 -#define GREEN_LED_PORT GPIOB -#define GREEN_LED_PIN 6 +#define LED_GREEN_PORT GPIOB +#define LED_GREEN_PIN 6 #define NERNST_ESR_DRIVER_PORT GPIOB #define NERNST_ESR_DRIVER_PIN 7 diff --git a/firmware/boards/f1_dave/io/io_pins.h b/firmware/boards/f1_dave/io/io_pins.h index d861b70..6ccc234 100644 --- a/firmware/boards/f1_dave/io/io_pins.h +++ b/firmware/boards/f1_dave/io/io_pins.h @@ -2,11 +2,11 @@ // TODO: is this correct? -#define BLUE_LED_PORT GPIOB -#define BLUE_LED_PIN 5 +#define LED_BLUE_PORT GPIOB +#define LED_BLUE_PIN 5 -#define GREEN_LED_PORT GPIOB -#define GREEN_LED_PIN 6 +#define LED_GREEN_PORT GPIOB +#define LED_GREEN_PIN 6 #define NERNST_ESR_DRIVER_PORT GPIOB #define NERNST_ESR_DRIVER_PIN 7 diff --git a/firmware/main.cpp b/firmware/main.cpp index d67b179..520bb70 100644 --- a/firmware/main.cpp +++ b/firmware/main.cpp @@ -34,10 +34,10 @@ int main() { if (fault == Fault::None) { // blue is off - palClearPad(BLUE_LED_PORT, BLUE_LED_PIN); + palClearPad(LED_BLUE_PORT, LED_BLUE_PIN); // Green is blinking - palTogglePad(GREEN_LED_PORT, GREEN_LED_PIN); + palTogglePad(LED_GREEN_PORT, LED_GREEN_PIN); // Slow blink if closed loop, fast if not chThdSleepMilliseconds(IsRunningClosedLoop() ? 700 : 50); @@ -45,13 +45,13 @@ int main() { else { // green is off - palClearPad(GREEN_LED_PORT, GREEN_LED_PIN); + palClearPad(LED_GREEN_PORT, LED_GREEN_PIN); // Blink out the error code for (int i = 0; i < 2 * static_cast(fault); i++) { // Blue is blinking - palTogglePad(BLUE_LED_PORT, BLUE_LED_PIN); + palTogglePad(LED_BLUE_PORT, LED_BLUE_PIN); // fast blink chThdSleepMilliseconds(300); From 1764c38783971bb3414faa664ab66d82c9fddf16 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Mon, 27 Dec 2021 20:51:09 -0800 Subject: [PATCH 28/59] this build should fail --- firmware/boards/f0_module/build_wideband.sh | 2 ++ firmware/boards/f1_dave/build_wideband.sh | 2 ++ 2 files changed, 4 insertions(+) diff --git a/firmware/boards/f0_module/build_wideband.sh b/firmware/boards/f0_module/build_wideband.sh index 71e5c52..c4c8ae6 100755 --- a/firmware/boards/f0_module/build_wideband.sh +++ b/firmware/boards/f0_module/build_wideband.sh @@ -1,5 +1,7 @@ #!/bin/bash +set -e + # first build the bootloader cd bootloader ./build_bootloader.sh diff --git a/firmware/boards/f1_dave/build_wideband.sh b/firmware/boards/f1_dave/build_wideband.sh index 193abce..631db04 100755 --- a/firmware/boards/f1_dave/build_wideband.sh +++ b/firmware/boards/f1_dave/build_wideband.sh @@ -1,5 +1,7 @@ #!/bin/bash +set -e + # back out to the root cd ../.. From fc6708898232f8b6288373d886f899cd578bb150 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Mon, 27 Dec 2021 20:54:25 -0800 Subject: [PATCH 29/59] don't fail if missing --- firmware/boards/f0_module/build_wideband.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/firmware/boards/f0_module/build_wideband.sh b/firmware/boards/f0_module/build_wideband.sh index c4c8ae6..52da7a1 100755 --- a/firmware/boards/f0_module/build_wideband.sh +++ b/firmware/boards/f0_module/build_wideband.sh @@ -10,8 +10,8 @@ cd bootloader cd ../../.. # delete the elf to force a re-link (it might not pick up the bootloader otherwise) -rm -r build/ -rm ../for_rusefi/wideband_image.h +rm -rf build/ +rm -f ../for_rusefi/wideband_image.h # build app firmware! make -j12 BOARD=f0_module From 03aec72af7bf1fc83a1d95569d0f65ae662d85d5 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Mon, 27 Dec 2021 20:56:55 -0800 Subject: [PATCH 30/59] now this should work --- firmware/Makefile | 1 + firmware/boards/f1_dave/port.cpp | 6 ------ firmware/boards/f1_dave/port_shared.cpp | 9 +++++++++ 3 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 firmware/boards/f1_dave/port_shared.cpp diff --git a/firmware/Makefile b/firmware/Makefile index 9c5bc57..92bfbc9 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -131,6 +131,7 @@ CSRC = $(ALLCSRC) $(BOARDDIR)/board.c # setting. CPPSRC = $(ALLCPPSRC) \ $(BOARDDIR)/port.cpp \ + $(BOARDDIR)/port_shared.cpp \ shared/flash.cpp \ can.cpp \ can_helper.cpp \ diff --git a/firmware/boards/f1_dave/port.cpp b/firmware/boards/f1_dave/port.cpp index c556891..15f87d0 100644 --- a/firmware/boards/f1_dave/port.cpp +++ b/firmware/boards/f1_dave/port.cpp @@ -54,12 +54,6 @@ AnalogResult AnalogSample() }; } -const CANConfig canConfig500 = -{ - CAN_MCR_ABOM | CAN_MCR_AWUM | CAN_MCR_TXFP, - 0 // TODO: set bit timing! correctly! -}; - Configuration GetConfiguration() { // TODO: implement me! diff --git a/firmware/boards/f1_dave/port_shared.cpp b/firmware/boards/f1_dave/port_shared.cpp new file mode 100644 index 0000000..f53d7a6 --- /dev/null +++ b/firmware/boards/f1_dave/port_shared.cpp @@ -0,0 +1,9 @@ +#include "port_shared.h" + +// board-specific stuff shared between bootloader and firmware + +const CANConfig canConfig500 = +{ + CAN_MCR_ABOM | CAN_MCR_AWUM | CAN_MCR_TXFP, + 0 // TODO: set bit timing! correctly! +}; From 3a23d6bdbc1ce465dc56dd85bd13ab64606b5c8c Mon Sep 17 00:00:00 2001 From: rusefillc <48498823+rusefillc@users.noreply.github.com> Date: Sat, 1 Jan 2022 19:14:32 -0500 Subject: [PATCH 31/59] io mapping (#35) Co-authored-by: rusefillc --- firmware/boards/f0_module/io/io_pins.h | 2 ++ firmware/boards/f1_dave/io/io_pins.h | 10 +++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/firmware/boards/f0_module/io/io_pins.h b/firmware/boards/f0_module/io/io_pins.h index 02bc297..add3565 100644 --- a/firmware/boards/f0_module/io/io_pins.h +++ b/firmware/boards/f0_module/io/io_pins.h @@ -9,8 +9,10 @@ #define NERNST_ESR_DRIVER_PORT GPIOB #define NERNST_ESR_DRIVER_PIN 7 +// PA7 #define HEATER_PWM_DEVICE PWMD1 #define HEATER_PWM_CHANNEL 0 +// PA6 #define PUMP_DAC_PWM_DEVICE PWMD3 #define PUMP_DAC_PWM_CHANNEL 0 diff --git a/firmware/boards/f1_dave/io/io_pins.h b/firmware/boards/f1_dave/io/io_pins.h index 6ccc234..6eebb37 100644 --- a/firmware/boards/f1_dave/io/io_pins.h +++ b/firmware/boards/f1_dave/io/io_pins.h @@ -1,18 +1,18 @@ #pragma once -// TODO: is this correct? - #define LED_BLUE_PORT GPIOB -#define LED_BLUE_PIN 5 +#define LED_BLUE_PIN 13 #define LED_GREEN_PORT GPIOB -#define LED_GREEN_PIN 6 +#define LED_GREEN_PIN 8 #define NERNST_ESR_DRIVER_PORT GPIOB -#define NERNST_ESR_DRIVER_PIN 7 +#define NERNST_ESR_DRIVER_PIN 12 +// PC13 #define HEATER_PWM_DEVICE PWMD1 #define HEATER_PWM_CHANNEL 0 +// PA1 TIM2_CH2 #define PUMP_DAC_PWM_DEVICE PWMD3 #define PUMP_DAC_PWM_CHANNEL 0 From df47657a87dd32566a92c78b147e98248fd0c32a Mon Sep 17 00:00:00 2001 From: rusefillc <48498823+rusefillc@users.noreply.github.com> Date: Sat, 1 Jan 2022 19:57:52 -0500 Subject: [PATCH 32/59] spelling (#36) Co-authored-by: rusefillc --- firmware/can.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/can.cpp b/firmware/can.cpp index 8d5bcfa..e7aac65 100644 --- a/firmware/can.cpp +++ b/firmware/can.cpp @@ -115,7 +115,7 @@ void SendRusefiFormat(uint8_t idx) uint16_t lambda = GetLambda() * 10000; frame.get().Lambda = lambda; - // TODO: decode temperatature instead of putting ESR here + // TODO: decode temperature instead of putting ESR here frame.get().TemperatureC = esr; frame.get().Valid = IsRunningClosedLoop() ? 0x01 : 0x00; From 3c92151fc6f7eef7f85769974dca3e0403a171f0 Mon Sep 17 00:00:00 2001 From: rusefillc <48498823+rusefillc@users.noreply.github.com> Date: Sat, 1 Jan 2022 22:27:56 -0500 Subject: [PATCH 33/59] io mapping typo (#37) Co-authored-by: rusefillc --- firmware/boards/f1_dave/io/io_pins.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/boards/f1_dave/io/io_pins.h b/firmware/boards/f1_dave/io/io_pins.h index 6eebb37..6766786 100644 --- a/firmware/boards/f1_dave/io/io_pins.h +++ b/firmware/boards/f1_dave/io/io_pins.h @@ -3,7 +3,7 @@ #define LED_BLUE_PORT GPIOB #define LED_BLUE_PIN 13 -#define LED_GREEN_PORT GPIOB +#define LED_GREEN_PORT GPIOA #define LED_GREEN_PIN 8 #define NERNST_ESR_DRIVER_PORT GPIOB From 0ac2e043e179b7b6f7d2c5ad5570e5402016713d Mon Sep 17 00:00:00 2001 From: rusefillc <48498823+rusefillc@users.noreply.github.com> Date: Sat, 1 Jan 2022 22:57:57 -0500 Subject: [PATCH 34/59] Board cleanup (#39) * io mapping typo * board.h clean-up Co-authored-by: rusefillc --- firmware/boards/f1_dave/board.h | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/firmware/boards/f1_dave/board.h b/firmware/boards/f1_dave/board.h index fe0e439..4c567cf 100644 --- a/firmware/boards/f1_dave/board.h +++ b/firmware/boards/f1_dave/board.h @@ -17,30 +17,26 @@ #ifndef _BOARD_H_ #define _BOARD_H_ -/* - * Setup for the ST INEMO-M1 Discovery board. - */ - /* * Board identifier. */ #define BOARD_ST_NUCLEO64_F103RB -#define BOARD_NAME "STMicroelectronics NUCLEO-F103RB" +/* + * Board identifier. + */ +#define BOARD_NAME "rusEfi Wideband Controller" /* - * Board frequencies. + * Board oscillators-related settings. + * NOTE: LSE not fitted. + * NOTE: HSE not fitted. */ -#define STM32_LSECLK 0 +#if !defined(STM32_LSECLK) +#define STM32_LSECLK 0U +#endif -#if defined(NUCLEO_EXTERNAL_OSCILLATOR) -#define STM32_HSECLK 8000000 -#define STM32_HSE_BYPASS - -#elif defined(NUCLEO_HSE_CRYSTAL) -#define STM32_HSECLK 8000000 - -#else -#define STM32_HSECLK 0 +#if !defined(STM32_HSECLK) +#define STM32_HSECLK 0U #endif /* From cbb0665e54b3bc9759b62c2d88870256550c4738 Mon Sep 17 00:00:00 2001 From: rusefillc <48498823+rusefillc@users.noreply.github.com> Date: Sat, 1 Jan 2022 23:01:05 -0500 Subject: [PATCH 35/59] Correct dac timer (#38) * io mapping typo * DAC uses proper timer now Co-authored-by: rusefillc --- firmware/boards/f1_dave/io/io_pins.h | 4 ++-- firmware/boards/f1_dave/mcuconf.h | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/firmware/boards/f1_dave/io/io_pins.h b/firmware/boards/f1_dave/io/io_pins.h index 6766786..471591b 100644 --- a/firmware/boards/f1_dave/io/io_pins.h +++ b/firmware/boards/f1_dave/io/io_pins.h @@ -14,5 +14,5 @@ #define HEATER_PWM_CHANNEL 0 // PA1 TIM2_CH2 -#define PUMP_DAC_PWM_DEVICE PWMD3 -#define PUMP_DAC_PWM_CHANNEL 0 +#define PUMP_DAC_PWM_DEVICE PWMD2 +#define PUMP_DAC_PWM_CHANNEL 1 diff --git a/firmware/boards/f1_dave/mcuconf.h b/firmware/boards/f1_dave/mcuconf.h index d2e296d..8fd9e4c 100644 --- a/firmware/boards/f1_dave/mcuconf.h +++ b/firmware/boards/f1_dave/mcuconf.h @@ -133,8 +133,8 @@ */ #define STM32_PWM_USE_ADVANCED FALSE #define STM32_PWM_USE_TIM1 TRUE -#define STM32_PWM_USE_TIM2 FALSE -#define STM32_PWM_USE_TIM3 TRUE +#define STM32_PWM_USE_TIM2 TRUE +#define STM32_PWM_USE_TIM3 FALSE #define STM32_PWM_USE_TIM4 FALSE #define STM32_PWM_USE_TIM5 FALSE #define STM32_PWM_USE_TIM8 FALSE @@ -182,7 +182,7 @@ * ST driver system settings. */ #define STM32_ST_IRQ_PRIORITY 8 -#define STM32_ST_USE_TIMER 2 +#define STM32_ST_USE_TIMER 3 /* * UART driver system settings. From 79821c3d3f3004d41f058ca6872126de49d7730f Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sat, 1 Jan 2022 21:05:58 -0800 Subject: [PATCH 36/59] change new format address to play nice --- firmware/can.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/can.cpp b/firmware/can.cpp index e7aac65..42eec29 100644 --- a/firmware/can.cpp +++ b/firmware/can.cpp @@ -103,7 +103,7 @@ void InitCan() void SendRusefiFormat(uint8_t idx) { - auto baseAddress = 0x180 + 2 * idx; + auto baseAddress = 0x190 + 2 * idx; auto esr = GetSensorInternalResistance(); { From 2bda28226ad9d13b1d84020e6c2643f92cee4c60 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sat, 1 Jan 2022 21:10:55 -0800 Subject: [PATCH 37/59] extract fault --- firmware/fault.cpp | 2 ++ firmware/fault.h | 14 +++----------- firmware/heater_control.cpp | 2 ++ firmware/main.cpp | 1 + for_rusefi/wideband_can.h | 12 ++++++++++++ 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/firmware/fault.cpp b/firmware/fault.cpp index 1b0ace8..6d067a1 100644 --- a/firmware/fault.cpp +++ b/firmware/fault.cpp @@ -1,5 +1,7 @@ #include "fault.h" +using namespace wbo; + static Fault currentFault = Fault::None; void SetFault(Fault fault) diff --git a/firmware/fault.h b/firmware/fault.h index b4477e5..d19f8a5 100644 --- a/firmware/fault.h +++ b/firmware/fault.h @@ -2,16 +2,8 @@ #include -enum class Fault : uint8_t -{ - None = 0, +#include "../for_rusefi/wideband_can.h" - // First fault code at 3 so it's easier to see - SensorDidntHeat = 3, - SensorOverheat = 4, - SensorUnderheat = 5, -}; - -void SetFault(Fault fault); +void SetFault(wbo::Fault fault); bool HasFault(); -Fault GetCurrentFault(); +wbo::Fault GetCurrentFault(); diff --git a/firmware/heater_control.cpp b/firmware/heater_control.cpp index c3d9d41..e651d0a 100644 --- a/firmware/heater_control.cpp +++ b/firmware/heater_control.cpp @@ -9,6 +9,8 @@ #include "sampling.h" #include "pid.h" +using namespace wbo; + // 400khz / 1024 = 390hz PWM Pwm heaterPwm(HEATER_PWM_DEVICE, HEATER_PWM_CHANNEL, 400'000, 1024); diff --git a/firmware/main.cpp b/firmware/main.cpp index 520bb70..5eeee05 100644 --- a/firmware/main.cpp +++ b/firmware/main.cpp @@ -10,6 +10,7 @@ #include "uart.h" #include "io_pins.h" +using namespace wbo; /* * Application entry point. diff --git a/for_rusefi/wideband_can.h b/for_rusefi/wideband_can.h index b37dca0..9dbe4d9 100644 --- a/for_rusefi/wideband_can.h +++ b/for_rusefi/wideband_can.h @@ -10,6 +10,16 @@ namespace wbo { +enum class Fault : uint8_t +{ + None = 0, + + // First fault code at 3 so it's easier to see + SensorDidntHeat = 3, + SensorOverheat = 4, + SensorUnderheat = 5, +}; + struct StandardData { uint8_t Version; @@ -30,4 +40,6 @@ struct DiagData uint16_t pad; }; + + } // namespace wbo From 4bb9ac6162afb7b7c0b4b8b4cbb8aa8adba9de83 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sat, 1 Jan 2022 21:12:08 -0800 Subject: [PATCH 38/59] fault decoder ring --- for_rusefi/wideband_can.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/for_rusefi/wideband_can.h b/for_rusefi/wideband_can.h index 9dbe4d9..465a381 100644 --- a/for_rusefi/wideband_can.h +++ b/for_rusefi/wideband_can.h @@ -41,5 +41,19 @@ struct DiagData uint16_t pad; }; +static const char* describeFault(Fault fault) { + switch (fault) { + case Fault::None: + return "OK"; + case Fault::SensorDidntHeat: + return "Sensor failed to heat"; + case Fault::SensorOverheat: + return "Sensor overheat"; + case Fault::SensorUnderheat: + return "Sensor underheat"; + } + + return "Unknown"; +} } // namespace wbo From dd4b3dd081d3f5478e05efa48afc63faebc95787 Mon Sep 17 00:00:00 2001 From: rusefillc <48498823+rusefillc@users.noreply.github.com> Date: Tue, 4 Jan 2022 13:40:03 -0500 Subject: [PATCH 39/59] open question but probably useful (#31) --- firmware/Makefile | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/firmware/Makefile b/firmware/Makefile index 92bfbc9..a17dc25 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -196,6 +196,15 @@ endif # RULESPATH = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/mk + +ifeq ("$(wildcard $(RULESPATH)/rules.mk)","") +$(info Invoking "git submodule update --init") +$(shell git submodule update --init) +$(info Invoked "git submodule update --init") +# make is not happy about newly checked out module for some reason but next invocation would work +$(error Please run 'make' again. Please make sure you have 'git' command in PATH) +endif + include $(RULESPATH)/arm-none-eabi.mk include $(RULESPATH)/rules.mk From b420d7aa5641648c93c2923466814ec0565ab771 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 4 Jan 2022 10:41:35 -0800 Subject: [PATCH 40/59] Revert "open question but probably useful (#31)" This reverts commit dd4b3dd081d3f5478e05efa48afc63faebc95787. --- firmware/Makefile | 9 --------- 1 file changed, 9 deletions(-) diff --git a/firmware/Makefile b/firmware/Makefile index a17dc25..92bfbc9 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -196,15 +196,6 @@ endif # RULESPATH = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/mk - -ifeq ("$(wildcard $(RULESPATH)/rules.mk)","") -$(info Invoking "git submodule update --init") -$(shell git submodule update --init) -$(info Invoked "git submodule update --init") -# make is not happy about newly checked out module for some reason but next invocation would work -$(error Please run 'make' again. Please make sure you have 'git' command in PATH) -endif - include $(RULESPATH)/arm-none-eabi.mk include $(RULESPATH)/rules.mk From b910db45ba71f883af913f766250c797290e0721 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 4 Jan 2022 11:03:09 -0800 Subject: [PATCH 41/59] f1 board.h --- firmware/boards/f1_dave/board.h | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/firmware/boards/f1_dave/board.h b/firmware/boards/f1_dave/board.h index 4c567cf..4da646f 100644 --- a/firmware/boards/f1_dave/board.h +++ b/firmware/boards/f1_dave/board.h @@ -187,20 +187,28 @@ /* * Port A setup. * Everything input with pull-up except: - * PA2 - Alternate output (GPIOA_ARD_D1, GPIOA_USART2_TX). - * PA3 - Normal input (GPIOA_ARD_D0, GPIOA_USART2_RX). - * PA5 - Push Pull output (GPIOA_LED_GREEN). + * PA0 - Ip_sense (analog in). + * PA1 - Ip_dac (PWM) (output pushpull, alternate 1). + * PA2 - Vm_sense (analog in). + * PA3 - Un_sense (analog in). + * PA4 - Vm (analog in, unused). + * PA8 - Green LED (output pushpull). + * PA9 - UART TX (alternate 1). + * PA10 - UART RX (alternate 1). + * PA11 - CAN RX (alternate 4). + * PA12 - CAN TX (alternate 4). * PA13 - Pull-up input (GPIOA_SWDIO). * PA14 - Pull-down input (GPIOA_SWCLK). */ -#define VAL_GPIOACRL 0x88384B88 /* PA7...PA0 */ -#define VAL_GPIOACRH 0x88888888 /* PA15...PA8 */ -#define VAL_GPIOAODR 0xFFFFBFDF +#define VAL_GPIOACRL 0x88800020 /* PA7...PA0 */ +#define VAL_GPIOACRH 0x888B88B2 /* PA15...PA8 */ +#define VAL_GPIOAODR 0xFFFFFFFF /* * Port B setup. * Everything input with pull-up except: - * PB3 - Pull-up input (GPIOA_SWO). + * PB12 - Nernst ESR driver (GPIO) (output pushpull) + * PB13 - Blue LED (output pushpull) */ #define VAL_GPIOBCRL 0x88888888 /* PB7...PB0 */ #define VAL_GPIOBCRH 0x88888888 /* PB15...PB8 */ @@ -209,19 +217,16 @@ /* * Port C setup. * Everything input with pull-up except: - * PC13 - Normal input (GPIOC_BUTTON). */ #define VAL_GPIOCCRL 0x88888888 /* PC7...PC0 */ -#define VAL_GPIOCCRH 0x88488888 /* PC15...PC8 */ +#define VAL_GPIOCCRH 0x88888888 /* PC15...PC8 */ #define VAL_GPIOCODR 0xFFFFFFFF /* * Port D setup. * Everything input with pull-up except: - * PD0 - Normal input (GPIOD_OSC_IN). - * PD1 - Normal input (GPIOD_OSC_OUT). */ -#define VAL_GPIODCRL 0x88888844 /* PD7...PD0 */ +#define VAL_GPIODCRL 0x88888888 /* PD7...PD0 */ #define VAL_GPIODCRH 0x88888888 /* PD15...PD8 */ #define VAL_GPIODODR 0xFFFFFFFF From 085b0419dbe0eb85f85f88a9131afa749b207a16 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 4 Jan 2022 11:06:01 -0800 Subject: [PATCH 42/59] clarify for f1 --- firmware/boards/f1_dave/board.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/firmware/boards/f1_dave/board.h b/firmware/boards/f1_dave/board.h index 4da646f..3dd44ab 100644 --- a/firmware/boards/f1_dave/board.h +++ b/firmware/boards/f1_dave/board.h @@ -188,15 +188,15 @@ * Port A setup. * Everything input with pull-up except: * PA0 - Ip_sense (analog in). - * PA1 - Ip_dac (PWM) (output pushpull, alternate 1). + * PA1 - Ip_dac (PWM) (output pushpull, alternate). * PA2 - Vm_sense (analog in). * PA3 - Un_sense (analog in). * PA4 - Vm (analog in, unused). * PA8 - Green LED (output pushpull). - * PA9 - UART TX (alternate 1). - * PA10 - UART RX (alternate 1). - * PA11 - CAN RX (alternate 4). - * PA12 - CAN TX (alternate 4). + * PA9 - UART TX (output pushpull, alternate). + * PA10 - UART RX (digital input, alternate). + * PA11 - CAN RX (digital input, alternate). + * PA12 - CAN TX (output pushpull, alternate). * PA13 - Pull-up input (GPIOA_SWDIO). * PA14 - Pull-down input (GPIOA_SWCLK). */ From 4f2fd95c467152f7a28760c00fd9f9e8b1ec7596 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 4 Jan 2022 11:08:17 -0800 Subject: [PATCH 43/59] f1 analog mapping --- firmware/boards/f1_dave/port.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/firmware/boards/f1_dave/port.cpp b/firmware/boards/f1_dave/port.cpp index 15f87d0..dd7182d 100644 --- a/firmware/boards/f1_dave/port.cpp +++ b/firmware/boards/f1_dave/port.cpp @@ -18,13 +18,13 @@ ADCConversionGroup convGroup = nullptr, 0, ADC_CR2_CONT, // CR1, CR2 // SMPR1 - 0, + 0, // SMPR2 - ADC_SMPR2_SMP_AN0(ADC_SAMPLE) | ADC_SMPR2_SMP_AN2(ADC_SAMPLE) | ADC_SMPR2_SMP_AN3(ADC_SAMPLE), + ADC_SMPR2_SMP_AN3(ADC_SAMPLE) | ADC_SMPR2_SMP_AN0(ADC_SAMPLE) | ADC_SMPR2_SMP_AN2(ADC_SAMPLE), // SQR ADC_SQR1_NUM_CH(ADC_CHANNEL_COUNT), 0, - ADC_SQR3_SQ1_N(0) | ADC_SQR3_SQ2_N(2) | ADC_SQR3_SQ3_N(3) + ADC_SQR3_SQ1_N(3) | ADC_SQR3_SQ2_N(0) | ADC_SQR3_SQ3_N(2) }; static float AverageSamples(adcsample_t* buffer, size_t idx) From 6557809da22e674e212066b67eef9b23ec663910 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 4 Jan 2022 11:16:46 -0800 Subject: [PATCH 44/59] send heater duty --- firmware/can.cpp | 1 + firmware/heater_control.cpp | 5 +++++ firmware/heater_control.h | 1 + for_rusefi/wideband_can.h | 3 ++- 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/firmware/can.cpp b/firmware/can.cpp index 42eec29..3628b1f 100644 --- a/firmware/can.cpp +++ b/firmware/can.cpp @@ -128,5 +128,6 @@ void SendRusefiFormat(uint8_t idx) frame.get().NernstDc = GetNernstDc() * 1000; frame.get().PumpDuty = GetPumpOutputDuty() / 4; frame.get().Status = GetCurrentFault(); + frame.get().HeaterDuty = GetHeaterDuty() / 4; } } diff --git a/firmware/heater_control.cpp b/firmware/heater_control.cpp index e651d0a..c587b35 100644 --- a/firmware/heater_control.cpp +++ b/firmware/heater_control.cpp @@ -204,3 +204,8 @@ void SetHeaterAllowed(bool allowed) { heaterAllowed = allowed; } + +uint16_t GetHeaterDuty() +{ + return heaterPwm.GetLastDuty(); +} diff --git a/firmware/heater_control.h b/firmware/heater_control.h index 9e413b3..968cde5 100644 --- a/firmware/heater_control.h +++ b/firmware/heater_control.h @@ -6,3 +6,4 @@ void StartHeaterControl(); bool IsRunningClosedLoop(); void SetBatteryVoltage(float vbatt); void SetHeaterAllowed(bool allowed); +uint16_t GetHeaterDuty(); diff --git a/for_rusefi/wideband_can.h b/for_rusefi/wideband_can.h index 465a381..795890d 100644 --- a/for_rusefi/wideband_can.h +++ b/for_rusefi/wideband_can.h @@ -38,7 +38,8 @@ struct DiagData uint8_t PumpDuty; Fault Status; - uint16_t pad; + uint8_t HeaterDuty; + uint8_t pad; }; static const char* describeFault(Fault fault) { From 437efb1cc6f5db2aebb5fa5fa3f2d8bebf3716c6 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Mon, 10 Jan 2022 01:46:43 -0800 Subject: [PATCH 45/59] adjust CL timeout parameters --- firmware/wideband_config.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/firmware/wideband_config.h b/firmware/wideband_config.h index dc73050..dcd6792 100644 --- a/firmware/wideband_config.h +++ b/firmware/wideband_config.h @@ -42,9 +42,9 @@ #define HEATER_CONTROL_PERIOD 50 #define HEATER_PREHEAT_TIME 5000 -#define HEATER_WARMUP_TIMEOUT 45000 +#define HEATER_WARMUP_TIMEOUT 60000 -#define HEATER_CLOSED_LOOP_THRESHOLD_ESR 400 +#define HEATER_CLOSED_LOOP_THRESHOLD_ESR 500 #define HEATER_TARGET_ESR 300 #define HEATER_OVERHEAT_ESR 150 -#define HEATER_UNDERHEAT_ESR 600 +#define HEATER_UNDERHEAT_ESR 700 From a2991bd77134ae7be320c6a58d3a5ceb5dda5872 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Mon, 10 Jan 2022 01:48:29 -0800 Subject: [PATCH 46/59] image --- for_rusefi/wideband_image.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/for_rusefi/wideband_image.h b/for_rusefi/wideband_image.h index 2cdab06..adef487 100644 --- a/for_rusefi/wideband_image.h +++ b/for_rusefi/wideband_image.h @@ -783,8 +783,8 @@ static const unsigned char build_wideband_image_bin[] = { 0x53, 0x46, 0x1b, 0x68, 0x00, 0x2b, 0x33, 0xd0, 0x52, 0x46, 0x01, 0x3b, 0x13, 0x60, 0x5b, 0x46, 0x1c, 0x68, 0x29, 0x49, 0x20, 0x1c, 0xfd, 0xf7, 0x39, 0xff, 0x00, 0x28, 0xe3, 0xd0, 0x20, 0x1c, 0x26, 0x49, 0xfd, 0xf7, - 0x73, 0xff, 0x5b, 0x46, 0x04, 0x1c, 0x18, 0x60, 0xdb, 0xe7, 0xe1, 0x23, - 0x52, 0x46, 0x9b, 0x00, 0x81, 0x24, 0x13, 0x60, 0x01, 0x23, 0xe4, 0x05, + 0x73, 0xff, 0x5b, 0x46, 0x04, 0x1c, 0x18, 0x60, 0xdb, 0xe7, 0x96, 0x23, + 0x52, 0x46, 0xdb, 0x00, 0x81, 0x24, 0x13, 0x60, 0x01, 0x23, 0xe4, 0x05, 0x33, 0x60, 0x20, 0x1c, 0x1e, 0x49, 0xfd, 0xf7, 0x63, 0xff, 0x5b, 0x46, 0x04, 0x1c, 0x18, 0x60, 0xcb, 0xe7, 0x02, 0x23, 0x33, 0x60, 0xbe, 0xe7, 0x04, 0x23, 0x1a, 0x4a, 0x00, 0x24, 0x13, 0x70, 0x01, 0x3b, 0x33, 0x60, @@ -793,7 +793,7 @@ static const unsigned char build_wideband_image_bin[] = { 0x33, 0x60, 0x62, 0xe7, 0x10, 0x27, 0x00, 0x00, 0xb0, 0x08, 0x00, 0x20, 0xb8, 0x0f, 0x00, 0x20, 0x00, 0x06, 0x00, 0x20, 0x2c, 0x12, 0x00, 0x20, 0xe8, 0x06, 0x00, 0x20, 0x04, 0x06, 0x00, 0x20, 0x00, 0x00, 0xb8, 0x41, - 0x00, 0x00, 0xc8, 0x43, 0x00, 0x00, 0x16, 0x43, 0x00, 0x00, 0x16, 0x44, + 0x00, 0x00, 0xfa, 0x43, 0x00, 0x00, 0x16, 0x43, 0x00, 0x00, 0x2f, 0x44, 0x00, 0x00, 0x96, 0x43, 0x78, 0x10, 0x00, 0x20, 0x00, 0x00, 0xf0, 0x40, 0x00, 0x00, 0x30, 0x41, 0x00, 0x00, 0x20, 0x41, 0x90, 0xc2, 0x75, 0x3c, 0xec, 0x06, 0x00, 0x20, 0xf0, 0xb5, 0x01, 0x25, 0x2b, 0x00, 0x8b, 0x40, @@ -2132,6 +2132,6 @@ static const unsigned char build_wideband_image_bin[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xb8, 0x09, 0xba, 0x0b + 0x20, 0x2d, 0x4c, 0xa3 }; unsigned int build_wideband_image_bin_len = 25600; From e012aabeef0cff9fd4f04b26511275a70d907cb0 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Mon, 10 Jan 2022 01:48:38 -0800 Subject: [PATCH 47/59] image --- for_rusefi/wideband_image_with_bl.bin | Bin 31744 -> 31744 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/for_rusefi/wideband_image_with_bl.bin b/for_rusefi/wideband_image_with_bl.bin index 635917cb322262a0854a7b4174c18b8b7783216b..3c433585d96efdc046572c4642eaf1c7b08eab61 100644 GIT binary patch delta 39 ucmZqp!PxMFal Date: Mon, 10 Jan 2022 01:50:46 -0800 Subject: [PATCH 48/59] image --- for_rusefi/wideband_image.h | 1422 ++++++++++++------------- for_rusefi/wideband_image_with_bl.bin | Bin 31744 -> 31744 bytes 2 files changed, 711 insertions(+), 711 deletions(-) diff --git a/for_rusefi/wideband_image.h b/for_rusefi/wideband_image.h index adef487..47672bb 100644 --- a/for_rusefi/wideband_image.h +++ b/for_rusefi/wideband_image.h @@ -1,5 +1,5 @@ static const unsigned char build_wideband_image_bin[] = { - 0x00, 0x04, 0x00, 0x20, 0xa1, 0x19, 0x00, 0x08, 0xb1, 0x4d, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x20, 0xa1, 0x19, 0x00, 0x08, 0x11, 0x4d, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, @@ -7,38 +7,38 @@ static const unsigned char build_wideband_image_bin[] = { 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, - 0xa3, 0x19, 0x00, 0x08, 0xe1, 0x4e, 0x00, 0x08, 0x41, 0x51, 0x00, 0x08, - 0x11, 0x51, 0x00, 0x08, 0x61, 0x50, 0x00, 0x08, 0xe1, 0x4d, 0x00, 0x08, - 0x01, 0x4e, 0x00, 0x08, 0x11, 0x4e, 0x00, 0x08, 0xc1, 0x4d, 0x00, 0x08, + 0xa3, 0x19, 0x00, 0x08, 0x41, 0x4e, 0x00, 0x08, 0xa1, 0x50, 0x00, 0x08, + 0x71, 0x50, 0x00, 0x08, 0xc1, 0x4f, 0x00, 0x08, 0x41, 0x4d, 0x00, 0x08, + 0x61, 0x4d, 0x00, 0x08, 0x71, 0x4d, 0x00, 0x08, 0x21, 0x4d, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, - 0xa3, 0x19, 0x00, 0x08, 0x91, 0x51, 0x00, 0x08, 0x71, 0x51, 0x00, 0x08, - 0x81, 0x51, 0x00, 0x08, 0x01, 0x4f, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, - 0x41, 0x45, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa3, 0x19, 0x00, 0x08, 0xf1, 0x50, 0x00, 0x08, 0xd1, 0x50, 0x00, 0x08, + 0xe1, 0x50, 0x00, 0x08, 0x61, 0x4e, 0x00, 0x08, 0xa3, 0x19, 0x00, 0x08, + 0xa1, 0x44, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0xb6, 0x24, 0x48, 0x80, 0xf3, 0x08, 0x88, 0x23, 0x48, 0x80, 0xf3, 0x09, 0x88, 0x02, 0x20, 0x80, 0xf3, 0x14, 0x88, - 0xbf, 0xf3, 0x6f, 0x8f, 0x03, 0xf0, 0xe2, 0xfc, 0x03, 0xf0, 0xb8, 0xf9, + 0xbf, 0xf3, 0x6f, 0x8f, 0x03, 0xf0, 0x92, 0xfc, 0x03, 0xf0, 0x68, 0xf9, 0x1e, 0x48, 0x1f, 0x49, 0x1b, 0x4a, 0x91, 0x42, 0x02, 0xda, 0x08, 0x60, 0x04, 0x31, 0xfa, 0xe7, 0x1c, 0x49, 0x19, 0x4a, 0x91, 0x42, 0x02, 0xda, 0x08, 0x60, 0x04, 0x31, 0xfa, 0xe7, 0x1a, 0x49, 0x1a, 0x4a, 0x1b, 0x4b, 0x9a, 0x42, 0x04, 0xda, 0x08, 0x68, 0x10, 0x60, 0x04, 0x31, 0x04, 0x32, 0xf8, 0xe7, 0x00, 0x20, 0x17, 0x49, 0x18, 0x4a, 0x91, 0x42, 0x02, 0xda, - 0x08, 0x60, 0x04, 0x31, 0xfa, 0xe7, 0x03, 0xf0, 0x7d, 0xfc, 0x03, 0xf0, - 0xb3, 0xfc, 0x14, 0x4c, 0x14, 0x4d, 0xac, 0x42, 0x03, 0xda, 0x21, 0x68, - 0x88, 0x47, 0x04, 0x34, 0xf9, 0xe7, 0x02, 0xf0, 0x49, 0xfe, 0x11, 0x4c, + 0x08, 0x60, 0x04, 0x31, 0xfa, 0xe7, 0x03, 0xf0, 0x2d, 0xfc, 0x03, 0xf0, + 0x63, 0xfc, 0x14, 0x4c, 0x14, 0x4d, 0xac, 0x42, 0x03, 0xda, 0x21, 0x68, + 0x88, 0x47, 0x04, 0x34, 0xf9, 0xe7, 0x02, 0xf0, 0xf9, 0xfd, 0x11, 0x4c, 0x11, 0x4d, 0xac, 0x42, 0x03, 0xda, 0x21, 0x68, 0x88, 0x47, 0x04, 0x34, 0xf9, 0xe7, 0x0f, 0x49, 0x08, 0x47, 0x00, 0x00, 0x00, 0x04, 0x00, 0x20, 0x00, 0x06, 0x00, 0x20, 0x55, 0x55, 0x55, 0x55, 0x00, 0x02, 0x00, 0x20, - 0x00, 0x04, 0x00, 0x20, 0xfc, 0x57, 0x00, 0x08, 0x00, 0x06, 0x00, 0x20, - 0x24, 0x06, 0x00, 0x20, 0x28, 0x06, 0x00, 0x20, 0x48, 0x12, 0x00, 0x20, + 0x00, 0x04, 0x00, 0x20, 0x5c, 0x57, 0x00, 0x08, 0x00, 0x06, 0x00, 0x20, + 0x24, 0x06, 0x00, 0x20, 0x28, 0x06, 0x00, 0x20, 0x44, 0x12, 0x00, 0x20, 0xc0, 0x18, 0x00, 0x08, 0xc4, 0x18, 0x00, 0x08, 0xc4, 0x18, 0x00, 0x08, - 0xc4, 0x18, 0x00, 0x08, 0x91, 0x52, 0x00, 0x08, 0x96, 0xe7, 0x00, 0xf0, + 0xc4, 0x18, 0x00, 0x08, 0xf1, 0x51, 0x00, 0x08, 0x96, 0xe7, 0x00, 0xf0, 0x00, 0xf8, 0xfe, 0xe7, 0xf0, 0xb5, 0x44, 0x46, 0x4d, 0x46, 0x56, 0x46, 0x5f, 0x46, 0xf0, 0xb4, 0x6b, 0x46, 0x4b, 0x61, 0x43, 0x69, 0x9d, 0x46, 0xf0, 0xbc, 0xa0, 0x46, 0xa9, 0x46, 0xb2, 0x46, 0xbb, 0x46, 0xf0, 0xbd, - 0x62, 0xb6, 0x28, 0x1c, 0xa0, 0x47, 0x00, 0x20, 0x03, 0xf0, 0x76, 0xfc, - 0xfe, 0xe7, 0x03, 0xf0, 0x9b, 0xfc, 0x02, 0x4a, 0x02, 0x4b, 0x13, 0x60, + 0x62, 0xb6, 0x28, 0x1c, 0xa0, 0x47, 0x00, 0x20, 0x03, 0xf0, 0x26, 0xfc, + 0xfe, 0xe7, 0x03, 0xf0, 0x4b, 0xfc, 0x02, 0x4a, 0x02, 0x4b, 0x13, 0x60, 0xfe, 0xe7, 0xc0, 0x46, 0x04, 0xed, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x80, 0x00, 0x22, 0x43, 0x08, 0x8b, 0x42, 0x74, 0xd3, 0x03, 0x09, 0x8b, 0x42, 0x5f, 0xd3, 0x03, 0x0a, 0x8b, 0x42, 0x44, 0xd3, 0x03, 0x0b, 0x8b, 0x42, @@ -189,8 +189,8 @@ static const unsigned char build_wideband_image_bin[] = { 0x00, 0x29, 0xf3, 0xd1, 0x50, 0x1e, 0x82, 0x41, 0x38, 0x00, 0x7f, 0x30, 0x1e, 0x00, 0x15, 0x43, 0x00, 0x28, 0x00, 0xdd, 0x4b, 0xe7, 0xaa, 0xe7, 0x1a, 0x21, 0x01, 0x25, 0x12, 0x1a, 0xe4, 0xe7, 0xad, 0x01, 0x00, 0x20, - 0x6d, 0x0a, 0x58, 0xe7, 0xf8, 0x53, 0x00, 0x08, 0xff, 0xff, 0xff, 0xf7, - 0x38, 0x54, 0x00, 0x08, 0x70, 0xb5, 0x42, 0x00, 0x4e, 0x02, 0x4c, 0x00, + 0x6d, 0x0a, 0x58, 0xe7, 0x58, 0x53, 0x00, 0x08, 0xff, 0xff, 0xff, 0xf7, + 0x98, 0x53, 0x00, 0x08, 0x70, 0xb5, 0x42, 0x00, 0x4e, 0x02, 0x4c, 0x00, 0x45, 0x02, 0x6d, 0x0a, 0x12, 0x0e, 0xc3, 0x0f, 0x76, 0x0a, 0x24, 0x0e, 0xc9, 0x0f, 0xff, 0x2a, 0x0f, 0xd0, 0xff, 0x2c, 0x11, 0xd0, 0x01, 0x20, 0xa2, 0x42, 0x00, 0xd0, 0x70, 0xbd, 0xb5, 0x42, 0xfc, 0xd1, 0x8b, 0x42, @@ -268,7 +268,7 @@ static const unsigned char build_wideband_image_bin[] = { 0xc0, 0x03, 0x04, 0x43, 0x64, 0x02, 0x37, 0x00, 0xff, 0x20, 0x64, 0x0a, 0x42, 0xe7, 0x29, 0x00, 0x8e, 0xe7, 0xa4, 0x01, 0x00, 0x20, 0x64, 0x0a, 0x3c, 0xe7, 0x80, 0x20, 0xc0, 0x03, 0x04, 0x43, 0x64, 0x02, 0xff, 0x20, - 0x64, 0x0a, 0x35, 0xe7, 0x78, 0x54, 0x00, 0x08, 0xff, 0xff, 0xff, 0xf7, + 0x64, 0x0a, 0x35, 0xe7, 0xd8, 0x53, 0x00, 0x08, 0xff, 0xff, 0xff, 0xf7, 0xf0, 0xb5, 0x46, 0x46, 0xd6, 0x46, 0x4f, 0x46, 0x43, 0x02, 0x5b, 0x0a, 0xda, 0x00, 0x94, 0x46, 0x4a, 0x02, 0xc0, 0xb5, 0x44, 0x00, 0x56, 0x0a, 0x05, 0x1c, 0xb0, 0x46, 0x24, 0x0e, 0x4e, 0x00, 0x92, 0x09, 0x1f, 0x00, @@ -379,18 +379,18 @@ static const unsigned char build_wideband_image_bin[] = { 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x4b, 0x9b, 0x68, 0x00, 0x2b, 0x00, 0xd1, 0x70, 0x47, 0x72, 0xb6, 0x02, 0x4b, 0x03, 0x4a, - 0x5a, 0x66, 0xfe, 0xe7, 0x00, 0x24, 0x01, 0x40, 0x94, 0x10, 0x00, 0x20, - 0x54, 0x56, 0x00, 0x08, 0x20, 0x22, 0x83, 0x5c, 0x00, 0x2b, 0x0f, 0xd0, + 0x5a, 0x66, 0xfe, 0xe7, 0x00, 0x24, 0x01, 0x40, 0xa0, 0x10, 0x00, 0x20, + 0xb4, 0x55, 0x00, 0x08, 0x20, 0x22, 0x83, 0x5c, 0x00, 0x2b, 0x0f, 0xd0, 0x0f, 0x2b, 0x0d, 0xd0, 0x00, 0x23, 0x83, 0x54, 0x82, 0x68, 0x08, 0x4b, 0x1b, 0x68, 0x99, 0x68, 0x91, 0x42, 0xfb, 0xd2, 0x5a, 0x68, 0x03, 0x60, 0x42, 0x60, 0x10, 0x60, 0x58, 0x60, 0x70, 0x47, 0x72, 0xb6, 0x02, 0x4b, - 0x02, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, 0xc0, 0x46, 0x94, 0x10, 0x00, 0x20, - 0x70, 0x55, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x20, 0x22, 0x83, 0x5c, + 0x02, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, 0xc0, 0x46, 0xa0, 0x10, 0x00, 0x20, + 0xd0, 0x54, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x20, 0x22, 0x83, 0x5c, 0x00, 0x2b, 0x0f, 0xd0, 0x0f, 0x2b, 0x0d, 0xd0, 0x00, 0x23, 0x83, 0x54, 0x82, 0x68, 0x08, 0x4b, 0x1b, 0x68, 0x99, 0x68, 0x91, 0x42, 0xfb, 0xd8, 0x5a, 0x68, 0x03, 0x60, 0x42, 0x60, 0x10, 0x60, 0x58, 0x60, 0x70, 0x47, 0x72, 0xb6, 0x02, 0x4b, 0x02, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, 0xc0, 0x46, - 0x94, 0x10, 0x00, 0x20, 0x9c, 0x55, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0xa0, 0x10, 0x00, 0x20, 0xfc, 0x54, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xe7, 0xc0, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xb5, 0xc6, 0x46, 0x04, 0x00, 0x00, 0xb5, 0x08, 0x1c, 0x11, 0x1c, 0xff, 0xf7, 0x14, 0xfd, 0x27, 0x68, 0x06, 0x1c, @@ -404,46 +404,30 @@ static const unsigned char build_wideband_image_bin[] = { 0x61, 0x68, 0x30, 0x1c, 0xff, 0xf7, 0xca, 0xfb, 0xe1, 0x68, 0x06, 0x1c, 0x40, 0x46, 0xff, 0xf7, 0xc5, 0xfb, 0x01, 0x1c, 0x30, 0x1c, 0xff, 0xf7, 0x5b, 0xf8, 0x29, 0x1c, 0xff, 0xf7, 0x58, 0xf8, 0x80, 0xbc, 0xb8, 0x46, - 0xf0, 0xbd, 0xc0, 0x46, 0x08, 0x4b, 0x10, 0xb5, 0x19, 0x68, 0x08, 0x48, - 0xff, 0xf7, 0xea, 0xf9, 0xfe, 0x21, 0x89, 0x05, 0xff, 0xf7, 0xca, 0xfc, - 0x01, 0x1c, 0x05, 0x48, 0xff, 0xf7, 0xe2, 0xf9, 0x04, 0x49, 0xff, 0xf7, - 0xc3, 0xfc, 0x10, 0xbd, 0x3c, 0x12, 0x00, 0x20, 0x33, 0x33, 0x53, 0x40, - 0x00, 0xe0, 0xab, 0x46, 0x00, 0x00, 0x20, 0x41, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xb5, 0x72, 0xb6, - 0x20, 0x23, 0xc3, 0x5c, 0x04, 0x2b, 0x14, 0xd0, 0x0d, 0xd8, 0x00, 0x2b, - 0x09, 0xd0, 0x03, 0x2b, 0x02, 0xd1, 0x00, 0x22, 0x43, 0x6a, 0x1a, 0x60, - 0x01, 0x23, 0x5b, 0x42, 0x43, 0x62, 0xff, 0xf7, 0x3d, 0xff, 0x62, 0xb6, - 0x10, 0xbd, 0x05, 0x2b, 0xf6, 0xd1, 0x42, 0x6a, 0x93, 0x68, 0x01, 0x33, - 0x93, 0x60, 0x42, 0x68, 0x03, 0x68, 0x13, 0x60, 0x5a, 0x60, 0xed, 0xe7, - 0x70, 0xb5, 0x05, 0x00, 0x80, 0x89, 0x0c, 0x1c, 0xff, 0xf7, 0x76, 0xfe, - 0xfe, 0x21, 0x06, 0x1c, 0x89, 0x05, 0x20, 0x1c, 0xfe, 0xf7, 0xd2, 0xff, - 0x00, 0x28, 0x01, 0xd1, 0xfe, 0x24, 0xa4, 0x05, 0x00, 0x21, 0x20, 0x1c, - 0xfe, 0xf7, 0xde, 0xff, 0x00, 0x28, 0x00, 0xd1, 0x00, 0x24, 0x21, 0x1c, - 0x30, 0x1c, 0xff, 0xf7, 0x5f, 0xfb, 0xfe, 0xf7, 0xdf, 0xff, 0x2b, 0x68, - 0xe8, 0x81, 0x9a, 0x69, 0x2b, 0x79, 0x0c, 0x33, 0x9b, 0x00, 0xd3, 0x18, - 0x58, 0x60, 0x70, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x4b, 0x10, 0xb5, - 0x1b, 0x68, 0x02, 0x2b, 0x0f, 0xd1, 0xff, 0xf7, 0x4d, 0xfe, 0x09, 0x49, - 0xff, 0xf7, 0x48, 0xfb, 0x08, 0x49, 0xfe, 0xf7, 0xdf, 0xff, 0x08, 0x49, - 0xff, 0xf7, 0x42, 0xfb, 0x01, 0x1c, 0x07, 0x48, 0xff, 0xf7, 0xc4, 0xff, - 0x10, 0xbd, 0xfc, 0x21, 0x89, 0x05, 0xf8, 0xe7, 0xb8, 0x0f, 0x00, 0x20, - 0xa2, 0x61, 0xa8, 0xb9, 0x33, 0x33, 0xd3, 0x3f, 0xca, 0x26, 0x9b, 0x3e, - 0xbc, 0x0f, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x16, 0x4b, 0x10, 0xb5, 0x1c, 0x68, 0x16, 0x49, - 0x20, 0x1c, 0xfe, 0xf7, 0x7d, 0xff, 0x00, 0x28, 0x1f, 0xd1, 0x14, 0x49, - 0x20, 0x1c, 0xfe, 0xf7, 0x8b, 0xff, 0x00, 0x28, 0x16, 0xd1, 0x12, 0x49, - 0x20, 0x1c, 0xff, 0xf7, 0x17, 0xfb, 0x00, 0x21, 0x04, 0x1c, 0xfe, 0xf7, - 0x6d, 0xff, 0x00, 0x28, 0x12, 0xd1, 0x0e, 0x48, 0x21, 0x1c, 0xff, 0xf7, - 0x0d, 0xfb, 0x0d, 0x49, 0xfe, 0xf7, 0xa4, 0xff, 0x01, 0x1c, 0xfe, 0x20, - 0x80, 0x05, 0xff, 0xf7, 0x3b, 0xf9, 0x10, 0xbd, 0xfc, 0x20, 0x80, 0x05, - 0xfb, 0xe7, 0x80, 0x20, 0xc0, 0x05, 0xf8, 0xe7, 0x06, 0x48, 0xeb, 0xe7, - 0x44, 0x12, 0x00, 0x20, 0x21, 0xe5, 0x2f, 0xbf, 0xef, 0xa7, 0x0a, 0x40, - 0xff, 0xc8, 0xce, 0xbf, 0x8a, 0x76, 0xe5, 0xbe, 0xfc, 0xde, 0x7e, 0x3f, - 0x11, 0xe4, 0x90, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0xbd, 0xc0, 0x46, 0x10, 0xb5, 0x72, 0xb6, 0x20, 0x23, 0xc3, 0x5c, + 0x04, 0x2b, 0x14, 0xd0, 0x0d, 0xd8, 0x00, 0x2b, 0x09, 0xd0, 0x03, 0x2b, + 0x02, 0xd1, 0x00, 0x22, 0x43, 0x6a, 0x1a, 0x60, 0x01, 0x23, 0x5b, 0x42, + 0x43, 0x62, 0xff, 0xf7, 0x5d, 0xff, 0x62, 0xb6, 0x10, 0xbd, 0x05, 0x2b, + 0xf6, 0xd1, 0x42, 0x6a, 0x93, 0x68, 0x01, 0x33, 0x93, 0x60, 0x42, 0x68, + 0x03, 0x68, 0x13, 0x60, 0x5a, 0x60, 0xed, 0xe7, 0x70, 0xb5, 0x05, 0x00, + 0x80, 0x89, 0x0c, 0x1c, 0xff, 0xf7, 0x96, 0xfe, 0xfe, 0x21, 0x06, 0x1c, + 0x89, 0x05, 0x20, 0x1c, 0xfe, 0xf7, 0xf2, 0xff, 0x00, 0x28, 0x01, 0xd1, + 0xfe, 0x24, 0xa4, 0x05, 0x00, 0x21, 0x20, 0x1c, 0xfe, 0xf7, 0xfe, 0xff, + 0x00, 0x28, 0x00, 0xd1, 0x00, 0x24, 0x21, 0x1c, 0x30, 0x1c, 0xff, 0xf7, + 0x7f, 0xfb, 0xfe, 0xf7, 0xff, 0xff, 0x2b, 0x68, 0xe8, 0x81, 0x9a, 0x69, + 0x2b, 0x79, 0x0c, 0x33, 0x9b, 0x00, 0xd3, 0x18, 0x58, 0x60, 0x70, 0xbd, + 0x00, 0x00, 0x00, 0x00, 0x0b, 0x4b, 0x10, 0xb5, 0x1b, 0x68, 0x02, 0x2b, + 0x0f, 0xd1, 0xff, 0xf7, 0x6d, 0xfe, 0x09, 0x49, 0xff, 0xf7, 0x68, 0xfb, + 0x08, 0x49, 0xfe, 0xf7, 0xff, 0xff, 0x08, 0x49, 0xff, 0xf7, 0x62, 0xfb, + 0x01, 0x1c, 0x07, 0x48, 0xff, 0xf7, 0xc4, 0xff, 0x10, 0xbd, 0xfc, 0x21, + 0x89, 0x05, 0xf8, 0xe7, 0xbc, 0x0f, 0x00, 0x20, 0xa2, 0x61, 0xa8, 0xb9, + 0x33, 0x33, 0xd3, 0x3f, 0xca, 0x26, 0x9b, 0x3e, 0xc0, 0x0f, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x30, 0x00, 0xd1, 0x70, 0x47, 0x72, 0xb6, 0xef, 0xf3, 0x09, 0x83, 0x20, 0x3b, 0x83, 0xf3, 0x09, 0x88, 0x80, 0x22, 0x52, 0x04, 0xda, 0x61, 0x06, 0x4a, 0x11, 0x68, 0x52, 0x69, 0x89, 0x68, 0x92, 0x68, 0x91, 0x42, 0x02, 0xd9, 0x04, 0x4a, 0x9a, 0x61, 0xeb, 0xe7, 0x03, 0x4a, 0x9a, 0x61, - 0xe8, 0xe7, 0xc0, 0x46, 0x94, 0x10, 0x00, 0x20, 0xd7, 0x19, 0x00, 0x08, + 0xe8, 0xe7, 0xc0, 0x46, 0xa0, 0x10, 0x00, 0x20, 0xd7, 0x19, 0x00, 0x08, 0xda, 0x19, 0x00, 0x08, 0x82, 0x69, 0x70, 0xb5, 0x14, 0x69, 0xd3, 0x68, 0x05, 0x00, 0x1c, 0x40, 0xff, 0x23, 0x23, 0x40, 0xdb, 0x43, 0x13, 0x61, 0xa3, 0x07, 0x04, 0xd5, 0x43, 0x68, 0x1b, 0x69, 0x00, 0x2b, 0x00, 0xd0, @@ -468,7 +452,7 @@ static const unsigned char build_wideband_image_bin[] = { 0x0e, 0x23, 0xe1, 0x40, 0x19, 0x40, 0x43, 0x68, 0x1b, 0x68, 0x19, 0x42, 0x0c, 0xd0, 0x83, 0x7b, 0x08, 0x00, 0xa0, 0x40, 0x01, 0x33, 0x50, 0x60, 0x04, 0x4a, 0xdb, 0x00, 0x9c, 0x58, 0x00, 0x2c, 0x02, 0xd0, 0xd3, 0x18, - 0x58, 0x68, 0xa0, 0x47, 0x10, 0xbd, 0xc0, 0x46, 0xfc, 0x11, 0x00, 0x20, + 0x58, 0x68, 0xa0, 0x47, 0x10, 0xbd, 0xc0, 0x46, 0x04, 0x12, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xb5, 0x0f, 0x24, 0xc3, 0x69, 0x59, 0x68, 0x0a, 0x68, 0xa2, 0x43, 0x0a, 0x60, 0x59, 0x7b, 0x1a, 0x68, 0x0e, 0x23, 0x8b, 0x40, 0x53, 0x60, 0x83, 0x69, 0x9a, 0x68, @@ -483,14 +467,14 @@ static const unsigned char build_wideband_image_bin[] = { 0x70, 0xbd, 0xc0, 0x46, 0x00, 0xe1, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xb5, 0xd6, 0x46, 0x4f, 0x46, 0x46, 0x46, 0xc0, 0xb5, 0x8e, 0xb0, 0x04, 0x00, 0x30, 0x22, - 0x00, 0x21, 0x02, 0xa8, 0x02, 0xf0, 0x4c, 0xfa, 0x21, 0x23, 0x03, 0x93, + 0x00, 0x21, 0x02, 0xa8, 0x02, 0xf0, 0x5c, 0xfa, 0x21, 0x23, 0x03, 0x93, 0x05, 0x93, 0x07, 0x93, 0x09, 0x93, 0xa3, 0x68, 0x00, 0x93, 0xa3, 0x89, 0x24, 0x68, 0x01, 0x93, 0x00, 0x2c, 0x2f, 0xd0, 0x72, 0xb6, 0x23, 0x78, 0x5a, 0x1e, 0x01, 0x2a, 0x25, 0xd8, 0x6a, 0x46, 0x62, 0x60, 0x01, 0x9a, 0xa2, 0x60, 0x01, 0x2b, 0x29, 0xd0, 0x00, 0x23, 0xa5, 0x69, 0x2b, 0x60, 0x6b, 0x63, 0xab, 0x63, 0xeb, 0x63, 0x2b, 0x64, 0x6b, 0x62, 0x78, 0x4b, 0x9a, 0x46, 0x66, 0x68, 0x67, 0x69, 0x33, 0x68, 0x38, 0x00, 0x19, 0x00, - 0x99, 0x46, 0xfe, 0xf7, 0x71, 0xfd, 0x80, 0x22, 0x43, 0x1e, 0x52, 0x02, + 0x99, 0x46, 0xfe, 0xf7, 0xd1, 0xfd, 0x80, 0x22, 0x43, 0x1e, 0x52, 0x02, 0x93, 0x42, 0x03, 0xd2, 0x4a, 0x46, 0x50, 0x43, 0x87, 0x42, 0x1c, 0xd0, 0x72, 0xb6, 0x6f, 0x4b, 0x6f, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, 0x72, 0xb6, 0x6c, 0x4b, 0x6e, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, 0x72, 0xb6, 0x6a, 0x4b, @@ -529,31 +513,31 @@ static const unsigned char build_wideband_image_bin[] = { 0x10, 0x49, 0x0a, 0x40, 0xda, 0x60, 0x03, 0x21, 0xdb, 0x68, 0xff, 0xf7, 0xc7, 0xfe, 0x03, 0x21, 0x0e, 0x20, 0xff, 0xf7, 0xc3, 0xfe, 0x0a, 0x4b, 0x63, 0x61, 0x3d, 0xe7, 0x72, 0xb6, 0x0a, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, - 0x8c, 0x06, 0x00, 0x20, 0x94, 0x10, 0x00, 0x20, 0xa4, 0x56, 0x00, 0x08, - 0x8c, 0x56, 0x00, 0x08, 0xa8, 0x06, 0x00, 0x20, 0x68, 0x68, 0x00, 0x00, + 0x8c, 0x06, 0x00, 0x20, 0xa0, 0x10, 0x00, 0x20, 0x04, 0x56, 0x00, 0x08, + 0xec, 0x55, 0x00, 0x08, 0xa8, 0x06, 0x00, 0x20, 0x68, 0x68, 0x00, 0x00, 0x00, 0x10, 0x02, 0x40, 0x00, 0x6c, 0xdc, 0x02, 0xff, 0xf7, 0xff, 0xff, - 0x14, 0x55, 0x00, 0x08, 0x30, 0xb5, 0x72, 0xb6, 0x00, 0x29, 0x19, 0xd0, + 0x74, 0x54, 0x00, 0x08, 0x30, 0xb5, 0x72, 0xb6, 0x00, 0x29, 0x19, 0xd0, 0x4b, 0x1e, 0x19, 0x42, 0x16, 0xd1, 0x11, 0x4c, 0x65, 0x68, 0x2b, 0x1a, 0x48, 0x42, 0x18, 0x40, 0x23, 0x68, 0x82, 0x1a, 0x9a, 0x42, 0x16, 0xd3, 0x95, 0x42, 0x14, 0xd3, 0x62, 0x60, 0x0c, 0x4b, 0x1a, 0x68, 0x9a, 0x42, 0x04, 0xd0, 0x59, 0x69, 0x92, 0x68, 0x89, 0x68, 0x91, 0x42, 0x06, 0xd3, 0x62, 0xb6, 0x30, 0xbd, 0x72, 0xb6, 0x06, 0x4b, 0x06, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, 0x72, 0xb6, 0x05, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, 0x00, 0x20, - 0xe9, 0xe7, 0xc0, 0x46, 0xd0, 0x11, 0x00, 0x20, 0x94, 0x10, 0x00, 0x20, - 0xb0, 0x55, 0x00, 0x08, 0x44, 0x55, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0xe9, 0xe7, 0xc0, 0x46, 0xd8, 0x11, 0x00, 0x20, 0xa0, 0x10, 0x00, 0x20, + 0x10, 0x55, 0x00, 0x08, 0xa4, 0x54, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xb5, 0x00, 0x28, - 0x02, 0xd0, 0xff, 0xf7, 0x33, 0xfc, 0x10, 0xbd, 0x72, 0xb6, 0x02, 0x4b, - 0x02, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, 0xc0, 0x46, 0x94, 0x10, 0x00, 0x20, - 0x0c, 0x56, 0x00, 0x08, 0x70, 0xb5, 0x04, 0x00, 0x00, 0x68, 0x84, 0x42, + 0x02, 0xd0, 0xff, 0xf7, 0x93, 0xfc, 0x10, 0xbd, 0x72, 0xb6, 0x02, 0x4b, + 0x02, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, 0xc0, 0x46, 0xa0, 0x10, 0x00, 0x20, + 0x6c, 0x55, 0x00, 0x08, 0x70, 0xb5, 0x04, 0x00, 0x00, 0x68, 0x84, 0x42, 0x12, 0xd0, 0x20, 0x25, 0x00, 0x26, 0x03, 0x68, 0x23, 0x60, 0x5c, 0x60, 0x43, 0x5d, 0x04, 0x2b, 0x04, 0xd0, 0x72, 0xb6, 0x05, 0x4b, 0x06, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, 0x46, 0x62, 0xff, 0xf7, 0xdb, 0xff, 0x20, 0x68, - 0x84, 0x42, 0xee, 0xd1, 0x70, 0xbd, 0xc0, 0x46, 0x94, 0x10, 0x00, 0x20, - 0x50, 0x55, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x68, + 0x84, 0x42, 0xee, 0xd1, 0x70, 0xbd, 0xc0, 0x46, 0xa0, 0x10, 0x00, 0x20, + 0xb0, 0x54, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x68, 0x10, 0xb5, 0x00, 0x28, 0x08, 0xd0, 0x20, 0x22, 0x82, 0x5c, 0x03, 0x2a, 0x05, 0xd1, 0x00, 0x22, 0x1a, 0x60, 0x41, 0x62, 0xff, 0xf7, 0xc2, 0xff, 0x10, 0xbd, 0x72, 0xb6, 0x01, 0x4b, 0x02, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, - 0x94, 0x10, 0x00, 0x20, 0x34, 0x56, 0x00, 0x08, 0x10, 0xb5, 0x04, 0x00, + 0xa0, 0x10, 0x00, 0x20, 0x94, 0x55, 0x00, 0x08, 0x10, 0xb5, 0x04, 0x00, 0x0b, 0x07, 0x11, 0xd4, 0x03, 0x69, 0x00, 0x2b, 0x0d, 0xd0, 0x8a, 0x07, 0x23, 0xd5, 0x1a, 0x78, 0x00, 0x2a, 0x2c, 0xd0, 0x5b, 0x68, 0x00, 0x2b, 0x05, 0xd0, 0x04, 0x22, 0x02, 0x70, 0x98, 0x47, 0x23, 0x78, 0x04, 0x2b, @@ -570,12 +554,12 @@ static const unsigned char build_wideband_image_bin[] = { 0xc3, 0xe7, 0x02, 0x23, 0x23, 0x70, 0x00, 0x23, 0x23, 0x61, 0xef, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x80, 0x23, 0xdb, 0x05, 0xda, 0x68, 0x92, 0x07, 0x01, 0xd5, 0x58, 0x63, 0x70, 0x47, 0x72, 0xb6, 0x01, 0x4b, 0x02, 0x4a, - 0x5a, 0x66, 0xfe, 0xe7, 0x94, 0x10, 0x00, 0x20, 0x98, 0x56, 0x00, 0x08, + 0x5a, 0x66, 0xfe, 0xe7, 0xa0, 0x10, 0x00, 0x20, 0xf8, 0x55, 0x00, 0x08, 0x20, 0x22, 0x0c, 0x4b, 0x10, 0xb5, 0x59, 0x69, 0x88, 0x54, 0x18, 0x68, 0x04, 0x68, 0x63, 0x60, 0x1c, 0x60, 0x01, 0x24, 0x58, 0x61, 0x84, 0x54, 0xef, 0xf3, 0x09, 0x82, 0xcc, 0x69, 0x24, 0x3a, 0x94, 0x42, 0x02, 0xd8, - 0xfe, 0xf7, 0x58, 0xfb, 0x10, 0xbd, 0x72, 0xb6, 0x02, 0x4a, 0x5a, 0x66, - 0xfe, 0xe7, 0xc0, 0x46, 0x94, 0x10, 0x00, 0x20, 0xb8, 0x54, 0x00, 0x08, + 0xfe, 0xf7, 0xb8, 0xfb, 0x10, 0xbd, 0x72, 0xb6, 0x02, 0x4a, 0x5a, 0x66, + 0xfe, 0xe7, 0xc0, 0x46, 0xa0, 0x10, 0x00, 0x20, 0x18, 0x54, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xb5, 0x57, 0x46, 0x4e, 0x46, 0x45, 0x46, 0xde, 0x46, 0xe0, 0xb5, 0x05, 0x00, 0x0e, 0x00, 0x17, 0x00, 0x85, 0xb0, 0x72, 0xb6, 0x22, 0x21, 0xb3, 0x4c, 0xe2, 0x68, 0x53, 0x5c, 0x01, 0x33, @@ -623,12 +607,12 @@ static const unsigned char build_wideband_image_bin[] = { 0xab, 0x18, 0xab, 0x50, 0x60, 0x69, 0x22, 0x68, 0x5b, 0x60, 0x83, 0x68, 0xa2, 0x42, 0x02, 0xd0, 0x92, 0x68, 0x93, 0x42, 0x2f, 0xd3, 0x00, 0x22, 0x41, 0x46, 0x4a, 0x62, 0x9e, 0x42, 0x13, 0xd8, 0x40, 0x46, 0xff, 0xf7, - 0x4f, 0xfa, 0x23, 0x68, 0xa3, 0x42, 0x04, 0xd0, 0x62, 0x69, 0x9b, 0x68, + 0xaf, 0xfa, 0x23, 0x68, 0xa3, 0x42, 0x04, 0xd0, 0x62, 0x69, 0x9b, 0x68, 0x92, 0x68, 0x9a, 0x42, 0x23, 0xd3, 0x62, 0xb6, 0x40, 0x46, 0x05, 0xb0, 0xf0, 0xbc, 0xbb, 0x46, 0xb2, 0x46, 0xa9, 0x46, 0xa0, 0x46, 0xf0, 0xbd, - 0xff, 0xf7, 0x5c, 0xfa, 0x01, 0x23, 0xa1, 0x35, 0xff, 0x35, 0x2b, 0x70, + 0xff, 0xf7, 0xbc, 0xfa, 0x01, 0x23, 0xa1, 0x35, 0xff, 0x35, 0x2b, 0x70, 0x43, 0x46, 0x01, 0x00, 0x63, 0x61, 0xef, 0xf3, 0x09, 0x83, 0xc2, 0x69, - 0x24, 0x3b, 0x9a, 0x42, 0x0f, 0xd8, 0x40, 0x46, 0xfe, 0xf7, 0x10, 0xfa, + 0x24, 0x3b, 0x9a, 0x42, 0x0f, 0xd8, 0x40, 0x46, 0xfe, 0xf7, 0x70, 0xfa, 0xdb, 0xe7, 0x72, 0xb6, 0x24, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x72, 0xb6, 0x23, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x72, 0xb6, 0x1c, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x72, 0xb6, 0x20, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x01, 0x23, @@ -638,11 +622,11 @@ static const unsigned char build_wideband_image_bin[] = { 0x94, 0x45, 0x02, 0xd8, 0x1b, 0x68, 0x99, 0x42, 0xf9, 0xd1, 0x5a, 0x68, 0x03, 0x60, 0x42, 0x60, 0x10, 0x60, 0x58, 0x60, 0x3f, 0xe7, 0x01, 0x9b, 0x00, 0x9a, 0x5b, 0x6b, 0x9a, 0x42, 0x25, 0xd0, 0x72, 0xb6, 0x06, 0x4b, - 0x63, 0x66, 0xfe, 0xe7, 0x94, 0x10, 0x00, 0x20, 0xff, 0x00, 0xff, 0x00, - 0x64, 0x55, 0x00, 0x08, 0x44, 0x56, 0x00, 0x08, 0xfc, 0x55, 0x00, 0x08, - 0x84, 0x55, 0x00, 0x08, 0x2c, 0x55, 0x00, 0x08, 0xc4, 0x55, 0x00, 0x08, - 0xc9, 0x19, 0x00, 0x08, 0xc8, 0x54, 0x00, 0x08, 0xd8, 0x55, 0x00, 0x08, - 0x24, 0x56, 0x00, 0x08, 0xb8, 0x54, 0x00, 0x08, 0x01, 0x9b, 0x02, 0x9a, + 0x63, 0x66, 0xfe, 0xe7, 0xa0, 0x10, 0x00, 0x20, 0xff, 0x00, 0xff, 0x00, + 0xc4, 0x54, 0x00, 0x08, 0xa4, 0x55, 0x00, 0x08, 0x5c, 0x55, 0x00, 0x08, + 0xe4, 0x54, 0x00, 0x08, 0x8c, 0x54, 0x00, 0x08, 0x24, 0x55, 0x00, 0x08, + 0xc9, 0x19, 0x00, 0x08, 0x28, 0x54, 0x00, 0x08, 0x38, 0x55, 0x00, 0x08, + 0x84, 0x55, 0x00, 0x08, 0x18, 0x54, 0x00, 0x08, 0x01, 0x9b, 0x02, 0x9a, 0x59, 0x6b, 0x53, 0x61, 0x91, 0x61, 0x00, 0x9a, 0x01, 0x91, 0x5a, 0x63, 0x23, 0x68, 0xa3, 0x42, 0x04, 0xd0, 0x62, 0x69, 0x9b, 0x68, 0x92, 0x68, 0x9a, 0x42, 0x78, 0xd3, 0x02, 0x9b, 0x19, 0x1d, 0x62, 0xb6, 0x0b, 0x00, @@ -672,14 +656,14 @@ static const unsigned char build_wideband_image_bin[] = { 0x48, 0x61, 0x8a, 0x61, 0x43, 0x63, 0xff, 0xf7, 0xff, 0xfc, 0x23, 0x68, 0x60, 0x69, 0x98, 0x46, 0x82, 0x68, 0x9b, 0x68, 0x93, 0x42, 0x00, 0xd8, 0x14, 0xe6, 0x43, 0x46, 0x1b, 0x68, 0x41, 0x46, 0x5c, 0x60, 0x01, 0x22, - 0x23, 0x60, 0x20, 0x23, 0xca, 0x54, 0x61, 0x61, 0xff, 0xf7, 0x44, 0xf9, + 0x23, 0x60, 0x20, 0x23, 0xca, 0x54, 0x61, 0x61, 0xff, 0xf7, 0xa4, 0xf9, 0x01, 0x00, 0xef, 0xf3, 0x09, 0x83, 0xc2, 0x69, 0x24, 0x3b, 0x9a, 0x42, - 0x10, 0xd8, 0x40, 0x46, 0xfe, 0xf7, 0xfe, 0xf8, 0x23, 0x68, 0xa3, 0x42, + 0x10, 0xd8, 0x40, 0x46, 0xfe, 0xf7, 0x5e, 0xf9, 0x23, 0x68, 0xa3, 0x42, 0x00, 0xd1, 0xfb, 0xe5, 0x62, 0x69, 0x9b, 0x68, 0x92, 0x68, 0x9a, 0x42, 0x00, 0xd3, 0xf5, 0xe5, 0x72, 0xb6, 0x07, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x72, 0xb6, 0x06, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x00, 0x23, 0x02, 0x9a, - 0x53, 0x61, 0xe9, 0xe7, 0xd8, 0x55, 0x00, 0x08, 0xe4, 0x55, 0x00, 0x08, - 0x38, 0x55, 0x00, 0x08, 0xb8, 0x54, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x53, 0x61, 0xe9, 0xe7, 0x38, 0x55, 0x00, 0x08, 0x44, 0x55, 0x00, 0x08, + 0x98, 0x54, 0x00, 0x08, 0x18, 0x54, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xb5, 0x45, 0x46, 0xde, 0x46, 0x57, 0x46, 0x4e, 0x46, 0xe0, 0xb5, 0x64, 0x4d, 0x83, 0x46, 0x6b, 0x69, 0x87, 0xb0, 0x98, 0x46, 0x4b, 0x1c, 0x4e, 0xd0, 0x00, 0x29, 0x03, 0xd1, 0x72, 0xb6, @@ -715,8 +699,8 @@ static const unsigned char build_wideband_image_bin[] = { 0x07, 0xd1, 0x49, 0x44, 0x59, 0x63, 0x1c, 0x61, 0xda, 0x60, 0x80, 0xe7, 0x6a, 0x62, 0x1a, 0x00, 0xb7, 0xe7, 0x72, 0xb6, 0x06, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, 0x80, 0x23, 0xdb, 0x05, 0xd9, 0x60, 0x8e, 0xe7, 0xc0, 0x46, - 0x94, 0x10, 0x00, 0x20, 0x90, 0x55, 0x00, 0x08, 0x41, 0x2b, 0x00, 0x08, - 0x64, 0x56, 0x00, 0x08, 0xf8, 0xb5, 0x47, 0x46, 0xce, 0x46, 0x80, 0x46, + 0xa0, 0x10, 0x00, 0x20, 0xf0, 0x54, 0x00, 0x08, 0x01, 0x2b, 0x00, 0x08, + 0xc4, 0x55, 0x00, 0x08, 0xf8, 0xb5, 0x47, 0x46, 0xce, 0x46, 0x80, 0x46, 0x0d, 0x00, 0x80, 0xb5, 0x72, 0xb6, 0x3d, 0x4c, 0x23, 0x78, 0x1a, 0x1f, 0x01, 0x2a, 0x50, 0xd8, 0xe0, 0x22, 0x27, 0x00, 0x52, 0x05, 0x91, 0x46, 0x39, 0x4e, 0x08, 0x37, 0x0f, 0xe0, 0x73, 0x69, 0x00, 0x2d, 0x4b, 0xd0, @@ -738,635 +722,638 @@ static const unsigned char build_wideband_image_bin[] = { 0xf8, 0xbd, 0x41, 0x46, 0x8c, 0x88, 0xd1, 0x06, 0xc9, 0x0f, 0x64, 0x05, 0x49, 0x00, 0x21, 0x43, 0xc0, 0xe7, 0x72, 0xb6, 0x06, 0x4b, 0x73, 0x66, 0xfe, 0xe7, 0x72, 0xb6, 0x04, 0x4b, 0x73, 0x66, 0xfe, 0xe7, 0xc0, 0x46, - 0x4c, 0x06, 0x00, 0x20, 0x94, 0x10, 0x00, 0x20, 0xd8, 0x56, 0x00, 0x08, - 0x08, 0x55, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0xb5, 0x04, 0x00, 0x00, 0x21, 0xff, 0xf7, - 0x6b, 0xff, 0x20, 0x00, 0x10, 0xbd, 0xc0, 0x46, 0x00, 0xb5, 0x87, 0xb0, - 0x03, 0x9b, 0x0a, 0x4a, 0x01, 0x93, 0x5b, 0x0f, 0x5b, 0x07, 0x13, 0x43, - 0x3f, 0x22, 0x03, 0x93, 0x02, 0xab, 0x1b, 0x78, 0x01, 0x21, 0x93, 0x43, - 0x20, 0x22, 0x13, 0x43, 0x02, 0xaa, 0x10, 0x00, 0x13, 0x70, 0x49, 0x42, - 0xff, 0xf7, 0x52, 0xff, 0x07, 0xb0, 0x00, 0xbd, 0x73, 0x75, 0x72, 0x00, + 0x4c, 0x06, 0x00, 0x20, 0xa0, 0x10, 0x00, 0x20, 0x38, 0x56, 0x00, 0x08, + 0x68, 0x54, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0x87, 0xb0, 0x03, 0x9b, 0x0a, 0x4a, + 0x01, 0x93, 0x5b, 0x0f, 0x5b, 0x07, 0x13, 0x43, 0x3f, 0x22, 0x03, 0x93, + 0x02, 0xab, 0x1b, 0x78, 0x01, 0x21, 0x93, 0x43, 0x20, 0x22, 0x13, 0x43, + 0x02, 0xaa, 0x10, 0x00, 0x13, 0x70, 0x49, 0x42, 0xff, 0xf7, 0x5a, 0xff, + 0x07, 0xb0, 0x00, 0xbd, 0x73, 0x75, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0xb5, + 0x72, 0xb6, 0x08, 0x20, 0xff, 0xf7, 0x72, 0xfe, 0x07, 0x4b, 0x1a, 0x68, + 0x9a, 0x42, 0x04, 0xd0, 0x59, 0x69, 0x92, 0x68, 0x89, 0x68, 0x91, 0x42, + 0x01, 0xd3, 0x62, 0xb6, 0x10, 0xbd, 0x72, 0xb6, 0x02, 0x4a, 0x5a, 0x66, + 0xfe, 0xe7, 0xc0, 0x46, 0xa0, 0x10, 0x00, 0x20, 0x8c, 0x54, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x10, 0xb5, 0x72, 0xb6, 0x08, 0x20, 0xff, 0xf7, 0x6a, 0xfe, - 0x07, 0x4b, 0x1a, 0x68, 0x9a, 0x42, 0x04, 0xd0, 0x59, 0x69, 0x92, 0x68, - 0x89, 0x68, 0x91, 0x42, 0x01, 0xd3, 0x62, 0xb6, 0x10, 0xbd, 0x72, 0xb6, - 0x02, 0x4a, 0x5a, 0x66, 0xfe, 0xe7, 0xc0, 0x46, 0x94, 0x10, 0x00, 0x20, - 0x2c, 0x55, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0xb5, 0x0d, 0x4c, 0x0d, 0x4e, 0x0e, 0x4d, - 0x0e, 0xe0, 0x32, 0x68, 0x0d, 0x49, 0x28, 0x00, 0xfe, 0xf7, 0x86, 0xff, - 0x0c, 0x49, 0xfe, 0xf7, 0x85, 0xfb, 0xfe, 0xf7, 0x65, 0xfe, 0xff, 0xf7, - 0x2f, 0xf8, 0x14, 0x20, 0xff, 0xf7, 0xcc, 0xff, 0x23, 0x68, 0x02, 0x2b, - 0xed, 0xd0, 0x00, 0x20, 0xff, 0xf7, 0x26, 0xf8, 0xf5, 0xe7, 0xc0, 0x46, - 0xb8, 0x0f, 0x00, 0x20, 0x40, 0x12, 0x00, 0x20, 0xcc, 0x0f, 0x00, 0x20, - 0x66, 0x66, 0xe6, 0x3e, 0x00, 0x00, 0x7a, 0x44, 0x00, 0x00, 0x00, 0x00, - 0xf8, 0xb5, 0xde, 0x46, 0x57, 0x46, 0x4e, 0x46, 0x45, 0x46, 0x5b, 0x48, - 0xe0, 0xb5, 0xff, 0xf7, 0xaf, 0xff, 0x5a, 0x4b, 0x5a, 0x4e, 0x99, 0x46, - 0x5a, 0x4b, 0x5b, 0x4f, 0x9a, 0x46, 0x5b, 0x4b, 0x9b, 0x46, 0x5b, 0x4b, - 0x98, 0x46, 0x21, 0xe0, 0xfe, 0xf7, 0x9a, 0xff, 0x33, 0x68, 0x04, 0x1c, - 0x01, 0x2b, 0x5e, 0xd0, 0x02, 0x2b, 0x3f, 0xd0, 0x00, 0x2b, 0x2e, 0xd0, - 0x00, 0x24, 0x43, 0x46, 0x1d, 0x68, 0x54, 0x49, 0x28, 0x1c, 0xfd, 0xf7, - 0x9f, 0xff, 0x00, 0x28, 0x20, 0xd0, 0x29, 0x1c, 0x20, 0x1c, 0xfe, 0xf7, - 0x75, 0xf9, 0x01, 0x1c, 0xfe, 0xf7, 0x3c, 0xfb, 0x01, 0x1c, 0x38, 0x00, - 0xfe, 0xf7, 0xbe, 0xff, 0xfa, 0x20, 0x40, 0x00, 0xff, 0xf7, 0x82, 0xff, - 0x4b, 0x46, 0x1b, 0x78, 0x00, 0x2b, 0xd9, 0xd1, 0x33, 0x60, 0x43, 0x46, - 0x51, 0x46, 0x64, 0x22, 0xff, 0x24, 0x1d, 0x68, 0x0a, 0x60, 0x28, 0x1c, - 0x43, 0x49, 0xa4, 0x05, 0xfd, 0xf7, 0x7e, 0xff, 0x00, 0x28, 0xde, 0xd1, - 0x00, 0x21, 0x38, 0x00, 0xfe, 0xf7, 0xa4, 0xff, 0xe4, 0xe7, 0x53, 0x46, - 0x52, 0x46, 0x1b, 0x68, 0x01, 0x3b, 0x13, 0x60, 0x00, 0x2b, 0x40, 0xdd, - 0x3b, 0x49, 0xfd, 0xf7, 0x6d, 0xff, 0x00, 0x28, 0x3b, 0xd1, 0xff, 0x24, - 0xa4, 0x05, 0xc2, 0xe7, 0x38, 0x49, 0xfd, 0xf7, 0x65, 0xff, 0x00, 0x28, - 0x46, 0xd1, 0x37, 0x49, 0x20, 0x1c, 0xfd, 0xf7, 0x73, 0xff, 0x00, 0x28, - 0x47, 0xd1, 0x22, 0x1c, 0x34, 0x49, 0x35, 0x48, 0xfe, 0xf7, 0xfc, 0xfe, - 0x01, 0x1c, 0x34, 0x48, 0xfe, 0xf7, 0x14, 0xfc, 0x04, 0x1c, 0x33, 0x49, - 0x20, 0x1c, 0xfd, 0xf7, 0x59, 0xff, 0x00, 0x28, 0xa7, 0xd1, 0x30, 0x4c, - 0xa5, 0xe7, 0x29, 0x49, 0xfd, 0xf7, 0x48, 0xff, 0x00, 0x28, 0x26, 0xd1, - 0x53, 0x46, 0x1b, 0x68, 0x00, 0x2b, 0x33, 0xd0, 0x52, 0x46, 0x01, 0x3b, - 0x13, 0x60, 0x5b, 0x46, 0x1c, 0x68, 0x29, 0x49, 0x20, 0x1c, 0xfd, 0xf7, - 0x39, 0xff, 0x00, 0x28, 0xe3, 0xd0, 0x20, 0x1c, 0x26, 0x49, 0xfd, 0xf7, - 0x73, 0xff, 0x5b, 0x46, 0x04, 0x1c, 0x18, 0x60, 0xdb, 0xe7, 0x96, 0x23, - 0x52, 0x46, 0xdb, 0x00, 0x81, 0x24, 0x13, 0x60, 0x01, 0x23, 0xe4, 0x05, - 0x33, 0x60, 0x20, 0x1c, 0x1e, 0x49, 0xfd, 0xf7, 0x63, 0xff, 0x5b, 0x46, - 0x04, 0x1c, 0x18, 0x60, 0xcb, 0xe7, 0x02, 0x23, 0x33, 0x60, 0xbe, 0xe7, - 0x04, 0x23, 0x1a, 0x4a, 0x00, 0x24, 0x13, 0x70, 0x01, 0x3b, 0x33, 0x60, - 0x6f, 0xe7, 0x05, 0x23, 0x16, 0x4a, 0x00, 0x24, 0x13, 0x70, 0x02, 0x3b, - 0x33, 0x60, 0x68, 0xe7, 0x13, 0x4a, 0x03, 0x33, 0x00, 0x24, 0x13, 0x70, - 0x33, 0x60, 0x62, 0xe7, 0x10, 0x27, 0x00, 0x00, 0xb0, 0x08, 0x00, 0x20, - 0xb8, 0x0f, 0x00, 0x20, 0x00, 0x06, 0x00, 0x20, 0x2c, 0x12, 0x00, 0x20, - 0xe8, 0x06, 0x00, 0x20, 0x04, 0x06, 0x00, 0x20, 0x00, 0x00, 0xb8, 0x41, - 0x00, 0x00, 0xfa, 0x43, 0x00, 0x00, 0x16, 0x43, 0x00, 0x00, 0x2f, 0x44, - 0x00, 0x00, 0x96, 0x43, 0x78, 0x10, 0x00, 0x20, 0x00, 0x00, 0xf0, 0x40, - 0x00, 0x00, 0x30, 0x41, 0x00, 0x00, 0x20, 0x41, 0x90, 0xc2, 0x75, 0x3c, - 0xec, 0x06, 0x00, 0x20, 0xf0, 0xb5, 0x01, 0x25, 0x2b, 0x00, 0x8b, 0x40, - 0xc6, 0x46, 0x04, 0x00, 0x98, 0x46, 0x0e, 0x00, 0x00, 0xb5, 0x19, 0x00, - 0x40, 0x22, 0xfe, 0xf7, 0xeb, 0xff, 0x0a, 0x20, 0xff, 0xf7, 0xc8, 0xfe, - 0x20, 0x22, 0x41, 0x46, 0x20, 0x00, 0x27, 0x69, 0xfe, 0xf7, 0xe2, 0xff, - 0x0a, 0x20, 0xff, 0xf7, 0xbf, 0xfe, 0x23, 0x69, 0xf7, 0x40, 0xf3, 0x40, - 0x01, 0x20, 0x2b, 0x40, 0x3d, 0x40, 0x9d, 0x42, 0x00, 0xd1, 0x68, 0x00, - 0x80, 0xbc, 0xb8, 0x46, 0xf0, 0xbd, 0xc0, 0x46, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x23, 0x70, 0xb5, 0x03, 0x71, 0x1b, 0x4b, 0x1b, 0x4a, 0x19, 0x68, - 0x04, 0x00, 0x02, 0x60, 0x91, 0x42, 0x02, 0xd1, 0x02, 0x00, 0x03, 0xcb, - 0x03, 0xc2, 0x01, 0x21, 0x17, 0x48, 0xff, 0xf7, 0xc7, 0xff, 0x05, 0x00, - 0x90, 0x20, 0x08, 0x21, 0xc0, 0x05, 0xff, 0xf7, 0xc1, 0xff, 0x6b, 0x00, - 0x5b, 0x19, 0x18, 0x18, 0x08, 0x28, 0x05, 0xd8, 0x11, 0x4b, 0x80, 0x00, - 0x1b, 0x58, 0x9f, 0x46, 0x07, 0x23, 0x23, 0x71, 0x20, 0x00, 0x70, 0xbd, - 0x02, 0x23, 0x23, 0x71, 0xfa, 0xe7, 0x00, 0x23, 0x23, 0x71, 0xf7, 0xe7, - 0x03, 0x23, 0x23, 0x71, 0xf4, 0xe7, 0x04, 0x23, 0x23, 0x71, 0xf1, 0xe7, - 0x01, 0x23, 0x23, 0x71, 0xee, 0xe7, 0x05, 0x23, 0x23, 0x71, 0xeb, 0xe7, - 0x06, 0x23, 0x23, 0x71, 0xe8, 0xe7, 0xc0, 0x46, 0x00, 0x7c, 0x00, 0x08, - 0x01, 0xbe, 0xad, 0xde, 0x00, 0x04, 0x00, 0x48, 0xd0, 0x54, 0x00, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf0, 0xb5, 0xde, 0x46, 0x57, 0x46, 0x4e, 0x46, 0x45, 0x46, 0xe0, 0xb5, - 0x85, 0xb0, 0x72, 0xb6, 0x6d, 0x4c, 0x63, 0x69, 0x00, 0x2b, 0x04, 0xd0, - 0x6c, 0x4d, 0x72, 0xb6, 0x6c, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, 0x00, 0x23, - 0x99, 0x46, 0x9a, 0x46, 0x6a, 0x4b, 0x68, 0x4d, 0x9b, 0x46, 0x6a, 0x4b, - 0x6a, 0x4f, 0x98, 0x46, 0x6a, 0x4e, 0x23, 0x78, 0x02, 0x2b, 0x05, 0xd0, - 0x05, 0x2b, 0x03, 0xd0, 0x72, 0xb6, 0x68, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, - 0x18, 0x23, 0x30, 0x78, 0xe3, 0x60, 0x15, 0x3b, 0x21, 0x6a, 0xf2, 0x68, - 0xa7, 0x60, 0x26, 0x61, 0x23, 0x70, 0x00, 0x28, 0x00, 0xd0, 0xa9, 0xe0, - 0x02, 0x3b, 0x1a, 0x43, 0x00, 0x92, 0xe3, 0x69, 0x5b, 0x68, 0xdf, 0x60, - 0x70, 0x88, 0x84, 0x46, 0x18, 0x20, 0x62, 0x46, 0x50, 0x43, 0x58, 0x60, - 0x19, 0x60, 0x01, 0x21, 0x18, 0x68, 0x32, 0x69, 0x01, 0x43, 0x19, 0x60, - 0xa3, 0x69, 0x03, 0x20, 0x19, 0x68, 0x19, 0x60, 0x90, 0x21, 0x59, 0x60, - 0x1a, 0x62, 0x72, 0x69, 0x5a, 0x61, 0xb2, 0x69, 0x9a, 0x62, 0x00, 0x9a, - 0xda, 0x60, 0x04, 0x22, 0x99, 0x68, 0x0a, 0x43, 0x9a, 0x60, 0x22, 0x00, - 0x6b, 0x69, 0x14, 0x32, 0x63, 0x61, 0x5a, 0x62, 0xff, 0xf7, 0xee, 0xf9, - 0x2b, 0x68, 0xab, 0x42, 0x05, 0xd0, 0x6a, 0x69, 0x9b, 0x68, 0x92, 0x68, - 0x9a, 0x42, 0x00, 0xd2, 0x7b, 0xe0, 0x62, 0xb6, 0x3a, 0x00, 0x3b, 0x00, - 0x00, 0x20, 0x90, 0x32, 0x19, 0x88, 0x06, 0x33, 0x40, 0x18, 0x9a, 0x42, - 0xfa, 0xd1, 0xfe, 0xf7, 0xf3, 0xfc, 0x42, 0x49, 0xfe, 0xf7, 0xa8, 0xf9, - 0x3a, 0x00, 0x01, 0x90, 0x00, 0x20, 0x40, 0x4b, 0x92, 0x32, 0x19, 0x88, - 0x06, 0x33, 0x40, 0x18, 0x9a, 0x42, 0xfa, 0xd1, 0xfe, 0xf7, 0xe4, 0xfc, - 0x3a, 0x00, 0x00, 0x21, 0x3b, 0x4b, 0x03, 0x90, 0x94, 0x32, 0x00, 0x91, - 0x00, 0x98, 0x19, 0x88, 0x84, 0x46, 0x8c, 0x44, 0x61, 0x46, 0x06, 0x33, - 0x00, 0x91, 0x9a, 0x42, 0xf6, 0xd1, 0x80, 0x23, 0x35, 0x4a, 0x01, 0x98, - 0x51, 0x69, 0x4b, 0x40, 0x53, 0x61, 0x49, 0x46, 0xfd, 0xf7, 0x1e, 0xfe, - 0xfc, 0x21, 0x89, 0x05, 0xfe, 0xf7, 0x80, 0xf9, 0x51, 0x46, 0x81, 0x46, - 0xfd, 0xf7, 0x16, 0xfe, 0xfc, 0x21, 0x89, 0x05, 0xfe, 0xf7, 0x78, 0xf9, - 0x2c, 0x4b, 0x51, 0x46, 0x18, 0x60, 0x48, 0x46, 0xfe, 0xf7, 0x8c, 0xfa, - 0x40, 0x00, 0x2a, 0x49, 0x40, 0x08, 0xfe, 0xf7, 0x6d, 0xf9, 0x5b, 0x46, - 0x81, 0x46, 0x28, 0x49, 0x18, 0x68, 0xfe, 0xf7, 0x67, 0xf9, 0x01, 0x1c, - 0x48, 0x46, 0xfd, 0xf7, 0xfd, 0xfd, 0x5b, 0x46, 0x18, 0x60, 0x43, 0x46, - 0x1b, 0x68, 0x00, 0x98, 0x02, 0x93, 0xfe, 0xf7, 0xa3, 0xfc, 0x01, 0x1c, - 0x03, 0x98, 0xfe, 0xf7, 0x71, 0xfa, 0x1f, 0x49, 0xfe, 0xf7, 0x54, 0xf9, - 0x1e, 0x49, 0x81, 0x46, 0x02, 0x98, 0xfe, 0xf7, 0x4f, 0xf9, 0x01, 0x1c, - 0x48, 0x46, 0xfd, 0xf7, 0xe5, 0xfd, 0x43, 0x46, 0x18, 0x60, 0x72, 0xb6, - 0x63, 0x69, 0xd1, 0x46, 0x00, 0x2b, 0x00, 0xd0, 0x35, 0xe7, 0x01, 0x9b, - 0x9a, 0x46, 0x40, 0xe7, 0x1a, 0x43, 0x24, 0x23, 0x00, 0x92, 0x19, 0x43, - 0x53, 0xe7, 0x72, 0xb6, 0x12, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, 0xc0, 0x46, - 0x28, 0x06, 0x00, 0x20, 0x94, 0x10, 0x00, 0x20, 0xec, 0x56, 0x00, 0x08, - 0x3c, 0x12, 0x00, 0x20, 0x44, 0x12, 0x00, 0x20, 0xe8, 0x0f, 0x00, 0x20, - 0x08, 0x06, 0x00, 0x20, 0xb4, 0x56, 0x00, 0x08, 0xbe, 0xa4, 0x50, 0x37, - 0xea, 0x0f, 0x00, 0x20, 0xec, 0x0f, 0x00, 0x20, 0x00, 0x04, 0x00, 0x48, - 0x40, 0x12, 0x00, 0x20, 0x6f, 0x12, 0x03, 0x3b, 0xee, 0x7c, 0x7f, 0x3f, - 0x9c, 0x44, 0x34, 0x35, 0x48, 0xe1, 0x7a, 0x3f, 0xfc, 0x54, 0x00, 0x08, - 0xf0, 0xb5, 0x57, 0x46, 0x4e, 0x46, 0xde, 0x46, 0x45, 0x46, 0x00, 0x23, - 0xe0, 0xb5, 0x8d, 0xb0, 0x9a, 0x46, 0x99, 0x46, 0x00, 0x93, 0x72, 0xb6, - 0xb9, 0x4c, 0xba, 0x4d, 0x23, 0x78, 0x04, 0x3b, 0x01, 0x2b, 0x00, 0xd9, - 0xb0, 0xe0, 0x01, 0x23, 0x9b, 0x46, 0x27, 0x00, 0x03, 0x26, 0x10, 0x37, - 0x23, 0x78, 0x05, 0x2b, 0x00, 0xd1, 0x87, 0xe0, 0xe3, 0x6b, 0xda, 0x68, - 0x16, 0x42, 0x00, 0xd1, 0x7e, 0xe0, 0x03, 0x22, 0xd9, 0x68, 0x11, 0x42, - 0x00, 0xd1, 0xa1, 0xe0, 0xd8, 0x21, 0xda, 0x20, 0xdc, 0x26, 0x49, 0x00, - 0x40, 0x00, 0x76, 0x00, 0x59, 0x58, 0x18, 0x58, 0x9e, 0x59, 0x0a, 0x96, - 0xde, 0x26, 0x76, 0x00, 0x9e, 0x59, 0x20, 0x26, 0xde, 0x60, 0xde, 0x68, - 0x16, 0x42, 0x03, 0xd1, 0x02, 0x22, 0x5e, 0x69, 0x32, 0x43, 0x5a, 0x61, - 0x5b, 0x46, 0x4a, 0x08, 0x13, 0x40, 0x99, 0x46, 0x5b, 0x46, 0x0f, 0x27, - 0x8e, 0x08, 0x33, 0x40, 0x00, 0x93, 0x02, 0xab, 0x1b, 0x7d, 0x4a, 0x46, - 0xbb, 0x43, 0x57, 0x46, 0x3b, 0x43, 0x10, 0x27, 0x12, 0x01, 0xbb, 0x43, - 0x13, 0x43, 0x5a, 0x46, 0x16, 0x40, 0x20, 0x22, 0xdb, 0xb2, 0x76, 0x01, - 0x93, 0x43, 0x33, 0x43, 0x02, 0xae, 0x33, 0x75, 0x13, 0x42, 0x00, 0xd0, - 0x87, 0xe0, 0x02, 0xab, 0x1b, 0x8b, 0x49, 0x0d, 0xdb, 0x0a, 0xdb, 0x02, - 0x19, 0x43, 0x02, 0xab, 0x19, 0x83, 0x0f, 0x23, 0x03, 0x40, 0x9a, 0x46, - 0x2b, 0x68, 0xab, 0x42, 0x05, 0xd0, 0x6a, 0x69, 0x9b, 0x68, 0x92, 0x68, - 0x9a, 0x42, 0x00, 0xd2, 0x7b, 0xe0, 0x62, 0xb6, 0x4a, 0x46, 0x0f, 0x20, - 0x11, 0x01, 0x52, 0x46, 0x02, 0xab, 0x1b, 0x7d, 0x83, 0x43, 0x13, 0x43, - 0x10, 0x22, 0x93, 0x43, 0x0b, 0x43, 0x20, 0x21, 0x00, 0x9a, 0x8b, 0x43, - 0x52, 0x01, 0x13, 0x43, 0x02, 0xaa, 0x13, 0x75, 0x0b, 0x42, 0x39, 0xd0, - 0x03, 0x40, 0x02, 0x2b, 0x00, 0xd1, 0xd3, 0xe0, 0x00, 0x2b, 0x64, 0xd1, - 0xef, 0x22, 0x08, 0x9b, 0x12, 0x05, 0x01, 0x93, 0xdb, 0x00, 0xdb, 0x08, - 0x93, 0x42, 0x2b, 0xd1, 0xff, 0xf7, 0xac, 0xfc, 0x32, 0x20, 0xff, 0xf7, - 0xc9, 0xfc, 0xbf, 0xf3, 0x4f, 0x8f, 0x75, 0x4b, 0x75, 0x4a, 0xda, 0x60, - 0xbf, 0xf3, 0x4f, 0x8f, 0xc0, 0x46, 0xfd, 0xe7, 0x1a, 0x69, 0x16, 0x42, - 0x00, 0xd0, 0x7c, 0xe7, 0x6b, 0x69, 0x04, 0x20, 0x1f, 0x60, 0x62, 0x69, - 0x5a, 0x60, 0x13, 0x60, 0x63, 0x61, 0x6b, 0x69, 0x98, 0x46, 0xff, 0xf7, - 0x91, 0xf8, 0x43, 0x46, 0x5b, 0x6a, 0x00, 0x2b, 0x00, 0xd1, 0x63, 0xe7, - 0x2b, 0x68, 0xab, 0x42, 0x05, 0xd0, 0x6a, 0x69, 0x9b, 0x68, 0x92, 0x68, - 0x9a, 0x42, 0x00, 0xd2, 0x9a, 0xe0, 0x62, 0xb6, 0x72, 0xb6, 0x23, 0x78, - 0x04, 0x3b, 0x01, 0x2b, 0x00, 0xd8, 0x50, 0xe7, 0x72, 0xb6, 0x61, 0x4b, - 0x6b, 0x66, 0xfe, 0xe7, 0x19, 0x69, 0x11, 0x42, 0x9a, 0xd0, 0xe0, 0x21, - 0xe2, 0x20, 0xe4, 0x26, 0x49, 0x00, 0x40, 0x00, 0x76, 0x00, 0x59, 0x58, - 0x18, 0x58, 0x9e, 0x59, 0x0a, 0x96, 0xe6, 0x26, 0x76, 0x00, 0x9e, 0x59, - 0x20, 0x26, 0x1e, 0x61, 0x1e, 0x69, 0x16, 0x42, 0x00, 0xd0, 0x5d, 0xe7, - 0x10, 0x26, 0x5a, 0x69, 0x32, 0x43, 0x5a, 0x61, 0x58, 0xe7, 0x08, 0x9b, - 0xc9, 0x08, 0x01, 0x93, 0x5b, 0x0f, 0x5b, 0x07, 0x19, 0x43, 0x08, 0x91, - 0x77, 0xe7, 0x72, 0xb6, 0x4e, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, 0x01, 0x2b, - 0xcc, 0xd1, 0x08, 0x9b, 0x4c, 0x4a, 0x01, 0x93, 0xdb, 0x00, 0xdb, 0x08, - 0x93, 0x42, 0xc5, 0xd1, 0x04, 0xa8, 0xff, 0xf7, 0xb5, 0xfd, 0x20, 0x22, - 0x02, 0xab, 0x9b, 0x18, 0x1b, 0x78, 0x02, 0xaa, 0x13, 0x73, 0x46, 0x4b, - 0x1a, 0x69, 0x12, 0x06, 0x03, 0xd5, 0x45, 0x4a, 0x5a, 0x60, 0x45, 0x4a, - 0x5a, 0x60, 0x42, 0x4b, 0x59, 0x46, 0xda, 0x68, 0x0a, 0x42, 0xfb, 0xd1, - 0x02, 0x22, 0x19, 0x69, 0x0a, 0x43, 0x1a, 0x61, 0xf8, 0x22, 0xd2, 0x01, - 0x5a, 0x61, 0x40, 0x22, 0x19, 0x69, 0x0a, 0x43, 0x1a, 0x61, 0xc0, 0x46, - 0x39, 0x4b, 0x59, 0x46, 0xda, 0x68, 0x0a, 0x42, 0xfb, 0xd1, 0x02, 0x21, - 0x1a, 0x69, 0x8a, 0x43, 0x1a, 0x61, 0x1a, 0x69, 0x7e, 0x31, 0x0a, 0x43, - 0x1a, 0x61, 0x1a, 0x69, 0x0a, 0x42, 0x03, 0xd0, 0x32, 0x4a, 0x5a, 0x60, - 0x32, 0x4a, 0x5a, 0x60, 0x2f, 0x4a, 0x59, 0x46, 0x58, 0x46, 0xd3, 0x68, - 0x19, 0x40, 0x03, 0x42, 0xf9, 0xd1, 0x2c, 0x4a, 0x08, 0x20, 0x5e, 0x46, - 0x02, 0xab, 0x1b, 0x18, 0x58, 0x5a, 0x13, 0x69, 0x33, 0x43, 0x13, 0x61, - 0x2a, 0x4b, 0x58, 0x52, 0x58, 0x46, 0xd3, 0x68, 0x18, 0x42, 0xfb, 0xd1, - 0x13, 0x69, 0x02, 0x31, 0x83, 0x43, 0x13, 0x61, 0x08, 0x29, 0xeb, 0xd1, - 0x80, 0x23, 0x11, 0x69, 0x02, 0xa8, 0x0b, 0x43, 0x13, 0x61, 0xff, 0xf7, - 0x5f, 0xfd, 0x22, 0x4b, 0x02, 0xaa, 0x03, 0xca, 0x03, 0xc3, 0xff, 0xf7, - 0xe9, 0xfb, 0x65, 0xe7, 0x72, 0xb6, 0x18, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, - 0x08, 0x9b, 0x1d, 0x4a, 0x01, 0x93, 0xdb, 0x00, 0xdb, 0x08, 0x93, 0x42, - 0x00, 0xd0, 0x59, 0xe7, 0x02, 0xab, 0x5b, 0x18, 0x18, 0x78, 0xfe, 0xf7, - 0xab, 0xfa, 0x18, 0x49, 0x06, 0x1c, 0xfd, 0xf7, 0xff, 0xfb, 0x00, 0x28, - 0x0e, 0xd1, 0x16, 0x49, 0x30, 0x1c, 0xfd, 0xf7, 0x9f, 0xff, 0x21, 0x22, - 0x14, 0x4b, 0x18, 0x60, 0x02, 0xab, 0x9b, 0x18, 0x5a, 0x46, 0x1b, 0x78, - 0x13, 0x40, 0x12, 0x4a, 0x13, 0x70, 0x3f, 0xe7, 0x11, 0x48, 0xf2, 0xe7, - 0x4c, 0x06, 0x00, 0x20, 0x94, 0x10, 0x00, 0x20, 0x00, 0xed, 0x00, 0xe0, - 0x04, 0x00, 0xfa, 0x05, 0xf8, 0x56, 0x00, 0x08, 0x08, 0x55, 0x00, 0x08, - 0x00, 0x00, 0xf4, 0x0e, 0x00, 0x20, 0x02, 0x40, 0x23, 0x01, 0x67, 0x45, - 0xab, 0x89, 0xef, 0xcd, 0x00, 0x7c, 0x00, 0x08, 0xd8, 0x11, 0x00, 0x20, - 0x00, 0x00, 0xf5, 0x0e, 0x00, 0x00, 0x48, 0x42, 0xcd, 0xcc, 0xcc, 0x3d, - 0x04, 0x06, 0x00, 0x20, 0xb0, 0x08, 0x00, 0x20, 0x00, 0x00, 0x60, 0x41, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xb5, 0x4e, 0x46, - 0x45, 0x46, 0x57, 0x46, 0xde, 0x46, 0x5b, 0x4b, 0xe0, 0xb5, 0x98, 0x46, - 0x5a, 0x4b, 0x5b, 0x4f, 0x99, 0x46, 0x5b, 0x4e, 0x5b, 0x4d, 0x87, 0xb0, - 0x43, 0x46, 0x1a, 0x79, 0x03, 0x9b, 0x81, 0x32, 0x01, 0x93, 0x5b, 0x0f, - 0xff, 0x32, 0x5b, 0x07, 0x13, 0x43, 0x3f, 0x22, 0x03, 0x93, 0x02, 0xab, - 0x1b, 0x78, 0x00, 0x21, 0x93, 0x43, 0x28, 0x22, 0x13, 0x43, 0x02, 0xaa, - 0x13, 0x70, 0x04, 0xa8, 0x08, 0x22, 0x00, 0xf0, 0xb3, 0xff, 0x3c, 0x68, - 0xfe, 0xf7, 0x18, 0xfc, 0x4e, 0x49, 0xfd, 0xf7, 0x3f, 0xff, 0xfd, 0xf7, - 0xbf, 0xfb, 0x02, 0x3c, 0x40, 0xba, 0x02, 0xab, 0x18, 0x81, 0x63, 0x42, - 0x63, 0x41, 0x80, 0x22, 0x5b, 0x42, 0x13, 0x40, 0x02, 0xa9, 0x02, 0x33, - 0xca, 0x73, 0x8b, 0x73, 0xf3, 0x89, 0x9b, 0x08, 0x8b, 0x72, 0xfe, 0xf7, - 0x71, 0xfb, 0xfe, 0xf7, 0x0b, 0xfa, 0x80, 0x22, 0xff, 0x23, 0xd2, 0x00, - 0x90, 0x42, 0x08, 0xda, 0x00, 0x23, 0xc2, 0x1c, 0x05, 0xdb, 0xc2, 0x17, - 0x03, 0x33, 0x13, 0x40, 0x18, 0x18, 0x80, 0x10, 0xc3, 0xb2, 0x02, 0xaa, - 0xd3, 0x72, 0x3b, 0x49, 0x28, 0x68, 0xfd, 0xf7, 0x15, 0xff, 0xfe, 0xf7, - 0xf5, 0xf9, 0x02, 0xab, 0x18, 0x73, 0x18, 0x00, 0xff, 0xf7, 0x34, 0xfb, - 0x43, 0x46, 0x1b, 0x79, 0x08, 0x24, 0x1a, 0x00, 0x9b, 0x46, 0x03, 0x9b, - 0x71, 0x32, 0x01, 0x93, 0x5b, 0x0f, 0xff, 0x32, 0x5b, 0x07, 0x13, 0x43, - 0x3f, 0x22, 0x03, 0x93, 0x02, 0xab, 0x1b, 0x78, 0x92, 0x46, 0x93, 0x43, - 0x23, 0x43, 0x02, 0xaa, 0x13, 0x70, 0x00, 0x21, 0x08, 0x22, 0x04, 0xa8, - 0x00, 0xf0, 0x62, 0xff, 0xfe, 0xf7, 0xc8, 0xfb, 0x26, 0x49, 0xfd, 0xf7, - 0xef, 0xfe, 0xfd, 0xf7, 0x6f, 0xfb, 0x02, 0xab, 0x18, 0x81, 0x00, 0x23, - 0x02, 0xaa, 0x53, 0x81, 0x3b, 0x68, 0x02, 0x3b, 0x5a, 0x42, 0x53, 0x41, - 0x02, 0xaa, 0x13, 0x73, 0x10, 0x00, 0xff, 0xf7, 0x05, 0xfb, 0x5a, 0x46, - 0x03, 0x9b, 0x91, 0x32, 0x01, 0x93, 0x5b, 0x0f, 0xff, 0x32, 0x5b, 0x07, - 0x13, 0x43, 0x52, 0x46, 0x03, 0x93, 0x02, 0xab, 0x1b, 0x78, 0x00, 0x21, - 0x93, 0x43, 0x1c, 0x43, 0x02, 0xab, 0x37, 0x3a, 0x1c, 0x70, 0x04, 0xa8, - 0x00, 0xf0, 0x38, 0xff, 0xfe, 0xf7, 0x0e, 0xfb, 0xfd, 0xf7, 0x48, 0xfb, - 0x02, 0xab, 0x12, 0x49, 0x18, 0x81, 0x28, 0x68, 0xfd, 0xf7, 0xc0, 0xfe, - 0xfd, 0xf7, 0x40, 0xfb, 0x02, 0xab, 0x58, 0x81, 0xf3, 0x89, 0x02, 0xaa, - 0x9b, 0x08, 0x13, 0x73, 0x4b, 0x46, 0x1b, 0x78, 0x10, 0x00, 0x53, 0x73, - 0xff, 0xf7, 0xd8, 0xfa, 0x64, 0x20, 0xff, 0xf7, 0xfd, 0xfa, 0x51, 0xe7, - 0xd8, 0x11, 0x00, 0x20, 0xec, 0x06, 0x00, 0x20, 0xb8, 0x0f, 0x00, 0x20, - 0xbc, 0x0f, 0x00, 0x20, 0x40, 0x12, 0x00, 0x20, 0x00, 0x40, 0x1c, 0x46, - 0x00, 0x00, 0x48, 0x43, 0x00, 0x00, 0x7a, 0x44, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x15, 0x4b, 0x16, 0x4a, 0x16, 0x49, 0x1a, 0x60, - 0x16, 0x4a, 0x17, 0x48, 0x5a, 0x60, 0x17, 0x4a, 0x9a, 0x60, 0x00, 0x22, - 0xda, 0x60, 0x16, 0x4a, 0x1a, 0x61, 0x16, 0x4b, 0x16, 0x4a, 0x99, 0x60, - 0x80, 0x21, 0x1a, 0x60, 0x00, 0x22, 0xc9, 0x00, 0x1a, 0x71, 0x99, 0x81, - 0x13, 0x4b, 0x18, 0x60, 0x13, 0x48, 0x58, 0x60, 0x98, 0x60, 0x13, 0x48, - 0xd8, 0x60, 0x13, 0x48, 0x18, 0x61, 0x13, 0x4b, 0x13, 0x48, 0x1a, 0x71, - 0x18, 0x60, 0x13, 0x48, 0x99, 0x81, 0x98, 0x60, 0x12, 0x49, 0x13, 0x4b, - 0x19, 0x60, 0x1a, 0x71, 0x70, 0x47, 0xc0, 0x46, 0xcc, 0x0f, 0x00, 0x20, - 0x6f, 0x12, 0x03, 0x3b, 0x80, 0x1a, 0x06, 0x00, 0x00, 0x00, 0x48, 0x42, - 0xcd, 0xcc, 0x4c, 0x3d, 0x00, 0x40, 0x1c, 0x46, 0x00, 0x00, 0x20, 0x41, - 0x2c, 0x12, 0x00, 0x20, 0x8c, 0x06, 0x00, 0x20, 0x78, 0x10, 0x00, 0x20, - 0x9a, 0x99, 0x99, 0x3e, 0x0a, 0xd7, 0x23, 0x3c, 0x00, 0x00, 0x40, 0x40, - 0xbc, 0x0f, 0x00, 0x20, 0xa8, 0x06, 0x00, 0x20, 0x00, 0x6c, 0xdc, 0x02, - 0x01, 0xbe, 0xad, 0xde, 0xd8, 0x11, 0x00, 0x20, 0xf2, 0x4b, 0xf0, 0xb5, - 0x99, 0x6a, 0xde, 0x46, 0x57, 0x46, 0x4e, 0x46, 0x45, 0x46, 0xf0, 0x4a, - 0xe0, 0xb5, 0x0a, 0x43, 0x9c, 0x21, 0x9a, 0x62, 0x9a, 0x6a, 0xc9, 0x03, - 0x0a, 0x40, 0x9a, 0x62, 0x9a, 0x6a, 0x1a, 0x69, 0x01, 0x22, 0x00, 0x21, - 0x52, 0x42, 0x1a, 0x61, 0x1a, 0x69, 0x19, 0x61, 0x1a, 0x69, 0xd8, 0x68, - 0xe7, 0x4a, 0x83, 0xb0, 0x02, 0x43, 0x80, 0x20, 0xda, 0x60, 0xda, 0x68, - 0xc0, 0x03, 0x02, 0x40, 0xda, 0x60, 0xda, 0x68, 0x80, 0x22, 0xd8, 0x69, - 0x52, 0x05, 0x02, 0x43, 0xda, 0x61, 0xda, 0x69, 0x80, 0x22, 0xe0, 0x48, - 0x52, 0x00, 0x04, 0x68, 0x22, 0x43, 0x02, 0x60, 0xc0, 0x20, 0x1a, 0x6a, - 0x80, 0x00, 0x02, 0x40, 0x01, 0x38, 0xff, 0x38, 0x82, 0x42, 0x03, 0xd0, - 0x80, 0x22, 0x52, 0x02, 0x1a, 0x62, 0x19, 0x62, 0x80, 0x22, 0xd4, 0x4b, - 0x12, 0x02, 0x19, 0x6a, 0x11, 0x42, 0x07, 0xd1, 0x80, 0x21, 0x18, 0x6a, - 0x89, 0x00, 0x01, 0x43, 0x19, 0x62, 0x19, 0x6a, 0x0a, 0x43, 0x1a, 0x62, - 0x00, 0x24, 0xd1, 0x4b, 0x01, 0x22, 0x99, 0x46, 0x1c, 0x60, 0x5c, 0x60, - 0xcf, 0x4b, 0x52, 0x42, 0x1c, 0x60, 0x4b, 0x46, 0x9c, 0x60, 0xce, 0x4b, - 0x03, 0x21, 0x1c, 0x60, 0x4b, 0x46, 0x1c, 0x61, 0xcc, 0x4b, 0x05, 0x20, - 0x1c, 0x60, 0x4b, 0x46, 0x9c, 0x61, 0xcb, 0x4b, 0xcb, 0x4d, 0x1c, 0x60, - 0x4b, 0x46, 0x1c, 0x62, 0xca, 0x4b, 0x1c, 0x60, 0x4b, 0x46, 0x9c, 0x62, - 0xc9, 0x4b, 0x5a, 0x60, 0xfe, 0xf7, 0xcc, 0xfb, 0x03, 0x21, 0x06, 0x20, - 0xfe, 0xf7, 0xc8, 0xfb, 0x03, 0x21, 0x07, 0x20, 0xfe, 0xf7, 0xc4, 0xfb, - 0x03, 0x21, 0x1b, 0x20, 0xfe, 0xf7, 0xc0, 0xfb, 0x03, 0x21, 0x1c, 0x20, - 0xfe, 0xf7, 0xbc, 0xfb, 0x03, 0x21, 0x1d, 0x20, 0xfe, 0xf7, 0xb8, 0xfb, - 0x01, 0x23, 0xbe, 0x4f, 0x02, 0x21, 0x3b, 0x70, 0xbd, 0x4b, 0x0c, 0x20, - 0x3b, 0x62, 0x7c, 0x60, 0xbc, 0x60, 0xfc, 0x60, 0x3c, 0x61, 0x7c, 0x61, - 0xbd, 0x61, 0xfc, 0x61, 0xfe, 0xf7, 0xa8, 0xfb, 0x80, 0x22, 0xaa, 0x4b, - 0x92, 0x00, 0x99, 0x69, 0x0a, 0x43, 0x9a, 0x61, 0x9b, 0x69, 0xb5, 0x4b, - 0x1c, 0x60, 0xfe, 0xf7, 0x55, 0xf9, 0x80, 0x23, 0xaa, 0x68, 0x1b, 0x06, - 0x13, 0x43, 0xab, 0x60, 0x2b, 0x00, 0x9a, 0x68, 0x00, 0x2a, 0xfc, 0xdb, - 0x00, 0x25, 0xa0, 0x4c, 0x9d, 0x60, 0xa3, 0x69, 0xad, 0x4a, 0xae, 0x4e, - 0x13, 0x40, 0xa3, 0x61, 0xa3, 0x69, 0x01, 0x23, 0x98, 0x46, 0x33, 0x70, - 0x33, 0x00, 0x08, 0x33, 0xb3, 0x60, 0xf3, 0x60, 0x33, 0x00, 0x10, 0x33, - 0x33, 0x61, 0x73, 0x61, 0xa7, 0x4b, 0xb5, 0x61, 0x03, 0x21, 0x1e, 0x20, - 0x75, 0x62, 0xf5, 0x61, 0x35, 0x62, 0xb5, 0x62, 0xf5, 0x62, 0x35, 0x63, - 0x75, 0x63, 0xb5, 0x63, 0xf3, 0x63, 0x75, 0x60, 0xfe, 0xf7, 0x70, 0xfb, - 0x80, 0x23, 0x80, 0x21, 0x40, 0x46, 0xe2, 0x69, 0x9b, 0x04, 0x13, 0x43, - 0xe3, 0x61, 0xe3, 0x69, 0xf3, 0x6b, 0x89, 0x00, 0x5a, 0x58, 0x12, 0x0c, - 0x12, 0x04, 0x02, 0x43, 0x5a, 0x50, 0x5a, 0x58, 0x98, 0x48, 0x12, 0x0c, - 0x12, 0x04, 0x02, 0x43, 0x5a, 0x50, 0x90, 0x22, 0x40, 0x46, 0x92, 0x00, - 0x9d, 0x50, 0x04, 0x32, 0x9d, 0x50, 0x40, 0x3a, 0x9d, 0x50, 0x10, 0x32, - 0x9d, 0x50, 0x08, 0x3a, 0x98, 0x50, 0x10, 0x32, 0x98, 0x50, 0x5a, 0x58, - 0x82, 0x43, 0x5a, 0x50, 0xe3, 0x69, 0x8e, 0x4a, 0x8e, 0x49, 0x13, 0x40, - 0x42, 0x46, 0xe3, 0x61, 0xe3, 0x69, 0x8d, 0x4b, 0x03, 0x32, 0x18, 0x70, - 0x1a, 0x74, 0x99, 0x61, 0x5d, 0x60, 0xdd, 0x60, 0x8a, 0x4b, 0x41, 0x46, - 0x1a, 0x74, 0x8a, 0x4a, 0x18, 0x70, 0x9a, 0x61, 0x01, 0x22, 0x5d, 0x60, - 0x92, 0x46, 0xdd, 0x60, 0x87, 0x4a, 0x88, 0x4b, 0x01, 0x31, 0x18, 0x80, - 0x9a, 0x60, 0x87, 0x4a, 0x9d, 0x70, 0xda, 0x60, 0x08, 0x22, 0x5a, 0x61, - 0x1a, 0x61, 0x5d, 0x60, 0x9d, 0x61, 0xdd, 0x61, 0xe3, 0x69, 0x83, 0x4a, - 0x03, 0x43, 0xe3, 0x61, 0xe3, 0x69, 0x93, 0x68, 0x03, 0x43, 0x93, 0x60, - 0x80, 0x23, 0x80, 0x4a, 0xdb, 0x05, 0x9a, 0x62, 0x01, 0x22, 0x52, 0x42, - 0xda, 0x62, 0x9d, 0x61, 0x5d, 0x63, 0xdd, 0x60, 0x5d, 0x60, 0x58, 0x61, - 0x18, 0x60, 0x0e, 0x30, 0x93, 0x46, 0xfe, 0xf7, 0x0b, 0xfb, 0x79, 0x4b, - 0x79, 0x4a, 0x7a, 0x49, 0x1a, 0x60, 0x7a, 0x4a, 0x7a, 0x4c, 0x5a, 0x60, - 0x7a, 0x4b, 0x7b, 0x4a, 0x5d, 0x60, 0x1a, 0x60, 0x1a, 0x00, 0x0c, 0x32, - 0xda, 0x60, 0x1a, 0x61, 0x78, 0x4a, 0x9d, 0x60, 0x5d, 0x61, 0x13, 0x6a, - 0x40, 0x46, 0x0b, 0x40, 0x13, 0x62, 0x23, 0x00, 0x18, 0x33, 0xa3, 0x61, - 0xe3, 0x61, 0x5b, 0x46, 0x23, 0x62, 0x73, 0x4b, 0x22, 0x00, 0x23, 0x64, - 0x23, 0x00, 0x50, 0x33, 0x23, 0x65, 0x23, 0x00, 0x80, 0x21, 0x28, 0x32, - 0x54, 0x33, 0x21, 0x63, 0x21, 0x66, 0xe2, 0x60, 0x24, 0x60, 0x64, 0x60, - 0xa5, 0x60, 0x65, 0x62, 0x65, 0x66, 0xe5, 0x65, 0xa4, 0x63, 0x63, 0x65, - 0xa3, 0x65, 0x69, 0x4b, 0x93, 0x46, 0x63, 0x64, 0x48, 0x23, 0xe0, 0x52, - 0x50, 0x46, 0x02, 0x33, 0xe0, 0x54, 0xac, 0x20, 0x65, 0x4b, 0x62, 0x61, - 0x1b, 0x50, 0x40, 0x38, 0x84, 0x46, 0x9c, 0x44, 0x62, 0x46, 0x38, 0x30, - 0x1a, 0x50, 0x42, 0x46, 0x61, 0x48, 0x5d, 0x50, 0xd8, 0x67, 0x61, 0x48, - 0x0c, 0x31, 0x58, 0x50, 0x0c, 0x31, 0x5a, 0x50, 0x02, 0x20, 0x30, 0x31, - 0x5a, 0x50, 0x52, 0x46, 0x04, 0x39, 0x5d, 0x50, 0x14, 0x39, 0x58, 0x52, - 0x02, 0x31, 0x5a, 0x54, 0x5a, 0x46, 0x5a, 0x48, 0x0a, 0x39, 0x58, 0x50, - 0x0c, 0x39, 0x5c, 0x50, 0x04, 0x31, 0x5a, 0x50, 0x19, 0x00, 0xb8, 0x22, - 0xb8, 0x31, 0x99, 0x50, 0x1a, 0x00, 0x18, 0x00, 0xbc, 0x21, 0xbc, 0x32, - 0x5a, 0x50, 0x90, 0x30, 0x04, 0x31, 0x5a, 0x50, 0x60, 0x63, 0x20, 0x61, - 0xfe, 0xf7, 0x2c, 0xfc, 0x23, 0x68, 0xa3, 0x42, 0x05, 0xd0, 0x62, 0x69, - 0x9b, 0x68, 0x92, 0x68, 0x9a, 0x42, 0x00, 0xd2, 0x55, 0xe1, 0x62, 0xb6, - 0x72, 0xb6, 0x3b, 0x78, 0x5a, 0x1e, 0x01, 0x2a, 0x00, 0xd9, 0x56, 0xe1, - 0x00, 0x21, 0x79, 0x60, 0x01, 0x2b, 0x00, 0xd1, 0x05, 0xe1, 0x02, 0x23, - 0x3b, 0x70, 0x23, 0x68, 0xa3, 0x42, 0x05, 0xd0, 0x62, 0x69, 0x9b, 0x68, - 0x92, 0x68, 0x9a, 0x42, 0x00, 0xd2, 0x42, 0xe1, 0x62, 0xb6, 0x3f, 0x4a, - 0x85, 0x21, 0x3f, 0x48, 0xfe, 0xf7, 0xd6, 0xfc, 0x3e, 0x48, 0xfe, 0xf7, - 0x9b, 0xfa, 0x00, 0x20, 0xfe, 0xf7, 0x30, 0xf9, 0x3c, 0x4d, 0x28, 0x00, - 0xfe, 0xf7, 0x94, 0xfa, 0x28, 0x00, 0x6d, 0x46, 0x00, 0x21, 0xfe, 0xf7, - 0xff, 0xf8, 0x81, 0x21, 0x38, 0x4a, 0x39, 0x48, 0xfe, 0xf7, 0xc2, 0xfc, - 0x38, 0x4a, 0x84, 0x21, 0x38, 0x48, 0xfe, 0xf7, 0xbd, 0xfc, 0x38, 0x4f, - 0x28, 0x00, 0xff, 0xf7, 0x09, 0xfa, 0x0c, 0xcd, 0x0c, 0xc7, 0x72, 0xb6, - 0x35, 0x78, 0x01, 0x2d, 0x6c, 0xd0, 0x67, 0xe0, 0x00, 0x10, 0x02, 0x40, - 0xff, 0xff, 0xb1, 0xff, 0xff, 0xff, 0xbf, 0xff, 0x00, 0x70, 0x00, 0x40, - 0xfc, 0x11, 0x00, 0x20, 0x08, 0x00, 0x02, 0x40, 0x1c, 0x00, 0x02, 0x40, - 0x30, 0x00, 0x02, 0x40, 0x44, 0x00, 0x02, 0x40, 0x00, 0x24, 0x01, 0x40, - 0x58, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x40, 0x28, 0x06, 0x00, 0x20, - 0x8a, 0x25, 0x00, 0x00, 0x08, 0x27, 0x01, 0x40, 0xff, 0xfd, 0xff, 0xff, - 0x4c, 0x06, 0x00, 0x20, 0x00, 0x64, 0x00, 0x40, 0x01, 0x0e, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xfd, 0x00, 0x2c, 0x01, 0x40, 0x8c, 0x06, 0x00, 0x20, - 0xa8, 0x06, 0x00, 0x20, 0x00, 0x04, 0x00, 0x40, 0x00, 0x38, 0x01, 0x40, - 0xc4, 0x06, 0x00, 0x20, 0x00, 0x6c, 0xdc, 0x02, 0x00, 0x58, 0x01, 0x40, - 0xbf, 0x12, 0x00, 0x00, 0xd0, 0x11, 0x00, 0x20, 0x48, 0x12, 0x00, 0x20, - 0xff, 0xff, 0x00, 0xff, 0x00, 0x19, 0x00, 0x20, 0x94, 0x10, 0x00, 0x20, - 0xe0, 0x11, 0x00, 0x20, 0x01, 0x31, 0x00, 0x08, 0x00, 0xed, 0x00, 0xe0, - 0x64, 0x57, 0x00, 0x08, 0x00, 0x04, 0x00, 0x20, 0x00, 0x11, 0x00, 0x20, - 0x61, 0x2a, 0x00, 0x08, 0xc9, 0x19, 0x00, 0x08, 0xf4, 0x54, 0x00, 0x08, - 0x41, 0x3e, 0x00, 0x08, 0xf8, 0x0d, 0x00, 0x20, 0xbc, 0x0f, 0x00, 0x20, - 0x2c, 0x12, 0x00, 0x20, 0xa1, 0x3b, 0x00, 0x08, 0x38, 0x0c, 0x00, 0x20, - 0x51, 0x3b, 0x00, 0x08, 0xf0, 0x06, 0x00, 0x20, 0xd8, 0x11, 0x00, 0x20, - 0x72, 0xb6, 0x5e, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x02, 0x22, 0x80, 0x21, - 0x32, 0x70, 0x5c, 0x4a, 0x89, 0x04, 0x72, 0x60, 0x5b, 0x4a, 0x08, 0x27, - 0xd0, 0x69, 0x01, 0x43, 0xd1, 0x61, 0xd2, 0x69, 0xf2, 0x6b, 0x15, 0x60, - 0x03, 0xe0, 0x29, 0x00, 0x38, 0x00, 0xfe, 0xf7, 0xa3, 0xfe, 0xf3, 0x6b, - 0x5a, 0x68, 0x2a, 0x42, 0xf7, 0xd0, 0x72, 0x68, 0x51, 0x68, 0x12, 0x68, - 0xd9, 0x61, 0x1a, 0x60, 0x51, 0x4a, 0x5a, 0x61, 0x04, 0x23, 0x33, 0x70, + 0x70, 0xb5, 0x0d, 0x4c, 0x0d, 0x4e, 0x0e, 0x4d, 0x0e, 0xe0, 0x32, 0x68, + 0x0d, 0x49, 0x28, 0x00, 0xfe, 0xf7, 0xee, 0xff, 0x0c, 0x49, 0xfe, 0xf7, + 0xed, 0xfb, 0xfe, 0xf7, 0xcd, 0xfe, 0xff, 0xf7, 0x77, 0xf8, 0x14, 0x20, + 0xff, 0xf7, 0xcc, 0xff, 0x23, 0x68, 0x02, 0x2b, 0xed, 0xd0, 0x00, 0x20, + 0xff, 0xf7, 0x6e, 0xf8, 0xf5, 0xe7, 0xc0, 0x46, 0xbc, 0x0f, 0x00, 0x20, + 0xf0, 0x0f, 0x00, 0x20, 0xd0, 0x0f, 0x00, 0x20, 0x66, 0x66, 0xe6, 0x3e, + 0x00, 0x00, 0x7a, 0x44, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xb5, 0xde, 0x46, + 0x57, 0x46, 0x4e, 0x46, 0x45, 0x46, 0x63, 0x48, 0xe0, 0xb5, 0xff, 0xf7, + 0xaf, 0xff, 0x62, 0x4b, 0x62, 0x4e, 0x99, 0x46, 0x62, 0x4b, 0x63, 0x4f, + 0x9a, 0x46, 0x63, 0x4b, 0x9b, 0x46, 0x63, 0x4b, 0x98, 0x46, 0x2c, 0xe0, + 0x5b, 0x46, 0x62, 0x48, 0x19, 0x68, 0xfe, 0xf7, 0xef, 0xf9, 0xfe, 0x21, + 0x89, 0x05, 0xfe, 0xf7, 0xcf, 0xfc, 0x01, 0x1c, 0x5e, 0x48, 0xfe, 0xf7, + 0xe7, 0xf9, 0x33, 0x68, 0x04, 0x1c, 0x01, 0x2b, 0x62, 0xd0, 0x02, 0x2b, + 0x3f, 0xd0, 0x00, 0x2b, 0x2e, 0xd0, 0x00, 0x24, 0x43, 0x46, 0x1d, 0x68, + 0x58, 0x49, 0x28, 0x1c, 0xfd, 0xf7, 0xfc, 0xff, 0x00, 0x28, 0x20, 0xd0, + 0x29, 0x1c, 0x20, 0x1c, 0xfe, 0xf7, 0xd2, 0xf9, 0x01, 0x1c, 0xfe, 0xf7, + 0x99, 0xfb, 0x01, 0x1c, 0x38, 0x00, 0xfe, 0xf7, 0xfb, 0xff, 0xfa, 0x20, + 0x40, 0x00, 0xff, 0xf7, 0x77, 0xff, 0x4b, 0x46, 0x1b, 0x78, 0x00, 0x2b, + 0xce, 0xd1, 0x33, 0x60, 0x43, 0x46, 0x51, 0x46, 0x64, 0x22, 0xff, 0x24, + 0x1d, 0x68, 0x0a, 0x60, 0x28, 0x1c, 0x48, 0x49, 0xa4, 0x05, 0xfd, 0xf7, + 0xdb, 0xff, 0x00, 0x28, 0xde, 0xd1, 0x00, 0x21, 0x38, 0x00, 0xfe, 0xf7, + 0xe1, 0xff, 0xe4, 0xe7, 0x53, 0x46, 0x52, 0x46, 0x1b, 0x68, 0x01, 0x3b, + 0x13, 0x60, 0x00, 0x2b, 0x44, 0xdd, 0x40, 0x49, 0xfd, 0xf7, 0xca, 0xff, + 0x00, 0x28, 0x3f, 0xd1, 0xff, 0x24, 0xa4, 0x05, 0xc2, 0xe7, 0x3d, 0x49, + 0xfd, 0xf7, 0xc2, 0xff, 0x00, 0x28, 0x4a, 0xd1, 0x3b, 0x49, 0x20, 0x1c, + 0xfd, 0xf7, 0xd0, 0xff, 0x00, 0x28, 0x4b, 0xd1, 0x39, 0x49, 0x20, 0x1c, + 0xfe, 0xf7, 0x76, 0xfc, 0x38, 0x49, 0x02, 0x1c, 0x38, 0x48, 0xfe, 0xf7, + 0x55, 0xff, 0x01, 0x1c, 0x37, 0x48, 0xfe, 0xf7, 0x6d, 0xfc, 0x04, 0x1c, + 0x36, 0x49, 0x20, 0x1c, 0xfd, 0xf7, 0xb2, 0xff, 0x00, 0x28, 0xa3, 0xd1, + 0x33, 0x4c, 0xa1, 0xe7, 0x2b, 0x49, 0xfd, 0xf7, 0xa1, 0xff, 0x00, 0x28, + 0x26, 0xd1, 0x53, 0x46, 0x1b, 0x68, 0x00, 0x2b, 0x33, 0xd0, 0x52, 0x46, + 0x01, 0x3b, 0x13, 0x60, 0x2d, 0x4b, 0x28, 0x49, 0x1c, 0x68, 0x20, 0x1c, + 0xfd, 0xf7, 0x92, 0xff, 0x00, 0x28, 0xe3, 0xd0, 0x20, 0x1c, 0x2a, 0x49, + 0xfd, 0xf7, 0xcc, 0xff, 0x27, 0x4b, 0x04, 0x1c, 0x18, 0x60, 0xdb, 0xe7, + 0x96, 0x23, 0x52, 0x46, 0xdb, 0x00, 0x81, 0x24, 0x13, 0x60, 0x01, 0x23, + 0xe4, 0x05, 0x33, 0x60, 0x20, 0x1c, 0x22, 0x49, 0xfd, 0xf7, 0xbc, 0xff, + 0x1f, 0x4b, 0x04, 0x1c, 0x18, 0x60, 0xcb, 0xe7, 0x02, 0x23, 0x33, 0x60, + 0xba, 0xe7, 0x04, 0x23, 0x1d, 0x4a, 0x00, 0x24, 0x13, 0x70, 0x01, 0x3b, + 0x33, 0x60, 0x6b, 0xe7, 0x05, 0x23, 0x1a, 0x4a, 0x00, 0x24, 0x13, 0x70, + 0x02, 0x3b, 0x33, 0x60, 0x64, 0xe7, 0x17, 0x4a, 0x03, 0x33, 0x00, 0x24, + 0x13, 0x70, 0x33, 0x60, 0x5e, 0xe7, 0xc0, 0x46, 0x10, 0x27, 0x00, 0x00, + 0xb0, 0x08, 0x00, 0x20, 0xbc, 0x0f, 0x00, 0x20, 0x00, 0x06, 0x00, 0x20, + 0x34, 0x12, 0x00, 0x20, 0xec, 0x0f, 0x00, 0x20, 0x04, 0x06, 0x00, 0x20, + 0x33, 0x33, 0x53, 0x40, 0x00, 0xe0, 0xab, 0x46, 0x00, 0x00, 0xb8, 0x41, + 0x00, 0x00, 0xff, 0x43, 0x00, 0x00, 0x20, 0x43, 0x00, 0x80, 0x31, 0x44, + 0x00, 0x00, 0x20, 0x41, 0x00, 0x00, 0x96, 0x43, 0x84, 0x10, 0x00, 0x20, + 0x00, 0x00, 0xf0, 0x40, 0x00, 0x00, 0x30, 0x41, 0xe8, 0x06, 0x00, 0x20, + 0x90, 0xc2, 0x75, 0x3c, 0xec, 0x06, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0xb5, 0x01, 0x25, 0x2b, 0x00, 0x8b, 0x40, 0xc6, 0x46, 0x04, 0x00, + 0x98, 0x46, 0x0e, 0x00, 0x00, 0xb5, 0x19, 0x00, 0x40, 0x22, 0xfe, 0xf7, + 0xdb, 0xff, 0x0a, 0x20, 0xff, 0xf7, 0xb0, 0xfe, 0x20, 0x22, 0x41, 0x46, + 0x20, 0x00, 0x27, 0x69, 0xfe, 0xf7, 0xd2, 0xff, 0x0a, 0x20, 0xff, 0xf7, + 0xa7, 0xfe, 0x23, 0x69, 0xf7, 0x40, 0xf3, 0x40, 0x01, 0x20, 0x2b, 0x40, + 0x3d, 0x40, 0x9d, 0x42, 0x00, 0xd1, 0x68, 0x00, 0x80, 0xbc, 0xb8, 0x46, + 0xf0, 0xbd, 0xc0, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x70, 0xb5, + 0x03, 0x71, 0x1b, 0x4b, 0x1b, 0x4a, 0x19, 0x68, 0x04, 0x00, 0x02, 0x60, + 0x91, 0x42, 0x02, 0xd1, 0x02, 0x00, 0x03, 0xcb, 0x03, 0xc2, 0x01, 0x21, + 0x17, 0x48, 0xff, 0xf7, 0xc7, 0xff, 0x05, 0x00, 0x90, 0x20, 0x08, 0x21, + 0xc0, 0x05, 0xff, 0xf7, 0xc1, 0xff, 0x6b, 0x00, 0x5b, 0x19, 0x18, 0x18, + 0x08, 0x28, 0x05, 0xd8, 0x11, 0x4b, 0x80, 0x00, 0x1b, 0x58, 0x9f, 0x46, + 0x07, 0x23, 0x23, 0x71, 0x20, 0x00, 0x70, 0xbd, 0x02, 0x23, 0x23, 0x71, + 0xfa, 0xe7, 0x00, 0x23, 0x23, 0x71, 0xf7, 0xe7, 0x03, 0x23, 0x23, 0x71, + 0xf4, 0xe7, 0x04, 0x23, 0x23, 0x71, 0xf1, 0xe7, 0x01, 0x23, 0x23, 0x71, + 0xee, 0xe7, 0x05, 0x23, 0x23, 0x71, 0xeb, 0xe7, 0x06, 0x23, 0x23, 0x71, + 0xe8, 0xe7, 0xc0, 0x46, 0x00, 0x7c, 0x00, 0x08, 0x01, 0xbe, 0xad, 0xde, + 0x00, 0x04, 0x00, 0x48, 0x30, 0x54, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xb5, 0xde, 0x46, + 0x57, 0x46, 0x4e, 0x46, 0x45, 0x46, 0xe0, 0xb5, 0x85, 0xb0, 0x72, 0xb6, + 0x6d, 0x4c, 0x63, 0x69, 0x00, 0x2b, 0x04, 0xd0, 0x6c, 0x4d, 0x72, 0xb6, + 0x6c, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, 0x00, 0x23, 0x99, 0x46, 0x9a, 0x46, + 0x6a, 0x4b, 0x68, 0x4d, 0x9b, 0x46, 0x6a, 0x4b, 0x6a, 0x4f, 0x98, 0x46, + 0x6a, 0x4e, 0x23, 0x78, 0x02, 0x2b, 0x05, 0xd0, 0x05, 0x2b, 0x03, 0xd0, + 0x72, 0xb6, 0x68, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, 0x18, 0x23, 0x30, 0x78, + 0xe3, 0x60, 0x15, 0x3b, 0x21, 0x6a, 0xf2, 0x68, 0xa7, 0x60, 0x26, 0x61, + 0x23, 0x70, 0x00, 0x28, 0x00, 0xd0, 0xa9, 0xe0, 0x02, 0x3b, 0x1a, 0x43, + 0x00, 0x92, 0xe3, 0x69, 0x5b, 0x68, 0xdf, 0x60, 0x70, 0x88, 0x84, 0x46, + 0x18, 0x20, 0x62, 0x46, 0x50, 0x43, 0x58, 0x60, 0x19, 0x60, 0x01, 0x21, + 0x18, 0x68, 0x32, 0x69, 0x01, 0x43, 0x19, 0x60, 0xa3, 0x69, 0x03, 0x20, + 0x19, 0x68, 0x19, 0x60, 0x90, 0x21, 0x59, 0x60, 0x1a, 0x62, 0x72, 0x69, + 0x5a, 0x61, 0xb2, 0x69, 0x9a, 0x62, 0x00, 0x9a, 0xda, 0x60, 0x04, 0x22, + 0x99, 0x68, 0x0a, 0x43, 0x9a, 0x60, 0x22, 0x00, 0x6b, 0x69, 0x14, 0x32, + 0x63, 0x61, 0x5a, 0x62, 0xff, 0xf7, 0xde, 0xf9, 0x2b, 0x68, 0xab, 0x42, + 0x05, 0xd0, 0x6a, 0x69, 0x9b, 0x68, 0x92, 0x68, 0x9a, 0x42, 0x00, 0xd2, + 0x7b, 0xe0, 0x62, 0xb6, 0x3a, 0x00, 0x3b, 0x00, 0x00, 0x20, 0x90, 0x32, + 0x19, 0x88, 0x06, 0x33, 0x40, 0x18, 0x9a, 0x42, 0xfa, 0xd1, 0xfe, 0xf7, + 0x43, 0xfd, 0x42, 0x49, 0xfe, 0xf7, 0xf8, 0xf9, 0x3a, 0x00, 0x01, 0x90, + 0x00, 0x20, 0x40, 0x4b, 0x92, 0x32, 0x19, 0x88, 0x06, 0x33, 0x40, 0x18, + 0x9a, 0x42, 0xfa, 0xd1, 0xfe, 0xf7, 0x34, 0xfd, 0x3a, 0x00, 0x00, 0x21, + 0x3b, 0x4b, 0x03, 0x90, 0x94, 0x32, 0x00, 0x91, 0x00, 0x98, 0x19, 0x88, + 0x84, 0x46, 0x8c, 0x44, 0x61, 0x46, 0x06, 0x33, 0x00, 0x91, 0x9a, 0x42, + 0xf6, 0xd1, 0x80, 0x23, 0x35, 0x4a, 0x01, 0x98, 0x51, 0x69, 0x4b, 0x40, + 0x53, 0x61, 0x49, 0x46, 0xfd, 0xf7, 0x6e, 0xfe, 0xfc, 0x21, 0x89, 0x05, + 0xfe, 0xf7, 0xd0, 0xf9, 0x51, 0x46, 0x81, 0x46, 0xfd, 0xf7, 0x66, 0xfe, + 0xfc, 0x21, 0x89, 0x05, 0xfe, 0xf7, 0xc8, 0xf9, 0x2c, 0x4b, 0x51, 0x46, + 0x18, 0x60, 0x48, 0x46, 0xfe, 0xf7, 0xdc, 0xfa, 0x40, 0x00, 0x2a, 0x49, + 0x40, 0x08, 0xfe, 0xf7, 0xbd, 0xf9, 0x5b, 0x46, 0x81, 0x46, 0x28, 0x49, + 0x18, 0x68, 0xfe, 0xf7, 0xb7, 0xf9, 0x01, 0x1c, 0x48, 0x46, 0xfd, 0xf7, + 0x4d, 0xfe, 0x5b, 0x46, 0x18, 0x60, 0x43, 0x46, 0x1b, 0x68, 0x00, 0x98, + 0x02, 0x93, 0xfe, 0xf7, 0xf3, 0xfc, 0x01, 0x1c, 0x03, 0x98, 0xfe, 0xf7, + 0xc1, 0xfa, 0x1f, 0x49, 0xfe, 0xf7, 0xa4, 0xf9, 0x1e, 0x49, 0x81, 0x46, + 0x02, 0x98, 0xfe, 0xf7, 0x9f, 0xf9, 0x01, 0x1c, 0x48, 0x46, 0xfd, 0xf7, + 0x35, 0xfe, 0x43, 0x46, 0x18, 0x60, 0x72, 0xb6, 0x63, 0x69, 0xd1, 0x46, + 0x00, 0x2b, 0x00, 0xd0, 0x35, 0xe7, 0x01, 0x9b, 0x9a, 0x46, 0x40, 0xe7, + 0x1a, 0x43, 0x24, 0x23, 0x00, 0x92, 0x19, 0x43, 0x53, 0xe7, 0x72, 0xb6, + 0x12, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, 0xc0, 0x46, 0x28, 0x06, 0x00, 0x20, + 0xa0, 0x10, 0x00, 0x20, 0x4c, 0x56, 0x00, 0x08, 0xec, 0x0f, 0x00, 0x20, + 0xb8, 0x0f, 0x00, 0x20, 0xf4, 0x0f, 0x00, 0x20, 0x08, 0x06, 0x00, 0x20, + 0x14, 0x56, 0x00, 0x08, 0xbe, 0xa4, 0x50, 0x37, 0xf6, 0x0f, 0x00, 0x20, + 0xf8, 0x0f, 0x00, 0x20, 0x00, 0x04, 0x00, 0x48, 0xf0, 0x0f, 0x00, 0x20, + 0x6f, 0x12, 0x03, 0x3b, 0xee, 0x7c, 0x7f, 0x3f, 0x9c, 0x44, 0x34, 0x35, + 0x48, 0xe1, 0x7a, 0x3f, 0x5c, 0x54, 0x00, 0x08, 0xf0, 0xb5, 0x57, 0x46, + 0x4e, 0x46, 0xde, 0x46, 0x45, 0x46, 0x00, 0x23, 0xe0, 0xb5, 0x8d, 0xb0, + 0x9a, 0x46, 0x99, 0x46, 0x00, 0x93, 0x72, 0xb6, 0xb9, 0x4c, 0xba, 0x4d, + 0x23, 0x78, 0x04, 0x3b, 0x01, 0x2b, 0x00, 0xd9, 0xb0, 0xe0, 0x01, 0x23, + 0x9b, 0x46, 0x27, 0x00, 0x03, 0x26, 0x10, 0x37, 0x23, 0x78, 0x05, 0x2b, + 0x00, 0xd1, 0x87, 0xe0, 0xe3, 0x6b, 0xda, 0x68, 0x16, 0x42, 0x00, 0xd1, + 0x7e, 0xe0, 0x03, 0x22, 0xd9, 0x68, 0x11, 0x42, 0x00, 0xd1, 0xa1, 0xe0, + 0xd8, 0x21, 0xda, 0x20, 0xdc, 0x26, 0x49, 0x00, 0x40, 0x00, 0x76, 0x00, + 0x59, 0x58, 0x18, 0x58, 0x9e, 0x59, 0x0a, 0x96, 0xde, 0x26, 0x76, 0x00, + 0x9e, 0x59, 0x20, 0x26, 0xde, 0x60, 0xde, 0x68, 0x16, 0x42, 0x03, 0xd1, + 0x02, 0x22, 0x5e, 0x69, 0x32, 0x43, 0x5a, 0x61, 0x5b, 0x46, 0x4a, 0x08, + 0x13, 0x40, 0x99, 0x46, 0x5b, 0x46, 0x0f, 0x27, 0x8e, 0x08, 0x33, 0x40, + 0x00, 0x93, 0x02, 0xab, 0x1b, 0x7d, 0x4a, 0x46, 0xbb, 0x43, 0x57, 0x46, + 0x3b, 0x43, 0x10, 0x27, 0x12, 0x01, 0xbb, 0x43, 0x13, 0x43, 0x5a, 0x46, + 0x16, 0x40, 0x20, 0x22, 0xdb, 0xb2, 0x76, 0x01, 0x93, 0x43, 0x33, 0x43, + 0x02, 0xae, 0x33, 0x75, 0x13, 0x42, 0x00, 0xd0, 0x87, 0xe0, 0x02, 0xab, + 0x1b, 0x8b, 0x49, 0x0d, 0xdb, 0x0a, 0xdb, 0x02, 0x19, 0x43, 0x02, 0xab, + 0x19, 0x83, 0x0f, 0x23, 0x03, 0x40, 0x9a, 0x46, 0x2b, 0x68, 0xab, 0x42, + 0x05, 0xd0, 0x6a, 0x69, 0x9b, 0x68, 0x92, 0x68, 0x9a, 0x42, 0x00, 0xd2, + 0x7b, 0xe0, 0x62, 0xb6, 0x4a, 0x46, 0x0f, 0x20, 0x11, 0x01, 0x52, 0x46, + 0x02, 0xab, 0x1b, 0x7d, 0x83, 0x43, 0x13, 0x43, 0x10, 0x22, 0x93, 0x43, + 0x0b, 0x43, 0x20, 0x21, 0x00, 0x9a, 0x8b, 0x43, 0x52, 0x01, 0x13, 0x43, + 0x02, 0xaa, 0x13, 0x75, 0x0b, 0x42, 0x39, 0xd0, 0x03, 0x40, 0x02, 0x2b, + 0x00, 0xd1, 0xd3, 0xe0, 0x00, 0x2b, 0x64, 0xd1, 0xef, 0x22, 0x08, 0x9b, + 0x12, 0x05, 0x01, 0x93, 0xdb, 0x00, 0xdb, 0x08, 0x93, 0x42, 0x2b, 0xd1, + 0xff, 0xf7, 0x94, 0xfc, 0x32, 0x20, 0xff, 0xf7, 0xb1, 0xfc, 0xbf, 0xf3, + 0x4f, 0x8f, 0x75, 0x4b, 0x75, 0x4a, 0xda, 0x60, 0xbf, 0xf3, 0x4f, 0x8f, + 0xc0, 0x46, 0xfd, 0xe7, 0x1a, 0x69, 0x16, 0x42, 0x00, 0xd0, 0x7c, 0xe7, + 0x6b, 0x69, 0x04, 0x20, 0x1f, 0x60, 0x62, 0x69, 0x5a, 0x60, 0x13, 0x60, + 0x63, 0x61, 0x6b, 0x69, 0x98, 0x46, 0xff, 0xf7, 0x81, 0xf8, 0x43, 0x46, + 0x5b, 0x6a, 0x00, 0x2b, 0x00, 0xd1, 0x63, 0xe7, 0x2b, 0x68, 0xab, 0x42, + 0x05, 0xd0, 0x6a, 0x69, 0x9b, 0x68, 0x92, 0x68, 0x9a, 0x42, 0x00, 0xd2, + 0x9a, 0xe0, 0x62, 0xb6, 0x72, 0xb6, 0x23, 0x78, 0x04, 0x3b, 0x01, 0x2b, + 0x00, 0xd8, 0x50, 0xe7, 0x72, 0xb6, 0x61, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, + 0x19, 0x69, 0x11, 0x42, 0x9a, 0xd0, 0xe0, 0x21, 0xe2, 0x20, 0xe4, 0x26, + 0x49, 0x00, 0x40, 0x00, 0x76, 0x00, 0x59, 0x58, 0x18, 0x58, 0x9e, 0x59, + 0x0a, 0x96, 0xe6, 0x26, 0x76, 0x00, 0x9e, 0x59, 0x20, 0x26, 0x1e, 0x61, + 0x1e, 0x69, 0x16, 0x42, 0x00, 0xd0, 0x5d, 0xe7, 0x10, 0x26, 0x5a, 0x69, + 0x32, 0x43, 0x5a, 0x61, 0x58, 0xe7, 0x08, 0x9b, 0xc9, 0x08, 0x01, 0x93, + 0x5b, 0x0f, 0x5b, 0x07, 0x19, 0x43, 0x08, 0x91, 0x77, 0xe7, 0x72, 0xb6, + 0x4e, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, 0x01, 0x2b, 0xcc, 0xd1, 0x08, 0x9b, + 0x4c, 0x4a, 0x01, 0x93, 0xdb, 0x00, 0xdb, 0x08, 0x93, 0x42, 0xc5, 0xd1, + 0x04, 0xa8, 0xff, 0xf7, 0xb5, 0xfd, 0x20, 0x22, 0x02, 0xab, 0x9b, 0x18, + 0x1b, 0x78, 0x02, 0xaa, 0x13, 0x73, 0x46, 0x4b, 0x1a, 0x69, 0x12, 0x06, + 0x03, 0xd5, 0x45, 0x4a, 0x5a, 0x60, 0x45, 0x4a, 0x5a, 0x60, 0x42, 0x4b, + 0x59, 0x46, 0xda, 0x68, 0x0a, 0x42, 0xfb, 0xd1, 0x02, 0x22, 0x19, 0x69, + 0x0a, 0x43, 0x1a, 0x61, 0xf8, 0x22, 0xd2, 0x01, 0x5a, 0x61, 0x40, 0x22, + 0x19, 0x69, 0x0a, 0x43, 0x1a, 0x61, 0xc0, 0x46, 0x39, 0x4b, 0x59, 0x46, + 0xda, 0x68, 0x0a, 0x42, 0xfb, 0xd1, 0x02, 0x21, 0x1a, 0x69, 0x8a, 0x43, + 0x1a, 0x61, 0x1a, 0x69, 0x7e, 0x31, 0x0a, 0x43, 0x1a, 0x61, 0x1a, 0x69, + 0x0a, 0x42, 0x03, 0xd0, 0x32, 0x4a, 0x5a, 0x60, 0x32, 0x4a, 0x5a, 0x60, + 0x2f, 0x4a, 0x59, 0x46, 0x58, 0x46, 0xd3, 0x68, 0x19, 0x40, 0x03, 0x42, + 0xf9, 0xd1, 0x2c, 0x4a, 0x08, 0x20, 0x5e, 0x46, 0x02, 0xab, 0x1b, 0x18, + 0x58, 0x5a, 0x13, 0x69, 0x33, 0x43, 0x13, 0x61, 0x2a, 0x4b, 0x58, 0x52, + 0x58, 0x46, 0xd3, 0x68, 0x18, 0x42, 0xfb, 0xd1, 0x13, 0x69, 0x02, 0x31, + 0x83, 0x43, 0x13, 0x61, 0x08, 0x29, 0xeb, 0xd1, 0x80, 0x23, 0x11, 0x69, + 0x02, 0xa8, 0x0b, 0x43, 0x13, 0x61, 0xff, 0xf7, 0x5f, 0xfd, 0x22, 0x4b, + 0x02, 0xaa, 0x03, 0xca, 0x03, 0xc3, 0xff, 0xf7, 0xd1, 0xfb, 0x65, 0xe7, + 0x72, 0xb6, 0x18, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, 0x08, 0x9b, 0x1d, 0x4a, + 0x01, 0x93, 0xdb, 0x00, 0xdb, 0x08, 0x93, 0x42, 0x00, 0xd0, 0x59, 0xe7, + 0x02, 0xab, 0x5b, 0x18, 0x18, 0x78, 0xfe, 0xf7, 0xfb, 0xfa, 0x18, 0x49, + 0x06, 0x1c, 0xfd, 0xf7, 0x4f, 0xfc, 0x00, 0x28, 0x0e, 0xd1, 0x16, 0x49, + 0x30, 0x1c, 0xfd, 0xf7, 0xef, 0xff, 0x21, 0x22, 0x14, 0x4b, 0x18, 0x60, + 0x02, 0xab, 0x9b, 0x18, 0x5a, 0x46, 0x1b, 0x78, 0x13, 0x40, 0x12, 0x4a, + 0x13, 0x70, 0x3f, 0xe7, 0x11, 0x48, 0xf2, 0xe7, 0x4c, 0x06, 0x00, 0x20, + 0xa0, 0x10, 0x00, 0x20, 0x00, 0xed, 0x00, 0xe0, 0x04, 0x00, 0xfa, 0x05, + 0x58, 0x56, 0x00, 0x08, 0x68, 0x54, 0x00, 0x08, 0x00, 0x00, 0xf4, 0x0e, + 0x00, 0x20, 0x02, 0x40, 0x23, 0x01, 0x67, 0x45, 0xab, 0x89, 0xef, 0xcd, + 0x00, 0x7c, 0x00, 0x08, 0xe0, 0x11, 0x00, 0x20, 0x00, 0x00, 0xf5, 0x0e, + 0x00, 0x00, 0x48, 0x42, 0xcd, 0xcc, 0xcc, 0x3d, 0x04, 0x06, 0x00, 0x20, + 0xb0, 0x08, 0x00, 0x20, 0x00, 0x00, 0x60, 0x41, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0xb5, 0x57, 0x46, 0xde, 0x46, 0x4e, 0x46, + 0x45, 0x46, 0x50, 0x4b, 0xe0, 0xb5, 0x9b, 0x46, 0x4f, 0x4b, 0x00, 0x27, + 0x9a, 0x46, 0x4f, 0x4b, 0x87, 0xb0, 0x99, 0x46, 0x4e, 0x4b, 0x98, 0x46, + 0x5f, 0xe0, 0x4e, 0x49, 0x30, 0x1c, 0xfd, 0xf7, 0x13, 0xfc, 0x00, 0x28, + 0x00, 0xd0, 0x89, 0xe0, 0x4b, 0x49, 0x30, 0x1c, 0xfd, 0xf7, 0x9e, 0xff, + 0x00, 0x21, 0x06, 0x1c, 0xfd, 0xf7, 0xf4, 0xfb, 0x00, 0x28, 0x00, 0xd0, + 0x80, 0xe0, 0x47, 0x48, 0x31, 0x1c, 0xfd, 0xf7, 0x93, 0xff, 0x46, 0x49, + 0xfd, 0xf7, 0x2a, 0xfc, 0x01, 0x1c, 0x45, 0x48, 0xfd, 0xf7, 0xc2, 0xfd, + 0xfd, 0xf7, 0x0c, 0xfc, 0x80, 0xb2, 0x02, 0xab, 0x58, 0x81, 0x20, 0x1c, + 0xfd, 0xf7, 0x06, 0xfc, 0x02, 0xab, 0x84, 0xb2, 0x9c, 0x81, 0x4b, 0x46, + 0x1b, 0x68, 0x00, 0x21, 0x02, 0x3b, 0x5a, 0x42, 0x53, 0x41, 0x02, 0xaa, + 0x53, 0x72, 0x10, 0x00, 0xff, 0xf7, 0xac, 0xfa, 0x3f, 0x22, 0x03, 0x9b, + 0x01, 0x35, 0x01, 0x93, 0x5b, 0x0f, 0x5b, 0x07, 0x2b, 0x43, 0x03, 0x93, + 0x02, 0xab, 0x1b, 0x78, 0x34, 0x49, 0x93, 0x43, 0x08, 0x22, 0x13, 0x43, + 0x02, 0xaa, 0x13, 0x70, 0x43, 0x46, 0xd7, 0x73, 0x18, 0x68, 0x14, 0x81, + 0xfd, 0xf7, 0x60, 0xff, 0xfd, 0xf7, 0xe0, 0xfb, 0x02, 0xab, 0x58, 0x81, + 0x2d, 0x4b, 0x02, 0xaa, 0xdb, 0x89, 0x00, 0x21, 0x9b, 0x08, 0x13, 0x73, + 0x2b, 0x4b, 0x10, 0x00, 0x1b, 0x78, 0x53, 0x73, 0x2a, 0x4b, 0xdb, 0x89, + 0x9b, 0x08, 0x93, 0x73, 0xff, 0xf7, 0x82, 0xfa, 0x64, 0x20, 0xff, 0xf7, + 0x2f, 0xfb, 0x27, 0x4b, 0x27, 0x48, 0x1e, 0x79, 0x5b, 0x46, 0x19, 0x68, + 0xfd, 0xf7, 0x78, 0xfd, 0xfe, 0x21, 0x89, 0x05, 0xfe, 0xf7, 0x58, 0xf8, + 0x01, 0x1c, 0x23, 0x48, 0xfd, 0xf7, 0x70, 0xfd, 0x22, 0x49, 0xfe, 0xf7, + 0x51, 0xf8, 0x03, 0x9b, 0xc8, 0x36, 0x5a, 0x0f, 0x75, 0x00, 0x52, 0x07, + 0x2a, 0x43, 0x03, 0x92, 0x3f, 0x22, 0x01, 0x93, 0x02, 0xab, 0x1b, 0x78, + 0x04, 0x1c, 0x93, 0x43, 0x08, 0x22, 0x13, 0x43, 0x02, 0xaa, 0x13, 0x70, + 0xa0, 0x23, 0x13, 0x72, 0x53, 0x46, 0x1e, 0x68, 0x17, 0x49, 0xd7, 0x81, + 0x30, 0x1c, 0xfd, 0xf7, 0x77, 0xfb, 0x00, 0x28, 0x00, 0xd1, 0x70, 0xe7, + 0x14, 0x48, 0x8e, 0xe7, 0x14, 0x48, 0x8c, 0xe7, 0x14, 0x48, 0x7d, 0xe7, + 0xec, 0x0f, 0x00, 0x20, 0xb8, 0x0f, 0x00, 0x20, 0xbc, 0x0f, 0x00, 0x20, + 0xf0, 0x0f, 0x00, 0x20, 0xef, 0xa7, 0x0a, 0x40, 0xff, 0xc8, 0xce, 0xbf, + 0x8a, 0x76, 0xe5, 0xbe, 0xfc, 0xde, 0x7e, 0x3f, 0x00, 0x40, 0x1c, 0x46, + 0x00, 0x00, 0x7a, 0x44, 0xc0, 0x0f, 0x00, 0x20, 0xec, 0x06, 0x00, 0x20, + 0x34, 0x12, 0x00, 0x20, 0xe0, 0x11, 0x00, 0x20, 0x33, 0x33, 0x53, 0x40, + 0x00, 0xe0, 0xab, 0x46, 0x00, 0x00, 0x20, 0x41, 0x21, 0xe5, 0x2f, 0xbf, + 0x20, 0x4e, 0x00, 0x00, 0x88, 0x13, 0x00, 0x00, 0x11, 0xe4, 0x90, 0xbe, + 0x15, 0x4b, 0x16, 0x4a, 0x16, 0x49, 0x1a, 0x60, 0x16, 0x4a, 0x17, 0x48, + 0x5a, 0x60, 0x17, 0x4a, 0x9a, 0x60, 0x00, 0x22, 0xda, 0x60, 0x16, 0x4a, + 0x1a, 0x61, 0x16, 0x4b, 0x16, 0x4a, 0x99, 0x60, 0x80, 0x21, 0x1a, 0x60, + 0x00, 0x22, 0xc9, 0x00, 0x1a, 0x71, 0x99, 0x81, 0x13, 0x4b, 0x18, 0x60, + 0x13, 0x48, 0x58, 0x60, 0x98, 0x60, 0x13, 0x48, 0xd8, 0x60, 0x13, 0x48, + 0x18, 0x61, 0x13, 0x4b, 0x13, 0x48, 0x1a, 0x71, 0x18, 0x60, 0x13, 0x48, + 0x99, 0x81, 0x98, 0x60, 0x12, 0x49, 0x13, 0x4b, 0x19, 0x60, 0x1a, 0x71, + 0x70, 0x47, 0xc0, 0x46, 0xd0, 0x0f, 0x00, 0x20, 0x6f, 0x12, 0x03, 0x3b, + 0x80, 0x1a, 0x06, 0x00, 0x00, 0x00, 0x48, 0x42, 0xcd, 0xcc, 0x4c, 0x3d, + 0x00, 0x40, 0x1c, 0x46, 0x00, 0x00, 0x20, 0x41, 0x34, 0x12, 0x00, 0x20, + 0x8c, 0x06, 0x00, 0x20, 0x84, 0x10, 0x00, 0x20, 0x9a, 0x99, 0x99, 0x3e, + 0x0a, 0xd7, 0x23, 0x3c, 0x00, 0x00, 0x40, 0x40, 0xc0, 0x0f, 0x00, 0x20, + 0xa8, 0x06, 0x00, 0x20, 0x00, 0x6c, 0xdc, 0x02, 0x01, 0xbe, 0xad, 0xde, + 0xe0, 0x11, 0x00, 0x20, 0xf2, 0x4b, 0xf0, 0xb5, 0x99, 0x6a, 0xde, 0x46, + 0x57, 0x46, 0x4e, 0x46, 0x45, 0x46, 0xf0, 0x4a, 0xe0, 0xb5, 0x0a, 0x43, + 0x9c, 0x21, 0x9a, 0x62, 0x9a, 0x6a, 0xc9, 0x03, 0x0a, 0x40, 0x9a, 0x62, + 0x9a, 0x6a, 0x1a, 0x69, 0x01, 0x22, 0x00, 0x21, 0x52, 0x42, 0x1a, 0x61, + 0x1a, 0x69, 0x19, 0x61, 0x1a, 0x69, 0xd8, 0x68, 0xe7, 0x4a, 0x83, 0xb0, + 0x02, 0x43, 0x80, 0x20, 0xda, 0x60, 0xda, 0x68, 0xc0, 0x03, 0x02, 0x40, + 0xda, 0x60, 0xda, 0x68, 0x80, 0x22, 0xd8, 0x69, 0x52, 0x05, 0x02, 0x43, + 0xda, 0x61, 0xda, 0x69, 0x80, 0x22, 0xe0, 0x48, 0x52, 0x00, 0x04, 0x68, + 0x22, 0x43, 0x02, 0x60, 0xc0, 0x20, 0x1a, 0x6a, 0x80, 0x00, 0x02, 0x40, + 0x01, 0x38, 0xff, 0x38, 0x82, 0x42, 0x03, 0xd0, 0x80, 0x22, 0x52, 0x02, + 0x1a, 0x62, 0x19, 0x62, 0x80, 0x22, 0xd4, 0x4b, 0x12, 0x02, 0x19, 0x6a, + 0x11, 0x42, 0x07, 0xd1, 0x80, 0x21, 0x18, 0x6a, 0x89, 0x00, 0x01, 0x43, + 0x19, 0x62, 0x19, 0x6a, 0x0a, 0x43, 0x1a, 0x62, 0x00, 0x24, 0xd1, 0x4b, + 0x01, 0x22, 0x99, 0x46, 0x1c, 0x60, 0x5c, 0x60, 0xcf, 0x4b, 0x52, 0x42, + 0x1c, 0x60, 0x4b, 0x46, 0x9c, 0x60, 0xce, 0x4b, 0x03, 0x21, 0x1c, 0x60, + 0x4b, 0x46, 0x1c, 0x61, 0xcc, 0x4b, 0x05, 0x20, 0x1c, 0x60, 0x4b, 0x46, + 0x9c, 0x61, 0xcb, 0x4b, 0xcb, 0x4d, 0x1c, 0x60, 0x4b, 0x46, 0x1c, 0x62, + 0xca, 0x4b, 0x1c, 0x60, 0x4b, 0x46, 0x9c, 0x62, 0xc9, 0x4b, 0x5a, 0x60, + 0xfe, 0xf7, 0xbc, 0xfb, 0x03, 0x21, 0x06, 0x20, 0xfe, 0xf7, 0xb8, 0xfb, + 0x03, 0x21, 0x07, 0x20, 0xfe, 0xf7, 0xb4, 0xfb, 0x03, 0x21, 0x1b, 0x20, + 0xfe, 0xf7, 0xb0, 0xfb, 0x03, 0x21, 0x1c, 0x20, 0xfe, 0xf7, 0xac, 0xfb, + 0x03, 0x21, 0x1d, 0x20, 0xfe, 0xf7, 0xa8, 0xfb, 0x01, 0x23, 0xbe, 0x4f, + 0x02, 0x21, 0x3b, 0x70, 0xbd, 0x4b, 0x0c, 0x20, 0x3b, 0x62, 0x7c, 0x60, + 0xbc, 0x60, 0xfc, 0x60, 0x3c, 0x61, 0x7c, 0x61, 0xbd, 0x61, 0xfc, 0x61, + 0xfe, 0xf7, 0x98, 0xfb, 0x80, 0x22, 0xaa, 0x4b, 0x92, 0x00, 0x99, 0x69, + 0x0a, 0x43, 0x9a, 0x61, 0x9b, 0x69, 0xb5, 0x4b, 0x1c, 0x60, 0xfe, 0xf7, + 0xa5, 0xf9, 0x80, 0x23, 0xaa, 0x68, 0x1b, 0x06, 0x13, 0x43, 0xab, 0x60, + 0x2b, 0x00, 0x9a, 0x68, 0x00, 0x2a, 0xfc, 0xdb, 0x00, 0x25, 0xa0, 0x4c, + 0x9d, 0x60, 0xa3, 0x69, 0xad, 0x4a, 0xae, 0x4e, 0x13, 0x40, 0xa3, 0x61, + 0xa3, 0x69, 0x01, 0x23, 0x98, 0x46, 0x33, 0x70, 0x33, 0x00, 0x08, 0x33, + 0xb3, 0x60, 0xf3, 0x60, 0x33, 0x00, 0x10, 0x33, 0x33, 0x61, 0x73, 0x61, + 0xa7, 0x4b, 0xb5, 0x61, 0x03, 0x21, 0x1e, 0x20, 0x75, 0x62, 0xf5, 0x61, + 0x35, 0x62, 0xb5, 0x62, 0xf5, 0x62, 0x35, 0x63, 0x75, 0x63, 0xb5, 0x63, + 0xf3, 0x63, 0x75, 0x60, 0xfe, 0xf7, 0x60, 0xfb, 0x80, 0x23, 0x80, 0x21, + 0x40, 0x46, 0xe2, 0x69, 0x9b, 0x04, 0x13, 0x43, 0xe3, 0x61, 0xe3, 0x69, + 0xf3, 0x6b, 0x89, 0x00, 0x5a, 0x58, 0x12, 0x0c, 0x12, 0x04, 0x02, 0x43, + 0x5a, 0x50, 0x5a, 0x58, 0x98, 0x48, 0x12, 0x0c, 0x12, 0x04, 0x02, 0x43, + 0x5a, 0x50, 0x90, 0x22, 0x40, 0x46, 0x92, 0x00, 0x9d, 0x50, 0x04, 0x32, + 0x9d, 0x50, 0x40, 0x3a, 0x9d, 0x50, 0x10, 0x32, 0x9d, 0x50, 0x08, 0x3a, + 0x98, 0x50, 0x10, 0x32, 0x98, 0x50, 0x5a, 0x58, 0x82, 0x43, 0x5a, 0x50, + 0xe3, 0x69, 0x8e, 0x4a, 0x8e, 0x49, 0x13, 0x40, 0x42, 0x46, 0xe3, 0x61, + 0xe3, 0x69, 0x8d, 0x4b, 0x03, 0x32, 0x18, 0x70, 0x1a, 0x74, 0x99, 0x61, + 0x5d, 0x60, 0xdd, 0x60, 0x8a, 0x4b, 0x41, 0x46, 0x1a, 0x74, 0x8a, 0x4a, + 0x18, 0x70, 0x9a, 0x61, 0x01, 0x22, 0x5d, 0x60, 0x92, 0x46, 0xdd, 0x60, + 0x87, 0x4a, 0x88, 0x4b, 0x01, 0x31, 0x18, 0x80, 0x9a, 0x60, 0x87, 0x4a, + 0x9d, 0x70, 0xda, 0x60, 0x08, 0x22, 0x5a, 0x61, 0x1a, 0x61, 0x5d, 0x60, + 0x9d, 0x61, 0xdd, 0x61, 0xe3, 0x69, 0x83, 0x4a, 0x03, 0x43, 0xe3, 0x61, + 0xe3, 0x69, 0x93, 0x68, 0x03, 0x43, 0x93, 0x60, 0x80, 0x23, 0x80, 0x4a, + 0xdb, 0x05, 0x9a, 0x62, 0x01, 0x22, 0x52, 0x42, 0xda, 0x62, 0x9d, 0x61, + 0x5d, 0x63, 0xdd, 0x60, 0x5d, 0x60, 0x58, 0x61, 0x18, 0x60, 0x0e, 0x30, + 0x93, 0x46, 0xfe, 0xf7, 0xfb, 0xfa, 0x79, 0x4b, 0x79, 0x4a, 0x7a, 0x49, + 0x1a, 0x60, 0x7a, 0x4a, 0x7a, 0x4c, 0x5a, 0x60, 0x7a, 0x4b, 0x7b, 0x4a, + 0x5d, 0x60, 0x1a, 0x60, 0x1a, 0x00, 0x0c, 0x32, 0xda, 0x60, 0x1a, 0x61, + 0x78, 0x4a, 0x9d, 0x60, 0x5d, 0x61, 0x13, 0x6a, 0x40, 0x46, 0x0b, 0x40, + 0x13, 0x62, 0x23, 0x00, 0x18, 0x33, 0xa3, 0x61, 0xe3, 0x61, 0x5b, 0x46, + 0x23, 0x62, 0x73, 0x4b, 0x22, 0x00, 0x23, 0x64, 0x23, 0x00, 0x50, 0x33, + 0x23, 0x65, 0x23, 0x00, 0x80, 0x21, 0x28, 0x32, 0x54, 0x33, 0x21, 0x63, + 0x21, 0x66, 0xe2, 0x60, 0x24, 0x60, 0x64, 0x60, 0xa5, 0x60, 0x65, 0x62, + 0x65, 0x66, 0xe5, 0x65, 0xa4, 0x63, 0x63, 0x65, 0xa3, 0x65, 0x69, 0x4b, + 0x93, 0x46, 0x63, 0x64, 0x48, 0x23, 0xe0, 0x52, 0x50, 0x46, 0x02, 0x33, + 0xe0, 0x54, 0xac, 0x20, 0x65, 0x4b, 0x62, 0x61, 0x1b, 0x50, 0x40, 0x38, + 0x84, 0x46, 0x9c, 0x44, 0x62, 0x46, 0x38, 0x30, 0x1a, 0x50, 0x42, 0x46, + 0x61, 0x48, 0x5d, 0x50, 0xd8, 0x67, 0x61, 0x48, 0x0c, 0x31, 0x58, 0x50, + 0x0c, 0x31, 0x5a, 0x50, 0x02, 0x20, 0x30, 0x31, 0x5a, 0x50, 0x52, 0x46, + 0x04, 0x39, 0x5d, 0x50, 0x14, 0x39, 0x58, 0x52, 0x02, 0x31, 0x5a, 0x54, + 0x5a, 0x46, 0x5a, 0x48, 0x0a, 0x39, 0x58, 0x50, 0x0c, 0x39, 0x5c, 0x50, + 0x04, 0x31, 0x5a, 0x50, 0x19, 0x00, 0xb8, 0x22, 0xb8, 0x31, 0x99, 0x50, + 0x1a, 0x00, 0x18, 0x00, 0xbc, 0x21, 0xbc, 0x32, 0x5a, 0x50, 0x90, 0x30, + 0x04, 0x31, 0x5a, 0x50, 0x60, 0x63, 0x20, 0x61, 0xfe, 0xf7, 0x1c, 0xfc, 0x23, 0x68, 0xa3, 0x42, 0x05, 0xd0, 0x62, 0x69, 0x9b, 0x68, 0x92, 0x68, - 0x9a, 0x42, 0x00, 0xd2, 0x8b, 0xe0, 0x62, 0xb6, 0x80, 0x21, 0x4b, 0x4a, - 0x4b, 0x48, 0xfe, 0xf7, 0x17, 0xfc, 0x7c, 0x21, 0x4a, 0x4a, 0x4b, 0x48, - 0xfe, 0xf7, 0x12, 0xfc, 0x4a, 0x4b, 0x40, 0x25, 0x98, 0x46, 0x4a, 0x4e, - 0x4a, 0x4c, 0x43, 0x46, 0x1b, 0x78, 0x00, 0x2b, 0x13, 0xd1, 0x20, 0x33, - 0x63, 0x83, 0x63, 0x69, 0x6b, 0x40, 0x63, 0x61, 0x33, 0x68, 0x98, 0x1e, - 0x43, 0x42, 0x58, 0x41, 0x44, 0x4b, 0x40, 0x42, 0x18, 0x40, 0xf5, 0x30, - 0xff, 0x30, 0xfe, 0xf7, 0xf9, 0xff, 0x43, 0x46, 0x1b, 0x78, 0x00, 0x2b, - 0xeb, 0xd0, 0x5b, 0x00, 0x99, 0x46, 0x20, 0x23, 0x00, 0x27, 0x9a, 0x46, - 0x65, 0x83, 0x52, 0x46, 0x63, 0x69, 0x3c, 0x48, 0x53, 0x40, 0x63, 0x61, - 0x01, 0x37, 0xfe, 0xf7, 0xe7, 0xff, 0x4f, 0x45, 0xf5, 0xd1, 0x39, 0x48, - 0xfe, 0xf7, 0xe2, 0xff, 0xd3, 0xe7, 0x4a, 0x46, 0x12, 0x68, 0x1a, 0x42, - 0x04, 0xd0, 0xf9, 0x61, 0x72, 0xb6, 0x35, 0x4b, 0x63, 0x66, 0xfe, 0xe7, - 0x48, 0x46, 0x1a, 0x43, 0x02, 0x60, 0x33, 0x49, 0x25, 0x4a, 0x81, 0x60, - 0x51, 0x69, 0xc7, 0x60, 0x19, 0x43, 0x51, 0x61, 0x52, 0x69, 0x42, 0x68, - 0x90, 0x46, 0x1a, 0x42, 0x03, 0xd1, 0x02, 0x21, 0x09, 0x20, 0xfe, 0xf7, - 0x65, 0xf9, 0x01, 0x25, 0x43, 0x46, 0x4a, 0x46, 0x0f, 0x21, 0x2b, 0x43, - 0x53, 0x60, 0x29, 0x4b, 0x1a, 0x68, 0x8a, 0x43, 0x1a, 0x60, 0x28, 0x4a, - 0x01, 0x39, 0x51, 0x60, 0x00, 0x22, 0x1a, 0x60, 0x90, 0x46, 0x26, 0x4a, - 0xfa, 0x61, 0x15, 0x4a, 0x91, 0x69, 0x8c, 0x46, 0x80, 0x21, 0x60, 0x46, - 0x89, 0x00, 0x01, 0x43, 0x91, 0x61, 0x92, 0x69, 0x21, 0x4a, 0x9a, 0x60, - 0x42, 0x46, 0xbb, 0x69, 0x1a, 0x61, 0xfd, 0xf7, 0xfb, 0xfe, 0xbb, 0x69, - 0x9d, 0x60, 0x1a, 0x68, 0x2a, 0x42, 0xfc, 0xd0, 0xb5, 0xe6, 0x72, 0xb6, - 0x1b, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x72, 0xb6, 0x1a, 0x4b, 0x63, 0x66, - 0xfe, 0xe7, 0x72, 0xb6, 0x19, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x72, 0xb6, - 0x18, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0xc0, 0x46, 0x80, 0x56, 0x00, 0x08, - 0x5c, 0x57, 0x00, 0x08, 0x00, 0x10, 0x02, 0x40, 0x5b, 0x87, 0x01, 0x00, - 0xa1, 0x43, 0x00, 0x08, 0x78, 0x0a, 0x00, 0x20, 0x51, 0x40, 0x00, 0x08, - 0xb8, 0x08, 0x00, 0x20, 0xec, 0x06, 0x00, 0x20, 0xb8, 0x0f, 0x00, 0x20, - 0x00, 0x04, 0x00, 0x48, 0x64, 0x19, 0x00, 0x00, 0xb8, 0x0b, 0x00, 0x00, - 0x20, 0x4e, 0x00, 0x00, 0xc8, 0x56, 0x00, 0x08, 0x01, 0x32, 0x00, 0x08, - 0x08, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x40, 0x0c, 0x57, 0x00, 0x08, - 0x40, 0x24, 0x01, 0x40, 0x20, 0x55, 0x00, 0x08, 0xfc, 0x54, 0x00, 0x08, - 0x74, 0x56, 0x00, 0x08, 0x08, 0x55, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x9c, 0x22, 0x46, 0x4b, 0xd2, 0x03, 0x99, 0x6a, - 0x10, 0xb5, 0x11, 0x43, 0x99, 0x62, 0x99, 0x6a, 0x43, 0x48, 0xa8, 0x24, - 0x01, 0x40, 0x99, 0x62, 0x99, 0x6a, 0x59, 0x69, 0x41, 0x48, 0x0a, 0x43, - 0x5a, 0x61, 0x90, 0x21, 0x5a, 0x69, 0x00, 0x22, 0xc9, 0x05, 0x4a, 0x60, - 0x88, 0x60, 0x3e, 0x48, 0xe4, 0x01, 0xc8, 0x60, 0x84, 0x20, 0x80, 0x05, - 0x4a, 0x61, 0x08, 0x62, 0x3b, 0x48, 0x48, 0x62, 0x3b, 0x48, 0x08, 0x60, - 0x3b, 0x49, 0x3c, 0x48, 0x4a, 0x60, 0x88, 0x60, 0xc8, 0x60, 0x4a, 0x61, - 0x0a, 0x62, 0x4a, 0x62, 0x0c, 0x60, 0x39, 0x49, 0x39, 0x4c, 0x4a, 0x60, + 0x9a, 0x42, 0x00, 0xd2, 0x55, 0xe1, 0x62, 0xb6, 0x72, 0xb6, 0x3b, 0x78, + 0x5a, 0x1e, 0x01, 0x2a, 0x00, 0xd9, 0x56, 0xe1, 0x00, 0x21, 0x79, 0x60, + 0x01, 0x2b, 0x00, 0xd1, 0x05, 0xe1, 0x02, 0x23, 0x3b, 0x70, 0x23, 0x68, + 0xa3, 0x42, 0x05, 0xd0, 0x62, 0x69, 0x9b, 0x68, 0x92, 0x68, 0x9a, 0x42, + 0x00, 0xd2, 0x42, 0xe1, 0x62, 0xb6, 0x3f, 0x4a, 0x85, 0x21, 0x3f, 0x48, + 0xfe, 0xf7, 0xc6, 0xfc, 0x3e, 0x48, 0xfe, 0xf7, 0x8b, 0xfa, 0x00, 0x20, + 0xfe, 0xf7, 0x60, 0xf9, 0x3c, 0x4d, 0x28, 0x00, 0xfe, 0xf7, 0x84, 0xfa, + 0x28, 0x00, 0x6d, 0x46, 0x00, 0x21, 0xfe, 0xf7, 0x2f, 0xf9, 0x81, 0x21, + 0x38, 0x4a, 0x39, 0x48, 0xfe, 0xf7, 0xb2, 0xfc, 0x38, 0x4a, 0x84, 0x21, + 0x38, 0x48, 0xfe, 0xf7, 0xad, 0xfc, 0x38, 0x4f, 0x28, 0x00, 0xff, 0xf7, + 0x09, 0xfa, 0x0c, 0xcd, 0x0c, 0xc7, 0x72, 0xb6, 0x35, 0x78, 0x01, 0x2d, + 0x6c, 0xd0, 0x67, 0xe0, 0x00, 0x10, 0x02, 0x40, 0xff, 0xff, 0xb1, 0xff, + 0xff, 0xff, 0xbf, 0xff, 0x00, 0x70, 0x00, 0x40, 0x04, 0x12, 0x00, 0x20, + 0x08, 0x00, 0x02, 0x40, 0x1c, 0x00, 0x02, 0x40, 0x30, 0x00, 0x02, 0x40, + 0x44, 0x00, 0x02, 0x40, 0x00, 0x24, 0x01, 0x40, 0x58, 0x00, 0x02, 0x40, + 0x00, 0x00, 0x02, 0x40, 0x28, 0x06, 0x00, 0x20, 0x8a, 0x25, 0x00, 0x00, + 0x08, 0x27, 0x01, 0x40, 0xff, 0xfd, 0xff, 0xff, 0x4c, 0x06, 0x00, 0x20, + 0x00, 0x64, 0x00, 0x40, 0x01, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xff, 0xfd, + 0x00, 0x2c, 0x01, 0x40, 0x8c, 0x06, 0x00, 0x20, 0xa8, 0x06, 0x00, 0x20, + 0x00, 0x04, 0x00, 0x40, 0x00, 0x38, 0x01, 0x40, 0xc4, 0x06, 0x00, 0x20, + 0x00, 0x6c, 0xdc, 0x02, 0x00, 0x58, 0x01, 0x40, 0xbf, 0x12, 0x00, 0x00, + 0xd8, 0x11, 0x00, 0x20, 0x48, 0x12, 0x00, 0x20, 0xff, 0xff, 0x00, 0xff, + 0x00, 0x19, 0x00, 0x20, 0xa0, 0x10, 0x00, 0x20, 0xe8, 0x11, 0x00, 0x20, + 0x41, 0x30, 0x00, 0x08, 0x00, 0xed, 0x00, 0xe0, 0xc4, 0x56, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x20, 0x08, 0x11, 0x00, 0x20, 0x61, 0x2a, 0x00, 0x08, + 0xc9, 0x19, 0x00, 0x08, 0x54, 0x54, 0x00, 0x08, 0xa1, 0x3d, 0x00, 0x08, + 0xf8, 0x0d, 0x00, 0x20, 0xc0, 0x0f, 0x00, 0x20, 0x34, 0x12, 0x00, 0x20, + 0xd1, 0x3a, 0x00, 0x08, 0x38, 0x0c, 0x00, 0x20, 0x81, 0x3a, 0x00, 0x08, + 0xf0, 0x06, 0x00, 0x20, 0xe0, 0x11, 0x00, 0x20, 0x72, 0xb6, 0x5e, 0x4b, + 0x63, 0x66, 0xfe, 0xe7, 0x02, 0x22, 0x80, 0x21, 0x32, 0x70, 0x5c, 0x4a, + 0x89, 0x04, 0x72, 0x60, 0x5b, 0x4a, 0x08, 0x27, 0xd0, 0x69, 0x01, 0x43, + 0xd1, 0x61, 0xd2, 0x69, 0xf2, 0x6b, 0x15, 0x60, 0x03, 0xe0, 0x29, 0x00, + 0x38, 0x00, 0xfe, 0xf7, 0x93, 0xfe, 0xf3, 0x6b, 0x5a, 0x68, 0x2a, 0x42, + 0xf7, 0xd0, 0x72, 0x68, 0x51, 0x68, 0x12, 0x68, 0xd9, 0x61, 0x1a, 0x60, + 0x51, 0x4a, 0x5a, 0x61, 0x04, 0x23, 0x33, 0x70, 0x23, 0x68, 0xa3, 0x42, + 0x05, 0xd0, 0x62, 0x69, 0x9b, 0x68, 0x92, 0x68, 0x9a, 0x42, 0x00, 0xd2, + 0x8b, 0xe0, 0x62, 0xb6, 0x80, 0x21, 0x4b, 0x4a, 0x4b, 0x48, 0xfe, 0xf7, + 0x07, 0xfc, 0x7c, 0x21, 0x4a, 0x4a, 0x4b, 0x48, 0xfe, 0xf7, 0x02, 0xfc, + 0x4a, 0x4b, 0x40, 0x25, 0x98, 0x46, 0x4a, 0x4e, 0x4a, 0x4c, 0x43, 0x46, + 0x1b, 0x78, 0x00, 0x2b, 0x13, 0xd1, 0x20, 0x33, 0x63, 0x83, 0x63, 0x69, + 0x6b, 0x40, 0x63, 0x61, 0x33, 0x68, 0x98, 0x1e, 0x43, 0x42, 0x58, 0x41, + 0x44, 0x4b, 0x40, 0x42, 0x18, 0x40, 0xf5, 0x30, 0xff, 0x30, 0xfe, 0xf7, + 0xe1, 0xff, 0x43, 0x46, 0x1b, 0x78, 0x00, 0x2b, 0xeb, 0xd0, 0x5b, 0x00, + 0x99, 0x46, 0x20, 0x23, 0x00, 0x27, 0x9a, 0x46, 0x65, 0x83, 0x52, 0x46, + 0x63, 0x69, 0x3c, 0x48, 0x53, 0x40, 0x63, 0x61, 0x01, 0x37, 0xfe, 0xf7, + 0xcf, 0xff, 0x4f, 0x45, 0xf5, 0xd1, 0x39, 0x48, 0xfe, 0xf7, 0xca, 0xff, + 0xd3, 0xe7, 0x4a, 0x46, 0x12, 0x68, 0x1a, 0x42, 0x04, 0xd0, 0xf9, 0x61, + 0x72, 0xb6, 0x35, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x48, 0x46, 0x1a, 0x43, + 0x02, 0x60, 0x33, 0x49, 0x25, 0x4a, 0x81, 0x60, 0x51, 0x69, 0xc7, 0x60, + 0x19, 0x43, 0x51, 0x61, 0x52, 0x69, 0x42, 0x68, 0x90, 0x46, 0x1a, 0x42, + 0x03, 0xd1, 0x02, 0x21, 0x09, 0x20, 0xfe, 0xf7, 0x55, 0xf9, 0x01, 0x25, + 0x43, 0x46, 0x4a, 0x46, 0x0f, 0x21, 0x2b, 0x43, 0x53, 0x60, 0x29, 0x4b, + 0x1a, 0x68, 0x8a, 0x43, 0x1a, 0x60, 0x28, 0x4a, 0x01, 0x39, 0x51, 0x60, + 0x00, 0x22, 0x1a, 0x60, 0x90, 0x46, 0x26, 0x4a, 0xfa, 0x61, 0x15, 0x4a, + 0x91, 0x69, 0x8c, 0x46, 0x80, 0x21, 0x60, 0x46, 0x89, 0x00, 0x01, 0x43, + 0x91, 0x61, 0x92, 0x69, 0x21, 0x4a, 0x9a, 0x60, 0x42, 0x46, 0xbb, 0x69, + 0x1a, 0x61, 0xfd, 0xf7, 0x4b, 0xff, 0xbb, 0x69, 0x9d, 0x60, 0x1a, 0x68, + 0x2a, 0x42, 0xfc, 0xd0, 0xb5, 0xe6, 0x72, 0xb6, 0x1b, 0x4b, 0x63, 0x66, + 0xfe, 0xe7, 0x72, 0xb6, 0x1a, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x72, 0xb6, + 0x19, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x72, 0xb6, 0x18, 0x4b, 0x63, 0x66, + 0xfe, 0xe7, 0xc0, 0x46, 0xe0, 0x55, 0x00, 0x08, 0xbc, 0x56, 0x00, 0x08, + 0x00, 0x10, 0x02, 0x40, 0x5b, 0x87, 0x01, 0x00, 0x01, 0x43, 0x00, 0x08, + 0x78, 0x0a, 0x00, 0x20, 0xb1, 0x3f, 0x00, 0x08, 0xb8, 0x08, 0x00, 0x20, + 0xec, 0x06, 0x00, 0x20, 0xbc, 0x0f, 0x00, 0x20, 0x00, 0x04, 0x00, 0x48, + 0x64, 0x19, 0x00, 0x00, 0xb8, 0x0b, 0x00, 0x00, 0x20, 0x4e, 0x00, 0x00, + 0x28, 0x56, 0x00, 0x08, 0x41, 0x31, 0x00, 0x08, 0x08, 0x00, 0x02, 0x40, + 0x00, 0x00, 0x02, 0x40, 0x6c, 0x56, 0x00, 0x08, 0x40, 0x24, 0x01, 0x40, + 0x80, 0x54, 0x00, 0x08, 0x5c, 0x54, 0x00, 0x08, 0xd4, 0x55, 0x00, 0x08, + 0x68, 0x54, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9c, 0x22, 0x46, 0x4b, 0xd2, 0x03, 0x99, 0x6a, 0x10, 0xb5, 0x11, 0x43, + 0x99, 0x62, 0x99, 0x6a, 0x43, 0x48, 0xa8, 0x24, 0x01, 0x40, 0x99, 0x62, + 0x99, 0x6a, 0x59, 0x69, 0x41, 0x48, 0x0a, 0x43, 0x5a, 0x61, 0x90, 0x21, + 0x5a, 0x69, 0x00, 0x22, 0xc9, 0x05, 0x4a, 0x60, 0x88, 0x60, 0x3e, 0x48, + 0xe4, 0x01, 0xc8, 0x60, 0x84, 0x20, 0x80, 0x05, 0x4a, 0x61, 0x08, 0x62, + 0x3b, 0x48, 0x48, 0x62, 0x3b, 0x48, 0x08, 0x60, 0x3b, 0x49, 0x3c, 0x48, + 0x4a, 0x60, 0x88, 0x60, 0xc8, 0x60, 0x4a, 0x61, 0x0a, 0x62, 0x4a, 0x62, + 0x0c, 0x60, 0x39, 0x49, 0x39, 0x4c, 0x4a, 0x60, 0x88, 0x60, 0xc8, 0x60, + 0x4c, 0x61, 0x0a, 0x62, 0x4a, 0x62, 0x0a, 0x60, 0x36, 0x49, 0x4a, 0x60, 0x88, 0x60, 0xc8, 0x60, 0x4c, 0x61, 0x0a, 0x62, 0x4a, 0x62, 0x0a, 0x60, - 0x36, 0x49, 0x4a, 0x60, 0x88, 0x60, 0xc8, 0x60, 0x4c, 0x61, 0x0a, 0x62, - 0x4a, 0x62, 0x0a, 0x60, 0x01, 0x21, 0x1a, 0x68, 0x0a, 0x43, 0x1a, 0x60, - 0x02, 0x22, 0x19, 0x68, 0x0a, 0x42, 0xfc, 0xd0, 0x03, 0x21, 0x5a, 0x68, - 0x8a, 0x43, 0x5a, 0x60, 0x0c, 0x22, 0x22, 0x4b, 0x10, 0x00, 0x59, 0x68, - 0x08, 0x40, 0x0a, 0x42, 0xfa, 0xd1, 0xf9, 0x22, 0x19, 0x68, 0x0a, 0x40, - 0x01, 0x21, 0x1a, 0x60, 0x58, 0x60, 0x5a, 0x6b, 0x0a, 0x43, 0x5a, 0x63, - 0x02, 0x22, 0x1a, 0x4b, 0x59, 0x6b, 0x0a, 0x42, 0xfc, 0xd0, 0x01, 0x21, - 0x5a, 0x6a, 0x0a, 0x43, 0x5a, 0x62, 0x02, 0x22, 0x15, 0x4b, 0x59, 0x6a, - 0x0a, 0x42, 0xfc, 0xd0, 0x84, 0x21, 0x00, 0x22, 0x49, 0x03, 0xda, 0x62, - 0x59, 0x60, 0x1a, 0x63, 0x80, 0x22, 0x19, 0x68, 0x52, 0x04, 0x0a, 0x43, - 0x1a, 0x60, 0x80, 0x23, 0x0d, 0x4a, 0x9b, 0x04, 0x11, 0x68, 0x19, 0x42, - 0xfc, 0xd0, 0x11, 0x22, 0x15, 0x4b, 0x1a, 0x60, 0x10, 0x3a, 0x19, 0x68, - 0x0a, 0x42, 0xfc, 0xd0, 0x02, 0x21, 0x07, 0x4b, 0x5a, 0x68, 0x0a, 0x43, - 0x5a, 0x60, 0x0a, 0x31, 0x5a, 0x68, 0x0a, 0x40, 0x08, 0x2a, 0xfb, 0xd1, - 0x01, 0x21, 0x9a, 0x69, 0x0a, 0x43, 0x9a, 0x61, 0x9b, 0x69, 0x10, 0xbd, - 0x00, 0x10, 0x02, 0x40, 0xff, 0xff, 0xb1, 0xff, 0x55, 0x55, 0xfd, 0x7f, - 0x55, 0x55, 0x55, 0x25, 0x11, 0x40, 0x04, 0x00, 0x3f, 0xa0, 0xa8, 0xaa, - 0x00, 0x04, 0x00, 0x48, 0x55, 0x55, 0x55, 0x55, 0x00, 0x08, 0x00, 0x48, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x14, 0x00, 0x48, 0x00, 0x20, 0x02, 0x40, - 0x00, 0x00, 0x00, 0x00, 0xef, 0xf3, 0x09, 0x83, 0x20, 0x33, 0x83, 0xf3, - 0x09, 0x88, 0x62, 0xb6, 0x70, 0x47, 0xc0, 0x46, 0x10, 0xb5, 0x74, 0x46, - 0x03, 0x48, 0xfd, 0xf7, 0x8b, 0xff, 0x20, 0x00, 0xfd, 0xf7, 0x68, 0xff, - 0x10, 0xbd, 0xc0, 0x46, 0xa8, 0x06, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0xb5, 0x74, 0x46, 0x03, 0x48, 0xfd, 0xf7, + 0x01, 0x21, 0x1a, 0x68, 0x0a, 0x43, 0x1a, 0x60, 0x02, 0x22, 0x19, 0x68, + 0x0a, 0x42, 0xfc, 0xd0, 0x03, 0x21, 0x5a, 0x68, 0x8a, 0x43, 0x5a, 0x60, + 0x0c, 0x22, 0x22, 0x4b, 0x10, 0x00, 0x59, 0x68, 0x08, 0x40, 0x0a, 0x42, + 0xfa, 0xd1, 0xf9, 0x22, 0x19, 0x68, 0x0a, 0x40, 0x01, 0x21, 0x1a, 0x60, + 0x58, 0x60, 0x5a, 0x6b, 0x0a, 0x43, 0x5a, 0x63, 0x02, 0x22, 0x1a, 0x4b, + 0x59, 0x6b, 0x0a, 0x42, 0xfc, 0xd0, 0x01, 0x21, 0x5a, 0x6a, 0x0a, 0x43, + 0x5a, 0x62, 0x02, 0x22, 0x15, 0x4b, 0x59, 0x6a, 0x0a, 0x42, 0xfc, 0xd0, + 0x84, 0x21, 0x00, 0x22, 0x49, 0x03, 0xda, 0x62, 0x59, 0x60, 0x1a, 0x63, + 0x80, 0x22, 0x19, 0x68, 0x52, 0x04, 0x0a, 0x43, 0x1a, 0x60, 0x80, 0x23, + 0x0d, 0x4a, 0x9b, 0x04, 0x11, 0x68, 0x19, 0x42, 0xfc, 0xd0, 0x11, 0x22, + 0x15, 0x4b, 0x1a, 0x60, 0x10, 0x3a, 0x19, 0x68, 0x0a, 0x42, 0xfc, 0xd0, + 0x02, 0x21, 0x07, 0x4b, 0x5a, 0x68, 0x0a, 0x43, 0x5a, 0x60, 0x0a, 0x31, + 0x5a, 0x68, 0x0a, 0x40, 0x08, 0x2a, 0xfb, 0xd1, 0x01, 0x21, 0x9a, 0x69, + 0x0a, 0x43, 0x9a, 0x61, 0x9b, 0x69, 0x10, 0xbd, 0x00, 0x10, 0x02, 0x40, + 0xff, 0xff, 0xb1, 0xff, 0x55, 0x55, 0xfd, 0x7f, 0x55, 0x55, 0x55, 0x25, + 0x11, 0x40, 0x04, 0x00, 0x3f, 0xa0, 0xa8, 0xaa, 0x00, 0x04, 0x00, 0x48, + 0x55, 0x55, 0x55, 0x55, 0x00, 0x08, 0x00, 0x48, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x14, 0x00, 0x48, 0x00, 0x20, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, + 0xef, 0xf3, 0x09, 0x83, 0x20, 0x33, 0x83, 0xf3, 0x09, 0x88, 0x62, 0xb6, + 0x70, 0x47, 0xc0, 0x46, 0x10, 0xb5, 0x74, 0x46, 0x03, 0x48, 0xfd, 0xf7, 0x7b, 0xff, 0x20, 0x00, 0xfd, 0xf7, 0x58, 0xff, 0x10, 0xbd, 0xc0, 0x46, - 0x8c, 0x06, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0xb5, 0xff, 0xf7, 0xed, 0xff, 0x10, 0xbd, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf8, 0xb5, 0x80, 0x25, 0xed, 0x05, 0x2b, 0x69, - 0xea, 0x68, 0x4f, 0x46, 0x1a, 0x40, 0xff, 0x23, 0x13, 0x40, 0x46, 0x46, - 0xdb, 0x43, 0xc0, 0xb4, 0xf1, 0x46, 0x2b, 0x61, 0x93, 0x07, 0x06, 0xd4, - 0x48, 0x46, 0xfd, 0xf7, 0x35, 0xff, 0xc0, 0xbc, 0xb9, 0x46, 0xb0, 0x46, - 0xf8, 0xbd, 0x72, 0xb6, 0x23, 0x4c, 0x68, 0x6a, 0xa3, 0x69, 0x62, 0x6a, - 0x99, 0x68, 0x86, 0x1a, 0xb1, 0x42, 0x1f, 0xd8, 0x18, 0x20, 0x80, 0x46, - 0xa0, 0x44, 0x00, 0x27, 0x08, 0xe0, 0x62, 0xb6, 0x18, 0x69, 0x88, 0x47, - 0x72, 0xb6, 0xa3, 0x69, 0x99, 0x68, 0x8e, 0x42, 0x0d, 0xd3, 0x62, 0x6a, - 0x52, 0x18, 0x76, 0x1a, 0x41, 0x46, 0x62, 0x62, 0x1a, 0x68, 0x51, 0x60, - 0xd9, 0x68, 0xa2, 0x61, 0xdf, 0x60, 0x42, 0x45, 0xeb, 0xd1, 0xef, 0x60, - 0xe9, 0xe7, 0x68, 0x6a, 0x62, 0x6a, 0x86, 0x1a, 0x8e, 0x42, 0xe2, 0xd2, - 0x21, 0x00, 0x18, 0x31, 0x8b, 0x42, 0x12, 0xd0, 0x99, 0x68, 0x60, 0x62, - 0x09, 0x1a, 0x8a, 0x18, 0x9a, 0x60, 0x04, 0x2a, 0x0d, 0xd3, 0x15, 0x18, - 0x28, 0x00, 0xfe, 0xf7, 0x01, 0xfa, 0x80, 0x23, 0xdb, 0x05, 0x62, 0x6a, - 0x5b, 0x6a, 0x9b, 0x1a, 0xaa, 0x1a, 0x93, 0x42, 0x03, 0xd8, 0x62, 0xb6, - 0xb6, 0xe7, 0x04, 0x22, 0xef, 0xe7, 0x72, 0xb6, 0x02, 0x4b, 0x63, 0x66, - 0xfe, 0xe7, 0xc0, 0x46, 0x94, 0x10, 0x00, 0x20, 0xf0, 0x55, 0x00, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xb5, 0x74, 0x46, - 0x03, 0x48, 0xfd, 0xf7, 0x73, 0xff, 0x20, 0x00, 0xfd, 0xf7, 0xd8, 0xfe, - 0x10, 0xbd, 0xc0, 0x46, 0x0c, 0x57, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0xb5, 0x55, 0x4c, 0x76, 0x46, 0xe2, 0x6b, - 0x93, 0x68, 0x93, 0x60, 0x01, 0x22, 0x15, 0x00, 0x1d, 0x40, 0x1a, 0x42, - 0x02, 0xd0, 0x0b, 0x32, 0x1a, 0x42, 0x3c, 0xd1, 0xda, 0x05, 0x06, 0xd5, - 0xc0, 0x22, 0x12, 0x01, 0x13, 0x42, 0x33, 0xd0, 0x80, 0x22, 0x92, 0x02, - 0x15, 0x43, 0xda, 0x03, 0x06, 0xd5, 0xc0, 0x22, 0x12, 0x03, 0x13, 0x42, - 0x27, 0xd0, 0x80, 0x23, 0xdb, 0x02, 0x1d, 0x43, 0x72, 0xb6, 0x20, 0x00, - 0x08, 0x30, 0xfe, 0xf7, 0x23, 0xf9, 0x63, 0x6a, 0x1d, 0x43, 0xa3, 0x6a, - 0x65, 0x62, 0x00, 0x2b, 0x02, 0xd0, 0x20, 0x00, 0x24, 0x30, 0x98, 0x47, - 0x62, 0xb6, 0xe3, 0x6b, 0xdd, 0x68, 0xaa, 0x07, 0x51, 0xd1, 0x10, 0x22, - 0x2a, 0x42, 0x00, 0xd0, 0x66, 0xe0, 0x1d, 0x69, 0xaa, 0x07, 0x13, 0xd1, - 0x10, 0x22, 0x2a, 0x42, 0x28, 0xd1, 0x5a, 0x68, 0x5a, 0x60, 0x52, 0x07, - 0x35, 0xd4, 0x30, 0x00, 0xfd, 0xf7, 0x8c, 0xfe, 0x70, 0xbd, 0x04, 0x23, - 0x1d, 0x43, 0xd7, 0xe7, 0x02, 0x22, 0x15, 0x43, 0xcb, 0xe7, 0x80, 0x25, - 0x6d, 0x02, 0xbf, 0xe7, 0x10, 0x21, 0x5a, 0x69, 0x8a, 0x43, 0x5a, 0x61, - 0x72, 0xb6, 0x20, 0x00, 0x10, 0x30, 0xfe, 0xf7, 0xf1, 0xf8, 0x02, 0x22, - 0xa3, 0x69, 0x13, 0x43, 0xa3, 0x61, 0xe3, 0x69, 0x00, 0x2b, 0x02, 0xd0, - 0x20, 0x00, 0x18, 0x30, 0x98, 0x47, 0x62, 0xb6, 0x10, 0x22, 0xe3, 0x6b, - 0x2a, 0x42, 0xd6, 0xd0, 0x1a, 0x61, 0x72, 0xb6, 0x23, 0x6b, 0x1a, 0x43, + 0xa8, 0x06, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xb5, 0x74, 0x46, 0x03, 0x48, 0xfd, 0xf7, 0x6b, 0xff, 0x20, 0x00, + 0xfd, 0xf7, 0x48, 0xff, 0x10, 0xbd, 0xc0, 0x46, 0x8c, 0x06, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xb5, 0xff, 0xf7, + 0xed, 0xff, 0x10, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf8, 0xb5, 0x80, 0x25, 0xed, 0x05, 0x2b, 0x69, 0xea, 0x68, 0x4f, 0x46, + 0x1a, 0x40, 0xff, 0x23, 0x13, 0x40, 0x46, 0x46, 0xdb, 0x43, 0xc0, 0xb4, + 0xf1, 0x46, 0x2b, 0x61, 0x93, 0x07, 0x06, 0xd4, 0x48, 0x46, 0xfd, 0xf7, + 0x25, 0xff, 0xc0, 0xbc, 0xb9, 0x46, 0xb0, 0x46, 0xf8, 0xbd, 0x72, 0xb6, + 0x23, 0x4c, 0x68, 0x6a, 0xa3, 0x69, 0x62, 0x6a, 0x99, 0x68, 0x86, 0x1a, + 0xb1, 0x42, 0x1f, 0xd8, 0x18, 0x20, 0x80, 0x46, 0xa0, 0x44, 0x00, 0x27, + 0x08, 0xe0, 0x62, 0xb6, 0x18, 0x69, 0x88, 0x47, 0x72, 0xb6, 0xa3, 0x69, + 0x99, 0x68, 0x8e, 0x42, 0x0d, 0xd3, 0x62, 0x6a, 0x52, 0x18, 0x76, 0x1a, + 0x41, 0x46, 0x62, 0x62, 0x1a, 0x68, 0x51, 0x60, 0xd9, 0x68, 0xa2, 0x61, + 0xdf, 0x60, 0x42, 0x45, 0xeb, 0xd1, 0xef, 0x60, 0xe9, 0xe7, 0x68, 0x6a, + 0x62, 0x6a, 0x86, 0x1a, 0x8e, 0x42, 0xe2, 0xd2, 0x21, 0x00, 0x18, 0x31, + 0x8b, 0x42, 0x12, 0xd0, 0x99, 0x68, 0x60, 0x62, 0x09, 0x1a, 0x8a, 0x18, + 0x9a, 0x60, 0x04, 0x2a, 0x0d, 0xd3, 0x15, 0x18, 0x28, 0x00, 0xfe, 0xf7, + 0xf1, 0xf9, 0x80, 0x23, 0xdb, 0x05, 0x62, 0x6a, 0x5b, 0x6a, 0x9b, 0x1a, + 0xaa, 0x1a, 0x93, 0x42, 0x03, 0xd8, 0x62, 0xb6, 0xb6, 0xe7, 0x04, 0x22, + 0xef, 0xe7, 0x72, 0xb6, 0x02, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0xc0, 0x46, + 0xa0, 0x10, 0x00, 0x20, 0x50, 0x55, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0xb5, 0x74, 0x46, 0x03, 0x48, 0xfd, 0xf7, + 0x63, 0xff, 0x20, 0x00, 0xfd, 0xf7, 0xc8, 0xfe, 0x10, 0xbd, 0xc0, 0x46, + 0x6c, 0x56, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0xb5, 0x55, 0x4c, 0x76, 0x46, 0xe2, 0x6b, 0x93, 0x68, 0x93, 0x60, + 0x01, 0x22, 0x15, 0x00, 0x1d, 0x40, 0x1a, 0x42, 0x02, 0xd0, 0x0b, 0x32, + 0x1a, 0x42, 0x3c, 0xd1, 0xda, 0x05, 0x06, 0xd5, 0xc0, 0x22, 0x12, 0x01, + 0x13, 0x42, 0x33, 0xd0, 0x80, 0x22, 0x92, 0x02, 0x15, 0x43, 0xda, 0x03, + 0x06, 0xd5, 0xc0, 0x22, 0x12, 0x03, 0x13, 0x42, 0x27, 0xd0, 0x80, 0x23, + 0xdb, 0x02, 0x1d, 0x43, 0x72, 0xb6, 0x20, 0x00, 0x08, 0x30, 0xfe, 0xf7, + 0x13, 0xf9, 0x63, 0x6a, 0x1d, 0x43, 0xa3, 0x6a, 0x65, 0x62, 0x00, 0x2b, + 0x02, 0xd0, 0x20, 0x00, 0x24, 0x30, 0x98, 0x47, 0x62, 0xb6, 0xe3, 0x6b, + 0xdd, 0x68, 0xaa, 0x07, 0x51, 0xd1, 0x10, 0x22, 0x2a, 0x42, 0x00, 0xd0, + 0x66, 0xe0, 0x1d, 0x69, 0xaa, 0x07, 0x13, 0xd1, 0x10, 0x22, 0x2a, 0x42, + 0x28, 0xd1, 0x5a, 0x68, 0x5a, 0x60, 0x52, 0x07, 0x35, 0xd4, 0x30, 0x00, + 0xfd, 0xf7, 0x7c, 0xfe, 0x70, 0xbd, 0x04, 0x23, 0x1d, 0x43, 0xd7, 0xe7, + 0x02, 0x22, 0x15, 0x43, 0xcb, 0xe7, 0x80, 0x25, 0x6d, 0x02, 0xbf, 0xe7, + 0x10, 0x21, 0x5a, 0x69, 0x8a, 0x43, 0x5a, 0x61, 0x72, 0xb6, 0x20, 0x00, + 0x10, 0x30, 0xfe, 0xf7, 0xe1, 0xf8, 0x02, 0x22, 0xa3, 0x69, 0x13, 0x43, + 0xa3, 0x61, 0xe3, 0x69, 0x00, 0x2b, 0x02, 0xd0, 0x20, 0x00, 0x18, 0x30, + 0x98, 0x47, 0x62, 0xb6, 0x10, 0x22, 0xe3, 0x6b, 0x2a, 0x42, 0xd6, 0xd0, + 0x1a, 0x61, 0x72, 0xb6, 0x23, 0x6b, 0x1a, 0x43, 0x63, 0x6b, 0x22, 0x63, + 0x00, 0x2b, 0x02, 0xd0, 0x20, 0x00, 0x30, 0x30, 0x98, 0x47, 0x62, 0xb6, + 0xe3, 0x6b, 0x5a, 0x68, 0x5a, 0x60, 0x52, 0x07, 0xc9, 0xd5, 0x9b, 0x69, + 0x72, 0xb6, 0x22, 0x6b, 0x1b, 0x04, 0x13, 0x43, 0x23, 0x63, 0x63, 0x6b, + 0x00, 0x2b, 0x02, 0xd0, 0x20, 0x00, 0x30, 0x30, 0x98, 0x47, 0x62, 0xb6, + 0xbb, 0xe7, 0x02, 0x21, 0x5a, 0x69, 0x8a, 0x43, 0x5a, 0x61, 0x72, 0xb6, + 0x20, 0x00, 0x10, 0x30, 0xfe, 0xf7, 0xaa, 0xf8, 0x01, 0x22, 0xa3, 0x69, + 0x13, 0x43, 0xa3, 0x61, 0xe3, 0x69, 0x00, 0x2b, 0x02, 0xd0, 0x20, 0x00, + 0x18, 0x30, 0x98, 0x47, 0x62, 0xb6, 0x10, 0x22, 0xe3, 0x6b, 0x2a, 0x42, + 0x00, 0xd1, 0x98, 0xe7, 0xda, 0x60, 0x72, 0xb6, 0x23, 0x6b, 0x1a, 0x43, 0x63, 0x6b, 0x22, 0x63, 0x00, 0x2b, 0x02, 0xd0, 0x20, 0x00, 0x30, 0x30, - 0x98, 0x47, 0x62, 0xb6, 0xe3, 0x6b, 0x5a, 0x68, 0x5a, 0x60, 0x52, 0x07, - 0xc9, 0xd5, 0x9b, 0x69, 0x72, 0xb6, 0x22, 0x6b, 0x1b, 0x04, 0x13, 0x43, - 0x23, 0x63, 0x63, 0x6b, 0x00, 0x2b, 0x02, 0xd0, 0x20, 0x00, 0x30, 0x30, - 0x98, 0x47, 0x62, 0xb6, 0xbb, 0xe7, 0x02, 0x21, 0x5a, 0x69, 0x8a, 0x43, - 0x5a, 0x61, 0x72, 0xb6, 0x20, 0x00, 0x10, 0x30, 0xfe, 0xf7, 0xba, 0xf8, - 0x01, 0x22, 0xa3, 0x69, 0x13, 0x43, 0xa3, 0x61, 0xe3, 0x69, 0x00, 0x2b, - 0x02, 0xd0, 0x20, 0x00, 0x18, 0x30, 0x98, 0x47, 0x62, 0xb6, 0x10, 0x22, - 0xe3, 0x6b, 0x2a, 0x42, 0x00, 0xd1, 0x98, 0xe7, 0xda, 0x60, 0x72, 0xb6, - 0x23, 0x6b, 0x1a, 0x43, 0x63, 0x6b, 0x22, 0x63, 0x00, 0x2b, 0x02, 0xd0, - 0x20, 0x00, 0x30, 0x30, 0x98, 0x47, 0x62, 0xb6, 0xe3, 0x6b, 0x8a, 0xe7, - 0x4c, 0x06, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x70, 0xb5, 0x28, 0x4c, - 0x76, 0x46, 0xa3, 0x69, 0x1d, 0x68, 0x1d, 0x60, 0x23, 0x69, 0x00, 0x2b, - 0x08, 0xd0, 0xeb, 0x06, 0x04, 0xd5, 0xe3, 0x69, 0x5b, 0x68, 0x5b, 0x68, - 0x00, 0x2b, 0x1d, 0xd1, 0x2b, 0x06, 0x03, 0xd4, 0x30, 0x00, 0xfd, 0xf7, - 0x0b, 0xfe, 0x70, 0xbd, 0x20, 0x00, 0xfd, 0xf7, 0xbf, 0xfe, 0x23, 0x69, - 0x9b, 0x68, 0x00, 0x2b, 0x2a, 0xd0, 0x05, 0x22, 0x02, 0x21, 0x20, 0x00, - 0x22, 0x70, 0x98, 0x47, 0x23, 0x78, 0x05, 0x2b, 0x22, 0xd0, 0x72, 0xb6, - 0x01, 0x21, 0x20, 0x00, 0x49, 0x42, 0x14, 0x30, 0xfe, 0xf7, 0x8c, 0xf8, - 0x62, 0xb6, 0xe3, 0xe7, 0x20, 0x00, 0xfd, 0xf7, 0xa7, 0xfe, 0x23, 0x69, - 0x9b, 0x68, 0x00, 0x2b, 0x17, 0xd0, 0x05, 0x22, 0x01, 0x21, 0x20, 0x00, - 0x22, 0x70, 0x98, 0x47, 0x23, 0x78, 0x05, 0x2b, 0x0f, 0xd0, 0x72, 0xb6, - 0x01, 0x21, 0x20, 0x00, 0x49, 0x42, 0x14, 0x30, 0xfe, 0xf7, 0x74, 0xf8, - 0x62, 0xb6, 0x2b, 0x06, 0xca, 0xd5, 0xcd, 0xe7, 0x02, 0x23, 0x23, 0x70, - 0x00, 0x23, 0x23, 0x61, 0xd7, 0xe7, 0x02, 0x23, 0x23, 0x70, 0x00, 0x23, - 0x23, 0x61, 0xea, 0xe7, 0x28, 0x06, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0xb5, 0x07, 0x4c, 0x75, 0x46, 0x20, 0x00, - 0x30, 0x30, 0xfd, 0xf7, 0x59, 0xfe, 0x20, 0x00, 0x40, 0x30, 0xfd, 0xf7, - 0x55, 0xfe, 0x28, 0x00, 0xfd, 0xf7, 0xba, 0xfd, 0x70, 0xbd, 0xc0, 0x46, - 0x0c, 0x57, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0xb5, 0x07, 0x4c, 0x75, 0x46, 0x20, 0x00, - 0x10, 0x30, 0xfd, 0xf7, 0x41, 0xfe, 0x20, 0x00, 0x20, 0x30, 0xfd, 0xf7, - 0x3d, 0xfe, 0x28, 0x00, 0xfd, 0xf7, 0xa2, 0xfd, 0x70, 0xbd, 0xc0, 0x46, - 0x0c, 0x57, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0xb5, 0x70, 0x46, 0xfd, 0xf7, 0x94, 0xfd, - 0x10, 0xbd, 0xc0, 0x46, 0x00, 0x00, 0x00, 0x00, 0x10, 0xb5, 0xff, 0xf7, - 0xf5, 0xff, 0x10, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf0, 0xb5, 0x47, 0x46, 0x10, 0x23, 0x25, 0x4e, 0x80, 0xb4, 0xb5, 0x68, - 0xff, 0x33, 0x2f, 0x68, 0xec, 0x69, 0xf0, 0x46, 0x2c, 0x62, 0x1c, 0x42, - 0x1b, 0xd0, 0x73, 0x68, 0x1b, 0x69, 0x00, 0x2b, 0x17, 0xd0, 0x08, 0x22, - 0x11, 0x00, 0x21, 0x40, 0x22, 0x42, 0x00, 0xd0, 0x10, 0x21, 0xe2, 0x07, - 0x01, 0xd5, 0x04, 0x22, 0x11, 0x43, 0xa2, 0x07, 0x01, 0xd5, 0x08, 0x22, - 0x11, 0x43, 0x62, 0x07, 0x01, 0xd5, 0x20, 0x22, 0x11, 0x43, 0xe2, 0x05, - 0x01, 0xd5, 0x40, 0x22, 0x11, 0x43, 0x30, 0x00, 0x98, 0x47, 0x40, 0x23, - 0x23, 0x42, 0x01, 0xd0, 0x3b, 0x42, 0x15, 0xd1, 0x10, 0x23, 0x3b, 0x42, - 0x0d, 0xd0, 0x23, 0x42, 0x0b, 0xd0, 0x73, 0x68, 0x5b, 0x69, 0x00, 0x2b, - 0x01, 0xd0, 0x30, 0x00, 0x98, 0x47, 0x40, 0x46, 0xfd, 0xf7, 0x4c, 0xfd, - 0x80, 0xbc, 0xb8, 0x46, 0xf0, 0xbd, 0x7b, 0x01, 0xf7, 0xd5, 0x23, 0x05, - 0xf5, 0xd5, 0xee, 0xe7, 0x3a, 0x00, 0x9a, 0x43, 0x73, 0x68, 0x2a, 0x60, - 0x5b, 0x68, 0x00, 0x2b, 0xe2, 0xd0, 0x30, 0x00, 0x98, 0x47, 0xdf, 0xe7, - 0xc4, 0x06, 0x00, 0x20, 0x80, 0x22, 0x94, 0x46, 0xf0, 0xb5, 0x00, 0x25, - 0x10, 0x4e, 0x11, 0x4c, 0x11, 0x49, 0x12, 0x4b, 0x12, 0x48, 0xb4, 0x44, - 0x99, 0x42, 0x0d, 0xd9, 0x1a, 0x00, 0x80, 0xc8, 0x80, 0xc2, 0x91, 0x42, - 0xfb, 0xd8, 0x01, 0x39, 0xc9, 0x1a, 0x89, 0x08, 0x01, 0x31, 0x89, 0x00, - 0x5b, 0x18, 0x9c, 0x42, 0x02, 0xd9, 0x20, 0xc3, 0x9c, 0x42, 0xfc, 0xd8, - 0x10, 0x36, 0x66, 0x45, 0x04, 0xd0, 0x30, 0x68, 0x73, 0x68, 0xb1, 0x68, - 0xf4, 0x68, 0xe5, 0xe7, 0xf0, 0xbd, 0xc0, 0x46, 0x7c, 0x57, 0x00, 0x08, - 0x48, 0x12, 0x00, 0x20, 0x48, 0x12, 0x00, 0x20, 0x48, 0x12, 0x00, 0x20, - 0x20, 0x58, 0x00, 0x08, 0xfe, 0xe7, 0xc0, 0x46, 0x00, 0x00, 0x00, 0x00, + 0x98, 0x47, 0x62, 0xb6, 0xe3, 0x6b, 0x8a, 0xe7, 0x4c, 0x06, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x70, 0xb5, 0x28, 0x4c, 0x76, 0x46, 0xa3, 0x69, + 0x1d, 0x68, 0x1d, 0x60, 0x23, 0x69, 0x00, 0x2b, 0x08, 0xd0, 0xeb, 0x06, + 0x04, 0xd5, 0xe3, 0x69, 0x5b, 0x68, 0x5b, 0x68, 0x00, 0x2b, 0x1d, 0xd1, + 0x2b, 0x06, 0x03, 0xd4, 0x30, 0x00, 0xfd, 0xf7, 0xfb, 0xfd, 0x70, 0xbd, + 0x20, 0x00, 0xfd, 0xf7, 0xaf, 0xfe, 0x23, 0x69, 0x9b, 0x68, 0x00, 0x2b, + 0x2a, 0xd0, 0x05, 0x22, 0x02, 0x21, 0x20, 0x00, 0x22, 0x70, 0x98, 0x47, + 0x23, 0x78, 0x05, 0x2b, 0x22, 0xd0, 0x72, 0xb6, 0x01, 0x21, 0x20, 0x00, + 0x49, 0x42, 0x14, 0x30, 0xfe, 0xf7, 0x7c, 0xf8, 0x62, 0xb6, 0xe3, 0xe7, + 0x20, 0x00, 0xfd, 0xf7, 0x97, 0xfe, 0x23, 0x69, 0x9b, 0x68, 0x00, 0x2b, + 0x17, 0xd0, 0x05, 0x22, 0x01, 0x21, 0x20, 0x00, 0x22, 0x70, 0x98, 0x47, + 0x23, 0x78, 0x05, 0x2b, 0x0f, 0xd0, 0x72, 0xb6, 0x01, 0x21, 0x20, 0x00, + 0x49, 0x42, 0x14, 0x30, 0xfe, 0xf7, 0x64, 0xf8, 0x62, 0xb6, 0x2b, 0x06, + 0xca, 0xd5, 0xcd, 0xe7, 0x02, 0x23, 0x23, 0x70, 0x00, 0x23, 0x23, 0x61, + 0xd7, 0xe7, 0x02, 0x23, 0x23, 0x70, 0x00, 0x23, 0x23, 0x61, 0xea, 0xe7, + 0x28, 0x06, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0xb5, 0x07, 0x4c, 0x75, 0x46, 0x20, 0x00, 0x30, 0x30, 0xfd, 0xf7, + 0x49, 0xfe, 0x20, 0x00, 0x40, 0x30, 0xfd, 0xf7, 0x45, 0xfe, 0x28, 0x00, + 0xfd, 0xf7, 0xaa, 0xfd, 0x70, 0xbd, 0xc0, 0x46, 0x6c, 0x56, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0xb5, 0x07, 0x4c, 0x75, 0x46, 0x20, 0x00, 0x10, 0x30, 0xfd, 0xf7, + 0x31, 0xfe, 0x20, 0x00, 0x20, 0x30, 0xfd, 0xf7, 0x2d, 0xfe, 0x28, 0x00, + 0xfd, 0xf7, 0x92, 0xfd, 0x70, 0xbd, 0xc0, 0x46, 0x6c, 0x56, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xb5, 0x70, 0x46, 0xfd, 0xf7, 0x84, 0xfd, 0x10, 0xbd, 0xc0, 0x46, + 0x00, 0x00, 0x00, 0x00, 0x10, 0xb5, 0xff, 0xf7, 0xf5, 0xff, 0x10, 0xbd, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xb5, 0x47, 0x46, + 0x10, 0x23, 0x25, 0x4e, 0x80, 0xb4, 0xb5, 0x68, 0xff, 0x33, 0x2f, 0x68, + 0xec, 0x69, 0xf0, 0x46, 0x2c, 0x62, 0x1c, 0x42, 0x1b, 0xd0, 0x73, 0x68, + 0x1b, 0x69, 0x00, 0x2b, 0x17, 0xd0, 0x08, 0x22, 0x11, 0x00, 0x21, 0x40, + 0x22, 0x42, 0x00, 0xd0, 0x10, 0x21, 0xe2, 0x07, 0x01, 0xd5, 0x04, 0x22, + 0x11, 0x43, 0xa2, 0x07, 0x01, 0xd5, 0x08, 0x22, 0x11, 0x43, 0x62, 0x07, + 0x01, 0xd5, 0x20, 0x22, 0x11, 0x43, 0xe2, 0x05, 0x01, 0xd5, 0x40, 0x22, + 0x11, 0x43, 0x30, 0x00, 0x98, 0x47, 0x40, 0x23, 0x23, 0x42, 0x01, 0xd0, + 0x3b, 0x42, 0x15, 0xd1, 0x10, 0x23, 0x3b, 0x42, 0x0d, 0xd0, 0x23, 0x42, + 0x0b, 0xd0, 0x73, 0x68, 0x5b, 0x69, 0x00, 0x2b, 0x01, 0xd0, 0x30, 0x00, + 0x98, 0x47, 0x40, 0x46, 0xfd, 0xf7, 0x3c, 0xfd, 0x80, 0xbc, 0xb8, 0x46, + 0xf0, 0xbd, 0x7b, 0x01, 0xf7, 0xd5, 0x23, 0x05, 0xf5, 0xd5, 0xee, 0xe7, + 0x3a, 0x00, 0x9a, 0x43, 0x73, 0x68, 0x2a, 0x60, 0x5b, 0x68, 0x00, 0x2b, + 0xe2, 0xd0, 0x30, 0x00, 0x98, 0x47, 0xdf, 0xe7, 0xc4, 0x06, 0x00, 0x20, + 0x80, 0x22, 0x94, 0x46, 0xf0, 0xb5, 0x00, 0x25, 0x10, 0x4e, 0x11, 0x4c, + 0x11, 0x49, 0x12, 0x4b, 0x12, 0x48, 0xb4, 0x44, 0x99, 0x42, 0x0d, 0xd9, + 0x1a, 0x00, 0x80, 0xc8, 0x80, 0xc2, 0x91, 0x42, 0xfb, 0xd8, 0x01, 0x39, + 0xc9, 0x1a, 0x89, 0x08, 0x01, 0x31, 0x89, 0x00, 0x5b, 0x18, 0x9c, 0x42, + 0x02, 0xd9, 0x20, 0xc3, 0x9c, 0x42, 0xfc, 0xd8, 0x10, 0x36, 0x66, 0x45, + 0x04, 0xd0, 0x30, 0x68, 0x73, 0x68, 0xb1, 0x68, 0xf4, 0x68, 0xe5, 0xe7, + 0xf0, 0xbd, 0xc0, 0x46, 0xdc, 0x56, 0x00, 0x08, 0x44, 0x12, 0x00, 0x20, + 0x44, 0x12, 0x00, 0x20, 0x44, 0x12, 0x00, 0x20, 0x80, 0x57, 0x00, 0x08, + 0xfe, 0xe7, 0xc0, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x47, 0xc0, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x47, 0xc0, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x47, 0xc0, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0xb5, 0x72, 0xb6, 0x10, 0x4d, 0x6c, 0x69, - 0x26, 0x00, 0x60, 0x62, 0xa0, 0x6a, 0x28, 0x36, 0xb0, 0x42, 0x06, 0xd0, - 0x03, 0x68, 0xa3, 0x62, 0xfd, 0xf7, 0x4a, 0xff, 0xa0, 0x6a, 0xb0, 0x42, - 0xf8, 0xd1, 0x22, 0x23, 0xe3, 0x5c, 0x00, 0x2b, 0x07, 0xd1, 0x21, 0x33, - 0xe3, 0x5c, 0x9b, 0x07, 0x03, 0xd1, 0x22, 0x69, 0xe3, 0x68, 0xd3, 0x60, - 0x1a, 0x61, 0x0f, 0x20, 0xfd, 0xf7, 0xe8, 0xff, 0x72, 0xb6, 0x02, 0x4b, - 0x6b, 0x66, 0xfe, 0xe7, 0x94, 0x10, 0x00, 0x20, 0x18, 0x56, 0x00, 0x08, - 0x70, 0xb5, 0x0d, 0x4c, 0x01, 0x22, 0x25, 0x68, 0x60, 0x69, 0x2b, 0x68, - 0x5c, 0x60, 0x23, 0x60, 0x20, 0x23, 0xea, 0x54, 0x65, 0x61, 0xfd, 0xf7, - 0x7b, 0xfb, 0x01, 0x00, 0xef, 0xf3, 0x09, 0x83, 0xc2, 0x69, 0x24, 0x3b, - 0x9a, 0x42, 0x03, 0xd8, 0x28, 0x00, 0xfc, 0xf7, 0x35, 0xfb, 0x70, 0xbd, - 0x72, 0xb6, 0x02, 0x4b, 0x63, 0x66, 0xfe, 0xe7, 0x94, 0x10, 0x00, 0x20, - 0xb8, 0x54, 0x00, 0x08, 0xf0, 0xb5, 0x05, 0x00, 0x83, 0x07, 0x4a, 0xd0, - 0x54, 0x1e, 0x00, 0x2a, 0x44, 0xd0, 0x03, 0x00, 0x03, 0x22, 0xce, 0xb2, - 0x02, 0xe0, 0x01, 0x35, 0x01, 0x3c, 0x3d, 0xd3, 0x01, 0x33, 0x2e, 0x70, - 0x13, 0x42, 0xf8, 0xd1, 0x03, 0x2c, 0x2f, 0xd9, 0xff, 0x22, 0x0a, 0x40, - 0x15, 0x02, 0x15, 0x43, 0x2a, 0x04, 0x15, 0x43, 0x0f, 0x2c, 0x35, 0xd9, - 0x27, 0x00, 0x10, 0x3f, 0x3f, 0x09, 0x3e, 0x01, 0xb4, 0x46, 0x1e, 0x00, - 0x1a, 0x00, 0x10, 0x36, 0x66, 0x44, 0x15, 0x60, 0x55, 0x60, 0x95, 0x60, - 0xd5, 0x60, 0x10, 0x32, 0xb2, 0x42, 0xf8, 0xd1, 0x0f, 0x26, 0x0c, 0x22, - 0x01, 0x37, 0x3f, 0x01, 0x26, 0x40, 0xdb, 0x19, 0x37, 0x00, 0x22, 0x42, - 0x17, 0xd0, 0x3e, 0x1f, 0xb6, 0x08, 0xb4, 0x00, 0xa4, 0x46, 0x1a, 0x00, - 0x1c, 0x1d, 0x64, 0x44, 0x20, 0xc2, 0xa2, 0x42, 0xfc, 0xd1, 0x03, 0x24, - 0x01, 0x36, 0xb6, 0x00, 0x9b, 0x19, 0x3c, 0x40, 0x00, 0x2c, 0x05, 0xd0, - 0xc9, 0xb2, 0x1c, 0x19, 0x19, 0x70, 0x01, 0x33, 0x9c, 0x42, 0xfb, 0xd1, - 0xf0, 0xbd, 0x34, 0x00, 0xf4, 0xe7, 0x14, 0x00, 0x03, 0x00, 0xbf, 0xe7, - 0x27, 0x00, 0xe0, 0xe7, 0x9e, 0x20, 0x00, 0x08, 0x2a, 0x20, 0x00, 0x08, - 0x98, 0x1f, 0x00, 0x08, 0x52, 0x1f, 0x00, 0x08, 0x98, 0x1f, 0x00, 0x08, - 0x66, 0x20, 0x00, 0x08, 0x98, 0x1f, 0x00, 0x08, 0x52, 0x1f, 0x00, 0x08, + 0x70, 0xb5, 0x72, 0xb6, 0x10, 0x4d, 0x6c, 0x69, 0x26, 0x00, 0x60, 0x62, + 0xa0, 0x6a, 0x28, 0x36, 0xb0, 0x42, 0x06, 0xd0, 0x03, 0x68, 0xa3, 0x62, + 0xfd, 0xf7, 0x3a, 0xff, 0xa0, 0x6a, 0xb0, 0x42, 0xf8, 0xd1, 0x22, 0x23, + 0xe3, 0x5c, 0x00, 0x2b, 0x07, 0xd1, 0x21, 0x33, 0xe3, 0x5c, 0x9b, 0x07, + 0x03, 0xd1, 0x22, 0x69, 0xe3, 0x68, 0xd3, 0x60, 0x1a, 0x61, 0x0f, 0x20, + 0xfd, 0xf7, 0xd8, 0xff, 0x72, 0xb6, 0x02, 0x4b, 0x6b, 0x66, 0xfe, 0xe7, + 0xa0, 0x10, 0x00, 0x20, 0x78, 0x55, 0x00, 0x08, 0x70, 0xb5, 0x0d, 0x4c, + 0x01, 0x22, 0x25, 0x68, 0x60, 0x69, 0x2b, 0x68, 0x5c, 0x60, 0x23, 0x60, + 0x20, 0x23, 0xea, 0x54, 0x65, 0x61, 0xfd, 0xf7, 0xcb, 0xfb, 0x01, 0x00, + 0xef, 0xf3, 0x09, 0x83, 0xc2, 0x69, 0x24, 0x3b, 0x9a, 0x42, 0x03, 0xd8, + 0x28, 0x00, 0xfc, 0xf7, 0x85, 0xfb, 0x70, 0xbd, 0x72, 0xb6, 0x02, 0x4b, + 0x63, 0x66, 0xfe, 0xe7, 0xa0, 0x10, 0x00, 0x20, 0x18, 0x54, 0x00, 0x08, + 0xf0, 0xb5, 0x05, 0x00, 0x83, 0x07, 0x4a, 0xd0, 0x54, 0x1e, 0x00, 0x2a, + 0x44, 0xd0, 0x03, 0x00, 0x03, 0x22, 0xce, 0xb2, 0x02, 0xe0, 0x01, 0x35, + 0x01, 0x3c, 0x3d, 0xd3, 0x01, 0x33, 0x2e, 0x70, 0x13, 0x42, 0xf8, 0xd1, + 0x03, 0x2c, 0x2f, 0xd9, 0xff, 0x22, 0x0a, 0x40, 0x15, 0x02, 0x15, 0x43, + 0x2a, 0x04, 0x15, 0x43, 0x0f, 0x2c, 0x35, 0xd9, 0x27, 0x00, 0x10, 0x3f, + 0x3f, 0x09, 0x3e, 0x01, 0xb4, 0x46, 0x1e, 0x00, 0x1a, 0x00, 0x10, 0x36, + 0x66, 0x44, 0x15, 0x60, 0x55, 0x60, 0x95, 0x60, 0xd5, 0x60, 0x10, 0x32, + 0xb2, 0x42, 0xf8, 0xd1, 0x0f, 0x26, 0x0c, 0x22, 0x01, 0x37, 0x3f, 0x01, + 0x26, 0x40, 0xdb, 0x19, 0x37, 0x00, 0x22, 0x42, 0x17, 0xd0, 0x3e, 0x1f, + 0xb6, 0x08, 0xb4, 0x00, 0xa4, 0x46, 0x1a, 0x00, 0x1c, 0x1d, 0x64, 0x44, + 0x20, 0xc2, 0xa2, 0x42, 0xfc, 0xd1, 0x03, 0x24, 0x01, 0x36, 0xb6, 0x00, + 0x9b, 0x19, 0x3c, 0x40, 0x00, 0x2c, 0x05, 0xd0, 0xc9, 0xb2, 0x1c, 0x19, + 0x19, 0x70, 0x01, 0x33, 0x9c, 0x42, 0xfb, 0xd1, 0xf0, 0xbd, 0x34, 0x00, + 0xf4, 0xe7, 0x14, 0x00, 0x03, 0x00, 0xbf, 0xe7, 0x27, 0x00, 0xe0, 0xe7, + 0x9e, 0x20, 0x00, 0x08, 0x2a, 0x20, 0x00, 0x08, 0x98, 0x1f, 0x00, 0x08, + 0x52, 0x1f, 0x00, 0x08, 0x98, 0x1f, 0x00, 0x08, 0x66, 0x20, 0x00, 0x08, + 0x98, 0x1f, 0x00, 0x08, 0x52, 0x1f, 0x00, 0x08, 0x2a, 0x20, 0x00, 0x08, + 0x2a, 0x20, 0x00, 0x08, 0x66, 0x20, 0x00, 0x08, 0x52, 0x1f, 0x00, 0x08, + 0x58, 0x1f, 0x00, 0x08, 0x58, 0x1f, 0x00, 0x08, 0x58, 0x1f, 0x00, 0x08, + 0x74, 0x20, 0x00, 0x08, 0x2a, 0x20, 0x00, 0x08, 0x2a, 0x20, 0x00, 0x08, + 0x98, 0x1f, 0x00, 0x08, 0x4e, 0x1f, 0x00, 0x08, 0x98, 0x1f, 0x00, 0x08, + 0x66, 0x20, 0x00, 0x08, 0x98, 0x1f, 0x00, 0x08, 0x4e, 0x1f, 0x00, 0x08, 0x2a, 0x20, 0x00, 0x08, 0x2a, 0x20, 0x00, 0x08, 0x66, 0x20, 0x00, 0x08, - 0x52, 0x1f, 0x00, 0x08, 0x58, 0x1f, 0x00, 0x08, 0x58, 0x1f, 0x00, 0x08, - 0x58, 0x1f, 0x00, 0x08, 0x74, 0x20, 0x00, 0x08, 0x2a, 0x20, 0x00, 0x08, - 0x2a, 0x20, 0x00, 0x08, 0x98, 0x1f, 0x00, 0x08, 0x4e, 0x1f, 0x00, 0x08, - 0x98, 0x1f, 0x00, 0x08, 0x66, 0x20, 0x00, 0x08, 0x98, 0x1f, 0x00, 0x08, - 0x4e, 0x1f, 0x00, 0x08, 0x2a, 0x20, 0x00, 0x08, 0x2a, 0x20, 0x00, 0x08, - 0x66, 0x20, 0x00, 0x08, 0x4e, 0x1f, 0x00, 0x08, 0x58, 0x1f, 0x00, 0x08, - 0x58, 0x1f, 0x00, 0x08, 0x58, 0x1f, 0x00, 0x08, 0x70, 0x20, 0x00, 0x08, - 0x56, 0x23, 0x00, 0x08, 0xf4, 0x22, 0x00, 0x08, 0xf4, 0x22, 0x00, 0x08, - 0xf2, 0x22, 0x00, 0x08, 0xf8, 0x22, 0x00, 0x08, 0xf8, 0x22, 0x00, 0x08, - 0x20, 0x24, 0x00, 0x08, 0xf2, 0x22, 0x00, 0x08, 0xf8, 0x22, 0x00, 0x08, - 0x20, 0x24, 0x00, 0x08, 0xf8, 0x22, 0x00, 0x08, 0xf2, 0x22, 0x00, 0x08, - 0xd6, 0x23, 0x00, 0x08, 0xd6, 0x23, 0x00, 0x08, 0xd6, 0x23, 0x00, 0x08, - 0x5a, 0x24, 0x00, 0x08, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x20, 0x6f, 0x76, - 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x00, 0x00, 0x6e, 0x6f, 0x6e, 0x61, - 0x6d, 0x65, 0x00, 0x00, 0xf8, 0x3d, 0x00, 0x08, 0xfe, 0x3d, 0x00, 0x08, - 0x04, 0x3e, 0x00, 0x08, 0x0a, 0x3e, 0x00, 0x08, 0xf4, 0x3d, 0x00, 0x08, - 0x10, 0x3e, 0x00, 0x08, 0x16, 0x3e, 0x00, 0x08, 0x1c, 0x3e, 0x00, 0x08, - 0xf0, 0x3d, 0x00, 0x08, 0x69, 0x64, 0x6c, 0x65, 0x00, 0x00, 0x00, 0x00, - 0x63, 0x68, 0x53, 0x79, 0x73, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x00, - 0x63, 0x68, 0x53, 0x79, 0x73, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x00, - 0x63, 0x68, 0x53, 0x79, 0x73, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x00, - 0x63, 0x68, 0x53, 0x79, 0x73, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x00, - 0x63, 0x68, 0x53, 0x79, 0x73, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x00, - 0x63, 0x68, 0x53, 0x79, 0x73, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x00, - 0x63, 0x68, 0x53, 0x79, 0x73, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x00, - 0x63, 0x68, 0x54, 0x68, 0x64, 0x44, 0x6f, 0x44, 0x65, 0x71, 0x75, 0x65, - 0x75, 0x65, 0x4e, 0x65, 0x78, 0x74, 0x49, 0x00, 0x63, 0x68, 0x53, 0x79, - 0x73, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x00, 0x5f, 0x5f, 0x73, 0x63, - 0x68, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x5f, 0x62, 0x65, 0x68, 0x69, - 0x6e, 0x64, 0x00, 0x00, 0x63, 0x68, 0x4d, 0x74, 0x78, 0x4c, 0x6f, 0x63, - 0x6b, 0x53, 0x00, 0x00, 0x63, 0x68, 0x56, 0x54, 0x44, 0x6f, 0x53, 0x65, - 0x74, 0x49, 0x00, 0x00, 0x5f, 0x5f, 0x73, 0x63, 0x68, 0x5f, 0x72, 0x65, - 0x61, 0x64, 0x79, 0x5f, 0x61, 0x68, 0x65, 0x61, 0x64, 0x00, 0x00, 0x00, - 0x63, 0x68, 0x43, 0x6f, 0x72, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x46, - 0x72, 0x6f, 0x6d, 0x54, 0x6f, 0x70, 0x49, 0x00, 0x63, 0x68, 0x54, 0x68, - 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x69, - 0x63, 0x00, 0x00, 0x00, 0x63, 0x68, 0x48, 0x65, 0x61, 0x70, 0x46, 0x72, - 0x65, 0x65, 0x00, 0x00, 0x63, 0x68, 0x4d, 0x74, 0x78, 0x55, 0x6e, 0x6c, - 0x6f, 0x63, 0x6b, 0x00, 0x63, 0x68, 0x56, 0x54, 0x44, 0x6f, 0x54, 0x69, - 0x63, 0x6b, 0x49, 0x00, 0x63, 0x68, 0x54, 0x68, 0x64, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x00, 0x00, 0x00, 0x00, 0x63, 0x68, 0x53, 0x63, - 0x68, 0x52, 0x65, 0x61, 0x64, 0x79, 0x49, 0x00, 0x63, 0x68, 0x54, 0x68, - 0x64, 0x45, 0x78, 0x69, 0x74, 0x53, 0x00, 0x00, 0x63, 0x68, 0x53, 0x63, - 0x68, 0x57, 0x61, 0x6b, 0x65, 0x75, 0x70, 0x53, 0x00, 0x00, 0x00, 0x00, - 0x63, 0x68, 0x54, 0x68, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x49, - 0x00, 0x00, 0x00, 0x00, 0x63, 0x68, 0x52, 0x65, 0x67, 0x4e, 0x65, 0x78, - 0x74, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x00, 0x61, 0x64, 0x63, 0x5f, - 0x6c, 0x6c, 0x64, 0x5f, 0x76, 0x72, 0x65, 0x67, 0x5f, 0x6f, 0x6e, 0x00, - 0x73, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x41, 0x6c, 0x61, 0x72, 0x6d, - 0x00, 0x00, 0x00, 0x00, 0x61, 0x64, 0x63, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x00, 0x00, 0x00, 0x00, 0x63, 0x61, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x77, 0x6d, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x00, 0x00, 0x00, 0x00, 0x73, 0x74, 0x53, 0x65, 0x74, 0x41, 0x6c, 0x61, - 0x72, 0x6d, 0x00, 0x00, 0x70, 0x77, 0x6d, 0x5f, 0x6c, 0x6c, 0x64, 0x5f, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x00, 0x00, 0x00, 0x61, 0x64, 0x63, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x49, 0x00, 0x61, 0x64, 0x63, 0x5f, 0x6c, 0x6c, 0x64, 0x5f, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x00, 0x00, 0x00, 0x63, 0x61, 0x6e, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x00, 0x00, 0x61, 0x64, 0x63, 0x43, 0x6f, 0x6e, 0x76, 0x65, - 0x72, 0x74, 0x00, 0x00, 0x63, 0x61, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x40, 0x08, 0x00, 0x02, 0x40, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x02, 0x40, 0x1c, 0x00, 0x02, 0x40, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x0a, 0x00, 0x00, 0x02, 0x40, - 0x30, 0x00, 0x02, 0x40, 0x06, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x0a, - 0x00, 0x00, 0x02, 0x40, 0x44, 0x00, 0x02, 0x40, 0x78, 0x00, 0x00, 0x00, - 0x00, 0x0c, 0x03, 0x0b, 0x00, 0x00, 0x02, 0x40, 0x58, 0x00, 0x02, 0x40, - 0x78, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x0b, 0x64, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x1c, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x16, 0x80, 0x30, - 0x04, 0x04, 0x3c, 0x08, 0x14, 0x0c, 0x10, 0x18, 0x1c, 0x20, 0x21, 0x22, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x58, 0x00, 0x08, 0x48, 0x12, 0x00, 0x20, - 0x48, 0x12, 0x00, 0x20, 0x48, 0x12, 0x00, 0x20, 0x20, 0x58, 0x00, 0x08, + 0x4e, 0x1f, 0x00, 0x08, 0x58, 0x1f, 0x00, 0x08, 0x58, 0x1f, 0x00, 0x08, + 0x58, 0x1f, 0x00, 0x08, 0x70, 0x20, 0x00, 0x08, 0x56, 0x23, 0x00, 0x08, + 0xf4, 0x22, 0x00, 0x08, 0xf4, 0x22, 0x00, 0x08, 0xf2, 0x22, 0x00, 0x08, + 0xf8, 0x22, 0x00, 0x08, 0xf8, 0x22, 0x00, 0x08, 0x20, 0x24, 0x00, 0x08, + 0xf2, 0x22, 0x00, 0x08, 0xf8, 0x22, 0x00, 0x08, 0x20, 0x24, 0x00, 0x08, + 0xf8, 0x22, 0x00, 0x08, 0xf2, 0x22, 0x00, 0x08, 0xd6, 0x23, 0x00, 0x08, + 0xd6, 0x23, 0x00, 0x08, 0xd6, 0x23, 0x00, 0x08, 0x5a, 0x24, 0x00, 0x08, + 0x73, 0x74, 0x61, 0x63, 0x6b, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, + 0x6f, 0x77, 0x00, 0x00, 0x6e, 0x6f, 0x6e, 0x61, 0x6d, 0x65, 0x00, 0x00, + 0x58, 0x3d, 0x00, 0x08, 0x5e, 0x3d, 0x00, 0x08, 0x64, 0x3d, 0x00, 0x08, + 0x6a, 0x3d, 0x00, 0x08, 0x54, 0x3d, 0x00, 0x08, 0x70, 0x3d, 0x00, 0x08, + 0x76, 0x3d, 0x00, 0x08, 0x7c, 0x3d, 0x00, 0x08, 0x50, 0x3d, 0x00, 0x08, + 0x69, 0x64, 0x6c, 0x65, 0x00, 0x00, 0x00, 0x00, 0x63, 0x68, 0x53, 0x79, + 0x73, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x00, 0x63, 0x68, 0x53, 0x79, + 0x73, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x00, 0x63, 0x68, 0x53, 0x79, + 0x73, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x00, 0x63, 0x68, 0x53, 0x79, + 0x73, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x00, 0x63, 0x68, 0x53, 0x79, + 0x73, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x00, 0x63, 0x68, 0x53, 0x79, + 0x73, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x00, 0x63, 0x68, 0x53, 0x79, + 0x73, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x00, 0x63, 0x68, 0x54, 0x68, + 0x64, 0x44, 0x6f, 0x44, 0x65, 0x71, 0x75, 0x65, 0x75, 0x65, 0x4e, 0x65, + 0x78, 0x74, 0x49, 0x00, 0x63, 0x68, 0x53, 0x79, 0x73, 0x55, 0x6e, 0x6c, + 0x6f, 0x63, 0x6b, 0x00, 0x5f, 0x5f, 0x73, 0x63, 0x68, 0x5f, 0x72, 0x65, + 0x61, 0x64, 0x79, 0x5f, 0x62, 0x65, 0x68, 0x69, 0x6e, 0x64, 0x00, 0x00, + 0x63, 0x68, 0x4d, 0x74, 0x78, 0x4c, 0x6f, 0x63, 0x6b, 0x53, 0x00, 0x00, + 0x63, 0x68, 0x56, 0x54, 0x44, 0x6f, 0x53, 0x65, 0x74, 0x49, 0x00, 0x00, + 0x5f, 0x5f, 0x73, 0x63, 0x68, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x5f, + 0x61, 0x68, 0x65, 0x61, 0x64, 0x00, 0x00, 0x00, 0x63, 0x68, 0x43, 0x6f, + 0x72, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x46, 0x72, 0x6f, 0x6d, 0x54, + 0x6f, 0x70, 0x49, 0x00, 0x63, 0x68, 0x54, 0x68, 0x64, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x00, 0x00, 0x00, + 0x63, 0x68, 0x48, 0x65, 0x61, 0x70, 0x46, 0x72, 0x65, 0x65, 0x00, 0x00, + 0x63, 0x68, 0x4d, 0x74, 0x78, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x00, + 0x63, 0x68, 0x56, 0x54, 0x44, 0x6f, 0x54, 0x69, 0x63, 0x6b, 0x49, 0x00, + 0x63, 0x68, 0x54, 0x68, 0x64, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x00, 0x00, 0x00, 0x00, 0x63, 0x68, 0x53, 0x63, 0x68, 0x52, 0x65, 0x61, + 0x64, 0x79, 0x49, 0x00, 0x63, 0x68, 0x54, 0x68, 0x64, 0x45, 0x78, 0x69, + 0x74, 0x53, 0x00, 0x00, 0x63, 0x68, 0x53, 0x63, 0x68, 0x57, 0x61, 0x6b, + 0x65, 0x75, 0x70, 0x53, 0x00, 0x00, 0x00, 0x00, 0x63, 0x68, 0x54, 0x68, + 0x64, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x49, 0x00, 0x00, 0x00, 0x00, + 0x63, 0x68, 0x52, 0x65, 0x67, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x68, 0x72, + 0x65, 0x61, 0x64, 0x00, 0x61, 0x64, 0x63, 0x5f, 0x6c, 0x6c, 0x64, 0x5f, + 0x76, 0x72, 0x65, 0x67, 0x5f, 0x6f, 0x6e, 0x00, 0x73, 0x74, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x64, 0x63, 0x53, 0x74, 0x61, 0x72, 0x74, 0x00, 0x00, 0x00, 0x00, + 0x63, 0x61, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x77, 0x6d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x00, 0x00, 0x00, 0x00, + 0x73, 0x74, 0x53, 0x65, 0x74, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x00, 0x00, + 0x70, 0x77, 0x6d, 0x5f, 0x6c, 0x6c, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x00, 0x00, 0x00, 0x61, 0x64, 0x63, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x00, + 0x61, 0x64, 0x63, 0x5f, 0x6c, 0x6c, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x00, 0x00, 0x00, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x00, 0x00, + 0x61, 0x64, 0x63, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x00, 0x00, + 0x63, 0x61, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, + 0x08, 0x00, 0x02, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x02, 0x40, 0x1c, 0x00, 0x02, 0x40, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x01, 0x0a, 0x00, 0x00, 0x02, 0x40, 0x30, 0x00, 0x02, 0x40, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x0a, 0x00, 0x00, 0x02, 0x40, + 0x44, 0x00, 0x02, 0x40, 0x78, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x03, 0x0b, + 0x00, 0x00, 0x02, 0x40, 0x58, 0x00, 0x02, 0x40, 0x78, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x04, 0x0b, 0x64, 0x00, 0x00, 0x00, 0x05, 0x00, 0x1c, 0x00, + 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x16, 0x80, 0x30, 0x04, 0x04, 0x3c, 0x08, + 0x14, 0x0c, 0x10, 0x18, 0x1c, 0x20, 0x21, 0x22, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x57, 0x00, 0x08, 0x44, 0x12, 0x00, 0x20, 0x44, 0x12, 0x00, 0x20, + 0x44, 0x12, 0x00, 0x20, 0x80, 0x57, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x57, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x58, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x58, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x58, 0x00, 0x08, + 0x80, 0x57, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x57, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x57, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x58, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x58, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x58, 0x00, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x41, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x80, 0x57, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x57, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x60, 0x41, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, @@ -2132,6 +2119,19 @@ static const unsigned char build_wideband_image_bin[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x20, 0x2d, 0x4c, 0xa3 + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x07, 0x1a, 0x4b, 0x5c }; unsigned int build_wideband_image_bin_len = 25600; diff --git a/for_rusefi/wideband_image_with_bl.bin b/for_rusefi/wideband_image_with_bl.bin index 3c433585d96efdc046572c4642eaf1c7b08eab61..2d936b1c4eb3abd1bb7cd574363fb6d976113cd5 100644 GIT binary patch delta 3145 zcmcImeQ;A%7C-kTZA1Amkb)@<_N7T_+5l|{h0+$9koJ-E_4@;A+hs$`YFI%lh}50B zZC4y*bzJ4DTd1R;-PNVARALo(0D)n45WkXDN8BPCMx3~_YRmfZk|ud?&keBh$NsyS z`Q@B*-#Pc5d(X$c{bAA{CZiv7q{sIOHwpr<%RR z3zMs+R3>ZHZ0~fZ&U3(b=ZwrGU;k{ins%(`eb3L`!jai@KyRhIzF>i)7BmOzL32Oi zOdV((HK5suxF2C;TJx^qmjL1lVk2t5oQ@V1^sL^Jv^S=j^wJ4^<^09Sb;Z)E(`pW{ zQT^TMeQd3IStP_wM&fie$y?a59{oi>%?JykVh-@9^`JR-3$8WL7t)udER4w^)uibA zEM1q9+S&vfMNy=|Cf|?zAr*JA$@h|Zc~bHLE%2|m(95~Y6Rf|P&d)1Ju(4*^miI?$ zx0=b%=r63<`OnF+G1;&ui8sj7zZI~MfNUO40wa@Ulpz3SqoKf{NPSURQs`S&Q`uH| znp=^)QH>i%6b)$2g>bqi=-#iQ_g(Fj8cTP|@5uJ%AP zl?&FDT$~L&Q`Mr{a5J9XEkErTSUA5T(U|t+wl_GDt7^MT4xJX5{+1T{Wa0Hw8EvK) z3YR2K<(U>L7hXuP;THPAQj6|*G+}#-rQSEqwt^!^siP>HoS=6XWs+{XyXgKxHmw2* zoI^K;(VY&&Rpg&Qn2~=66T*UgG4i_*dSCAHtz_PCguuji(;hjy*<8ARjrO8lkfjX~ zdU(a6nM|_+F^E=r-7E~*3PP#69&9@eXGpCcz%OXeqUCko#8ZIk=|2GUe5ZB zA9pC-8~y3<`^a?Lwz3-78BI z5gBtrmOhLT!v>cug(5bu+CZ$Ge$HC%2kR0)n4Q7`Z>!s4h)XfdI^LgaU>W$g2*Lk- zm|ex_VN{vo?SQ^1qL9%8)(`puHjh(i5H@8g<^|qVkHz3}4=2T?ah&3E0F2D&igGp7 zBs2;cUQ(*_fVJXtyE`sjK#lT%f~kHsvlc3B zkcXP@DLJCrp!bZ2o-;KH<1k>>d5Gz1lFh>#vhe!}B{T8;-4JK8dHxbon-)}oS=UWU zZJv8VNv8P;i7T~j_G}8>UZt|Jk2cQ+439PkU{nJ<3lr-o%dnGtjl3Fpo2|(X!4U!A zxC20O0`N}gFRVa{@^j8zm?i*|c7OuMSE&Eg*&StHBV}nrJ*)KT<4P*#!KlnSG`CIXyNKJTf6Y`tmX^h7 zS^1K_du7%tWXT_C5C(*}bk_~}d}NW>Am}|VtcXifcF1$vHL`Rv(vDgdx85sDZ(>@w z(4t0eM?EJy@uJp3`vb)NuWZA5jh?Kn*UI_V>+Em44gXSN?p(vLe@&UzK zwFyryKbj-vxbAqUT}b!FrJnfpe$g5x1`|5j9q-G+cs7JpL+6*b-L?Z7Q}Uduz2#XX z;eguklLH4#x@}Fu9p2mBpAN9I-pTeJ=nkd1ocsO)3);C+(#4D+G<@^V4|MtNz zPsJ|(x*Y5VtdU<;uq%t@Kh}_u58{RMQvvY~TS5ed-joSGE#A-B+2B z%WCckv}5(Of8V~dH<$c@&Ru&a@zDF$zQaYQXo>3*G0@xHqV2D-)!3pQp8_=S zM9OMdU*9!lfvo}#*>aXLDQ28{A=Z)IgZVa1u4<+ut+zhV|$y9Ee&I1K^sRQXf(jt0kH*T zyP4Sg(d7=r$2hOI*|)BG8=+s-%%C6Fq@~=W@DP_=bfTt`WYePBo!qqu{c~;BLRPQ! zXaF~U+OY=&6((m_!r;8DJ$YK#vX1^(+emcOUAKz#(%p60xVAm63H@*ll`SIk5q; z3GqurGol;uAfgvh@4MFgIM>&YPv4vCGs@(fN6hH|S@uQO6EiKCcR-yoU+nk~_#$X< delta 3305 zcmb^zZE#f8_1?F;$s=EEvJf}$AaAo9+++g@*&rdCkC$wC>_@)8fUMOBu`adLKt$1^ zNh+;Sm??0<0pipuv>?$b?KVv62*k)tfl`~*wgx}ah%jpvB@WWJpYQeDh1%%&vv20i zJ?GwY&OPUzuh$>M{Xu;4Zw&7D{hb-o%-x!fSfphH&$Aeznzd}~v(HHqB_Ar0bukEd(YzU_0jGx&F8KyM+uzG%Tm4T!C7Mr=C3 z15Jqis2;Hx_R;~~pj?@I;barQ003@8?2#;xSV_k8X3dqTYI=m+(65~L6kxvSoVq#n zuhgjCGkABbQkR4R%(PP`l{kMovSFu2kuF9trvds(NbOXlH>29q+A5%_ArT?I8eZw^Z=c14 zD@d*-x9~ApHY9L6H9RLvZ!5@*{j%w(1{o+l2{iH}lYuMZ6zTqmEd7%_VKMgA%d_AP zM}&34j=}<76Tw^}+lw4g>6^Mp7%_+M^2QWWFC9w}s$Jz#@Tu zeiSZFaC{c11=kJN3eVm+mLw?W-#YvA$F7};PCi|ges#|oGGQsl`+ai@3NaH+C*tCh zxQ90h0UiJH{ zR&3U-iNs}RNRIfN#mgDoNCrxB@xA0&NjBD!Kb34+O4TYzLEY38usRCsc7Otaa{w10 zqtCY?b^>q{oR9c6EZc}PYeN{_xH;>Yu?;5M;Tr9PAj*;)B-igLNTr-t0ZIWze7Vbq za2ma250KRs#CCW1CQFmBneI)1LKgPF>AxBwgCaew@JM@lRNPmVk6VbPEF1rTxXTRf zRE`=qQ>JG)wJxHk^+JLDP-M)vLY1*=kSVjNiljE%je_Zu(T+6 z3*MCGnE>IwMBXUN>hn0Jh85|zN~gQC;gHzr_B0+AJ?=q(gQ8(dmJTacubRV_`^Fhd z)i|;&8Am3&xWL=yG;=ZO1;{ggJddL}xg`V%CY3{8mx3*4lrS$KMf!>27Uyq8mdk!? zmtAZYyK@xN0&h~6nX@~OYGQrT)1YF~j|^1ksB$&XDz=F8z1XJfLKfjen==+qW}9Du zA{z^o0{tLJi2mh}@G+?u@KydCuEe>_Axlvib0x6OiK;nk{Cq8(AM+R0{W_2bk`AC2 z`CCChvRKDkL~QHRb$LY2n-^zZ0mmPY^V}j}?NvOYn$vf^A9&8#BEF9XOu8;?ysEKw z@!Uc{xr1+;e~bdp6p zjRG{l6?_4N;uEMEH2^{*)d+>{Q0xGOwFo_D-wL5eXj(w12+sKGJ!4zSuLCa`E!Ss# zrX)dJ&&zyHwaBBpH^|bJ_|94KW%&zuob0W51AjqUEA#l9(Hh8&U*^+4=277Eryr5Kt2=-@m^nQbtA_ABHybq&K(Ntoe7XRN(7nH{F%-o zn#SZnO?Do=8GVkX)F`Y8eqE$rr6HaXjQF9ILpyK$1#N?_Kt8O=?Q0NMimSy*D3qz; zgYm*SBzhV=_0OKPi}RjP4Gt7z;+d@!dlGf_svH$zhM)`##BR>f*_ji%9`$iH2Tl8w za(F#`v;k78N{LBlBTTvQ8Z)FHSYNZgx za}?v-Xip9M9x{$`n)k=~ zrg>;kR1I$W4ioo@#BPimhzx9w`Z$_i2O7>tXieOZW6~oLY8*25F(+CFY+lCJS<_k# z{`6`=y(ZELYWL1i+amtYbI#5TEidE1b2MEFO4A}xk)STasUM)Gj)Hmt=rsd3cQPji zSzRw}9a_}dt4I^!ZU|>A+#HyIF#`E-h*uDuku(XAz`?|JK+!x2MRWTjzp7n>FOg8~ z{5)D?yCH{YEge2|s50qYV>v>CK*j0AqLT`rd3ADvRII$5cPXMWB=FQ}l_3$kwKP};DDjjwE{TCqNT3whEl*zlUt6v>7ZTcT(_1EP5N)7&~cS@ zdw@>C9$pH=0CKgP{zs|71K4{Y|Muki3MN-|C1QiAh^HP>?_adRY)V0VGpy6#@dUZ- zEW}61EZ6enyQ13+E|(jw&LD2rQXC>rxs1sHrE%pgKQ-+N8FH<_50YyxI}?#fzI(}i z{ZJnF(yQ>uk%DovU?t)nulf0y`K8u*^Q%GCAfR~X2^^Y?+Owt;17SVd0o-q`) z!;gw82W{O{a6+boG-WmEXlTJk@^V83-c14xx%f+x+PG2mS`d@jjq}OD#->@xa?fch z0$sB)H+gq(-KmcQls-lbO}Y3{vZ`sBXRQoLRuq%kWiy<-7VC*C|Mo;qtlI*8SPOjB zz|X^45$AvDJNdQ4JC*buBhtPG%r+(-iW3UDo~ mnE)KXw6D2s7t_bD`L+$;^pc*V8Q=ez_IXxglbT;#cjP}ji;)5V From 51775e719b6964f7dc898ce8331c97a9b9543719 Mon Sep 17 00:00:00 2001 From: rusefillc <48498823+rusefillc@users.noreply.github.com> Date: Tue, 11 Jan 2022 20:44:46 -0500 Subject: [PATCH 49/59] ID pins to pinout header (#41) Co-authored-by: rusefillc --- firmware/boards/f0_module/io/io_pins.h | 6 ++++++ firmware/boards/f0_module/port.cpp | 4 ++-- firmware/boards/f1_dave/io/io_pins.h | 6 ++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/firmware/boards/f0_module/io/io_pins.h b/firmware/boards/f0_module/io/io_pins.h index add3565..4380d87 100644 --- a/firmware/boards/f0_module/io/io_pins.h +++ b/firmware/boards/f0_module/io/io_pins.h @@ -16,3 +16,9 @@ // PA6 #define PUMP_DAC_PWM_DEVICE PWMD3 #define PUMP_DAC_PWM_CHANNEL 0 + +#define ID_SEL1_PORT GPIOB +#define ID_SEL1_PIN 1 + +#define ID_SEL2_PORT GPIOA +#define ID_SEL2_PIN 8 diff --git a/firmware/boards/f0_module/port.cpp b/firmware/boards/f0_module/port.cpp index 61097a5..1a2ed32 100644 --- a/firmware/boards/f0_module/port.cpp +++ b/firmware/boards/f0_module/port.cpp @@ -97,8 +97,8 @@ Configuration GetConfiguration() } // Now, override the index with a hardware-strapped option (if present) - auto sel1 = readSelPin(GPIOB, 1); - auto sel2 = readSelPin(GPIOA, 8); + auto sel1 = readSelPin(ID_SEL1_PORT, ID_SEL1_PIN); + auto sel2 = readSelPin(ID_SEL2_PORT, ID_SEL2_PIN); // See https://github.com/mck1117/wideband/issues/11 switch (3 * sel1 + sel2) { diff --git a/firmware/boards/f1_dave/io/io_pins.h b/firmware/boards/f1_dave/io/io_pins.h index 471591b..7a64284 100644 --- a/firmware/boards/f1_dave/io/io_pins.h +++ b/firmware/boards/f1_dave/io/io_pins.h @@ -16,3 +16,9 @@ // PA1 TIM2_CH2 #define PUMP_DAC_PWM_DEVICE PWMD2 #define PUMP_DAC_PWM_CHANNEL 1 + +#define ID_SEL1_PORT GPIOB +#define ID_SEL1_PIN 0 + +#define ID_SEL2_PORT GPIOB +#define ID_SEL2_PIN 1 \ No newline at end of file From 23a05968d3eaa2c6a9e326138c931f02467fbbad Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Thu, 13 Jan 2022 10:28:33 -0800 Subject: [PATCH 50/59] run at 64MHz --- firmware/boards/f1_dave/mcuconf.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/firmware/boards/f1_dave/mcuconf.h b/firmware/boards/f1_dave/mcuconf.h index 8fd9e4c..f2c6cc5 100644 --- a/firmware/boards/f1_dave/mcuconf.h +++ b/firmware/boards/f1_dave/mcuconf.h @@ -44,11 +44,11 @@ #define STM32_SW STM32_SW_PLL #define STM32_PLLSRC STM32_PLLSRC_HSI #define STM32_PLLXTPRE STM32_PLLXTPRE_DIV1 -#define STM32_PLLMUL_VALUE 12 +#define STM32_PLLMUL_VALUE 16 #define STM32_HPRE STM32_HPRE_DIV1 #define STM32_PPRE1 STM32_PPRE1_DIV2 -#define STM32_PPRE2 STM32_PPRE2_DIV2 -#define STM32_ADCPRE STM32_ADCPRE_DIV4 +#define STM32_PPRE2 STM32_PPRE2_DIV1 +#define STM32_ADCPRE STM32_ADCPRE_DIV6 #define STM32_USB_CLOCK_REQUIRED TRUE #define STM32_USBPRE STM32_USBPRE_DIV1 #define STM32_MCOSEL STM32_MCOSEL_NOCLOCK From 660dad473ce2e0721438f7be5749fd3e449680c7 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Thu, 13 Jan 2022 10:45:12 -0800 Subject: [PATCH 51/59] let's go back to 48 --- firmware/boards/f1_dave/mcuconf.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/firmware/boards/f1_dave/mcuconf.h b/firmware/boards/f1_dave/mcuconf.h index f2c6cc5..c4e8557 100644 --- a/firmware/boards/f1_dave/mcuconf.h +++ b/firmware/boards/f1_dave/mcuconf.h @@ -44,11 +44,11 @@ #define STM32_SW STM32_SW_PLL #define STM32_PLLSRC STM32_PLLSRC_HSI #define STM32_PLLXTPRE STM32_PLLXTPRE_DIV1 -#define STM32_PLLMUL_VALUE 16 +#define STM32_PLLMUL_VALUE 12 #define STM32_HPRE STM32_HPRE_DIV1 #define STM32_PPRE1 STM32_PPRE1_DIV2 #define STM32_PPRE2 STM32_PPRE2_DIV1 -#define STM32_ADCPRE STM32_ADCPRE_DIV6 +#define STM32_ADCPRE STM32_ADCPRE_DIV4 #define STM32_USB_CLOCK_REQUIRED TRUE #define STM32_USBPRE STM32_USBPRE_DIV1 #define STM32_MCOSEL STM32_MCOSEL_NOCLOCK From d9b83379f34c1c14c220c0aa4c461e09c4665168 Mon Sep 17 00:00:00 2001 From: rusefillc <48498823+rusefillc@users.noreply.github.com> Date: Thu, 13 Jan 2022 13:55:03 -0500 Subject: [PATCH 52/59] CAN options (#42) Co-authored-by: rusefillc --- firmware/boards/f0_module/port_shared.cpp | 3 +++ firmware/boards/f1_dave/mcuconf.h | 2 ++ firmware/boards/f1_dave/port_shared.cpp | 5 ++++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/firmware/boards/f0_module/port_shared.cpp b/firmware/boards/f0_module/port_shared.cpp index 6642113..5fa0e8a 100644 --- a/firmware/boards/f0_module/port_shared.cpp +++ b/firmware/boards/f0_module/port_shared.cpp @@ -5,5 +5,8 @@ const CANConfig canConfig500 = { CAN_MCR_ABOM | CAN_MCR_AWUM | CAN_MCR_TXFP, + /* + For 48MHz http://www.bittiming.can-wiki.info/ gives us Pre-scaler=6, Seq 1=13 and Seq 2=2. Subtract '1' for register values + */ CAN_BTR_SJW(0) | CAN_BTR_BRP(5) | CAN_BTR_TS1(12) | CAN_BTR_TS2(1), }; diff --git a/firmware/boards/f1_dave/mcuconf.h b/firmware/boards/f1_dave/mcuconf.h index c4e8557..7cbf371 100644 --- a/firmware/boards/f1_dave/mcuconf.h +++ b/firmware/boards/f1_dave/mcuconf.h @@ -35,6 +35,8 @@ /* * HAL driver system settings. + * TL,DR: we run at 48MHz. + * It's not possible to run at 72 on HSI because of the PLL's limited configuration options, so 48MHz right now. */ #define STM32_NO_INIT FALSE #define STM32_HSI_ENABLED TRUE diff --git a/firmware/boards/f1_dave/port_shared.cpp b/firmware/boards/f1_dave/port_shared.cpp index f53d7a6..7db8944 100644 --- a/firmware/boards/f1_dave/port_shared.cpp +++ b/firmware/boards/f1_dave/port_shared.cpp @@ -5,5 +5,8 @@ const CANConfig canConfig500 = { CAN_MCR_ABOM | CAN_MCR_AWUM | CAN_MCR_TXFP, - 0 // TODO: set bit timing! correctly! + /* + For 48MHz http://www.bittiming.can-wiki.info/ gives us Pre-scaler=6, Seq 1=13 and Seq 2=2. Subtract '1' for register values + */ + CAN_BTR_SJW(0) | CAN_BTR_BRP(5) | CAN_BTR_TS1(12) | CAN_BTR_TS2(1), }; From 86034506b07e8c83ea32b3456d0b44037c6cc9da Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Thu, 13 Jan 2022 12:09:44 -0800 Subject: [PATCH 53/59] can runs at 24mhz --- firmware/boards/f1_dave/port_shared.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/firmware/boards/f1_dave/port_shared.cpp b/firmware/boards/f1_dave/port_shared.cpp index 7db8944..ad7927d 100644 --- a/firmware/boards/f1_dave/port_shared.cpp +++ b/firmware/boards/f1_dave/port_shared.cpp @@ -6,7 +6,7 @@ const CANConfig canConfig500 = { CAN_MCR_ABOM | CAN_MCR_AWUM | CAN_MCR_TXFP, /* - For 48MHz http://www.bittiming.can-wiki.info/ gives us Pre-scaler=6, Seq 1=13 and Seq 2=2. Subtract '1' for register values + For 24MHz http://www.bittiming.can-wiki.info/ gives us Pre-scaler=3, Seq 1=13 and Seq 2=2. Subtract '1' for register values */ - CAN_BTR_SJW(0) | CAN_BTR_BRP(5) | CAN_BTR_TS1(12) | CAN_BTR_TS2(1), + CAN_BTR_SJW(0) | CAN_BTR_BRP(2) | CAN_BTR_TS1(12) | CAN_BTR_TS2(1), }; From 29329989b24e0f5e678b201e83ea66039b9bb7c2 Mon Sep 17 00:00:00 2001 From: rusefillc <48498823+rusefillc@users.noreply.github.com> Date: Tue, 25 Jan 2022 20:41:11 -0500 Subject: [PATCH 54/59] Attach binaries (#47) Co-authored-by: rusefillc --- .github/workflows/build-firmware.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/build-firmware.yaml b/.github/workflows/build-firmware.yaml index 4e219a0..84d083e 100644 --- a/.github/workflows/build-firmware.yaml +++ b/.github/workflows/build-firmware.yaml @@ -35,3 +35,9 @@ jobs: - name: Build Firmware working-directory: ./firmware/boards/${{matrix.build-target}} run: ./build_wideband.sh + + - name: Attach binaries + uses: actions/upload-artifact@v2 + with: + name: Wideband ${{matrix.build-target}} + path: ./firmware/build/wideband.* From db9180f385c57dc3eba76f6f735eaf5c42064505 Mon Sep 17 00:00:00 2001 From: rusefillc <48498823+rusefillc@users.noreply.github.com> Date: Tue, 25 Jan 2022 20:41:26 -0500 Subject: [PATCH 55/59] badge (#48) Co-authored-by: rusefillc --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index f3cec29..411bc00 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +[![Build Firmware](https://github.com/rusefi/wideband/actions/workflows/build-firmware.yaml/badge.svg)](https://github.com/rusefi/wideband/actions/workflows/build-firmware.yaml) + # rusEFI Wideband Controller [User Documentation](https://rusefi.com/s/wb) From 3a5dc0208e0c29cc47d63fe6381dcc8912cb8401 Mon Sep 17 00:00:00 2001 From: rusefillc <48498823+rusefillc@users.noreply.github.com> Date: Tue, 25 Jan 2022 22:11:57 -0500 Subject: [PATCH 56/59] static (#49) Co-authored-by: rusefillc --- firmware/heater_control.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/heater_control.cpp b/firmware/heater_control.cpp index c587b35..e36b4bf 100644 --- a/firmware/heater_control.cpp +++ b/firmware/heater_control.cpp @@ -12,7 +12,7 @@ using namespace wbo; // 400khz / 1024 = 390hz PWM -Pwm heaterPwm(HEATER_PWM_DEVICE, HEATER_PWM_CHANNEL, 400'000, 1024); +static Pwm heaterPwm(HEATER_PWM_DEVICE, HEATER_PWM_CHANNEL, 400'000, 1024); enum class HeaterState { From a376b54b554977759c2e0e7ec4e9ee1f5520c597 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Wed, 26 Jan 2022 10:56:58 -0800 Subject: [PATCH 57/59] report duty as float --- firmware/can.cpp | 4 ++-- firmware/heater_control.cpp | 2 +- firmware/heater_control.h | 2 +- firmware/pump_dac.cpp | 2 +- firmware/pump_dac.h | 2 +- firmware/pwm.cpp | 10 +++++----- firmware/pwm.h | 5 +++-- 7 files changed, 14 insertions(+), 13 deletions(-) diff --git a/firmware/can.cpp b/firmware/can.cpp index 3628b1f..872066b 100644 --- a/firmware/can.cpp +++ b/firmware/can.cpp @@ -126,8 +126,8 @@ void SendRusefiFormat(uint8_t idx) frame.get().Esr = esr; frame.get().NernstDc = GetNernstDc() * 1000; - frame.get().PumpDuty = GetPumpOutputDuty() / 4; + frame.get().PumpDuty = GetPumpOutputDuty() * 255; frame.get().Status = GetCurrentFault(); - frame.get().HeaterDuty = GetHeaterDuty() / 4; + frame.get().HeaterDuty = GetHeaterDuty() * 255; } } diff --git a/firmware/heater_control.cpp b/firmware/heater_control.cpp index e36b4bf..57a7d19 100644 --- a/firmware/heater_control.cpp +++ b/firmware/heater_control.cpp @@ -205,7 +205,7 @@ void SetHeaterAllowed(bool allowed) heaterAllowed = allowed; } -uint16_t GetHeaterDuty() +float GetHeaterDuty() { return heaterPwm.GetLastDuty(); } diff --git a/firmware/heater_control.h b/firmware/heater_control.h index 968cde5..7f4e680 100644 --- a/firmware/heater_control.h +++ b/firmware/heater_control.h @@ -6,4 +6,4 @@ void StartHeaterControl(); bool IsRunningClosedLoop(); void SetBatteryVoltage(float vbatt); void SetHeaterAllowed(bool allowed); -uint16_t GetHeaterDuty(); +float GetHeaterDuty(); diff --git a/firmware/pump_dac.cpp b/firmware/pump_dac.cpp index 77fa203..a702a8d 100644 --- a/firmware/pump_dac.cpp +++ b/firmware/pump_dac.cpp @@ -37,7 +37,7 @@ void SetPumpCurrentTarget(int32_t microampere) pumpDac.SetDuty(volts / VCC_VOLTS); } -uint16_t GetPumpOutputDuty() +float GetPumpOutputDuty() { return pumpDac.GetLastDuty(); } diff --git a/firmware/pump_dac.h b/firmware/pump_dac.h index 1d3be24..b70582e 100644 --- a/firmware/pump_dac.h +++ b/firmware/pump_dac.h @@ -4,4 +4,4 @@ void InitPumpDac(); void SetPumpCurrentTarget(int32_t microamperes); -uint16_t GetPumpOutputDuty(); +float GetPumpOutputDuty(); diff --git a/firmware/pwm.cpp b/firmware/pwm.cpp index 28b634b..662b815 100644 --- a/firmware/pwm.cpp +++ b/firmware/pwm.cpp @@ -45,14 +45,14 @@ float clampF(float min, float clamp, float max) { } void Pwm::SetDuty(float duty) { - pwmcnt_t highTime = m_counterPeriod * clampF(0, duty, 1); - - m_lastDuty = highTime; + auto dutyFloat = clampF(0, duty, 1); + m_dutyFloat = dutyFloat; + pwmcnt_t highTime = m_counterPeriod * dutyFloat; pwm_lld_enable_channel(m_driver, m_channel, highTime); } -uint16_t Pwm::GetLastDuty() const +float Pwm::GetLastDuty() const { - return m_lastDuty; + return m_dutyFloat; } diff --git a/firmware/pwm.h b/firmware/pwm.h index 7a910d3..7cdc27a 100644 --- a/firmware/pwm.h +++ b/firmware/pwm.h @@ -11,11 +11,12 @@ public: void Start(); void SetDuty(float duty); - uint16_t GetLastDuty() const; + float GetLastDuty() const; + private: PWMDriver* const m_driver; const uint8_t m_channel; const uint32_t m_counterFrequency; const uint16_t m_counterPeriod; - uint16_t m_lastDuty; + float m_dutyFloat; }; From 2849b984dd8ac0e0bf9d6958ab65e7c5b001c543 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Fri, 28 Jan 2022 11:21:38 -0800 Subject: [PATCH 58/59] some per board config --- firmware/boards/f0_module/wideband_board_config.h | 12 ++++++++++++ firmware/boards/f1_dave/wideband_board_config.h | 12 ++++++++++++ firmware/wideband_config.h | 8 +------- 3 files changed, 25 insertions(+), 7 deletions(-) create mode 100644 firmware/boards/f0_module/wideband_board_config.h create mode 100644 firmware/boards/f1_dave/wideband_board_config.h diff --git a/firmware/boards/f0_module/wideband_board_config.h b/firmware/boards/f0_module/wideband_board_config.h new file mode 100644 index 0000000..9c1708a --- /dev/null +++ b/firmware/boards/f0_module/wideband_board_config.h @@ -0,0 +1,12 @@ +#pragma once + +// Fundamental board constants +#define VCC_VOLTS (3.3f) +#define HALF_VCC (VCC_VOLTS / 2) +#define ADC_MAX_COUNT (4095) +#define ADC_OVERSAMPLE 24 + +// ******************************* +// Nernst voltage & ESR sense +// ******************************* +#define NERNST_INPUT_GAIN (1 / 2.7f) diff --git a/firmware/boards/f1_dave/wideband_board_config.h b/firmware/boards/f1_dave/wideband_board_config.h new file mode 100644 index 0000000..eca27c6 --- /dev/null +++ b/firmware/boards/f1_dave/wideband_board_config.h @@ -0,0 +1,12 @@ +#pragma once + +// Fundamental board constants +#define VCC_VOLTS (3.3f) +#define HALF_VCC (VCC_VOLTS / 2) +#define ADC_MAX_COUNT (4095) +#define ADC_OVERSAMPLE 24 + +// ******************************* +// Nernst voltage & ESR sense +// ******************************* +#define NERNST_INPUT_GAIN (1 / 3.0f) diff --git a/firmware/wideband_config.h b/firmware/wideband_config.h index b111c2a..f8c8b3d 100644 --- a/firmware/wideband_config.h +++ b/firmware/wideband_config.h @@ -1,17 +1,11 @@ #pragma once #include "io_pins.h" - -// Fundamental board constants -#define VCC_VOLTS (3.3f) -#define HALF_VCC (VCC_VOLTS / 2) -#define ADC_MAX_COUNT (4095) -#define ADC_OVERSAMPLE 24 +#include "wideband_board_config.h" // ******************************* // Nernst voltage & ESR sense // ******************************* -#define NERNST_INPUT_GAIN (1 / 2.7f) // Nernst AC injection resistor value #define ESR_SUPPLY_R (22000) From a981063a8bb5479edd5f03b1ce09f512238a0de6 Mon Sep 17 00:00:00 2001 From: rusefillc <48498823+rusefillc@users.noreply.github.com> Date: Mon, 4 Apr 2022 17:18:08 -0400 Subject: [PATCH 59/59] UART (#52) Co-authored-by: rusefillc --- firmware/boards/f1_dave/build_wideband.sh | 2 +- firmware/main.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/firmware/boards/f1_dave/build_wideband.sh b/firmware/boards/f1_dave/build_wideband.sh index 631db04..cd3a806 100755 --- a/firmware/boards/f1_dave/build_wideband.sh +++ b/firmware/boards/f1_dave/build_wideband.sh @@ -6,4 +6,4 @@ set -e cd ../.. # build app firmware! -make -j12 BOARD=f1_dave +make -j12 BOARD=f1_dave ECHO_UART=TRUE diff --git a/firmware/main.cpp b/firmware/main.cpp index 5eeee05..769a3bc 100644 --- a/firmware/main.cpp +++ b/firmware/main.cpp @@ -26,7 +26,9 @@ int main() { StartPumpControl(); InitCan(); - //InitUart(); +#ifdef ECHO_UART + InitUart(); +#endif while(true) {