From 5da52a8702fb7aadd7e29daab45a94736339e1e1 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Thu, 8 May 2025 20:49:58 +0800 Subject: [PATCH] good progress keep stable with time c control --- Core/Inc/yunhorn_sts_sensors.h | 4 +- Core/Src/yunhorn_sts_presence_rss.c | 272 +++------------------------- Core/Src/yunhorn_sts_process.c | 6 +- LoRaWAN/App/lora_app.c | 61 ++++++- STM32CubeIDE/Release/STS_O7.bin | Bin 254484 -> 254756 bytes 5 files changed, 85 insertions(+), 258 deletions(-) diff --git a/Core/Inc/yunhorn_sts_sensors.h b/Core/Inc/yunhorn_sts_sensors.h index 51b8517..6933937 100644 --- a/Core/Inc/yunhorn_sts_sensors.h +++ b/Core/Inc/yunhorn_sts_sensors.h @@ -83,7 +83,7 @@ enum RSS_CFG_order{ RSS_CFG_ITR_WEIGHT, // 13 RSS_CFG_OUTPUT_TIME, // 14 RSS_CFG_DOWNSAMPLING_FACTOR, // 15 - RSS_CFG_POWER_MODE, // 16 + RSS_CFG_TIME_C_THRESHOLD, // 16 RSS_CFG_UPDATE_FLAG, // 17 ADD AT 2025-04-11 RSS_CFG_BG_MOTION_NOISE, // 18 RSS_CFG_SLID_WIN, // 19 THRESHOLD AND WIN @@ -375,7 +375,7 @@ typedef struct STS_OO_RSS_SensorTuneDataTypeDef float default_receiver_gain; //[45](0.45f) //default 0.9 gain mdB [4] uint8_t default_config_update_flag; // 1,2,3,4,5 - + uint8_t default_time_c_threshold; // 4 ++ } STS_OO_RSS_SensorTuneDataTypeDef; diff --git a/Core/Src/yunhorn_sts_presence_rss.c b/Core/Src/yunhorn_sts_presence_rss.c index 07a8744..1adad4b 100644 --- a/Core/Src/yunhorn_sts_presence_rss.c +++ b/Core/Src/yunhorn_sts_presence_rss.c @@ -154,7 +154,7 @@ extern uint8_t sts_lamp_bar_color; acc_detector_presence_handle_t rss_handle=NULL; acc_detector_presence_result_t rss_result; volatile float sts_rss_threshold=1.6f, sts_run_start, sts_run_length, sts_run_threshold, sts_run_gain, sts_run_profile, sts_run_f_inter_fast_cutoff,sts_run_f_inter_slow_cutoff; - +volatile uint8_t sts_time_c_threshold=20; /* USER CODE END Includes */ /* External variables ---------------------------------------------------------*/ @@ -575,7 +575,8 @@ static void print_current_configuration(acc_detector_presence_configuration_t pr static uint8_t yes_count=0; static uint8_t no_count=0; -#define TIME_C 4 +// #define TIME_C 4 +// replaced by sts_time_c_threshold static void sts_print_result(acc_detector_presence_result_t result) { @@ -595,7 +596,7 @@ static void sts_print_result(acc_detector_presence_result_t result) if(signal>(threshold+1000)) { LED1_ON; - if(yes_count(TIME_C-1)) + if(yes_count>(sts_time_c_threshold-1)) { //Out1_ON //Out2_OFF @@ -655,7 +656,7 @@ static void sts_print_result(acc_detector_presence_result_t result) APP_LOG(TS_OFF, VLEVEL_M,"Motion (%5d), Distance: %4dmm [start: %4d length: %4d gain: %3d Threshold:%6d Yes:%d No:%d \r\n", signal,dist,(int)(sts_run_start*1000.0f), (int)(sts_run_length*1000.0f), (int)(sts_run_gain*100.0f), (int)(sts_run_threshold*1000.0f), yes_count, no_count); } - else if(no_count>(TIME_C-1)) + else if(no_count>(sts_time_c_threshold-1)) { //Out1_OFF //Out2_ON @@ -836,109 +837,11 @@ int sts_presence_rss_detection_deinit(void) int sts_presence_rss_fall_rise_detection(void) { - const acc_hal_t *hal = acc_hal_integration_get_implementation(); - - if (!acc_rss_activate(hal)) - { - APP_LOG(TS_OFF, VLEVEL_H,"Failed to activate RSS\n"); - return EXIT_FAILURE; - } - - acc_rss_override_sensor_id_check_at_creation(true); - - acc_detector_presence_configuration_t presence_configuration = acc_detector_presence_configuration_create(); - if (presence_configuration == NULL) - { - APP_LOG(TS_OFF, VLEVEL_H,"Failed to create configuration\n"); - acc_rss_deactivate(); - return EXIT_FAILURE; - } - if ((sts_rss_config_updated_flag != STS_RSS_CONFIG_NON) || (sts_rss_init_ok != 1)) - { - APP_LOG(TS_OFF, VLEVEL_H, "\r\n ------ ---------- rss cfg update flag=%02x \r\n", sts_rss_config_updated_flag); - - - if (sts_rss_init_ok==0) - { - if (sts_work_mode ==STS_UNI_MODE) - { - sts_rss_config_updated_flag = STS_RSS_CONFIG_FALL_DETECTION; - } - else if ((sts_work_mode == STS_RSS_MODE) || (sts_work_mode == STS_DUAL_MODE)) - { - if (sts_rss_config_updated_flag == STS_RSS_CONFIG_NON) - sts_rss_config_updated_flag = STS_RSS_CONFIG_DEFAULT; - } - //set_default_configuration(presence_configuration); - //APP_LOG(TS_OFF, VLEVEL_M, "\r\n First Time RSS init, update flag=%02x\r\n", sts_rss_config_updated_flag); - //print_current_configuration(presence_configuration); - sts_rss_init_ok = 1; - } - - APP_LOG(TS_OFF, VLEVEL_H, "\r\n Update flag=%02x, workmode=%2d \r\n", sts_rss_config_updated_flag, sts_work_mode); - update_configuration_with_type(presence_configuration, sts_rss_config_updated_flag); -#if 0 - switch (sts_rss_config_updated_flag) - { - #if 0 - case STS_RSS_CONFIG_NON: - APP_LOG(TS_OFF, VLEVEL_H,"\r\n##### YUNHORN STS *** Non *** cfg \n"); - // return EXIT_SUCCESS; - break; - #endif - case STS_RSS_CONFIG_DEFAULT: - set_default_configuration(presence_configuration); - APP_LOG(TS_OFF, VLEVEL_H,"\r\n##### YUNHORN STS *** Default *** cfg applied\n"); - break; - case STS_RSS_CONFIG_SIMPLE: - sts_rss_set_current_configuration_simple(presence_configuration); - APP_LOG(TS_OFF, VLEVEL_H,"\r\n##### YUNHORN STS *** Simple *** cfg applied\n"); - break; - case STS_RSS_CONFIG_FULL: - sts_rss_set_current_configuration_full(presence_configuration); - APP_LOG(TS_OFF, VLEVEL_H,"\r\n######### YUNHORN STS *** FULL *** cfg applied\n"); - break; - case STS_RSS_CONFIG_FALL_DETECTION: - set_default_fall_rise_configuration(presence_configuration); - APP_LOG(TS_OFF, VLEVEL_H,"\r\n######### YUNHORN STS *** FALL DETECTION *** cfg applied\n"); - break; - default: - break; - } -#endif - // sts_rss_config_updated_flag = STS_RSS_CONFIG_NON; //update finished, set to 0 - } - - acc_detector_presence_handle_t handle = acc_detector_presence_create(presence_configuration); - if (handle == NULL) - { - APP_LOG(TS_OFF, VLEVEL_H,"Failed to create detector\n"); - acc_detector_presence_configuration_destroy(&presence_configuration); - acc_detector_presence_destroy(&handle); - acc_rss_deactivate(); - return EXIT_FAILURE; - } - - - APP_LOG(TS_OFF, VLEVEL_H,"\r\n============= Start Scan\n"); - - print_current_configuration(presence_configuration); - - acc_detector_presence_configuration_destroy(&presence_configuration); - -// BEFORE MERGE FIRST AND SECOND HALF FALL RISE DETECTION - - if (!acc_detector_presence_activate(handle)) - { - APP_LOG(TS_OFF, VLEVEL_H, "Failed to activate detector \n"); - return false; - } - bool deactivated = false; bool success = true; const int iterations = 1; //(DEFAULT_UPDATE_RATE_PRESENCE); - acc_detector_presence_result_t result; + uint8_t average_result = 0; float average_distance =0.0f; float average_score =0.0f; @@ -956,100 +859,13 @@ int sts_presence_rss_fall_rise_detection(void) //past 10 times of detection with 5 zones from ground to ceiling //for (k=0; k<5; k++) {motion_in_zone[k]=0;} - if ((sts_work_mode == STS_DUAL_MODE)||(sts_work_mode == STS_RSS_MODE)) + { - for (int i = 0; i < (iterations); i++) - { - success = acc_detector_presence_get_next(handle, &result); - success = acc_detector_presence_get_next(handle, &result); - if (!success) - { - APP_LOG(TS_OFF, VLEVEL_H,"acc_detector_presence_get_next() failed\n"); - break; - } - - //print_result(result); - sts_print_result(result); - if (!result.data_saturated) - { - //APP_LOG(TS_OFF, VLEVEL_H,"\n%u ", i); - //print_result(result); - if (result.presence_detected) - { - //print_result(result); - average_result++; - average_distance += result.presence_distance; - average_score += result.presence_score; - //detected_zone = (uint16_t)((float)(result.presence_distance - DEFAULT_START_M) / (float)DEFAULT_ZONE_LENGTH); - //2024-08-05 - detected_zone = (uint16_t)((float)(result.presence_distance) / (float)DEFAULT_ZONE_LENGTH); - motion_in_zone[detected_zone]++; - // new add 2024-06-18 - //detected_hs_zone = (uint16_t)((float)(sts_sensor_install_height/1000.0f - (result.presence_distance))/(float)DEFAULT_ZONE_LENGTH); - //if (detected_hs_zone == 0) - //APP_LOG(TS_OFF, VLEVEL_L, "\r\nPresence_Distance=%u \r\n", (int)result.presence_distance*1000.0); - //APP_LOG(TS_OFF, VLEVEL_L, "\r\nHS_ZONE=%u", (int)detected_hs_zone); - //detected_hs_zone = 12 - detected_zone; - detected_hs_zone = (sts_sensor_install_height/1000)/(DEFAULT_ZONE_LENGTH) - detected_zone; - //motion_in_hs_zone[detected_hs_zone][(motion_detected_count)]++; - motion_in_hs_zone[detected_hs_zone][motion_detected_count]++; - - sts_motion_dataset[motion_count].presence_distance = 1000*result.presence_distance; - sts_motion_dataset[motion_count].presence_score = 1000*result.presence_score; - - motion_count++; - - } - } - - //acc_integration_sleep_ms(1000 / DEFAULT_UPDATE_RATE_PRESENCE); // 15ms, DEFAULT_UPDATE_RATE); - //acc_integration_sleep_ms(10); // --- around 1500 ms in total - //acc_integration_sleep_ms(2); //--- around 1000ms in total - //acc_integration_sleep_ms(1000 / 20); - } - - deactivated = acc_detector_presence_deactivate(handle); - acc_detector_presence_destroy(&handle); - acc_rss_deactivate(); - - APP_LOG(TS_OFF, VLEVEL_H, "\r\n First Half --- Motion Count = %u \r\n", motion_count); - - //acc_detector_presence_deactivate(handle); - } - else if ((sts_work_mode == STS_UNI_MODE)) - { - - // ******** Second Half detection of fall down and rise up - //if (sts_presence_fall_detection == TRUE) - //{ - // the following has been updated, no need to re-cofig -#if 0 - set_default_fall_rise_configuration(presence_configuration); - - if (!acc_detector_presence_reconfigure(&handle, presence_configuration)) - { - APP_LOG(TS_OFF, VLEVEL_H,"Failed to reconfigure detector\n"); - acc_detector_presence_configuration_destroy(&presence_configuration); - acc_detector_presence_destroy(&handle); - acc_rss_deactivate(); - return EXIT_FAILURE; - } -#endif - // activated already -#if 0 - if (!acc_detector_presence_activate(handle)) - { - APP_LOG(TS_OFF, VLEVEL_H, "Failed to activate detector \n"); - return false; - } -#endif - - acc_detector_presence_configuration_destroy(&presence_configuration); // set to full length of iteration for (int i = 0; i < (iterations); i++) { - success = acc_detector_presence_get_next(handle, &result); + success = acc_detector_presence_get_next(rss_handle, &rss_result); if (!success) { APP_LOG(TS_OFF, VLEVEL_H,"acc_detector_presence_get_next() failed\n"); @@ -1057,19 +873,19 @@ int sts_presence_rss_fall_rise_detection(void) } - if (!result.data_saturated) + if (!rss_result.data_saturated) { //APP_LOG(TS_OFF, VLEVEL_L,"\n%u ", i); //print_result(result); - if ((result.presence_detected) && (result.presence_score > DEFAULT_THRESHOLD)) + if ((rss_result.presence_detected) && (rss_result.presence_score > DEFAULT_THRESHOLD)) { //print_result(result); average_result++; - average_distance += result.presence_distance; - average_score += result.presence_score; - //detected_zone = (uint16_t)((float)(result.presence_distance - DEFAULT_START_M) / (float)DEFAULT_ZONE_LENGTH); + average_distance += rss_result.presence_distance; + average_score += rss_result.presence_score; + // 2024-08-05 - detected_zone = (uint16_t)((float)(result.presence_distance) / (float)DEFAULT_ZONE_LENGTH); + detected_zone = (uint16_t)((float)(rss_result.presence_distance) / (float)DEFAULT_ZONE_LENGTH); motion_in_zone[detected_zone]++; // new add 2024-06-18 @@ -1082,8 +898,8 @@ int sts_presence_rss_fall_rise_detection(void) //motion_in_hs_zone[detected_hs_zone][(motion_detected_count)]++; motion_in_hs_zone[detected_hs_zone][motion_detected_count]++; - sts_motion_dataset[motion_count].presence_distance = 1000*result.presence_distance; - sts_motion_dataset[motion_count].presence_score = 1000*result.presence_score; + sts_motion_dataset[motion_count].presence_distance = 1000*rss_result.presence_distance; + sts_motion_dataset[motion_count].presence_score = 1000*rss_result.presence_score; motion_count++; @@ -1095,9 +911,6 @@ int sts_presence_rss_fall_rise_detection(void) //acc_integration_sleep_ms(10); //--- around 1500 ms in total acc_integration_sleep_ms(2); //--- around 1000ms in total } - deactivated = acc_detector_presence_deactivate(handle); - acc_detector_presence_destroy(&handle); - acc_rss_deactivate(); APP_LOG(TS_OFF, VLEVEL_H, "\r\n Second Half --- Motion Count Sum to = %u \r\n", motion_count); @@ -1116,25 +929,6 @@ int sts_presence_rss_fall_rise_detection(void) } - average_distance = (float)(1000.0f*average_distance)/(float)average_result; // in meters - average_score = (float)(1000.0f*average_score)/(float)average_result; - - sts_presence_rss_distance = average_distance; - sts_presence_rss_score = average_score; - - //STS_Yunhorn_DistanceStandardDeviation(); - - // APP_LOG(TS_OFF, VLEVEL_H, "\r\nAverage Distance: %d (mm) Score: %d Singularity: %d \r\n",(int)average_distance, (int)average_score, sts_presence_singularity); - // uint8_t pre_sts_rss_result = (average_result > (DEFAULT_UPDATE_RATE_PRESENCE/5))? 1: 0; - // sts_rss_result=STS_RSS_Filter(pre_sts_rss_result); - - - //APP_LOG(TS_OFF, VLEVEL_M, "\r\nAverage Result=%d Distance=%d, Score=%d MotionCount=%d \r\n", -// (int)average_result, (int)average_distance, (int)average_score, (int)motion_count); - - // sts_rss_result = (average_result > (DEFAULT_UPDATE_RATE_PRESENCE/5))? 1: 0; - // sts_rss_result = (average_result > 0)? 1: 0; - uint8_t pre_sts_rss_result=0; if (sts_work_mode == STS_UNI_MODE) { @@ -1148,24 +942,8 @@ int sts_presence_rss_fall_rise_detection(void) //STS_RSS_Filter_ring(); STS_RSS_Filter(pre_sts_rss_result); - //else { -// sts_rss_result = 0; -// } - - // APP_LOG(TS_OFF, VLEVEL_M, "\r\nMotionCount=%4d Overall Motion=%d \r\n", (int)motion_count, (int)sts_rss_result); - //APP_LOG(TS_OFF, VLEVEL_M, "\r\nAverage Result=%d Distance=%d, Score=%d MotionCount=%d ---Overall Result=%d \r\n", - // (int)average_result, (int)average_distance, (int)average_score, (int)motion_count, (int)sts_rss_result); APP_LOG(TS_OFF, VLEVEL_M, "\r\nMotion Status: %d %d (mm) %d singularity: %d Rated-> %d \r\n",(int)average_result, (int)average_distance, (int)average_score, (int)sts_presence_singularity, (int)sts_rss_result); -#if 0 - if (sts_rss_result) //if (average_score !=0) //if (sts_rss_result) - { - APP_LOG(TS_OFF, VLEVEL_L,"\r\n######## MotionLevel=%4u (level) Gain=%2u (%) Start=%4u (mm) Length=%4u (mm)\r\n", - (int)(1000.0f*sts_presence_rss_config.default_threshold),(int)(100.0f*sts_presence_rss_config.default_receiver_gain), - (int)(1000.0f*sts_presence_rss_config.default_start_m), (int)(1000.0f*sts_presence_rss_config.default_length_m)); - APP_LOG(TS_OFF, VLEVEL_M,"\r\n######## Motion: %u Distance=%u mm, Score=%u Average_result=%u out of %u \r\n", - (uint8_t)sts_rss_result,(int) sts_presence_rss_distance, (int)(sts_presence_rss_score), (int)average_result, (int)iterations); - } -#endif + // RSS feature 1: Motion, No-motion process @@ -1226,15 +1004,9 @@ int sts_presence_rss_fall_rise_detection(void) #endif - if (deactivated && success) - { - APP_LOG(TS_OFF, VLEVEL_H,"Application finished OK\n"); - return EXIT_SUCCESS; - } - - return EXIT_FAILURE; } + void STS_Yunhorn_DistanceStandardDeviation(void) { uint16_t i,j; diff --git a/Core/Src/yunhorn_sts_process.c b/Core/Src/yunhorn_sts_process.c index 23a075c..94ad41c 100644 --- a/Core/Src/yunhorn_sts_process.c +++ b/Core/Src/yunhorn_sts_process.c @@ -79,7 +79,7 @@ extern volatile uint8_t sts_fall_detection_acc_threshold, sts_fall_detection_dep extern volatile uint8_t sts_fall_rising_detected_result, sts_fall_rising_detected_result_changed_flag; extern volatile uint8_t sts_presence_fall_detection; extern volatile uint8_t last_sts_fall_rising_detected_result; - +extern volatile uint8_t sts_time_c_threshold; extern volatile uint16_t sts_motionless_duration_threshold_in_min; extern volatile uint8_t sts_status_color, sts_lamp_bar_color;//puColor extern volatile uint8_t sts_cloud_netcolor; //netColor @@ -769,7 +769,7 @@ void STS_PRESENCE_SENSOR_NVM_CFG(void) //filter parameter sts_presence_rss_config.default_downsampling_factor = (float)(sts_cfg_nvm.p[RSS_CFG_DOWNSAMPLING_FACTOR]); - sts_presence_rss_config.default_power_save_mode = (float)(sts_cfg_nvm.p[RSS_CFG_POWER_MODE]); + sts_presence_rss_config.default_time_c_threshold = (uint8_t)(sts_cfg_nvm.p[RSS_CFG_TIME_C_THRESHOLD]); // sts_rss_config_updated_flag = (sts_rss_config_updated_flag|STS_RSS_CONFIG_FULL); //set to 2 for FULL config effect in next detection //sts_rss_config_updated_flag = (STS_RSS_CONFIG_FULL); //set to 2 for FULL config effect in next detection @@ -777,7 +777,7 @@ void STS_PRESENCE_SENSOR_NVM_CFG(void) sts_rss_config_updated_flag = (uint8_t)(sts_cfg_nvm.p[RSS_CFG_UPDATE_FLAG]); sts_rss_cfg_slid_win_threshold = (uint8_t)(sts_cfg_nvm.p[RSS_CFG_SLID_WIN])>>4; sts_rss_cfg_slid_win_size = (uint8_t)(sts_cfg_nvm.p[RSS_CFG_SLID_WIN])&0x0F; - + sts_time_c_threshold = (uint8_t)(sts_cfg_nvm.p[RSS_CFG_TIME_C_THRESHOLD]); APP_LOG(TS_ON, VLEVEL_H, "\r\n##### Reboot --- with NVM CFG'ED RSS flag =%02x \r\n", sts_rss_config_updated_flag); } diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index 1a82771..8e10613 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -92,6 +92,7 @@ static void STS_Show_STS_CFG_NVM(uint8_t * store_value, uint16_t store_size); extern volatile uint8_t sts_rss_cfg_slid_win_threshold; extern volatile uint8_t sts_rss_cfg_slid_win_size; extern volatile uint8_t self_test_result[18]; +extern volatile uint8_t sts_time_c_threshold; volatile sts_cfg_nvm_t sts_cfg_nvm = { sts_mtmcode1, sts_mtmcode2, @@ -122,7 +123,7 @@ volatile sts_cfg_nvm_t sts_cfg_nvm = { 0x0A, //intra frame weight, 0x00=[0]*0.1=0.0F 0x0A=10, 10*0.1=1 FOR FAST MOVEMENT TRACKING FALL DETECTION 0x01, //output time const 0x05=[5]*0.1=0.5 0.5--> 0.9 2025-03-26 TODO XXXXXX 0x01, //downsampling factor [2]=2 - 0x03, //power saving mode ACTIVE [3] = 3U + 0x14, //default time_c threshold 4 0x02, //P[17] RSS CFG UPDATE FLAG 2025-04-14 0x6E, //P[18] RSS_CFG_BG_MOTION_NOISE 2025-04-14 0x8C, //P[19] RSS SLIDING WINDOW CFG: 0x08 AS threshold, 0x0C as window size @@ -2008,7 +2009,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, uint8_t tlv_buf_size) uint8_t i=0, mems_ver, invalid_flag=1; UTIL_MEM_set_8((void*)outbuf,0x0, sizeof(outbuf)); - if (((char)tlv_buf[CFG_CMD1] == 'Y') && (tlv_buf_size <=5)) // BEGIN OF *** BOARD LEVEL CONTROL OR REPORT + if (((char)tlv_buf[CFG_CMD1] == 'Y') && (tlv_buf_size <=7)) // BEGIN OF *** BOARD LEVEL CONTROL OR REPORT { switch ((char)tlv_buf[CFG_CMD2]) { @@ -2431,6 +2432,60 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, uint8_t tlv_buf_size) break; + case 'T': // YTCCC --- CHANGE RSS Internal yes no threshold + if ( ((char)tlv_buf[CFG_CMD3] >= '0') && ((char)tlv_buf[CFG_CMD3] <= '2') + && ((char)tlv_buf[CFG_CMD4] >= '0') && ((char)tlv_buf[CFG_CMD4] <= '9') + && ((char)tlv_buf[CFG_CMD5] >= '0') && ((char)tlv_buf[CFG_CMD5] <= '9')) + { + uint8_t time_c_threshold=0; + + time_c_threshold = ( (tlv_buf[CFG_CMD3]-0x30)*100 + (tlv_buf[CFG_CMD4] - 0x30)*10 + (tlv_buf[CFG_CMD5] - 0x30))&0xFF; + + sts_cfg_nvm.p[RSS_CFG_TIME_C_THRESHOLD] = (time_c_threshold)&0xff; + sts_time_c_threshold = time_c_threshold; + APP_LOG(TS_OFF, VLEVEL_M, "\r\nRSS interval yes no counting threshold: %d \r\n", time_c_threshold); + + OnStoreSTSCFGContextRequest(); + + } else { + APP_LOG(TS_OFF, VLEVEL_M, "\r\nCFG ERR, sliding win threshold/length incorrect"); + } + + UTIL_MEM_set_8((void*)outbuf, 0x0, sizeof(outbuf)); + UTIL_MEM_cpy_8((void*)outbuf,(void*)tlv_buf,tlv_buf_size); + i = tlv_buf_size; + STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf); + + break; + + case 'C': // YCXXYY --- CHANGE RSS FAST CUT OFF AND SLOW CUT OFF THRESHOLD + if ( ((char)tlv_buf[CFG_CMD3] >= '0') && ((char)tlv_buf[CFG_CMD3] <= '9') + && ((char)tlv_buf[CFG_CMD4] >= '0') && ((char)tlv_buf[CFG_CMD4] <= '9') + && ((char)tlv_buf[CFG_CMD5] >= '0') && ((char)tlv_buf[CFG_CMD5] <= '9') + && ((char)tlv_buf[CFG_CMD6] >= '0') && ((char)tlv_buf[CFG_CMD6] <= '9')) + { + uint8_t ite_fast_cut=0, ite_slow_cut=0; + ite_fast_cut = ((tlv_buf[CFG_CMD3] - 0x30)*10 + (tlv_buf[CFG_CMD4] - 0x30))&0xff; + ite_slow_cut = ((tlv_buf[CFG_CMD5] - 0x30)*10 + (tlv_buf[CFG_CMD6] - 0x30))&0xff; + + { + sts_cfg_nvm.p[RSS_CFG_ITE_FAST_CUTOFF] = ite_fast_cut; + sts_cfg_nvm.p[RSS_CFG_ITE_SLOW_CUTOFF] = ite_slow_cut; + + APP_LOG(TS_OFF, VLEVEL_M, "\r\nite_fast_cut threshold: %d ite_slow_cut:0.%2d \r\n", ite_fast_cut, ite_slow_cut); + + OnStoreSTSCFGContextRequest(); + + } + } + + UTIL_MEM_set_8((void*)outbuf, 0x0, sizeof(outbuf)); + UTIL_MEM_cpy_8((void*)outbuf,(void*)tlv_buf,tlv_buf_size); + i = tlv_buf_size; + STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf); + + + break; default: //STS_SENSOR_Upload_Config_Invalid_Message(); @@ -2690,7 +2745,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, uint8_t tlv_buf_size) sts_cfg_nvm.p[RSS_CFG_OUTPUT_TIME] = (uint8_t)((tlv_buf[CFG_CMD30]- 0x30)*10+(tlv_buf[CFG_CMD31]- 0x30)); sts_cfg_nvm.p[RSS_CFG_DOWNSAMPLING_FACTOR] = (uint8_t)((tlv_buf[CFG_CMD32]- 0x30)); - sts_cfg_nvm.p[RSS_CFG_POWER_MODE] = (uint8_t)((tlv_buf[CFG_CMD33]- 0x30)); + sts_cfg_nvm.p[RSS_CFG_TIME_C_THRESHOLD] = (uint8_t)((tlv_buf[CFG_CMD33]- 0x30)); diff --git a/STM32CubeIDE/Release/STS_O7.bin b/STM32CubeIDE/Release/STS_O7.bin index 233e3b63a224e23a13e7d69127b7c7bf49c11476..3cb99a1ca75ef40a0af5b7ece448fa3aa44889ee 100644 GIT binary patch delta 45036 zcmb4r30M@z)^=CV!mtk@$fnK=s34-?iaVeV%c!W)h#C#JWn6@>YP)jPMtb+s=BIr zc75*u)|dV&h9SDD9jXxpo|_pB4J!w>#%=khk$=Vwd%+#=K>QlQd+t1?tw6e}Q=Y*e zg@4fr*2eR{#07HY6!Cqh0=1pe6n7c<-#Wo)CG@W|LrW)oXZZh=Zsov@CI<2ymrEkZ zcjZqL&Vw~L%L6@sC2XAIn75K;nK_)=cLDi}Tk89*?~69Zpxl|PR~_mnJja>*s#(n( zuDidP{K7r&e>-4})nE=X4>S7Lq#Bcq{e)%QTJ114%UWKhol3}ioFZ^A_>~V2>=MjA zYUd{R?$X6%AKN`UH9IBm^s3_;eS%Rfq}sXs-a6w@yDFVA==5q~fc^AcO){$^g6#xz zmQgb4+6tcu#GuvdKptgR0rR`0GZL9P!k#4*B~z?g2)1)S_SOX`?Mzf$USN9pF@sTW z^biEjKc)xymFpifnDv>%Es9w{Ug9pr%rxAzYfKU5Vsl@CvB#I4zAGfNWqE1L*}~t4 zFiYkrH0g6VW9(!Q^RZ7F?>aO`86nFSkgnK8-n-mLrm2KOHVPYW^GR0;tc)LH%Mx6P z8staX)OddAP~ll*QyLYBr#i|f^ob?~)edi+N?@FfA;9Q^)CC89N)DR$Me3Y`J_Y1i zy+2Y_4*I++?6sbq1g zkephQJE7S+AUs#C5V}fSbDV+v$p!b#2*{CiN7^l0>V7YuuB4SCW^x+P=AD z1vfT+eQ1*XCuw^Tv-i5hBwYH_iwPa~{;@zI-p*Z(@5^SocJ|97x4D)5){^~PL%(jm zTOHdp4T)K&t$48;yRJ z0U=0zV583)ay}NRgEsoSioD+FiPSzDeO|PwsZnfcHA1FhUs<|=(Q6L%6#}fGNU=!y zSk*$P#Q7u``!BO-j;=cHY{-J7Y{KP6C3Cq^&9ER-3la>4;v#4#*)$bO;R|j{LWF*X zT_Jco6~a$eR+weCH&7a;;^nfwU{ApQD0ey`%6FktbJQjN?D9!h3omlNCFsc!&Ob3K zVx7fc4l|Xc_N~r(P&km~*h7d{`*UjHFgGzVvFk-Ei)L7?jG>P%z^D>Fwe~^&KDRq@ zEP0N*p4gMsT6PYYMasC@1HyV7bVR22n&%Pqc_X7JjM5oDZ)6vJ-l!b%d82v}l*4fY z;>juQ+<+iW532!uCRw>#19aV9b0|$j_nEYvp~F@s{BcIsS2k_r9xiNPx2WeGF7ayw zmyJ@m#J*=KZmomnh@Jtf4cyFu5e3UpQu1VU1du6bsOXcwM!;cp5s zD!}CnZugMEz286c3QC?sz__UhFb10_?hU6)tadSmKsPPV-5=78Z0G!k>LWzZ8s;iA zBN4(0RG6-*&_pS6JcI|FX=vi8ORfQKhoBV1vkc?&kw=9pQ}uyXPq;wgYip~sX!Uk$ z!6TvKxiY1ZJ>+W)6b^D#LwgiZXqHfxnpeS@V<$vCV8(JefkL*Ww~6%Xp2r9`r2yew zN6+*C;fy2N1XZVo=Tg0#Mn~%{jF4!7H#aKvDxukSzNZqto2FunjL^^4nro7Cz1_Jx za!%*Y-AbPKlwR8kXBx^D;hS$Gux^Z<{~WMz8RL*)0&Dnp{Ii@8NQv=a8V;xvQwPgo)Ix@f}Q(hL=vgxEF&T!RQ5=N-l#bQ zw>D0(D^76O1|jc%C{B>L{v*SNR#~YN=x2pBKN6L$`8LnVt54M+$D;=3Y&T-Wv-y;jSO{2QSEW<#cgN-#3JskiG+<9%qOS1P- z8VRaSuyLP^>ZMc*DH3;YR4;a@g$o=V?H64okJEI5Nw<3yH*R!v&~HwivG;tn@PRY{ zT3~^&ahpb`bhBXaYAe(eSb6roA+h?@NS*QYT`lH@uej@@<73O^MtmcAr_(Xh2h*ra zJTH03xv_HYoTN)+E^p#|gRIoH1R=UT*Ce6LE0o#`K7Yv(vKkq@KD5 zPtd9Joq0;(Ra;M;5^AuGNsLXcNp^LHGMyMSFfBfLPLC`bqtn22s3Xx- zctFl_bc9p<#-&PE3Ol)=l-ca?Q(Rt3cx`#i%i8^muy8vc}{pVq9;cmTHrT&YPBa zmFT(%Lu`S<8W(F+6eWS;NtxoF)J15qHZ?4t=n{9i6#HY%RGMnrVmbD($8Mzg8TQ3A zE)f1@e@_Mk+wYp4VyU#{7)AeJk6ldT&GyA|JkLRUHb@9{(Dhl6u*RV%4iwJ1ltqeS zmze8PmZVlqg$JV|zAq^b1qv^?PBqZ@IhV3HNC>pGHX>6Naj&F26eOIH-fsy0Ns2t0 zCBP;2QWkrBKn$w)f`s2W@3B!NpX)!iCt1i%A3LmHfRH9pHuZEoqo^5eoM2`8j(L#$ zArn95!Ke=zLw9%e10?R_u}K91LKn&FKJnVuz?}USN^L@jW*D9BafK!gfhv42;yi?L zVT>*n;T+QH9EIk6#OQ>S^ocLQUz*L^jSlgg>l`!_DD1P)=hsrIi5No*X}VrIw9FwM zby3X)3O`w5mN>-sO>XjLOCuB*DD0OOFQIXc^d9;lK)C0+Yktq{5dUE(u!cY(QX)`n zpfJGFxQxaJEKg#UVn*t^#9d4aUlJ&^NGI;A{KK!DxUcb#!BgpPsBR@WEyXQWb4!TbDTcYa2;(hH4bM;9 zJ}EALQ2tNHo;Q`4zmc(HM^QFZd)cWjnvD2E>1oqX z(t|e<3XU=chv_W*r42yd*+Jod0{*5=S(FU;ZfP~(SGG`i1K_)DiXzWq zhxmfD+(cow0ejJQ=NMyHW@7jNx;n*MhgPU_Cgyt=o3mWvJ*W46s*xJ!!c1)rO$ECO zE=aHyBr{zXyh@Erck-i+pg>kwebdMG&y>s&!GU}mdkhV zd5O_Z&h*vQYH@WVD@%JHe@vbB+DH`> zEe)63k`Gufw2$f|TpBFHRsa@hV~b({(@F_4Yyn__a+?E;gG`qj8M(#Fo!2BLIWZ&2 z%yV1|O9O{Rn<$g|c zdZUH&?4AwuZAK@jyUrXS40g2IO}LCnz_bw{5Jzo2qpPW>!?6d38C}vOW7vHX zisceBGr1V?E}Bk$wIF#v5-%Z)0pWJUr3gg`@RGXofYI^$5%Nj73e9SSR}kJuz_=Yd z-?U(2sQHDmSX7$f79>X&(Ry>NCg6|FRY+uO2+6{%hm9^3+MUiD6Q@Qm+)s zYJzdKZ<0)$}^6}URaEMdwt)p_1oiQwk3NVr)hGTVpChc&6 zx6{IAdlDuPhq%B_3<-r;L}Mwj*$N#r&{5H*F{+ui)xk|J#nd%mhom&7S7AwK43mxe z32w2e8=GzCwwneNjJ7lVRQHKWb9RuireWB8h2}AYK?wa33K51@I7E{(Nchb0_ym=k z(HxnP&fYVR;Ef{TH0c>*?3ouN%mm#`cnM8aPTu_nHY(OQAJ7#}Qrt!Gl?bNftw_7X z7hFtCvaqGFv>=aQex8hC8X$s%SLNp+nP@$TR#n%?6k|XkIw-|)nc^FnVi717RO?n! z9{oU3FH_u>DOzNT>7aPDI!C7H28!=x3Z;v3>V{{5OB@H1^y*TX#0Mmw%Or6!$v8Y+ z;y_Rgudb0PY>ptIT&9>RQ!JG!3@-C2-6|?Z6YvLR{6-nixxAw0uL?35%;7on%(HUH zA;SydTY`jtgYH!a!wsF7NWSG3Pwc6hcFHNP)K&Dbpu+ufv5ocD$1zl$her}Tvv^m8=T-QlG2VX#$-x2$X!Y;8sqWPezr0KdG9KB+M_kc`PXJmx2gSZ#?}o6oS9PJ1?rh z4|wmqpnQfS1|Jinr_Fy!qE`RCvUM`zq8|xWQ_nPR0XO=QNWVv&tiCia3;R|Im^NpA zq@Q2p*&zId5iTZL zsZTO0g#HfS`yq@|jB%cpLK3K}$D&4|GLAJ;m+vq1a&a}&4LXgZZDWhN61w)4-3Z*t z>kAc{#S1yZqocj+oZv-Nhp-IdmOk2pT;X1PG*MLzg8SULMKKxT+c5 zg8MkJZ-lPG-VbPcRIrD%!f~!?Mh{l&R+TJC_|7AhhEWWZWsv0o)cY zc4l0+uqPB64Ls_2sO7Aajy^_s?lj#I@W&>^%9+FZBs=7N7#nkT4rs?BVAl`zPB^2f z2rv=4#i$F<^B2ZBx$kE7^@*36sM589x{C9e6+ZTTDZmt-ujr$?5}vQ@!(NHVSH%TX zGx}uk@Ns%)2IZ4DZxee3t&CLxj(4!UFz|D>ZoPrgzq!S;di$@H^ky&QERrXlA9HWa z>S{V^r=BSq3$gPNj4l_l4XyB>7?T5UWc04`HO1xlf;LNvHG3oeR-)ziVBa_E!N%1A z#*b`&K2Ye?CT5qvu$v>ZgT}rL4q`?BNlKVP`jsM!dNLC~sk(1^-z=@rQ|gP>hUdi^ z`xyI}sG+X0|FVI^`J9b0#h6-m-28F^h3TD|;nu$W6VK&DVdKmnLY==h_(KCh^ zpQ&FS-HWFA zpKadQnAmHH$xp=b$I#!LEQ);Xs)3}mX9`ha8RC~9(CbJaL!gq=t%3_>4pHG$qu5v6 z2aok6`?%`IX5>`cHB}@kDsRh#`5OlwRSPR!B!;cl8U2Mw*VCr_^y~Q;mO_z>pr?|B zb6Yl`Z>S&(ZA>&1wLYCLTSvf(RIatA)#+j8H&c_&VxtQ0^Ldag-NkL6QyiwUc?ter znVC#KMhM>WWs^E&M_9HoR@lxBo7U%M|%#z zTE6)4SW@tnWn_I^z9R10F-`Sr(qy?eBcMQk;jE>9J!1$%S^?QkSYql&{0oOJjnig6H++ z3Qe03KTlYUErBHp%_f8s2!2axkD|BI`{wt{kM{Hzq8%;A{7mDjV)DcC9pY*$?Nd*v zVbN*NiGA|Ds?>tNGAy62ta>uY~Rov^jBfG{}eC3k>h3Q-LV_&cxi%`Mc&kc?Z ztojb=dW0SoRNBNVihL%n-<57)YsHE&z!)Kq5hvGwUJu{jG3KaA(bnGOX3y(UfORWI zE@SYPp-R}fHrZdejI*@2V4yDWO<1PTgT=V|9$)U$|t6 zGGni6U{p>kk2gQop00tdQM*%`BJ$Zd1-yy|H6O2{=VsIfm7HasZ}9taJ{);^6!odA z5Q-?|BIb`R@Uv52<1g&AYw(%9 z2Mx4>OJG`yAXZR?hMGbrhGm6KqDl;bLPOmO)k;is7r~!ZR*!JcTpm)eL`G1N2Lhtd zkwJcf!&TU~shaZfhSB*6e_?j^lsU9I89(9Ivli499m(hdufe|NAjBbX2=kY7D;5k| z{JCp}iP=rZJZ9`Qco`5*x!7K693?UH4aO-ZcDEk;-F`xuE31QUErq=6^2An-S~%q>v&oHfam z)G1$O9by`Sd>=RdsCAHOkQ=`d^zT{e=D<#D+}g!A9R1rQXr!k!+ z4k_BL5tcqkDXDfXF_}z(Y%>8CN~Xs8xTh&Hj|k7%qBEkg6RmL4=UqE>oO+u9>#)## zwUA`hWiY#RCQq{t=fwVk+1efW0GoH2fbOJjcn`FB1Hpz6xk8~Cg)kT4iJ6RsTK>WX zjOHc8zs-wcG}OU|39Tx~DqroKEU8}*RZfD{TCM69lrabBZ z|Kt+QL2+B5z<3NsC7|yh-4|&EofMIdLwa?E%IISZfo0v}o-_|DIOk}cR4VW`(K@N* zSh|>k-IL097J}ExKzTx8;h6H0{e(lOeKW2!s1wgutA$+_Cg$@i?XFpXYcA5j+4%{( z9VZ&->k;j@?oYN(adZyOLYjJI>W-qSlw9w{0R!g(rm67B@JUZL_zC$=Z+B|7)7$Mp zUbiMx(FK_@L!Dk|u#5Y-rHgw`n&=412tpaVIM*7G5h$0=aDqpMHr)@4FqatV@N;um zj=lG6?0I2%1?dvx1(hnpL*}-yN^^R_liZJsLwc4#6fIng63#*;lLk6)h?PP860Jyo zk~w>(JZy=IkV3A<(k)~*_vX?beFob{rH{&>(htFL+Hof|l4lox#riJ^=cl@}$%Z#W z2SKLZ4({I4iv?Fv%N>|0eM`xLlL@N8vfCAeA*Y3Kg^mEEbVzM-Xpu@rYMsLmsY0Yy zI($vOn8kffOtits?D7+Sbb6b70Kps3E&>sLa8jRKHIdOgH<{5)pTcMcPhvFGLsRb@ zJc|j}gd#&%KUElN+KK~Zh4SfmjPN8kad|gV$}L^qjh$lS{;}M^j<<71miH?N%u{II zf~a&|PnRl6Apr6O8N;g_Ne@samhl#Gam6w^T%7}=Z_uHHI8Yn-15`iAR$fB zo2?)&QbEEHxBhDoTiogASiPcxOeGC6Hk3J-pE@D{rHkd#hnUgKv;t-iiAM-T_|N}= z%+|~<@J%jJz-n`Q0$d%gT5OhGx}R{-n%r^%u&@q z<9@>$bk7`^%qZ8Y^i~Q#;ouo2T65@SNtdirVVm8|-Chxq_>n!OcHzW+`AoDrs^ypl z?=-sPxIDbW+4|+>OpM#UPrk)Mmnd^ge!>>(94_|B#Hc^)(@a@{Q=>PA8dHri!sFI) zhH>2)iS$j&+m`nwtYr`P^piu!4zZn+L4=`%3;TXeoT+?^Ew?Y3L;NNi- zd1HJ$?doF9dx1%QLb845${13>#jYG5n{V3*vuu4O@Drw6*&aEV`W|5}w2()Cn&?3cKTkvsp>hBm&g zlU(=JnLV0Zf$ri)<_S0}0+XnOCJ+?mynsfyE!C++2WtO+aNpk-F) zEBxtli5slHV#!NAw$LC7!WkT8PFqk%Re(aRm<&kEr4&R-;PL4BYbABqnNL-oSjW z%CKRUiF;*D=!ogErTGeG*CQEtqv-7qG+MFB8_!2pxx_n`Nl@-E^y(ARgme{7&HaRI z99OKePv>gagpskFZB4|SWZ{{@U-FHpDhBxmgFtoKybHUbm8xGu0PIrYR`U5^Xjd%aT!eiNxDR~X)Al-*i~PJIvW=%$aom&wxOCP=}cI_+s>6|JAL%{1(!0ccJe= zaF5hYehGkge8Gd`oM}ThuXiy}(Au2hhbl8f?-Ey?@-(ra{SB|Tv{kf)KSB5| zXc^t^rq`zY0gDdjzT9|#^xzh6iq~C~K4|D?d=EwFI{hi!s(J$CwCFU%b60c6H$BQ8 zSzYe;R6i1!X2DfChG6Rw7q4)U<)iD|q^Av@m3YGst+I)GxeZV6Bdg1UH~X{Xajs|K zBV=&-hQe;Fe=nQL7-imPp6$`}y-n=Fy}flk`-_$9{!DlFTPrvEnJfNFa9xN}-1Mje z#eA;Yv*jeVy!zRmgskJl=X#JuSoYlklgS0DQuSfFzw+pS}i`LH~0^yxDh2>;&>+$Q+35EuI3!v82?9PSSVn-tF7V$&a|t4z#tiBanP-hbst*AzTAtu zQhdDu9cZ4VQhjF?RowMmQQAK(6f#>?@Yirq{c7QScJ~|dokeZ@H^eIO2nFF~%QFzF z<+`zfiW(&l#g~Y!;yDzhkbNGi@2%oV3zxS$()R-t9bvwq@pGAxv-*Wwa{V(PyL8;gh7lAe`=REhs`OdI>5|KRq{`D*M zR&ffKvPbWmEJIqZR{=7ddvZ@V634v^csRI}r?y<@0Pn(`+S7w5xtn`ZQh&i|nM*uv zXJWR3>n(|i@QP`Bvl_Jk^W9WKOFZT3$7HfM2zRs2li=JMNo z3naDil=-G23<7W9?(@L`D9Ef60a+0(=xfNV!iJ$ zx$Hg}GLU<^ILcQqLuSg52<~ukJYl(;#ZjRa@xIH$SZtbcqLHKXh{2 z_7$^#Nt|wfp8(u7F#clRrzYRiQ&WpLj+?zdHmtuh%IIPI)!ao$R+4H(9H|a9O29^O zukByYerPEVd2K&S`f=rNjPTxQ_j+yAxcG33xR$fL5r>gyE1khTRhr-(VfT4$qKpaQ zDoe+*4{YW3(s_jBl|O#qWj3Jh9Y#~}HlsO*@CU+W&hge1_M(NG{PqKq#f^XGGD$BF zde@hb?>YS;p0zm3PabMf6Yuh)AFd?q343|;(LpNDv@%9hj__M~?(uI~ulrSuX4pwa zGyWtux@sKRSpG~^yn_A3!X5i~0Q>SuuKwfAgy-VUjN#roy^Rbik2`alM2?rT8t9E_ z4O^1C3#Llq>)IFni9z&HG{n$t|z`;t}E(e-;=2KfzZ8V72%RH{f4e)zkJVG!yo5 zC;zp8%q#D4K3-{j0{alT2y6dK;J$hozNr%pEz=feUoPMI6{}?HR&#rA-Z}(&St>M1D-HRQ)hHJT<$xd3srT&=7&R$dg%8$RZlxB17 zEE?UY{Q*(=v7dJm8XNEYOvdXQ7>x-b<1RkLKp>5brZ>XN2o(sU?x7d!Tf>e{>0wQ1 zA;MmS%jL`KZ?m|ZZ)zOHKDMv?AB{h#Xa)2BFnIQv@++fJ)iIih2!n4k8UYQ{mSXwz zBfjQ9xO|JzY(YHpNA8F;m5Rw)XjJ~F<$ak8>q7IjrIjlPcIAC((Q9CFD1p({R-VI( znrfl)hzIGTV3+Nyyx~Pcd;sB_L&#LGr2Ps_C;})ZbtRd2hepPUZdOx--Q{BLsfU*A z^-N9{J%_du^Cv^ek8DgNUlK;@y;=)n*KEz*k>r3z}D7zld;r2g7rKN`uDE%R7 zD*0$~n|LLoym^g6^ZXiqb1xFk9$Zsd(u-_Vve~a!hQyIi**@8?aP+g^=K@Yn5z25>C|FZzwe1tf@5gC-t=7E4>oQN#Yf^7RPxA z@2;)f}g;#;3G$ z?kIAVb!Ye?$z&EutlW`I8VGA#$8Ss}^=cpJqvnmuMPtd=Y@gZdaHfWH%{G=@1~Iy8 zVErWE`3PGPUPRcnu5zxCOjbdR4^89+@@nO<31l~6Ketw1nMk%P*!`uIv!;+0M70bv zcO!p!Dp}3`%gU!dLi(`FN-9@8f_@J1x6(~5Ew*TC&P0!3bWuYY-Lew?>uKa2mMP)a zO(%QU32*X#k3uJ#D*t+v%ph#v5`I!P$)s^fHkkD-sr)jV1QK>~B!6Qj>BT0O@a!xy zAS4+TYbz8Jepy_cc5n%;CNvGW%vq#6rCBnIOr`OeS!5QC!)KEtG`={S44|=dHra}} za_eI-8q&3L#~d<{1ipo~e}HfWA+I8>`LA65hq>eci+JPXWSRP}+_YwoRs64ylTZp% z=a76F7v{i75bsAU)AU`%f1E>#<#e}I{H$Cuye(alOOm>GTlGncf>qR{HMge5wiG9P z+RQLxm&$btxumF#e%m~fN_k(LN1|yg%p*f+95bKf%QTQDd;#gje>I=@wE=48lR<51 zAluW^7La~z@Y1J9IDcS)TVinebOA|t2pPDr136&fL&z@tQwuv-l`SMw+e&H{5o23A z?+Ma9gcU3wKioc9hY+zBe`HaI%yT!AQ2xdu64_RoQgr$Bzm=8S``8m5Wl>RkyJ)2` ztZ@0i6ok?VRXjXHS{b@GVN-)#ZUVC~~nGD-y z*HtAfp|FGY{Ho5%K+UO($&e>rz#ZrqV+J^#wTys_mZ@HMQ%&N3T1@8C=8juJbTnSH zgbZRc*7Ez8kmK6c1`a(it|rF}<*eoBEhUrtwL;?$bg6k*aH@=e1D=0_@-<7z4a)iB zWkd>|A<;ef&6AtNx!CHase9r+{=#xn6*Afti`I>o5{>u7;jUpu6>?S!U%Z0!Qr^Rd z9{i^(uw@QLzpfyWH1>LubRW!F(yMBgekb)UO+mTeT~qM<#aX%_XW1~MZaHIV9^CGU z*YG8T%9yjDNqm`~^CUSnFHt(A|Ez^ssYFEsv9TU`7IWa~eCzj~ILjH1uRQ40<9p&%C&6IA~DF+tT42k6N6kbOXBoi36MjL|VYi_>C^d8cKbxO_E0=9RyS z4_!r$QT|`8BKE<`Vlv-`Y3%^`{B){*#tY9Nx0;{b@ZQ*anxy^chUtOQtRd=mgK zyU%_-VyBhShY5P;DalK#DaoH7@a!qcN2>wmP0*$z{>w(`?pgVS^<=6x575cTe{Rdb zv&zcvTu=J>PjN%vmZ2s5H|t5f|3EkJc^UW=@10M2_(!^dc`|SzKP;b&{r_q9JNabD z{|~)-0~yk0qQ^JD6`MD}ol>1+CV=Pd!WV78X`~wfia~8@VFP^a-v|Tw%#9tz;mO;n z+gJtiXF5^HHA+$~Gj(i_Ah&_P{xpf|^9(MKv^v1yIOv6cU)d;b zaP|2|>~_O5D&dG#mwWzb%y!7c^1U{bVLjb-cI{N>W0L>h>a2WrGwDV=K%3U0WBEe` zWRm9)*)KJUTX|Oj>C=u&C?xvsZl<+vroS~r3kt@ws8udC|70PFDEQUswco?2Z1VCx zC9$yhMmSit+@40UuQLPrfv!Y6W1JW*mJcMB@hN7S(pBc|jpEl%WmCE`ce~n1%l*sg zfep%GNNMGAUE!D;MIV&=UCJpu1p4F7H{G;H+i1s%RtK$w$iyuUcyg(<(7Tvwe+2y}5)+2S&F$K@H*gHk_ zpe~k3zgQ`h8G1!?pLh?IBA7-v{b5psyX3U?lCQ}nv*nU|QF4>SqGSXUj*_f$sMG}| zN1FpQ0OfNcF-sm%0)-WdV2~*=koqrNlHMY=yYub$xM*=yY7jD`P{7}C^*Zh zH{O;aOB->gouX{en7;CbtwbVUw_r|h#5auy`M)Of#v4=E~%lsdE$Uv`BOwc;xUGag9@5>WC3K4!XPgaHg zmWTp`*|FF-z-W@ceDyG9G*3+6Z}6mtOlIdvZx7JJxd-xnipkq@hEB9U6qAPb%;$Sa zN_)nqgp6v>OfDgzp?}(Hs&sS;nQ~VYZDmI>3+eBQKic@h5)wiN@q7u1mP@ppWBE@@ z$VlSFyGqEn>hyrLmh3?O+CE~I(-ncdaX zcH`kvy6~^OMlu7_18A>3azLpYXe>=jYe^5}?*UE=40)Zzv@u`sI(ey$Vaw}8Vl@U{ zcmvx3@98?!o7r5!2bYrD?8{U52c={|f<{l7w@$EKYZjZ8_am7%b26I~VMJ}}jl!oT z|HfO5tlsT!lK0gby*wV14v=ka>CX?4Lbk!d8xNArp0C+sv7B!ZP5kA9nA--rLXYB# zdCMnxWv6wR4jROl92w2~$fcGE0V?F4bEG#fO8l%vlhPorN6`j+%9Po10Mm7!+y-%l z3|Z}3qys&-7LY7^y3hIFbnMux<@tJTZZ_G+&d_hDT0lNuLZU+BJ8gZPzEt(DS3n2etXCAijH&3SWmOB{wl}dXX8pL01l$36(FamR;tb)E3HHc02 z@y#0pK5H41NLzQup4@U5m288ye!%dcmEW*uHE+%RtR(?8eC38+v1hh~L&qh6eJaBW z8pJQ{#+KnLKWn)G;0ZV3$M*E*^eLBG0-)?8ZrCxqsbyWtXDt%|d&>8mvMzLL_ykk6Vg z(>@Y6+LN10b1$_V*Q0mAoWk-@;X8PH?1KvCxnYY?;h2;Ld|%c|GuJJ^R9o5UHk+bl zr=n49HZ{&o8r*n07pBUrFQkt!^I{fl}E3Kiu;cGqK6 zDBAhF>kQwEZv>lCm{fjfIT=y#l!Jb$POCd-k1n~|$OL(DocXHRhx6MBm?IHi_|}UR z_M6aVn$(lI*+`VWJ8nu^S;TkkUVH1sBcSpChXZz>y;Kc4q~C&Q-o>;hcH4CVlj4Df zmN;lrUbR#8+-~$G_2Q04K{gq{VGjCsTQ9!gP=Mh!4>9% zRe=^>tEC@C?t)yHiGxMCCGK)_E7LwA3)yM0^g=#L{M)w07%W7~yBzgmj9n?~BNmuY zo4V-z`-Jf;VsM?kUi{J)ENGpqyAN(l=CXQGjjxd3zfZMVFCMq;sU*qdH9n=1ob?!N zqs`yOdz`>xG6bWvUd-i3oglsaXV_*-z1oc`onL)|Oqtsoqaq3~79O708;SZle$u91 z47Of?#_(~j_9nD~JZPvHc>=C+!+ikv1e_|tVYvW>w9;zu4QR6zpKeF)q0S`EA9SL~Hpm>eHP(|J*>HL!?$?9>TR@wM0 z9`}_Rm9hA4Dnb8yz!sA0MK3E=pi83rcGP}YIWHowGo~PKwNU&Y65s0-nV`91p`5;u z_>HGXcg<-zcTD0-Pmyqsf6BQx`E#d8Pv1-{*&8D3zg`^2|9Og}6fBf(OIM1nH!@-M z;$oTWTq#Y8W*(K|l2!QXTFFq}Q>6?%XUe=LNyK;&aH=t*6uLJ>iem;9UujeX-)K}Q z0mIR?p;(R1OR(2h92#7$)`!89Zeue3lMWvCh1lyqUv{Yr^Wpcvo(_SlygCIXQs$ z9aksnJHZ1w!Gk-&Rs3I{kp5cH`DnXU*NOEGe$YA6OMB}f=p_fgghJ0f1TAy$rRT`# zu_dy*s1sjt&<@Z*#2s$Pa}KJFR@n1y*e1Zd+_0zJu$8?2Q_|aWp*uU1pYkaQi=F1q zraRbv_~hY==Y8DAwrNUdNIHg~mT_)8w)Z|IV~pQnQ@~JsTUt}9Y${Yo?WbS6;Kz{g zn{0LXhJWSEgd7bfygKYbP@(dswB}UK#F?~TM@sm#&q!~wjen9xt9br1 z!p&df=yjMF56x6HsWo-tLi?d9-!&4|9diblE^-*qzobd+H4777Yj;kwXJY;}yg~Q& z>%{4fs&;Ehv!9rvlcAZ8j@h?P9KpZ*IT;lcjfy&E)l(=O#NYm$^a%8J^!ji{ySuCt zZ8qNT3lbeD*gF@f6KibzxG%_P_Kb~x_6ss^>>fKECNJ8&n>>he2%VCZ#@w&#@Vgom zUH}*DfgXuLdW#HMXQNUn;a}^-d>OKwkNuL2Pn#-d(rn%K;x}<($2?f`p*eDvq|+vh zqn%PGrpoxCGM)u~!H0()!Vi$~z4?kS$($98eVU~0p@#3M6RoyHJpZt!Nh5u(qkE_< zf-TpqlCe!#6`@tY#>m*o$kp23bYpMH*lJ+A$k-$^yo#;XjlC>mKeh6O{~}32hi%iP z7_=-M9Nxt|R44A|Fa3+?gE%0f-H4ZE1oqJWMY;uT>V#M;BbM;}&yx?b>8|Z;NzHgS zsXgjMU#kgexL7TIyaJl=1@_-C4?Bc$S@Lskpi!+DMxLPR#0QoWfcm(hf63ERo!DsM z2V5YdyHs0$56f=vY6D*&t4$0LAzzd!q9BYYORQ8 zdD{hYA-gwt&y+kE&n6ETZm1;#>6K>uxCZ151MV8+M29EWVNdToCWE7HoHuZ^BV5vX zjF9_oC_N>ie&~V3M_wW$LvCBT?=3Sf3Z2<5Z5{3o@+&S8Lzi>FQCTUjRirYBe+!tP zcVvtYFwt(zZvOfuvfDRZngZron7uH<`AuJuZdn6m&~O>lUlMXK$(4;-99fLTRVgKl zlJR|Hd=E*tHzBwC8@`K^78_n~qX?8K!ek0RzTqp95qL+e$0=0AYjq<1FyxL{>*7-{ zV=UbfFS+5>GW<&ypWg~EbHk6z@DE)4k;}w9bT}@^Wwv~v`>f@C{Gv&n*vEno)o>Qq z*Ld-0VaFR40dA5J- z74Q43THUmb(KHo$j9g4#f@sg&u{M2^n?uX>v$!;rCC!ka>R&S-GyB12wvsVSr&2Yw*AjZsQFqd|XTbX{K6+!5EvjJAUj9cEOV zr81-K;1k)-r&~K8?SJqIl}k;Q`JB)3XZnqKu;Rn(*xIGc#`7;+A+b0sDZfJWzFnPL zFmL-rrUT>8*Ipq(<2-O*3=>Oa3_vc28V)kQ`}R~QWWVxi9`t)hY{9Y|%NP9Q*B$Y9 z$1_;Q8ztpq&!?WgT4tUJ80OxjYFOa6jx9#7rf1cZmR4}V!LI<^?*x7uYZit}GGKJ> zttO%5ZN93S#F1C|x@wY0*6>}g68-#zj;(l2^og7d!Z~<%D(haFI$rXDATgK??_etO z0A3TBg!DvN)I5kfUef$idDSe7Iu4>vcZ)g_;;4(qOUkFVLDWN-?(T?#_^|=TpBWBWYatEt!nC^6IxF2EQ?Y z*Q?TFcf^nILtymW;10eMrza1wNF8(B!I3T>`8`>p?W)685p!A32%b_}OIKaxp6|)C zth%Q@t>wi5yzUy#r`+kuzhLjme2s*(0f6kn7hl8iVrPo4{!U@LR>~EtjIoECZ#fW#B^(F%S+f389wEXSi=8wopf#E zVZV<4TgwOEAU)bZ!*7si|5-SF{Ji<20Q8OJj@X}HeuH#tBPhDjArCgOL-`+X;Lb#= z40~?=4L9j#JC4umgnXw{`qoVxnYkMna;t*@lo!nB-Xg(mNLhJBw>p$pc8esnA%DMx zEk!q%Ubj2ab8r8R<9oON#_`(i4vy084h4f_2%r2T32kFL_s0%o(T_O4bXWJ)j}M6v z!s~wOX!VhwprTnnb(nz6_N9j@+6_iVN}Z56?Fiu$pysy9Ce?JbO-Amo>8K3-(WXjt zMF{U#+tIXswGZPqcf!41`!}Y))^^k=%cT3c12FpMc20c$&mASpe(q4U+-&F19nD5R zbmbF&Az^I|LHG7)OBepqp;@`Q^S?aQs8F80(+-eZHvCRU%jCLN-RY?7l{@VM%EUi* zB6i;C7@l%f>2>X#dD)(~b^zqkC+j+@x>1K8XLNUaOnpbUFRJfox;*I1>N~{ws-8@q zmn1ulpY9UjqT=IoUovSeBW1|B8jJX$Yw}Tg$k58TV;~o&S;RO07aaExj^ErsLT3Fp z9_t^Xdzk;?{{=VuAsqiZ_%Hu&{Kq^*_b~s&{{Q7HJcYl335`w3eCjR=%bN4CEUviW+0f^(j=WU6Lth zmo!25ku*11y@M*8Z@x>G#Lz~~Hna&o8(p%?`APZMj$3i=uHm0;bQ|hw1An}cbeC#c?G3kKY-tU54TQ$KXi{2vF{Awhc{t1 zc_)$oq=~!}I5YQ4Nnj?m#OKgsp-C;Od3^q_WE=2%ej_K?<3sq9zmbdV@x;n)zoWR{ z-l#97LPb{d7y7K`l?FcgJ{bojzvMnS&YmB@8=7(5Y?+o{)QoeH^NE!?f0Ew`dp?1m z{1^EZ0Dg1}K6gK#`0htI^q~3UB7{TygGhEFu3RFKLK*R^1-B@H*k#4NQN&lQWSs6i z&Y~0~n4Y-xDo*pQVS0HZc-F|bd0J3>kd5piY>l<@D?9O#E56|%`@5V^pgo-2JSD&( z7TIv~vE|kP{vS>p5*BH*TAp6Xf8-={b+;1JS{@8&>!sGCnx2L6H7U)SWVyru7fDuA zD*seI-$m}SNygpt*ksmZ-2E1tz%DTE{(&9MK4s)Xa6_H_D2Ts8*y!%JWTBT*p`(k_ zUU}$>!>vR&u!C42lN4-Z;70*erYZP*6H=h|*i?Rzg6;la z;FWt6Y$jn3r}955*;Mw5mhYuvXQ>aTq_vz&<+rKWX!f5r{+}u~yx<+Yrq<%VUM!xa z_&qgx^R8ALhVMqQgr~5?#&bsKS$YIeD{i;dic7E@6vZc8^mlZpS;n>`;Xo9E|X6&HYy5q$7lar}5S8^<0_;a92IXj#As zQ~CXBc7>e&HI>(Tu#-}^Vb4|+%dzZK3Z)Viwc3`|{Ar@v_<4&Tgsc@W*yuGlS}CK) zZirW{IM;#Em<^3-GMaT$_)-rxvfu;xeY94b4bepWPLvw_mg8z(t@yedgWqO@z=IuQ zn@?}}tXVyi3jVCXjH6o^wc<0@TJc4Pwn!A`;ktwpzk@@SSLiOAAak8Ab4``Gu6ARh zWUgKX`0}PRyT|b5jflGxlvN*@)ogbGZ<$qs%&MErYLXk{v{3=;@byY(PD3Hs7)P!6 z3tm{0AX2-Q@55OjYtXnQ|!qh`yjQe{@#1O}!`dw3TF+i$NGlR-u8>K~R4 zMZN+hzk)TpwwS!f6!{mYwQQQYn(u!zJQGnYQDqdigc*xVe_3X%bP08yV_k{lq_z# z%yzKMc99zsB6D$AA8vUT#GPTI*4t0!79n$+U@2&o-Y!e2ms{^Aw|NY!;MlBI?CqxiH$I$$4dBZ~*noq!H{6Z6D04b0b85HVp`rqkc|(yO z;&?)5tPw4)4n;bEbHL-YnQy?pcHl4fHFn#ZPXx*78rx2GlTT$$7x>^Gi=nsSyvjYQ<;y&wSY^J)L^4 zPi>o1AF1&xR@zidEe==cebQQSIPc-dE;mpzOFP*^mv}MA(ppYTeRq!^%c>s)WH#fv z#eOY&ui#7gPoLr%%uIT;c(v=cG_LSGPHZ&A=OrzUUu(o%=X;nO;0GYLLfB}dbRRfj zID_EwrqRo56mkGvRUr?kb`1=9RrqjN2tXKQd+Nq;#!1?8h~ySGNv z*)#C$1_Pp(WomHWuXXlL=rnuRh$__8;MfArchC-nPz|%2EOTM(v^5S{FIN2aKESu7 z$%T~F4tdJL^e<1{HJD&(#4j9tYFBnL8=TAU>WY>jzSx!3se^OVS}=PHUD=V-dccLZ z&>t~IMZ@4Il2Ji`Z3|RQMO|Q{V&}>;kB55>uMuYgssh~8J%`tbzvJ>m>xvqKcq(5Q z${Gri99tuvw5H%FPH!;i1-+i&eJvcO=Q}jC^yZw@bop}Njse4Cd}!x>0o|d zVA7IsA+bi(pha4TM^OuuL%Dp{&PDP63i}qYs){x2wPtN_gNUGbLsURCR5Vb$MheJP zF)ospQ30ZPAr&OEA~%{@8ONx|!6J{9SsIxdxvem@=qeT%AR-ubJVz}v*wJ1a;dik=YM{lXYtN_^UXKk+^>5^NU^VBH{mv53aQ282)q(JkE{ z#o*mGXxGuCCxeaBd3SH0g+h(kz1iVV;D{m=gJ#aEKZ4$gHK#)jdtSUK)Yu{WDf=j( zN#7>=sV04zh|max=v+kOsFQq@CmU|c6rNT}y@rXTnJwZsp*Ma@1kYm0(?%p>_@jhxmtNm@2;VcL?<+#}ej;_+yZV@9@{AM7GgdO8T}9#_zol=X)afr0 zzZnfR!}T6LCB#LDcalCo7UD0W0etR1wzK#|bKQ__d5z==E>37(Nge1Pn z)}&uS&B_NGC4Oyh*VUxgBX;#jn?4vS3`$c99B9bEyGODSyZ}GrPQDlIkyYP@eup)$ zN3i67ep^o^*)4*9O>}TKE6K~CQYD!Sb!Y&A)_?{OV%jMxiHjF1Nw)C2R;oSP>>wHY&OIOP+ordadpMyOM+>mh)~fHVESNfw zUH1AoK`{ACraJUpRH*-658e6CUTl!bRj~Gzte*;bO{g3ArBkoC4vdJ=x1sBxjM*>5 z75q)yPk1(`2|rqB(szI>H0me4uD2&_!f(Fuwc9Jj7PNv^{R4Edthu<;ajL8pr$rFo z*zBXXo?3AdR7(7HBFM!E(q1e0ff1Np>=S<8l4>m!s&5pkFY8skQ1HAcdBTJo|Nm0` zaj3qfohrq>7{0RRD6BEtn}bKNmEWXiOW(dCglNGN+-V4qOiOLlv!qHUHxY!69|GNM z^nTJ~dDciIc9hU&u4Mfa?X(rAUnsF1dNmFfJVBD@XB*|+H~%Hh6B_%r|D=D_ZBJ~s zTN2v?iS2;`cxxp{O;-z?i;Uc16x%Pljj8FpbQJSj8HtvU=7>M(MHoK+q`!iZMIdk{ z<_ArBIL>@{AELuQF`!N9rdBl-+e)l?0ScVI@RtkDpYV$V`>>FvG?e>UkOmdSjr|F* z58`3oY|z99L?HJGW;)o>XuBtmy!?ctViX{=VdoI1xQxnA`fT%4-mEWUucz_?UsmA# zdK!&p+;B>CLX@%-3q<-^+cV*P&)e4^UQaWJj%MRkR+47U^kX~7z&pmU+5RQyB|lB? z841xr_4Lcp))K6{Xi9wRrL1-wwjeuCAIst#?cCJsuW&n%&DY$Hz(L!6JNw?5WF%yxVO!5P1WF#r+#Sf4-|FTX z#Qb|?hXk=j!rYY2i-M#ct@veT5L*X&jAa_*GbXdKV`D5C8q!5`YKpO#gvrq4`xa|* ze@kf^@>aB!cn34{*2#>iq|mcd*jU0tQ|t;hO<}vqo)>ISj6K1u4tDe7Q(3s$_a`h@ zT-3d9T-5!|Ur)oWmOddUOz-04*F}B0=ov2RciiYlKRCoL#UA&IdLAD*i~V4XvHU}g zu}op+UuUtCYOj?a31JO4ZE&1!K658Kd<)06IqcoPaZKVFq3oNRq~I_%TiRY^{P8dr zB5k`F|Lmq)DdUFlUbk|_W5Rp=)iS>0rtLSztHarjyT&B3aVM>e4L#v7&aEoK@^ske zOJP?dEN_QLSVk-~U}=moe46V?yh3nX8)pF5IE=*^yL=f-ltG_c6jkw?zdFX!rSd~_ zS&BiJ+#=XW4JQ8kJT})8FZq0IY%cm(&4{opK&M0jEK7>8^jpezL|}<*h&!*0U_%EF z5o=lf-c(WkGggKiUJbEB+|6AP%!4JB;)G~!Vx!*L-l*5&1aV#(E%X$H`A0S4T%qFs zKo!wI2_njCpxj+K*Lp=gZMiRzC`~u8ON}hs?bE2Ag^bcpo)OLboR&hCcOrUA{$ey6 zG3fwuyHP)k*0mAWpHpYjsPFDwIBCQa5BP9od7^uaW%dBx5Y5Ir`TbqQY9S(9h@ew? zB;vtaL@b4fr8h+^iD9V>CsxX0Sh~+lEFU9ztoQmxSgS@WEe01#YkXS%6;~w!TF!}O z!`VuAo)XKJ6PCv^Z^F-#SQHPK$0m)5q+A1US_t@Oj~W3RNpXGVikc8JiXJeFu>Q$AoP!F(05|<-{3N;{ki6MaR#yx{gOR8FA2_ZE?}K0SvQ;UOM}yF z#1CEZ&C3%T^ikbM+nD%iSA+hgqz&R%6PVA)L(;0;!m>}&tT?EU$VQHQN!owux+&&a zNyD~rMk1SJ%9QppOuoFKZHBa$c71)-G2v*NQ90V?9NK_;`0XmaEBO+neGm8y;4^^F z5quGnUMTrOq&**eEMZ!ko74UlgVWKr0pOj~6+c+SbCYBqE15U&+mhIAt|LTwjkE*> zMOyYx<|#>7C*S4Hi<3||fGF5^Ie!}(X=x0Lw7jv94_?T8XFT71=;Ju65y#Ry(*hBn zH@c@stvC$-iD)ITFv-;NtFCU2yHvk#((pVeE`}W&6=``tfv;Q0LfAfcesCeWFyMC! z+2e#!$yomeW+o$4;ErUrWqe|0q~*>GNTd2=h_pPt>7>ngGSYH97k1YObkEGiI4;ui zj~qVhZgiKY-Fe2{EW-7;s2tCR_o;+i7C(A7n?`Qe@5Y4qG#ZYE0o-E|!aMD5p0$X& zDfdBq_F@*)-cczkL*)E@xMvE> z9qR8xqaXJ-hu*RU5@Uhu!4x}JMG8AQ8mF_+CMZ4)`XlXskA+Xv1-!1+pucQ>`+oK` z?$X%E10ICW)G$8pK~}*^y!p^nj3nZGVk}pE`HocPDa@;V`N351#rg0G(0t>B9;e>4 zZ^(@P+1(pA7&?SmQzPeD0yczO76fx+8k^-=BH|p2=hx=iMtQ?M4DRdUKAoqeu?EMy zz!*!351*aRQbjmBCiA`NZ1OA$e^~E6(%)li51W27RutW{{}+uuko+v3%-xnsow4T^ zxReF^6TQNh(hVQOJ>5HxMff|mI6t%uLoBcHylxrG6*Sjy zzGOMu!1N$~b~%e9^nQpfA}XOU|TE}L@($cV%qKx zT#W9?1@wiOY;S@69ZXuifxB#ZQ3lYX!RH8^+x8S{qCPg9-<8S6do5@S14oxwjlF>TpD*Z9k|R8v7iO|LM{f+?@!Q($hZ(Lg zOyi$C%zW<&UXJ8)48#MG%$JSn)PHD;vAVf|hNEVq@FdvRZ84V4RJ;8N*iXP7E$w|_ zH@A%{aw|*;?1zV_#$hG-$2R3Q;^4t+Sm=V{)CHEkY2+K98fY7&1lb0;;f~lN^*EUx zY@0lM3(i&7|TFb^yS={~QpU;F%x4Da-FxTtz z;qwawR-E`)Y6jP`*@r`0A5oF2QBm`)ej6bHzv0x3q9OV|n@w|FFkLB7z2{n6 zv*5m-4_MC*s>}GP^(@?$o4%VD8pw)!%@CZF+uCA$wcb?fz!9re1>{l0C6TCZ1t`ySBBJCw0VJ8TZr>w`O$+mLe6GhsFg z9}e(wx$AvfIBp)P*AHT$xn9>g$=!CNUa#+pu}&F8$%TmU(T}i+EX<83J;F8!C0}R! z`$yQ!KGyR}jP-YwyKZ0+!r^oLR(k_m?oKgT#cn2OC|4h414U#@viX$_XhMi3oN>=b zWf5q}<}r_=p{CrpFPk5HlnrIU%lS8tvXO#!_yB(GQI;ayCuQ@yHnKqHCoTs=3H!oYkyx)U!iE(}psik?$g^@;{Isvzl`*Al1~=S^ZiyK)^n^0z@L!Lw zJ9gp}{@3eY*=~CE5MG_&^|y9z&1E5KF`x1zn>uVW2Bf)=U1d|6(7X9mSibSuG)BI5{lea`Febl2<8@sFQmbJgj*^GP<-$y170#pi5d6AkC_6MnvK6ASb_ zuV2E=3nV@G7U}gmepK|yCgutE@49cQI24Of=k7TX7 zSWmg}fIJp{TRT=1=@Nl@T}AV`=g4`z1(ol--YzP2UeNvPL{^H=iN7}dx>&12)7 zPN0(bg9p=wJQnSE5h>g}IynJ*X?*+Jzf%PNbd3Z^r8N z`?>oTHiX#5Z^6k3^19TQZ{LDWh0FywcC&?53-cUbbHP*WE>&2L`|?X$vA6)a9#6Bo z*hM#<@iaTaVm9)j+gR?%>tamdBF7Z2w~lbE*M0brZLDzil}<_@=K{)qZ>WFq2ENYu zmLXYB;UGm~7SXCftL}`mlqBYX_6`QNNLSFl>*QOXK@S`^jF&uvqa86>y!jc{z|@)i z`)Ao6c40DK_Z;)}YMpHGj-{PsRuugPP2c6cTQOEOh#!28;c6+-^DUB^Zfm+=3r;21 z80$OX@F&I@iua*t&;yB1H2k8iD#q$TV;W{3HLYrjv97+wo=$QEe~i^HoCj=2$tRf@ zIV5ant498}{A0cHW311G^SbTqSC6w{6jp!hH>lY~(f$94#_SPZ`#hVbwwn9pv%Ze( zY#8@^2?Ol2VKG+6Bp&(_=EtDD+d~UU;@`i-LWFy25_fx#~Yc`caH56Q%g1&7~V@qmvj9&lIOdRx%AS5T{EYr5tY1Srjgub^Thz`;9N1Yycf zwv9cWXuhU>9qB72B1&vg&a4 z2$@e?hh^a=R5UX!ud_kPepvK|oV&3igE^e&$rS88WMO?O%CA`o#YSD?Ih<=ZKv*`W zG<7;&V8P(&oc>_%;&Pq7)P@hO2q|)a@g=+2__23l4Y^NIpVaHRp~K*R=Z`hE;5?d0 z)alrG=naz}*v&jAjS}+5wv%GtV$eYH2i_uo2;>hD@?)%@WOK`I7VJW=RrF{sqy%3; z+f}Fkg5lsf{b@)E1pd&~v-5sV|FOFcqaeKSvd*!Hbd9l&&gOalWC>AZuFmesDF;ym zUJ%9RVH687HJFNZHwXAiUcDN8hFHt}l(WcHpQxf}Dl(RIK6noss}AIM?qS1*V8P!% zw2FSsP>0{R)O|`nT&%-T>ES(Wh$t;fviWxK3v*UFKe~s7%qBgy_3B~pJ{GO``by<_Z?U0vQ}J7Dq}}ux7I;~42H&$6>xDy8&A;qr%MBoy=j~@- zsj~xV0H#b^6Nq0cC}ZNR#Y^{vKYKzQqu?RZL_CTBS519|HS?~0;lG@pXE`MJiJN%& zUGK3)Bz@m|Y?i~WwsZO}{_pqL!>$WLQ1g8vtV7cTTWSegH{44cA49DAp0TAAC?^_i z83m{R>Rvb3YBT>6+j>fPPv@Y^a^JgBPp zoWndq6v1R!c?^^yLr>rr{-`+P;Ij#i4Mi-3a=aIno-;D$|Me|I_z6>E9Imsfm% zwTr+&9&m`2BW<|l5X%gz#}be!u~z@S)3ab;k>Y<(l<`DNl;`fst4eeris?E1A)DfF zYJKq_{TSk$zKXwan9W=?7epxaw>a7x2t(9Z*+3w6*v&qtzlhtDYxQ6;9H`Ydb>2+3 zEnVmEax&diLiu8x%ts!<;tf=bIfBNMX!rW^ydyFX3kL8{dd%qqc2{WK*O`mV^TEzW6VlN39w}{4Y-Q<^+kDiO7q^IIV?Q*SNh8DS2{{owYwfb_bd(QwK>RtD)#eqP4kU%<= zg!5x&R$?knrD7V`=B^Y)#api=*Xr%<K-DjpW9bHOE+EB>UHozQ?^=t0({VPtyUk|PKAFsxH~)cLC@!oyb<2_$9+mzn7<;1*M5T4_=+&|j8Cx}^EQF|WAA{OU=zT*&lI;*O_K z94M@{Saazy7bNjTFjFEtehOuq+z%w-r_C6pk@=T!bNMM&ZeS~LEcz=fv;dC+y@uh~ zV~uV>WsA2e>&h*rbu(c%+^Es7bn=d`SowtgH|Y0kHTvsVkBAN@@X%5KG zZrtfvqwfT5o%y$~8SazLT4(O~4wZ4}hZqWYort$y%=yCFok2&AUkt0kPZfE{8O%yA z*nZbPy5R%QxSrkeXY?1=j~<Mj!_wv6q(7D@fOdtFRX*I0>Q340sMMFLcju(a<1A1Y~F~!!eC&-P{$1|DQpt zQcOi_^oNmGZ?wl-pTZ3sZ>CkFC;JwM={|)5UX^i{Khi2J1Kml1w=sj<0@=H|!YpsO z8=_8IBT?O}jkr_52hKbB!SRu(HZ(i%Hf%m&xn7uCcUO zRgD`5?3@$3YZxZv$1B-lQ#X$0)Zlu)YJDHlX9l>gVZ)CmtJRpKl8)cOtq5-Zpj^b7 z3F(GcQH35sq{rQMJO8xDkX2y@8eOoyKc2S*hpxu? zcR0R|74@pd3G@JpZ;W{ z)bYZ`THCo_D@%4QIjzi;F!&56^(>o^Ic$39zr> zcj#=Gx|-juv**-V{3o4#>sy7$Ucsj*&89QJ$DgEBC%bJiO_v8M5=n_2^Ht8@dO)5gZJKX7GO8&1s3=dZM}QTKn_Mf`nQ zx@V}!UiQ^RTW&+G(r8VgJK82qsK>0f$mdj zI@DaWg*e7XIkqTs&+7fSdpn!!{Fo4UR=;86545ugWWZbPc&lnz_Y}OBR;8Od&OpaS zQRMS1&iOfj_C+U2CrXvRwj*$APgssN^*+Q1X}<$iIGgkt?H;RmSLrDocKR03Lz_$U z_Jz-BUH1XS-dX5t=rYcya1>v=)Q7;gL#eq52$YHz``DNb_jK{ zZc%3hfBgo-&+J9~?K;OJ%%#x9ZS=cBm+l)q+MmTm0`v-u#|Hy(jA+M-^@c}DF(k3+jrTdt}P@-%1d1^l42#aZ)F9r?h%+S3CLK&eCcO7Ue~ zVaE5J%m?~veyZxve{j)Wz^~4DYCp{z&-w5z{j{C`7ymOZ=JBrDtE$r}2>2e~dGne6 z+6h%%!V?E*1Nk0z#P%-!fx9+B?aR-&YflB8x-r*_RZUo-9Uh%ZZ{8N(sd%5&OFx}~ zXE>GSZ^V9-(wu5bIP4PZkIZr4n+Iq^43#=gL=+Fu#tyB--paa<6(8@YN-WRD9JZSd zck_C<2GQfkc2Uc*8cds8m3T>J1^CHS)E#=b3!@vK(Tb0jY6RtN9yCx3Q}g-yf!a9r zUjF((Epg0CoiuB$#Bo*w5FN>8Wqf<3;_q0mg8Eno{SW2?J+!+=&W9xw*0!#M!??6& z#k3Wb`drWgLHlcRW;wmadK;_0asCH_^NIqbv23H~19~E!gQnX@7%{8KjLt z3o{?!G*wa`<&O>0p2USV`XHp>qkPa{EzuNrW6}JDwz2EB;mIL~sJC#f%}f!^P@H!3 z5qd{<#K$^9fv}FdVxcL{epl*ubi~0ND9lqk=E3YQ%(r*M!0ac?+bl$ZR z$MH8u9Yfzfw~9tk6sdlz;1~nL*En)kiOa+6gV0J{y|MlBv{>@w*fEt9bVI7NSLzpV z|3Rhx?u{U!k`4UC^K1L0SlXhg)c?S#;@y`&Y)N>~-Z4b;G<|d<7>hZxE)U5*9R5+u58*?z56^ya(9?6u zko=|i;yw+U;`(dj)Vn|2J|nH~v^(BAFn;zO2ae4thg)7&(3~oL$n@{~&(DBW2p_O__hwZrHuSIF~mHI|Z*8aMDsHHoeU8ux!*)5k3{iXCDS0C@#ToeWZ zpEy(-HgUj>eu!QrZXR@u`ntuWMErU(L1~_9b3$6*Bhq?7d!JZ)@l4?BhiX&QY5bj` z+SG|Z;8Atk3yME}-ht4Z5n5|+Xb$boBDAUX@ggt>?leprXZlau+WCf-{%l| zF4V5X)pA9LmD`o(GgvRI#JgK7ggO`6ACiIABKf?dzPPN6{{HgPSjvYpB0+N#khB;O zQ(s%De<8RkalqLS)&FCksEruiSLzw<$+3NarR@tLb%qJX4PRlAA*>Z zX}Tzc0dV!64C`1CZ@MpyVmPYJ<+8mA@Du`lkbKJRb6QhB=p)1oGym+VtqxOL`GOQ} zh{MPKX2x&LD^oN_jbBXF_Vcw5YVYx9(zH$7GgT`$JEUs^`llu>T_QcRy#PpYzI`We+Y-Tc7jb(noUs z%blFoXRdveoMr`18Z()^m_4$zy4(0~McR{t2fm2G55AVAn(+c2uKWBUyhyX&ylIzq zQ2m?Z2|T$&j$h}P!(Y>!HB%Ly#!>O0-Cc|4KX?&ljG@T9@Hd#9U=B-2SZIUU8Rm%a z*asap;5k5;7tBpc9ssk8Fwc)11#>^UIWPcbS2Bk!6z2Y9zH4FNOwiq6UJ{uUPwhU# z&6B5hYeA;QX{zxJyvcKZx@sH&b4#dd{1P}~wrYGOL^W>4vpf^$s>X-IRO4aLcY!w+ z=!5S(%s=3(0?!$Ir(ymYUlwG&j_)|ku@R~<2-pVqVKCPKU!SEK$IMWT|434ujV~u5 zKoGy>PybW5ySljkrb1_;d$kcB;nr@$KqTjdv={ z7>17@-lYuNb)MA zy;{0ANW3JFnUrfV7{J&89H}tHu+OfL2T)Zs#Y@_QgAAo^aqI9_>7Eaa1YaRgK{&+%@nmHQ3=D*7AZdI_I2e>`5?$Wmv)|FWOv&%U<22kW zO$fdWAjLEjNd9u9Jy*JKm6$KwnNle2dx6d1FOl|A;jSuWK#EAYq*q9KHE@Ee%~u*= z7!5^Rf!({2Qv2;5Jb)B4FCZ!ACoup>iUmu1h{TBfX2<>7Hr3>HKzaZYV}P^=OAG;0 z-bVm4;2tOG$v}#E3XuF|NPDJq&ykobkSSY%$H7+!ydPK$G$_dXy)aOomjX%iavANc$xqCCN1)32c@24(V=q-|pW9*bR3N zY4-wB>GuPURQf0Zg03kUK%|68$rS{ooy1}wm7cxQUIL^5OC`MwNJ&*L>D53gRSiIj zz$Hn)Che_2QT>2(aK8kkh+GryNI^mhphFT2AJ_wO0q*IqDIUVklmK7? zUS|#w^x;ayAv@pR!!p3b<~2vO-KuHphjxd2Aca&Y?Zp!J0x3^RfK=Q|fz;%cNh}9a zOe-W-OKbpA-d_TW7)X1obnmdENime#HF5z`eeeQOeeeTP(ggsiIs^kLpa>vUhd61^ z5O%aUK+5ABY2ON@EXfCwzd}hb22yp{E8Ig6GZ-jIOM#RZWdc#(fRq=PfE0sP>E0pH zFQQqpae^n4)2tPn_oi-8Qd7f4A~0wm2#fsVj3 zASHP@5Ko^d6+jB78psp}lhOb~9vlp2yMv2F4~bsDlW_Nw_5dIW3YPW|i4j0jAPz{1 zB};pXbkC5O38V<*0Dmz+P_8f_hCnLb`9Mm_Lf~=WULfUZDUdvt0e1q+ffSPpiPb=g zc>|CXxFqo!kW!!(=nCur5})B1{F`8Kfq|0B12_lh1snkM1CCUTN&rw~4X_Us$`N)= z*$Sk>R4m;~g&hh?dbyx8r9rx113m${t-`J;9YB);0UjSy0GbjY5Wmm>QsGIK^b8=i zP`SeHq-+IJ3@d~kc`5A;K;pXu><_#K6pg%eH+*7`xeJgY_mRw*pD=e4wH@D1|^#c7UW< zIgk{qFu_2YRRgCX;0B8;XfZpO>Lo|Gi6o@3<(fe26O^Lg=DA}49G))=%|5TLlMIXdw^ai%u%0fQGHD* zUq}srLIa68K+%8zGoaa4ASFRQkTfm?Qo~UUq@>;pq$Df>Qf(*&inba^^}QTO@+*L7 zIFxE2+6|M^Asr0mb_N%T9zbe1yrkU^NP+^SJy>E0kQ9gjioz!C$O2a8)OqX$QsF59Qs+?$B!6WR%Yjt-D}Yo8t0gu7sTN!UQs;3E zNPMk85pfd?R9y^T+dB^zAax!dz>z>NARahW{D9P;1WSw%h;CBaQ=~l;NS#WKwC4*u zs;i_I3%aJ1N;Fjn14bGG4N9v(DDVvhh}oXRV1Z1DllByeIY8<(@`0pip+KaV#1e_6 z63Zl(+tH*{NJ6#528ov>UX$1=u|uNaTYFNwNc52CCDBh}fW%;lArd15qW;H8LbAjZ zi5U_zCFV%XmAF-6zQjU_#S-^QERk3$u}oq)A=Up1NvM|CAn}sKYZ6-}c1SdQCsRP8 zheR)lei8#D21^W)7y(55kphyCEHOo5hQv&XITCXvZk3oXu~1?$kjl1(qOgTXdYr^$>7F9(84@!EV(0}l zK(VdBJjg3Pjrvb*|6UMI0!x5YPfLLmU>T4)mvSHtAS#62NvW3ZUKRG3`T=Pm5dtKI zBY=^>I3PtN8AvIT0;F~%2S^I!nqUx}50Dhd2TlVP0#)TUr5H#atIrT(4Ft$wcln+M z5NH>G6hJVL6b_LXAuvOp*x?K#r!oC^a9DEyvptI8 zsi>I4gX%Spo#(aInf+1}<8wUeKD>jTt{5MC0*|YM{xIk(fmuuN zj685NJ_qx}dToWKdhnf%+BUC$RO8uneD~se|D0XS!?lX>OW4J78c(>W8GLuuDaLQ% zT!T-AnL?w#7MOnqEv>=4;i7gx9e?^Mtb*eE55C{=#XqhY^S5h8OMzyz;_JZ2uv$9k nMf1ES?AA>k=dKy|yHS!U%Dd;VpZqj-#vcCveEj&&+T#BMS>Ao) delta 44783 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