From 302d9ca0ed18ffc64a87a68abff0b0fec22aa750 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Wed, 20 May 2015 12:01:49 +0200 Subject: [PATCH] added the code for toggle bit to know when acquisition started in febcontrol and list, indentation as well --- .../eigerDetectorServer/EigerRegisterDefs.h | 2 +- .../eigerDetectorServer/FebControl.c | 1546 +++++++++-------- .../eigerDetectorServer/FebControl.h | 2 + .../eigerDetectorServer/FebRegisterDefs.h | 2 +- .../bin/eigerDetectorServer | Bin 238029 -> 242128 bytes .../slsDetectorFunctionList.c | 54 +- 6 files changed, 809 insertions(+), 797 deletions(-) diff --git a/slsDetectorSoftware/eigerDetectorServer/EigerRegisterDefs.h b/slsDetectorSoftware/eigerDetectorServer/EigerRegisterDefs.h index b50188e92..11f712716 100644 --- a/slsDetectorSoftware/eigerDetectorServer/EigerRegisterDefs.h +++ b/slsDetectorSoftware/eigerDetectorServer/EigerRegisterDefs.h @@ -101,7 +101,7 @@ #define DAQ_STATUS_TOKEN_OUT 0x20 #define DAQ_STATUS_SERIAL_OUT 0x40 #define DAQ_STATUS_PIXELS_ARE_ENABLED 0x80 - +#define DAQ_STATUS_DAQ_RUN_TOGGLE 0x200 //data delay registers #define CHIP_DATA_OUT_DELAY_REG_CTRL 1 diff --git a/slsDetectorSoftware/eigerDetectorServer/FebControl.c b/slsDetectorSoftware/eigerDetectorServer/FebControl.c index 86ee44999..15206ab28 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebControl.c +++ b/slsDetectorSoftware/eigerDetectorServer/FebControl.c @@ -1,4 +1,4 @@ - + /** * @author Ian Johnson * @version 1.0 @@ -70,8 +70,8 @@ void Module_Module(struct Module* mod,unsigned int number, unsigned int address_ mod->high_voltage = -1; mod->top_dac = malloc(Module_ndacs * sizeof(int)); mod->bottom_dac = malloc(Module_ndacs * sizeof(int)); - for(i=0;itop_dac[i] = mod->top_address_valid ? -1:0; - for(i=0;ibottom_dac[i] = mod->bottom_address_valid ? -1:0; + for(i=0;itop_dac[i] = mod->top_address_valid ? -1:0; + for(i=0;ibottom_dac[i] = mod->bottom_address_valid ? -1:0; } @@ -91,8 +91,8 @@ void Module_ModuleBottom(struct Module* mod,unsigned int number, unsigned int ad mod->top_dac = malloc(Module_ndacs * sizeof(int)); mod->bottom_dac = malloc(Module_ndacs * sizeof(int)); - for(i=0;itop_dac[i] = mod->top_address_valid ? -1:0; - for(i=0;ibottom_dac[i] = mod->bottom_address_valid ? -1:0; + for(i=0;itop_dac[i] = mod->top_address_valid ? -1:0; + for(i=0;ibottom_dac[i] = mod->bottom_address_valid ? -1:0; } @@ -109,12 +109,12 @@ void Module_Module1(struct Module* mod,unsigned int number, unsigned int address mod->high_voltage = -1; - for(i=0;i<4;i++) mod->idelay_top[i]=mod->idelay_bottom[i]=0; + for(i=0;i<4;i++) mod->idelay_top[i]=mod->idelay_bottom[i]=0; - mod->top_dac = malloc(Module_ndacs * sizeof(int)); - mod->bottom_dac = malloc(Module_ndacs * sizeof(int)); - for(i=0;itop_dac[i] = mod->top_address_valid ? -1:0; - for(i=0;ibottom_dac[i] = mod->bottom_address_valid ? -1:0; + mod->top_dac = malloc(Module_ndacs * sizeof(int)); + mod->bottom_dac = malloc(Module_ndacs * sizeof(int)); + for(i=0;itop_dac[i] = mod->top_address_valid ? -1:0; + for(i=0;ibottom_dac[i] = mod->bottom_address_valid ? -1:0; } @@ -172,24 +172,24 @@ int Feb_Control_Init(int master, int top){ //global send Feb_Control_AddModule1(0,1,0xff,0,1); - Feb_Control_PrintModuleList(); + Feb_Control_PrintModuleList(); - //get module nummber - int res=0; - char hostname[100]; - if (gethostname(hostname, sizeof hostname) == 0) - puts(hostname); - else - perror("gethostname"); - char *pch; - pch = strtok(hostname,"0"); - pch = strtok(NULL,"0"); - sscanf(pch,"%d",&res); - Feb_Control_module_number = (res & 0xFF); + //get module nummber + int res=0; + char hostname[100]; + if (gethostname(hostname, sizeof hostname) == 0) + puts(hostname); + else + perror("gethostname"); + char *pch; + pch = strtok(hostname,"0"); + pch = strtok(NULL,"0"); + sscanf(pch,"%d",&res); + Feb_Control_module_number = (res & 0xFF); int serial = !top; - /* + /* //for Gemmas modules: if master, serial 0, else 1 int serial = 1; if(master) @@ -211,43 +211,43 @@ int Feb_Control_Init(int master, int top){ case 49: serial = 0; break; // Gemma case 48: serial = 1; break; // Gemma }*/ - printf("serial: %d\n",serial); + printf("serial: %d\n",serial); Feb_Control_current_index = 1; - /*for(i=1;i0) - sprintf(str,"%s",str); /*sprintf(str,"mod%d::%s",module_num,str);*/ - if(!Feb_Control_SetDAC(str,f0,1)) - printf("error in string: %s",str); + if(module_num>0) + sprintf(str,"%s",str); /*sprintf(str,"mod%d::%s",module_num,str);*/ + if(!Feb_Control_SetDAC(str,f0,1)) + printf("error in string: %s",str); - } - } + } + } fclose(fp); -printf("Done reading set up file\n"); - return 1; + printf("Done reading set up file\n"); + return 1; } @@ -542,169 +542,169 @@ int Feb_Control_CheckSetup(){ unsigned int i,j; int ok = 1; - /*for(i=0;i3){ - printf("Error SetIDelay chip_pos %d doesn't exist.\n",chip_pos);; - return 0; - } - - unsigned int module_index=0; - if(!Feb_Control_GetModuleIndex(module_num,&module_index)){ - printf("Error could not set i delay module number %d invalid.\n",module_num); - return 0; - } - - int ok = 1; - if(chip_pos/2==0){ //left fpga - if(Module_TopAddressIsValid(&modules[module_index])){ - if(Feb_Control_SendIDelays(Module_GetTopLeftAddress(&modules[module_index]),chip_pos%2==0,0xffffffff,ndelay_units)){ - if(module_index!=0) Module_SetTopIDelay(&modules[module_index],chip_pos,ndelay_units); - else{ - for(i=0;i3){ + printf("Error SetIDelay chip_pos %d doesn't exist.\n",chip_pos);; + return 0; } - }else{ - printf("Error could not set idelay module number %d (top_left).\n",module_num); - ok=0; - } - } - if(Module_BottomAddressIsValid(&modules[module_index])){ - if(Feb_Control_SendIDelays(Module_GetBottomLeftAddress(&modules[module_index]),chip_pos%2==0,0xffffffff,ndelay_units)){ - if(module_index!=0) Module_SetBottomIDelay(&modules[module_index],chip_pos,ndelay_units); - else{ - for(i=0;i0x3ff) ndelay_units=0x3ff; - // this is global - unsigned int delay_data_valid_nclks = 15 - ((ndelay_units&0x3c0)>>6); //data valid delay upto 15 clks - ndelay_units &= 0x3f; + if(ndelay_units>0x3ff) ndelay_units=0x3ff; + // this is global + unsigned int delay_data_valid_nclks = 15 - ((ndelay_units&0x3c0)>>6); //data valid delay upto 15 clks + ndelay_units &= 0x3f; - unsigned int set_left_delay_channels = chip_lr ? channels:0; - unsigned int set_right_delay_channels = chip_lr ? 0:channels; + unsigned int set_left_delay_channels = chip_lr ? channels:0; + unsigned int set_right_delay_channels = chip_lr ? 0:channels; - printf("\tSetting delays of "); - if(set_left_delay_channels!=0) printf("left chips of dst_num %d",dst_num); - else if(set_right_delay_channels!=0) printf("right chips of dst_num %d",dst_num); + printf("\tSetting delays of "); + if(set_left_delay_channels!=0) printf("left chips of dst_num %d",dst_num); + else if(set_right_delay_channels!=0) printf("right chips of dst_num %d",dst_num); - printf(", tracks 0x%x to: %d, %d clks and %d units.\n",channels,(((15-delay_data_valid_nclks)<<6)|ndelay_units),delay_data_valid_nclks,ndelay_units); + printf(", tracks 0x%x to: %d, %d clks and %d units.\n",channels,(((15-delay_data_valid_nclks)<<6)|ndelay_units),delay_data_valid_nclks,ndelay_units); - if(!Feb_Interface_WriteRegister(dst_num,CHIP_DATA_OUT_DELAY_REG2, 1<<31 | delay_data_valid_nclks<<16 | ndelay_units,0,0) || //the 1<<31 time enables the setting of the data valid delays - !Feb_Interface_WriteRegister(dst_num,CHIP_DATA_OUT_DELAY_REG3,set_left_delay_channels,0,0) || - !Feb_Interface_WriteRegister(dst_num,CHIP_DATA_OUT_DELAY_REG4,set_right_delay_channels,0,0) || - !Feb_Interface_WriteRegister(dst_num,CHIP_DATA_OUT_DELAY_REG_CTRL,CHIP_DATA_OUT_DELAY_SET,1,1)){ - printf("Warning: could not SetChipDataInputDelays(...).\n"); - return 0; - } + if(!Feb_Interface_WriteRegister(dst_num,CHIP_DATA_OUT_DELAY_REG2, 1<<31 | delay_data_valid_nclks<<16 | ndelay_units,0,0) || //the 1<<31 time enables the setting of the data valid delays + !Feb_Interface_WriteRegister(dst_num,CHIP_DATA_OUT_DELAY_REG3,set_left_delay_channels,0,0) || + !Feb_Interface_WriteRegister(dst_num,CHIP_DATA_OUT_DELAY_REG4,set_right_delay_channels,0,0) || + !Feb_Interface_WriteRegister(dst_num,CHIP_DATA_OUT_DELAY_REG_CTRL,CHIP_DATA_OUT_DELAY_SET,1,1)){ + printf("Warning: could not SetChipDataInputDelays(...).\n"); + return 0; + } - return 1; + return 1; } int Feb_Control_VoltageToDAC(float value, unsigned int* digital,unsigned int nsteps,float vmin,float vmax){ - if(valuevmax) return 0; - *digital = (int)(((value-vmin)/(vmax-vmin))*(nsteps-1) + 0.5); - return 1; + if(valuevmax) return 0; + *digital = (int)(((value-vmin)/(vmax-vmin))*(nsteps-1) + 0.5); + return 1; } float Feb_Control_DACToVoltage(unsigned int digital,unsigned int nsteps,float vmin,float vmax){ - return vmin+(vmax-vmin)*digital/(nsteps-1); + return vmin+(vmax-vmin)*digital/(nsteps-1); } @@ -713,59 +713,59 @@ int Feb_Control_SetHighVoltage(float value){ } int Feb_Control_SetHighVoltage1(unsigned int module_num,float value){ - unsigned int module_index=0; - unsigned int i; + unsigned int module_index=0; + unsigned int i; - if(Module_TopAddressIsValid(&modules[module_index])){ - if(!Feb_Control_GetModuleIndex(module_num,&module_index)){/*||!Module_TopAddressIsValid(&modules[module_index])){*/ - printf("Error could not set high voltage module number %d invalid.\n",module_num); - return 0; - } - }else - return 0; + if(Module_TopAddressIsValid(&modules[module_index])){ + if(!Feb_Control_GetModuleIndex(module_num,&module_index)){/*||!Module_TopAddressIsValid(&modules[module_index])){*/ + printf("Error could not set high voltage module number %d invalid.\n",module_num); + return 0; + } + }else + return 0; - if(!Feb_Control_SendHighVoltage(Module_GetTopRightAddress(&modules[module_index]),&value)) return 0; + if(!Feb_Control_SendHighVoltage(Module_GetTopRightAddress(&modules[module_index]),&value)) return 0; - if(module_index!=0) Module_SetHighVoltage(&modules[module_index],value); - else for(i=0;i4095){ - printf("Warning: SetDac bad value, %d. The range is 0 to 4095.\n",v); - return 0; - } + unsigned int v = value; + if(is_a_voltage_mv&&!Feb_Control_VoltageToDAC(value,&v,4096,0,2048)){ + printf("Warning: SetDac bad value, %d. The range is 0 to 2048 mV.\n",value); + return 0; + } + if(v<0||v>4095){ + printf("Warning: SetDac bad value, %d. The range is 0 to 4095.\n",v); + return 0; + } - if(top&&Module_TopAddressIsValid(&modules[module_index])){ + if(top&&Module_TopAddressIsValid(&modules[module_index])){ - if(!Feb_Control_SendDACValue(Module_GetTopRightAddress(&modules[module_index]),dac_ch,&v)) return 0; + if(!Feb_Control_SendDACValue(Module_GetTopRightAddress(&modules[module_index]),dac_ch,&v)) return 0; - if(module_index!=0) Module_SetTopDACValue(&modules[module_index],dac_ch,v); - else for(i=0;i=Module_ndacs){ - printf("Warning: GetDACName index out of range, %d invalid.\n",dac_num); - return 0; - } - strcpy(s,Module_dac_names[dac_num]); - return 1; + if(dac_num>=Module_ndacs){ + printf("Warning: GetDACName index out of range, %d invalid.\n",dac_num); + return 0; + } + strcpy(s,Module_dac_names[dac_num]); + return 1; } int Feb_Control_GetDACNumber(char* s, unsigned int* n){ unsigned int i; - for(i=0;i15){ - printf("Warning invalid ch for SetDAC.\n"); - return 0; - } + if(ch<0||ch>15){ + printf("Warning invalid ch for SetDAC.\n"); + return 0; + } - //if(voltage<0) return PowerDownDAC(socket_num,ch); + //if(voltage<0) return PowerDownDAC(socket_num,ch); - *value&=0xfff; - unsigned int dac_ic = (ch<8) ? 1:2; - unsigned int dac_ch = ch%8; - unsigned int r = dac_ic<<30 | 3<<16 | dac_ch<<12 | *value; //3 write and power up + *value&=0xfff; + unsigned int dac_ic = (ch<8) ? 1:2; + unsigned int dac_ch = ch%8; + unsigned int r = dac_ic<<30 | 3<<16 | dac_ch<<12 | *value; //3 write and power up - if(!Feb_Interface_WriteRegister(dst_num,0,r,1,0)){ - printf("Warning: trouble setting dac %d voltage.\n",ch); - return 0; - } + if(!Feb_Interface_WriteRegister(dst_num,0,r,1,0)){ + printf("Warning: trouble setting dac %d voltage.\n",ch); + return 0; + } - float voltage=Feb_Control_DACToVoltage(*value,4096,0,2048); + float voltage=Feb_Control_DACToVoltage(*value,4096,0,2048); - printf("\tDac number %d (%s) of dst %d set to %d (%f mV).\n",ch,Module_dac_names[ch],dst_num,*value,voltage); - return 1; + printf("\tDac number %d (%s) of dst %d set to %d (%f mV).\n",ch,Module_dac_names[ch],dst_num,*value,voltage); + return 1; } /* @@ -946,7 +946,7 @@ float GetDAC(string s){ return dac[n]; } -*/ + */ int Feb_Control_SetTrimbits(unsigned int module_num, unsigned int *trimbits){ printf("Setting Trimbits\n"); @@ -1001,7 +1001,7 @@ int Feb_Control_SetTrimbits(unsigned int module_num, unsigned int *trimbits){ /* int super_column_start_position_l = 1024*row + l_r *256 + sc*8; //256 per row, 8 per super column int super_column_start_position_r = 1024*row + 512 + l_r *256 + sc*8; //256 per row, 8 per super column -*/ + */ int chip_sc = 31 - sc; trimbits_to_load_l[offset+chip_sc] = 0; trimbits_to_load_r[offset+chip_sc] = 0; @@ -1057,7 +1057,7 @@ int Feb_Control_SetTrimbits(unsigned int module_num, unsigned int *trimbits){ unsigned int* Feb_Control_GetTrimbits(){ - return Feb_Control_last_downloaded_trimbits; + return Feb_Control_last_downloaded_trimbits; } @@ -1067,61 +1067,48 @@ unsigned int Feb_Control_AddressToAll(){printf("in Feb_Control_AddressToAll()\n" - if(moduleSize==0) return 0; +if(moduleSize==0) return 0; - if(Module_BottomAddressIsValid(&modules[1])){ - //printf("************* bottom\n"); - //if(Feb_Control_am_i_master) - return Module_GetBottomLeftAddress(&modules[1])|Module_GetBottomRightAddress(&modules[1]); - // else return 0; - } - // printf("************* top\n"); +if(Module_BottomAddressIsValid(&modules[1])){ + //printf("************* bottom\n"); + //if(Feb_Control_am_i_master) + return Module_GetBottomLeftAddress(&modules[1])|Module_GetBottomRightAddress(&modules[1]); + // else return 0; +} +// printf("************* top\n"); - return Module_GetTopLeftAddress(&modules[1])|Module_GetTopRightAddress(&modules[1]); - //return Module_GetTopLeftAddress(&modules[0])|Module_GetTopRightAddress(&modules[0]); +return Module_GetTopLeftAddress(&modules[1])|Module_GetTopRightAddress(&modules[1]); +//return Module_GetTopLeftAddress(&modules[0])|Module_GetTopRightAddress(&modules[0]); } int Feb_Control_SetCommandRegister(unsigned int cmd){ - return Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CHIP_CMDS,cmd,0,0); + return Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CHIP_CMDS,cmd,0,0); } int Feb_Control_GetDAQStatusRegister(unsigned int dst_address, unsigned int* ret_status){ - if(!Feb_Interface_ReadRegister(dst_address,DAQ_REG_STATUS,ret_status)){ - printf("Error: reading status register.\n"); - return 0; - } + if(!Feb_Interface_ReadRegister(dst_address,DAQ_REG_STATUS,ret_status)){ + printf("Error: reading status register.\n"); + return 0; + } - *ret_status = (0x00FF0000 & *ret_status) >> 16; - return 1; + *ret_status = (0x02FF0000 & *ret_status) >> 16; + return 1; } int Feb_Control_StartDAQOnlyNWaitForFinish(int sleep_time_us){ - if(!Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,0,0,0)||!Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,DAQ_CTRL_START,0,0)){ - printf("Warning: could not start.\n"); - return 0; - } - - return Feb_Control_WaitForFinishedFlag(sleep_time_us); + if(!Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,0,0,0)||!Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,DAQ_CTRL_START,0,0)){ + printf("Warning: could not start.\n"); + return 0; + } + + return Feb_Control_WaitForFinishedFlag(sleep_time_us); } -int Feb_Control_WaitForFinishedFlag(int sleep_time_us){ - int is_running = Feb_Control_AcquisitionInProgress(); - while(is_running){ - usleep(sleep_time_us); - is_running = Feb_Control_AcquisitionInProgress(); - } - if(is_running!=0){ - printf("\n\nWarning WaitForFinishedFlag comunication problem..\n\n"); - return 0; //communication problem - } - - return 1; -} int Feb_Control_AcquisitionInProgress(){ unsigned int status_reg_r=0,status_reg_l=0; @@ -1136,286 +1123,333 @@ int Feb_Control_AcquisitionInProgress(){ }else{ if(!(Feb_Control_GetDAQStatusRegister(Module_GetTopRightAddress(&modules[ind]),&status_reg_r))) - {printf("ERROR: Trouble reading Status register. top right address\n"); - if(!(Feb_Control_GetDAQStatusRegister(Module_GetTopRightAddress(&modules[0]),&status_reg_r))) - printf("ERROR: error with normal register\n"); - else - printf("**********NO error reading normal register\n"); - return 0;} + {printf("ERROR: Trouble reading Status register. top right address\n");return 0;} if(!(Feb_Control_GetDAQStatusRegister(Module_GetTopLeftAddress(&modules[ind]),&status_reg_l))) {printf("ERROR: Trouble reading Status register. top left address\n");return 0;} } - if((status_reg_r|status_reg_l)&DAQ_STATUS_DAQ_RUNNING) {/*printf("**runningggg\n");*/return 1;} - /* - if(!(GetDAQStatusRegister(modules[i]->Module_GetTopLeftAddress(),status_reg_r)&&GetDAQStatusRegister(modules[i]->Module_GetTopRightAddress(),status_reg_l))){ - for(int i=0;i<2;i++) printf("Waring trouble reading status register. Returning zero to avoid inifite loops, this could cause trouble!"\n");; - return 0; //to avoid inifite loops - } - if((status_reg_r|status_reg_l)&DAQ_STATUS_DAQ_RUNNING) return 1; - } - */ - - /*printf("**idle\n");*/ - return 0; //i.e. not running (status_reg_r|status_reg_l)&DAQ_STATUS_DAQ_RUNNING; + //running + if((status_reg_r|status_reg_l)&DAQ_STATUS_DAQ_RUNNING) {/*printf("**runningggg\n");*/ + return 1; + } + //idle + return 0; } -int Feb_Control_Reset(){ - if(!Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,0,0,0) || !Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,DAQ_CTRL_RESET,0,0) || !Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,0,0,0)){ - printf("Warning: Could not reset daq, no response.\n"); - return 0; - } - return Feb_Control_WaitForFinishedFlag(5000); +int Feb_Control_AcquisitionStartedBit(){ + unsigned int status_reg_r=0,status_reg_l=0; + + int ind = Feb_Control_current_index; + if(Module_BottomAddressIsValid(&modules[ind])){ + + if(!(Feb_Control_GetDAQStatusRegister(Module_GetBottomRightAddress(&modules[ind]),&status_reg_r))) + {printf("ERROR: Trouble reading Status register. bottom right address\n");return -1;} + if(!(Feb_Control_GetDAQStatusRegister(Module_GetBottomLeftAddress(&modules[ind]),&status_reg_l))) + {printf("ERROR: Trouble reading Status register. bottom left address\n");return -1;} + + }else{ + if(!(Feb_Control_GetDAQStatusRegister(Module_GetTopRightAddress(&modules[ind]),&status_reg_r))) + {printf("ERROR: Trouble reading Status register. top right address\n"); return -1;} + if(!(Feb_Control_GetDAQStatusRegister(Module_GetTopLeftAddress(&modules[ind]),&status_reg_l))) + {printf("ERROR: Trouble reading Status register. top left address\n");return -1;} + } + + //doesnt mean it started, just the bit + if((status_reg_r|status_reg_l)&DAQ_STATUS_DAQ_RUN_TOGGLE) + return 1; + + return 0; +} + + + +int Feb_Control_WaitForFinishedFlag(int sleep_time_us){ + int is_running = Feb_Control_AcquisitionInProgress(); + while(is_running){ + usleep(sleep_time_us); + is_running = Feb_Control_AcquisitionInProgress(); + } + if(is_running!=0){ + printf("\n\nWarning WaitForFinishedFlag comunication problem..\n\n"); + return 0; //communication problem + } + + return 1; +} + + +int Feb_Control_WaitForStartedFlag(int sleep_time_us, int prev_flag){ + int value = prev_flag; + while(value == prev_flag){ + usleep(sleep_time_us); + value = Feb_Control_AcquisitionStartedBit(); + } + + //did not start + if(value == -1) + return 0; + + return 1; +} + + +int Feb_Control_Reset(){ + if(!Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,0,0,0) || !Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,DAQ_CTRL_RESET,0,0) || !Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_CTRL,0,0,0)){ + printf("Warning: Could not reset daq, no response.\n"); + return 0; + } + + return Feb_Control_WaitForFinishedFlag(5000); } int Feb_Control_SetStaticBits(){ - //program=1,m4=2,m8=4,test=8,rotest=16,cs_bar_left=32,cs_bar_right=64 - if(!Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_STATIC_BITS,Feb_Control_staticBits,0,0) || !Feb_Control_SetCommandRegister(DAQ_SET_STATIC_BIT) || !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ - printf("Warning: Could not set static bits\n"); - return 0; - } + //program=1,m4=2,m8=4,test=8,rotest=16,cs_bar_left=32,cs_bar_right=64 + if(!Feb_Interface_WriteRegister(Feb_Control_AddressToAll(),DAQ_REG_STATIC_BITS,Feb_Control_staticBits,0,0) || !Feb_Control_SetCommandRegister(DAQ_SET_STATIC_BIT) || !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ + printf("Warning: Could not set static bits\n"); + return 0; + } - return 1; + return 1; } int Feb_Control_SetStaticBits1(unsigned int the_static_bits){ Feb_Control_staticBits = the_static_bits; - return Feb_Control_SetStaticBits(); + return Feb_Control_SetStaticBits(); } int Feb_Control_SetTestModeVariable(int on){ - if(on) Feb_Control_staticBits |= DAQ_STATIC_BIT_CHIP_TEST; //setting test bit to high - else Feb_Control_staticBits &= (~DAQ_STATIC_BIT_CHIP_TEST); //setting test bit to low - return 1; + if(on) Feb_Control_staticBits |= DAQ_STATIC_BIT_CHIP_TEST; //setting test bit to high + else Feb_Control_staticBits &= (~DAQ_STATIC_BIT_CHIP_TEST); //setting test bit to low + return 1; } int Feb_Control_GetTestModeVariable(){ - return Feb_Control_staticBits&DAQ_STATIC_BIT_CHIP_TEST; + return Feb_Control_staticBits&DAQ_STATIC_BIT_CHIP_TEST; } int Feb_Control_SetDynamicRange(unsigned int four_eight_sixteen_or_thirtytwo){ - static unsigned int everything_but_bit_mode = DAQ_STATIC_BIT_PROGRAM|DAQ_STATIC_BIT_CHIP_TEST|DAQ_STATIC_BIT_ROTEST; - if(four_eight_sixteen_or_thirtytwo==4){ - Feb_Control_staticBits = DAQ_STATIC_BIT_M4 | (Feb_Control_staticBits&everything_but_bit_mode); //leave test bits in currernt state - Feb_Control_subFrameMode &= ~DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING; - }else if(four_eight_sixteen_or_thirtytwo==8){ - Feb_Control_staticBits = DAQ_STATIC_BIT_M8 | (Feb_Control_staticBits&everything_but_bit_mode); - Feb_Control_subFrameMode &= ~DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING; - }else if(four_eight_sixteen_or_thirtytwo==16){ - Feb_Control_staticBits = DAQ_STATIC_BIT_M12 | (Feb_Control_staticBits&everything_but_bit_mode); - Feb_Control_subFrameMode &= ~DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING; - }else if(four_eight_sixteen_or_thirtytwo==32){ - Feb_Control_staticBits = DAQ_STATIC_BIT_M12 | (Feb_Control_staticBits&everything_but_bit_mode); - Feb_Control_subFrameMode |= DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING; - }else{ - printf("Warning: dynamic range (%d) not valid, not setting bit mode.\n",four_eight_sixteen_or_thirtytwo); - printf("Set dynamic range int must equal 4,8 16, or 32.\n"); - return 0; - } + static unsigned int everything_but_bit_mode = DAQ_STATIC_BIT_PROGRAM|DAQ_STATIC_BIT_CHIP_TEST|DAQ_STATIC_BIT_ROTEST; + if(four_eight_sixteen_or_thirtytwo==4){ + Feb_Control_staticBits = DAQ_STATIC_BIT_M4 | (Feb_Control_staticBits&everything_but_bit_mode); //leave test bits in currernt state + Feb_Control_subFrameMode &= ~DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING; + }else if(four_eight_sixteen_or_thirtytwo==8){ + Feb_Control_staticBits = DAQ_STATIC_BIT_M8 | (Feb_Control_staticBits&everything_but_bit_mode); + Feb_Control_subFrameMode &= ~DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING; + }else if(four_eight_sixteen_or_thirtytwo==16){ + Feb_Control_staticBits = DAQ_STATIC_BIT_M12 | (Feb_Control_staticBits&everything_but_bit_mode); + Feb_Control_subFrameMode &= ~DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING; + }else if(four_eight_sixteen_or_thirtytwo==32){ + Feb_Control_staticBits = DAQ_STATIC_BIT_M12 | (Feb_Control_staticBits&everything_but_bit_mode); + Feb_Control_subFrameMode |= DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING; + }else{ + printf("Warning: dynamic range (%d) not valid, not setting bit mode.\n",four_eight_sixteen_or_thirtytwo); + printf("Set dynamic range int must equal 4,8 16, or 32.\n"); + return 0; + } - printf("Dynamic range set to: %d\n",four_eight_sixteen_or_thirtytwo); - return 1; + printf("Dynamic range set to: %d\n",four_eight_sixteen_or_thirtytwo); + return 1; } unsigned int Feb_Control_GetDynamicRange(){ - if(Feb_Control_subFrameMode&DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING) return 32; - else if(DAQ_STATIC_BIT_M4&Feb_Control_staticBits) return 4; - else if(DAQ_STATIC_BIT_M8&Feb_Control_staticBits) return 8; + if(Feb_Control_subFrameMode&DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING) return 32; + else if(DAQ_STATIC_BIT_M4&Feb_Control_staticBits) return 4; + else if(DAQ_STATIC_BIT_M8&Feb_Control_staticBits) return 8; - return 16; + return 16; } int Feb_Control_SetReadoutSpeed(unsigned int readout_speed){ //0->full,1->half,2->quarter or 3->super_slow Feb_Control_acquireNReadoutMode &= (~DAQ_CHIP_CONTROLLER_SUPER_SLOW_SPEED); - if(readout_speed==1){ - Feb_Control_acquireNReadoutMode |= DAQ_CHIP_CONTROLLER_HALF_SPEED; - printf("Everything at half speed, ie. reading with 50 MHz main clk (half speed) ....\n"); - }else if(readout_speed==2){ - Feb_Control_acquireNReadoutMode |= DAQ_CHIP_CONTROLLER_QUARTER_SPEED; - printf("Everything at quarter speed, ie. reading with 25 MHz main clk (quarter speed) ....\n"); - }else if(readout_speed==3){ - Feb_Control_acquireNReadoutMode |= DAQ_CHIP_CONTROLLER_SUPER_SLOW_SPEED; - printf("Everything at super slow speed, ie. reading with ~0.200 MHz main clk (super slow speed) ....\n"); - }else{ - if(readout_speed){ - printf("Warning readout speed %d unknown, defaulting to full speed.\n",readout_speed); - printf("Everything at full speed, ie. reading with 100 MHz main clk (full speed) ....\n"); - return 0; - } - printf("Everything at full speed, ie. reading with 100 MHz main clk (full speed) ....\n"); - } + if(readout_speed==1){ + Feb_Control_acquireNReadoutMode |= DAQ_CHIP_CONTROLLER_HALF_SPEED; + printf("Everything at half speed, ie. reading with 50 MHz main clk (half speed) ....\n"); + }else if(readout_speed==2){ + Feb_Control_acquireNReadoutMode |= DAQ_CHIP_CONTROLLER_QUARTER_SPEED; + printf("Everything at quarter speed, ie. reading with 25 MHz main clk (quarter speed) ....\n"); + }else if(readout_speed==3){ + Feb_Control_acquireNReadoutMode |= DAQ_CHIP_CONTROLLER_SUPER_SLOW_SPEED; + printf("Everything at super slow speed, ie. reading with ~0.200 MHz main clk (super slow speed) ....\n"); + }else{ + if(readout_speed){ + printf("Warning readout speed %d unknown, defaulting to full speed.\n",readout_speed); + printf("Everything at full speed, ie. reading with 100 MHz main clk (full speed) ....\n"); + return 0; + } + printf("Everything at full speed, ie. reading with 100 MHz main clk (full speed) ....\n"); + } - return 1; + return 1; } int Feb_Control_SetReadoutMode(unsigned int readout_mode){ //0->parallel,1->non-parallel,2-> safe_mode Feb_Control_acquireNReadoutMode &= (~DAQ_NEXPOSURERS_PARALLEL_MODE); - if(readout_mode==1){ - Feb_Control_acquireNReadoutMode |= DAQ_NEXPOSURERS_NORMAL_NONPARALLEL_MODE; - printf("Readout mode set to normal non-parallel readout mode ... \n");; - }else if(readout_mode==2){ - Feb_Control_acquireNReadoutMode |= DAQ_NEXPOSURERS_SAFEST_MODE_ROW_CLK_BEFORE_MODE; - printf("Readout mode set to safest mode, row clk before main clk readout sequence .... \n");; - }else{ - Feb_Control_acquireNReadoutMode |= DAQ_NEXPOSURERS_PARALLEL_MODE; - if(readout_mode){ - printf("Warning readout mode %d) unknown, defaulting to full speed.\n",readout_mode); - printf("Readout mode set to parrallel acquire/read mode .... \n");; - return 0; - } - printf("Readout mode set to parrallel acquire/read mode .... \n");; - } + if(readout_mode==1){ + Feb_Control_acquireNReadoutMode |= DAQ_NEXPOSURERS_NORMAL_NONPARALLEL_MODE; + printf("Readout mode set to normal non-parallel readout mode ... \n");; + }else if(readout_mode==2){ + Feb_Control_acquireNReadoutMode |= DAQ_NEXPOSURERS_SAFEST_MODE_ROW_CLK_BEFORE_MODE; + printf("Readout mode set to safest mode, row clk before main clk readout sequence .... \n");; + }else{ + Feb_Control_acquireNReadoutMode |= DAQ_NEXPOSURERS_PARALLEL_MODE; + if(readout_mode){ + printf("Warning readout mode %d) unknown, defaulting to full speed.\n",readout_mode); + printf("Readout mode set to parrallel acquire/read mode .... \n");; + return 0; + } + printf("Readout mode set to parrallel acquire/read mode .... \n");; + } - return 1; + return 1; } int Feb_Control_SetTriggerMode(unsigned int trigger_mode,int polarity){ - //"00"-> internal exposure time and period, - //"01"-> external acquistion start and internal exposure time and period, - //"10"-> external start trigger and internal exposure time, - //"11"-> external triggered start and stop of exposures + //"00"-> internal exposure time and period, + //"01"-> external acquistion start and internal exposure time and period, + //"10"-> external start trigger and internal exposure time, + //"11"-> external triggered start and stop of exposures Feb_Control_triggerMode = (~DAQ_NEXPOSURERS_EXTERNAL_IMAGE_START_AND_STOP); - if(trigger_mode == 1){ - Feb_Control_triggerMode = DAQ_NEXPOSURERS_EXTERNAL_ACQUISITION_START; - printf("Trigger mode: external start of acquisition sequence, internal exposure length and period.\n");; - }else if(trigger_mode == 2){ - Feb_Control_triggerMode = DAQ_NEXPOSURERS_EXTERNAL_IMAGE_START; - printf("Trigger mode: external image start, internal exposure time.\n");; - }else if(trigger_mode == 3){ - Feb_Control_triggerMode = DAQ_NEXPOSURERS_EXTERNAL_IMAGE_START_AND_STOP; - printf("Trigger mode: externally controlled, external image window (start and stop).\n");; - }else{ - Feb_Control_triggerMode = DAQ_NEXPOSURERS_INTERNAL_ACQUISITION; - if(trigger_mode) printf("Warning trigger %d) unknown, defaulting to internal triggering.\n",trigger_mode);; + if(trigger_mode == 1){ + Feb_Control_triggerMode = DAQ_NEXPOSURERS_EXTERNAL_ACQUISITION_START; + printf("Trigger mode: external start of acquisition sequence, internal exposure length and period.\n");; + }else if(trigger_mode == 2){ + Feb_Control_triggerMode = DAQ_NEXPOSURERS_EXTERNAL_IMAGE_START; + printf("Trigger mode: external image start, internal exposure time.\n");; + }else if(trigger_mode == 3){ + Feb_Control_triggerMode = DAQ_NEXPOSURERS_EXTERNAL_IMAGE_START_AND_STOP; + printf("Trigger mode: externally controlled, external image window (start and stop).\n");; + }else{ + Feb_Control_triggerMode = DAQ_NEXPOSURERS_INTERNAL_ACQUISITION; + if(trigger_mode) printf("Warning trigger %d) unknown, defaulting to internal triggering.\n",trigger_mode);; - printf("Trigger mode: acquisition internally controlled exposure length and period.\n");; - return trigger_mode==0; - } + printf("Trigger mode: acquisition internally controlled exposure length and period.\n");; + return trigger_mode==0; + } - if(polarity){ - Feb_Control_triggerMode |= DAQ_NEXPOSURERS_EXTERNAL_TRIGGER_POLARITY; - printf("External trigger polarity set to positive.\n");; - }else{ - Feb_Control_triggerMode &= (~DAQ_NEXPOSURERS_EXTERNAL_TRIGGER_POLARITY); - printf("External trigger polarity set to negitive.\n");; - } + if(polarity){ + Feb_Control_triggerMode |= DAQ_NEXPOSURERS_EXTERNAL_TRIGGER_POLARITY; + printf("External trigger polarity set to positive.\n");; + }else{ + Feb_Control_triggerMode &= (~DAQ_NEXPOSURERS_EXTERNAL_TRIGGER_POLARITY); + printf("External trigger polarity set to negitive.\n");; + } - return 1; + return 1; } int Feb_Control_SetExternalEnableMode(int use_external_enable, int polarity){ - if(use_external_enable){ - Feb_Control_externalEnableMode |= DAQ_NEXPOSURERS_EXTERNAL_ENABLING; - printf("External enabling enabled, "); - if(polarity){ - Feb_Control_externalEnableMode |= DAQ_NEXPOSURERS_EXTERNAL_ENABLING_POLARITY; - printf(", polarity set to positive.\n");; - }else{ - Feb_Control_externalEnableMode &= (~DAQ_NEXPOSURERS_EXTERNAL_ENABLING_POLARITY); - printf(", polarity set to negative.\n");; - } - }else{ - Feb_Control_externalEnableMode &= (~DAQ_NEXPOSURERS_EXTERNAL_ENABLING); - printf("External enabling disabled.\n");; - } + if(use_external_enable){ + Feb_Control_externalEnableMode |= DAQ_NEXPOSURERS_EXTERNAL_ENABLING; + printf("External enabling enabled, "); + if(polarity){ + Feb_Control_externalEnableMode |= DAQ_NEXPOSURERS_EXTERNAL_ENABLING_POLARITY; + printf(", polarity set to positive.\n");; + }else{ + Feb_Control_externalEnableMode &= (~DAQ_NEXPOSURERS_EXTERNAL_ENABLING_POLARITY); + printf(", polarity set to negative.\n");; + } + }else{ + Feb_Control_externalEnableMode &= (~DAQ_NEXPOSURERS_EXTERNAL_ENABLING); + printf("External enabling disabled.\n");; + } - return 1; + return 1; } int Feb_Control_SetNExposures(unsigned int n_images){ - if(!n_images){ - printf("Warning nimages must be greater than zero.%d\n",n_images); - return 0; - } + if(!n_images){ + printf("Warning nimages must be greater than zero.%d\n",n_images); + return 0; + } - Feb_Control_nimages = n_images; - printf("Number of images set to: %d\n",Feb_Control_nimages); - return 1; + Feb_Control_nimages = n_images; + printf("Number of images set to: %d\n",Feb_Control_nimages); + return 1; } unsigned int Feb_Control_GetNExposures(){return Feb_Control_nimages;} int Feb_Control_SetExposureTime(double the_exposure_time_in_sec){ Feb_Control_exposure_time_in_sec = the_exposure_time_in_sec; - printf("Exposure time set to: %f\n",Feb_Control_exposure_time_in_sec); - return 1; + printf("Exposure time set to: %f\n",Feb_Control_exposure_time_in_sec); + return 1; } double Feb_Control_GetExposureTime(){return Feb_Control_exposure_time_in_sec;} int Feb_Control_SetExposurePeriod(double the_exposure_period_in_sec){ Feb_Control_exposure_period_in_sec = the_exposure_period_in_sec; - printf("Exposure period set to: %f\n",Feb_Control_exposure_period_in_sec); - return 1; + printf("Exposure period set to: %f\n",Feb_Control_exposure_period_in_sec); + return 1; } double Feb_Control_GetExposurePeriod(){return Feb_Control_exposure_period_in_sec;} unsigned int Feb_Control_ConvertTimeToRegister(float time_in_sec){ - float n_clk_cycles = round(time_in_sec/10e-9); //200 MHz ctb clk or 100 MHz feb clk + float n_clk_cycles = round(time_in_sec/10e-9); //200 MHz ctb clk or 100 MHz feb clk - unsigned int decoded_time; - if(n_clk_cycles>(pow(2,29)-1)*pow(10,7)){ - float max_time = 10e-9*(pow(2,28)-1)*pow(10,7); - printf("Warning: time exceeds (%f) maximum exposure time of %f sec.\n",time_in_sec,max_time); - printf("\t Setting to maximum %f us.\n",max_time); - decoded_time = 0xffffffff; - }else{ - int power_of_ten = 0; - while(n_clk_cycles>pow(2,29)-1){ power_of_ten++; n_clk_cycles = round(n_clk_cycles/10.0);} - decoded_time = (int)(n_clk_cycles)<<3 | (int)(power_of_ten); - } + unsigned int decoded_time; + if(n_clk_cycles>(pow(2,29)-1)*pow(10,7)){ + float max_time = 10e-9*(pow(2,28)-1)*pow(10,7); + printf("Warning: time exceeds (%f) maximum exposure time of %f sec.\n",time_in_sec,max_time); + printf("\t Setting to maximum %f us.\n",max_time); + decoded_time = 0xffffffff; + }else{ + int power_of_ten = 0; + while(n_clk_cycles>pow(2,29)-1){ power_of_ten++; n_clk_cycles = round(n_clk_cycles/10.0);} + decoded_time = (int)(n_clk_cycles)<<3 | (int)(power_of_ten); + } - return decoded_time; + return decoded_time; } int Feb_Control_ResetChipCompletely(){ - if(!Feb_Control_SetCommandRegister(DAQ_RESET_COMPLETELY) || !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ - printf("Warning: could not ResetChipCompletely().\n");; - return 0; - } + if(!Feb_Control_SetCommandRegister(DAQ_RESET_COMPLETELY) || !Feb_Control_StartDAQOnlyNWaitForFinish(5000)){ + printf("Warning: could not ResetChipCompletely().\n");; + return 0; + } - return 1; + return 1; } void Feb_Control_PrintAcquisitionSetup(){ - time_t rawtime; - time(&rawtime); - struct tm *timeinfo = localtime(&rawtime); + time_t rawtime; + time(&rawtime); + struct tm *timeinfo = localtime(&rawtime); - printf("\nStarting an exposure: %s",asctime(timeinfo)); - printf("\t Dynamic range nbits: %d\n",Feb_Control_GetDynamicRange()); - printf("\t Trigger mode: 0x%x\n",Feb_Control_triggerMode); - printf("\t Number of exposures: %d\n",Feb_Control_GetNExposures()); - printf("\t Exsposure time (if used): %f seconds.\n",Feb_Control_exposure_time_in_sec); - printf("\t Exsposure period (if used): %f seconds.\n\n\n",Feb_Control_exposure_period_in_sec); + printf("\nStarting an exposure: %s",asctime(timeinfo)); + printf("\t Dynamic range nbits: %d\n",Feb_Control_GetDynamicRange()); + printf("\t Trigger mode: 0x%x\n",Feb_Control_triggerMode); + printf("\t Number of exposures: %d\n",Feb_Control_GetNExposures()); + printf("\t Exsposure time (if used): %f seconds.\n",Feb_Control_exposure_time_in_sec); + printf("\t Exsposure period (if used): %f seconds.\n\n\n",Feb_Control_exposure_period_in_sec); } int Feb_Control_SendBitModeToBebServer(){ -/* + /* static int first_pass = 1; static char buffer[1024]; if(first_pass&&!Feb_Control_SetupSendToSocket("localhost",43212)) return 0; else first_pass=0; -*/ - unsigned int just_bit_mode = (DAQ_STATIC_BIT_M4|DAQ_STATIC_BIT_M8) & Feb_Control_staticBits; - unsigned int bit_mode = 16; //default - if(just_bit_mode == DAQ_STATIC_BIT_M4) bit_mode = 4; - else if(just_bit_mode == DAQ_STATIC_BIT_M8) bit_mode = 8; - else if(Feb_Control_subFrameMode&DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING) bit_mode = 32; + */ + unsigned int just_bit_mode = (DAQ_STATIC_BIT_M4|DAQ_STATIC_BIT_M8) & Feb_Control_staticBits; + unsigned int bit_mode = 16; //default + if(just_bit_mode == DAQ_STATIC_BIT_M4) bit_mode = 4; + else if(just_bit_mode == DAQ_STATIC_BIT_M8) bit_mode = 8; + else if(Feb_Control_subFrameMode&DAQ_NEXPOSURERS_ACTIVATE_AUTO_SUBIMAGING) bit_mode = 32; - if(!Beb_SetUpTransferParameters(bit_mode)){ - printf("Error: sending bit mode ...\n"); - return 0; - } + if(!Beb_SetUpTransferParameters(bit_mode)){ + printf("Error: sending bit mode ...\n"); + return 0; + } - /* + /* bzero(buffer,1024); sprintf(buffer,"setbitmode %d",bit_mode); @@ -1423,8 +1457,8 @@ int Feb_Control_SendBitModeToBebServer(){ printf("Error: sending bit mode ...\n"); return 0; } -*/ - return 1; + */ + return 1; } /* @@ -1460,7 +1494,7 @@ int Feb_Control_WriteNRead(char* message, int length, int max_length){ int n = write(sockfd,message,length); if(n<0) printf("ERROR writing to socket"); - + length = read(sockfd,message,max_length); if(length<0) printf("ERROR reading to socket"); @@ -1468,65 +1502,65 @@ int Feb_Control_WriteNRead(char* message, int length, int max_length){ return length; } -*/ + */ int Feb_Control_PrepareForAcquisition(){//return 1; - static unsigned int reg_nums[20]; - static unsigned int reg_vals[20]; + static unsigned int reg_nums[20]; + static unsigned int reg_vals[20]; - Feb_Control_PrintAcquisitionSetup(); + Feb_Control_PrintAcquisitionSetup(); - // if(!Reset()||!ResetDataStream()){ - if(!Feb_Control_Reset()){ - printf("Trouble reseting daq or data stream...\n");; - return 0; - } + // if(!Reset()||!ResetDataStream()){ + if(!Feb_Control_Reset()){ + printf("Trouble reseting daq or data stream...\n");; + return 0; + } - if(!Feb_Control_SetStaticBits1(Feb_Control_staticBits&(DAQ_STATIC_BIT_M4|DAQ_STATIC_BIT_M8))){ - printf("Trouble setting static bits ...\n");; - return 0; - } + if(!Feb_Control_SetStaticBits1(Feb_Control_staticBits&(DAQ_STATIC_BIT_M4|DAQ_STATIC_BIT_M8))){ + printf("Trouble setting static bits ...\n");; + return 0; + } - if(!Feb_Control_SendBitModeToBebServer()){ - printf("Trouble sending static bits to server ...\n");; - return 0; - } + if(!Feb_Control_SendBitModeToBebServer()){ + printf("Trouble sending static bits to server ...\n");; + return 0; + } - if(!Feb_Control_ResetChipCompletely()){ - printf("Trouble resetting chips ...\n");; - return 0; - } + if(!Feb_Control_ResetChipCompletely()){ + printf("Trouble resetting chips ...\n");; + return 0; + } - reg_nums[0]=DAQ_REG_CTRL; - reg_vals[0]=0; - reg_nums[1]=DAQ_REG_NEXPOSURES; - reg_vals[1]=Feb_Control_nimages; - reg_nums[2]=DAQ_REG_EXPOSURE_TIMER; - reg_vals[2]=Feb_Control_ConvertTimeToRegister(Feb_Control_exposure_time_in_sec); - reg_nums[3]=DAQ_REG_EXPOSURE_REPEAT_TIMER; - reg_vals[3]=Feb_Control_ConvertTimeToRegister(Feb_Control_exposure_period_in_sec); - reg_nums[4]=DAQ_REG_CHIP_CMDS; - reg_vals[4]=(Feb_Control_acquireNReadoutMode|Feb_Control_triggerMode|Feb_Control_externalEnableMode|Feb_Control_subFrameMode); + reg_nums[0]=DAQ_REG_CTRL; + reg_vals[0]=0; + reg_nums[1]=DAQ_REG_NEXPOSURES; + reg_vals[1]=Feb_Control_nimages; + reg_nums[2]=DAQ_REG_EXPOSURE_TIMER; + reg_vals[2]=Feb_Control_ConvertTimeToRegister(Feb_Control_exposure_time_in_sec); + reg_nums[3]=DAQ_REG_EXPOSURE_REPEAT_TIMER; + reg_vals[3]=Feb_Control_ConvertTimeToRegister(Feb_Control_exposure_period_in_sec); + reg_nums[4]=DAQ_REG_CHIP_CMDS; + reg_vals[4]=(Feb_Control_acquireNReadoutMode|Feb_Control_triggerMode|Feb_Control_externalEnableMode|Feb_Control_subFrameMode); - // if(!Feb_Interface_WriteRegisters((Module_GetTopLeftAddress(&modules[1])|Module_GetTopRightAddress(&modules[1])),20,reg_nums,reg_vals,0,0)){ - if(!Feb_Interface_WriteRegisters(Feb_Control_AddressToAll(),5,reg_nums,reg_vals,0,0)){ - printf("Trouble starting acquisition....\n");; - return 0; - } - //*/ + // if(!Feb_Interface_WriteRegisters((Module_GetTopLeftAddress(&modules[1])|Module_GetTopRightAddress(&modules[1])),20,reg_nums,reg_vals,0,0)){ + if(!Feb_Interface_WriteRegisters(Feb_Control_AddressToAll(),5,reg_nums,reg_vals,0,0)){ + printf("Trouble starting acquisition....\n");; + return 0; + } + //*/ - /* if(!Feb_Control_am_i_master) + /* if(!Feb_Control_am_i_master) Feb_Control_StartAcquisition();*/ - return 1; + return 1; } int Feb_Control_StartAcquisition(){printf("****** starting acquisition********* \n"); - static unsigned int reg_nums[20]; - static unsigned int reg_vals[20]; +static unsigned int reg_nums[20]; +static unsigned int reg_vals[20]; /* Feb_Control_PrintAcquisitionSetup(); @@ -1540,7 +1574,7 @@ int Feb_Control_StartAcquisition(){printf("****** starting acquisition********* printf("Trouble setting static bits ...\n");; return 0; } - + if(!Feb_Control_SendBitModeToBebServer()){ printf("Trouble sending static bits to server ...\n");; return 0; @@ -1560,12 +1594,12 @@ int Feb_Control_StartAcquisition(){printf("****** starting acquisition********* reg_vals[2]=Feb_Control_ConvertTimeToRegister(Feb_Control_exposure_time_in_sec); reg_nums[3]=DAQ_REG_EXPOSURE_REPEAT_TIMER; reg_vals[3]=Feb_Control_ConvertTimeToRegister(Feb_Control_exposure_period_in_sec); - */ + */ - /* +/* reg_nums[4]=DAQ_REG_CHIP_CMDS; reg_vals[4]=(Feb_Control_acquireNReadoutMode|Feb_Control_triggerMode|Feb_Control_externalEnableMode|Feb_Control_subFrameMode); - */ + */ /* if(!Feb_Interface_WriteRegisters(Feb_Control_AddressToAll(),4,reg_nums,reg_vals,0,0)){ @@ -1599,22 +1633,22 @@ int Feb_Control_StartAcquisition(){printf("****** starting acquisition********* printf("Trouble starting acquisition....\n");; return 0; } -*/ - ///* - int i; - for(i=0;i<14;i++){ - reg_nums[i]=DAQ_REG_CTRL; - reg_vals[i]=0; - } - reg_nums[14]=DAQ_REG_CTRL; - reg_vals[14]=ACQ_CTRL_START; + */ +///* +int i; +for(i=0;i<14;i++){ + reg_nums[i]=DAQ_REG_CTRL; + reg_vals[i]=0; +} +reg_nums[14]=DAQ_REG_CTRL; +reg_vals[14]=ACQ_CTRL_START; - if(!Feb_Interface_WriteRegisters(Feb_Control_AddressToAll(),15,reg_nums,reg_vals,0,0)){ - printf("Trouble starting acquisition....\n");; - return 0; - } - //*/ - /* +if(!Feb_Interface_WriteRegisters(Feb_Control_AddressToAll(),15,reg_nums,reg_vals,0,0)){ + printf("Trouble starting acquisition....\n");; + return 0; +} +//*/ +/* int i; for(i=5;i<19;i++){ reg_nums[i]=DAQ_REG_CTRL; @@ -1622,19 +1656,19 @@ int Feb_Control_StartAcquisition(){printf("****** starting acquisition********* } reg_nums[19]=DAQ_REG_CTRL; reg_vals[19]=ACQ_CTRL_START; - + if(!Feb_Interface_WriteRegisters(Feb_Control_AddressToAll(),20,reg_nums,reg_vals,0,0)){ printf("Trouble starting acquisition....\n");; return 0; } -*/ + */ //*/ - return 1; +return 1; } int Feb_Control_StopAcquisition(){ - return Feb_Control_Reset(); + return Feb_Control_Reset(); } @@ -1644,5 +1678,5 @@ int Feb_Control_SaveAllTrimbitsTo(int value){ int i; for(i=0;iUVES8M;~-K{_idoG4i|}>tpAS8E{aN@sp$u62rd|{*|qg*`)p? zNnRvLQ57ifsMX7;PeQ%;tv@m%#Nsr|>hH|}Hp?V`(V*l7Op`~Xy}3IeF2H58N>Xqb zVK$paq)AfW9%|a&g1&mH>0trrNKc1Kl1WdaU4WjB0*!h)R+0ksbP{OO)59bwNKd1$ z;GU98bUZ9ek~--XQzR)=Pv=NdXFZ)KNnP}Gz9e0TX`q%K9w13^dOB2+2I=WANs8CgQIeFP zr(-24QBNmH(qKJ3Op=oHbebg17@}vgBx$Igo+3$i=;<6uvg+wPNlMn!`I2PQ(~Bg@ zuBVF?OQ*=_xEro|`DJ&sr}+-IBxP=sf*hv!s}6~EaIjA&OWw$W^IecF^=Hg-go>$C8p(VuxduC+}W8C6o!XwQf&<#MM)Y7r4S zEzoLCdC+QB7KJ`8+Z@V;(CFwvZ&$daAa_40h&o1_ur$dmTb*B=L2m<<*v@gT_zo$M z=bC;}M2b_A9Hv1xN}YX5D*8!L)%~RS94TN-smWA=^1f6KxX2X1x`DPdz*Le_EtyeQ zNOf8lQNAt)ZBLOr9^eYXSaYdOid*X7Fvacl!YfBRckXU05^c9h*=UQ^oRX$o=sZit zBcqFr9z{JOUACfRi^K?^G{jW0KG9Z0>9VmPq!aRkZN=1avh#~;I!qa0^g*n8@cxoj zv6D+mJD5t`pVI`ybrW^L0b>Nbio@Z+dLTSj>B}H>-~%tZF@REK=A>xFb+|LPq_H3+ zqwB+QDF>+`QM+m|5C?-BlH@jaAb7e+fW{nxzTzweT-<8npq0>TTjd`e?a!@&7o;HpenXmL!RX@#jN!r_u`J(>W_QCR1H24@UxYgZsCCg5|B(+j&+N1T}Ubomcxkr zvcZx>kXA`63pTwx%^hG7WzH`vFq9#fmPReV1NpwlAJ_7`k?)Lrot8g{E^Z)Sqvekv ze+Bt!Eq@I8PaRNo6Fkb9rvbyX}wIT;xz z+p?6FNSoZdP_g!z6_=7k!$>JiiBcu6_jJNwb*6-hr#l5)=)GUr-6t~KRtn~j^qW#G z5L|U-mMV3tQxtPd%$p;kB7y=hVp`4Dm7Li7Wb-nmCiYiy*HyeOm&Lp}YoOBKbI;|8X%rlufO;t`Nl$lH+vz6S$2k!SNlM3a0Wm|I8!kXu+vwDg)Yj|84`fD7iyzvTe0eJ~VRZS71osR#L}kvDzWYi#1Hm zD1QoNX~b_*V(wrxIXQGfxNSAjHraE2nF@Ldf*sgfvEDHuvV0<1K&h`EsP=t{L>a0u zHBG6wV?@X$5_Qsyp~~?)qC+mlYuPBJ`3}fMiDI!nFQ>;U2d%d5m#iS$?BkZ{>W1Vo zRGE=H%9S3QZZS)#2_sWfDG-Yqi1qT60Igh7d(g{A$7|*L{L9nxwekb4%A2)vO{Hsi zTnXcgw2C_a2IG%w<;VQX9YUk6A1t(!fzU}h9X;ZawCcVN>BsN4la8fW#9 zWv6Kk#QN|dy2q)NlY|&Lp1DRVC$nrQzqej1*QQFxpQjT_+RJ5VFh5FbFw7s(f>5nI z#lL)^-mwrYAEAYM#}0q^M@lt3Q+(wvn)}5%q8wiZl`qlfEZ4uhNN1_jzkEf3)t=vV+40kc3j;F!D ze6Ln68-)}DexqLCnLJp|@Ncj$P3z!{fB9RbT6v>?`GF%^`8lQHNFP4-0oIomG}QGa zO`M@JYc}U-t2{MLm;?D{uu?HTT)8Z9XWxZ8b)pi zxui(|vgXGhQ9e)UG0rAT2VBDlqO3F!3O>+Qs+p58n42&a@z3dg-rhEeP!XLwm0_u4 zCJ8hwW1DnNpn=Eg?kLbu*>M83N|*Mfjy1LDs+{1g)hVG4`RAjs7Bsbl?wE2gb*Oyl zq;fg+46=4Go2gUNyq zEl`SKHXo%lIrGFCrDD-wGNf@+MEs-FH|{}{_9qp2)vx_kiTE092*1s>YHZpXz1l)hkX5nfk>S%G|eA2tXMPPgOn=y88NQQN7~1F?KBt%*--0s`9UwKz#0ml<$Kp!xYyf+k3w)~ zZh>dLhDX%<@O*a_@Ie(yhs@!$P|`BTkyqr-45vrU`n#0RGy4$JTQUc+U5ayDKjqGG zQEV|%BiU*E8?C%GE=sm#D;4`Am9NM3Wra%Uog>)-Q8oWgi~Q_(<=CBrlvnSxup3C- z#rBK*=qwAcZR)IO2J+C5m%1f^>oOUP?Z{FEmNRa z95eo3=Z+ zJmiYzHwYS^4Zl*5E*7l17~St<_atA~uN;{&G~BDQjO-~@f~H2_Qv5HZDj8FI^<6?0OAE$sD!AO*!!g+%Y1DricY_Hf9RHAF;e0%)q97Ab$xQ>nNsT=}1A z5k~frLY{kfP|x)ma&?68Fx;Im!lH)qbX?cCqkOxI$cE2cvIV9zxa&3Ct{42*G0DbLcXr_A>MeevNYEZvESnT@0IhJzDnNg$nb9hMC1e$Q#MGC zoO~0Yl+PYz6p-Vy9}D@q#>?sK`y!)1fiYvb{xj$g(*2Vm0I^`87L}C`k5~5H_n+{d zCTX!^z|hTKH&SCCmriFYHTR2!GA!@$kZ&wrwp5HvQ?BI=HIiI0VWFZta969M4zQI^ zFHo}QL{Ip}O5;f>^e*-&hy3^J=rCfiTe>52E2C&tL{6}I6cJ;UzB$r1#`Mh*W#62y zhJKSxpguZJWok`Y>yrqFd}@z!Y;Ig@b*n85CCC|fOMP-GS#db~v6V`JGfrLzwcs2K zvvJUg0Bxy~GA~B{rb5Y^7b*X3rBX8QAzC1f^JWbdA=4<#lSDBb?P<}Tq@uy+rqy_= z8X|B0UHzx~#SW_^@(uxIa1_jsFYO$LF~q^uc7Q%^COh5U_#PMvB8=-6D6aD=~t!Zbv|Llc1`pPGsYPF8z%f?C= zJ4LybKRlQe-BhPx426mUb;n;qPrgM>`emuRm%P85l9nGQ@4KitmPB_k`dj-BDHZv1 zLYmG|JE2nDSdn)x2xC)~q6y(fX(JW=&4NCy){Xq}OvU<83{6?iLoqQ|N$W%yHIl#X z{CJ~M^ULVKH#U-+rxd*!Bfqg&X}sH?s5deKmyDG^Jg+n@ z8PtEve_Xun4FAYpzu`A79nF%JsG@$Ug@)0$!}Oh3+b8RTtAZ?EG*Uj&K{;L&DSvQL zxm*+({lQ1NHFZeEVmFl|nMVopAb+q|*}bBVGIm*~kgHXK(_~7WkIhv^KW6SphbcuU zh0eHoz)-ui=M+QDNpDT#@;oKu7d@1}EC;$KL-7l2y;Azl5O~smDXE zwq{SXKWpYFfBePx{x4z9qev?YXQ+Mk|A@j%Ci^%5;aw?&cV%?Ujt>noBb;5U-$H%y zieSk*S5%g~b6#c1JD;j7dFPZ;v2u?5;^Ee-*8KSMBidLP@bn!DK6`bzro3`QnHrxc zQLu@*rB!{Wvts$>H2GU-*I$OqZ}(L)+}O&MD%HQdgRN4I|1#1~|8JeC)VO;oT}#7Q z0x8|k^MjOMmPW9?t*Nb;P@qJuii!M&BGP^eUUfNZPbs;pyfXCS-M!=&wzTQ(1sq18 zx9?VkvGGEU_M0E4%zGl7rMB+Q{P?3vC)XV_+As*hw*ONw1LpMGEZv-HHU{utFBvQ8$~nf**s~vJH>em9AxjL%yve>V+A0K9-{zCQYkqh}x{}m|N{K-W(4# zg7r7~sM1sx9`fxOFKY9zL@>qr^iX*dcJxpCOT?x!rDpY60O?6^u%l zP%yV7V(&bah)L@O5#O1;NHIRevAPRMCJ|EkVH-j!!5k3sop1lEx&YC)A!OXGxbZrj zIf5G#JJ4b_%#0HhVUE8Oj1`=xUMhBlDVC?b)NQ~LZ^fn!AF9;lc}LXr^w^2Bb!(tu zEkaLWK0kWTOs!|S<`70OR_Ax64tdW;P^V6}7J?+EB(5jT)mn@qM2CJFXg${TGlSW5 zP~=doYXh9xNtGS}*-T9|4~O=uB$2DBEY%`0H3VxTKLcy(R{Yyd(Ifo?Y>iSrK5}Tq zT2gRS?5__iCT1xMo_6=tak(Q+L1sUZObHh7bKu#Jsw(H8HN|*0oQ} zb1MK!^IKu)WsPq}es6SLh}Z^#vpQ8uX__O!s>7EJ)^Mu+S~iVEk1MKi(Py^;_BP|#btvHr#wM zB;8JBts8MmJN3#IrE*?l88zL+s@3K{0u9wq^O;}X* z4*BJ^8p|l)*&ePf-bJVGR!JafVTPtCsZV!N-hDPAK}4gqA=9dfZC{W7db-l`Y(H`_ zpPLc#-8JHYx|jORoyxnVC+Mh5OMstDlFuhP(j{Z;M@&iZ6(4lI+N`; z+fho)EoXZ>+yfZ&V}^#?L&N;T=hcUmBg#V|*NVLC)(qR` zN^D27m4lW2*fQlzWn{Q<;jNxXI+fU@RNoyguTJoe{yH&I-vd7^Klx$nIrAHOj^EI4 z=a6lit(@F6EAl!yPGLqbLUo+BUR1L91l#qzvau3{Ak66*h~hkqgN1xt${L7!5|~Pd zytT|bwVJew=pjOOa@jl@rJq|@mZ}`TD_Sn=jnTy^_idgMa=p?!x|+?8AZpiYcTfJ^ zjxA$k*GG!^`CiJ;Tf!h1=H~~q6(WDn^I>eFQtN+5|5#S-S2n*e zh^54uzgH*H+4_WN<8>wF z#c`v)&nk0CW^KNs(jj#z1(@%wdrDRF`<-6S)ctOzab#Y6sM>mQ(`HoTsnFK2dRAkA!%qMh|;9cMO$_5l-6?X*MdHVuZSsZTYdvXFJkDeh_Y#*UhAO)}ohs z^&bL8(z#QF#`;o~Ttk5J`0N5D^yLuO4^=7sShl|+Tz7)*PQonMv{6#ncKSy)iq0yFb}k{qk+J)+kRMb(khF-pA4rT@dL6Sw3tJqrV}Z1tB`DFX zva#CnoX?kw_xI(Nk_oy!qP8Ke$hGs(wSJzX?iKW5QOvUTm%Zf07{aS@@?vPU*Zc>! z7~1pIC%l7e0)tgcSGW5Y{mIGszb5DD^%^-0db}+;WS1U6)cG~+*2tZ0#e#>S=39~Y z@LrI3r`QHJhx+J)qAGkn92&osy=sR;t0&%uLqp|)qir^E1>3P@%8kI1ro#m46-%Qz z-rIZQ@*JgTZ^#($VX1I8^@CSPp4i({vs>?+o?M|E*o*U4-Mci{yeD!0ISof232g{l z$l4>!>+B+kn5U|3$v+f3v@FxWgCrV=VK3Oq2^v48EOe1poV8{R^{Zg0OuZ#@<>|0o1h-?Nit zYH#5!RF>A>OVNb-+B*{HZZf;{vdKI|rw@qe^np1c&DGvcYYxl> zm8}Hsf9d`Ga=6m`c1%d~fpl0q?;-f(fLBp$wiD0a{A+DO+6yiSaJ$XGUrHE8Ib+bUai=Dj5^I#UsC7VlZe zC5zi2h__W~>lCV94$#|R>r4a&i9z5fAsuWkE3|Dc8!H9POt9Kk4W1N615pkf?BZ$% zG{IJ-j?<^aZh^8wMQItKqg)@a-kG8;@GaU@s%@&nMH^-Op>DFRT**Cz4NAFEsy?dK z#}V~$L4Ab2mq;L?@Ac`HvfiQHKi2wD^4}ZxknJS6Fwh}=f(ToR8hF4c%i?XvbE7)-hI#TFhN~5EAwuYimss4DF z(pVShvK^;*3Jt+3*^ZG?#?lSKktw!pn`j8SK08LP5=;+m+6W!C5RaY)`KnrU{sdp` zQPudX{@HPV_@9QM9wYI>=OMo(Rq6Jpp>HaO7qUsq&XNRDBj^vh2^gx1_OgqHMsTi| zC8v&6Er(V5sY2&B;DgldUD4Z0)(10OMO#xXl9ZYuN$bZl^ZL0=qx&b?mf^PDPnedX zZctmH@ZBP)E4&QkL0lW-D4Go(;JIv~fR%nam^zjjPUnlr567ZFlo{QE9J5Xa+N!bg zv1mjqOTD*Obl6X!Zu1;Vb*YR3S*6RNDrJsS(vd6y$9rw z<}s`!a#G?;m7ag>8{<4pX}rl1K;>!-Q(X7Z<)d85`Qwt9pU!FMvF})XibTmFeZN5H z7E*Z9y+0~7e~Rp46S`lsl+{Z1bt^8UMky8NBb1^)g(v5hxKb^;N; z!AVnayg}G@5DzqLJAf@o38+tuu^j>1Xxfc0ZX7Xy9#OLE$94ZX!X0ho=pv@T%yOglM{N%$BD=VXu&@7A)E%3l_}*P&yq(tlye`) zxoql0K!xIbzTRj7k$0}T^B!7{%(y*Il}IkDhwFqv7v<@yliI@w`QgOsv)lr&yh>U7 z*KYEQpDI;bTX zflW;Sn!2-L%9P`?5+B;$io>`*N`ugqXp7Y$=cl8r15JO*6ym=_DiltEt_fA%x1^{% ze()(RpReT+ZkM_`P2(~g@`L?FowH>P(unSy*x+iZ#%fi?Pd%P)wM(79%UiFCXKraQ z`@29bJz8eq^bRka`nF>Zx-u@SdKws65)95tb;*_y4z~#f8@lvT9{ryIqilIpOs+g$ zgcQxSNVeLg?gFXkodQ-RDMvZ}KQUcejzF1MAe_)yfA75EZ_)C#i;CrM;a%n}_EnrZ zii*f45{H!`YEz&|h3G?{0`vA+Wn|m9OL=X}T zIYL`_yD=d(P9@A)gc(_vc4;YIYAzSLeYLpBA z_&D;$4y^@j{{3gsLUlc)g%_3M4QR2?&|;r3RyDnY6zl27yWcUkS2^&>^C7cO zd$W1}eBL#CxX4O3OMEouZV?D9H`l=YWP8nzoJ$r3KElmPlpipZ7i#5*QyH(ylQoT98a(=+bo0Ut+mJL@aG4E1O)>~7ga+YzPaOic8uZiYEK=JseH z5UH|G0BJfiBJ!Cb29Oe>!0NnN?~w03q-1;=9&POG-puwokxQp4n?FVDQQ%8_`T+wz z+JO_k28TTB3Q?D8@xHTJuUI~dB>R*0*{GP?s31-L-`xCJ7Z!N)vO}IZUD^Hl&_EAd z*qMl;Q4)@5&P64xQAdk_)a))ToF^zTbWTsKLR#1J+D#yQs>rkf@g~cl73lGOEJZ#{Z+t9!6^ptF>VqpQoU)gtI1Z_nwUx*GQr+D%e z#e5N$smqm&i-UN-(X1OhkF^sO%Q@U+x-?9A;o_5BYz4mSN0XK*8Q(pW~>tM!z|fuR^(TmtjD zJgOL+Az;HIXy6r3FnT+9@C3V9zP>tpDD7BCHn9cp(5C=W8c9yOEOSUfR99b>(N``5UFY#b-oSK=%=Wh4r!>%3kh~J%F6GU?8YL;M>ujM&rPVUFs*Zkwu<0@jykXL zLA!ooC*N4xGT6;zQ_9rsPMA{u(}3P;ElRNh8ge8(6f0KNoi@B6fRX@-b?*GqLJg3 zyc^Ixm4HfB+&98ysan~5BXP`#Pl;R%-jumj1d~YMc58Fq?2tz;AOXYk6!l}Tla3K` zsz+J!hMP8dB;LNiIcA(BHZT|u8jU!rHA>Zi1(9x+f<}F{4iTbYVJRN) zim2l7Or_Bi-o+@X!&ht!U@={cvUPRp#xpF@zi8LSMa<@3l)7xNs~HvF({!WYM?2xu5^BTs+1+qoR@8Zo2YLtmt!34lc+7V-u z(n#1avlL6#cAu=$XA|wvO4?br#Pk_QTiZpIv+M}9Z-2>r{Si%~_nRZKZNJ-fYv2?5 zjAOT%q9H$a8{`7sfPD6?VZRX}S6aIn2IOaM(?CQWe8`h;s9a56pja;9%4q{%WMcFE zX7kDle#XScP+e32TgtBU@&Fb&%P1C?Zy1M2i+Qr=^2O38`iKSJJ`XP+6+GM~0)oX_ zo2PgSaL+N~zS7@-J41t8`5$m!(Q#w$X}?U71`0}ot}7kdp}(i0j})zsjkoXP(pkL^ za9*c>qo9ABk^al62HZOR189lcFSVuTlFLO}bk_6Qm&ZSq_i&dnX!&`3E;t1R?K zKICd`Zbufvy2$z#qrf32o#sVBSizaGWn-n#z6p|p0_t>-pZZ8(@KgL+@c z-5G#(w>7l-5K99O3T7kZvtURt>&HIj&R`ZUpC8XlkeztZFq9flW}fW1AeN?P&8h@T z-12U<62n`Lv6eRvA>NIl>?}F)h zcvua1#f-!TxV}s<&{Pf>*#l?c-?jfhO&z*S;h{zUY?JrU6fhi^v&?#=h) zTRO2+m#Iiowig_7LLo%pG7$pvYB1>unf}480M+esl8KL}TN`BJr@)GaswOufm;R^jubcs;xHg{o2j0F2$3MfP2NC4rjJvmo&NP? zt`iK}$3$D@qI8Q{PAN21sZsd^rniTtai-4I2y&Ws@Z+H@GG@?zt)9WZh!FicO}jC; zt*S+i-_Jukv*-}h5fxwjQ{37G5^g%lE4o4x4$`%UvHcme@2|B_g$8I4%#pg`#VDCR zx1-b8tl{izps~O}quR&NxWjE}41gsZv`g({&|zO6&v)jbU07sDK&*;;&{~aNb-WYe z(%Zo`47dhrxYB{^q)M+90bPcxF*>~g*&5Dn{x}DI*bYvoLyptDnz#>rIBhe5GuD8! zRK*#$#SiD0fm7STSq_}TRXXD+5T(&+$H|+tyDi^h^%$#RZUS~XPmGm{{R93q!u`=aX2e;D78#s=Nf?v~OT0cbeIl$bicz zzoA<+)a(0?P=3J7qHR9QL!QuN&%fyC#@wC-R_p)0M=^iXi}&lsy2kk0PWGG|Py88O zhpXmTFDY;^;F53T+1*&o(14a(;hgOGT*#8oLJio(tI@{g!>#svZl%V5x*Cv6Px?>Z+wY`payk4AvkWib$tduswd z`{=(TAZDw9fFNi)amc~zy0egITS3`aZU0kslXl?PxO9Nf#T-Jvp*&+Q8^GrdXFbU7 zTY4}=TN-#;4>rxu9sBemKh}dqMYK1klRcm9p<0Ai8hA?&HY>(1Q8&q!4m*fvYP8%g z`Q*=Xif3oRz}h9A(SyY+)#pQbV;K8mmk#wb@!(aIL+-bc@9PO4zr!`HECOXS`L&*{ zwgUg0$&IGB1Z%k_{fgR)X9cA&$+ckHcaQ%-mOS)IHZ#PtKPTZ_UVbduJeNolxhB&ADWqmMnkukgG+?7dkX zMFhzq_Z~=#M|1eJeV!Wqhwy^*-gNLCOJr*>suh+xX8UkPoK;sz$3?s-3VwIQ9$rPy zr?&F?D0rz)t>l-*b0#iSmlr-X7VY0*?f7^a9-0F?Kk%2O?P2K zd#x`EkJ}>)MiRhQEG_1qfG!lzZA_AlQg)Flz@kdAb2eK3?( zJ+_fTZ4PPs*4A|n>F{-48OBqujUKC!nkERN5-=G=q zfBqUTQJwF}7vt3l#4$N;FF)kBd`>LpVHP&DOUGkA28aE~vn?#zA8rdTwXktmVXG2k zx+UO!0e`aRWI84-PhVl})CcSGVd>ApCk2UnW9@6i#lNl zf9TyFdvHCbC*RwjO^*ztP^zq+Ifh-()9#S4%RDNE4Gj-UBGOgOiU^{ZqPlK$ZtQmoL<(%o*3p zZv5qJJ2-n2&Pl%J>sq0kuA?g*#9kif6{1kxwoUeYEOzx^E6tE!Bu5h{BkUEPAJ4|g zm8bd6cs9#sG}U@sFjzmR1Uo|$v?+@xyNX*^<=mRUdYa@;Kl0-v*Z{@Tr#~-GVBNdJ zOQEmAs>T$P9U9DQ64)pl5%9|i?BT%RVu##mJkLvH&&K@1=M{McCAd;+3qu@|&O-+? zTle5PnkdM-*AwE|gRyI<4dw-dSznVJe3-r*+LLb`%u)k`uQ}x45BZtFEHNAP&_#YAi4DqJW~k1fMPzk`VBkT!R8oR)ZA8Wj2%czw)6o!IS*>LV8^Z!K7ftqj z(6=^!DEl~I1ZCdywg7?0Xfi~cIoSWuMV|t|uj1BWaFl&l#n7%mv=ispw`}(Scca~X z%e;;{+TjD!blJk>r2&K2{JM}jhs=a8NU;HdU&Ib>iGQV_OJ3HSXAeV=`<8I9sGwtL z(NUdKK04$wz05EPphG&vj}2qvhT6`khZL4H-+0x-AHQfh^IXMYO*&5-4#&`ThEA%K znsZ^idN>Pog&cP<&vhT4Z4H_k)UTxoURs?rHwRzR=>d&N)J7{mL@L>k|CHcdb!6SN zE5D-syC?kN-o0AN&ktwg`VJ&`S{B%t$fV!2gCyb~*%$e}?N$pCe`ww;92}wgYJCX254;@lRK^?;F?O8ewf_TLOPRY(QvW z@lV?|e76bAzjfH$nnLa#&BCKQfu%o9*AT>)jTLXXn^##(_)tiP-Q2yFg(*eH`@!_} zjGF9eq4%TcdJgd-g4T+I{g{gKp8WVo784k1L4FVU%ftEBV%C)cLs7H>{F^lIo$R@> zm{6fZS{+gJ<;2Wwo<_rYlr+F7I z$BOR0V1c0=E4q1=fKObIs+ao|MQE;rH9w%QUQ+qc0CZU)mRm-%?hiLJ;+If~YIwMr z77vtzz^UI^zB%7_- z8SMKYIvwX@SL`K?1b@S|z0=NR>-fa=QH zl2%!y6m%dP5%`eX19F0;KltkG0X!-l+NoU}0X{gbUc|WD;=lk-Vvgz9&WyoN(c6`2 zw-~&%C8%HKpuB#=L1=GRaJxv|8dA&u3Mp{r2U{ea7+lT3broUI;K+ySj&_iPT{}eX zAbgw93l4T&T+j!gwkho_76JB91c*=?!Y<=LEWTZ?ZA{66S^)159jT`PG))H$_0%!- zp`TJT^OIxPwC=WZIl(4+15ku`z>#yjD1(L1vYpEhmWH~LL2(LGqQ(D3*%0!iQ7<*8DFf-s2H=7_C-Ktd+@y#Lb9LK_4 z1ShwJb9OuEVBe7B=8Aq)Jraa||Lp5m!|Ch>N&Kc2jdsAw2C4PJUIXk}OqK|Er}CqB zvdjtH%|7OQeOjBz6zZr9#z$p{U5IS5rF(`>fV-1DOn09g?Cb4Xgf&cPTV9hzGk$^B zW#Jg5yEENFr;NzECt?G4Ewi31FKUH1mG2mI#q2#fSIu}d%U zDR;3%+ve?hdtw(|vW6=it46Y(INZ9frWB0-7eHIrE4 zm@tgyLZMnA4+B!K9f6$@7icDXn!GzppZgJJMZ07kF_}dNhGiq&nWrJ`3M+N6FE6V2 z*gnE%l|~k%TCj?Qu2gTCqU-?5^iSoBRjt8kTE%Cha0ikW6yZ6b;SlyqgAdTkgl)2# z#4?$}!pCgvOVdD8IN9@4H{BmIAW<8r#C6b+2sMDEh6My1iIrmDDvloywSz;0A6dYQ z01x9M7>I%5G`?k3f~mxpw+FS#2k3bNO}H-bMWIeN{KXDp;MF4w#ItVX0oqZjudLi- zjMJ#9yQ4E~vx9wskkC{_QNy4Y&x=x*y z5%q?75=srEMWkD@^?6Fcf0QD2R>TsJ*HtBNM7>5{gpa%#E84oOMBVv;s%)s=qAWG> zSy?QaXHP?n+}6nVO=E9F+8V`$z$(uX7$-BGoYINyWY6id+KC=D zpIuuqojuFsuxs3M4+{_Z{B4XCtGQ&-*9y&D~WvCmd)fKq=sFm9cmBCtNDQ^OS@@E&7nvbk5-)gf@ z0RVh}09h4!dpzY;du^w8@tF7WFZ)bvP^eD8h!t!XlA*z;BwKtd6>hLY#jUSwdydxE z0=+XKgj(b5R-KI(lJDP{aB?*G*jAlI5%Ofqo!9V$j_kREN6loBai4C%F(g>_p&)5cC2S29s}QbFN=x$r%*985I89jU@!wBO$XZ})DFTUc+FE>V>TY5rI$?#w1f$sLwLBYFeZ#{Kpsd6{I@$0MFP#lL6b_Ad`Y^8soE(0HADGR? z*cybs!hR{xcbzx5IM8uI7bbYgv|6zK zd(rvS85)oKMcFBCYq17;5gND}j`HgJ*z-nSXWh?YqW@8dwwedfme+hWV8Z|I?F%S`N8|y4C22z4_AYF(F&HWb-kQCB@dns%JWb@!dITsI1T&8j>fnjc^~j# zdXa+jn=f9Ihw#VWg|Hask)O%KfhFW7=mGW+^-=Ty4mx{P>T{1cYJ`KGqH8e}p}~K1 za49^x%{tPiv{xNKu_<`~CkU-!w2gRwjzd=_JWH8*~Zmy)rRZqm>11s(c@H2ua!B{E%0dDGQt5y z1PJTUP8~l!kHy7lctD^#*nUeqJZe6RjJ6ZLpj+b0nU6qU1oqU&Kf=cX2Jjc>v$0)# zbi&tj@XPbD-M};KL4>yO%zqFLY{W24?y$T4E3Pa+4=K~4JMmKwvQ)7!^3{bfOnc_$ zvuEWyf8rPNS#)HCLu(9y{fIv3D=dfAoz;a~7Epb@Rv(3Wdi6leD(b^|uBdlw^%m6A zo1wxgS>1PD;}xR5N~@1W{czNilEC*gv%2$oQGZaYk9V+RH&CCX)kkc4h(*Ul2t5O( zjj7_VR*!ghe(GzXhDF_vXb!`4p$#yvs`~c99Ml;7Hwb* zBU)0&8onUF{z6}0p|>_^=N9T zi0sc#xp`_K>)$1!g%qH;U&sEE&aW-RC4)cH7FxW-s}j~b)}OFH@8#|SSmHmY^QrN3_OoL4@gO5j25dF~PR7;!&u5sqh73FpUOfR#bnxkc<9**=U{FJ>De?ZZm( zqAB@L;B*8AEL2N%FzTl)p&1;;inQpawySCoP z1iYh&JrUTu$-(}xiXSUtchY%CjNddlBQf8S*%<(g)nwD^&Q`d1bTNx?VKuSC+73@T zLX1suo5^J{VV}eAeIxgFBzGU|jX)7+zF=jveiMWYw{%I;j_T&>t0 z(w!o@uOgY)StCsNR=lPkv(%cGL8}KwPI0jJ=kc25Y{Hnxe2@Xd7BHNkecSo>=yM}9 zwU~y;Qf*yhLA|GXV9v;Dq;V^~9~&7AXDxCEvRm|%)Np+a6z z%qC5XJO~RZJJ>;S5(D{~rTzHCb)1e?71gFXf>V`dzHHK#{o`8YO z-Na<&_`y^>jB}A_oIpekq#})2CQ#3+u3->B|Tm7t>6DtCjp%DG1wllsA>)I@P}Z#Ce2Q=oWfc zEY2{3vr2ucgnY7n>v{Yt78BylFTlI8QQE7aMKl;6!|b#NFy`HA-n+TWrM$K`$rV12 z{vR8#ePSI@oq!P&U@tYmmnQpf?(*oU*Vvh8XxK?Q4UL`toxQnTEK2{*h(S7W^uI?3 z7zkNps4F1GU{lqNmp{SA&9LW#apJ0p4v)Qy(4G$V#yTp)a?)Puw-S8y_i?H>788_ zMs-Gujm{|E=6oB1gji$^Mf$)$k4Keudx=3c+&;(v~u-JgWsBOP>Z&ul8Bu>+`i6?euxs(B~qp&qbn7+iM$d(Pv5P zKCR9u7`)dGL1_OGOw1+~y+JCudcME@It9WxpUpX|6`{!0`cy zD4`xuR}(N<$F-wAx9{L8F3FBhwWcI~a`DjQ^1SD`wVl1)$1V(=^CNl&rF5xeI> zj)sZhJEN*am+HK`MOtfa6kG?}J%pD(#U?CKhlI^}w%!gq9Wf-73E50`MxE2^AWJGv zb)mHi1iZS1WCG^HEZ{M0Y$#NEHF%!!G_wuu8>`E@xC+T$9Zs@=gV#T5iiO(4hW3Sf z_UbZT{WJ?7)i)n$5$pimxK?nmhp*CmH@ZF5+wVYmf8K=lF?|u7c(sGtPlxwfwQq2+ z-(RGg4}ye&GeuZu#7b%NsnYik#LWet8XIq|r$_*Bor;MgxZhFy0s_;RS2i zxbWy4)RRQ$#N{DBo!6~};kFlPt1Sa7+@jjoSBCJGwd_6Fp34vZ8rOtd5!U=`3Pa@a zimhx$pgj*9jN-?C$09auV}bnn->@|5xZyW!Okgyo=%wpCs+<}us&$mJNbJ;edHywH%3hB24;d4*q2RBgfMf}1Bm5&h$o5N>Rum~b^Q3bSVbQM3KU>m$0w>_>7vtA|9yg@uS?O+r6x(%#v_vm_m3bx&7uXpTRN_d4r9iI~&%UeI? zXB6E0?H9#MD{*soE5-aE?)~60Ze7fGRI=B?`%!#r7>$mCiE4bSYC132$fmVh_reu^ zY$IFlvR7-iP1vwhuV-i9Oaf!bSGLOUR`XuRrGoOB<5J=8OT5rtptwrFyHs(mYUNDq zY}Far77*j@tj5q;jelp)pKix-DL25E8~ZXN2EN8nS-_`oHfe^vQd{s5qE6Mvm9(53 zY>U|Om-##vx}jk3Se{p}7Ghv}Tl7(>c`TLiST@P_s&-UG6+gI{M6ilq-t2Q?R5en? zBet-iqwH0;h>qi3ugM0{y(3qGN=5^A^N~?d8G;^4C=5JmYy5K7muv-RSeI zHkfU7&f03MnpQqfIj?%2#f`CxY13pv+>y~j1iCd|-O9Z|5M7E_U71bGHoZWe%xWJ0 z0vi`cBY#eF!!)C-S_^fQ>I7BsiWf+82+`EK-Ki=oeHO#sKzu}4Ogh=afx?3bmf`d9~hb}C==I}#xO z(WqK!Cs(!7&bM~3gdmeF?Wj%K&AN1uf8Jc1wwHa<>NU zKUeZ8|H4Ivf%ACfzu42V6&J<+&F06%e(Gk}@CTV*PU$b1r@1AI+4M%1SsIdKX6IL% z*%v9b)&FL*m@6^Xb2IUX|1aU1nol@~XQfsb<`2`lP2w=r=irz1AK?7^a<%Ea4PyTW z|Igrev?k8gs$gHM{Qsu&{M+CtZdKR2bq4_&!0OuaFW9&akq=jTZa%W8)o%y#2l<6d z>}A)|AkWRECp|Zpw5U%?|2My)u>TJ3wz$GP&YMdi^h=ZQOTjM-zij;S@GHQt7(X|D z<@jyJ4}>qR!S5h`^`4tWVRz13GN{%cAyUqQ#YGF2&nsTBe8DKo!2Cbd z)Xu)bE}C2~R(Ni{nA_^tx~z5nKf$-IzjZ!P?Y#C+SJ}qE!an!glNXO)zI^HOQI^aH zm#rv#w6M5v=@LtRVZLR_Qp=;o^OhG|mM*sxFJHQ1{-On9c!f(A;<>Q!(c%TmL;Bor zT@2?Mcx;Ok6BCU%MB@edDhOZP%m#Hfc6Tq|*32T}H4FlQvGqfRO9~$?Sdb5-0;Kk% zX7*Q8ZTt<^5Q1+!$no46By)aOusnQIkepHrcWhs0UfoNM?H!^{#o~EImcX zw`q;Xv#CP+RpY7WDNW_b^BmuAQzPynzgp+<{5}9bRQ~>$`g}FRkf%EQL>cN|EjRo& zdp!GA;}@&`_P2OE`$4Gqp;K?3(o~N6H%ooL{l(1H$21yKR)b$p&y7o=c-DJ7Yn^zW z@pzsKz>`LecqB{mc$9cNL0n}Ro-`6Oo*=yH2%c3Q&(>HxYdoH9`FI}jcwPh^1}?qQ zgo6ml<9QwRvcu!4$-pzub^(uSLo+iC=*r3CP4Bh>$?sno@kuv>IvpBM$w}QLOcnSe_zFyG zBc2!Vqd(9g?Z7|}@EwRjOm_nnx)gr|e%a%B!Gfm~Kl(!%!+2g;glC2*QOm->i_OTl zXl2BYc<{x|5PrfVRBub+Ut#*4nd(Ifja*?j{cwWPOzkc%lEQd!~_|}ZBm_DL^R2ZPzLPMK|`6_<9V+Xd9YIa5gdf!eJ6TpGkKYV}U$9(+o-eQ0GYuTE_&&0@u z@+$}VT?6E3d1owND4xgoGxXe*!(S24I{qhmzV75-(({cf-Z2)>H`nk%^xRj(@1kdI z5no8pL$UlB@m$Scq33%?_@C(cejWdkp7m3B$ANhMbu}ME&*RnnE_$9g$QRP{A8YtC z^lVJxuZZVn{wI2#&E;Rx^Iu`SBR0qKzeD*TdY-$?@1o~L4A}`r?Ih)Py|&*_dB4o>A0kf;R7?45L*#{lJCB*!uAJIF zL#e5n;kIP?>A+p^ZFkkxzLzXVnY0XV940Rd*;Qv|uVWQ=n#-e8)8SuDBMo{U)lzh!h$$6CgeH8&zi)1z>H;H5vC10TA z?$rc4U6khW`$x)e2fmIu#{5L4$om6d$6O0DsW#h)$qs1%HIyy2fX`s zK=FM?BPwFJ@FBg9v%1AnS5$z2eMk6n8FH@y`!T5f(3=XUcbm)PjaXQ2Ak()Cmbr@=l0a#bd@{Lf&=|55Q;rI(Ex~}@eBGV$3xS6q zcZXKy`NtJJhcT%a~+aKd8Dfo6ci~t1R>dGl8_*O?4R6+irgNfMmljXf3 z_29{0S4&dA^9C}$ngTNFq0augy7uQOavv604-u^2TpKk_cC)}^JIw5(H2&MW<@W;r z3O+%xJd`b;(9*T()8%v)c)Z%oplRGQP@$%4@4ZJJ&q7W>;{LHlk_Mjk_1LZJVwLmr z&4OT^80}&(e26IeD1ySoRE|IkcPoGJwQ^}i+^^nd@|%8 zAhIzDp^ZCynE4a4F&4F^_PN<|Z+71&!!VtyC^qCHsj{>ojYXE_r~;)pYh8 z`C{PNTr-2N9Xl7C($e8h`C`bw!p!X7p>Wf>&~SdsU!5nf4^#_l$IX``S;)Ub&FtJ| zNlISfg?NTPmoJ9|sx`GQ=F7n>@Z4nt3f#4?Eg&tcX84B%P|)Yyh#sU#((v~<6ttyV z2WZkB*I6Oc0}Fg%p?qiH`C|YJuQ$lUO!DjbwRIciuNav%^A>qj?H62*XE1KH$jxB#zG9C0 zl-jE2r<-8pYG=MEcVqIQ)wKoH@@xh(SNp+s`A!BqR~z&@xkrFppIzJc z6*=4lOIJJm_i{0VsjGeURXLx@C+cdu?U8e27`xhqugiS{VC`z3ev=S3Zm!+3PtIeo zceOw4m!~rryxK{%)au`%wKWIiNhUIRE$_-V<@2j~%RzY@nedE5vW-l5@gaE>hRbUX z!Ck;;FVGY4miJH&_`LU!M`)(PbAwb_If^J0<*hN{%UJ=oj@! z*W*4rIo0}~-ex@tsErKY#VO&(*Pu;c|1e4JAI57aZAGnB+BDPDi+_`2>J(@VLOuw2 zRGE=9^LUX)6KfdH7U?9UlW^r1Fv$UuoE*TbDQ&~m6PuOSi*y#!S-84OIok);t$kb%hNzVrsYq089o>u=a4VwXYM!6afM-GqyV%7gV|$dIqZTV??xV)%3J?y zv&lyMA$ahEy<#?vEI>XRdC8!VUeOdqpx zwiMLTD8OA)3`Rj&`om~U_Ez}`$cxzmJZ8&uw^`a7&s*l0a9K18ZO8#YZ>A^pS+oeM zP0yOyq#V>2fi>WU={41uvZ(H|$iHQl>T7u3TvN2`=^fx%mIikjqo>glUd*=XN3-j-bImhVMo5q73t#T#HDj}!HmwR}A2Do4H=_`uD8R5N?70r_IB{baMu z=JTKDn)-DgQv4`0vfqVd8p? zn(xrrEM3^i5278ri~rMU>gP&7g6b(+HJs2dXc_{vJpAaUYsg!*{0nAjAB0KH(DJXD zrK<-F_4Q`<>ov$<*6Keuo9rM@pN}obi|0v<5^T6*fFmG(NR$)a$ zi?3neNbsK;YV#U64*AW7{M}}@40)#UFEAJFV-58Wo27*yOeZ|B1pn1*DC*7NKcqMC zDYHwu;6?#CXAq3Q&1Pu<0OV3F|B9K7Bt|!C`J-m(JDTu3E&nMxq><|cUI*iea~i&m zvROLTguGjY@7UAK?rQ{oa`4b!$H6X)=!_3RM{I0YBXLLkp*{XO?lMaoDFdei@Zi)P#9IxpGEu|G(bFjd78p~$Z8x4nq-#Fl_MXk;&TN#&1}RJ z6qKt4L1kw4%0c7{)HM_IED$sp5NttO`~e<+LGUmeY1DNZd>uGO9q1hrcg3Fue--ud zC{XKNQg9#&{!dru9$a;C#qr(TAR*6__xo{^(2AmB5?*6!g9J#0si~qun@XUdK_WyA z8fnUn1!_iPVQgAZQKMof)1f0;Mo>{xMZqaZ)M(MBnmSUWqD6&D+i3gQyXOb7`v>`b zf9LGk^V+kIdlNRDdSS+mr-apkJA9Iis}%DVE*#V56&zP1_G%_)Oq1fv#8x~00maM2 zJjwtuMlm6p-2#20;$Mk5;c_C{KVr-{V)W&4Ug-20*T;111v>#Gyp1qZa4o^>r6LZkbifYAK z?(l;=t@jB<(4s93|I-p!ekJznBW?ELM*utP#`K1J)c$xP#|ti_n3VaG%&2{Ir3_Pg1FfX;7&W$bnYp z;#wVGfTV2ztIHGK!+`fs<3tM2kuI=Kv&4KcrNelz+4oQUHZ<2FniPq(ViOi1uU{Fi zVt_^%bb!Pg`4qgGy5P=Hl+Hv-Y30&U^bKNe8DW5J+W#&TBF2G76CV`w(ja(?(jRq~ zC~o{=pA?C^#ICA>VZAcEF6Q`7aEsy(5$I+`pwI|w?{)^9=;=wxV(-QPTd#Nmvt|eU z0j?H%5eC>2rC$lnjUP;lq$UZ?AZ9WB-ohj3%VF8T4;Z`s3chz`&%Z#9m4Wj85C6emvOZ#t#I%{>|M&(qAN0TSA3vQH74c8*L0g zOFF^56(I;s^Bzq4TFjwX6h7b;NKO#Dn(1qF7A5D3J-dN=(yR3I#r(;QZ#8Dg7l=9B z&x=jUP|I_)`2mx!z+wgrVwy~rC+^1L7UggD*IZ+EdWDi#6H@5G>Y3b0C!^P=!kp4M7U?ykh?-JQv(P3O6t>fpD@tWcW)H;yD z1>AQE!0Pgp=Xs7cZ*a1z&fv`n4Rrj z`seumGJ{g?6jm3@RsQC|bo-FV3UZ=~Q9)otPJ~(Do_+V`4t&LEdh~FOcoV0;4}RIskvg7pg_zq#bL4Q7|?3zPCZxLS2ImWJ(fC0Y-A7p zhok%vliG*^TX~@_Pi+@lKX254>YF{ljpi@nJuRjgu`<4t%Z zRxL>5aQV!7=ryXq+hV6L1qb~{@MwByxrv~62KVW(twY>@cI;Ai47mB7?=|90j_)p3EshHgu6mwGfyTo+1 zK|ku&e>NcL4=^p93#*iY6V9xDI%v$(pA_@F^N^O-^nEDYGHQTV#dedlL6W8aP3+pk z(BD^iM>z*<1J6_ZU+M@+X*wdrfaNq}te6?Q5unp1BVEk${kU|e?~uVfzpe^}T#le{ z2G@HF%MqZnB;#T>txllxpp!?Ts_a!v2r^L4H~P~ueu0PP^AK?z$l{F6Vkb}H#alEsFkV(X|5t2vrsF||CJ z16f#fejM1O#<)#r)~}f*E~YvQvK|z>Y(IEd`Trm$*BQ{H_&MZ98hGI}aswXV#cstp z;CFbAHagId>`b{R^@*N z14nqFA;^A1B6dO_3Iq(F^6^PM$L1=v;7hUXxHO1qPK?+Z6b?42IYkI;IV~`!Tx{A7 zu+H-wHl06kc+e}5GtYn0YC66AoQ0hKE2oVTutLn6)nK(a=Vk`z97T_a&7X)unuIw_ z+qr|#`*nb)2$365lP+f;iy0vZZiaG>aKF%vN3;^=ME=1S6btAuO$D6bIoiOq+_7RG zisPZx({szjE^-QL$a1GTF4vU5&ZATKhZyMib-mBML2UW}Sd%c4`%AI4Lulv(P}y>K zh&itw2DLEvSvI9x!Bt9sQS5yJf1uDHv}jWWD79ZW5A=HeypY(%jqq#EgT3ajS6HBIM#V&zQ_5TZeJ(>cPq|g zPk0inNtf@gT>8PPVE%<*VtxwG<4>;jpwRpDkKpqB#bR$Ag5jtNd5$*dwER!R{L|5ybj;AplM3xf;Qf={rp3#=|K_=^3*9`FI* zzmOeHzYBp+GE>NgZ!Oa>WBQhe%O4@@hXi~#qb0*fvc^F;e;1&fwQXx=8r;IbV4YuvMI+JB8l_+MXOQQl4z zPz#G#pHDaoNfK8Vigt*d<8X)KS5P1p94PPsYsE3JhLGRKHlI0uHJ~_`=V(= zu%r}Pw1H_Qm7Jt{c<533g@R1ydn0UUifv|l^hqlc?%xvQ~s|QkQ@od3#W*QtZo8#dxmfx3@&D> zP{BPtj ztpkHf*)dhdjlvTmVjejY3)DrWQ^i~Wj!_qv&ZNVRQ5}|0CnkcocneCoa_QKH0s%iC z<;-jVYtognL%I$FZHw}6A?a%Aud}Q)!s@gk0|vFQlr7VT!{C$J!L3%#g&LC5Lt=kC z2)$A1A47{aFs+mrSM>0p{ADR(mu`iBqUSFw6;nh=L)$%$lyRD!GeC!F$}m^#BZ+hn z#aQ?r3YwFC8kVi$?^l&0-|aX#>6CRqi#GUaWt+rY+(Lh~xa=WzL`@LNRUU^~_k|+k zr**`Xy)35S=xK|}UZb=+mj@j_;yK!MfDu;5SYD__kY+9Bp7)`ET6slt3R*`n_WB zK!Mxe^H&eV}jG(e}_9n?0qX(%f|2@|EXKo>Ec8)8aPwG$SC^d&d;bUbbY>%vCG-nt$`6D;FXU-QkE&)yk2WW%FH Uj{0K1ioIxg>#nYip&4oa1A3Qf=l}o! delta 47634 zcmb?^4_H)X_WynFAOa$eihzhXG9&*)9gGYN6wN=QsG+H0i#8f6m>QbyQeSMKsI)H? zdezqo4O=YRtgtj})1p>)b;A~SZC7`(XtTn?!d44gY<{2f-g{^64CwCjeSSR8^}c`3 zd*1V&bKY~#`{#~LpNF0NU079|JZI8o+mdmX8cD_@Nj)Tne2^l=eEUV9(0c^fW{=7!X511v#H@~?rAU?nq*Ca{7;e^?2if@*r z!Tr^=tr~p|(9*T&NKfyRB$J*#AV~pw`Y>qJ(?=yKP)|34Ha&e>l7jR!`U)N(xkSgd z^ODp{uV|B`P(6KFl6vduPDu*W(!&BIsgIrx1?hSk1L>=$V2;DcL{FDWl0{Ef zNYYSByTJBgm68;vS8SCetDdfwq+xoxR+8fN^gc;S(9;JbDN#=!mZT&-eN>W?^>m{o z4cF7BB`HNuH%ro-5qjplB#qS5ZIU!fPhXZKyPocpq*N^(A0SDi^>nBt-K3|(6-%$^ z*vOr(umlWhM4czRISPuvL+kPdl*XY2{t5CEwP$BnODVUyuv-T8T~!xVK)vGtC3MeRw4 zQr8WUqSBp`gyNm0&Os$rL!_9RAyVR8DPUZw$yDMnMINDYz(uD6whU-X15739HIf-^ zf~ijHBF50ggmlU62Cg6sIFH(-mq|Tpz6WKR4e0~}AlSMtq zDjO7xPJ{r%7f_+=cmFCO!2xlwve7(JPRdsfnWxjs9zKR%nSJAD^}hmwLeXicDpa;Z zMSeciVd|gcLGHobKg$<)|BD*D&0*?yRjKP65!n9(lIN7hzHzSemrH}?a3a5axFivz zUDC>eO)t(W3$TbX=lMMJb`lb4(ef*iKZ1OdmS2bbtH?KK`3mHBB44NFE0KQ^`5G<1 z75NPgn7S&hpc)0M08pmoF)jKpM7~(d??Zkj@=h&(2>C4JbG7_Yqh$AB?Vk-*419&*b0W+a zZv+uEAPy5V)#7%8R+Bcz%u36^L2uqU;MN{;$a*FBq?HdDzy>R)qvPec^Gav*XgMTU zu@9ObpV&yGrxzt2R<$ko5@E4B6ZeUCS>j=bDP*3qZ%}lEH3keJjW=ajpsea-j#09s zt#7&q-5wP9CB(?KDRXUi$*iwZXM0$d2J?0+v%Y!fu)9rxU)DL~Ya^7yiDLr4Y;wq* zmy`}lUPkhul9n_k@T+hnA5e;u7MtXMUsO&fm7C-TW1iBPl7)8QO4V8qZqa>oQr{unU_5t5!9exKC*s z6&vzZyOuqybc~9Ztx<}_{;WLWsB+joy5CnFAlvNa*5%DxQpZtccIsHyh@)8+vy_o^ zOS&q3F@e#KUY;JHl}l<5dikx1TKNIr@~i@_{E%OHhgL3Jga^MXX>zev(cs%)a+6lx z=v(d()@$={VTlZcPS^2}4j9UFS~NVNzU8wDsoVubWDpDuax=9CVqSPCO}fLWm6L`T z;OA}B%42-X?>w%RlLa!s=j()$rE(c6mc(cc(tH~fG-&1NzU9kxLWN>^2`wts;2pm3 z_u94c8QyXi$$piNXs)+{%2)5x8szzw7jMPiJf8JG62aO+SombCXt4?b~3Rj;O}Bd`F%JU+Y_5eLySU z>swxvtCjEbEqB#6YZXU*EB01v<;Q)?_eom$Y2WhKbUbH#%j>jq*{Gx#@EfH9PtI^T z+qc1+?OF%TzU6P(wel9<@EM zqpX)Tiu?#-!YEM|h_XOyjOJUy;d{c>F1|VE6XxxbNVACQVkIqO+;oA4W$%*C3p5B- z%X$hlRMteGcB!>AW4x(Tx9bFFuSwkJklTvjI!MlhZmV)QW2D?#t+Zu)5Yl>BK#>zM zPno8$TQ?X7;~ckaN$Y8ceBp}jP2o4f#c-+xKK~)A+%d)#@`Y2nD+LQ|qBpf(wwHa? z3f%jZ+|1}XR>2(v@rSc4B2?L@I`RuWKzfSaJq-cF>`-AKHU!TCr5NUgB1%&fPpnbw ztF6kXnK#8HHK*5@S`pBha@@@i5R-w@f(4M;Wf^>9TGkR7Ep}ufuG^w1p z^@|6waISZ_z2wr}0Z9+`FO9U$fS9={isTv+pZ@{w|@Ih5dj|n%^bjh4B zk;0?02?&kxDxIo)I$;noy>mhWTc|iE4pDBK7{i7lbqjkE|HdkBO^lJ_+Lh{wgOu-3 zHCPF~?G`prR4uv9B0qUmX}m2#dF3_>+mF;#RwVMbPO<%e8-1wzY?p0IPB2d=kE9SmOzAfA1ldmV=Pu_>(k)YHW zFV(!P6i&U1xN>yrV<8tb`-!Y&My68bnDhUk%jTuNUG7?sF2^bI^cd>aG9BGsrb#2h z$hzr^`o*;&XclIX7WQQ!&>l<9!vtKLvo_>wkHG|uPepufH!5=3dss5bXXhzLXN-*S zm@6ZDVw9knvDa1qGiR0TnURCViWWpz9Ma~+rA33p1gA;8IRRR*Zl=)ay)y+(DYI6D ze4R@~WF&#anpx5EUk@r(QzMi=&x$g#uW9MM%H6jI4G?Q_&j?lf3`_BVReApQyD`cw zxftX+4@Xo%Bq*Qe4mV{Kq# zj$iWiR;Yl@IKPQ=*arz08xZne&Ov6X)lf~D?m)7Q^Pa4|k^6#XVFv%QQz@M@lIDHG z!;#8;1wqP(bM7Pw+U~&M8ok`QBU(OnP^p;+Zr$O-EgE0J-1zBVUk0USBc-%sZVC zkk_o4r>x2wVHBXx1pe<0bmI{ve?fG_H;rP;1i~p#(6>y!X;dl~j5YSrwBVN^-;{W` zoqJbw?1yk>EYDYpz99YncoHBM4Ai2sv*@aF;I99K_XKH-9Rr4a{$?*V_HyaOXG+~K z#AHd!e=y{mRu5aMZplM*+z!Yuwp;p1Lukklr9ah%+ir{ph= zmX8ipN)|68&1_jbU)l9gA7$o}-XRxfc(_%tWa?1bzx8emR!gNsF(N8q;)DeyGjq#5 zW|pKl?n%z;!YvHtgJ-m1Mv;7lU69|u=BpAH^Rs-pj6IVN7JH|h5>}8BdvTqHAQWN% z;`cWbt)BU&PW>pj)Qtu4^1+*xx`Nm+VYoU?^N8Adxl(W_t4g`e3AS{l0QM&g%9}=H2UyakU(aMLa!LKhZcSt zq_GO_>F`-h6^oHoTWUtib-R^GMG5QyrR8>CF4fIc?04LxJYQo|zANe(@@=9{(Uui= zvP(+diqU=qguT;SAP<6YgTNMYEuXH4Vi%Q;6$$K^V!7A1gV&x>>T(7t9~MU`u6u`v ze4FX*AV+cE+h2a|<}RbIEK+u^?Csz2A=>8kDgZ^l?v+vOq!P6%HtzKSU^zCAq!hR# zhv=iss15s`6lC;VG78GyTX}ueAoSE4%xVAKckx<+IJ@yJ}sJXRQF`M}${e?wg= zr44mEmEtw=A>ZbTe#o)ata&ix+m(jw-Ab=tnFq{(B#KcA>+$VIPp$n|_YKH3)YKYk z@|BJEk7wtU{rq=-QZIBOFj4br!ia$38h4`=#{PyLWxn%0lOHhIs z7zTCOeLc(lc}b4S8lk`s#Ln5%*PuKlLK;4^rY56%#=LS?Wy~w5RK~n=LS@V=?<>s@ zERt(_`%h`|8@IcHls`R~Fs6&w0Eb^$K%MKx{dxw3Z8Tvb;7&#ckkHjsIy&;WkN z4AUG=%NB?Hn_$gm(lSrAjjC@|Bdh0MiIjJq*z!=ckDcDRTd}+qsr;feoUMn&z7NYT zUw5%(!xLk_>7X8s4nYkd_r6c%VnRu?u4-yxHjYt?$s^_GzVPq)xg(1(b)aphlwvPRD#MT-t}E3 z1}WlIa`S{;W%nL!#jVyGnL{GMI>4;11NP{ytb4KCR}h)}3@IqZT)M}zL(#giayu>v zmh~?WXGc8#X4Ip@L%#E_b*jo2-N3TMU2nBfn+l7C8J=@au~bBad{;%R6Y)gZRz}{{{ zkKx|Pf7b+!0@{2OFm`9V-68KP2bJnH*ES=m`{d1JB>iE)7y{*=S}v z1$FL01C*+b28QjRMw+pTQtCEFjI>hRgvoY2#_il7ny9i)RN6O1kF5HbY-ZQ)tBx43 zCt@U6SWh~qWNwqGUzmVt^$#cd~iHJW#nC(uLay$6!kfxmSYf>-*+nz zW%|Bq)sthc>;85;sGUiLUkn^wZ5A2S4RqaEa}EAyS%uY8=Ruh((xD zr4E^|r!>S)$HCpzHDtn(T8KFU*J=H=b&UHP@ zv4!?jONs4vNn+TA7&>96WcThsT*~gcSEH2~ueV6;?O7Ie7twHuD9y8>-c#&*ZGKfT zZ(SC0$>tf3=Ht$9jiW7Ub4{#VaYV7#_zJUPo07Y22!%=D#iiq(#>9)=w-1mj`uYpd zhZ%FJfrlB`V7{)RKRsEo@cGe~&VwJ}#=t_2x}N%2sp3;ce{U`yk2r%gH5;2bD{#h8 zfcsd(aCbt4gHNsU$Xe4@S|XRf+GSkjk1Ea`L)cQKY{%M=?;W0TsfTN~u+O>MD&yk2HiZo_JYbmFjO003YMK zI-T;wDz*6gjWllsjbvu!C)R@l`u?TAebJBWFu%XA2JCL7>XiuPH_w^nhmw@T&-se? zA*P&vE`gm@LaRrymzB)w;k5L`zq6IC)yeV(ta+t|l>A(7*ITsL7-|N;WKos>DN8pc)SOvGrY5WfVKuMN=MlQpu|s!d5Bm zQxmZ4zbWEh=??kPg(R6&%fIr4RLEaAU%yiszdL*c-FPz#xjFxZZYoX@#bh&a$!eq8 z%CPH(W6HpPZ3NgfrEPcY$dW8WYn*;o4E)cnVd5Uytkk|RapJ#PvY>i~El#Wz9w{>D zN*ht@Cj-^p>%QnlXMB(JR`Pz0`&n&D*{?^AzD%3wc5i&}@L+XtYI)Zg{4hM(uj4{| zI5tmNTswH=$;qqK7{4^PS1yq&^60cr!-m{(p5S?i%~PX zbUEMGjy$y3qg}h`l2?*`owf%8P3*WO3|6XNdMNsGp}x#?$Qup_hFq?shC&wV`XM>4cmkwF##|iBV|tXTqccp8swss^ z)o;Sah(IsVH_*Fp+kb4{{id7z;7q0X6&&KKxft3m54@$zci%6r9k6suqx_dVnp zMXhHPRZ|u#t6q&5dhGv7#jiFf*{=~5t+)oFZWF7&%MBii zoUh*t>+QRfp#;SfvtXoLG@#4!t?;6@d>f|Z?hgyO-0bPb{;Rpl;r$`wJjbM} z1<{UNwP4;(qP+g1Y29Ka;0>I#icKv9le8Yu9M=68m8Q&idHMP-BrTumOHzl2q?$GP zs>${9pz_)gO4XYY-S)E<<^cUHV_o`LdKUfMuDn+oG|;TwI~U<(s^tp3RVAk5)k6nv zW%K?^h8JVwOlSBI<*S2ccF{lXya%!LTf-U7E=q4#o_i}YMyZe;qr}m7yM{I_B zOnUcoX1VfC{hg%V;fF>g?S_8RdY*1z(*lxq(Gvw;#1h`yC5y4|eTeqGw;oy)az(^# z+GJfMI}r-|9;f^tgS?ePl}W#i3%Rl~%VIe8zBg5={Oyv_SE|Zy7~9=D&*KU_TYT?~ zLe%9Svo2btG);|_7tItd`@MG(pQWoqK`3dXyp$xG=qli$s*d$GtZUmqp1w} z&uC|YF18YnN^uslInkP;!dS*=Fya#i4~)9hwW}~S5gN=hUGTUPt>UoR(Ajz)AQe%% z_Va z#^yxz+6YAe-8M?HW~w9h9y4_dS7gQAv?H-&y6rbj?YAaE?-$()h10uLYLDR9Ek&t& zH&XfZNH0pZsU_xjMMawW%6m7N>MGP%-MbTKS=V9Q!yMAz5WA(*euWTFd7`yg=LHto zD?KrZl(7lruq!{TbjZtbfW0kC%U3w$WmlB!_afw>ZA#vII95neO5PhwuLJMB)$f0< zIHcUg_+DaydTpuT6wi%i3Cimq^>siAmpY`64?3h<$gK)r2qs;Jf?L$BT0z0m$r`qK z6x%5FPlxbNbJzfvU9uLFObHv(E0GSxBn`sWD>me|sfTiE^s`c1e3KobaUsAjI0lMT z>*xFdx3ddW53Rx%`@!SVTER9i{EwIb1?)zkarY{jkCDZ^`f-d)ks+zpyV?zVP zzDovYjF&;)-67#WFL)=SgbNv`mva% zj8^rkQjDq}*8!{9H$rl5d$ZbM_w5L+SJ zAcwr@eUh_7`qu+uu9E?h@^&irKSYOFv#BHPf_=7PK4noXADETqqcKX$?-NpUHO3t9 zB3p<{_M`UeMuQB3XGqe_0V-0}Rjax&NkbZ{YrB>$q)etdO=HAPdl7(=U+H`kq*#iCQhO-dRK^d!+s*Wx6l`Hv6FD`qOr z4}bDvun7#XQkc#uN^#?yem}N5-1<*|)J<2g90o2t8F9nsV*Qub(99Pzp5&+#$)0TbJlv`fM;`Z90|v$ z{Dod$tL{IiTH;&FOwg|_VUfyvf3}W|>!c=h*|1z|uCA@ME}`vuJ-#xOL|P^3vJ&%` zxUj2aRNqjg3|ey*s!ZM1G33#H$z1?vo{!OnCPbcTvt46;5pZntKAIfTHUl% zIdeMJbv4__&$5uX%f52SJ?5#`nBbMm>T9}MKrUN7aH?EHm`}chn2Qq+T`usA2DvEL zdM7B=ANQN1%2B-m>L&=by($P{15qDqDk+tIE-oERwpZvCOv=?l&8$W_SqR3zI>6uOxtcaH=rRA^Vt-)kNjvjV^wl>T%nSD^{vO3dFw!g45Zz+4j`OiBBDy!_Kv zCI9c!LvoH#O{#=!9c7CIVA)SKO29v!4VkXaUCQqL$Fr{KLq)ChQ-hbrX^#p7mYd>waIBBegphvlvfzwhheV9A#O6KEAKZCi2t|v zR8{4ugRY#5n7JJFz^fX`Y1RUz;ar^jKMNJhIe3WzCG*^vS&tg6D$QQ-S9@ZdAb`E$7HDLP25c-f%oDOv{>hdlKxQD)R~W#uQ)9HGs)rAoIUe;!DM#oX@t=EN=z#x;Z%yl zZ3uQk@d?ZzWylA;@g5Vstha%2WrnU(l$KTsuC`nlLm^iBh1kH(xeht=EVpN}7@i%@ z`cZl1g#`M<)S~qInul4jR?;s;-MUSw`#RRQs7Pu5Zmnz$QgXjpL9eEEPvdYtK92>x zIi$_ReA;9T=z=EwLN{ne4Pv%8AOCigZ|gDTU0RQs=iB;FrJ!yzwuc6$NMtQZN+>=Im zg`wP&M)?jZ&$37Xi<1I%TkRFp=wNG^m+2#RlQcb1iK@D#gupNb6n8_6@_EPbe%3m_ znth7pYJ{r~u1*9G)n<1LEP}Xq3?;?at|?b_b*;mgv6RoCn3twlK+?Q||7>C2a2Jc~DXSM%zWUL#tLhUqAM}`q@G^9%n z>0+b>5r8Q`S|);!ri1~G;P*f3K&aAIT{`>MQ-VE70c zX@r%lJ=8zplYs#v9sc?qQ3uuj=wf z1W^GNo0YnsqT`JqKLisV6zT7%Lsbqnd^WC8E2QFcVql=o!*CC2c;l1 z&ZqZ--GM5W3lXCc0g}OmJ;s+!*%NmDT!{#dKGBGBNY4#G8X-jD1$CPt5x)+y>zoqP zIX&!}cgZCu9^~d?prtrK?1GYE#HE1H*GD@5~hB3_N~nUwBUJ!PtNZJm;REqPpmU<0a6P;ZN9CS5Dj z6r{r;C%j5?4QK{a-AxVGYVUaKPgq)~|LrU6C^uYT4wgUZE6 zdN(!vyo1_zKMyZnA|`u&nnaGfR_3}s@D*JmFd6Bpbbqe70dfIvK)(C>u-|Uhac3Kl z*WIAO2tUfTy~3fd(!7_gB|O~3miS1r?HOKSV&kapsEOUj2J)C5EPB3C*lj~~GKdN? z4>|6(-lY!>5+!?0`Q~L_3EUHXa8EYi&eq^|-WYdV-|avnwI*rtC-o7!qZ+dh?>f2pO{br#7w@&J`|A0G*xAtJzfClFSS)A+Vqv{a9&Jum< zzkVafUVu==`94@|)3m5fgWcl?dqge2aH19 zQCj7be#kT4>d8XbIQI-~zQGs|9tz^<*1PcWNQcr*qbv(ta8c^fa=6;TNs@#1>FK;a z2D3fhBbWmgD|P%w}>WU@b+U@=ay#GPUl@S4%et z)({-i*hJ|~f-8@FUgE0#ro?p&KT;$v1`T?~IEpOdKvL?_7`PfWtm1ctuqfA{3BKde zekMu{Pq9D1NHNjNmop92Rtm~$+>KhDftoMp32J@~N{)gOarYUCSKD^i#7(1(4q|r8`K>OdEji`g!%{(Zus4Lh}y3Tivl(#asyHJ)^T9c8z_xDabOPrFmCgwIN>iiL{yxmezAn5RIY5|Y@Y+Zh z)^`!ZG#pu8UjAkvFYCjS`>`sb&AW>5M>@NB>Uq1#SYi}WTQ zWM<={Sp(9Oq0?eTCFYB|8?ui(%`A4b*IUv?N{;(8`k5?qcV1Vm|K}-QXJ+v}Yk|*; zh?ZL$uwa57q{9|Er009^4l|1z$(pW*FUS4K7u3!htn|Oc9er8c3V)hD-{~1^wUkF= zys3e8-T?0!+JYAKi27*Eb}0_OGb4vnU-|_dhunWDw@0#w)&BjR_e3Pwp8jNUyxtvO za@^-G{dfKK`+{tX()91>XlqdUcx`=D{d0>dHW}*FzXz}E$HvB4#p(p6L9D)^PPEMT zI5@1n-AcpxNbc^(Zt{t@&h_Tm{aL(k*(oZE;Z^-0ct&fD=;-z_%)fl59S%Z5wQD}S}%FkXEl)o5x9m@ZH1?D^P z`jnr=H&-fI*QNaLMFf)Uzq)oGf}vd}G)OXKdPftwiPuG8gkC=7xc|0(I}O^W=ra&L zr(0H?S;ecOS#0-p89Kcx8->+}pr8P~778}{_A2+m0W<>C|0Qr#{QgSBf)Ahoa&3E0Gk(QaFRM# z0NB-qGc|b#=$So{G;IQ0$O{c5+K58_tIe zX1B;&_VB#HK(hHs-ad^*@#?`W;;!wf)RNA7V9}#MA=a?l2UD5HN=i>L4-BX#Qy@kv z?VRQdx8;I>BQ8h{8+d3eCe5ziU601zUCJ|K*^0Zi3Gbx!jU%FJ5lMLa-6E`_s0T;A z{Z=pV?YGj?FX+byzK`F$eF&R^9bWDj!j}1{Mbl<}cnBLA7Et45c8>|XV+f1&g*(D+ z7B&$!VMCIP(+%%&OOE?5iy^>#eP(r2KZ10{)pgpCOmC_QXeRyW-md@Y3vKyzo%+A1 z(h?j#vRLP=9>mgx{|!@c1S*@Zr1ROaESxVG%4Wy*3!uYjLnBx;b1uyZHT&o+j%Ri+j{SZ(*XuZK3G78!D^1Hnb$6NLKAFK=5+Jkg>OShrLlfCVdGj=$o5(tn$UPw!|#8K!G6eCF?vzu&bfv+Dz8@eV0{SYRN zb0A@-+fV@-PV0d5}72AkMVaGt~2tiZtIK+>C63}?y7fz1wf^_;2$ z!FGofcC$fSY1)39ME&s;HjV|34$X0Y zFrhwlB>N~pWR9%jEu%4=d=Id6?&r9V?B?d1pp2_$bNfvZ4m~x^N1IABM z)8I@-sO7W{W_@Q!Q{bd6kP z+~?Bhk|*f64BR5R2J>}kY~om}_<6zd@s>={kGS@to~HTi&$IRnhtxv^{-m)PE=#WB zynrpNQXBvdGDtwej3BEIxYawQfdm)WN=+z^lfv@PN6J9Lx8PVL1%q$z;*}mcObu0Q>AY z?w{vz%PlP0wp@5djV4|H&O6w*8&n0u_K}Ov8p3W;X4-qv@BOZ#>&e>-~WL{wgrGtuL>IhiD4fdoDeW4*Vd+pz~RbGTlf;cd>gGwB%?PCogdF|^A8-O|uxUw@)&!%m@EnrzgwQD;y)+EJXR*__~Tw>c#?3;@`Dudn5hh(w-^1nx@8dM-+BW;4`=eYmPcqKHeZ-G&E z(5#>M-I;7qa)HMl7;u+5*w^#}MntTcY($Q`a}V##WMfwRw1DU%hNw}3bq7f#9S2vm zjfYQ-rSukRcaLHHr5aXrxm#zjZhJu98okWW|6cSzlUHZ4S+aEpZ_8rSM_YF|gVn3R z)Gr;YgEk63^a;CTZg9_E>U2>(Z<@mf@$uoTf1q{8T&ZWeSXKV%VH^lFj${4CsR#4w zDB>D7Sfq6HAR93lu-DEFmOe1l)$*9}48NJbLoX}q<-rl4m+6Q9;%qY5+64zjaGG=! z!ZKs@GxT=2^Wlp(N&Nu`edGd;tg5Sfq-7dX%l`=}a25nxXhI1QV-U3(%X6?V%Yo~F#uyol zu^alOc0opbT07|Bm(zI71QxwS;HJ>o)29a037EdXJxRk&epO>uuY51FzSyS1_o{ZV zFFwlxTBo{@#>i*HEx{Cbs$&_hVS?>jP4_9~4mlNV1#;9hzg!;fQB z^UB*;^jL9~2J#8LjFvZpjC}_3>C6b%X3YAP8FA2IclOQ&Y%p)Rjm6H=+xM{dAhZ_AUHrGJlbs2`VCtN7#!sa z+3Gf@dTub=*bVFsz$VeC=fqj}76c3Lq~qHw`jo=NF};KRb0K$5VpuE!PB!+d!a2iQ z07JT)C;CxEv={yU(a^6B3tjxDKaGHuje4uW_K5;)5~L+IP&4?6$!x-uK51U&eD;7Q z%5>_ed_1nYsrqn$29Rp$Q=k)o%jgGmx9nh_P0)7n4hVbu{1i4swr=DNQ&@CJpNcFC zoiHI^mV*<7mTd%U55U(Q8@YWdE!nFy$Qli@N`?INoCmUsAQN~W2TPE5yv)-bERJuP z#=_-Kium4XY%KqcgPG+=x2by^ryVR}dY{9zx8acZ#nN3^m8&OYSW0lutzH+MjP1dB z)bFudn}Aic1FLBE$toJ_O$~iI)ujigTcHC??32lS#x#~ZpBL#Xa2h{dKF+MkwviLW zrTI<%bq;newM&__V=y^D5qG&LV&emN<23B>R4k?e#K~*U@$l*Fu8|kJah~6H<2=nV z=m*YoI-BllK1DGY$<)FALEn@FspBy_Fdj_Z=CjndXTOCtKcLkY;O3B685!ypQeCRW zT!yz$X2`wTEB9uKp1~{g4mkAz0`DOGG?+CHrAoVGK9FTpfPVkDs+G5B<(jzvaf&zO z(0XzQ@65r{+gi&VGuW80zF4~bW2vT?L8KBkUN?g!kL#O)ieR-uP6JYXijwCqB@X1c z+fQ^2HTuqVu)m+;Q8RI#)^{D!ukuW!U43hi-lXDVr12*Fj&)Fm1=B^$0&$6p%JNXA znJ7;g!D-Xo>yF^mbv*jdx(68W>i+`+Nyub3i3u@_MT}EC>lVaMef8LjI@SnL8>qzf z(8|Po$E3nk0ghy4GYwp2!qp?);LzX`gLpCE;bsH_F;F4mBvXkYzjuRgzE;m0Xu?Tr z>-&12hz)y)LDeLxv^FH>QH-d5S23sS!n&uk?_mc!bB>4Jjt#iJFo0*aktAr2z!2sV zvQ$e#Auqfg3*Ur8xC%Vn)jNBqd!Oh=N+>kQNmwttlyE4^lB>%p9p~XM8_4UUl9x~@ z-VF(dyyVT!>PBZk-QSK8MW7}KZu8tRx4;(b;q>2 z%CbRfjOxwK7~s!Z7%DcYSkv1A&e`vPgEc+L^8qWTHSm%I2LZ#%BL;>uJhoS%gb&)CS!^Wf}t;$Yx}g9mSS<%rm_G zPPW8l)&8po>v;p*dEsKDm@h<`YBxk#X4xqTzeZW%kOuc4_d`lR@jc@2aKIw=>vtJ+ zO~6DdQ1ks^;s2B>(o+9K!iyb7xT=qiQQNuvR32L;TMzN<1#D4>6|&p-!+-CA7jWr8RgrxPF?c zGO=+2Z@7z14C}wqtE`P{#NE;4{s=@H2dI`ouG0EDgfiTukmte|hYLor#w4DLyQUHS z>HCfn-_5EISMkzcz#H|4-D_OTYXB$rZ{>%6!N!gL<0VZI0=>6H!?oi?9ObePA0RV> z_XW{+O?V7X%x7cAeK-Q+5`i!1IHfBS7AlDZmud-5r+OMs+4Hhf+{a;mysF_U;x+l~ zStG9}Eo5=Ae+)+3>++gc04CzZ8ojUVUDviE=74Zdyvh$RWOIoB=0z+vB)nMA+7MpB z(-$G$L3uvP$9T)rTV`RQ*mHsxmy}O!ZfXdx@|PE{TZCP-<3d@Ca^%g6aPS4a3A&pt zqdto7#;IBOAzk)3XNYpJKhRAC@-dmT`ySh69%&*C$Hv=ntU>O^2C_el6eWh^4DSHC zJ*p~59fDQZpM2zx)-zp5E_8yOR(0N~dzfcP6!4n?LKITeIlk8kS7$xL%c@yKoV88Z znpp9Z++wcc+eTyiw(W~qL_g~pAI*}Y7S<;&X3sLh)AStqd1D*DJ|mvg*iHZSow&)4 zec%#xYy%+1qo>IELE9uTHrP2o8rrox`rbX_#0T~tF z!(t~|g=N>uTC*&OW5suGT8FBUX$2z!gg5A>jyK)I;^Q?uAQ1l}*LCsmm;x3ZYbAUX zy-D5m#pf1a=X3zp%)i4NEx@%?FO7)qT6tRm!v{^RJbWo_T($Cor3hIE} zt4F}!Kp%!%wEDMro~WMf}6je46_zm->sdSTsRU2P8b9{n;S83V%q20t$9TeS8V z@OwK^pQ6BVkQyI4ROn+E$)jh~W_*3dvTtlH!BEGSA(H z^Tw7!w#@bJ1ezff*r5@;UW6rMyy1T_WA7HhYtSXl9q2#Q!QN$>R?5&y8V`(D1YM=_ z>VkR2IT#xw3^L&G90Wa-oct|RC8)9=N(WQ4;@ z*Wsf2!h3O-CfeEtHtN5ZC?u}=>Q=sWm8yP+wfFf|?3cv;{MBrQQME z?6h)4aGCtFyOu@_ohZg}{iF4))eI zK6edUGB!fjN@(rDlaN|ej{D+zk|O99mm=W%iEfg%uAv0Go42oFBa>(ByX?L(UGkEKI>?uS# zxc!$bBK{59Mxo)L>qw`j+)%1FibR<+vI6OYwD7d^+=;AbFv63_jVN1>|C2CXZRm`w z$;6(xGXON!kgKh`#yfw>qN5}C0kDTA;7SeQQ3u<9iQ9h#+g-Px=i)s&@-)g`)!@=J zIE-iiGv(t2kMK>p_(5(Q=uq6Ve*&-h6`MXQvIhP@Mt{C>RJ9~jQHf?EzEYjyIEEF5*!x+~A1H_KNl8NBJZd z8x!}k7P##_sB0h`jwYd~xef-nY8RUl7o{6&*vq|ViCfx&a~(-3)e=?01IiFI>=oZP zU|WH{_UQ>uQACb5FJ0x?WmsB8l@SfVQN*2q_vW*B@e}w>)zFR*m(5Ir@iN91;FlLO z+pw(Z@DASEA-uo-p(cB&o0W!52t>6EwwP4kWlbl2qG#-!L~U3@*(7ggHp#CuajZj# z1&lBywr~SH{cpTtFzRx`Mg~}0PS}EoF<4IY8tu}hPx^tHb_Hqc!@+(u4E zn=-Z-ZhwT0l<{^xf(X$T&S&gou`4tf5tiA+f*R9Ggk?GIAKr%GVSZ|9104Lrttgcr zQ3mCy)5l+4_@ns~EsU~7`F>4c!>*?Kn=E!IszOtK zn2p-tbf>A+!G8TVcW!2bdK)H~EsD2SuyJFfss(A{QjX2yUCjJixG7EdR{};(bw=$I zuwVoJ&*x5F_$WoAoqXe?n1sI`DE?dASvCu?o2_>*%sv+57qR*Der9hZ-Eu<=f7R*FtFCl)lrm%2(6^s zo`BpQhF6r;K`?19h|rrgjtk+7+Ts?3;<{R;?e| zM{jhnU02I)5sjGGwm{ISBdkFs{U!wv_ITG1A@&D%z0aLbAohSgp`})s&)kpUjZa|D zI=UHf_`bk{vjcg$Pp>WMeA;xi7is^?mc(lu7Yb(W^g0w@Mdp_0$+iXX+~;w>+Gggq zN^BMmGJEYsHJx+_TL`HLxNu%t2{#NatEprYBL<~AST$*t#(+WD$S3iRO1N>GxqQ5S zv)oO=H1?XF>%nWDXYb0^4(_aBk-XPaEHccOT5f-e*5sW$|0(PT;9d6=TSOh2pJw9% z2SH@doaA$#28=DVzU*lhjg_mw7Qx@BVln>M%)eHRlKt0+Fo4aznKolP`SD*<7~ILT zYvCL4&Z}h)@SR)O;C_Rg5TL;-ZM()Bw-BSu+_GI`*mkyvKcTQFqN`Scxf@i*+qZ); zThH=#g?&jRo!N>DrG8^;dXbF|w05Ec8@KGn1slstYWJnv*s^|u=%mxo^Olc!(-s=2 zPtU)kPLFS=PLHddZa&DvIop*SBV{0RBliba5TWf~E<;jcP5Rj$?E@>3F6!G3p z)`!$dR^8^x_R~U_>`3Ytvpeu0m$&5B>m8ZZ&Cirr1FmYMUY0 z;26SsWt_r(fubL6|nQ6sC>dWZLi+rVVdl+H8(` zn6~Xqet0u)--C@LAS-(jyUa0(nw_^f*u%rpv9JNxI(Yk5@=Ly?3ae#vKxK_q3q8PU zO{*_|iM8}JvCF0P1+TNP9`bj^_3I9>zxS8_v7UhxI| zU*a>o@eB5tY^mjQzhq0|5(ktq?1BfGUQ8bOU3^V&&sz383 zo6lS$^4&j===6J1w0sQSjaqt!AB=ySm8h@8Q~Dp^eA~IYcJ2%C|F^!`pE#FaL7QLx z|3Xal4RGx9s~hOwL8b<9nD_mfMb$T7V97nAS2enSUR~?=G$VhRTfSp2y4Gg9f4)D| z{qx#1^-byj>Y4Fh!rcJh+8OQ{Kd;S0=LL9*@s#4(h-WLF8a(^(9Kv%HPZJ&xzP1(5 zWps`$hx=#Tws>{II?LLniwi6hCe`n0XBSMa7pmMpzW}U0kAIne{y)L{*Iz#$sCHc6 z{|eg{*f*K}Cfu`TebL&Y)yqeY9Lf83vV@GKYuDbl)>5?E@~g!~>ri1?hU~JU)kXIg zE-kPuTe)~S)@an~epKJL+EXRfKibLuWPz1yCbrW0>|IE7GqC%1ki4lIlJh_*gj1R5l0B#PI&GmVq@`2v}~&XZum? z!o5=KcE8-}cK-&Izo}E-uh_hKs-s7gq5hR(!&B;ZA1K5Vq&^2*-0p)QR6OX^lczM5 zqy9~&_c@ryT!T!vf|qr82Dq<%n~3*uw|mnhyqn$br&{rD$A~SG#8U8OXei#i2z|1h=MR;~CReo~PY?YOd=o=`mDc%tyc@ENJ{ zx3Z;?XO5POEV@~QMb7S5N`yKx48oZcr3`AhWv zsDl52-lucBBX zHT=#o^3cHA3Nx#1tAA*W+}EUK__hprc}Q)WneEvML0zeLWyuF+{!XSmGf*w%VOjF> zz&%^d?8TV+|H-1JYKCvgmLCgzF$NVI>tiR#F(xg;vnR=GLSDpw=e93Vl6u|EADSw^ z*f(G!vogqfKEYEJUpra;?ykLsP>>$?u@p0V=`xZ54~k?9m9C)VZ_ZG1u_!GdfEtmE zqU3f;zK8%$3V4o^FV7&@*#f}E-J3a3c?19h#}J@g z3qXYc-Y2hPPpC!oN`k5}e`@h+4%To(+M#WhNd9 zfgCtZbO?bQXrNLdkV7?;6aqQ8jsS!}4kl7k2;_i}qYy}a48aP498BXM&XHpR4`gG& z4t{Zt{9NGMZDxi^@zfpihkE+%x$+}{zs1D-Z47UnE8i0G+Zkr|PNgIb9Kna)D^KUm zcgSn|hPZ6SYr zzC1hdok}yq?E7Rs1f`{G@06Fzhb7)SPaYKb4z%E%T0SyQo*i-++IlQpk_I(-WcMP^ zSs?ccRBP(<7s!$9uJ_FSbiTd214)%{?-o<3;M)i7loWhB(o6t?Z%5`*Qt<5vVNeyh z;V8ihz8!J$lXuDcLymzbjTp<2FAQW%&j%UDV8R+_)c+!19>fBVK?RRF>q{5PWi0Rn z`18jAF5fM`8`uaw!La=PZuyj!uHWgDvsmECLNkM5$VPviUL=&!fDU`6q=Ki&|6vU7Bs9RDOB-H9l;8geteWKSpj>{eA&!kO9$U8H|uHlz4D2`bI=sn z){j=ATuaxjk}m{)VnKN`e||MMrKNv)pL`+YlV&sf^fbJ67!BtI-fNA#IZ!REe_@Rr z%|bpsZDyYxkfhZ09*D>JclXO7foe^?`+hl?1%7q_>rh91*m|NW%9v%3(L`~`)56IJoz@ybGJLE2Ud;w0a{_EXxnn~W5Qg7KKf6d6P74MbD)=zm!PGoRy z^~lX(^8QSY`t+%8yH&<`nFW<)C=jsdJ zkoyP7$D-;tyd_7N;OXkOy)Ca}aCP;)-ogKNAb+&6e$8Qdt_){a|A%+s?&0m~zx;p@ zo^#e;{hgf8;P2}1JSNXZqPhMzzo%B8o~}0^m#3S^<>h}U|1AG=2G4JlCz1=VX_QBk z3qRc`k0lpwK8bJvqjk_5@MR}a4*0{A$IAcmN%^5|@n^tg&!3)t1SRCV0>RQ^2@l_K zk11~C=T%5o;Vv;G>-p2$Y(@#SkrBI0lJM|WvelsQ~a4EDU{yeF?cHSy+xk*r{=@7yoebA-$&#T6Ve-bvzFhhG2k5uzuGXBs$O3j1O zYJQ-ak8kFcMW&D9R6?N@1V0pn2||%4LPrsyymW;rwqJY;@(ktCcrP}a;?MJaD@?N{ zS_EBM`vYd#QjL1jGGfFB`aqGVfqtZ#3}_&NFyzl8KbL3TYg**$7leEO;J{$^OS9aM z7_aBckSF@|{1awV9Px+p;0JrjY)Yi|xyXY)b`beIL;iPWQ$nF3e+v0ShWw`zAGp$# zO4lc5tTcVZCdQpXEsX-)HN{~RHI&C6s4(5+m!E>XkQU$}Ez|90sjeB9j7+f;t+c!# z=Kv{~9x-cDvV3TOKGQf_9yH!(iXBbSfKGqF=Vq3$ z5BU@g{s*(v&rqtC(5lx#IgphCw0wnGYR51o zyOw{>EWOzdwq$Gh*UZwTG($bS|KqvHw`ujCnoTwv@|rk$beLHpiMdLx5A0($Nq z&7jBiMHA?*&?@ZUcZ0WK;4R2o4Ec%3ryKIOo7sIk&|c$TU>@peU|Pq4E6mdJOfTVq zCD2yzNiu`~(B8mD&G^MR8cCu?zz(xi(0~S|TK*+7OSd4e*Pk#;--BQ&U#mZdktQOq zcX-7ty}uWE4Zf#rmKtl3FH_-r4luL47U1jD^21%AxYUcFXRcX#q67I{4PXK4DX(?V zbG2F86onDDX!Q@EPW&N{zn)K+rELyqs#&YAhU7z0p%e6?S^C3e*L!9u3mupm zw1VSi>Ev+$)M)v?o7oT|P$%dL(&En|{tXIHbCRUxqd+iCHI3k);b!T4Hu5$VU(f_I z8&iOMrJ8pIEy1$10tJQY90|G)2uhIG5j=>r_(KEy1#P3S4T%N~em6vrg1ioY1ZnZ7 z!T%ZfXh3@XSAe&B@-8Vj5GJ-21!byI1c#fYvtVJ55|zT>p=MT42bmRW`7|@5%Zbuy zEkDI9z1EC+Nz315W|N9huT93_b!O?xO62wS5YdlRFJ_BNl7e?*`cVNPfUJU{baO1o zIy8iDo27~t$o!0!|AUzgSV!@Qmj4v6;tzTJ1z!>`{G;YWuz6xFLssKJ$Y4xg;)osf zE||lR3;={10LCLN{xk%+W>eZ$6eO!03i$=#L4XJ0|Lf}9gR3sCIKG=3N+7S34$Jz>9>mmlxZV{w_)C zazvAICac?9?HHi-e5UI>Xe$2&b$5~%E&|l??CD}UaVWE^koaR!cA@Yo$VrH2sAK_g zCcAS5g*y9mF|D2C#DF&-`y47{A9NQ&C%=e-yBw@Jll>i@gXRs$UM@d>bwS@s~<&5{t0iaFE*)@hY}SWMjn5$sU;Q`6KNki!u; zdl2zaPtU1m79eg?sxaq5iOfDg9hmS2<*?KyGhqnn%f#G?f{fj&ppB5aFgrRS&ADC7 z>)qg8O5fscNx&062XgKeyQUGmUFpw=Io3e`VI|5L#=}LbFowc6SzAf6jCvK|nDuB4 zA=EL?`J7pTL17N$&J^3y486wl=bi>FXkc3IJpPH(Ui6K62XikF+ulI`;o_0YDXV!K zoI0kt?HJSn)(GTwh*=axf!6-qZU66KZkO1l41v*Un)?(H%u17Inx}6Da(~XO8X^C( zI@O}zz#KHS_%$x3>KT$IAHv*yV*WgWhx^pS_sE%X1ez3oEcVPH=6}E9lVaWkTOG2z z8DjRk9P0M;JpP0KuDK^;@{)KQjyYqRN0#U8!Q)O9_=dm7nl|JO%Db2`g&r*0 zeJIih=DFwvP4#a@KSLWvH1B?iq!NxnlPK>=7`nh&L{EGmvw8nPKB*Y_e764ymxMZm`AqYKlMiv3q#}uU+KV%om;1oFLC9}n3>(wv zY&hmkg0&9hZxFk{$!o~-yLk?p_c*^#?Db&V<_*ptKwlFtLIXxpVpr|vg(g-0Us*0) z1aw~KA7$sd7X>k|K=P^G$DwP8rQTmHm>xeQ!jAF|JP&h1C`|K~gAc0wRbq<4nJtP_ z-wn6Q5>z_5Ma=P57&PRvQOw>^3>XOo#C+@&?os>*S-%6U4#+PEv5TM%p}1*12F~z9 zDtp<0%mVAQPRXC>pr04BRN;OxHxbgX(8#!0{x2nb(oyG>3xLE8pOTh<}|2na2@z`c6-X!+H zDE>GH-1=Ympu0$gp~V|e_!uENFj&5WDZy(RQR@-4}sIN zv_new&$_^Us{atBn~1p$PO$zLe&%lkO^0VFa`Uzg231%T6SHR{IdR-8ESfE*s~-9h z#m!{B^SDv*Ox4B8EIEfqvr8bSb(`>?3JORkT&?U41YdRE77m zk6!^^thkpt!H|S|#-iO~F5JVI>Z~Xl6tikG5gk(gm&C4a#2}XwM7-!7hA4@AeM(=j zE9Fwgd(6qCh)U*uU=&6m%IxtCep)m^(jMc%MTn%0vMHTQh{NSIy2Nq0ru;XEy>}3U z`h0)UHAJ`-a=89Sw*=f%0uPCKZ6yLR6?jriLkr|_#lIBmc1))f{!z@2h(NfSM%khr z#i5KI2WotPKxz zo)`ZGgP0|!4ERV)-%_ADQ2Z%FLPWwLDVYX;^Avvx_bTV(F{L`lff5|5?Wcb#K!)37 zmYl~li34>Ol(0kj-W%Wv6<8{!%z4nRxRnl1fHen7R?#6L4h<~1i|3%hPb=XT;h>XG zsyuf&HK_qd!T|E9WXOFNp^ohE)3D@s?t&TekP5uzcwJM4ABweOL~O6p|LdtCy);|w zRU^F9LRQLk$ogI2g`U5(UQFth&Ah1B7mXZ^7N%i5?j2%`dzH>&mFR`8IZ=9t*fU}n z5Yj2le*jN!^bVA=tG<(nhC^EVG=C%9^|xL1{noAjE@?uAuZS(m0_!|4Ws7y?Aozd^ z9QL0|O_z4?83yg2l8=24XQk2OVk@>|kS1ZQk@f%512ByG4q|R~a!H~| z7hB2dS5WnY&sooR657~ z$B0;1CsJi!xxpx-)PCwZ=vM)@P&c$8ph;6kY5mk0-Kum>!_gkFMyQOtF!vEKOxiN) z%4cqfIy`@Q84eu;`yo%6ay&>m1tZEZU+gV0I@HQnei1hy`@kCV^6OEM13zcQlb>*p zbgO%I4S8DmW-%X(@X(_A9u_;jAG}=gb1X(~NO~M*{+ACkF9&#`Nmo8b2c2L|%JTQY zjcNEWf0$}H1|3v|Uy9x8IymBSMG2c!XW$CObJ<~S25W>WTEzSs91MY5|0}K#E8D1a zT`KT>3d?Z>oB=E@6>E788gyC(HyHmO<3Xog#ZSeYhC$QcQ2FP@+;d{ez=~JJ_Kt%! zCn`P=dokD@M1u9df(yc3tuSo%3gYZ|me+vQqj+%hj(~wjg7*dI3V zVyQALBdbTiLyB)@^^1WuCo1p6gNZbJpV%dhL`;*mk`2ixE1@^4{0PrM1Jf$qtymuq z;rd_sFEKA*z$pt)^4B?>L7L@NneN#&ub_&&@J%rul@DQndRWEsd~6gB&5^1lVlN>_ z!YiDr)fljw{zH$dwzF7F!k}YV#fD?jDNqlpUf?-s+9BKOs|ji7an%HSzD^k0pp(>9 z>?xmb#-S5_h^kJCt=$X1=2&$FSGA*Q>wop>gm^IuG{n^m$^2fhE*8~o-2Ki1_xld2 z*Kz!I9;wIGl;(eu#2MR^{-~J4j=x#)b9j6N9O@^>`g_U0$Vz4SJ;b1aY1N|~m0SmX zN`Ifr<9e{>MD;Ngx`?U5ni*6&7lC%qUsK0o=H&M)zCg?gX2~=)sD>TV!>JZ5?p6kt z)16L%PP-b;c0Fx`Y((jg6QMZtu)_f{>%o~lN_S_yV`=o)+2J^k^%kv$<9k^TSRJnU zh{~Hu$Rn*@L2X3Lxiwg*V_wUaDcX&|UZq!x`F0luwvRMjUJ*qt)19HHcw6zPx zx}W=n4%Xf%wsIW~X=SY4Bq{64w+%adm|HN$Fx=PI?nL2AuzFm}mMPJnhF=%6`v4AT zglfmcEMUwtLW9PMm@_bx=SpUD0<00Qo5A|Or2_+0psqmdg%}Wi5vgN~#6OQRw$poD zHiAwz<%VoP6>v>=$r$`iiYLTA1GeIEVut(G1oY#68YW65au(At(``68 z=%f;r5QF9oNSr0+vQ8AJ$BA#UBZ|Y2RD~=2FM^ED>%`4s;zy=DO59Fqbwd{N-{-Z5 zg)8wGC#6>2d52Oa@jU-yn0>q$)DGShbNM)9*rj-!%GL&bx#FW@-mRg-9K~O-zMmi> zLmnril=5xRdlkd$8<>`y*+>({J3d+z-6<^^cOjU54+pH7?8kWQO( l?(iKCMV^>8T;CH(M22tL89C=`!+lTk0eHCk=}1fA{{Y