From fec9a30e6a9cce9a17476cbd0b5b50d951ea5192 Mon Sep 17 00:00:00 2001 From: Anna Bergamaschi Date: Wed, 1 Oct 2014 10:38:47 +0200 Subject: [PATCH] Added jungfrau detector server (not functional, though) --- .../jungfrauDetectorServer/.target-makefrag | 1 + .../jungfrauDetectorServer/Makefile | 48 + .../jungfrauDetectorServer/Makefile.virtual | 30 + .../communication_funcs.c | 1 + .../communication_funcs.h | 1 + .../jungfrauDetectorServer/firmware_funcs.c | 2614 ++++++++++++++ .../jungfrauDetectorServer/firmware_funcs.h | 179 + .../jungfrauDetectorServer/gitInfo.txt | 9 + .../jungfrauDetectorServer/gitInfoMoench.h | 11 + .../jungfrauDetectorServer/gitInfoMoenchTmp.h | 11 + .../jungfrauDetectorServer | Bin 0 -> 132672 bytes .../jungfrauDetectorServer.gdb | Bin 0 -> 568322 bytes .../jungfrauDetectorServer/mcb_funcs.c | 2649 ++++++++++++++ .../jungfrauDetectorServer/mcb_funcs.h | 174 + .../moenchDetectorServer | Bin .../moenchVirtualServer | Bin 0 -> 107120 bytes .../jungfrauDetectorServer/registers_m.h | 464 +++ .../jungfrauDetectorServer/server.c | 137 + .../jungfrauDetectorServer/server_defs.h | 63 + .../jungfrauDetectorServer/server_funcs.c | 3108 +++++++++++++++++ .../jungfrauDetectorServer/server_funcs.h | 97 + .../jungfrauDetectorServer/sharedmemory.c | 39 + .../jungfrauDetectorServer/sharedmemory.h | 48 + .../sls_detector_defs.h | 1 + .../sls_detector_funcs.h | 1 + .../sls_receiver_defs.h | 1 + .../sls_receiver_funcs.h | 1 + .../jungfrauDetectorServer/stop_server.c | 46 + .../jungfrauDetectorServer/trimming_funcs.c | 749 ++++ .../jungfrauDetectorServer/trimming_funcs.h | 20 + 30 files changed, 10503 insertions(+) create mode 100755 slsDetectorSoftware/jungfrauDetectorServer/.target-makefrag create mode 100755 slsDetectorSoftware/jungfrauDetectorServer/Makefile create mode 100755 slsDetectorSoftware/jungfrauDetectorServer/Makefile.virtual create mode 120000 slsDetectorSoftware/jungfrauDetectorServer/communication_funcs.c create mode 120000 slsDetectorSoftware/jungfrauDetectorServer/communication_funcs.h create mode 100755 slsDetectorSoftware/jungfrauDetectorServer/firmware_funcs.c create mode 100755 slsDetectorSoftware/jungfrauDetectorServer/firmware_funcs.h create mode 100644 slsDetectorSoftware/jungfrauDetectorServer/gitInfo.txt create mode 100644 slsDetectorSoftware/jungfrauDetectorServer/gitInfoMoench.h create mode 100644 slsDetectorSoftware/jungfrauDetectorServer/gitInfoMoenchTmp.h create mode 100755 slsDetectorSoftware/jungfrauDetectorServer/jungfrauDetectorServer create mode 100755 slsDetectorSoftware/jungfrauDetectorServer/jungfrauDetectorServer.gdb create mode 100755 slsDetectorSoftware/jungfrauDetectorServer/mcb_funcs.c create mode 100755 slsDetectorSoftware/jungfrauDetectorServer/mcb_funcs.h rename slsDetectorSoftware/{moenchDetectorServer => jungfrauDetectorServer}/moenchDetectorServer (100%) create mode 100755 slsDetectorSoftware/jungfrauDetectorServer/moenchVirtualServer create mode 100755 slsDetectorSoftware/jungfrauDetectorServer/registers_m.h create mode 100755 slsDetectorSoftware/jungfrauDetectorServer/server.c create mode 100755 slsDetectorSoftware/jungfrauDetectorServer/server_defs.h create mode 100755 slsDetectorSoftware/jungfrauDetectorServer/server_funcs.c create mode 100755 slsDetectorSoftware/jungfrauDetectorServer/server_funcs.h create mode 100755 slsDetectorSoftware/jungfrauDetectorServer/sharedmemory.c create mode 100755 slsDetectorSoftware/jungfrauDetectorServer/sharedmemory.h create mode 120000 slsDetectorSoftware/jungfrauDetectorServer/sls_detector_defs.h create mode 120000 slsDetectorSoftware/jungfrauDetectorServer/sls_detector_funcs.h create mode 120000 slsDetectorSoftware/jungfrauDetectorServer/sls_receiver_defs.h create mode 120000 slsDetectorSoftware/jungfrauDetectorServer/sls_receiver_funcs.h create mode 100755 slsDetectorSoftware/jungfrauDetectorServer/stop_server.c create mode 100755 slsDetectorSoftware/jungfrauDetectorServer/trimming_funcs.c create mode 100755 slsDetectorSoftware/jungfrauDetectorServer/trimming_funcs.h diff --git a/slsDetectorSoftware/jungfrauDetectorServer/.target-makefrag b/slsDetectorSoftware/jungfrauDetectorServer/.target-makefrag new file mode 100755 index 000000000..ce093ecac --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/.target-makefrag @@ -0,0 +1 @@ +AXIS_BUILDTYPE ?= cris-axis-linux-gnu diff --git a/slsDetectorSoftware/jungfrauDetectorServer/Makefile b/slsDetectorSoftware/jungfrauDetectorServer/Makefile new file mode 100755 index 000000000..af9c684c4 --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/Makefile @@ -0,0 +1,48 @@ +# $Id: Makefile,v 1.1.1.1 2006/02/04 03:35:01 freza Exp $ +# first compile +# make cris-axis-linux-gnu + + +CROSS = bfin-uclinux- +CC = $(CROSS)gcc + +CFLAGS += -Wall -DMOENCHD -DMCB_FUNCS -DDACS_INT -DDEBUG #-DVERBOSE #-DVERYVERBOSE #-DVIRTUAL #-DDACS_INT_CSERVER + + +PROGS= jungfrauDetectorServer +INSTDIR= /tftpboot +INSTMODE= 0777 + + + +BINS = testlib_sharedlibc +SRCS = server.c server_funcs.c communication_funcs.c firmware_funcs.c mcb_funcs.c trimming_funcs.c sharedmemory.c +OBJS = $(SRCS:%.c=%.o) + + + +all: clean $(PROGS) + +boot: $(OBJS) + +$(PROGS): $(OBJS) + echo $(OBJS) + $(CC) $(CFLAGS) -o $@ $^ $(LDLIBS_$@) $(LDFLAGS_$@) + + +install: $(PROGS) + $(INSTALL) -d $(INSTDIR) + $(INSTALL) -m $(INSTMODE) $(PROGS) $(INSTDIR) + + +romfs: + $(ROMFSINST) /bin/$(PROGS) + +clean: + rm -rf $(PROGS) *.o *.gdb + + + + + + diff --git a/slsDetectorSoftware/jungfrauDetectorServer/Makefile.virtual b/slsDetectorSoftware/jungfrauDetectorServer/Makefile.virtual new file mode 100755 index 000000000..38dd2537c --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/Makefile.virtual @@ -0,0 +1,30 @@ + +DESTDIR ?= ./ + +CC = gcc +CFLAGS += -Wall -DMOENCHD -DMCB_FUNCS -DDACS_INT -DDEBUG -DVIRTUAL + + +PROGS= $(DESTDIR)/moenchVirtualServer + + +SRCS = server.c server_funcs.c communication_funcs.c firmware_funcs.c mcb_funcs.c trimming_funcs.c sharedmemory.c +OBJS = $(SRCS:%.c=%.o) + +moenchVirtualServer = $(PROGS) + +all: clean $(PROGS) + + +$(PROGS): $(OBJS) + $(CC) $(CFLAGS) -o $@ $^ $(LDLIBS_$@) $(LDFLAGS_$@) + + +clean: + rm -rf $(PROGS) *.o *.gdb + + + + + + diff --git a/slsDetectorSoftware/jungfrauDetectorServer/communication_funcs.c b/slsDetectorSoftware/jungfrauDetectorServer/communication_funcs.c new file mode 120000 index 000000000..87a4f95d1 --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/communication_funcs.c @@ -0,0 +1 @@ +../commonFiles/communication_funcs.c \ No newline at end of file diff --git a/slsDetectorSoftware/jungfrauDetectorServer/communication_funcs.h b/slsDetectorSoftware/jungfrauDetectorServer/communication_funcs.h new file mode 120000 index 000000000..f220903b2 --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/communication_funcs.h @@ -0,0 +1 @@ +../commonFiles/communication_funcs.h \ No newline at end of file diff --git a/slsDetectorSoftware/jungfrauDetectorServer/firmware_funcs.c b/slsDetectorSoftware/jungfrauDetectorServer/firmware_funcs.c new file mode 100755 index 000000000..1168559be --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/firmware_funcs.c @@ -0,0 +1,2614 @@ + +#include "server_defs.h" +#include "firmware_funcs.h" +#include "mcb_funcs.h" +#include "registers_m.h" + +#ifdef SHAREDMEMORY +#include "sharedmemory.h" +#endif + +#include +#include +#include + +#include + +//for memory mapping +u_int64_t CSP0BASE; + +FILE *debugfp, *datafp; + +int fr; +int wait_time; +int *fifocntrl; + +//int *statusreg; commented out by dhanya +const int nModY=1; +int nModBoard; +int nModX=NMAXMOD; +int dynamicRange=16;//32; +int dataBytes=NMAXMOD*NCHIP*NCHAN*2; +int storeInRAM=0; +int ROI_flag=0; +int adcConfigured=-1; +u_int32_t *ram_values=NULL; +volatile char *now_ptr=NULL; +volatile u_int16_t *values; +int ram_size=0; + +int64_t totalTime=1; +u_int32_t progressMask=0; + +int phase_shift=0;//DEFAULT_PHASE_SHIFT; +int ipPacketSize=DEFAULT_IP_PACKETSIZE; +int udpPacketSize=DEFAULT_UDP_PACKETSIZE; + + +int ififostart, ififostop, ififostep, ififo; + +int masterMode=NO_MASTER, syncMode=NO_SYNCHRONIZATION, timingMode=AUTO_TIMING; + +enum externalSignalFlag signals[4]={EXT_SIG_OFF, EXT_SIG_OFF, EXT_SIG_OFF, EXT_SIG_OFF}; + +int withGotthard = 0; + +#ifdef MCB_FUNCS +extern const int nChans; +extern const int nChips; +//extern const int nDacs; +//extern const int nAdcs; +#endif +#ifndef MCB_FUNCS + +const int nChans=NCHAN; +const int nChips=NCHIP; +const int nDacs=NDAC; +const int nAdcs=NADC; +#endif + + + + +/** + ENEt conf structs +*/ +typedef struct mac_header_struct{ + u_int8_t mac_dest_mac2; + u_int8_t mac_dest_mac1; + u_int8_t mac_dummy1; + u_int8_t mac_dummy2; + u_int8_t mac_dest_mac6; + u_int8_t mac_dest_mac5; + u_int8_t mac_dest_mac4; + u_int8_t mac_dest_mac3; + u_int8_t mac_src_mac4; + u_int8_t mac_src_mac3; + u_int8_t mac_src_mac2; + u_int8_t mac_src_mac1; + u_int16_t mac_ether_type; + u_int8_t mac_src_mac6; + u_int8_t mac_src_mac5; +} mac_header; + +typedef struct ip_header_struct { + u_int16_t ip_len; + u_int8_t ip_tos; + u_int8_t ip_ihl:4 ,ip_ver:4; + u_int16_t ip_offset:13,ip_flag:3; + u_int16_t ip_ident; + u_int16_t ip_chksum; + u_int8_t ip_protocol; + u_int8_t ip_ttl; + u_int32_t ip_sourceip; + u_int32_t ip_destip; +} ip_header; + +typedef struct udp_header_struct{ + u_int16_t udp_destport; + u_int16_t udp_srcport; + u_int16_t udp_chksum; + u_int16_t udp_len; +} udp_header; + +typedef struct mac_conf_struct{ + mac_header mac; + ip_header ip; + udp_header udp; + u_int32_t npack; + u_int32_t lpack; + u_int32_t npad; + u_int32_t cdone; +} mac_conf; + +typedef struct tse_conf_struct{ + u_int32_t rev; //0x0 + u_int32_t scratch; + u_int32_t command_config; + u_int32_t mac_0; //0x3 + u_int32_t mac_1; + u_int32_t frm_length; + u_int32_t pause_quant; + u_int32_t rx_section_empty; //0x7 + u_int32_t rx_section_full; + u_int32_t tx_section_empty; + u_int32_t tx_section_full; + u_int32_t rx_almost_empty; //0xB + u_int32_t rx_almost_full; + u_int32_t tx_almost_empty; + u_int32_t tx_almost_full; + u_int32_t mdio_addr0; //0xF + u_int32_t mdio_addr1; +}tse_conf; + + + +int mapCSP0(void) { + printf("Mapping memory\n"); +#ifndef VIRTUAL + int fd; + fd = open("/dev/mem", O_RDWR | O_SYNC, 0); + if (fd == -1) { + printf("\nCan't find /dev/mem!\n"); + return FAIL; + } + printf("/dev/mem opened\n"); + + CSP0BASE = (u_int32_t)mmap(0, MEM_SIZE, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, CSP0); + if (CSP0BASE == (u_int32_t)MAP_FAILED) { + printf("\nCan't map memmory area!!\n"); + return FAIL; + } + printf("CSP0 mapped\n"); + +#endif +#ifdef VIRTUAL + CSP0BASE = malloc(MEM_SIZE); + printf("memory allocated\n"); +#endif +#ifdef SHAREDMEMORY + if ( (res=inism(SMSV))<0) { + printf("error attaching shared memory! %i",res); + return FAIL; + } +#endif + printf("CSPObase is 0x%x \n",CSP0BASE); + printf("CSPOBASE=from %08x to %x\n",CSP0BASE,CSP0BASE+MEM_SIZE); + + u_int32_t address; + address = FIFO_DATA_REG_OFF; + values=(u_int16_t*)(CSP0BASE+address*2); + printf("statusreg=%08x\n",bus_r(STATUS_REG)); + printf("\n\n"); + return OK; +} + +u_int16_t bus_r16(u_int32_t offset){ + volatile u_int16_t *ptr1; + ptr1=(u_int16_t*)(CSP0BASE+offset*2); + return *ptr1; +} + +u_int16_t bus_w16(u_int32_t offset, u_int16_t data) { + volatile u_int16_t *ptr1; + ptr1=(u_int16_t*)(CSP0BASE+offset*2); + *ptr1=data; + return OK; +} + +/** ramType is DARK_IMAGE_REG or GAIN_IMAGE_REG */ +u_int16_t ram_w16(u_int32_t ramType, int adc, int adcCh, int Ch, u_int16_t data) { + unsigned int adr = (ramType | adc << 8 | adcCh << 5 | Ch ); + // printf("Writing to addr:%x\n",adr); + return bus_w16(adr,data); +} + +/** ramType is DARK_IMAGE_REG or GAIN_IMAGE_REG */ +u_int16_t ram_r16(u_int32_t ramType, int adc, int adcCh, int Ch){ + unsigned int adr = (ramType | adc << 8 | adcCh << 5 | Ch ); + // printf("Reading from addr:%x\n",adr); + return bus_r16(adr); +} + +u_int32_t bus_w(u_int32_t offset, u_int32_t data) { + volatile u_int32_t *ptr1; + + ptr1=(u_int32_t*)(CSP0BASE+offset*2); + *ptr1=data; + + return OK; +} + + +u_int32_t bus_r(u_int32_t offset) { + volatile u_int32_t *ptr1; + + ptr1=(u_int32_t*)(CSP0BASE+offset*2); + return *ptr1; +} + + +int setPhaseShiftOnce(){ + u_int32_t addr, reg; + int i; + addr=MULTI_PURPOSE_REG; + reg=bus_r(addr); +#ifdef VERBOSE + printf("Multipurpose reg:%x\n",reg); +#endif + + //Checking if it is power on(negative number) + // if(((reg&0xFFFF0000)>>16)>0){ + //bus_w(addr,0x0); //clear the reg + + if(reg==0){ + printf("\nImplementing phase shift of %d\n",phase_shift); + for (i=1;i0) { + bus_w(PLL_CNTRL_REG, 1);//reset PLL + bus_w(PLL_CNTRL_REG, 0); + phase_shift=0; + for (i=0;i1) nc=d;// nc=161/d; + else return -1; + + if (nc>255) + return -1; + + int addr, addr1, addr0; + u_int32_t pat,pat1,pat0; + + addr= PLL_PARAM_REG; + addr0= PLL_PARAM_OUT_REG; + addr1=PLL_CNTRL_REG; + pat1=0x10; + + + //write high count c0 +/* pat=(1<<12)|(7<<9)|nc; */ +/* bus_w(addr, pat); */ +/* bus_w(addr1, pat1); */ +/* bus_w(addr1, 0); */ +/* usleep (1000); */ +/* pat=bus_r(addr0); */ +/* bus_w(addr1, 0x4); */ +/* bus_w(addr1, 0); */ +/* pat=bus_r(addr0); */ +/* printf("M nominal count read %x (%d)\n",pat,(pat&0x1ff)); */ + + + + //write low count c0 + pat=(nc-1)|(4<<12)|(1<<9); + bus_w(addr, pat); + bus_w(addr1, pat1); + bus_w(addr1, 0); + pat0=bus_r(PLL_PARAM_OUT_REG); + usleep (1000); + printf("C0 low count status %x\n",pat0); + + //write high count c0 + pat=(nc)|(4<<12)|(0<<9); + bus_w(addr, pat); + bus_w(addr1, pat1); + bus_w(addr1, 0); + pat0=bus_r(PLL_PARAM_OUT_REG); + printf("C0 high count status %x\n",pat0); + usleep (1000); + + //write low count c1 + pat=(nc-1)|(5<<12)|(1<<9); + bus_w(addr, pat); + bus_w(addr1, pat1); + bus_w(addr1, 0); + pat0=bus_r(PLL_PARAM_OUT_REG); + printf("C1 high count status %x\n",pat0); + usleep (1000); + + //write high count c1 + pat=(nc)|(5<<12)|(0<<9); + bus_w(addr, pat); + bus_w(addr1, pat1); + bus_w(addr1, 0); + pat0=bus_r(PLL_PARAM_OUT_REG); + printf("C1 low count status %x\n",pat0); + usleep (1000); + + //reconfigure pll + pat1=0x8; + bus_w(addr1, pat1); + bus_w(addr1, 0); + pat0=bus_r(PLL_PARAM_OUT_REG); + printf("configure status %d\n",pat0); + sleep (1); + printf("finish status %x\n",pat0); + + + bus_w(PLL_CNTRL_REG, 1); //reset PLL + bus_w(PLL_CNTRL_REG, 0); + + return 0; +} + + + + +u_int32_t getClockDivider() { + + + + int ic=0; + + //reset pll_reconfig to initial values + bus_w(PLL_CNTRL_REG,(1<=0 && d<=255) + bus_w(OVERSAMPLING_REG, d); + + return bus_r(OVERSAMPLING_REG); +} + + +u_int32_t setWaitStates(int d1) { + return 0; +} + +u_int32_t getWaitStates() { + return 0; +} + + +u_int32_t setTotClockDivider(int d) { + return 0; +} + +u_int32_t getTotClockDivider() { + return 0; +} + + +u_int32_t setTotDutyCycle(int d) { + return 0; +} + +u_int32_t getTotDutyCycle() { + return 0; +} + + +u_int32_t setExtSignal(int d, enum externalSignalFlag mode) { + + //int modes[]={EXT_SIG_OFF, EXT_GATE_IN_ACTIVEHIGH, EXT_GATE_IN_ACTIVELOW,EXT_TRIG_IN_RISING,EXT_TRIG_IN_FALLING,EXT_RO_TRIG_IN_RISING, EXT_RO_TRIG_IN_FALLING,EXT_GATE_OUT_ACTIVEHIGH, EXT_GATE_OUT_ACTIVELOW, EXT_TRIG_OUT_RISING, EXT_TRIG_OUT_FALLING, EXT_RO_TRIG_OUT_RISING, EXT_RO_TRIG_OUT_FALLING}; + // int off=d*SIGNAL_OFFSET; + + u_int32_t c; + c=bus_r(EXT_SIGNAL_REG); + + if (d>=0 && d<4) { + signals[d]=mode; +#ifdef VERBOSE + printf("settings signal variable number %d to value %04x\n", d, signals[d]); +#endif + + // if output signal, set it! + + switch (mode) { + case GATE_IN_ACTIVE_HIGH: + case GATE_IN_ACTIVE_LOW: + if (timingMode==GATE_FIX_NUMBER || timingMode==GATE_WITH_START_TRIGGER) + setFPGASignal(d,mode); + else + setFPGASignal(d,SIGNAL_OFF); + break; + case TRIGGER_IN_RISING_EDGE: + case TRIGGER_IN_FALLING_EDGE: + if (timingMode==TRIGGER_EXPOSURE || timingMode==GATE_WITH_START_TRIGGER) + setFPGASignal(d,mode); + else + setFPGASignal(d,SIGNAL_OFF); + break; + case RO_TRIGGER_IN_RISING_EDGE: + case RO_TRIGGER_IN_FALLING_EDGE: + if (timingMode==TRIGGER_READOUT) + setFPGASignal(d,mode); + else + setFPGASignal(d,SIGNAL_OFF); + break; + case MASTER_SLAVE_SYNCHRONIZATION: + setSynchronization(syncMode); + break; + default: + setFPGASignal(d,mode); + break; + } + + setTiming(GET_EXTERNAL_COMMUNICATION_MODE); + } + + +// if (mode<=RO_TRIGGER_OUT_FALLING_EDGE && mode>=0) +// bus_w(EXT_SIGNAL_REG,((modes[mode])<=0) { +#ifdef VERBOSE + printf("writing signal register number %d mode %04x\n",d, modes[mode]); +#endif + bus_w(EXT_SIGNAL_REG,((modes[mode])<>off); + + if (mode=0 && d<4) { +#ifdef VERBOSE + printf("gettings signal variable number %d value %04x\n", d, signals[d]); +#endif + return signals[d]; + } else + return -1; + + +} + + +int getFPGASignal(int d) { + + int modes[]={SIGNAL_OFF, GATE_IN_ACTIVE_HIGH, GATE_IN_ACTIVE_LOW,TRIGGER_IN_RISING_EDGE, TRIGGER_IN_FALLING_EDGE,RO_TRIGGER_IN_RISING_EDGE, RO_TRIGGER_IN_FALLING_EDGE, GATE_OUT_ACTIVE_HIGH, GATE_OUT_ACTIVE_LOW, TRIGGER_OUT_RISING_EDGE, TRIGGER_OUT_FALLING_EDGE, RO_TRIGGER_OUT_RISING_EDGE,RO_TRIGGER_OUT_FALLING_EDGE}; + + int off=d*SIGNAL_OFFSET; + int mode=((bus_r(EXT_SIGNAL_REG)&(SIGNAL_MASK<>off); + + if (mode<=RO_TRIGGER_OUT_FALLING_EDGE) { + if (modes[mode]!=SIGNAL_OFF && signals[d]!=MASTER_SLAVE_SYNCHRONIZATION) + signals[d]=modes[mode]; +#ifdef VERYVERBOSE + printf("gettings signal register number %d value %04x\n", d, modes[mode]); +#endif + return modes[mode]; + } else + return -1; + +} + + + + + +/* +enum externalCommunicationMode{ + GET_EXTERNAL_COMMUNICATION_MODE, + AUTO, + TRIGGER_EXPOSURE_SERIES, + TRIGGER_EXPOSURE_BURST, + TRIGGER_READOUT, + TRIGGER_COINCIDENCE_WITH_INTERNAL_ENABLE, + GATE_FIX_NUMBER, + GATE_FIX_DURATION, + GATE_WITH_START_TRIGGER, + GATE_COINCIDENCE_WITH_INTERNAL_ENABLE +}; +*/ + + +int setTiming(int ti) { + + + int ret=GET_EXTERNAL_COMMUNICATION_MODE; + + int g=-1, t=-1, rot=-1; + + int i; + + switch (ti) { + case AUTO_TIMING: + timingMode=ti; + // disable all gates/triggers in except if used for master/slave synchronization + for (i=0; i<4; i++) { + if (getFPGASignal(i)>0 && getFPGASignal(i)=0 && t>=0 && rot<0) { + ret=GATE_WITH_START_TRIGGER; + } else if (g<0 && t>=0 && rot<0) { + ret=TRIGGER_EXPOSURE; + } else if (g>=0 && t<0 && rot<0) { + ret=GATE_FIX_NUMBER; + } else if (g<0 && t<0 && rot>0) { + ret=TRIGGER_READOUT; + } else if (g<0 && t<0 && rot<0) { + ret=AUTO_TIMING; + } + + // timingMode=ret; + + return ret; + +} + + + +int setConfigurationRegister(int d) { +#ifdef VERBOSE + printf("Setting configuration register to %x",d); +#endif + if (d>=0) { + bus_w(CONFIG_REG,d); + } +#ifdef VERBOSE + printf("configuration register is %x", bus_r(CONFIG_REG)); +#endif + return bus_r(CONFIG_REG); +} + +int setToT(int d) { + //int ret=0; + int reg; +#ifdef VERBOSE + printf("Setting ToT to %d\n",d); +#endif + reg=bus_r(CONFIG_REG); +#ifdef VERBOSE + printf("Before: ToT is %x\n", reg); +#endif + if (d>0) { + bus_w(CONFIG_REG,reg|TOT_ENABLE_BIT); + } else if (d==0) { + bus_w(CONFIG_REG,reg&(~TOT_ENABLE_BIT)); + } + reg=bus_r(CONFIG_REG); +#ifdef VERBOSE + printf("ToT is %x\n", reg); +#endif + if (reg&TOT_ENABLE_BIT) + return 1; + else + return 0; +} + +int setContinousReadOut(int d) { + //int ret=0; + int reg; +#ifdef VERBOSE + printf("Setting Continous readout to %d\n",d); +#endif + reg=bus_r(CONFIG_REG); +#ifdef VERBOSE + printf("Before: Continous readout is %x\n", reg); +#endif + if (d>0) { + bus_w(CONFIG_REG,reg|CONT_RO_ENABLE_BIT); + } else if (d==0) { + bus_w(CONFIG_REG,reg&(~CONT_RO_ENABLE_BIT)); + } + reg=bus_r(CONFIG_REG); +#ifdef VERBOSE + printf("Continous readout is %x\n", reg); +#endif + if (reg&CONT_RO_ENABLE_BIT) + return 1; + else + return 0; +} + + +int startReceiver(int start) { + u_int32_t addr=CONFIG_REG; +#ifdef VERBOSE + if(start) + printf("Setting up detector to send to Receiver\n"); + else + printf("Setting up detector to send to CPU\n"); +#endif + int reg=bus_r(addr); + //for start recever, write 0 and for stop, write 1 + if (!start) + bus_w(CONFIG_REG,reg|CPU_OR_RECEIVER_BIT); + else + bus_w(CONFIG_REG,reg&(~CPU_OR_RECEIVER_BIT)); + + reg=bus_r(addr); +//#ifdef VERBOSE + printf("Config Reg %x\n", reg); +//#endif + int d =reg&CPU_OR_RECEIVER_BIT; + if(d!=0) d=1; + if(d!=start) + return OK; + else + return FAIL; +} + + +u_int64_t getDetectorNumber() { + char output[255],mac[255]=""; + u_int64_t res=0; + FILE* sysFile = popen("ifconfig eth0 | grep HWaddr | cut -d \" \" -f 11", "r"); + fgets(output, sizeof(output), sysFile); + pclose(sysFile); + //getting rid of ":" + char * pch; + pch = strtok (output,":"); + while (pch != NULL){ + strcat(mac,pch); + pch = strtok (NULL, ":"); + } + sscanf(mac,"%llx",&res); + return res; +} + +u_int32_t getFirmwareVersion() { + return bus_r(FPGA_VERSION_REG); +} + +u_int32_t getFirmwareSVNVersion(){ + return bus_r(FPGA_SVN_REG); +} + + +// for fpga test +u_int32_t testFpga(void) { + printf("Testing FPGA:\n"); + volatile u_int32_t val,addr,val2; + int result=OK,i; + //fixed pattern + val=bus_r(FIX_PATT_REG); + if (val==FIXED_PATT_VAL) { + printf("fixed pattern ok!! %08x\n",val); + } else { + printf("fixed pattern wrong!! %08x\n",val); + result=FAIL; + } + + //dummy register + addr = DUMMY_REG; + for(i=0;i<1000000;i++) + { + val=0x5A5A5A5A-i; + bus_w(addr, val); + val=bus_r(addr); + if (val!=0x5A5A5A5A-i) { + printf("ATTEMPT:%d:\tFPGA dummy register wrong!! %x instead of %x \n",i,val,0x5A5A5A5A-i); + result=FAIL; + } + val=(i+(i<<10)+(i<<20)); + bus_w(addr, val); + val2=bus_r(addr); + if (val2!=val) { + printf("ATTEMPT:%d:\tFPGA dummy register wrong!! read %x instead of %x.\n",i,val2,val); + result=FAIL; + } + val=0x0F0F0F0F; + bus_w(addr, val); + val=bus_r(addr); + if (val!=0x0F0F0F0F) { + printf("ATTEMPT:%d:\tFPGA dummy register wrong!! %x instead of 0x0F0F0F0F \n",i,val); + result=FAIL; + } + val=0xF0F0F0F0; + bus_w(addr, val); + val=bus_r(addr); + if (val!=0xF0F0F0F0) { + printf("ATTEMPT:%d:\tFPGA dummy register wrong!! %x instead of 0xF0F0F0F0 \n\n",i,val); + result=FAIL; + } + } + if(result==OK) + { + printf("----------------------------------------------------------------------------------------------"); + printf("\nATTEMPT 1000000: FPGA DUMMY REGISTER OK!!!\n"); + printf("----------------------------------------------------------------------------------------------"); + } + printf("\n"); + return result; +} + + +// for fpga test +u_int32_t testRAM(void) { + int result=OK; + int i=0; + allocateRAM(); + // while(i<100000) { + memcpy(ram_values, values, dataBytes); + printf ("Testing RAM:\t%d: copied fifo %x to memory %x size %d\n",i++, (unsigned int)(values), (unsigned int)(ram_values), dataBytes); + // } + return result; +} + +int getNModBoard() { + return nModX; +} + +int setNMod(int n) { + return nModX; +} + + +// fifo test +int testFifos(void) { + printf("Fifo test not implemented!\n"); + bus_w16(CONTROL_REG, START_FIFOTEST_BIT); + bus_w16(CONTROL_REG, 0x0); + return OK; +} + + + +// program dacq settings + +int64_t set64BitReg(int64_t value, int aLSB, int aMSB){ + int64_t v64; + u_int32_t vLSB,vMSB; + if (value!=-1) { + vLSB=value&(0xffffffff); + bus_w(aLSB,vLSB); + v64=value>> 32; + vMSB=v64&(0xffffffff); + bus_w(aMSB,vMSB); + } + return get64BitReg(aLSB, aMSB); + +} + +int64_t get64BitReg(int aLSB, int aMSB){ + int64_t v64; + u_int32_t vLSB,vMSB; + vLSB=bus_r(aLSB); + vMSB=bus_r(aMSB); + v64=vMSB; + v64=(v64<<32) | vLSB; + + printf("reg64(%x,%x) %x %x %llx\n", aLSB, aMSB, vLSB, vMSB, v64); + + return v64; +} + +int64_t setFrames(int64_t value){ + return set64BitReg(value, SET_FRAMES_LSB_REG, SET_FRAMES_MSB_REG); +} + +int64_t getFrames(){ + printf("gf"); + return get64BitReg(GET_FRAMES_LSB_REG, GET_FRAMES_MSB_REG); +} + +int64_t setExposureTime(int64_t value){ + /* time is in ns */ + if (value!=-1) + value*=(1E-9*CLK_FREQ); + return set64BitReg(value,SET_EXPTIME_LSB_REG, SET_EXPTIME_MSB_REG)/(1E-9*CLK_FREQ); +} + +int64_t getExposureTime(){ + return get64BitReg(GET_EXPTIME_LSB_REG, GET_EXPTIME_MSB_REG)/(1E-9*CLK_FREQ); +} + +int64_t setGates(int64_t value){ + return set64BitReg(value, SET_GATES_LSB_REG, SET_GATES_MSB_REG); +} + +int64_t getGates(){ + return get64BitReg(GET_GATES_LSB_REG, GET_GATES_MSB_REG); +} + +int64_t setPeriod(int64_t value){ + /* time is in ns */ + if (value!=-1) { + value*=(1E-9*CLK_FREQ); + } + + + + return set64BitReg(value,SET_PERIOD_LSB_REG, SET_PERIOD_MSB_REG)/(1E-9*CLK_FREQ); +} + +int64_t getPeriod(){ + return get64BitReg(GET_PERIOD_LSB_REG, GET_PERIOD_MSB_REG)/(1E-9*CLK_FREQ); +} + +int64_t setDelay(int64_t value){ + /* time is in ns */ + if (value!=-1) { + value*=(1E-9*CLK_FREQ); + } + return set64BitReg(value,SET_DELAY_LSB_REG, SET_DELAY_MSB_REG)/(1E-9*CLK_FREQ); +} + +int64_t getDelay(){ + return get64BitReg(GET_DELAY_LSB_REG, GET_DELAY_MSB_REG)/(1E-9*CLK_FREQ); +} + +int64_t setTrains(int64_t value){ + return set64BitReg(value, SET_CYCLES_LSB_REG, SET_CYCLES_MSB_REG); +} + +int64_t getTrains(){ + return get64BitReg(GET_CYCLES_LSB_REG, GET_CYCLES_MSB_REG); +} + + +int64_t setProbes(int64_t value){ + return 0; +} + + +int64_t setProgress() { + + //????? eventually call after setting the registers + +return 0; + +} + + +int64_t getProgress() { + + + //should be done in firmware!!!! + + return 0; + +} + +int64_t getActualTime(){ + return get64BitReg(GET_ACTUAL_TIME_LSB_REG, GET_ACTUAL_TIME_MSB_REG)/(1E-9*CLK_FREQ); +} + +int64_t getMeasurementTime(){ + int64_t v=get64BitReg(GET_MEASUREMENT_TIME_LSB_REG, GET_MEASUREMENT_TIME_MSB_REG); + int64_t mask=0x8000000000000000; + if (v & mask ) { +#ifdef VERBOSE + printf("no measurement time left\n"); +#endif + return -1E+9; + } else + return v/(1E-9*CLK_FREQ); +} + + + + +int loadImage(int index, short int ImageVals[]){ + u_int32_t address; + switch (index) { + case DARK_IMAGE : + address = DARK_IMAGE_REG; + break; + case GAIN_IMAGE : + address = GAIN_IMAGE_REG; + break; + } + volatile u_int16_t *ptr; + ptr=(u_int16_t*)(CSP0BASE+address*2); +#ifdef VERBOSE + int i; + for(i=0;i<6;i++) + printf("%d:%d\t",i,ImageVals[i]); +#endif + memcpy(ptr,ImageVals ,dataBytes); +#ifdef VERBOSE + printf("\nLoaded x%08x address with image of index %d\n",(unsigned int)(ptr),index); +#endif + return OK; +} + + + +int64_t getProbes(){ + return 0; +} + + +int setDACRegister(int idac, int val, int imod) { + u_int32_t addr, reg, mask; + int off; +#ifdef VERBOSE + if(val==-1) + printf("Getting dac register%d module %d\n",idac,imod); + else + printf("Setting dac register %d module %d to %d\n",idac,imod,val); +#endif + + switch(idac){ + case 0: + case 1: + case 2: + addr=MOD_DACS1_REG; + break; + case 3: + case 4: + case 5: + addr=MOD_DACS2_REG; + break; + case 6: + case 7: + addr=MOD_DACS3_REG; + break; + default: + printf("weird idac value %d\n",idac); + return -1; + break; + } + //saving only the msb + val=val>>2; + + off=(idac%3)*10; + mask=~((0x3ff)<=0 && val>off)&0x3ff; + //since we saved only the msb + val=val<<2; + + //val=(bus_r(addr)>>off)&0x3ff; + + +#ifdef VERBOSE + printf("Dac %d module %d register is %d\n\n",idac,imod,val); +#endif + return val; +} + + +int getTemperature(int tempSensor, int imod){ + int val; + imod=0;//ignoring more than 1 mod for now + int i,j,repeats=6; + u_int32_t tempVal=0; +#ifdef VERBOSE + char cTempSensor[2][100]={"ADCs/ASICs","VRs/FPGAs"}; + printf("Getting Temperature of module:%d for the %s for tempsensor:%d\n",imod,cTempSensor[tempSensor],tempSensor); +#endif + bus_w(TEMP_IN_REG,(T1_CLK_BIT)|(T1_CS_BIT)|(T2_CLK_BIT)|(T2_CS_BIT));//standby + bus_w(TEMP_IN_REG,((T1_CLK_BIT)&~(T1_CS_BIT))|(T2_CLK_BIT));//high clk low cs + + for(i=0;i<20;i++) { + //repeats is number of register writes for delay + for(j=0;j>1);//fpga + } + } + + bus_w(TEMP_IN_REG,(T1_CLK_BIT)|(T1_CS_BIT)|(T2_CLK_BIT)|(T2_CS_BIT));//standby + val=((int)tempVal)/4.0; + +#ifdef VERBOSE + printf("Temperature of module:%d for the %s is %.2fC\n",imod,cTempSensor[tempSensor],val); +#endif + return val; +} + + + +int initHighVoltage(int val, int imod){ +#ifdef VERBOSE + printf("Setting/Getting High Voltage of module:%d with val:%d\n",imod,val); +#endif + volatile u_int32_t addr=HV_REG; + int writeVal,writeVal2; + switch(val){ + case -1: break; + case 0: writeVal=0x0; writeVal2=0x0; break; + case 90: writeVal=0x0; writeVal2=0x1; break; + case 110:writeVal=0x2; writeVal2=0x3; break; + case 120:writeVal=0x4; writeVal2=0x5; break; + case 150:writeVal=0x6; writeVal2=0x7; break; + case 180:writeVal=0x8; writeVal2=0x9; break; + case 200:writeVal=0xA; writeVal2=0xB; break; + default :printf("Invalid voltage\n");return -2;break; + } + //to set value + if(val!=-1){ + //set value to converted value + bus_w(addr,writeVal); + bus_w(addr,writeVal2); +#ifdef VERBOSE + printf("Value sent is %d and then %d\n",writeVal,writeVal2); +#endif + } + //read value and return the converted value + val=bus_r(addr); +#ifdef VERBOSE + printf("Value read from reg is %d\n",val); +#endif + switch(val){ + case 0x0:val=0;break; + case 0x1:val=90;break; + case 0x3:val=110;break; + case 0x5:val=120;break; + case 0x7:val=150;break; + case 0x9:val=180;break; + case 0xB:val=200;break; + default:printf("Weird value read:%d\n",val);return -3;break; + } +#ifdef VERBOSE + printf("High voltage of module:%d is %d\n",imod,val); +#endif + return val; +} + + + +int initConfGain(int isettings,int val,int imod){ + int retval; + u_int32_t addr=GAIN_REG; + + if(val!=-1){ +#ifdef VERBOSE + printf("Setting Gain of module:%d with val:%d\n",imod,val); +#endif + bus_w(addr,((val<>SETTINGS_OFFSET); +#ifdef VERBOSE + printf("Settings read from reg is %d\n",retval); +#endif + if((isettings!=-1)&&(retval!=isettings)){ + printf("\n\nSettings r\n\n"); + return -1; + } + + return retval; +} + + + +int setADC(int adc){ + int reg,nchips,mask,nchans; + + if(adc==-1) ROI_flag=0; + else ROI_flag=1; + + setDAQRegister();//token timing + cleanFifo();//adc sync + + //with gotthard module + if(withGotthard){ + //set packet size + ipPacketSize= DEFAULT_IP_PACKETSIZE; + udpPacketSize=DEFAULT_UDP_PACKETSIZE; + //set channel mask + nchips = GOTTHARDNCHIP; + nchans = GOTTHARDNCHAN; + mask = ACTIVE_ADC_MASK; + } + + //with moench module all adc + else{/* if(adc==-1){*/ + //set packet size + ipPacketSize= DEFAULT_IP_PACKETSIZE; + udpPacketSize=DEFAULT_UDP_PACKETSIZE; + //set channel mask + nchips = NCHIP; + nchans = NCHANS; + mask = ACTIVE_ADC_MASK; + }/* + //with moench module 1 adc -- NOT IMPLEMENTED + else{ + ipPacketSize= ADC1_IP_PACKETSIZE; + udpPacketSize=ADC1_UDP_PACKETSIZE; + //set channel mask + nchips = NCHIPS_PER_ADC; + nchans = GOTTHARDNCHAN; + mask = 1<mac.mac_dest_mac1 =((macad>>(8*5))&0xFF);// 0x00; //pc7060 + mac_conf_regs->mac.mac_dest_mac2 =((macad>>(8*4))&0xFF);// 0x19; //pc7060 + mac_conf_regs->mac.mac_dest_mac3 =((macad>>(8*3))&0xFF);// 0x99; //pc7060 + mac_conf_regs->mac.mac_dest_mac4 =((macad>>(8*2))&0xFF);// 0x24; //pc7060 + mac_conf_regs->mac.mac_dest_mac5 =((macad>>(8*1))&0xFF);// 0xEB; //pc7060 + mac_conf_regs->mac.mac_dest_mac6 =((macad>>(8*0))&0xFF);// 0xEE; //pc7060 + + /* + mac_conf_regs->mac.mac_src_mac1 = 0x00; + mac_conf_regs->mac.mac_src_mac2 = 0xAA; + mac_conf_regs->mac.mac_src_mac3 = 0xBB; + mac_conf_regs->mac.mac_src_mac4 = 0xCC; + mac_conf_regs->mac.mac_src_mac5 = 0xDD; + mac_conf_regs->mac.mac_src_mac6 = 0xEE; + */ + mac_conf_regs->mac.mac_src_mac1 =((detectormacad>>(8*5))&0xFF); + mac_conf_regs->mac.mac_src_mac2 =((detectormacad>>(8*4))&0xFF); + mac_conf_regs->mac.mac_src_mac3 =((detectormacad>>(8*3))&0xFF); + mac_conf_regs->mac.mac_src_mac4 =((detectormacad>>(8*2))&0xFF); + mac_conf_regs->mac.mac_src_mac5 =((detectormacad>>(8*1))&0xFF); + mac_conf_regs->mac.mac_src_mac6 =((detectormacad>>(8*0))&0xFF); + mac_conf_regs->mac.mac_ether_type = 0x0800; //ipv4 + + + + mac_conf_regs->ip.ip_ver = 0x4; + mac_conf_regs->ip.ip_ihl = 0x5; + mac_conf_regs->ip.ip_tos = 0x0; + mac_conf_regs->ip.ip_len = ipPacketSize;//0x0522; // was 0x0526; + mac_conf_regs->ip.ip_ident = 0x0000; + mac_conf_regs->ip.ip_flag = 0x2; + mac_conf_regs->ip.ip_offset = 0x00; + mac_conf_regs->ip.ip_ttl = 0x70; + mac_conf_regs->ip.ip_protocol = 0x11; + mac_conf_regs->ip.ip_chksum = 0x0000 ; //6E42 now is automatically computed + mac_conf_regs->ip.ip_sourceip = detipad; //0x8181CA2E;129.129.202.46 + mac_conf_regs->ip.ip_destip = ipad; //CA57 + + //#ifdef VERBOSE + printf("mac_dest:%llx %x:%x:%x:%x:%x:%x\n", + macad, + mac_conf_regs->mac.mac_dest_mac1, + mac_conf_regs->mac.mac_dest_mac2, + mac_conf_regs->mac.mac_dest_mac3, + mac_conf_regs->mac.mac_dest_mac4, + mac_conf_regs->mac.mac_dest_mac5, + mac_conf_regs->mac.mac_dest_mac6); + printf("mac_src:%llx %x:%x:%x:%x:%x:%x\n", + detectormacad, + mac_conf_regs->mac.mac_src_mac1, + mac_conf_regs->mac.mac_src_mac2, + mac_conf_regs->mac.mac_src_mac3, + mac_conf_regs->mac.mac_src_mac4, + mac_conf_regs->mac.mac_src_mac5, + mac_conf_regs->mac.mac_src_mac6); + printf("ip_ttl:%x\n",mac_conf_regs->ip.ip_ttl); + printf("det_ip: %x %x\n",detipad, mac_conf_regs->ip.ip_sourceip); + printf("dest_ip: %x %x\n",ipad, mac_conf_regs->ip.ip_destip); + + //#endif + + //checksum + count=sizeof(mac_conf_regs->ip); + addr=&(mac_conf_regs->ip); + while( count > 1 ) { + sum += *addr++; + count -= 2; + } + if( count > 0 ) sum += *addr; // Add left-over byte, if any + while (sum>>16) sum = (sum & 0xffff) + (sum >> 16);// Fold 32-bit sum to 16 bits + checksum = (~sum)&0xffff; + mac_conf_regs->ip.ip_chksum = checksum; + //#ifdef VERBOSE + printf("IP header checksum is 0x%x s\n",(unsigned int)(checksum)); + //#endif + + mac_conf_regs->udp.udp_srcport = 0xE185; + mac_conf_regs->udp.udp_destport = udpport;//0xC351; + mac_conf_regs->udp.udp_len = udpPacketSize;//0x050E; //was 0x0512; + mac_conf_regs->udp.udp_chksum = 0x0000; + +#ifdef VERBOSE + printf("Configuring TSE\n"); +#endif + tse_conf_regs->rev = 0xA00; + tse_conf_regs->scratch = 0xCCCCCCCC; + tse_conf_regs->command_config = 0xB; + tse_conf_regs->mac_0 = 0x17231C00; + tse_conf_regs->mac_1 = 0xCB4A; + tse_conf_regs->frm_length = 0x5DC; //max frame length (1500 bytes) (was 0x41C) + tse_conf_regs->pause_quant = 0x0; + tse_conf_regs->rx_section_empty = 0x7F0; + tse_conf_regs->rx_section_full = 0x10; + tse_conf_regs->tx_section_empty = 0x3F8; //was 0x7F0; + tse_conf_regs->tx_section_full = 0x16; + tse_conf_regs->rx_almost_empty = 0x8; + tse_conf_regs->rx_almost_full = 0x8; + tse_conf_regs->tx_almost_empty = 0x8; + tse_conf_regs->tx_almost_full = 0x3; + tse_conf_regs->mdio_addr0 = 0x12; + tse_conf_regs->mdio_addr1 = 0x0; + + mac_conf_regs->cdone = 0xFFFFFFFF; + + + if(ival) + bus_w(addrr,(INT_RSTN_BIT|ENET_RESETN_BIT|WRITE_BACK_BIT|DIGITAL_TEST_BIT)); //0x2840,write shadow regs.. + else + bus_w(addrr,(INT_RSTN_BIT|ENET_RESETN_BIT|WRITE_BACK_BIT)); //0x2840,write shadow regs.. + + val=bus_r(addrr); +#ifdef VERBOSE + printf("Value read from Multi-purpose Reg:%x\n",val); +#endif + // if(val!=0x2840) return -1; + + usleep(100000); + + if(ival) + bus_w(addrr,(INT_RSTN_BIT|ENET_RESETN_BIT|SW1_BIT|DIGITAL_TEST_BIT)); //0x2820,write shadow regs.. + else + bus_w(addrr,(INT_RSTN_BIT|ENET_RESETN_BIT|SW1_BIT)); //0x2820,write shadow regs.. + + val=bus_r(addrr); +#ifdef VERBOSE + printf("Value read from Multi-purpose Reg:%x\n",val); +#endif + // if(val!=0x2820) return -1; + + + + + return adcConfigured; +} + + +int getAdcConfigured(){ + return adcConfigured; +} + +u_int32_t runBusy(void) { + u_int32_t s = bus_r(STATUS_REG) & 1; +#ifdef VERBOSE + printf("status %04x\n",s); +#endif + return s; +} + +u_int32_t dataPresent(void) { + return bus_r(LOOK_AT_ME_REG); +} + +u_int32_t runState(void) { + int s=bus_r(STATUS_REG); +#ifdef SHAREDMEMORY + if (s&RUN_BUSY_BIT) + write_status_sm("Running"); + else + write_status_sm("Stopped"); +#endif +#ifdef VERBOSE + printf("status %04x\n",s); +#endif + +/* if (s==0x62001) + exit(-1);*/ + return s; +} + + +// State Machine + +int startStateMachine(){ +int i; +//#ifdef VERBOSE + printf("*******Starting State Machine*******\n"); +//#endif + cleanFifo(); + // fifoReset(); + now_ptr=(char*)ram_values; +#ifdef SHAREDMEMORY + write_stop_sm(0); + write_status_sm("Started"); +#endif + + + for(i=0;i<100;i++){ + //start state machine + bus_w16(CONTROL_REG, START_ACQ_BIT | START_EXPOSURE_BIT); + bus_w16(CONTROL_REG, 0x0); + //verify + if(bus_r(STATUS_REG) & RUN_BUSY_BIT) + break; + else + usleep(5000); + } + if(i!=0) + printf("tried to start state machine %d times\n",i); + if(i==100){ + printf("\n***********COULD NOT START STATE MACHINE***************\n"); + return FAIL; + } + + printf("statusreg=%08x\n",bus_r(STATUS_REG)); + return OK; +} + + + + +int stopStateMachine(){ + int i; +//#ifdef VERBOSE + printf("*******Stopping State Machine*******\n"); +//#endif +#ifdef SHAREDMEMORY + write_stop_sm(1); + write_status_sm("Stopped"); +#endif + for(i=0;i<100;i++){ + //stop state machine + bus_w16(CONTROL_REG, STOP_ACQ_BIT); + bus_w16(CONTROL_REG, 0x0); + usleep(5000); + //verify + if(!(bus_r(STATUS_REG)&RUNMACHINE_BUSY_BIT)) + break; + } + if(i!=0) + printf("tried to stop state machine %d times\n",i); + if(i==100){ + printf("\n***********COULD NOT STOP STATE MACHINE***************\n"); + return FAIL; + } + +/* + usleep(5000); + // if (!runBusy()) + if(!(bus_r(STATUS_REG)&RUNMACHINE_BUSY_BIT)) + return OK; + else + return FAIL; + */ + printf("statusreg=%08x\n",bus_r(STATUS_REG)); + return OK; +} + + +int startReadOut(){ + u_int32_t status; +#ifdef VERBOSE + printf("Starting State Machine Readout\n"); +#endif + status=bus_r(STATUS_REG)&RUN_BUSY_BIT; +#ifdef DEBUG + printf("State machine status is %08x\n",bus_r(STATUS_REG)); +#endif + bus_w16(CONTROL_REG, START_ACQ_BIT |START_READOUT_BIT); // start readout + bus_w16(CONTROL_REG, 0x0); + return OK; +} + + +// fifo routines + +u_int32_t fifoReset(void) { + return -1; +} + + +u_int32_t setNBits(u_int32_t n) { + return -1; +} + +u_int32_t getNBits(){ + return -1; +} + + +u_int32_t fifoReadCounter(int fifonum){ + return -1; +} + +u_int32_t fifoReadStatus() +{ + // reads from the global status register + + return bus_r(STATUS_REG)&(SOME_FIFO_FULL_BIT | ALL_FIFO_EMPTY_BIT); +} + +u_int32_t fifo_full(void) +{ + // checks fifo empty flag returns 1 if fifo is empty + // otherwise 0 + return bus_r(STATUS_REG)&SOME_FIFO_FULL_BIT; +} + + +u_int32_t* fifo_read_event() +{ + + int i=0; + +#ifdef VIRTUAL + return NULL; +#endif + +#ifdef VERBOSE + printf("before looping\n"); +#endif + volatile u_int32_t t = bus_r(LOOK_AT_ME_REG); + +#ifdef VERBOSE + printf("lookatmereg=x%x\n",t); +#endif +/* + while ((t&0x1)==0) + { + t = bus_r(LOOK_AT_ME_REG); + if (!runBusy()){ + return NULL; + } + } +*/ + + while((t&0x1)==0) { +#ifdef VERYVERBOSE + printf("before readout %08x %08x\n", runState(), bus_r(LOOK_AT_ME_REG)); +#endif +#ifdef VERYVERBOSE + printf("look at me reg:%08x\n",bus_r(LOOK_AT_ME_REG)); +#endif + if (runBusy()==0) { + t = bus_r(LOOK_AT_ME_REG); +#ifdef VERYVERBOSE + printf("status should be idle!..look at me reg:%08x\n",bus_r(LOOK_AT_ME_REG)); +#endif + if ((t&0x1)==0) { +#ifdef VERBOSE + printf("no frame found - exiting\n"); + printf("%08x %08x\n", runState(), bus_r(LOOK_AT_ME_REG)); +#endif +#ifdef VERYVERBOSE + printf("returning null\n"); +#endif + printf("lookatmereg=x%x\n",t); + return NULL; + } else { +#ifdef VERBOSE + printf("no frame found %x status %x\n", bus_r(LOOK_AT_ME_REG),runState()); +#endif + break; + } + } + t = bus_r(LOOK_AT_ME_REG); +#ifdef VERYVERBOSE + printf("before starting while loop again: look at me reg:%08x\n\n",bus_r(LOOK_AT_ME_REG)); +#endif + if (i%1000==0) + printf("%08x %08x\n", runState(), bus_r(LOOK_AT_ME_REG)); + i++; + } +#ifdef VERYVERBOSE + printf(" out of while loop!\n"); +#endif +#ifdef VERYVERBOSE + printf("before readout %08x %08x\n", runState(), bus_r(LOOK_AT_ME_REG)); +#endif + + dma_memcpy(now_ptr,values ,dataBytes); + + +#ifdef VERYVERBOSE + int a; + for (a=0;a<8; a=a+2) + printf("\n%d %d: x%04x x%04x ",a+1,a,*(now_ptr+a+1),*(now_ptr+a) ); + for (a=2554;a<2560; a=a+2) + printf("\n%d %d: x%04x x%04x ",a+1,a,*(now_ptr+a+1),*(now_ptr+a) ); + printf("********\n"); + //memcpy(now_ptr, values, dataBytes); +#endif +#ifdef VERYVERBOSE + printf("Copying to ptr %08x %d\n",(unsigned int)(now_ptr), dataBytes); + printf("after readout %08x %08x\n", runState(), bus_r(LOOK_AT_ME_REG)); +#endif + + if (storeInRAM>0) { + now_ptr+=dataBytes; + } + printf("lookatmereg=x%x\n",t); + return ram_values; +} + + + +u_int32_t* decode_data(int *datain) +{ + u_int32_t *dataout; + // const char one=1; + const int bytesize=8; + char *ptr=(char*)datain; + //int nbits=dynamicRange; + int ipos=0, ichan=0;; + //int nch, boff=0; + int ibyte;//, ibit; + char iptr; + +#ifdef VERBOSE + printf("Decoding data for DR %d\n",dynamicRange); +#endif + dataout=malloc(nChans*nChips*nModX*4); + ichan=0; + switch (dynamicRange) { + case 1: + for (ibyte=0; ibyte>(ipos))&0x1; + ichan++; + } + } + break; + case 4: + for (ibyte=0; ibyte>(ipos*4))&0xf; + ichan++; + } + } + break; + case 8: + for (ichan=0; ichan0) + storeInRAM=1; + else + storeInRAM=0; + return allocateRAM(); +} + + +int allocateRAM() { + size_t size; + u_int32_t nt, nf; + nt=setTrains(-1); + nf=setFrames(-1); + if (nt==0) nt=1; + if (nf==0) nf=1; + // ret=clearRAM(); + if (storeInRAM) { + size=dataBytes*nf*nt; + if (size>(23-i))&0x1)<> 8); + // printf("%i: %i %i\n",a, frame[a],v); + avg[a] += ((double)frame[a])/(double)frames; + //if(frame[a] == 8191) + // printf("ch %i: %u\n",a,frame[a]); + } + // printf("********\n"); + numberFrames++; + } + + //no more data or no data + else { + if(getFrames()>-2) { + dataret=FAIL; + printf("no data and run stopped: %d frames left\n",(int)(getFrames()+2)); + + } else { + dataret=FINISHED; + printf("acquisition successfully finished\n"); + + } + printf("dataret %d\n",dataret); + } + } + + + + double nf = (double)numberFrames; + for(i =0; i < 1280; i++){ + adc = i / 256; + adcCh = (i - adc * 256) / 32; + Ch = i - adc * 256 - adcCh * 32; + adc--; + double v2 = avg[i]; + avg[i] = avg[i]/ ((double)numberFrames/(double)frames); + unsigned short v = (unsigned short)avg[i]; + printf("setting avg for channel %i(%i,%i,%i): %i (double= %f (%f))\t", i,adc,adcCh,Ch, v,avg[i],v2); + v=i*100; + ram_w16(DARK_IMAGE_REG,adc,adcCh,Ch,v-4096); + if(ram_r16(DARK_IMAGE_REG,adc,adcCh,Ch) != v-4096){ + printf("value is wrong (%i,%i,%i): %i \n",adc,adcCh,Ch, ram_r16(DARK_IMAGE_REG,adc,adcCh,Ch)); + } + } + + /*for(adc = 1; adc < 5; adc++){ + for(adcCh = 0; adcCh < 8; adcCh++){ + for(Ch=0 ; Ch < 32; Ch++){ + int channel = (adc+1) * 32 * 8 + adcCh * 32 + Ch; + double v2 = avg[channel]; + avg[channel] = avg[channel]/ ((double)numberFrames/(double)frames); + unsigned short v = (unsigned short)avg[channel]; + printf("setting avg for channel %i: %i (double= %f (%f))\t", channel, v,avg[channel],v2); + ram_w16(DARK_IMAGE_REG,adc,adcCh,Ch,v-4096); + if(ram_r16(DARK_IMAGE_REG,adc,adcCh,Ch) != v-4096){ + printf("value is wrong (%i,%i,%i): %i \n",adc,adcCh,Ch, ram_r16(DARK_IMAGE_REG,adc,adcCh,Ch)); + } + } + } + }*/ + + + + printf("frames: %i\n",numberFrames); + printf("corrected avg by: %f\n",(double)numberFrames/(double)frames); + + printf("restoring previous condition\n"); + setFrames(framesBefore); + setPeriod(periodBefore); + + printf("---------------------------\n"); + return 0; +} + diff --git a/slsDetectorSoftware/jungfrauDetectorServer/firmware_funcs.h b/slsDetectorSoftware/jungfrauDetectorServer/firmware_funcs.h new file mode 100755 index 000000000..48918e428 --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/firmware_funcs.h @@ -0,0 +1,179 @@ +#ifndef FIRMWARE_FUNCS_H +#define FIRMWARE_FUNCS_H + + +#include "sls_detector_defs.h" + + +#include +#include +#include +#include +#include +#include +#include +//#include +#include +#include +#include +#include +#include +#include + + +int mapCSP0(void); + +u_int16_t bus_r16(u_int32_t offset); +u_int16_t bus_w16(u_int32_t offset, u_int16_t data);//aldos function +u_int32_t bus_w(u_int32_t offset, u_int32_t data); +u_int32_t bus_r(u_int32_t offset); + +int setPhaseShiftOnce(); +int phaseStep(int st); +int cleanFifo(); +int setDAQRegister(); + +u_int32_t putout(char *s, int modnum); +u_int32_t readin(int modnum); +u_int32_t setClockDivider(int d); +u_int32_t getClockDivider(); +u_int32_t setSetLength(int d); +u_int32_t getSetLength(); +u_int32_t setWaitStates(int d); +u_int32_t getWaitStates(); +u_int32_t setTotClockDivider(int d); +u_int32_t getTotClockDivider(); +u_int32_t setTotDutyCycle(int d); +u_int32_t getTotDutyCycle(); +u_int32_t setOversampling(int d); + +u_int32_t setExtSignal(int d, enum externalSignalFlag mode); +int getExtSignal(int d); + +u_int32_t setFPGASignal(int d, enum externalSignalFlag mode); +int getFPGASignal(int d); + +int setTiming(int t); + + +int setConfigurationRegister(int d); +int setToT(int d); +int setContinousReadOut(int d); +int startReceiver(int d); + +int setDACRegister(int idac, int val, int imod); + +int getTemperature(int tempSensor,int imod); +int initHighVoltage(int val,int imod); +int initConfGain(int isettings,int val,int imod); + +int setADC(int adc); +int configureMAC(int ipad, long long int macad, long long int detectormacadd, int detipad, int ival, int udpport); +int getAdcConfigured(); + + +u_int64_t getDetectorNumber(); +u_int32_t getFirmwareVersion(); +int testFifos(void); +u_int32_t testFpga(void); +u_int32_t testRAM(void); +int testBus(void); +int setDigitalTestBit(int ival); + +int64_t set64BitReg(int64_t value, int aLSB, int aMSB); +int64_t get64BitReg(int aLSB, int aMSB); + +int64_t setFrames(int64_t value); +int64_t getFrames(); + +int64_t setExposureTime(int64_t value); +int64_t getExposureTime(); + +int64_t setGates(int64_t value); +int64_t getGates(); + +int64_t setDelay(int64_t value); +int64_t getDelay(); + +int64_t setPeriod(int64_t value); +int64_t getPeriod(); + +int64_t setTrains(int64_t value); +int64_t getTrains(); + +int64_t setProbes(int64_t value); +int64_t getProbes(); + +int64_t getProgress(); +int64_t setProgress(); + +int64_t getActualTime(); +int64_t getMeasurementTime(); + + +u_int32_t runBusy(void); +u_int32_t runState(void); +u_int32_t dataPresent(void); + + +int startStateMachine(); +int stopStateMachine(); +int startReadOut(); +u_int32_t fifoReset(void); +u_int32_t fifoReadCounter(int fifonum); +u_int32_t fifoReadStatus(); + + +u_int32_t fifo_full(void); + + + +u_int32_t* fifo_read_event(); +u_int32_t* decode_data(int* datain); +//u_int32_t move_data(u_int64_t* datain, u_int64_t* dataout); +int setDynamicRange(int dr); +int getDynamicRange(); +int getNModBoard(); +int setNMod(int n); +int setStoreInRAM(int b); +int allocateRAM(); +int clearRAM(); + + +int setMaster(int f); +int setSynchronization(int s); + +int loadImage(int index, short int ImageVals[]); +int readCounterBlock(int startACQ, short int CounterVals[]); +int resetCounterBlock(int startACQ); + +int calibratePedestal(int frames); + + + +/* + +u_int32_t setNBits(u_int32_t); +u_int32_t getNBits(); +*/ + +/* +//move to mcb_funcs? + +int readOutChan(int *val); +u_int32_t getModuleNumber(int modnum); +int testShiftIn(int imod); +int testShiftOut(int imod); +int testShiftStSel(int imod); +int testDataInOut(int num, int imod); +int testExtPulse(int imod); +int testExtPulseMux(int imod, int ow); +int testDataInOutMux(int imod, int ow, int num); +int testOutMux(int imod); +int testFpgaMux(int imod); +int calibration_sensor(int num, int *values, int *dacs) ; +int calibration_chip(int num, int *values, int *dacs); +*/ + + +#endif diff --git a/slsDetectorSoftware/jungfrauDetectorServer/gitInfo.txt b/slsDetectorSoftware/jungfrauDetectorServer/gitInfo.txt new file mode 100644 index 000000000..921890a70 --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/gitInfo.txt @@ -0,0 +1,9 @@ +Path: slsDetectorsPackage/slsDetectorSoftware/moenchDetectorServer +URL: origin git@gitorious.psi.ch:sls_det_software/sls_detector_software.git/moenchDetectorServer +Repository Root: origin git@gitorious.psi.ch:sls_det_software/sls_detector_software.git +Repsitory UUID: 046a469b1e6582c4c55bd6eaeb4818b618d0a9a9 +Revision: 55 +Branch: separate_receiver +Last Changed Author: Maliakal_Dhanya +Last Changed Rev: 14 +Last Changed Date: 2014-06-03 12:26:45 +0200 diff --git a/slsDetectorSoftware/jungfrauDetectorServer/gitInfoMoench.h b/slsDetectorSoftware/jungfrauDetectorServer/gitInfoMoench.h new file mode 100644 index 000000000..270653967 --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/gitInfoMoench.h @@ -0,0 +1,11 @@ +//#define SVNPATH "" +#define SVNURL "git@gitorious.psi.ch:sls_det_software/sls_detector_software.git/moenchDetectorServer" +//#define SVNREPPATH "" +#define SVNREPUUID "046a469b1e6582c4c55bd6eaeb4818b618d0a9a9" +//#define SVNREV 0x14 +//#define SVNKIND "" +//#define SVNSCHED "" +#define SVNAUTH "Maliakal_Dhanya" +#define SVNREV 0x14 +#define SVNDATE 0x20140603 +// diff --git a/slsDetectorSoftware/jungfrauDetectorServer/gitInfoMoenchTmp.h b/slsDetectorSoftware/jungfrauDetectorServer/gitInfoMoenchTmp.h new file mode 100644 index 000000000..58e48f497 --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/gitInfoMoenchTmp.h @@ -0,0 +1,11 @@ +//#define SVNPATH "" +#define SVNURL "" +//#define SVNREPPATH "" +#define SVNREPUUID "" +//#define SVNREV "" +//#define SVNKIND "" +//#define SVNSCHED "" +#define SVNAUTH "" +#define SVNREV "" +#define SVNDATE "" +// diff --git a/slsDetectorSoftware/jungfrauDetectorServer/jungfrauDetectorServer b/slsDetectorSoftware/jungfrauDetectorServer/jungfrauDetectorServer new file mode 100755 index 0000000000000000000000000000000000000000..3e613e2463a7e32661fa92dbc0d1ead3f4a181db GIT binary patch literal 132672 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
PCy{!&)@aa%Ns~t}5L1mB+#{tlC zfYFk?t3;l7kXlMui8_oYQFC1E9O(oH*CGnpR{`7#+LSob^lnpbZXrk9?JS~3Z;oFf?puBW>>889f9 zmK%B5dMJa@(!M6T0d>7$?M}4G#8u|#U(_R4&j43@UK5cW^4s*$r|(3+fIOZ#lEw$l z3#-jO)pb36-PZH`yn3E(t7mW4zpOgi2GnuG+P|YM>n(LWy~jFEMjeSR0jIjm zaiJ?2x0aNz@wEQD1Z_D+J^5$yJ0S_LIfJm$j;@K7%e8f$-`R_6i2VU&^l$?U-ve&x z)xDHIn@h`S23W@$y0kgg#=w`@+V{biJ+LnrZNCm>lZM@O+rPNN;LE6ggD+!$&SiWE z2wbhn@bV-O|4(kAA+lmx6|99sP?Qbf`rS9z)sdmYZ|j4anQQtgV1egY)^{ zk+rYx=!JPk&}Or7=G$bgmtIfHJg>J?rqJkdw6|vTmQQlA*1pzP@V+$Rm($ckZSb#a z!%m4uShCY zSGqklfW~TJFNZ1*?^iN`ntCy?#@9T{NNe8RpLuSVW4FmDjrOYacf^jusoGI{lUM;6 zvE||K{jx^&K}viNCM{kM-`wss`MACqcJ+F23y=2c?Me9jE;e>FaW?_oQ9`~H;vtO0z^ItF!z`Bg!GV}cL1(o1Gcu=+1pnilJ6mXZt-LTdQIMMysV(=!2wF9Ra z`&+ofq!#c6lrNBukw+f2Q;CP#^{ECbm8=G^M1WE}+O@Y=SCW(ug6{iC1Ko^L2@mjo z(16=nNYMVWoNlLR1Uw$C>GmOj7fMeXOe>3$O5%JCN`n`Mjqi^75|6_N+grVFis1U( zZM0BlNZvw;Db4i;9@ z4c8--K?slb$A)@@MC8PywKhygNJ0pY*3xh(LT-fcXwNrHMo2~okM?YX7ojSI@MxPG z#v$ZE2#@w?!x)4nA%sVJxPf+QrXqw#yT4&5LVkqsXu$^Z7@v(09&Kp@c{2tO!lT{Z zKvK96Aw1eo8Zz@*V;9JmdE^D6rxKDOK{BMhK}d!KdHC(}RG0lm{g!^irL8QSQi^wp zLQeW%F%aj|O4cfk&}E&UmZ#tY>9@!`-*beVyU7ai($88WUG-ljV)S1w9lUp&(qZ-= zJHG$;7x59dj6N@gGYfL>>v>7Erp64|($O+;TWd5KZ;ir=5~cAe5tk~xTVmMz5M5R7 zn6jp{7ye7GdG0L6_vYPVGkD_{tIc=xv`2%rKG@bf#ZC83DVQZbo{6RxWLn^i!0s)= zc&F!=n(3W-st6DhmD3Qg*Qox5>aOj4ZuJAPP4&G~~QtsfD zlp_;Ofr1F5z}-yi7G4AXE>)L@uZlG9u6?9=_mt+kS$GSUc}$8NR~xj|UQO8Txn6y^ zdH2qyV&rpYu??|@BTV7 zmqF=0YnyjBH}yi9_Z04|-CH|o)=l35e*wyC)^@2fyDbHlzv8UPR3zBzApBU|k zP~PLWnR!Xap)?wwX)cj5mn7m-;eRmd!4f=WVQ;i}m&2FBT%L(c^}o;dO>Vr6&kZj3 zgeYdFncfyUgXh5MeB3)!`hI_``bz2kBv_>JU{4<-zO)x}N+VhsaaN1<4;sn)-B?4A zk4`a4=b9|d-ASBa$XT&fhnFnhTdJEJ`7y^ta&W0FC2C2TkV_$&VE?wX$Jv&&vMniF+AvGnj4ilr z%#yF4B`v%K8l@%8kxPpi5{WjZ^;PG-&~eg`hy1oYVoRy9@c2Dj${am~c<@#(B`00X zHs28=DWZL3E?X&^JiUxu7|Hw?$@1jsd0UE=hNo;P1`X7^L%9@tzqr>DkNLBO%lLi; z>zA2n>^djml}vs((!%!0h;-2b%%PSr*?D|p4qF1=7^C42DdC)mZ)ptuC8dN= z-?FH^H808KAXv%Mq8NShqFhQ0>$MHoZHmBW-WW>;v35hhjHcVb#VrE$%PkWAhqlPz zs0VM!h@ZldApR4ddC#@>*bPfk$fvgdf^qXDQtX2t3-ae}XlB=|Ejd_eUePk)R}3 z3zFrt-IJhik(?g6i)4xSg8fnaT1JobH-2xeeb7hnsjr~j z@o2xj)u-;m`@V-O)dGoD;LW$t8rI9bxRLTMpf=u0zFCi8-IhiS9_To<) zw-~ydGZ3vC0t^@2!f$MuruuQ;mw%tMeg@Vo`g?c=^n(4^ot}U*3`wl?>BdRn5ol+R z2-^Hxoq-nIl7agW5rap&{#GMrS$JjyD^tYdLHS1f!0@by@lM))zre5SCi-24#RYvl zOZ~O#q(=(y@S79(&Q`;%Re?r!&w~iQ6$XslgTmKDs*$r-!QK8_{L|D$pnegkmsMO3 zt355yx?wiT$D`GOZwv8`M|0lFPpi^MTZKI;;;}<$Y-x=4gg+fWu1JsO=W%$vFMoSJ z?{B5Yxfd*zXUxeHTUw)y?I*IC2(7wWBQ>+U(W<(dS&dQ0taNGmj=l-9N*Ru)z;QlOsci_DV`=uNQtqy1Uw@LdSnQ-!K1yuP@EH}qkXX1pm{d4H1>7})zy0>$ZU};t7VmGtWC1o z)zHv0^L%vIX+7UhEX3&zX5B!}Q7q>`+(;^`_hceq0(v8lkgxCS3$6SVsokE7VK;x3kRnS|bCMAbW5#cI$roGi$04 zf=5WG4S9dQkSxemSQXQbW->kqd}(F(G5a?OQy!QjiY3z00PcXDNj6(!=Q_!(N=XIf zIuBJKg^e!6>mTDLMaxPO@<#rCR(|nyaz}*5q^vgm6#P=a11@=4?FXl1w#(745$k01 z>auA@idRo5K#DcTSUvu$yLb*~F2`^^<)gbWqCr|OIF*UPMi_#PFmybkp!Nr`e`&?l z`&1@k$SCRk_SCOWa@uxuD(PcAW&2&k$1=z)m3Q)F8m-66JEl;1TNl9A!))Z2gL9u$ z*zv!15|Y4s2>3>45782(PT1qf7n|RZ+e<2zGxLJ+U2?~~ruYt-xEO(i2~`RFr=A>( z2SGy!x1@9|KzyxZRuWn<$<*T~W2`@{$1nBqM?f{v`5Vy5YgT_3W+L!sXox%tD_%?Igu%Jn>BS)O~5 z=U$fQz|FKm(8|-%C%(CPh25tmhL)=(jRZqi?|A^b@ zCeJcYv#-D-d6ov!%3#kuzCur83XQyu`r26>!?tgTmR>npjJ>RWjQ_4q{HIeqg%~$1 z7Ry5eK|lN(!|-nm6ZIW!DNx_hs&+$tN~eC^H$+)Vr>wR<1$t{iFX5gSa68YzoNUyF z&g=~XO?GLJ!jJ^9%pH%IkmZ=OxWt%y31;fda0%!?{*#ipkn3;c*GfM2WJ#rcOY&7| zjmUjJE~8PEBy2Y7HXEnT=+5$)f*~(x38v2shwUM&t;k~E%uR2N*>MWpwTe_+{+(*o6W;FXb@QoUG7bp6(AG!YDQ(N^^D}&F4r|4X8ek*rZi|%-lI{B~FY8SKwLjofecXX=Nf-Y$L zF16Zt^0F>+{gTVClZCO1tR+Gc2{-SV1%Egf8&XI5LLy-c2W|j&y@zR$G6P zWV;BMQ@G)cV%DCd8-?j@^+^fZcN)7LeObzilWv?Mq?E>!)Fb(d!sPJoiUjtzOWaBP zFNSwM`2onV4R~M?BJT-nJlPCJ@pul86K4cZH}$!#@Q9~dk0ivqSUlafh`XQ|ym1$l zp;s95ez9AL$m(=xcv)>*#(3MCG2lpFHDVJPnvaFj64XqbCVGtc$1*M%@$ha%yvO-N zBYtfT-?PXGpAPs42-pcGe;V2`qt$3voaWC3cjb5fTg@K87Ee!*jLDvRGCSlO(y{!>t@UYi^6n|#*sNHX_Jzp zp6{&Dt!7kT`o;|1=955eX+4xMY6}|fhhFDxUzr`Fp1`+KMyTHiwYZ&E&=$c8;y}vs z?1c6e@C;s#QkG*D+Zx6#2+$vHo12PrpX>LPS`TS#xD#?AT3*Y};qf(U46v~<-R|<` zPtv&01Mw&W_q!tISGOAJl}IhC)Cwks5-&LR1U88N7z6KnBTKsz37=p1Tma7fH*Pk&83uTc+d#Tl}}bR+0~ z`1bAtBp&UuIVD&r`qV=R)->n?wG~9$HhuXW7X`(s=3CWRcNi(#+*+PHC4 za=)lh4Sc}kv*9@uAZlSr=qKPY@)xuGBlLRr>*qk4DE4u`g?a|p!MA4}t%}~z^QP0# z`_e|+Y?q~{9n8w|5Bx#FVT5v1vgecvz^Xg3$L%d)&VWWP0 zT_nS!3HQFnS|c5iHv+e!&uun(rOtz*4ftls2Am(hDX0puCRJ$7YX6yoxx`_7r-*7? zBzdD=+?Sh)OhBE6-{AICda#0;EU2UR;)_k{(?2RuofU;17bx0Xk9%>hr!O4I>Me{0 z%5`htcF=HLR?vhVb8qqs+K;cN`iu|J<_M<)6edC8yIJik z$B*ad%mpn2a&;w{KnW?7a0qRZi|>gCPxVN{5b&Tt=fQ#;51wGNV~-fVs>8X+9EP6iF`-91zrPB0`0IFE&dJqdNT3<~TLLPE^qBia zP_ZgUg{3V+sK>^vb{8;oT-Q@ut^%-ac`W zZL;B)@1r|Rn+KpFVwgp(P-ZwMdqH4ZlhuZU-e`~XP6WNZbM#XF62T1%#pQtpa4dV0 zc4CA;$Gna@I_>tV@{aPp(!c(gQeQ85*3K%x*T`zsAMe5!RWAHy9^E@lH!hIoMpobX zJ(hg(O4x<3C3w1h(v%(AN9c{c5!y%KHtSx{4MpgZC9o1Ufsf=PE~_;{0B_J?df1^M zyFT~srx7}>C>RS0Z{{N<-+9R6r|zG^#?HQ@Bxj&CLbio1nBfxwP8UPR8z3d-Y*7mE z)<^ONcw9d>AH5Rs0rEy>o0mW#^`iv)s-1|DOWZ*A%u8-OK5tumhMb8=(=!x{i`_#8 z8>R_Kn#8!z&2Uzm`Z;-Ha61HPyV*iVeI^E~>gYfD02&h3*o&lszWT5fJ9v#P9)0G7 z%)Yyn*7u*&+i1KApOZc~MW(sIDN}6IysY-+F|-~$DrslAN&K?HOr<>Sd8r9y25bsc zOS;9A^cL}9U`l1R&yI=kEppTs`)Mb~n)3d!=G~clj5PRnz*8-uYyzHmg+b-EW6%Y) zZ?2)fi~Y!=2xgjs03ZKbr{lXv*BEskA2Q}>vX^wkWOWMKk-X4IOOn;w1c!K$TYq!n zBWXBueg^y`E7j`+QKUDo>vH#Gd|g6T9|P>!3>I(BV!+Dy4uL})>OPO9Z^ygL()X~p zQQ#fdOZff*>DnXV(T;Pkcsm`pai`){cpHqnxG|sOZ2)fKPQ|Co_WUg7a$Xz0sOk6n^_C{r?oPjgSD+WW4ar zQx$KNRv~1|8jBu9-x110m z)JD*YN2|V`FcxBcMB@)p%kMv?wH5JEl#D$q+UX;&K)!=TK7v^-d@QStK4#sUI}Nth zBJ492VH6qBi#+m0ghYh;BIHMJk>L@aj%Uz*gMh7jSUR&O#j2?h5XY5d(W0vj;R~Ll-3<;r_ahFxn;( zh~s~HG5tRj#C#BoFYa;N4Z+Ia)3_Xod!MDdhyv&}L0?wW(!JqBfp;OR{dYQm*2|=6 zRpq?63iH#JTTN)+RP0ad&^|G%?Pky_piLM7Fl{;vt;@DEm^T44am)9%z+=}z9~JBV+sTwBR%Owy6?W@(aHF&Z7PJ9?PUzISfG@kp3=-x?q?~zSxQ1r*~wB~V=29a zOq5C~656)JZRPgSV~lb`?YPr}mAq`rAM;9v$0RG6r&vqI_=J?ieLTflazCMQ3zghg zc!E~%V(6tOl<)`r1?oMXX(4?1kcWfw9QC57D&UyK<8X&6`=TP3Kq>r$BK`ge1tT{8 zhd&r7Wc2(4kw5hO!s!d^LP(L-#X<;QI($M|gZxAAi+=HP1{5UWZvY(I0R4eOxOB=B ziht7&@IUlHv2Y3d?JfAGh}9I+OPIo9iV$;|`il+4csimJw|o`5pk+x*%O5^(@oX!G zw*Kt31l@;W3w=-`aC}Z3pP0kfPsi7n;oAdzdp0cH($)#z-3(uaP%{NBYmi4tkGSdD2zp~k38FWa%H*lBqc+BTRnv-uxTKO^ zK;ws4dW`uUOZ*$M7Pw;E)j)ZI(;e_|rC-7Ib^n->m_pyTNGRak%XC(F0LsLpoe3Ib zb+zh8`!zlbUb430V+pmDA78#C-uv4J2+vcymq_cMNB({Luy)+%k3Fx<4utUEr;a>L zP=%pMya&~3d!-hFKG4gLUq}E8rHhmJ4F;rbl$I&<<2M!v;lD4CWdEfX>D`b2xFrk! zLxCjzqvi3n!zYx?ywHngkMu3fYDYiiecV@-)ee73eZ2Q))WEb=RYdQW<@ty-GEYWc$DlXV`ir@HqM83L7q_eA|8+S-Zf;A z>5KW6a0h_f^gSw@?Fgu*1yZj^0y*($JFg+j$1vn1OF~%y^Xn%jwSUGtQT8G2g#+{X zpE?5%u=_lnn49%)Br#f3Ia&_^^C3p-JJ(ogl^%nK>tpc0vC&#$qcwg_KCMREef5da zcASz=5yp8U;KZXna}B5Y0nmSkh5ny@lCy+hsYLpHW}ey3w5GCzzb&213b+tM*=~3a zIOIvGaxQ<2?v@(>{!<&J z^xIl@SLCF$3+q-n?2uEg#%Wi`F}p9cv<$immujmGjP9W{WZg>Xf6p>{!_4sCZMqWq zV))=)OjoK0 z3f*CqUy4*`ltZ(xy&RNQ+FdEnuys_q1*2HKKUXhd3g%6nW|O`o=sQ%=%yM3A$thKn zrb=szu`E`^2`Y!5pRF*sWKu3xo9|L}|8N_)rGg`SeApt!?+zcyBH3wgJIrI&943Elw1OzP?}5cV@)*7+|Jdz_ zArG`Z=*j0@on}4x9%Tdc{B&%m!b{5f=zJRN1+!>Z%BLn#Uh=UfWgTXUfmc)S>>~(j zJnrzP;?2r>1rk2r@O7nnv?$>Hfjy_D-he3ZTQU5dVfZC580D~1Y%qHm%=&qJ)JZCF_|j~zFmsrc5jCsk<=5`H zkBs@6#t4(Yc3Hq$Ibfvmw&XJ*lYGMttNR`XarVOLI?D||eAlg*l^m|EuoX;#Tuw@G zc(T}FAI|3MrTfcB=zAC;e)si-Q+(TCHYX2FEKOx1lA=Y zBs#1(OM6Kn^f{-yLJlisu#kilH@=)fR8VObe$o$b6Yw_flM=jLj<>O&(3c3W#oJjH zTK-gVX^s}UoBO-c@;vOjL`#&>647bFZL**xVxuK}glKW1+`~tRmce*yKSH$7n|j3L z%bzL?uFyTuE#P^HI|iQr2(~nbE5dsIvzT4du(Wo~?OF@BNOQsWOx^n#g-J%?dFbb5 zpgIW(hqpklfD1mVMQS0l5TKcBB(Y7CBG^KAXsf=10S$n%r$4oQ0v_k3!TVW!8CM)+h zN62fs4D_AO%Hw_=PakpXvA9HQVePS?xj#K+0;cTB&YvjE9LxLDRk>Owefc^+c=9-3oy0mGBd2b@y_slLzn|PSZv5NhM{L&`=)1~!4%=;+a z$U|QYH)V&{t&o*A7K;y^kfT7#j&3I8tXc& z=FZ9BTViZvxd^MjFC2n43Nr8nQakzwVTa9Xi`uPPk>qK`o<4myISF5$vLAAoN$ofv zgng>47X3P_-HqI2PgsK4ACLBG9cc;=A%sVJrH)1c-pkFiI8M+{T7jvz&{_fC^0|?( z=DvH)Ch0Xxe9dbXiGN?O*~>SfzLuJ0KVa4}oL}Iz_^%Jl(j}Bm^*qB?&pjU)^*jgl zEY7QEovofzag%~^)|J=uAlgYT@ovL874QO&b|Jo({R-akXdY-kyFW{{9c=^u(?Yx~ z?%hJ)9!Fb!Ms{gh31qd)(?URo{^Y^_j1P|=PXOV??2+Wfin~s%e&jk?ZT*{Az4kg< zOVC-j#poY&vkvz3is)1W`5cY>B&)st)kZn1y^osAfp3)zf17te4<79hzGbDaz{3$> zkHs&8^^or5!0d{ZZrP)IYJFGMU@z3+DVWvRp2@z1wW7WB`ta2_iD~AM9>upnsv z<_a%toQtNFd5*;-Pj7Zh{W(}?Q0NlRbgV}9O`=st^X_3mYkkVr&y2-T7qVXRy8OPv zgRmz)9`!i$GjIEmFDJBr@}>9SCtuQiXA|%{!F8JCJ$U3x`W8hm_U3WXz05NDLFs4G ze6sNzM6K~?FI?%wj7EHrHo}s$5qrv4!XAhB@f#~44^LewWByx!G6k)48m(@K_lLoE zZ~NgdCmcNdWfS@n>3#HGIg_K%VFG3e|KIzRrh zWBvp^rfRyMK_3D%IO_4kKdX6nRWs!Z;4Yrb0w3Da&T9#$80ic2E0p|{0pY77MDI(N z8+?ylZsmK!WFDehHt`KJghbB|Ja+8F_k6rmBEGqFd1L#j?A-@XW%JYNbmV2KZ(}i@ zJCz^cG;ul>fPc;%@Xa~aLOX+=Z4I!n_w@`!x#{T*;1711{bbL8gw+w=r5~Kai8mqb z@b9RtRjyJ3z%dS9GqfvD-_XL`tJNqoSv-%;YVT<~YnOr^p07Y0?9PYyiw11!@{I*} zrYP6wSdFh(|8}~)x0F}ltO+Dw^Tu)D;^yhZ%YHdtme_c?_xt=Vm*)VFM_WDJrzY@@ zN1Hr7)q1oQ=f*w}lrqd;^FB34f^pNi4e=NH*-7k`ev-y$$UU}T-(Ps#hJ4Krb(@MBV-?;N2g_j_b6`)S?8Tna{V#@l zNDs9@Cx@j_Rno8LW@0A*O|zJNQNuuDv4e0oP&>nFb8 zhd+!F=Z~Ovv57D2$8S=ncr{sw*gprzGA0JEo45?*N;EnRyhL9JJ zHjbsHkU9gY{=C!?EOkFpCCb|Zng|NNNumSvgs4RNjheKE022bt+gk=ai`wP9Pwtvb zFvz>5>{;Z798P@Us%JOYV1BH__@4~}hGda6fMG=67OZ>gIB(e(F~KXkeSpV0tL+ft zdOlkd$70}qsy|tC2oJy6B_EFwOL&ZT-ik@cdlD@aj-c%ro&>|QKZ=!LCwh!n!ehL1 zJXl4-TZdW!Iw-@FVtDwi4f*sKv4qEXw@MYY7fDqLQe|j+%qx@GfPLz_Xy11?DUqyp zT*X&A5IVv_pR3c*->A=#Hw4aLQjX$1U!T@37i8E z8o)xYBV?Ah^Is`Jw_W2-17NLUSf2*gNeE41p~r2Z5JD#811QlPQOr^1U#+K!`398Z z2MvBk!_~IXl{OlnZ>aMDIiErLK#|GMe}kef_)?CN8c|XsE2)o-iXxP&m&U&6_HUG| z%h5w9=^<9q|4u<`Kq$gOZz5!-?MWHsk{#q|k+Jm?~ zEN(+8jb23SOstumpI2Dn?*m0<3#68F5~yocu{&ij71amOs{=t+hjr=pFrmgpz=%(A$&|Ep#3``RY9 zWFqW*)Q`y@wRyLU{lg$`eaOVB@kiv9l$5pSK@&`9sE&~Sec#XhR4j4@R)gW z0?rQjzazEI0)lD$5xIo-T8>Q2`ivx ze|a_O{t0+bP6W*#e^e!VqrA;VN;D(WE{&0sR@z;r#%PtrW}&_8g8FGBS!v>G8ZZRJ0R z&*oTuCsG#zb|HiP8A4{-!hi5to^CfLJ`)XtZMmZ+S=o6sf%CbmlJC$v^B`k#20u}ka2ewROCJn^LPr11!Ge?UU{A(TG^We!34gHitA|ABWo;BR|35NK!6{6Pu+l?x#7vW>N&S5 zZIQMy3zgPr7k3T7{|9i(pB$rZheSQm76jy`)}}5Xg#fH{-$d&|_;!%-9*gf_Hvv#R zj1@55LhvChkjXfG8`oGh@3+_;%B%C&G5se9rRCsN*U+@Op;GCqz1xQz<8jf%2PRLI~f?-?^9 zl$)>KLP``ewh`rdz$seK!J88?k09nOoPeZLGghvX~@x0g+{X)e+qU6(M_SvSqeFvMedS?Z?w@J zSF|!SC5?Q7POre3y|x6q;f>ZqBwxcI^FDPKBxe_su-~+WAUD5h4R;|oK6NYLw(1hL zwrw#WA82jp0@9GGP7)S@&pP{})gKDXRt_>>dZW#y($hQf-YNkGoM8*iZi|kTkhc;w)q)loD*`%gl50n?nR<0Nn+Uq?F#ax{T_6$*7leV$$Qzp9ApfTNMn#^N;Ix#F3#_1PhO<=$%MU6 z{`P!|PoPh3)BEI9*v5Z!F`W*{MCeS@`{?Jeai8G!KeN}7r(oL^=QpP=XL3v?bfgPP1-n@bDY9|`I`PmP3xXu&Q~;B^#gCMx@)mC0kaeK zUOq_0N3gkx#te!X_5saIv}@)5z?hfHx}28|VO}D*BH%D*rSDem&7I1_>`Xp?GmDbUN{HrUhIy75aL z6xtAXcYKvwQ2>8mCTBi1g|br^^VQpKiTmT#3vW?oD30;M=5470xp0r*7S{=z#dT?R zI}lDtNhGnfu9%cHZhjaj`Iwy-bTCcwecZxCQ1E-t!4$d)CZ*KC`-ObjPM}mg+C4t< zJrdzjm{#ciAb#rz&a43%dwZL)x3`(Jx8M1UF@)RhjgiUV7s(@iOP$V-wMILl^nKaP z90&Z+Lf~4mkUXnn?0pY=Pq6m{d#7_7&AVIKdkXLV>2&%m2u~3@pK#}A{f`Ti0{&1f9c~O)}J^B z{uTc{?Q6p#Ln}x4g#V4Gr&<~34r%Sz28(qv-Ui!!3jd`r>1O(#5oWgQExn%R_p78N zZbR`SwrlNcKeM%8+->^$NcTDE_JdnSlUJt0Nq(Bfeh+EkHGb>fmLGegfYMjWR6O65*fm>Ifqbt#8eD z8ZoW%cPVZxS{$DYf3{%!0y(0D@V#3jy*%8Y1iO&=P)_E_Hs;0XO!w;g*uA<_@xL|d z$Nx-pHY{e+`VdBG8mnT^;NPwYB1B%JNrYanSd0+)g{KkvV+HhtIW#^}FQD(BNpa(@ z(%G9G>g>&Q8|k^DEjEa`2$^Zu|COvrW?5I+%K9NfX4((_S{3lcodKWH5m9UkiTL#_f8w`cpmN-ZMe7EaR2gc zY7Z|wkf{e{qFwi(b+*zTw3T*mUTMp1rTyGi+HG(9Fb4VH)kL=S-4)~)_K)85-%)I> z@pYgo!1kf`VHDZNMiKwp0ptzD1G#-DlS8$D_ryJhm!y6dDD5kF;;j*1d});QH9uJ% zrw5>mEd~Xod3j(hPaN$f`;>8byXSKX-+7Ggk-b<}qQTr=GijzYGl!sKH}B>eUxdAL zjW5RDxyF}Z?=f8yOe?der$8C}?v8~O((7owmxNY_nV`j^#9HXfbL899_k=N8FUI)1 zqr$JuQL3S-{zzzK`WyLP&|1!}wdsC9(AsJ-Zy9SfS|3itm~Ln`c8kOQ2x(hm0MB!m zhmS(rGIS8~>qw#$(h|ty#n8wIhv|W1YGVa{XpqpsXw^zHd(vnH(2H~DZ0(tATj;lo z-ohzhYuh4j?pu7`3gx#g((2#B>{I%fIr|`P+FQAvh0qj)^qzsxB!-`M5_I`MTs0u{ z-i6TF2$^Z4a%G1hlOJGZBbE*_=PJPWx8-)(a`ystQXc#_`>myYfsk3+C;KzFk=Kr2 zv%w#*!T%NTIGyOU=Xk@G<5gRZSN6AJwx-$Ev|sGEj6_J?Y{UJi z4fn&g(Ea-jO^5G<^{kI_9nG$l{r{v7R{vZ2Ak~D|v*0U5Ld#9B$Vug->i6p6D|EJF#v~ z$9u~`{4azxFO9J+Qs?n_J=y8olvkDNS$EGO+?gmosoE*FG1@sU*B78AE=bbcL*54F zD1T$pm>~>r19OzGWAL?d*&JW){`(HxGN;C0RCXzE;pV9Kb2mp>?*O-}Fv0E-SV>U!@;JUyZteB`b_|Y5u@fk`)?+xF7pZ5lR7f!#kkXAbU+-3qY z$9JMTU{xCVCahM_Gg6x=G}IOvh>!`{_e~mGofuoc0Q?sWzUWPoA2WR7FV-AiB4nn0 zYD@d@F9ts_hkT2Fh5^~R-R!H{f4|+n%P7Y63Tn5(7{!vqN=T9?ze z5}Vk!PZHRnHO4C85PjE|?9;eY^C{e8_7v`vyRb2eJA9(F19rU}g9b;dXf8SAAz{2r z;htw4a}{q|KuFS)7D-S2Kalh!B%SWcFzKQaOi540m;I*{mg9|Er0Nliq_Bs*)#A;^ z-sa*Bx+zkd@fKijTky7+z3s$XkiET+w@~~tkMCx>U(5Za!E7|wAM$M13woZ~6*pS;THt3a>i<}#|o6Z=g5)0zWkA{ZsqHV;|Sc-!#$QQAtR z@ltmIei!5ClDtw4eh~c4J>Z(1!}Tt3y~}W2nZw2FXvO8T;G(ycbD7uYt2drogc3y?=kC4}; ziq)L?1@FN)p=yN@tL#;z0l`1~6Z{CmUHAK|Z3`j-kmN*Z%;S(q&Eq+wWT{L5Z= zwSnd%I?cQD!vAY;3~fqUB8|17yxhM7v=!U0_vTs|@<-pSkkxEI>XE$f(H=+{_CTmj zIp@ZF>{ErO1w0+F4wjB5{`^GV!S0#yVXw40x9Z?Ly%QyJO^b(bLzu5ac=+bL@Q?D~ zXXS;j+)LjB=Qj2x$f%Fs3}mGzl%t0qt^IB z45XB&HC@f$aLYk`t$F}*c;M-`m6rjVj$LSxLa{mp8dH!UNW3mvbiZu`C15l`3B%x5 z@z3G>$2g8N2F!Ex(HlwKLelNXWmz+rC$O@E-4`j%miIm9J@0njbI$kUMw=ed2R1$OrSAjqk=~}k z+$d(c)?1OX{yjG$T{J>5#El~G)b_*k@3_%mcm{K$y;#{z)T2=ndOz-$L)viSkTza| z@6mlQ5`A(Ay?W@8Ju0`UM~N5WHbg^-YRo{M{~FfRZ)GIbB{DtEs5o6F6s}bY3bDF( zLrv%8dn^1EzSAWYemt-Dg1?r+0xpFu0e)Lp;9sLG_0<#(pL3&sBXVw3bKVL`firpi z)yN6SQFse-)*z<=-deF-EEn=9iel94YgjjC25WuvMnH^aosVJ-yZjn`U)h6^1w21_ zWM<=O(0vN_oTK=G%R%?O&;S^G>8qRRT@!ezPN9gGzw{0sZ+9Hj@+9?83W|%z9^YSS z?_R*WZht2BZKk)^e?X@*OglrG#dL7o49tMHtE)z_*1Qh$?)*iFlLgoLRs=w|uiY~^ zJ)KnLY|!BX-8X5wTeYQYBc~U=Ph)}fs|XE@$5;~JyXjK<5vR2hFQ|On|17v#-hkv# zeb<`Q@HAjGQUgWg{4QOC{|_g$-zR#s-(Q^`+!CidBR(x{WPgF@XwLLeC-GpC4AF0o zBGqctwOU=Nfjx$Ybht_TK`{%XFd(KK5_XA2=5*&<+a$i1n910i&cT58!!&s zSd-riKK=|^^O=UzYTx}eji{3RJK*5>{puy{_r@-GUoaO$E!Yd+6a4ddlGGAL;0fM$ z?60#1luGMuCgVxlVN7fB#^c)Wt}sRX;?$`IwIo18W8`w2oUt0Q23o4$oxuL7-|BY+ zun+3@ckmod7q31S>G#e)588?5xV3hQ^!x7PtMQ)nNG|S$Ff9~@AscaGaA{9G2RrR` zjV2~sg*fupRSN{Wc+i+!_y%dPtNp7$oA09aa0TC*#=}or4SH$7H^o0sx@B0JQ9v`q zVJL%xWmU0EVu8}4HZ!P48j-Mb_0pcp?YNXp-sJwPhX5cH(%2(*a)u0xN zhU&t+nKoyJeIuqR$WL>ET6;V*rU9dRgqRrsN5OTgk9a}@a_Jb2-)E)`w9~dRO`xmH zSyjjp3t7Ih5vLM?_f`8oZ=$phPopn%=8{|07BVqs81YGH^fn8ekSLBkoo>)e7f#XH zih8%Al#E8AZ7OH&G>z`MU)1QWCHy=7136`y%`rvz$Zt^?RQVri5Jww7lnngK0MKrS|^w;NbN49l(BoXr->kQ^0G) zH27&=)98r166?@jQ#mc@h;)zi*Sl3Zs)(Yazf9#p{kMURYE?SQ{0=%IeV6E{J4{Dy znr_)oH?`>Z+V7;BH_;Psq9=%M+CTwKQFPNZbuiuR9a9^o8)=6wAnnlThI9$754TPo zpqs`q5sE3?fmKjD1}J93)NW9eI5R>w9+hs$a? z`Bbgte|~JR4e-i-8k07(<$PHG^TXEv!Tk}aNH_ihnoG3Z(6WDU?=|(8q0P2vlH{@e zGH4wYl@ZN(ey`@a0{SC#40Zf!dT+Evv>x?DTSULYbM*KB+E03KG-Nj;MYI-QhUe(- z*Y(3hQ39m(M*9%vBXzV7VK$zlzh9xk>_nZ>m`q2iXd84go}<5~_Sd-`?LcegR{JN8 zPX^vPFR$)_uk9?^hW>IR*3|ug)_z8m6a9RyWAO9W9mFFd)>qbkqWmWRlCbqvi;>)b z_^dW?M_w6NcZZY4#RgDhHuj=z^G#=+?xAVO9&6a4$3^zoH!6=C@Cvvu!MK5>z6dd9 zoJ|t{vr@)}OKCz`WPx#UkD)K#1+~7b#vX=(cLLk!=U)$b{&`0g@($qN(eZzSf7_J* z4g4PpmogatUf|yw#@_^dqo2>W4}SipeK7u6|3~<{|5xxIJ1qV&JF((+r$+sE0^jK8 zUk`cy`4Id&+W(LGfAarI|A$K%-2c&B!vuVzxyt#r!Cd8=wg`t7lVHUd{8}GU8U$6D=cF;5k}GENvSqBNih?w2UagbF_?@*ALThGGZ1| zN6QEq&(ShsiVE{k8Igii(Y=|3=jh&!@2_(}Ms!KT%ZO-Lzx*3Kmgu+Z!=vWoA_XyDihDqeKqrM10ydTwLgLOe47JN6B|G88b!n#EyPDIu2U8 zYC&f-Y8G@vFUKft?p5RdG%rfRNz#`qKJS90r2b9~+`;jdfAsq+sQo&r4a#X2JQCqY zD|}m^rS$q+;XmPFY2N!8K}2irx)Iy2K{@)U24DC46yf)6D}N}ASf#7_dWOQ-_5r~- z@^g(o(0XxQfG89k{~rB+PyPSN=M4%MJagISKAIQarapajnO1+p`vcgKC-bQ>bD44z z_5wz%Wv@R^g?SEknH|pK6M+$Nc^+P-G&&C_XW?{qTD?g-K2Z-mh8pPi=J)^eo>=g~ z0Di5*w)hjnzIB7XPJ&i&1+y=PwFe%q`6aY7=_$6M7vFIOe~RzDI57)rkkDt({4<)S zvfq!UDbxGZw%7Ik=lGoH8EEzIOHy?=n<@08bnK9y{ENs>wEtxEm>5L$o3w> z>$A@W+L~zT+tl3=_G9$EquE4%d{_Hz=_NWlc&WCJ63(blpZ|7gmrv74R=lUt*7;t- zp+Lo9?*A8U{UVI{mERL{)I01b8ru`Wna1>g4~zBV{hqH>)#raj6m5;1I6zzEYmTf> z>qA`ATUaIDjWs10<$*Pab+{z#!B-+@t=jId^5d+Zy1NlMbGL8&%DeG2e&zQ6=pE&Z z;Gmr-b7)K-BBF2(Y*{bP;HG`lIGar+e%eb7>xYcwJ)^Iww4Yc5rO#r>Ulw4ifEzCz!i_`a7CXLEKksSZ~!)n7Vj7nc^2x{ zJ}J~=zpKO8@9Hq|GIb_Zjp?B{EgDtm^Eg@yjA*!EpPnK_wfprJ>ZJkxXHxyLl&1@J zFL{J|{n`p-F8F({8@?sTlyqUpn^EZ!AZdUXOY`j2s-C^R zGNHZ!W0;~rhdX0rz`u<;rbEim4uz36ve#js0Cxl< zI)|tYTFYRcraI4MZ37f-7r-5PEN>)6!}%h#LY$qI){9)UCZ!3m-!q0F7@taB=C0NN zcKOj^A0VCD>jYI9po+At2GzjnNYPN$sx6ZM$jR?2g#E61iyNLOdNcUD6#ibrGa>pr z_^D)Sl<&*P(`OnsEdBWEcU(-IEnITGfHVpg`c_=YZikE zV`+y54j$w$TD1L!{xT{Ww{gi_@J?rKYi$ed>{HtUnT=C)M~Trj+Up`K_-ip@t58do zTFX!RYdPxF%H)DM@k8soeH6Ws0*_R!i8@pE-UND!9S_}H;NlO^p!rhATL$2Y6Q#gE^#sKefZ_=iic3@|n$X6PvGDHbTC~AmrV04JXPSinPfzpo z@9n~!6vK0E-DtCSQO>)M(rkbk<0G4*Q8)NHO zBF)DA37oN=rjRx{L`Zv z$9U*Qt_%?_Qw?UX1 zN`-ogN{+_MUKefQRz+Fi`P~ZOR-!0JfmZZq%=LtVr(Ro)Z>#%hm7v(fKZ0)q*xyGp zkHOKH0n#*QJ=O=q9CVJ*-RU$Z|3(ou`{ z8l39I(KOo~YaC~w)W3Wy{jG^y+((IY8ai*eD9p39 z^bvkcPrN+1B-+z=0Fs2Ttk&w(%KFooHI2>ae*?;F!wSnrw2cAMwhJ?MU3k9<-v>(2 z&OuXm&E@DEU}%WVr_e&0Zs>yj!Uao4OKdW5rCcql_k`MM{%G2Jtq)vz?&#<}*?2*F z(ss1pW#fYTlDjdcGzr<)Sk1og0HgTIHaVGWR#z5P1Sg`#w>?s*|} z_3;-%r%ULLVs&QqJRiz9{(NXA-e%x_Cf@gz&BU9`!kKtpqs+pW3&rkS-SZ;Kdr>X# z#c+9tQQl#c_ae%}FH%r>ht={9tK}i(FcCdUc}CAm$oo=ARHJ(6X(pbUzXw)bfTBx< zqALu=%P8q(r59EIhP~f-cH5H0~ zs8IYvg#sxrh}9b??+vxQH^Sw;j`Chdd2gUR{Pw(|miM|^-s@_4NO=LQ-bCIv`>}cx zrMwwB@;$J68&JHhLh*JOinmbGTgd-5pulg>+bR@qsZhM7LV=VQ#Ohs?_pVyryW#TQ zL3!_>ymwI^etX_k%X>#H?;W)~q`UxD?;-Dd{aC$+Qr-&%T6yqx;`N?zj0DNUrm!7y z**+gVzdt&l^>@z!26|Lb_iWTX`>|Vm zHK_4VV}Oa@nkx9*t!&lBw@4F+t z{T+QD>8a`q^i=J)dTJX|R<+!ZS{^y$@eBPlWv}x!(9i2GtZ)3M+VK!Pxk34#2ODso}u<> zMx&~!tF~}k*glQeucVDe^Y#e87V5~0uxp~Hzh?zl{NI(fZlVIo#`$N%))V}f;lJc} zf&XhZp1qEwkKoJn4Aju>mSFYuw)TRn3pI*r?GoqKo;_jf*NxR%LcIj)l>kdbnn=*c zUm2s(^gtZ~-X0he;qPR>wT}6h%6qqhm;SC@FC)!|k#z8$i*q&4f`NZR4KDe>7`|3CR`)%W7F8(S6Z zK3fA0IPR3d+FLw>_-usxVXxppGIrp7v<&^F7~RIzW8P}n)=H}*G`)ZqkMv8)25{nm zC$bhBk+QaB2jFYxyKyG1AY|Qr5;?0A2^WbBR*r$;TULz7s@$dr*{?p)d zI#{lwyEy!hdzmQg#P^~wO8?uJHM(LdUEvh>D2}i9R{5i;kYvC}p-S~2M878~V3DHV zkQ|79CP}bWtWqU`_Fkjoh%C4aEob+Q2Rvim6xiULdYnETohPX-`n$a@E3o%5J+3cX zs$elsZ>GI=A}i+hBt@qssW4iK)YS9Fw`zj+8C?_h1cHpH^>_PDmkJh#*jL)^&kTI> zm=4!?Um|ocElN2Oq5R7v_#j%lA)y??ccrUHA{&^}l14Q!f5=7oD9*hx+}IvD?AYc8 zjqPtnH-IZN_(^^py2y?H&s|ijO0h;nNLTYQqdj=%zevIVmW#Suo`pnvdqAS8a~Unz zpOgtwz&;7HdNJbze>K4OIST9CF{}1pZR)Cg?GD~3ZN~3fP+a(H9mP6u!9_@a=oKq2 zN*}&c)AyG3`hOs`AQC@KtwT#+e8KWhB0Zg@Ik0GxlQKqlFw=c)CU`Mx6iaDTLuQy}2j5ceh$kA^kr_RdhtFzas zWmf3ix=bC;oD9je(`!52cJCw|O>zdIzwq4YJyY1Mosyi&^tNS=IO}hn#QTj_-PqG* zS%`KYX{}P)6~SybWh%Vc$UJVWGYT~P!HNs}{BNuF>TNbBS88L|vtKd6Tj$PpZ*gyS z$CgY&OKhli$scAV%Q5QtkH-@;n08l}crAmp!?}GGVdFj@@`optxf zO$!&`1W7LV0&-|~YZ4biGVrKnWB!|2=3>3oBDy@Mki#hGtvc3M!K01VSG5=Gm5GuS zs{TgcG0VEqd8#ZEcvw|DM02u=hn_7Of``s4%GtKxId)j?6K6A{^&Y1Iv~0kxUDV$@ z;Zri&Ob*g6xS*WqVpRH-*0ONvasQ^3bY7P{$M&YPbj*Ee# zc4tcDnM-biUNE>_&aKkgB?axGrM$X7&nF2TzJJ#)b68b=d+|cHEnPxO=&hLwr%+3@ zD_kjWUaP(}s&A>EwYLwaLm!93n9>fs<-BHQ3uXPcKTgH=SV9KQq@=#RFQFNjO7H+iXu#?$Vgjf@ zZ#9An49>F^f@jl0Ep=yqzMrc3YF^?FeCgvjjT&@Tlk;|#;W=Glwyt+>T1b?TRdUSN zmGxm3sPMj;yi}IL_PdX`54f*Iyw>{aOwXo{Rw>pRD4HlDCcRSaJ4l~S5VGujItZhpO3ip#gk-Fem`wCyN*@o zAIsY6F7Rx!>`WZX&Q$1?ooPDjuToA|WO!~%KZ~3tY3ERLcbYcttsLrl>GGX8=MCe3 z5=OtlHs4{ju2o0B-uk)o`;C5`m$U5}X{bbdteY%n zHrlp3c3NVbG?p#GeD=8adhhkD-ooj13&+c|(O;2qt?wV#*VtW5<9;`NZ~SRo2l~e~ zY(LHr9@jqxR$4!gw%`Aqt)QhU>QAp%)6WN|JCyb9RZ&3*w`T> z_LgDC@dN5x>yWfUdMv93#TT(!Z_P`_whmweeqSugHvp5_Y@3^&9&&g4U-Qpq*RrkZ znD0fZzh~XdirpLXQe|zlekMdl`GaVC8s*(lqkQ27NBOJ$`Kr`>G$MjgBf{joj)@o( z2J7#gF^6?|G+Jn^>x`$4jrff#a;d=CXoXxw=eUV(ZFqkIFHuM4U9kdcCHXEa-7SdFb^U{v^;=I?f zCEg7dy}rPEpV!4c_r)BJbMHqhR9kfVTtM$}+u3%vP+Y_c+z|@bSyzA)h@OgcZQM1b z_xg5Q-b&Fc-RT@hXILA!);&`KA?OmN8lT6S>U3iih$eBY3gKVFWPGuT^&WAabt8H)8YI5{PM8NW+>#;cD@6-~C+ z9T~-(?F;AW3cc--k&D^mY&G+Hf94%+74@9H-8+@dV*Z@DW65uM2e+=sWV_g5CO#6+ zEt??eZLxM+`3g3*@N5Mi*Ohz=d)8acWa}cf$V>UF7e1SF+t}soY40p+GZXbc_0qfD zGL>qwy_=%y5%D~0uQ;vPEhWh*tnH?CZnF|+v5kD(Yb`&gOtJhWnJd-v$C9Ohn-jb= z3Un-^SYN^G7rHt9nZ;%1b6E$LaUA|I<;a;&Y zqqr=)Z~mG5t;I%lWLp`XAWUufI@+?_2^nsV;n#{e%$KW^_m_^g7{*qzE78Ih$ZFnv z3v2dlV~ad{!0XyQTH9`O#+6e(BcGqlD>a>=b!N;Ow9e;?YdTK@+S40HvO^`-^81J{ zm~H&EqR9NY2Kl+tDVAEtc}2F&Og5HI;lF`*j#_9nyVGq#3-Nk=1x~Zj7r1kZIi*^< zjjd4}j9STBK9y}_jK4W)8CvGQQmA%4zf6>wfBuN_pQIB-dKcwHq3YZD2+XHHAnE0{DccC>bGpIFg z7)d>PK<&}4aF5=l_UK|Jst`X8h>P5nfcQS|B9;xh(dcluoJN$GwqT)u{zzsm=hNd* z?{mp|+hro=B+DMjr5-$p9!yC$DrV(kz%n}B!)76s*7l3pZ@iDQIo|p-z3nMsDvK+> zm0gP7zh0!Ym-4k@CYuXft1Zp!&%l-Rj??J((;F>$BUw9o;H9((otTtQ(zwzT#(VFD zF7;*ceePXpTHjxq^vm>7sB@~rsHCct8KbnN5!R23M8{LZSm%W4n0jdua9-$M1e|-* z?qZ8sGVqYGTG=gvj|K_L#=|nSSY0&%9V{BI@MfxGdsr5t1iLvJSBQW6f zKlQYG{5d^NwA%bQB|%x07GukFG_!eZ1j;|)(Awt7l-=?oX2b~k5ik3AIVP!IW4 zJP3<)Ks^EYX_TWlG>Aty&XlcS0gSjiI4V0vnVd#+l*XSNMUX{kN=PGm{4!}dbA!^J z_Ac^%*$>5PKyfFaxT+tD`DyCd=2wZ2vwgX7Gule^mOC7$6szR{wHJ1U$I69h&j&hK zJ8)Ov1)cQKRGX_xSEN1TXPDXtJ%1`hjTm*H{OHStlLz) zTQ-67h#1SGt8v|Xs5pYvW7D)&xCs5W&pQRQPCa*{x83W{$#OpJb+cL4)hZ`#_wJTw zsr~euX~YLc@V`$QXq{@TaDF?D#vt|8+G*5QpC&D4m4NOM&m7MK{UcU`zc$^@{yUxe z8}PfgvE^z%7P&7`Td*4an2FxHEG-c|_~5t$-g*`0dC6LJ3evEqbJ0escRG_~gKeTC9yQh9?&6|ZJc^Vdw#Q7B?>OEQ*Dw`XKuiBZP zQ79JQ9F{w#u-qZ-@`wGfVRsO7hWTK+MKPfl_T%>!e~e;OE~>mOo$86Hq?%qxe<;V` zd?e@hW8>Ji+!|6Kqpnnnzq$kSDOi-$Amp4z&Xsdb2II5$BLr=kdj6 ztJMjuD{O(9!xm`FVRIg(rGC6L_BG#gl>2bx&Dz+V$o*CpUu=X8`b*fL=V61685?uh znD+&8k#=e-S#$h+D3G=3`Aw-FKw6Vm^V0h2rMSDN!^-{g#7Ch`9qXjqPka)(r(*+h z+zCrGXNcCiA6jc~R&~K6mc7mt{=dbT!OrEs2y#aX!!p3wX|OFqw9qvD2nLU}E)Bg~>PzC*=$BbNoeeHe@jys&G# zvZ_7%EcZFDe$Tm zk?cdItzs%$?5%Mxa2J)VcORLSq`tdKeV6ZkqvTGvK5YtrGU;Ewcxxc#czQfW%1U;3 zn$db<9JSvuXb+bq#tR9CB{)pIgUYXA}c}d5SoLhWzi?k7!ke1D!1J!M{ z*qkD7#mb4xp>-WgKVP;yowHS>c+*m>vm7aWY0~GuI?JWbUf(~``xL!pu1Ff4H!P*D zU>n_L#z;S6T!l_Q+Z`y;s~WG?#-#E3fP0N+CTq!fzHsU!ZCX|$fJ8sBbaE|1{Z z>OEVbW6z|0?z7~7?W6Xh_xk~%j{P~EG~=4ikJSFi4fjV(Wz#g06C)reoUkKF-s|)~ zC@zFv;9$>!_dkH$+C#Pq@i3Kxaobf}WM0pylmpui`jMAu`*|y?1<$jIYwC~I)2ZaomW^> z9amtFqP><$LMD0y^O)iIvL(z3zG%?vZAX*RamVSYocB^VTY^Jp`y>T^!f?t=+X>7K zoJ#kyDb~|TOW2<*@2H+<@ON-mt(-rn^p?GvPUX^OB|d^d64u z^=I40ITo<#fV0jy$M)LTIqY>m7Yy*P`ZCzl6(^K*Nb|(;WYt|F8&tWP0ckGEANci^ z4po{j8*Y2+6+QZB!v>fn-mSG^jP%9#Ca_ zt+@`eT{Q28Bqbfo%8wQwg=}|Lja6aeRoPwx*?uc)E*S-xu0Wz z4C%C?nsR1(3XpG?F5+7`SU?_Bvqzk9GV5pT>#Q~Go{oLG>ikKv&hs;NXWkkn%*bM! zI-Zs8=`cd>-Km=mu1}>5Euj!TaINNhIwo?Qd{4(ix=kGyr`B|CM9mLN4ms0fFBl(z zRo=1WI#$Eh<-O^-i@o3xt$kULxi$6h1Y~+ldMdvX_aDRB8f(49^JCnb^}qFugw!%2_K<1|5)2 z^=-eva#c$UmAzLuprtKgns*>tOAD2;0LPstT@IrXc{!Enz`BgQY4foZ`zk;Nj7nXEx2idjPs^q!2Cs?yBISU>)a=&(OU;_xD7Hp&poPSgF7Wn z!+1%0t-KL3i*$&H%+g@gRZdnd7Lr*hQ8KH`&)(hcNI+f!r!ZCO+~hj~Nz)yDBbF^h563UU$u zN7chN9=!fN$2>L@JfTnZvHfx6BKX&u*lq0BLwszWC?DG-)yH;~iCczMB{m0qY^v`^ z^|HN_td)?-Mq97x_p+@U`v`m`P4FH>ylgANUbc5sFPmtJc-cy$ylf8D%SJw=Hq|Hd z>G$-qJs9O>+wU34c;#pCR+x&&(^mf-p0+^P(^g&d_8?E&`%#{@UHQZL*&Yk~+1^Ks zu5fCeuxfEJJYlhNXQ^zljlG3kg;v(=+cnJR+1hWxYkszdem~pd@AR|XtNOoElE$bq zz{clA)l%;u?do0K2~#{-(BzRMPtIcSC(V1<27pq>kJ4UWyTl+mE zvg&zx$fU9W-`2PCS?-Fkt2O@Pu%C-s`~NnhUVO) z`rSy^Ge&vd>O?m@Z;Ro1Yr25v?LgS`R$XLPjt}v?Jrwr5v83C+<#}sKqyBnar2d)~ z#(enx`XFr+d{pFlyIb{G5$228rf}IWkGfX%ye)=TBo>~x%afW|j_OB~oCT_nk%K4n z5fAlP3)=G6Lws-Ls_!k5XTL+s^F+!Dd9muTDeU)U4d;8C6Xko$?@zgSknb%MKAT*X z0^E)WCK2D;Vm1MAC#Tf{!_mO-M-HurMmQ$J*B$M9lhQQb(uq+7S;R|a4Ex^PY$K?n ziuHa64B27N+iG!u{_b!P{XM99-X0H+nhVjN4|EXid7ID=wKlSw(zKDXZd?u^(L8Te zVb9wwVb5D;zvpem1wC&MOw-2D1o-Qo^;XfGMVRLOIoZzt1}|OAn!>!a-Mb>}d#eij z-ZsOx7HOTI!}s=98jVEqy{!uS-q2RSq>61%kF@$w&sz?1RJ+%?4d@jMxQ3|u-m1`# zSE09lp!(h(2>aeHoVF6u?1uEW;e9hHCDTrqtu|&sf*mQ$fXC6Y9#{1r^HKxn4P=*D zEhY!2T0gYE(KXppU~G)uVsVl_5xT?VA-jXV#A3DM4`KxG8Kp5-v{2MTS-({#-$8d`54y;7Cq8H}^d6cK0h8>6i%JHtdCp@;RUs4LS;rSjg> z*i~+-S|ab==#J=6#EYtn3`#6T6@2H+Ps9VK3wz*PXaNIS-KZQ(Pr)1^wS~?zcSy{e-#73w% zk_9?1+b*XDu8fJZjBt?B$roT%#pb z?bDNJ{Y1;vD&#JelBk~D9-ARXKcgVaHW|^BR3gpw{2}|!L1meg^942oVgm}s2VOk0 z+0&@?CeMG z8uxUTRD2_>!M}y=T)vpr!OcV;{S}b(`m1d(ixerFN&$-$z1(B)&4`y`^rVw5ttjH4-20+*qz zE1ly5&!4IFoK+lN*tIp)@ChQ0pjeVeGs5x);24itT$FX{Mjjgie64S-3#&(Z;sp*TodPQ5Acb?DT<`ur9S#5F-Z~Faw(C zk@sy)Ff#69qCDTw;Jr43MG^I%`*r%3>_ZD>ruEn4lxx#3hQDlmcsyQ%{&=>8<^!}I zX;N`iTr$|A;Bd9g}&teM& zj-m<$I0xNoJmJ$r;t7fSk7jEd>n!o29WggsEwQ4A=se9ACUAnvg%Noe{uR_%8_K1( zCSe4BJ2GvF+u9#%NSvAC4Rv0DQ)LNqQDkByqVJKed%uyaJO8SzF~v#t~5 zmTc?>Uav*U5YN;2C952q@(b?UDLHPoZVq0 zP3O+oD|Wa7ZQPm0EY`re)cTET{Rfe5clJ5dug&LQT05hb;x9EAM7FkhdX7N=eM)N^ zU&(S+8jwF4{$0aCh1RfRgl6igT|&p+3H6sZ1gA~I8&``Uk?!l)2TXLig6-y1cgCB_fIh2kP2cuPa@ zwhc+Et=S=J!!BJN*rlt3T5ce}E8rbOH=*Fip>I=z)@QCj(U7#S4U_h3qYHk_k=z`c z#aX$HvzeUN1fFR%(IqVi{IxX>*UwmPz=0FF9sZ=cP;d`Q$!EHo##4+1)v6kl$#SsZf#AC+NI zsFbCc1EboXRNI}#1nm?=Q1B>I@Ru;5ZfQC8%~7e6+LqGHYA#_lcx#NjMV$GpW;@Gg z)#aZzohsvkCKV^GFAiqY=?d}IFUw|{68&pD7X`YwU-oo|XjcZe-{V*Ox4^$?Wpi0; z<2pZg6BjJd3y`5!G1JGeQxwo`aL-3 zV4Gh-nVwid_V}}GG0?~r|88k6YpdXb`vuPSkg(0SfZcav!in>tyZzQm>+CJ+{aQbK zOTkC&Skr6c9jmb_W92#88)5mm_0n9lh#A)aZD~~HRw-;SZJ|#Q`^MRRpq7z)?rz^U zUoOu(vkD{&F(;3Yi8h3 zYgXWJ>lb@DJn8VH#}gO)G)_W12N!%Tew93D)qM2l9A;5$_$}wC{P=U`xQoTb*eOlI z7lQS^rWL*j7D+63FVTS3^U>pCG1e_MK`-caz+! zj)hND{Tu6b&q?xvz#@MfuC&dZG7+QrMLu3Jd)@hLk!#COPDqIHM<4J97tYQ9*Wy(@ z5;sv@QSgLX4)LeVK*KH_t`1dBa>rgYaoi_HoT&%?*|3X7l=c-T>|qwWDmx- zS~J%Fnx;K9$M#`Tq@1EUEBeT_ndQVdY1Z6|!A&W?Nup6k&_5SL{La8V-r#E7gjE4X z=j3KeSuaouSL5Riymv#40G}wOGjo&K_%O%H_?{d~tDkpJspsvOe{+V)%+eghlRNNc z0i@=Ic^3Khv{=U&PLgLbnVoxTW{yS0}7~ z`89izuA2-ie>PGb*Hzg@IIce45+bd=4xUra_9|jU*5Z_O+5S>$yqe0OU%(8NdMR!t zNst)llv05|opb|><>SQ{7MjB~>sY*+Z8bAD;R zA=}DP3NP`PIWZ|Q5|<+>%ruv^RJi1ssJq(6BVLEnPn<2~jB+N7V2F9AE$lDz*#bjB8GOaeVV}78kby}qj|8pcA$}m>W zmWr6&n(4fOB`?gE)>alkM~?KERNmY4k6)p#O+aD9pK1-&wcXWDq#9$%%FaK$hs+@qFog;(MyI7ky) zfN@17SH;7w=0~GFE>!ob{<_VMD^Ik97O<<*Cd-$now*s&R^Vt99d!=83>H1{WJE1) zg*0-;>~8F<*xkH9POs1Wv0KTl+|!L!UiT--4rwyzKyX-BdPsIVS3t6G!KXOLeMA;m zNCMXBCHl(QK2AzkrNX{&9aO{9jgxy4IWzWf;*{OZl})>wK2!OtnR~jK;Gwj<{9Fvl zkWG!8ZBs*$gS;m=?b~5Jk;si-Y5gFPJGKf^t;fM_g61_P;Nfx_PUYK|44)>a$yk{t zJ$_^Dj!Y$PCC|H@yoE|KI|SPpQHV=+&QxqtDn=X6WA@Nu$D9er(+-$3%X!}F$Wm+U zK#c_rTzzJfSsH+Wt9P&DxaXgIjqgesEopFC9Gi|$;Bv6nB_~%e5$Xs=f{*9v%fzTJ zIZeP3`=MGKRoR=G_(n08o6k3Mr8#O#kd#4J7$wLV3+&AXe-q~3JppB3m%rP;tFg2W zk!qC&jO0#Wd za=YJrVCD$DWJcLG$sEV*3#_M8a<zWz-S3^3~$6 z;T0gtFo@RtuP`HdMmHH}O}1t4FWikP_!y^7K3`^nw4vXhr%#9We;EAw@Gg!6EZa!C zj$28&36gJ;aQf9Q4j1Htmya_$B5870#-VR(Pgvk(aIYs>wAVQ=VB2lM1v$s%prjd) z1vcPm+ijnXxn2b=>&#@{oL;Qsn-}1amfM}W=hQ08N~E@&LtVY7t9O?Oj{t{!9P-_@ zWZ{y`K=-bk%{u(I$U<@5l7h{AA=TCEr`n7X<>zdjNtN5Wn-X)XOSw{=Nogjjpf60E zFBVJ9ymC`h!`|*@N>?eGo^+}TFydEXbSY9J{y06*>bI~RH{FN@5roT<3y#)2IiZ%jCTE~MutiaK5r?ff_~ zPOg=|SmoJF)V9QWCTaBSEXFS|VGoyrZJ)2o*$nO|F2?)h*_q+@^RnUhu*5iG<$G?t ze-FR%*pt?k9lS3oR^pY0o{PEJu%+C~0u|$-S^iZQx3ar&SM#!ZpY7Oi`p%cip_%v})*ww$J2>gW0=`HAOVsW*F=YK6^Z zzwnR1Y6r5wX4zE@5B%qZaf+(jxv-0wW{uAJp1Pe8Yif#6L+!uS;>ZWVbLXC-I>yWY zGn@D8y;KirX}#ZB4{2^+8_BXAu&)`b+<~YY=j6tdjnx*DV3&W9J!<=uebd1&$aY?a z5-(Bp>%kUMRYel4W3ry3t&E|in8KxGp_JjRZn6QtQtb@dA#J>@L$roVPKMk_ZEPTj z9Cq2W)wO;6zF28C;CXLUhRx`Zz?rPhcnPQ5XBQw^GDaj_wkK&0W7Zf*64wKI$)sqp zB+sA*4l->rq7dkG?=XxgcTIK@Fufdgkp*B0VrLUVzED0Jp*&-QyUm4BEMCkBSwViGUjZ8;m{Q%6t zSk5+1Kx~|7hBe+-HUe;7`?c8`>-d-32rZf@@Tal#*8O#?imjOI+7b$$_(t>fX}(L% z|8cF3lau8HdDaL~)Xiuw{xY94j1-Q{KDBC$vb``t););z-Gbo|C+hCkJ*c}s%eGZE z3O|MKFAI9>j&6gLyj8cIp7Dorx;#|UyzJ3RZJ{3XI7epJbY`yCAF#)aKVYAoC{t8<5DIcFfp7?S>eb$Gcg>qhfHsJaFB&04U7&YG^oz=o|B7=S|aLQFu4q{&W%6M}kO94y? zGReer(ON!Bh3Oi=G#8L0$R@yK#@#rHpkkg3d{4qW7eRFlP>sa>M-{av&V^_^Sj%hS zli}czqq`99jG~<(a?TP+v0C+Jok{c(Of*MHzE4g2bfWvQLdt;8)=J2^cZ6 zn8BJTEC?vO<8Z|?_^E8_ig`06y{&TFsU)-wtehmNsjRn&{4R;$L9y)gf|Ib4UbVX9 z%z$UN4%e;9UzN?PXmr<{H`+KQ!%X*bh%e8uW|)OiW-{Aio#a_e!u!?dZ!Z`LJ*pNX z+XR0=D46-RAdjloxDAb>12L23`GLxP)UuqcgZHL#UnL*stl zz>N|7Uee+?yE7m02Bc|(g4O4EXvLvm$yb6b1xh)Z3DHX$ha_30?Jwcmb9#?py9e6d z-alJ$37gmSd=r|>R#)hhwMqr3WZgNVVyrB$7%BUn$_#v5pbMmI_!+ZbCvD?`Z;iIe zuDq&c)ukiKKU^Y$EAYIu&FRPt96qcIym%P91F2Q z=&QTKimTU`RM!GsJj2sh;mbZ$#FuvEYCLUqb37Xjx=sFqVaDSUoI5dGT}klbX?6Wc zH@NPZ7pU9hOp<$j0_3|HGXY&+2(p4%L475S?JTD8Y0c+pz+BLlLG`8|2Zsk7OSu!P zs5a=4_@4wVWTlSwSco6YU9~075rLV?j^O{8(aUAB+$Rn#tSB$V9DR8?=H;B5 z8fu#`WBNo+1D-@rlL>aEi1rfq(w;owJM8Kd?^u9Z;&4r=%VO62c+{PyiV_8QT~OW=uuM-J_+ z#mPKo3>|y>yi3ODDw|neU9?CsSrug@+LoD5tV*+9=8V)u^g`{n6f3_fJ^xf;LTdvu zE_erY%1Am&6QQjbG2P>;pCR>Bm@sPpaGvHhXx{S@=|qJM7Ema7_B4(2_|PPl3N607 z++`ix-&4^wuJ%wH{6%d8F8Iq~S|BYvmI&wPAR9S3P)3r%RVS9`6fRP9z>7C$)ul=t zmr!@NWsFnDlw~y*!BOx;CVIWLVH0}24l^lu5_6iskL#_>AX&Xa{SubwRmvyVL;7>x zC$g||MdLWCw?x*on+heX?qcaymROhKHFdSe;ZL^CU zXl;~SyJRi996qQyNL7hc3Q}#@>yhK7(b%zL+Y-;-&3g^v3Vc~w?}kQEgS!IRUN1;H zD&8nal9!gxu_e?OsHs+=9VgXi+VtYxd$m#hC-e{TIt%uHBx>N53Y_&RlKpLO^IH@F zcg^-LzfReNyC>}3n5ns4pTVjy-r9YXZioGdk5WBs-=vUldb_=^Yz}DpBIpqG{eHVn zE#+SPQWor(b+cij5+7WNmln-xdphAzb&gwI;>arIr zBB`bu!jLQuLsDed_Rb1Uz!zHmQC-Zxn(Z+85DCZ)~-Z$vD3}d*|C*o zB^PrD@#U%IXlcLEPWn_*+* z2Hpi6?{*jwNsArsf*2=g==XB}y8PXjr zEK zKPnQ_K@lC#F6?yAW#9PQpy_eJ)%`7>8Ti#cH!dA64%ay&58KZGUtw?jWZ8r{fOz@0 zSm{J^{WN;;IC}87N=ZZ|xq*{-KB+z%Me5Cckbl}Q^{Q$~s2oRq3csQ6^o$*-RSUt2 zU(8F{Mk6|jR&5pjE zlvjhU1^212>8Hp!pgta#ZROG%GwWB>$?VFVXIB-#lls_=S@qEWLL(sOJs3%zeLSKD z7GU<Wc|Qut=CIMsO@;inw``-LjAR9$yi*} zvec^AB5KfxeVKaWjnbdcnsF;h=CxQ(rx-CJcpmp%ktu*k? z228Z^HUgtq!R~Xez_VNfT3;L2E;a(OpC)-A#_3c_D0t~VNv{>^zl5(s(;@qo zHw@8GFH+MC7ss`za-cNQOh*ipGE(l^<|dRp9?@YLOi=aMe|>sko%%XJK3Grg9wv39 zY*%2%x6&W_j`SWt60L*p`Hr+1(0#0;FoFku4TkWUp9q;$3v0v^NBilAItrChY^uR|Fd~}gMg@C%#w4#W3lk1 zHiUv#eNtuXE4u@e?v+jE3QfXXfjw=tcqKjJ87NkXJf{@nFd$*B@Dm^S9b!j**M`|F zj0TGSF!x7)xHe-R3bP}acP(~pF+yjY%Sh^!11Z<$)rer&joN>B`VKa@R;@;zD#sHjdHC!t}O0{Y*LatghZmGp`tTs+py{H+CPWt+TK#^4xC-AQ(E#ha6%C$86;1lCH z=y~8KYFyncHV3itW?P!L(UxQyXHWb&8uS zbGn?_kV3ybbr{~{I{4SJ5SP0Yenq~#)?ABcSPS5JrrZ(b*)}_7=-pf>$ep4+7oS1I zHYbT&IAv>7Hs&!x!C(J#1Fb?-HszWM`SSSkHH9}cg(`IXb4h*K7`ZV*A%hRi3_nvU zTJ}^tXKTT#r%n0h!aGYwKm)(hwka2$C|GjXzZ5%P&i{B(QG4~?A0Q-+Cf+=}3 z)j0`eWfq<w0{{lK&2D>dc^#YmqSuhBK`-@%Pq<< zud-fc)q4+Y97jO+36u1|%I z9txiMl(S6|8GM3QnXdBADWDW&)qV-T{uuFgPp0?Yg|0@#xi>o`j-#0aUeqJsQRE{} zqy>C}Y9bna64u=<=QVmIpJ61lwT2NH?KHhJs&%BD!7q6dYHaVF&0 z9m^YOPQu`@V#TgEhsQ2O0=$-_lS~EWoJb0kxi)7O?rxZjSSX5wLVp@2Z=RmZ7f#+n zy5Y%&lg&|`Ls>l9Pp6EO7UdY7&^$2z z9Z%nM_Bx7vu=JC82D|WhMn(tVT5vImS-|=X+-Wu!V6zn*uu6x*$ZBY&`4EPQ3)4?Xe?2ipA z>_Wl6pX|k6mUNf!p(w|$yq2Z%Mn^Ap6UKhJm1&6LpKY6fy%foBrTZ`gF%)$7)JaMH zDLapu6MFjkb%PXG#4Yz){)op&$LcNeI`z6!naAWIWB4rUn#_1EsF!Xs3Qyajh-Dj>jCa&?1!!h?(s2 z2`xJO&-6?QYzo<1ORkF@pQ{jEVGVRn_(Xy-sqH+{6F@A_Pp~ zfS_T_B~lD2Vn#@iA%ut+QFD`fGeAgU1`Jebh=@oL859B0F9M}VDMqvi0Wl&XrIaF4 z1f-NOiIgv;l-hvEect<=dozjF@Ar9L&-2Ici5@<8@3V)s)}Gd0d!2Lq!ehw!S%$CS zv`=BTbCffXz_1=s{qVaw<_;XCzJl|s$XIF>YP}4#>d6!O-(M=($FKtlS%CahoTBC8 zF;)6)1rOO5<@jdC@ExC@@#ULVc4e_ScE;cAUOvDfer$_1->V zK*8tkWM?mXGhOI~eyzr0Oc z-rZ57IKzoK`-MBGAl@GHrkbZZnoPo@%c8JV0j~!LT^-#2CvkS)z&^K!rK#^G-3@&~ z9xC;)4@hftQ~y4r-W^_4>5x}%i?Y#shucr)cCV`z_4S>Qn%Jf41cO7%#4Y&VjIw_i zY_Q4}%M*5^Cb?$5twVV0wEJqLm0#$!$-V1da^GfT*2LEFE>Nztn&KK2yVCv8BO0D~ zacF-kJjZRr+BCSvmJyd`<$CCmn70nBG?H8KR+HO86(8M^bcih^ECz|iw+c4vjNm=+ zdDXFX%tBo2s$B(Rc?!J>NgL1`v3Nm(x@*;~?rP{Iiq?q5`PJ*Ty9ydx&ySH?OMUIb z$EK-oOU<;k_LLDrC@8IYInfDsAv+E{!=4G=PM^@jerA8v;cNU?!W2g?(%)XR<=nsB z9Ws54E|~$WuFNF|D_u8=j90DDrcYZtqwQUS|It-~FLz9j`W0tz*Na}_Uq#*ZqKL(X z)$5_JcU>hG3AIM4Z)e4&WfiDzXI%*VH$Ai7&GY6y!&!}1N^S1gw4d?4s2IK^63v%H zv{rY7D}KUQRlWSXqWUPVtDOa{jlpj{PC2NL<)8iroR34?R-x z);ea9UJEN$Od%;<()U*VQipV zm-8f0@48s?+gPt;46t{Oif7gB&e`9?m-VRFjj{IVFJEN#xIJ{pkMu%O-xLpKM*moo z%>Ge|-qxAV^UcdG=VqB>=vnvHvvqjL*wVM0tK(}bvFPc^_>f6W@irS6x3JeTEovtI zU=hh7_!iroqj;N11gDt`&A5Me+>(iR1-(4Uh;V4Ol-pYsL@ZO@TYjO{nJRvO5urHB zxbMs3Zu~n>U&2rLfljulEoY!0c+?}^!qtpu$9Fhvq56i`odsd|W5s-V)cwk1m9K>` z%5_88!4d`zW)_V(dz8_Bxg#FCeD7^3H8bmE#@6){^*t9`tR&wN`U`t*j?OHH?h zDQ*-egSW;n95K-bA6GgmsmSSvHT6Z9t@x096Xvs}WSdX0JFGfWm803thH1eep%#r7 z!?U(_wtq9q`qJ15x7tCz{7s!vfsa?4P>VbKmFy16oPs6tcvxldr&!>Q7z;@8=P;`j zKT^(dM?d0g3}MDxnu+%m-i&d`JIK}wdu#DF{PZ%noZaU(UNv(>>7@1Y(iL9*(NS@A zQ;PX&#S7tY8Y?N|C!t05Hkq!RK;{B(KJ|Q{{)iuGb#fIqlfYcF)h={(;S(3JtXth< z%(lK^0hzvp+pzPFy&0V`P3=jvSk{v+f2XIUsdSH$u1{#qxz}#CD!3b~?xZl~UEC>j zRMeYiG_16bN+1V3ZNt}bMlpwT9UFeZy`rr0)@8JN)wXP=?cZIMUt)e##L^JYodw)c zWk=vYdbp#-Nqb}PRx95eo{qC@nXMbRvqdTHf=%vT#?$nIr!7k*AlV4vElsbgZ@O)z zZ`sVz*}6f3Go%-__+z`3(-WD){WC-HA5?yhdT0doOzogYX)kw5wwWPYxPP*Lcw2NQ z{BRgGTNovh+$KDB>sV~tvjTZ`A~<8K&MbS<&6xxq0X(gIMvcwyK4YXP@@jb@QGv{L zN+(`eeV}^5x!c9|GMXCuXf!pMbJkZD;L93Y*SAKv7Q7v@iSLP77&=+&+9ACGd20 z=$jh?-Q*u<&n1eM zIWDuC5s)0a%0Il4H^yGhj@|Tiq&;|6m@i)1!!x6Uei2%^>A%s(_5};nYJoxQ5|6}= zO{mP_9fnY#L5-p~ZJCdU;tO3<>IOp7z#8^CZ`qc$g(lt!Pg>=#sVKSHF;?B>N-=#) z1Cc;ux;RqO`e$s)zjS^|U2@HH?*#I1V`&38c}%Ve;%b}tusx;jacXXt(7jM!L zgo3!*CXPir&Esxf&BBRoU#{ByiB<*wzfTAm&ljuMM=i+o4fKQ8hmz0dhWX3tQTC7C zv8CPSq4SfD=vk+|);QIJJU$;$YIkyvRBReiS5Z^@RuKPoimJ+p{_-=odh#JTxEKC7 zb9e@DPK~mgd~#Fiy}g!&E!1qh!+@AoH%D+Ui0eVlQ$OjZ<{x4FPTM%=Od>t8_9w}! zZO-I(_N;n-wNK`i>K%s4wfbh*!b3BN{JZJy{-an$Y#bo34K+ap3Q7;){=g+Vq>Kv zZ1LdC+SN9CCr`@HjIbv;bt8atr3W*s9AWHp+cHloy))HanOT_NZ&Ngg&np=^?^%uc z@}S!=DjmkFs=j3EQ?+038qBPEE;8M&z9t%!WDndcLB-WeggHT47+s7cWgO> zWY|q>nE^(xyy&x^xs!SF+-9G?F(qMALMk#&edqI4OIEYyrzs9DSF7_IWj#pI)xJSl zncSy)*4Hy1{bVDnKbj$L%7243@8YrFZaJIEJQ(^&oA5~PtJd`k@4WHBpyQ$OtRRYy zz2BaToQb?_wl1Mc9u{{Wd>gi~%E9+9Y}ZVggcu|3F?>_CZCbawSoR9KDU&vts)RSc zz0GJYVI|*B-QOplFFf-3ylX&m|IoaInXKq9@os>8=(E{-jcChOptrNFZ7!Yx3+SN> zYW#R!buqsd*BHxHjm6(~UdX!-MyM4+59z+VRl&a^wcw=i5p^%qV_&X$&{hyS6g!1W zIxSSY@DSU*q20`u9tU5Q!HQ0wdM4SgfVlmt&bnQ{m; zmS?J`N;nNPDe1#qn>nkDAig3&X}kTIxl~ITufCEoh9|?~mG{W$G`(V@diuv|`LOWH z)yg)rb7Naz5mZQE;sl& zDeYAGi+ZE4k07CmLzQ#QK>`*rXzW-G5+^T07f(_2SL+|F4C~}hxyQ7Y8J^T4f zZKC3Mw!}J%m0V@FR%fxQcEO5`U7Ir{FJ0=};4M9o)eNV+gimu0;I%rc6XFML{$V}P zf|7W%k&mHgCQ-5<*X>cius_#e?^IS!4er%>u(Ifn9JEpQ=D*L)i zZpUv+NwVMvciU7A^3U2UchRl zj&>L4Cr)8xX<;wx<82f8M6}e>^dxq+!-11iq`{M^(V`|sl2b(p=aC~-YGMJ zXBv2Z-1NF`?JvP8Xc~Q9J{BK@hQ$}7(rr;{Eq)dBS?Mk!XOAWo=$a_Qe z2;Q&41M+tE!hAy!8)<~0teifS8o=(&z>aKebD!?OTLj)*iLPR6751k2Y|+PlSiHmY z-dOi`@85Cr6l+S2ZX6_RQWEwjd3o*nW4l& zWr!5}MX`5NZ>w>ie*CL{d!CiF&OtKqXYFiHO;s9Sm(1x2fyT95EedZ?HACCejBj#% zsdE5yU+w6NS2}js-LZI1^6tr5b012qyE!ANPMi5*qK?n4AN?`J9$4_s$%v4<4E5ZT z|AY?{jMTUZ`K;{W;S0|An&%tw_AqBpWVHb4sq>C_dx-NVW?1utZO+>Xhd@PO*y&u6 zX$dytdQk|opD(EcjL!D<_%QqOM2wgx&zAplvEOK(Wv33#*VUXBWT?@jW!mvgKLYaOkpdGs)zpRs=(X>p*^ ze`7vxJ_0Jb<1y2T`@QSR+@EK3ud5W>0;T0A;Ej_)D?W8T;!HOzktf^{XS$mfNj3Xu ztknX|{?B7E66x2Y8O z>D2SlXSTVGbCk`Kg2uV-j8i3}Z6-fTdrpD6!NG09q?LMuRICI928L+(ag?!Jx8-j= z*;;}P_i6vXS{hnEw6+)V>bO=EviMq&;^v`82E#{^-Eb;9ZZtcjJMhojcaRYO%IQ0h zY+z>H7^D)QxH!4(m5czqo73R>37$XI!xYWl{%`4idzK6n+4#5e3g{6`+N2ajo0P?;I9%ShJk zmvh@YaD5LAwqF~i-n#UUZ9Ss!P_XAO8*G0rry}8j%&?%~@LnU56Yj*;8O91e99z3l z_on;9vC|UXu%(2U-<$GnRnP%1<$rGdXLY*yUL`rb2`#IWy&^%&Of}!obdUW`BQN1( zZ2i^`dE@ME-u3?ROl^ERZ)@89%w@dzmXjVWo(J{S`<%YX)>0GLiiQORp{2%G4mZna zwY%-S*<;_1e83*P+Lj)M4ftPw;S1W1Z+Y*0yT!jU-!iymV=Vq&K8qi)C-byIK=>$5 z4)wfN_=TvqcesCXV{$9?eYw>>JQ4J$y$f$o@4|DI>T6T#g#M3|7vdaG08wtYLfxA8RN&@ayyZNNVikB|hVW%C4D z!JNFLz|Ns5bvp(bW9d7k`MMEYaD3Z;M?M`qI`rsP-hLe#U$>%WIDY*;pkH19 zzdG9=jgq|E3c4FXQMQ7a8Ot-&jCP0lRM5zyYB%FP9r7pj&8S{>b>7m+{>=k@@UvNg zcDbTvJ*h9}N|c^aziqQIi%>`2jGBy(7_(a{w5N`k$hQz)PF+?Rui5_8^^U0DsPdzd z9x*X^XUA8K=krDd`iIxAs=#k-ea7`2f7yzJ!g?lNTa{#wOTD(qJaY=?OKQ}cfCeiG z-Oy&0O(!vG$I z*&R`T-1-`A7?%8xj-STXuZpwTQtSNdH!1Hts|E0r@|EBb;n!BpWX1D4<||{uSj~CICzj*{_B*yvbv|XaU-|w3{0qFHw1cY6c;X=c&zh{@N#1eQlS3BY*rrB=Z`if1armgVYH|*DgL%iF zc^Ll`G%fiE->Hvy4@{I6+&bK5jHuIz(ajj;gIvEeh|7;(H~4j9XWNC7qP7OM2X0PzmObudX?)0}qS}UDKPIr(HV@rPX zcPF_|2SWX={pF{>9Z~leY3>Ph<%{p8ZuITh_#MBQW4BDt=?$JUZSDW8zCKD$7n)uk zYJC5jy$AF6CwE7$SVYp<7;o*3v<)@)l;uUB5k zSaJ^i@#PToQRVsPcMIEG<0-u2NBO_bSQQafx9!Td4yI?)SR_)NseH6X7;;N5A?s~1 zY8TM*eMFX)>~CtxU;IU#bhhS+AEj@8$o?&vwfXiiE2Ml4HW6;c^X9xi1O3=KzgMUC z>U}1>N1zGyu?=tFv9yP#J_K-^92!!eT@|b>`5^(yE9uc=_=L6!3YFl9mpM;GTh!P8aW#esL;R{##!vEMeLf-I6n>n`4!Y7&e zTiYL48Rm0sl#dS{(rK+0Cs&7IMGQmZyf4Tnd~?EVbU4n9kE!QD9*_{vQ&N_%s@Lb? z&6O8c&P{Wle#8Cd%3g2BrRFzz-rbuf0!xVUi})oaHTR2XXV^KdQM-^n$oFc;#{Gwq zy}+ZTby#}*$9f3fNUASisZL$lYvH7ooQudzbRKoK)tEBRuM<5UeTL`YGSG~%i+c3+ z`;0*6V086=cT{U{$oN3C^~$OwwDe(0OMl1@E!`h2JtKkK3j)y2Bhb#DKs&GRIyP#~ z8J>?Tvb5DOq`3ggxzf*h^J;F08MgHGIJ6J7o3ixzFFMAt%TPL&l3a7zf|}5lWJqv4 zPY^2l{^g-h?ItR#cyiC$MLeXQ+*7-VN1(6Wf*9ztL*IdfO{pOh;>N38#MQ3x_Jz=S zGPjd0oHLM4_+g#TUC0yPoou0m+Y-J^_$J|C!hwYA3A+iib_XBw>=+cSHq%~>-fFbR zN|d(LC-_E3-aq0T!7rY{5HFhBc1dNo z0ngO>$}_cXZI!hlVRsC8W_RV-nYAIKXV&^m@HIm!Rp0=fw+VLN7hE-Pp{3JS*4o0X zw6ixYZtFhYiW6_wZU62#);>02LV||${WX^p6IVJdHN4`OkdBS`?R@sK^XpUJk)w`{aJgCn0+K5kj z8|Pnni)qmFVPn1;t!Pi?YXDtlxpQyhJpo2t<&95Lc`tSSNgWR6XyE_=s9Rj^yn{p|`8IQHJ{R#kio%w<1;O*IlWh>h~iQ<%;e~5DcC#2nHuh0Bogccaa`;|3Y_ptW7LuzU4KXXEm@8xWsNc9;W zJ8eAgW#jFYR?Q!#OXl;DSR0(YNj3Jl*dW^Bf!KiY6UenlaVQP#qS4l z1z{Ken75bs%5-c8`B5JiWyysF(|K}O$;e|{;I4Q7M0a9O>&rfILW27=C(@*%kC`!T z5}Ktlld6B*{51q_@uOdHo}<)NnwOtbCZmgt#*mSlKh;&(-$<&+FUv2?uX^oyJS4l}xNjK^rUR31Fn&whJC4eiTp?#(} zij66*DMcmI)V--OhP|R^g(6vUiW>v*<)vmr_3z(blG4(~q#@CgqB576y01~$jGXeqY_qBFQ!)vX2MbH+Be{k7(_KzunCB)G zWET{bno>1|+`mQGTehlNrOGKOnqrg|WlwgMk#}5qcDBpqbSdE{y2@PHWsp&z?mCUE zX-3ad;)gl%3sizeSwM%2?rc(-T{LBiqfq6yczCkJ?BGUOk*5|(a1`EM2J2YC!H@TO`}Un4!PiZWM8p`*Yk&CgYkQ{c$;mZ9ivxUU3IUYMWl zFxv{^VXHaM`ARxG`Qdt^Jii3NdIw3q(`wiTK1yAMPKeIUFQY;=TFrc;OnIoJ&iqmb z!P!thT&Qx4nqL6~Sfaisp*tviMYOMJpDOGdI5!e$DzGYHUGo zyxC`s9J3=d?a@Y7xoX+QPHmNI#(49ZWqMn%p(f8LNb~ecZ{nsEsf>;7kr9qMRbFt%*NT@Q3T!X2d~$;zlLi)S2fpWuI*eqx%O~1k#$@m!nu`flt6}i z=yN!~L!YNfoAzrpmI_@3WVFgxOV zRiSy$)Av1-Lq3yhQIS!=dgVg8(3lOeES{=0%JNEBc#Bw0RezXb_6JE&GlMlbnvGQY zKek5;QvzyJJaE>HhCnMzU7(@vp3B5hhy zT%s{5E+IK(bdnMO;JAmsKhKY%F)=PZ&PW+;3`-d{=7);90rn^T=T=86~Tm@VfElM(t^m)gqiZMA?dagwn5;5gyj$w~% zOu06uwM4GyYm94}pLtMGhnx2|txEkf>I+a$8GTNy0 zWlclhG3A~%CMC$yC1V=2Tw~w>wFrAxT9O#ZK+XKD!AAa+;sTf2zqp(iFdFL6qBiGyk(6bi?Ta-QuI~rUP$?BS6AZ7 zDKBL#d+2ylZPqOTx*WNV{6c8UayWAojVhNTiymz4w_Q1o@&YUru6#@b>VCf3G=Nib z*zAIIB@2tn6!Rnz*O=7NW75Yxhy7%UCrXUo zy?YzQok}8sfSx2!V-We6nsEJ7jE)wkK z5^3J@D!-oiy!_leYZh*LgK`oE7(aARExF$*uW{jOD9oHkE%n!Eh*W|-_c(f{=c)qL z^{(eq_kQR)%zgEz`i>75=eMGB`EmJk1#sE80=bk-ZsQ8(Qh)!`JewSpl_he5>s?mk zx#(00=9+J$(UN8(=I2Z|nMtA<}mtzbVz?gxK z7%s04kHOqr(ofoTJ?R8y6@g8syc#_Fs(tT_gLY+j|#eW!r_LHKC>Z|b&J*oRsFsm}Yq zEyGiU-3aPM{{^TLj7{H+zf2i_G(uog_8uhS|mNYzNTzXQPG3J48%sk$9 zW#bhSsBC80MaB8FY)*a-8mT$SSW}(~lw$q%OdiA3ePtyzHI*it046gUbI`zuo)vw2 zR`gQY)c>fWX5Yv~A$ZcX^W`g(on`Fv%tv0^;Z)0Z_#Jy7oyIJqhDo`W>oV6K4<7K~ z5f7g9;CT@HjAgZ9Wl;qrVEj_ODn%)MiUmfAcV0s^eOzf{F^Xa+C%)cmzGaynDtE?9CN4o8>f^^ zHU9X4N;t~F@>l4x?)8QxVK+ppDZ9U^j;bXAo4l2bCNtGRRbY@OkAj3T4~|SUP^%2= zS83+I=}BG-Qj>J*r>esfrOavOTKFSqQKwViN6PooGA30K^!=n*^?I38<#X_(w&j-j zO$v&NCOgWoHLxOj&xyPyLq;5Q_AUzSsVy@lnjNy*V%dUJZq<&a8slOwN=;eQh|N(A zsOE|yQ?|t=uBrJ&bRQN~>qwZ}5Noa7YF$@r_)T?S&EM#T)3pW-m)WPZs9c#yAjveT zmtaFz`@UPIRkKEZp}B9R+@|GOGueMG3v<7k@|qRYSdLPJ)$RXOjyGMiVq`#zKS*pD zhZU?voLy-dE#vHFoV9B4uV?*I=~SEQay3>!NwB2 z>6%h%#i>M%2^-U?yjJ`z;u^+g(@H$)$kejDW>Kabz3Z;&U<3D_g9GJoK#K**IOVxR ze2mwbfM!(Nd^M$KaRyA#Qtg$cxp8lxO!^IZn`C9$c3LYeicj;p)vnb#sBEYlMobnO z*=Xz!E#oW^H^eF#ShTA?*@S{0Nqj@zCRv*iPx;O1FD=8A_ZrgjtF zI=uFTmMv;EQ)6SPc1rM=dX+rc?6j<;Mb8TQ;X3-FvneMCXz}VjIh1c6gs2S^dyl5| zc~YxZb~UTp>L=gRyDb_FZ$VA^h{}fGEgG7O-=zCid2W^1D@RXTeW$6sZ1!!@W?tqK z(PdK#$1tXpRR1HFw;sfv_B1HWDyy+)dByX6wBIVvtUPWSB5*+b4-AQ0 zQf?jvTJyFVW}Zn|^)<8SnQ_+S*gVcksN$6T4Jsc6QH@+TZ%{AoImNl`4@ii%){qw2 zdFpBy=&Iadr2XGAWYVMx_yMB4Cm2emcu$oUl_<|U)L_r~TGRWg4b|Nz9VN=-7^6;k zES(%nltUf9nCkCO`=g>3xXfna(2_IDqWn_R4&}r;Vf_!c$jp2CS8lrBWw{(vl%FO= z;(X*C)-77NiJ8`Gsch-D(y$!dDlJv2WyrLGv?yBbzpc|qPosGBcvCGh=cj`FDffBo z7m9XkJqwaiE@wV!f78}9leLU5^<*AzQH)EJi?busyY3#m8ZnXGW9mZI{t#a@1c9;U zd-abXtiIiykLp15zMw6vne67#Kb4|kPp1M?=y1%8#wT9pQJ8JS$C+jK$ z=X$O%&>L32RlEw1XmSnWw`e{-zWnK)Kfe}#{{P`G;Q!_y&!qi-`lrT~_fP5U-oHN5 zPYkhFhL5$;V9XRPzI;&Ux52Q8=+5IB^J7KDW~v z?i804DUTSe9gKpK@?z!GP&y4&lU|I?g?NrUB3VBGOSNps%6U*e+j)vrHg#1ark+B1cdcaw67XE$Tg#I`!SB)=GvRIv;eMx2KvS1Ilrp6xm0a1M-> z2e+N_LdR4N#+7HP@)=YNHyDRJXH}_6063d-X6wWS96_iGy;R1VXWky_y-uvSBYU}l z70Xb8wQQOUQ=)TKV5?U`^31j+xU%>2lu(dgIJt#P2trg7X{X=`+BE1X$Lk0$%3lJv z=4s}+nJF2jB~Gu+hPc&TNa5tHq^P(gpQXgeFUl^nv}21X7T5~(eMNdB6AiwMCbh*5 z+D0HyFp77MF^Le^EBi9XLzyiZ3yX<@gcHH)TL|!nhPn&?V*Bc)(*@Z4i)` z3{P#|&g`mC%0n((d3vQ95=uX7GB%SuX?RG0Ie|JHg=qBO$)O%8X^1Q>D8l2x9O*m| zVRc4p67Y^SbLc8kJ*teUjW^PpZaUAoDvFihm8z;FYNb{O=GGuB<(!&n19J!qyDE_0 ztPCrK*glF%CQB*~)v5{AEwzPas!)YxO;V?}WKr#hzm_R%<#FxtwnnZbi*tfy`J78z z)7H3>DQYw22_-c1#J8qoYFA$M7^OXJWMv#hZ_m$DUb;-nbU?~Z8#c};Ep}zojk24} zik>bfmc^)H$eOCV)5V!B^Rp=@vm=gHgF>;!69F`uV&2QRId3&Kp_)!`PO;7=7;B1a z?~G{bE4k3bbZYe`(@T;mtI&K{1Cx?NJxE}B@33~nnYWb=?7$q{uxd0<)SuMI!t$J< zaz}qPCK{4UoFxfW3L23bbBaX8usIPnt1_Rpz%$h=UpT65c6*vKLDnk@qzQlp^U#*xZ5k%IhE8Nz@KuYO{lHUL z!)Ws zh$o3Up76SBA$n^j9aof7#x9IjcbNWLP12Y?T9_;vGMPC{`dxGmX1c8MoE#?EQggj* zGC47|mzut54EN$9{JIpSUdKvL4TwGcmg$rz8`F5Yw)r@YBZuzD2H`uUm*$n1nSyBO zak!%~OBJHNVOsG#m{80DhHM-8Q69af<+y32$B|8vi z=HBjp-@U{AfxFiIp?jzMBlj-%$L`(kPuzRlzjyC-|G~Y_{YUqH_n+Jc+@HD+x<7Lt za{t+V*!{Wti2JDfnEMO&ara-`C)|H^pLEx`Pq|OK&$!RJ&$+*JpLc)dzTp0w`=a~5 z-Iv^dcVBk@!+pj5Pxn>#zuaHD|Lv}KUvpn~f8)O4{?@I|w$;g=kGV_tEPBueg)f$~!sB=<_R48|wzXEH?Ylc93I#EL_*B%5P*7ay|El|0Fp zNitaqWQr6@k?_uW{MbsROv+`dJSi12O{U8uGEp9t$K-Lz{9on&xjZFL%MAI2RLV@L zl4oR=JS(&1IhiBR%Ut=T%##;nzPu<4WT7mQ#qyH8EKB4SSt`q9xx6YXJB!8F7@(;Np|CFopFZo*jE%kCuuFE%a zL%x-p;+Fiv97!2HObQ(+Bypo@v%a4Bphv9r<6#Tud}QLR&tHj?%9Hm_`zS7_8qnQ-hfaE7L7(M}^s? zkI)-2FSTobJ3T9e)_ID57tr@!^4P3!1GD}lqA?)HJW&@1Mg~LUhjci z%I`=?&Wnw{#oAMM2DfIe6~>0hNK$?6i)Es9cw%sy9xn#2w!IKA&;OTx&*`&$pY@rg z>QiZBxe|RfX|4Zo+8(6iQ4UED&}0)1An~okDA#z=wmRSi|9Oq2sxn{VvbENPcaZ&H z{RZi3x%5zt`AVe?q0F!s{Z}`ZXApme>pW@BeNP%yrwxV<+^)$9i;w2KW_Tn(I>pC8 z(pGoYobPO(XH`~J2g6yy?$lUYR2rQ$!7uu*_IXa- zH@HsnV-5G)fyl?(deC9Y$!tTNLAa#{=OiHQ-JJL2M&4C7sj+UE<=s-=>7796TvJn2b>B{2j_tEz~$iU;0CZ7+yU+c4}gcjQ{Xx9 zDp;?JKds^)1oD1b|8TH3*dH7M#)6~4G;l6BAEaJ?>h*seTm@3UKlS@>0yl%Z!M)%y zknZ7s3B00909*$6gB`%mAoT=LPry(x9^}!Zfbn1sI0>8%&H(3wi@;UjT5vO11MUU) zgD1dK;1%#|4mjY4ZwQF3GuQ=W3A9Cl@!&9UJeUDa0t>+zU=_FsTmr5I*Ml|S4sbts z5IhB*1Cg5zxdqyI>L8f;K-0BR6{3xLO4mk~i8iuA*HR9MmU2kf?rAOBJ?(U@PhZjc z#DMW&vaa>zlLCFyKqr`|YyIYk)^7p$I=DvH`VSJV{}3<(%+$5Wfuco{Kk@{45xfds z*R{blq7B{yQs3aiy2dK2#qS0W#BO&kx- z2Iqr&!Tq|HGjP|=3PgE?R!SPi}l9s-ZU?^EzQ7hD0Z)U`27L>mJi zV>W=)KL)zTQ16(VqNV!iT539&1D1ivD{YTxY0#f`9)!QN>!OXb>Dt6t(I$=t$Ac4f zE$4O7ayEcFK={eI0AAI#+%2Nz?gEiRE^^PkAzGfUYk4EVG+ir!&XQ9g=}Ru_TIqJt zO80{BS9*kYvC}StK$c20*l!tvrDT-0jGjXz~#F5l%dH~5Z*|56Uf}7G52T}!OPr7rSk~|DbI)Ud??3e3-+0 z80$Wabsxr_4`a{g5_p9#u~N0K4IBxkf-At4y4=RtzKyZ%yN~bz@EmvnyrE`J{%Z}k z1DR8F<`kWLI{Ewc-8AR^=kbC3; zo|1b>mjTFg0P>8=;lnDEbh)QkY)#{~pra zL%Mq@=U&RWFH7XU9QdLi45c63PxyYqvBThN1bjUPUs<}uw_~;L03HMn!{=W3+z)@q zF$g&ZA;%!(sGc^vO$P^p(cm6%A9w})8acpUF#NTm-CNP_t*(Og^dIPM1Kn-TffwjU zjGGX~Oyr{Q5^|qZ#{B-0NkKBgoa{EM)+cQD?*QK& z;Jd>m@CyCxF#YTpcoDpeysMD+Y;YyG20R2F;XeJRBmJjS9{sTZJO!Qu>%kkkbT&jf z_W)OcYiTd?-9f&t(9sn-y3G*jRz;ZdyHb9)HH6m@UPpKXVfg3621tBQ;(MM4FVggr5|>tA9m4&^;`Ns2F?ZN>%td%asD8@kMIEy z`SwS?{ceE5IHvs~X}?J17m55LX}?I?&rZCZc>6qX0r9(u-%FT$1IRaE5x4~04AwCI zp(6@9qSk`z!7bo+@HlvqevSO%kzaz1ejTjKz+p`1Bfur#a^?xzh5e z&Y|-@=)8||?xUQcwBJzLZz$=8lJ0)wa6fX0y~?<+XWUb79QDSpL@sNPOD1x0>M|1k zN5X$1YBJGw)yCu!Wqkb;99^9zQFxqt(?K*50I7gS^hRE<9;6N}Mq(2R(KMiNz z8P2>j9Qubt|8V3z9C;641Fi!%ft$fva2L2AJP1PXaOfR=0lWml$8h*aMxM#YGZ}d% zBhTdSApJSn4h|&UMABvIGPWJ>;q9P{dc1$!c(4qt0I7c*^^e;EZl_&t2)0389<1g~ zBkzLS!CLSzcnqW+AEX_})BnfEgQ;LTmbzYJd0 zWl~>}Np^4oI1wxc%RtgkBK@R`;ALGVBiG5ubu#jsjQk3qy8yb2X_qHxm(oI!(h?AP zl_IZF>M5n3vQ>Dtuhpe|Hg9d1t4l?HcEVBM46q7>&kFdgco*CP?gsbjGA)MhcnsBL zdX30*9R*L*`mM-)1c-W?Z z@O;9H2u~$E9b68+uFC@WS^!`3))HQ?%L{`j91gQ^BXeN^lN1PnQ|G$PAkzm@QN7Cz3x$Jt%r9$n5Y;pz3| zU@f>ymoMS>OZffr6nIXTuaNUs$oT^O^aB0#!a?w`E`LK#f6D|Z=Wmqrx0B!*T`ofB zMd-XTOytT45dN>g{}tqN1-V>V1+E3jcZGacq3bGiT_xRB(p@FpRnlE0-Br?ECEZoh z)id7e8E^F~!8PDv@R%;w=&Wvu^86;6FQN?5 z<;EqE8&{B1Yvj}pIem?st|O;3?EA$KP_0%OnuF{SCQYBz%$Zm2~)@0G5DL!Fk{Ua06HkQtuV& zy*eKLGeFW^CEZohT_xRB(p@FpRnlE0T|M%vM}GA$flEQ;R*&4SMIeX1;0|yncnmxN zUIpusODJ*)0|$XI$mcHP(_5Esb&+pvx-8i&vZO|rSHeVI2?t*XSLw3UpRXtdfsD7M z1Htv+MqQSXZW-y8Z2~vzvfL0^-UA!~js|yvyLEZBzsRdmAmiZG*L7Jj3+vY$T{hh0 zOYuIs{5Bjkz!l(1T{dU)p+wxmK=I`kZeo|Dk?81!W6@;-dL4<9>{ zsedHpBj3fy_odlbLFaccNIPs_1g-}+QZ90OMagLbI1xk+uONq4;Qtl)f2AJ0f&8W;zZvv{cJzY| zy8I?s;iTNW5A&x^52B~Hys2I>+%kCy#rnE^arEBN^lmq z0$d610{4Kl!#lLY?^cTZZVh+pfY7%Y`Zhz~X6W0z z3ET`Kug%D7^BM3w{YdCXIv5Kkg2??npYr!qxcJK&zT$ev0|34!C{naA- z-vyD^e&qEh+T%~O$EOh@pY{bOfD?83jCTEucKvJwI9iuO$n_9%Jv0!E*5wFtID#CG z%mwG`a+LNwN_!qf&PS2+v1pNFLqN(qMtNT#*DsLkab4uNjeeg+zs~{pfd|0z;6)I5 zE=8Wpki#};Scg0|fP27w;7yU=`{=TFq{!Y> z@~4tN9i*OR)U$j#`DT!A3+cCm#P1<~Z(q{enHTGs7jH1W{TbguU=J_?i~_igxndpwu{mVi^io#1Zp1bB+^I)d>!8l=8W z)VB$`HbK{>wcvX29C(3o>ccqo2h+g`ApQ9r`t$GT55J>7F#KgRe7qORxC#U9;6TO? z;TpmZt*1z>n5L*G8}g+yPy*!)LU^G1}o6?eNwj=vV^23vQu)+OL}StKI@`r+)g| z+w`}$7l1E;H>g*rzb|M9cY%AL13un?k9X#Si;ySvZ>IjunV=IS|7P-Ut_632(7RdD zI~sb^pckwGcLg)ggn;3o!925)d1eh*4Zcf1hMq&vb7VT>eFl6a!^cR*HS+jE$>Rw1 zA4eYW^E>$2x`TOfC-V<{?t{kj}al%es{aQvY`9-(C!sftBDaa0R%M z^%_3khtChzF@J6VPl9K3sSOdS4FxH;mU3$uN41Qjor8EYbPPzp*h# z!{gvd-yafLN0Y&u^j9DHE%Ez^--o>SA@BXP=l)%+qZ?UAHxceY zxHIc#I_u{I*3A{Hn=1*^@BVZ`mjfZ3Zij;L;4p9wIFEFBq${BP+tL0Vz+`YFSO!*r z+re7K8~x-E{p8OvB7YtV68Eco z`o$N$=@0$EVz7+$-C%w10j7f!bU9JU+t6m|a`HGQ<0lD|{{;E#=&yD3*HiC`oZ6zx zY1;2J?RT2~dYb-v9=V-IZs)20JoSIopZ#4FNV|STyMD#`@)hgL1=3w0-9JZ&{Btz> zDEifP`qe+7@1M|jwJ-ZKyDtBt-~5Yy^R*2xi(t|*UavD=uYV0*XFp1N-Jrd0(BE#* z-)^i0*XvpvL$o$Mbgjcx(K;Ys_Z&Pq=INSnekYvY;U0#2g|7L|7R`6AuIZfb=>|wx zCww>g?yl#&kMp?x7dY?Z_$rcf$wxLwyW!$ivr*EI*{$Br0qFSsA%ywJgUVO9sxvbdks7o?u7XmAL~Ib+sn zkaNx~&P}u41v%%;f}bq-$+`qy(KT1GXs$Al`d!rTS_!VvwW7_U73~0TidO8SYrShl z>%9x4{@&Ezn|A1ZlXKWBv;*=>L2fDS2!Bl&x%0AREu{nD>x5~al-7iichoV_uy_xk<7wtixq`VcB_gV+^!p^#^WFA<_Jn#nV&>O5ns~KOb8DDGZ z_iO3*zs?Z(^j2$%;JuwNd=et85q6`am`e3Nz9hxM3o_&(!shn@ZNKrj<@vX1O!9of%( zN_~5&@A!Gf|3$_-be@3D6VQJG`u{pahh0TzRS6b zale6aU#-i(t3>`i8~aQQ_L-p|^wmRO{cLcqE`wWRzivl+MbTb^XeZ{AO6HSF>aV2! z^_S4MuW)V%-Myf@5B2t;Ui>qp5A)1mgZw=>N7%wS!gkIF$QMh#N!8eA-vv*B=dj0C zh!j7Cy_52vru?Uw2cKphoI$xWDEAlLv4`CSP6RWtcT#Q@W58r^Bsd<-0BN6R zXrEuw?!Tnnf4Lc~!LG@~GA|mt?jr2EOF;TdIsIii?K_?Jo&Fe@h5eWO<>W7CJ}+lJ ze-e2;iM+~#35S5RPdV)~Z36b*iP+U?mkin^1G+Py`>lBN*kQWXCq%S9Vc-&Q1%3*Q z*O&^%-yz1|5#~F_eI(;Pl6feS_;Jh^o$i%9{r+ zfX=ndAM5dxVZKSYfj>+p{xEqU^(4Y?;t7y>G-)V)G4WtBI1)r&Nh`n|AoJF+H2h*F zfUF0@_D~-5CqRE9^Hw5qNE{6!m&7V?F1Q;!Onx8ob3bW6NO)Kb`DvG7S>Pma1Goh| z0K!K~CG*^Ta4EP3|Dz-L9~}pg_bBGckrxP4?;z+Ml!l)ObWVI-*B*6>_9%QkmLu9@ zlvu1)D7+7#Nk5P23N&-)Lv&YWU?MxI6RH;wSLV>+EjL>Pa#kBj7h ztH8D3Veo{mJ-}M{0CV^Q@bkby{G?cyMj0UGkBR_CgU~f5k3N2-`ds*Zri!7Jd`oNF;ZJk0!%(HT*7VVv&goaP{S96SmA%)6{_GKq30QSKz< zHVL^-Cw@BdPgCC0syyhZf{vkNS;%A74sa*+AiwFz?`g_^n)07s4{ii&!CjQUk@7cD&Pd8hB_DLng02@R z_XWzW%HnoSLW=1|X^Vz3N^pE>X|2l>rGe$V$1 zc|HOh0>*;y{XBd>e*iqB%iJ!!-M2e96pROv>s;hIm-6RQ{^Q8~ape9i{o>g?@G^K6 zI+%xNGY>x(3mu8zCGZOMLjN4-pYsy96oijC@bUa()R#qhX_Pk}%mkg_EN~7;d5=@x z=34UE$u|&82Pc3h zz*FRh&n)=N8VE*%Bf(TK2b=^x1y+J9K>8ngn`Ei_uY&c|8%(_+Ao9#cp4rGNJ07H- zZ0gA_11rF};Cyf|xF0+Po`YT;dTn55unP#CPUv)w07rw!!$~6NN^lLh1>6oE15bd+ z-HF^?{vxg*&;WaYgTNSYG?)fffKSm*t!bxrAo0%<|19M^OF6UQb2fZF*PHh0Py6`L zKK@`lI1F3|ZlJx$|2+AhUk<)be_&pj%e*poDma~f3f~XIcNuh*LDvH0yZ|{bq@0D6 zv#hJgC4mS zJ#sx*1MUFNgBNvK70Z;H2o{1Rx~!p`HI%akde=bj8p>HiIll@L`BiH$8XST?N&EkX z_W#Xna4xtKME)Cwh-_fIY?ugUf|Rp?a(>qVJ+m|VBlWybJ?~e6v(X>nYX^LNK=~g~ z{s;8)59sF~WP(oQgPay1r-d8gf0Hin*7IiV80MCHuLHPd`y`nFAL*MZr`bA&%b^T`GUs{F!k%<10 zOg#I?zEg>3o$q&u_&nlCml}+|6M|lY9+Ptbea4AC!#bXO0%UzoMW0BW&HZECXZ_7Z zPs)8v*J4?BV_A1&(F0=9TT<4eFKk3VKpz;nT-QcKi8f*o;dcq6UyNGCdc0QG63LfH zzQoJmRb5MBolZh;NrJv4=u6rJZYCe~jGV|?kKXh^J^4e(-+_3Rf{`|m@pUw!9;i`b_<#y%|z zWV}T)-g?viy=nj68^CIC3%DIUAPYSphxI#@^*an40>*;m??wJzOTgveDsU}$6|5&e z^F(jviQW^yiT_tc_a9Pqmd0`X8veMMwc5DO-Nq@$)N$;NYm=EPre>`;ArcWzgoH#y zgoH$dMB7G$M0-c>mXujUh;tD!kwGTusv{8*5krK83=)kS5g{TG5#h+b{NuxWu71Dg zJkRGm-}Ak5d}bG|Z;|yaieeYOz*)4OMT_RSY@VyAE;p&maH2l2Af{s`s-Lj>vF?E| zQ^MV-KEjju0B7;F@!lG5-Z<)flRDqjh9IG}HJ zpT5=ocpLlhDNf-hT++YF_bk3=y~ekRfzQ(efzRdpc^&RXK77uHkoZF43!TQZ=(!4c zuKpI*w_1WNco;8XCoUi#*0t(mZNnav&lg4dS&Q)&_Tm$KiXZS(Vj!Ep+5G*oU4QZ! zecCJZX(yxSdA;X({XD+Y-zu*S^4cJt4dU4#zYX%+pnf)}pPVE5U61L14d{PO#8Y@0 zy|=#d-ug;Cf2E$kdV_QNz|~c*y2>5FQB*g%>SklEKG_1~$3}i^Jc;cn{*B__Xq=74 z$xGBn8^i|OgU|4}KH5xuv>{Xn`RX9w{rT?C=X*Zi^IzgC{k7_-Kphp-;4VCi=W!5+ zaTZ_et4-5an~ui&+IU~{>1#d}@}ZCqg`+rTf6cMK3hEp2d?TKsp#4t06=h=%mSF|@ zebMsok7BF+FJ}K6zQ#g%pao+xE+^})Oeb|rcDXgBpU8@f_3+?;g+V{UbhR5*| zcB1RNUjxN^_1`w(dF(*zQEWYmC-DKQn__kI_gsCqeE<7FJcJi9q7PTRCE_jl1@GZ| z{HPyyy?)$Wbp2-6Z#M5{^KKqO``6|eo%yubYbU+9t1Ur|>kYpKa=A+miS03h!TWmy5f?{!n3ms5pz~{d@K~|DJup zIa=5`S_z)Sc9d78yeen#rT$#&zTLWSKY#~u8fWzB2KDKxi>mLi3{T)GlwXzns;ozq z^{AF#wfw5xU+w;C<5wHMdJ3meoHgR~y(i#%PoQQ3?<3!9_`V}c-|sqX!UNckgD8$2 z;;2mxEdN)6f!bDV!*0BZkMTEs!t&cGzn%NB8P(5D^|SLnK6K8I>6{^CzgH)z>Ll&B z{riOdSbeQgUm0)gqjUDn+xE>q`=k6ah_7E%*ng_*JMRC|{W+)XAE!OX&7R{H z&#Aog#LS;gM90EJMwAtxy$EnK85&{jR)}%zbg4v!><;89mdmmmTwRF z_Ly&H`F5Uf?$308Xf5Be_-33hjPvDTz8&S;KECbeTPfel`Bu)iN`BcN3+#^tPjQNG zeE5bB;Y)n$hWJ*;x7~bu%(vh8#?P(%EX(0n9(LkozE$w8ichck^p;Qcd}`p+ z0X`k%Q!StB_@r)X)Xk1ve5yz5u){jk4)N({J`M9}#CglXb!;JOkl#a@iz6MTwqabDaX#QjNpuCH)?Lxk^9?8ia%`cb_u8n4K_ z#VGH8%3H{RIzH7OGT#y8dp+OljazTr?}N_C(op{2%m4fR*lZmOtYZ+ZjlS3H zwXVCZYa@y?O`NOG_}+5P`tG&9O*n$1zK8H5ogW#a)_cr)w^{F#*1N-cU-Esye1A1x zmggeNa}g3}NSvVseDD3vk9GX`B2_)C!DejnKEL37eo=iisgDCVh{N9F=3Q^z9C_!+ zJLea?=e=wET;u1-Cr>_kuFrFQKA-aWl+VX}KIVVGPwGkj1@bSrj}N^M^SloWy$3IQ z4_-w+7xHo>VREdQ|lzrCs6ZhPNYk7Dala?*RGUHz4-ze;?FkG&s$^L}`y9>>(< zr21=6e|ywlSpAhCzqawKTwLYis!X=urm9DNZRgi^^K3UymHVpPSM9l|E?1Z9)nzW4 zx5m6X%G6~Ap2rScRG$HLYMff*)SAE6{I#EON!?n{oz`>bJib#`;%E>@gSZ>S-IS&O ze;wvx0XAa`ny<-xP3Q0ePT>8-zz^d2K|DV+;Q@S)ADtr>J4gI3G0@f$2(%sc_l;?P z-fk@>;6E>L)_7CKn|8h$bG|x&kMTF>oa*3T>flO9A8EEe%d`3{&+B7L z*T*p2e)me+OnUw8j? z_g{Da^_zGb$8b_VUa5Y(a@>deaS(@*A3glI!QUJFy-|*p$oCt3ztM;N&R>o@e>s7j zc-eW*8|OK5d<*g~&3R55|I$%C4ynhXM%;@>@ED%Q4s`#J`|nzxyVmD!H{RqYe@6K; zT8F#wARfX~cpBX|>b}t)yv5%R{$4`$a!T*I|{$aj9%=gCvzIT4L!ueG)`uVJ%&xSA?Yq1XZV>23W z)_Ak>o0Z?}BYcADdiDhxZ`OGKOLqR1ihHq1{mJ8sJg(H>F6WoxzbyV<@%M_q*L=O^ z>n*?{jA9qw!d@K2Vds|O>l0s}y6jtzg&0P0_KCCaAwI?_oJM~2y>`BN!1?AuJc_Mo zeSfmPKgDnWM{pGH<3p6kPxAO_$)Bw}pE2{s%sWu(@5JROj{$jHNt91ez4P@tUwhO; zk9z32iapqiG4<^J8}7feR^4V{8CGB;?nUc+$NJuB$1}*^JN*4~z`5WMitkVHE%9rK zUrU)7LUppFPL`Un1>L`NCNZJa-|t#mg9&HnXo23-M_LRf{M-LV$G;PU3FiiBm_}%n z#%Pir&?CA?5sFe5b<<6{O?}iKOz0@5N~)nwqS&lgFY5%ER(sGkODm_}%n z#^?!&DJ$sf7;H(O^PXJvGoi^1CiS?`ox!w1?c&<@&DWYukbeu{^4wT~tUVR8H=V zxjtr`n0sQSWb9a&D#;wN95Pm{oi5N#ic%MKlX+ujC_>9~i6M55E|R!nVi-5ixG~0k z9$)@!&T(^&n=_t9Au>-qowCVX@k|;GCX6lr&b@K>#myBrN8B87W5sV%KMm3_jZmL) oyJ(W;f(aAGnW!PxPh2F|Ow7w*LvQo|F_$c^N2Z3aAB9Lq!dULnuBF#Rja1sACXD&|#cb87;^ots;nC zO$8P3mEb%a2k)ea+S5390w|&|V?e!n=X%G)U}Xd~;44KTzwg?QlXKDsj`O>}&+iZU zd}#J#?Y-Atd+oK?UVH6*mS1?;MK+sFk^j0VH!BqDhW}&mzv;&AENhJ7Qo1N*${^(g zmak|mnf>uDwkhXdsp)`O5bv!qG(quN)LiIm1Bi}{PQCPex$&U6!?(>KT_aF z3j9ccA1Ux71%9N!j}-Wk0zXpVM+*Eup+Ld>@kvEFAOC-X{}b^4qHxuG$=}To^CJHipvWZ+`MM(Pp3EBpp0nH?U|FN zpzcEauWN3qMK@&Zq!9}$a*Q<6ln@6saMwK((XlCYeex!qN+cQ|B2{Q zS3i4wVneAVS z{JCw*-@mv5^>j&kVoGZFV~XQqQ8tLOo7UR>V^Q{-c3X}B;^>o#GoQFA29!e^4&BAJ?!b?I3Gl6wP-iWN+zO7y(v_u)|E7cw4yQ2Oh_xQSRniFxl>6s zqn0wwl?)dIqm(<;$i08@Rqmnll+^X;nWV}EC^13cw%VomL(vAEw_S~#Th|gcV_mLf z2(_hk#nIPE)8ojdJ`E$2>7$R%;&cz)N$sU06>cT9aINOb&);IopSxDJ@IG3YxR%#L zC8HZvv`-@((huoM>JlZW$10T6gRWR~3dW@{scw(y+L{>hCX^CaaZI%(pxv6*IW#(D zE+v&xG?#?e8kE%7(s(qEGEXQG_WS#x5xq3&$*St7ea&#M4(0W^P~Qt{6vio@eRpOh zAJ%qP_IFbWebfQ7E{>4frS4sDALwMg@OQ8mYQ@O_PxmU*k$Ds*>twq*fvI z)is{5;<#M&z>k!d(PBF4aUIfaZmm-F5qE;OD^<7CAE;DP|2cx{J~Sdf-y`z(jVMqD zI6KOHXM`qjTCk)yXuV=h8hn_>m`+Ug#>|;eq1v~XaIEhKHfIAH>bHkx{{8~YKN^=x zcX(b?XejV_VOS!X(3PTYn(B{5hr8l>0FomPx@HyC-p%R4FHxQIhjY7DX~R67-p~}f zL7`SvhpO!noVE__oez9s(U>l2t?Y*kLyN^O!jR^+tbt>whLw6~FVQeIl<6s^UTm$u+k zt)(aIXN%Qcc#{IN?zK2x7KoMUYfI9YZ;N3 zHu)^AWn^AjVvN>OmX|i>Y^~+AytK7QJ3TM$nRB$3GxO2{9>YvKC*I#0LMdBoNPjl|PpKc+w*Az3vtseSk8 ztftTuH^*UEDM`A3qqktb6u!zsA*6X5jIb(QYfsGDe3=Aw14?WjkV?u8EW z(SyX7!DtY=)J!d+C$Q$FX(e^^ai(>TqqkFS(?)#hhbX!8L9fd^x`QpF+h3#7eS|(C zXH9ODLAM8~<`c1=Dk@UIPW)+~cI7;O6%z0=npIb%)`!wUD zwmlnW)+X6sJum={(Xc_D)rNWaX?iDQ1n@^JDl8wZ;G`y;uzTYF+>{ILEJ z(nn*!np3Ffh&bb3k_(cfEYJg`&j$1&_9dMFy!2Re$JA-&YEswd)C!_HDky>}Y5bq=_D z>?qaUI+bE^J&B#L@<0#Ne#$7#-NkM5-!tRQ8GECtXsIjYw}J1I(Y<;KP+jU3|Ha9E zu7YIO9!)a}{H+YCm#a}|;!Bn(soH-d3aX-9Zsb)qS7MBgyf42QVy2@fOw#YMA#Ldh zXtpN*n~}%q=w^Eh2a^MlXl4%aI`KdvkBaM-y@8rHJzVLwiP5@!NN4lr(T7!73Icj{ zv_>D@YgBQKUR=q?<=`^D3z@Fu_}ABIT{WmH#zxmniGiloT6Ofn9w?HBvw1EZxc@6x zNay8A-mX$f%15Fb1=Xdr-U8~sbN>f`RZ{C`DvkoD-Jj6wyr9;M7}f}NZi41x>eH(` z&ii6k`+3BhC!pp-dPTAp7LJ!UU=RD#_F*v(*v=5VXaBf_O7>+XmDI-Tj$h(H3E`N$ zzI{l_`^OFK=iT7aKZXMhiAFP30 zLs|~FhVajgTkrb^x`JZdoH1kP7}FYJQHQHejNVR++TZV^@ub$A_~r7QW_v&27ZH+1 zN}s~P9m~e=N@QL{$VRd`6v5^|mKm#TQJ2%KC|yglBEvL~10|#zcC?x}K#dS)MGPyq zbtQCKxVaeIoZpt2oA17lr2QCYOrKdvl6ZuFQKhODKz}GrRw`E`Y{$yFwIYp?9#tBv z2t|9i_UIJ*RViOj20&M7TdDx5N~+ZrtB7F5rtqDmk!YiibyX$3L~1O2opZ8Ps6Shy z8o|?KwR674ZKcDPzlKuj$mqr{?w;-wpx=(XkLG(OL}M}qRFdn}Y?0;#-7&v>36t&u zXePDFjXb_yF^dS+c)O5W)=}{@bSd)`4u1-f~BJ4&H;1d_4Tf2M@dj8^S;+lc5 zr*uSPPOTe2t(c(JK39zKT2GTS3bNWBTwQ3<5oiTBbLrMWi8fsN(xA2!k$bD(8+npT z6@~az6MWis9gHle9o4Rfuw%P16S@K6htX!oy!zrp#Dmq~)c`1iwI8Ku>=t)g>M>SI zNxeIQW|7U_m2ooZSKYKgGMkOls_$-?H!bSZ>-=irDcUq+WmpxED+6JFI`|5E8OWn_ z^i-Di&DBKIJy) zQy68-?4z}$v)T9Rz04v8t)M{j>%=R~7e}H6uGyGjw7)p%0^%mcQO@dt?F^7Zp*gx8 zMS1%3zU6zNS=k;M;)>{HZE{_Khmd=?p%=3W_XNyrU7hYM>gM!A`|Qf*Bh8{>U?JyU zRbadRu4Ud$zqc*taov%R=iLL_&c($8+j5?qiwlfA>s;hI1nCdyJSn+5P!GO&0JZ|s z9V!r>i8edtyhRN}e<>xERAU+ErEZvu0rZ=4V@$Jf`)#V~tkFIAEdV`;7l>;lFT5Wh zUf8qB$_wuYh!;LwC3&F-q#ljpV;9l5sSdjsr7uyM#4*7={{79_ zmVU@#vTV1J$LXiBdCS+AL>}dwbsJFIp&+fcnGkFQV(xWwl7`k5eI+_7jzQW>z;j61 zO0_Gr8p1~@;-Mf}gXgGr9*Y?BFv7}>JkBi0$H%+|Rjlgi!oE2Y*WHalJ*;mA2ForE z!4?n!#=XE}M4^Dg?o?7Wr_yLbmVxSgkIUsdaUD>?7*0Rtk`{I>TbSJc%SUH@g3*}BIO@59l<(P>c`SgP zJBRKDzLKemqd()V&rewi`vgxnb5V%SA4GbtM=Cgy$7m0%I{JbtRHJnsnz^ZDr32>| z=|}?H6oNFP8G81mo|e|faA^kVT=Juuhs#banvB#cw*qBc+}4)3khNHbph0Blyxm?40IoM;1eErY6KP~ap$g>-KlsM@-{sOuI6Mf0Q^W{a;4 z)LI604TFL{&s5v(i$Z|#)lVlB|j$ezu(F}OJedgjFIkme1qnmoY0i&1N(GYAh&xt{7P6QcGRA48@ zx#j!@a0j?$ENsHWEoV27oTu@^-!|jLIpi)_I)aeT1eMmcHc*^Hsu>jU0aSb3#yR9V z1_gWp)gHHT4w=HBynf<~7~_x#|R z`7`}gH&zEqrVm7kV82gt1g)0+U9kJ0tOh_B)1vm~-HchvUXsBt!Gq;>l8PTT&asqNF+X}h%D zwtF%@r8Si(OtQPAUuV{e@%QtcAZ8Fw1kB?lE&Y5w>#qfwrJta!G&Rri#=A~}?IMY> zSdAUxRy{3j`~l`+5{YV%JT!Woj_JA&^)Ijj+T4Ziz8Lk}?}~s!%ywUH{WEI_zwH|b zr(&(s^2cI*UunhY30qB_7_|qCR6|qP-<{DYpEt_tNq%p+&rE~1yQKV5=H8dz)y<`( zem9adRJG0C=7M^X>384Pc5lKpMd&ujKc_EA5XiDN{TqRva9-m&A@_}Hzc2p!ZK&(= zf1xkC>!~ll>7XyQj8-Qer!Vn79ra~^tW7$*IsqlHn>V$!>TV@9yN+z8c2VX%q|B@kqguIi)shPH20S4Aq%0-?1V#N)-^q0+j;K!t-PA;aMS4AmgMQJR$C%Q+kgFYRH zbRMQb;?A)ZcEj&z$6#T7*gTshnA2pZ5IkszSl+=I`isNu! zo>B%1@=%VdoQ@)u)iqk^5OVBR3T)a^b#Xg6T7%7(-$uXfIjj&~BU_WB1WX(1)K^QC z)I3)rdWh}AduoUDu^1hkiq26nI@s~G86BUi{n1fPqx0M4Cm(lostn5y>`%)%cHDMd zU~rqW4Yz&UJD;Zy_vU4_?dEa&ji`}xy0M~Su5tg_Z0aI-m3)WO8|ha;J}@~fV8Iu3 z=32$~or5cuTlwtiHu!EZ@SWap1SjzD6FH?Rlud2Pl8p>{2=gE&dvPyjFAnBuFuSr^+VQco>BW=x8r;_S^QYhMp z^@7KSvY1E2o?x-jB6ftuMv7Psi^=suN|K!`J_P;xvwrp$kQFX!p%?8oqaWs-I_`rM z*ueU)nJDtBWjS8KUI8ZtLAK}UWrCTrjLVVlP{WXACGbyH98O5tyWo{T^z7p#8zw)K zalUqO(xwz7wR^g_(~)9#S2uZ~{&X3)E|R{rtXG=tKOBbSk~_p2uuxxwUSJ^_$w<2+`2xdN6{EBc`1qE#UEw3qkM-QxL@Z-cyOj1t zpuHbDcu^WUz5;ueluB|;epe**Mj9D8_a0~P#>g^DgMjJ3#0i+(?(adg(mqY< zk<*LKZcqvRTI>ih91r21gOa+Lh`vq7g*q+a;7ftGP_=P+1d zoUlgYoVrg0eisxfg-wWNe5}ok{|=OX`A#mIs78k~%xWycuMInM*c(}W8Q4sRvid00 zinNaFTYG12)VB2Oh?9SZ9O7ijflo0=F*3sDL;DChE>HBd$^hr8q2R1-cjd-nSx+fr z&-^_^jt`|Q8NZ7B!=6Mv5|jBod7U?amu^6~PH@KMZR)?Url5eBrSBvufHQQQ% z;(4?&OZ(A_hvCc`=Z{@gJFZ>i={y;<;9Behhtyzy9fy5PLTL9Ysc#lV*uA4Gdhqct zf<@KrF@sxP(1+sD(=a~qs4OWtayV)@yhwV~QS8k{X}xids`hPz$9UwvZ@^MaUzFp& zuk6HA?X4sGk>fPYz69bVEyt^zBUJ2tuqQNPux_t0&n0QAGV>4Vc*Ol%1^2&bPYWxn z0`8~>t)4@QVet|^uC!LQ&Y}Gk=Wq%8s68%H4mNY%dca6&dVr^_FjCS2W{HvVrAWCA zDbxad8$A&dC(T1Tc5#r7Hx3L&!^kNG-W9-dmXWhGFK4Qeb2u-@Yvf!q$XeT3Mox2H znNy6MHF;$QBFC7;bo)`r4>{XO3jCwaEPH5gM(cd;M#DEM?U^o@Hy9K@blmAmQzQ3~ zOh;YG$FrW67qeEWT6OQUpuh=rBa@k9Sl`2R6XA#g|1`BT{U944KBh8P&EliD;NFqR zFHyrp_jG9K7cb}aRk(vcFBt9O@b1&_YzMGsKvVJ7>D(*?j+iWV2|Y@ z+dIuAE5&|&@3UAxmIVm@L~Z=OKV{F~7tQ`;-^*FgK0P~jUvqZczL&CmG@Y@&4HM83 zd6wPU_eg#Yr?C)Q0roc%R`CzoXDKZl4?}Wi{cq?J1p6%1Un(VCI0y&BP z*MiQprq7q>WHH&krofk~FquAAYLI{Iv~--6j_ID3Z~x-i_w8R4__fim>gbRCAs>y& zu)~hOV_Tk-rqro-P}?**XPR`)_PnM#TMb6upzaYK8IqUnhcb|sZTCdiuHJ?*8Mizq{kwHa)ssQh&i6!Q zhdiD>`sD4H7vRTJhLL>Wv@mP!Td)GQueJXUIi&x|)#51zDfK_@&);4@7q0Gt`L+Z5 zesDXZYf!AR?OS&mm;K-9=Sb1d;ltbSr?oNHw`A6MntoM?u^gE^`WNy$Ar7B-GSx~ay1808Uz^wYZQZ$s z*jGT&441X=GvLPV9dr59MxLP=U>_@WX{)S_to{&m*$MlC9Q%jRHfh-HkNxvYC0&O9 z3v?OvE6(GC7&WY?nr*3Zo}fnCQ@=CX_S87PY`aI_y_&2E)0c9}a~rGFVEO*BPu@yo z9?QK8spoWW2|g8lIB#^k*S>zCRdf5VZhS<08kRK7H17Y$a&r2;)C1e%zkfB^Xbvy= zVff!F@K;dB_~YWAz0HdMq7Lz2kcU4%+e<)0%$NS%?mLXOA6k-IRqUZ>Ip4)xI`46=w&#Dj>sl#{0u>;~X8XW7>aNcitdGCF3lh?zy zw|a7PTvH&XcG{7hvDSCh&N35e!pxN+K7-x9*t9> zo5uBt8fulS23*e01*TWuT3$+AJ^;G!r#194N+~?RdqV?mVKF83*Cq0Gidw+e-8u;H zO3?`eX=hPbN|ficDYMYsR#oV>d0~62@=j75UpUPpWQF7-6q{6ECF{wJ5$)3A`c>|2 z@GCsLl*T*YSPx9s3ETn(Zb9I7)~!nFKI9nZUPv2(v^oZ@;`aAMc+Qq4f2OE~ztAQc zR{7fd<@pMy%ljzzmzo>Ic%~8CQFD!mWf1#wO_hkL_rw37W~zv3h&9$+Bw|j)o~@Z6 zVlKp6u76Wyz+{sFAgf46UtWN?ykUkT?^D{^Axs$9AFZ{A8)ZYBnLvsG+xT9%TjyrPm z$6DXN{lNN&T5`^74VigHcnxof_S9Gb8(SO4ZEgz3qfKF0QNkpjVo|NsvoV6R57klT zjOeS1y5q0rnB&YszSr+i>p>fzTAmAIrac^}@WQsC_a5;TR}K zaz4|D{Sf@wGhwCZ^FG8!Y^N>G-CHB$8e2o-!ZZs8C^>#6`;Ilwx?T{!Q~tPcYlzAo zxg}SYbR5bf`Alnx3u{R%I$8K148O0q!4occ#pX?5Ezg7|`#xmnCfD7<*9M1kY#1xk zbWbDQ!L#9ZKHeQF`mir{eMR#9q-Vr>r0v3*Qp;tg*;aL7EqTB5+2h$wJ~{=WbCx%8i#(x;iyuQ#PP zn9{E>(y8yWf5vMfKDfw|6E@|HHF5|i*uPEVahfTwcw@qnH^h`TZ6jVAGnMOY%4^sN zjnb57Gx8#mBQeIbziK-dT8~P8$REptmYj(u8h>EPnJsdN278ShgS(h*zBNKzMCZty zw-Oe9dI_Z<$$XGxdHnROCC7}z6P6r_1I_NBkz<_~cbn3&el~I*-=kyyGChq`=QzBQ zr5}#=0OZ~R(nb3*hgz!1O5^K{+G6m=7y*As4fjO6iz1jW2|bAZ7Kg2)d4W-aU^RE6 zF6ZRAMot9#wY4~H3c+Vy%8~(W+%PZ0>1I%IqeAm?qlUl1jV@5sjZi$~qj)HQzeHy~ zbIo(MJKAuA#_l#W&U|OiG1K^fCC5zTzgu$ZOuVtjk`p%Nykg1OYRY-Z$f5a>lVpD| zr5EEpJ~@}4GNn&5rLQriH<;2_8tM6ScCjVLJZFDlgqoHb?HI; zjfcF^iMkK`Myu-PdH?e1cgQ~h?h@uj)%TQe0uN>;w3%{_Jr|k zk{;=AB|i|X=04OU`7~wZq;V6+TMH{ia|G`z7U#*IHw`$yXqC^7#yg02p|69Q`LgZ> zqYR%NHe+@?W8^599o<>0ze20iHhL|1uQlL;tkv^ee%9C9@1VKj)8m+v(>D4nWfmJ{ z2v&0!8?FAr$kEX18?gK*n#ZBlhK<#h8m>0r+Rj3>#yLY+M zcax8&E&%qfB%X&&J*h|=!%VbaDd;vIVf)Sewkk>5GMrHnjcrP8V{N#z`qR-Py7q8> z8JpYl((%iA{-8a|y% zw4;`ow?R?4)0Ld2%&fFS16Y~mVH?7A;=B~E=wf$3JAr|)_VM;^%TkEiyTyRYS?oNp z*l{e#`>Rg8aAVJrluc{&FQD?S2fGZg|0W zf(>^WlfCgG*-ZcZO4>)nDpc4KUC9AROJENkz%HKlbP=?)?-;%Ru?L~8$0+_j;=JXi z2k9k(`*SU``xvdz(v{RpHH%woPiIDyX)(2edM zVkC;}u*Z=vHh&?vyH?=J%n3waakb8=i*9uh6+_@Kr7VWOG?OE+SkwJOye&2l=@qsa zacITFQ;!~vu=%hCzcj}m1lEM-?|~=pS=Ak!K7)hg;c(@=pk6&imaY}07mCu=qV#H` zmt$C|acC767*c24Vc;-5hr^YkmT97vsiKy7MlC*8%L$^Eo_920o+`dv4P!(NZc)Q1 zQNu+>4GUNeU*E{__~dpk=)rqFK$Pht%8W9~+|A0oey;c=F>7xhR9`So`^ zOw>z%M|OVbs6wXU%Wsg9IoJeXi4M=+PMShCbvI^4HucUiC;sj|=EC1Mk&+wlym`WA zjyYf2Q+t9RI4|_j^w4{_XP-?y`yKy%<-6}+-|^ZzUOrz-J&@hm)T-~&%&zrI;N~n^ zpkXae(tFR7WBl9)Z{&a!47 z0%`;tgPho3l~2Km|Ik}##V&T&d%L(b_ac8`I5vE1Ju_;c*>3NNs4ZB79D)}~|!*e3+`4}D9RB?M*_RSDo* z0eq?MIew@8bgap;H*_y=2yn7;gVq2}P>Y?>P!6(>c>RBJEO(ZW%bng(2>g%yyfCU5 z^Nsvk$;X~7sdR2hXLU^>SFcZsNvcW?n~7Uz^k(^VMe-Czg6T6S!S;|%EzRQG%t@iz z>}bg3Vqo7Mw%q|kv%Y&4SV6-|>&~J?$rf=t@q(DF^?KBrU)~8{;kK#7*}dAdM&nQN z!P8DX^x{q1dWe@fZZ91h(oU%nXs5mQ(Ob2P$>&H(1(PZ?rSRXy=!# z9o4_Cvcs030nxb`$C2-gt1@iY3c4qBzp1^E89R2TI9D)QD$T?(rsDz6*SG}@^p3{C z*-6qSHCq)wS)*6YsK4}$8G6kphThVCC?j!b@sZ>0=PeyddAbzUX4 z09Ftia+YMrwk#E%%S*&6wh8*fEjJ{h+~@j3y~0fz8{UMRkC9JhXY+I}K_U(Gy31ET zPvbogq@xYI?~0V)-YoOUhvy^Yr(qHJyf49AHH+tMkza6OKHgW(_v`~U`<6l} zIrVSk*mYGV&nEtf$Q1O?F81Ot1LwiBX{0EdZ+|dK?s`9mtGtXg^(pn$5ZFbw0Jf z^DVTNE5m!(?V-aa?;ZzhC5>IP54+}xzO;`0JNC}J_ETBy72n7gM>Xg3I`x1wQLm+* z{eHq0mW194{>$C zL!Pb!OxwC7VMU{>A!?$8SH=Ht^M=yQVd%~B#hSJam$hf#luvB({JsX z!x8dY;%~7|hWtB7N%EPsI;J!5ZgZ;QSa<<`{wYwipu zz=dhNEk~SI-Pnj%X~%}?m7VR^QwsH&y@ZYa@qLjC9!+@nHPRGn4ZY#N8FTJ&IV(*x z=(ZO3hp!JLl}KGuY09Sl-GI5kCcjfeJ?^G?!XAec`-HLR(@EDl-KB1CGBQC)j@X4S zHYK0@X_utEq^sKjj2^GTyExa-7mi%Xn-~sM>Sq6~z+qNaNhzI{Uhh*Tla6zsHgC0LO=<)3A8-Pncqp!phXd!_X_G3(p^v-DT zM5j0m0u8zd8q70juz|Jv-Z9)2>9q6-=s{{$J2Z#^!=2gGf1`%$I<4XBO5BSyYUr#V zV>_+q#VcTkpT);=w$YD4{(8`FA+Q+KY3b*I#c~4+(^v-4k9FD99jKvoR%c`R5Nh~o zt_EW)=NMzTn$h$O`Q;DB+Zf9bT6l)e_JuS+I>`e%N4Mo{9xT<80;pWv;JpB9Ta`_n z1boAt;yVub_Av0J@`Z{M7K%&!HK17bD4oP8{?<9Im2}%}yZ*NRq29OZuwGTAxmVBV zg0GQPB!Biwm!xvew{z&-X?k&iG&i#P&h512qnE=jd^N$->ytU&p>u>DI2)mJ1a7nL z4&6|NE?EdGVIAm5KH{$AM8%H~beK*~Xrx`A%ki|XLl$(skxNQ`@<3G1(NFrPFxlB_ zxMue^g~+zB5i5L5!R=z`c>T24?2URCgnDWoKTqrJ)mD{>0IN#+ zOFn>-4{N&}%OiNyFOrHju0`-z!@g%)PeE>BjvZ>DxtMDzdRTcQ?B*&cd;oqPgoz+Pa0X(sc22`QJ1Z-#xlY_IXTDuF+&K zX@xdD3FAm!Xrv{%lD8-}^<1Y2+3}Gy+&MoPev+lhS&FJs$m6)gIRRgna3voB>}d=Z zA$tK}UHA@xO&#n!ljUzg*v0a9ve0nQj_W1-e1UZBVen|jy;p=z#B1D%XcROsTGkPB<&?rRRs*&4kFdl(OFesN~a9tE1yieHA`Y--YB zvYKBFOXI1U*$y;$t+WFv{-($<@bfIt<0Smvg5MJS*5daB{62!;zWCjO-`@Cz-7g}) z<>+Qy|N1riVRP#0(nDJ@GMuwW59@*VOU5=XZp0`BVC%z*P4=2>s`ZfS4$PTY$nw4KeHFm}Rh~y7p%ilkyy%o_>)wq^6JVqyd(kpOy zjC=&MsfNSZ)QH0zf}hQuAZ)GOAVr3Dmmc{lV!aUaVYay75uc7`Fn$Asb)tP(y0hoP z3#%OV5OnpO-T-7wOb<+@U+(ja8GtWmY}KD(mhQ6;@!v|&gZFV2`lwvPG0ZfRZAXTs zE=oSaeT9!O#wO&C;%~Z|{_YQ8J%~iBJC(aZSou4X%b}>}X?lyuk69D&W>cwj5BN|Z ztYlOFllEiuGHKdX+0QS-`n2)p9JF^b&Zh;mSIwq&Fz6(pb1({EngtB)%eF9>Hvuzl z<9Qq5v1=ob*A05G#isC-E(%Z49`hjId(V;Z1pHRib%mGh#SF4Qp`3uosb@JWSxyg@ z6B9YxSk7xKr@N8~Q!Cw+=8aKHyFEpUY&Y0~H$7O(i#Pr`uVr{lvX*&{xn;;F+?^6}#b7 zbc3$FxIu@+#@~jI`YRbxzCX$bpPfH-eq|6ju4J_m#Fq{?=&MkE5PmT)UdjN2IQ$Jz z$7Vo(WK%Ahv_bc+zYu?e9~CGUu-_hvcamC8DczMxETtP#_^V03UfUWTxAE)9*^LVu z8~^l0qkD4!wDqU2Cg`55w%|vF3a`&D>QjySdW-sc8TIX4yJ%x`oBHl#^_3_SC-K>_ zAG4zdX?w#w{^i=%jY?`hQu=JJ>vSSLzs<0J%HI*^|Y!ZFnBBq0KFUh;Y{T{}BRp8)C zu1NYYezi}7md04AY^;3v@+HyU*V0dUmd3qMTk|Y-;=6Y%`0tB6tIzZY@zr z2FDQ&B&Y1s8VUOS?mqm216V9w5XW!8uWhEhOjjR%BmN-%di`8^89T7WoXr|fJ$j@?n^Wg{+E)NJ?=q^!_=1Q*WtE9%v zPYc_0X>yLD+W%fcHY@p()wK_k{bc0KG-TskXcy8G>TY23!Bu3D>4o){>h_~<&Yk3Y zR6Nt>Pv$I;rhddwa@$p8`51zdWJxIYV}1QJhwWbwCd@vjvvAaW)@OGAz3e?tJJx3L zjURV70{}ASv=_%etlpV9xpAgFl_`F_e9kMNLIiC);W=Qd%GJgA2zeWk7hrFv$~>;y z5S4*BIIZE+MD$!&HuVBtC+v@rr?izwOTr_M_7rDm#_Mb7Svkfh9=)1I7I3!#j%W&0 zQmtNkeG2{u$2`z&D0l9s@=eVpkI>t4{Xl;jql9>^b%*dJ0++U9-Rc87$HZg zUY<&Ju$^A=7=7!8pb0wNJiTExvB>H0_6Yz(`fE;xndJSOjb@!i8# zJ%qi=$0Z5SQc9gK@eQ*Ce8cvZ?Cr1>dc!Ke6|GXXL#wZ~9kf=|Q7ccOm3Xv|sYbPY zkI^q>64p)JLCM`!BmCmPZ+}TWD|x=Dq*hLvD(x*su~Zc|v1~qmw?a}Whq+pw3v13I_Td>llBSRsT`5w|Ufh;9qVfS8zSzLMLrQk!d?_&-hz-(2?PJ7D% zp0ery`DlcJ{=5xoFhpOGNASH99zauJm=Kel+T!P2ux>*{`bNUB>|8f9T78 zRlZ8*_Q3osO(~K$p`UXuYD1!spfw@sanN9jNUeSIBpfJH}4lnI-r=SLC0`6$(9OE^@bBLA*_4;7Tr0NH#}k zo$5z_vkKi3AnO{PdY$k|4BDtUrPn7+lDp^|joj;oJZ(a{T4jd%_8)Wtw_}doZ}!K5 zOs&%WIA59`(Vgx~y***inOG$uy7rwd9Y$?f= z$YDmOQJnLoWmfne25|Sn?l{#6KYYi{Se0y! zO~O_%Uci&Z2Ip`VUoY<6BYiM_@hPA8mbe=9VpvFmx)Wc{AS_58o%3mLgvKH?`qM&$EMGH35G$ zOP>ME_>20|E9KuoTf)}c0k-m+<}|jSK$_CGmXZuxlB_+PCt{@;SX83*hOICbJ%zRV z`-9{)T@3tAWbJXkjwcT~MJnFa1+2y}Dnbc~%b!iOeFMAD+#KQdFS0Dz9cMaYSn<2# zrFR>6D+Y_d=9uZ+itqQXa_WLlyfL;qpkK%1`7aLS+CNaT-Y8ENHKNO@9neL7!*e{7 zzvOL1oV@#he8Zj6H3!Ws;;NXbmG??+G+L3|{QX;@S+c&JR)|mk&C<$QMl1B{`9If} zt5MsH9kepb(h8SP#2xMNa)j~n1jfs^Ie(84Pez|%{B~vsbafe0i`KP5&@Y>+J0ST! z5xrORiqn^TW8kB3fcVXhx@n$BZi<)CT2u2+w>ISfpG{=@p59Jt;|_2>PU5^FzqN7y zbZdPN@Ht8^^2jfSoBP(4wKfoabF^u#E2AegIp~$N=cMzi0(O1{TMbrGvL|$A3r$3^ zpZf;;I_&07&){2POtPGd-QSlsymt&9*nr&Dz5&=_v#A9wQq$pQT1`09r|%}m;mcEe z8HX9)g8M-@r^=?n-(*vFqO`OpEX3-+y;5ol_apXlB}oB3%X4>e?7*M2f}Gw$dj)*U z=Q_Td`~E!}FM1aHhW9KK{fX$=OV^{nrk-U#V%9R;U*Ns?ua9!AYiOPNd9tOSJ3o^B zJRSWk$m?gNrJs}Wl7hVJ%KNzw_KGY2Qr2;%94din)?9*)O^{>~tvZ)WzliBdCatTkYw}H=o@hvOb$A?gR zBziHdhx8@~R#)tFiyz)u;k|q!&O&YOE;DLdGT9ffSG2ZX)o>+lV&=+d593=bsjXA! zo`I4>^t}seT$+y3%MQiF0%{spy+dL zuC(#&L$9B^+>RAZ(m`8?Gv&+qc#T2mh@49cA@Y%8$2rGV{C`ODnDE79)LueyN_H)34#m5aIj6C6exuOU!hy znZRT8$|k;HhM4NU&~2@q=$>CMwTN#nT~ga}EPLm^W7+(Cx*f^w>fUv?>lflSaXR9M zf6i_2%{kmiCxh8UlK4^EnWWX}MHRZ_i+K01aQZ%W$c+geefU!nU^ z$7p!X(5XCqLknwfYN9@!rSsHm>Vwp_ibcSOm+PVqbml|+HHF%s5qC*0SvN_)O4KU9 zV*Q7y*4fghgmb{->qdi$k5469_BLo)XrbkmVL@qzps#f<_0^=O&Bksg!b7ZDE?hnqLWBgI(bh1SB}uH* z>A6~{j{H`LSNph{#hVlpefDzsKE*^|G2Ud7_Cjg}I+OiCU%HPP7upkfn$R~*#sV|! zbf3c;PBI{B8oe{TPwtpNFetmR_-T{|AC7zOil^6FV16cGd`~w3hIo-QfFXq6M(lelIc?b& zF+nSOeSoLh%dHUV8opW+#Uh}7qAyulwbt8c$7I=45WpkZqLLf&)*~85ec- zW3ksojJLP#hqNGU*Sw7~R_l|Z*6}R%s3jH@F%EgJXfY>Ia#H4p_LJ9qt!T%`aJbSE zyWE1q#UeJBL3#y7IePv;jM||~AJI}RYpJINi*BM_v}U}L`2$-v@zMRPrTZb|yIgRI~TOegKD|pX3|OTiC){crrnfQF>SHWNB*?Y0M(pXJXH6|3c_T9R41G z5g&o&0;3#H} zGV=i+6SQUU#Sd+l`>D}$IvA8?n71Zaku_AVGJ>`{uFu=uO zoeXxQ$mOwNA~uTU4gLUo-nk^-b@2PPlBQ5h=;qL$aguYLILTSK8y>G~JmGpsbFBku z?!gLuqJTe$6I4%ll{!Gk{rS*pQ5tVPVr{|>sNUD7oOJ&fyeG#2=TH7o=JJI3m<`it zMV6;DRFZbu?Ume&y~bbu!Pj9vBGfKk+f+Y<9YE@1WNV$zEHnN}-;^}=wQNDOts0D@2UvE&IEqGneJJi`@AP_Lm~Y^XC7Zuk!S|G0~ZD z7$`=GLtJGk?X#4=#3(%l_qIPW`c}>SiH9)@*^$P|^155bHY@&dP1>5VO{EL|H^TId z4lmBTe9`nAKmJ$ae=s^S8Nv6yN22YKXnO?O9`U~rb|o)YV$JaJ#Qy~Tr}1Bj`urN& z52F1+Xmb$SABgq`{x5`GeqZx@et&cA?CR!-KY-t0GpuIp?tJ|%bZ#nRF3^K)R2se| zpGymhv~*Mt)5#s3%O1jx+kYnB4+`6SKI~q76ZwsZ>;xrwej(kidAhnwvhZDgUTr^D zNxkZ&Q-dSnTKLUfqL952Z$NcgYVSDiscpA-YNyU2n+bW6b1a6O316p)X6s4qSp<>5 z4256)nd)4;;cdy^b`I{ccxjf63G(|#7Z(qOK04le4L1$49gXrZybgfF{LFw_CWr%>TZ58KBD%sZKOM0|zL&3AfbsHH?g zzKWWlw*o8fdrteH!3v+nYagpDpM8to9BLjpUvCPx^VR@|Tk_b*v#zX?H`d%C7>)u;vEvEfn4&#k8VcLhe$G+q-T6hfc#=E@1<+d@S;JN^wtTSkV57 z`g@YFrf@8r7A%U}U;)o|F$<=Js5IZb1@$m^Y#rKjgHp7ggEuEq9z@EixB*GGX0oaG zT9i~wSoC=QJLmD)@}O5qD&E{a@anOY9)d;fA>rw<;A|yTHX*@QQu=Cd8hmsJXY+HF ziM|Bv462i2k7p@nvv+eA&VQqs-nh#71kuVuK0zmz;LcuijJ@zi`yt}5A>et=Ij=Ad z`+ai|eDnLJhIaUd!)+2Awz|0*koPv#v;!%*stt#Q;Iq!YX!WNqxiJqIzVw^}PHaQ_ zd=AL*M%z(IM7^bE4qk8KMzhVVE$_Z?u9a)7(2{qDS-56^g=>0uf_VYXqjK|3VraF_ z^(oKi+mh$dD*$%Cj`XIFkasEh(w+z1tEnX-Ao(oYZ9ql zCu7z*`G>P8J%%~CS8YS4bzGY`k{5A2(8CEjrKcQk0s>u77S?YXwL<& zM8o6medx>Z|C(6p(y<@1*Wp!poDF`O)kCU3GljpF5Wo$=Lwf5xe1(0^A${Tu`Wid! z(+>$R!S^4-cVZ?AE)Z>S8|;Z}-}u|F)6APxdP4@-?I=2r;VJa;%@OqRj8^KY4rp!# zz&X7=fic9}9bX$e3e?|=@fnxp3CR59EjLAd(en8>>C<%E80GQJi7u|LI~Aw;kn*_t zP@26Cgd0*CaV+gC#%JZr5B)VSv-1KErb&K?SC|M2e(wfMS0}+F^oj6(k-lu-p~rW5 z$s0t4M`2p0_k;MWBe=5$XpY;M$4PtpqgTq1ob8?@lcX2%BYjJq?vFKvTf_8y+01Mk z{Lq4+TD&WHR!3NPCkw||IL5+sZ=-%k6ALF0_D!YRX90MM&>i?97G@TOH|o#puj%BMnZOxZTIV<1`Cb1b3dfv$N^!pQNdWs#+ynob|DNy- z@8#SLv~z?{_`8HX^-A75q`hA=EY|U8Gi>(>{M8zyZiX`>=w{cLW<9O%S7>p(hT;>c zZMCmG%+`K>hxuzl9OL#%((4B|jUcZ~n_c>8(s>VQ;S+u4vn?OaMgb*u%CM>6yqwMm z=$xUwcS5)wW1Kkc;XS(&UJ$o_KyQ=U?3H-6Aou-Y!c7m!Q#aa+?+HOp*~goDWz9GD z%9^t$M7=szrn+&1&|V^HpkCo?9ig_p0+i@gaRc!fef`GzHkc-4IHw~l4;x{5*vM@I z?c0$#8qDf19=VPO3{fuk5wCQUGVm)Yz%wlc=U8pHV465mn#mlrWVPTDaKolq2;*IGNnuF z3@d?C1K#q&yp{{mazfZ4Io;h(X6sH}_j zx4AG$OdjL>cM)DJs*X;8KU*MrwkxCu@x5D_->0EQ546McL4)VXHs*nJrgwF{>|Nc- z_}dir;cq596BaXVO%PI=WK{$j{97df#K>zjj@auZ)rgT_cp9-kmq1ULP4bauf&30y z?lsbxkJD?UXZ(bES2YxR4R)$rvIHL=yD^)(_Z=SlHH+21(_2_>=5Cyz~<9XM-Bdtihtt%{TT_$2Y@4|P={NAYD@73$PnAKIjsLy1v;xK1f z%8#;?KiO!Dw>?DUa?A&a7|-kd4*B79-qz8#&2;%%#5f+Gzb*U4>-$*b^0pEp#`FH` zZSA;iy=G}EW@$^$Ypc=H*0Ywjo_X>%Uih1cab9@qttL}Hc=^{Yb#JrO9nGuzc}v}!EOr0pEgBCGJdkMy zWy0;xpoc82-Dhd-?!4BPSX%p)rL|k$@k5f9h56XsSO| zYMK5J#cc`SQj5ONa$d+Yo(PvE=K|Q;@&yidm3X4{dU1#+yXX_Ez)k-%h#=7{@5a~ zYA;rwqDOM857MUWHD(rKlSB+N1F`X}etD7r{y@*SMdBcsi8^DtvVP~Tj z4G^tyh`yH64om6oz)s79|8@_@j<@!ui1E5U-IKwKyw>_t7Wnrq@b3T~w-fEw5^q>a zY`2tnc~28oYq{ETnrs#jkYwopA4H7j{d$i{5+V0-OWhA!>VCiyTe(MSI{YN;`1)v0 z+x!1dA1wcu^g+^Wae4`TP-?}bC$_H(^7(oSbioj8#W6h+?JwGePRfgbG;s!obetV-#aH;;(b2d;(a-6| z-JkB-Xxu>Q=^Ws4v)iu@q~aV7uj>`TCpHaFbQk{Gv2RXCd$#yj0@p9CM#>-JA{zu93xFIhPJ59v+N;*7l;(z207P)*S?k{2- zgI)%9#n7E!7QPTXPl+3|;d}1R+M5m4*iQt0@b0J@92hV-kak4XV*kN+M*(ARV%-v;kVuLNQ z{vuYkf%1C2NwU>0R);Sce783x|M2*Cf919D5?_fJ&-=`h_wipP#~j~hLPEA3Hz{NI zuJ&Iax9=;(_&MG{NHMxc&hcw&;lZ~O8siupvSyR4qHmwXa6&6(m9n3{>r3`&PBrxj zyeW51Z5VI(gy{tA8dn4woZLk(+)W-5k``LS@mHMOE}pMA#OZMprzid|aC#h^PH$!8 z@RBWXPESM^|GU=Uiq>w_%7-q{8r&>YfsmJlZa@gSDRS!(^0UxJgsNF+8$tmV`VgUD z^kTR7MtWb%`IV$OX@7&9alD(^*E9}Wjq}tlzDoDRxwvD6`?ll{xfR-8oq7P;H`O!z zE6+wT8aSyY{W50{Z8FuSmXzh@a ze)tn)@16gbG_au+#VYA3Zx-MsPPw`~tlVXmx-MgB746o=;m34R*D02|{H(6Qoz&GU zuP$y+m%8S{CrCzox10BT6^nf(Vm$9N@GrN~^Dprjy#&qVcMa(+4>PqMXZ7q6B_*}Y z5D^9uGa%MOU;F~|EJtx(#~%#{PVoeAA+K`6RSS&gkH=*b?#;vfT+1Py*em+9C zPm|cq<-XuO5I0oKFlxCqPT$zI;~bxVLxO*AnC2t=Rf_&v!lfji)AD3pY8Vp7zwY8V z9~3z6$cz8St_WyNS|Z8XpcqqG`i}xy#(%fV7-jGueY3)q%=V@k$;Y0~K#Fk&LSxD) zH}VtSzVc)%tb;{kh(14eZDsGwcyU%*ZtT)HO>Y-11|R3~TSWZVB7S3D{HJ;FGxFk> z?~>mGm**Q73J4iLU&Nb43uouWPtSutIWInB7nhMS-3|?JjWH`Y{=Go4SageF>*T3j zcV$8({j#a)yCRH(?uI=j4tq+3-t@#by-=H9#Y;S=;|8lt4?qs{(>%JXN2hr;IL)iU zXV`_3X20gy_!Jk|*i)=4Z<}Z@;{s&NZguJR9X1eTbun3XTpv z$;Y}#w7x~eyXVD^zRv5G@L#=NnkQ!t3J5ue_vOXk7jZdD-+ny=T1tP^MnR38qWxE2 zC#(Z`Z8YcAvH5jRm_{R;vb_-lheo0^!J!dwDC8G7bU1u{WUujs7;q`itGkki@XA3I zANTj4d`o``u<6J-CN5OV6TmS64g$vu-lF$yLudig1T74KU&TLH=if*3IwPo=Zh#Ue z{Z{l|((WP)ZI+2#$w%i3Dmb6|P^Xc80X1??2{KM;hz1#_kf&Zw)#@1i?cvee5v$(uTjvF`agjddbQ(g+%#80&IqiaBW{(*w}Y zzrQqE_0$*o$B-lGh*cVO8_h>c)^&VoM7pTt7?MU3pP+%y_mM_9e5}&wW!&s0?%|w- z(J#6)kA^4b(Rh}~m(=Vp#$@MHo0+s(gBm-MHpD}Hna{xG(Tm&>W0%plp|86OzEN>x zj#jnUKdlP4dso!&81cZo=sf+%Rr8{V-#s1jbvAauv$2L8hehcTVgHMeO9|7N=gg58Nf8adueHt2o8@BXnyri4WMj%UVe)4#EAOqB;pLaA2IFj9zHSvelh2$qMxW*a=~t2mhGH&hu-(MjIO1!qBn#&M zKKdV!YM19$4raUNs|KwVz7TojtUZ(C|J#rF@1_?1yX1(K5=VCM_->(v92Rj&sZVy0 z43;Z{O#MJWRkNEKcw;!P)SEk0KbJMzS~*{{d-0GA@0V~qoGn&7UfcnHlXuCd6KA;- z@IA|SVQYVn`}SI@v+pQL<8CARuH$}!g^$LsD8 zorLh$$o8KRL(QZKb4mB2(1tNaMbDLB{8GO-Ps(oVD$jl2`apN3y;uMo9l|{D;!b{A z$nh^qR)`2F&){P(AESYL1!L=;TJ_5}MpVlGxgFT`Md$NM_9;8ePA zGXgRG!WgG`cpv}$o#2Q&T3bV`CSXHz+=_7L7|69Z* zU%d6I9QPd=ALvA9+?-Bw+@IN3jdao@m7-mO7peqiy*{$?#HLrXsb&Akd1Cla;79(S zYzKl@JZMf{@h)kw)zM#yRpotf{ePXV!cJQUehDGZAHBp?(=N~W!80Ub$cGI43BDl< zI52bD=lb#L8fgNs)?(eTsl%NCU>tz1M!HQ$^=*Ok7+7*>N@$Qvq-b2ENshIb=Q z_oFI- zgkYaMopR`#OJ1feOvIU?+!J$t8wW{997mQ;FZd;nujtUXZPuX{PndX{>REg`=exvT zIKMTC-=S~j_%3eYJMwSI@g2QHm*cy5bZi*(gYOyVsM#t0J5P-Exfv<1amtw|um9&$ zD<}N!6<+pe%F46JFL?T)lokHLS9m-gZbiR(oen$AJDiV{^KlRD9VThPN2Gh4`JV~K zNApa4^uj2*C9?>86l8ofu@gQbeV6zsA^0f9bxVV9f*AMUarx#wj0Evb3>*+K@l9lu zm2X}y37YuEwUP4;=@NVl*Nw{YO}NC&F;yFL9J69n0vzQWEBVI9_=a{)oNs6^q8WRU zv_ju2l2R(Lku=n~qd4Vn|BzE!?g930r#a~mw7g90{$JZJu_E30u+Us&nWpX5(TiB> zkSo(~j5_EZm8?Tbo<~@j@z5WkW3c&~(|hF(=WfxC+z~AiahbnxyVQFnW z;xhjl11ItlkXo;_AzUV)r48W%5tsSn8P0}FS+ek*p-B-nS;`~T-*8kz{Ti~Op zuK#D>vzrN-O%`?%7BWGU1tqym(FS~N5|9`n*(`ZLP&*;P1dIjkuWhuoCIJMk)x?zY z@)1BQwmuU2_$67;BqCUg3R2$>vIHW&YSgOXx&QB(*-b(W)?fd>&(F_CvNLn_&-9&*e$L6-hADB~hfngNSEFfR7d2#>w1#eE! zS81CbkGKi&bqhn)GzG=!NK;Te;@i67=>c7F**4M@xs!EhQK{L{F_Mn>%K!!=>4@JC z!}p=HU_^C9;{c42bi^vH&UfpGTO#d5b;PpBb5utx?ij8k7Dh@$bwqyTIZEx-12~PO zBW6ZQM|Fe}d5-FcDH_hhbwqNcRCF}mk>}`W#|^YOs3Z2v=hhKXT)%u)AE|32v*zPr z&pnanX!&=ZC7n@+T>^T{Zc@kp_N-a4Z6vL6zW0ANYet4*j6jLb8sfW0hS?^|A{0kQ zck!?uD0xEN(xgGu=j~x_e&#bE>HKJpc5qXY|)r@BcXI@&Q^(P|pu4R%w?;Pr4 z%sUPq&EUM_266}W_V#bX`G=DzPLYX{-N=-r-M`_Un+{RzWHMHY=!qSo47dl+H=>9+-S1O|-?zQ|;W%QKt`_SVj$_9M zgyZPXb^bu_#qI}2;hqWa(ZBC$|9eAL?iGhTA;r-zW<+( z#Jmp%>1!Xc$DbJStuMk~$G|ID7r@(t4AD%1h6^Uc?y`%d?e|T5_+uBEbw)bMJT5GYya_#xqi}$zb&&%G^dFxCc z(U7mvFz5e^w|*X>{POQfIocg@7LDtT(oA#uzel9{@qx%!iWc*~YzS|SK7Ww6DApX^ zpVp7Ornj(5yc>H;Fw3A?Q$f2+S zF>61qc4kAy_fb|h;s=!R8qKmYKZ1Sm6A3~e?!KFduf9BemAo2f*b(RW^7<>HZ~V>C zU;Sm#?B(ix*fSJ)zoG+v*1)Z5D>`TuAE$jqPR|2G?0}jO!9Tw#3d@g(v^(;)Vc;!J zedD9F9vFCwlj3kLL;I7|j$VHSPCA728hA_mZ;z}NO$T+8Cq|{f(6OVtF$PByx}{u? zkGqGw->F_RlWawSN%0ztx2XUj_#9d>f&tk)EPl}DY_N(4U zvP@e^)pB|$Pm5+1#ypnx0wWu)r{72!qWbSub{eHY`DfMQvQ%e3{9cL(_2DMTnOeQy zaovbz5rj7Yfi$vB>?3$x1*{AX~9r|nYo z^c`T-bJX08JT&TWvc1KB4_WIk+82mA{>hM7Ukh|&Ans)JpWR24Lqp}nyllT5nswUX zPekcM!eA*nPvQK?UR1=7+r4U2d%xP;?h93?aG`s?&Iq+XYY2@S@5kzqFXZ`{3r)?+ z2sy4agbrUq>q69@dhGGG=c*$o3Q->1igta>DRWS5x60L9R?z7!xx!GpeFLY z8~Xxzrk5T0Rvm9z{lID$&f37KEy-!(us37UWMI;SD3%`CtJflX{bgcf6XtL<8+7>H zD>bd1z9#He=uPM^_e;$h;lTV&ih z@b?w1&A7RexXLazYw<);YqcI{;xwbx=3q;k+FHwh7SS~uKGk*1f4!xjkNsN(`=4J7 z_wX-r!s!J4-Q9TS`+En@yTCbIe@A>9ZA^ofp%V(DeMBcNMeiP>-s_~bSKKZ!G^VMo zb2&PIMMtEkhSQEZ_BRrS;`tJ+LfoB|+J{=SC#4y<-!qmln2~9UVVt-E@VKuZ&e8bQuoD$^2UiV0yzE%S$+#N?0><5+mu_pB0J=Bn}ANJ@d3IF!Y zJgeoC@zkzdNSN`1k3l{(-YyxMNaet*txK zXYW2js{uB^p;fi3JNqN&%#nnNayChrW@w52rVi*1y)E!wV1I=3i5sI5MxQT(l1aa} z>zj+3BJK4*LaQpTV8;0|F?Q@dJQ7O}ZhM^vA%@8j< zuUiG)>JZLRVHN!eYdztfTFnnZx7?!Aocf+Z36X4SOL;4mcg@zZ-e#I zffWF7P{o1Z&!A;#;JBjW-@4#N518prqGqj_g?R9pkmy&44_ksHkN6v~l zl~5ymG}erpo{v|w1a*ls2=y=DDt}7?7yD5H-GOFU|++c)K1Oi=pJBLh%Lv_ zL%MC~h5y3!6er1SGH9h*ty=Vi`e|+woxRo%sXQlX=$UN1s6Xi^+CL_6J-ZUSF{gA5 z*}tWhe;rzrTBRF3$#0s;UGc%+!dI~-=*qqU8|YkFI#>4oJ$&VnzlTp0(=W=^nc4ed zIQ__r;Td?Fj^8uzzQ1e+-eeTaz;m@a6JO4iyK`mlOMv&12JfW^ynTST5Aa?BJp4ro zg11kDw@-tIk|SjFsO9OsFQe|uVM)vCp{E&mYWW^i?FSb7H7xc=uy_TKUP1l+zyg1J z_iI?ZqG9ohh6PHVBO~d`-d6$dRSn*&5qJjx?*QPv3V8U75=7Mj4c-9_9!j2rs)ML| zaDb|VfO0V0`8}w54OqOUVewi7i+=#pKT!WQV1d8AuW4BPL&M@98Wt#dPO9Djyf-v> zZ$#j|4tTEv-W!02zrAm0@Lt#8y{^GS$#YQkChER9K-HUo@@DwJ_n_)+VDYww#oG}q z-U6hzQ2%XUfxo?PYgoLcVeyuR1xlWis&@hJT@Bv55qR$a-aCNzF5uyB@4FhjcQknK zXz)<-98|rBy6+88^&X(S7Y?=aknJSv{gE6A(ud6vKje~KkScf~Cxe=~16Bgb zj%LhX%1c2eVF0qBG~6?HudY##y{iBH=Ry7NGau-GHyzY9ZTm&oGrSvi`|d$a+l+TN zJg;lo!_Ui_#(n>J1`Cr5HpsTND|_D$D{X^XhC55=k_A%dpV@mTJXk{iMH-p(lQA-e z!?h%AA}v=mx`Sr;_o!tkwnumFoT~(OTvoW-(~leq8(QPxc^o(;vIDK@N8S(XQGxhI zQybTIpf&Q;5NfU4lTbr(fcQqPttIka&r=ccrZe(};vYln=@zQ%QL@6vc{q#$7c^iE zx|Y8Q`aOiV_gm_Nq1OG{-uRUE&_F&cFNGkn^|Pv2yB!g?=o7CTUp@mRBefAFYg+F| zD-WOa2gL!NayIy3vHS2Q$~(}?LIP|qF4is$zNNSqFAqMGRX+G6Hh6K8l&{UUn_DFg z@TJ&*=NhAZ+7LKSc!_*~d}iINBJU+^YKn|s`J+yZ-o7N*bMP&3b{XWz+25Ygz74i~ z40t3A!ApY=pL`GtA1q{&S|Ye!3_3Ng|5uW3`^jkS!b!xV-bpIr2^Q(*wi?We$CLV6 zpK870=-EyEwxHWWXS;q~>k_d%+Qb*kp= zlH}H({SoiihuvFZqYUnqBe;+@kztR&I#%cDDE`g{5pQ>ojmmfO-`dB1qsiV4kfp!v z)Mc#livBl!zy6m$qW?YeiY|N2lfyj^b%cAWI|gO%2`}z5@6=`QMO{qOwcakDM)B>? zwZ-k3|3=e}EKNzy-tzw`XKTKfoL$qd;`G@%NWk&OMb_EsKTFO=r610yJ4?q7z8|VX ze<2O+$yrIp5hS)6oV%q=M3;%llF7?H})0cu%q9L!>IgkUeWoAX?%rS+=obf zW1uEDlnY4*j23IO2*S|!qy_Bq&^M$9hCY)f*dWztnm~WA^Kn!cT!Nl+woL#&W8W0n z*)@&0eR^mecf-){&IWz2(#}V}Y^{OEJgtS!+KKL%+uIC>vL#J zI1>muqCVK&cA`|YyQKco?x4QP^2wtU+7e)c=~>Fr4CPNOODih;y4eYi@s?)C8%}6eRui!g)UY`}}$JnikuF4Cz|loaD#5 z;CU+kZ9T8M^%-ciw+A(vwwBR~^GTT~hn$nJs%M@M`l|`C&oR10`LB-XS{HsH8l|uJ zT@&FrdPlhqT+f0?`4FEM(%F> z>oC^s>0f=feU=oX)a^OG#!yNw`b*=1ckoxf&Og!ysh09*}U7Z z%4oxB86A#25=VcdH4P5VSevy{gIQtl88QsGb26;dPpj|pIRldnw8+^5`-SID?3lu4 zZj+T1W)zmVVjaKnknFcO4C79eWg^>sw4+AtR7IQ9nxXPG3-kN1&j|5tN2uxdIOl(3 zZNMl9956f_zaf=2z9HGyYdr2}@s+5K{Qx!y0y=oh`@l>>D?iSKIr zcl|P()#P;+&1W0aWb}m5k)d)b^+c!2mGZXRw6_-REseAO_MtS`;|Lg2*}=D5S`2#S zr?|JF&WE~zSeD_-FPf~(XX|`*FPrxr1zp4m4Zf?u2QfuAvD;Z+aCL4t^S^_!8nuVx z({U#yjqQE$Eud6J1Te}24o@Ky!39Q#1zceAoT?E0Yv=2w_YBngiB_-fWp4MEZ5*d_ zgTZ0-+|JVdCn{`?Ri3r;i4!u554Y{l{4f(-cwb#^3QK0s`40GY`>sL0)~ebJ|Jts0 zImTi3;3OXS{dIe4YmNRp?WG7}n7sArGwL|+h12Zzu^HBS(SYrS!z zf@)@AmR*POeAs6!nxsg|`>C_oB37GsICFz9-@n$rEnyrxSz%PSr5YT+Og>SO?!Ptd z6lxZyo<_^vsrtNkaA@o0OSj>kH_ZP@nEfVUuFK)LO`H8j$LF5!H~S3%PIzpzsS^FM zafAi1$bnhD)F10Gqov7y-r5kETT<@GsE zLXYsoHg4_-;zoCY}@48W;c6iF5AVq?D4?0fooZ#oiiHdPf%uI zyrT2kI54lTa(bCA{ciZ)^wYc!4a{r!ew-;XuWtfX`Zy;!@BhwT&`T8#ls9VS=R(rG zkooOia|Y&vVuO}{MsmqEKncy*m|-*a<`L)dX6>zGSXnVGhSh@O3t4@j?qy3y7pQ@} zFOrn&K*=n&(ML}Y`nrR!1!u8q*amIR_o39^GH+x>zSX%YiauLE6Qi^I0rWl1^6nwC zeEvCS`N4sDHCjEI5j{g@gw?Z%NthER$L~DmeTH0`Ei~7SMV*;%XHI4{xhr#D^L6>& z^4-(5lFPxYUX7XVh|Kcmv{}B=Uz>LVdY{z#>)>SZy~N^8@zLI*{2`hI#sEAxpZ~wR*qZ7{!obTtCRC4C~-;uwdY)fh31y&5 zDUZ{zAI+ZgJIa?}%_^9EuS>zb$8~!?hTZpBZALMEtvnCCI=+C9eMchd;<(PjO@+`c z>|`1BZ_~U(1x5g!RQ8I>dV*Bm*pPlaGROG zP0D6%IR@pq(j>cSTqV04J#2@r=505#7XL=Jz`p~suG6pg?M6>*In}f9d5OGQwND2$i z9aaA0G~$R4!Ief~w=09K@h<>Z)Y)(JM{)jr+FdN4IZ^7_aSPa`_g-p^gejFGV`YM6(eSrlm z3w)#V;dUjJI5BnJ{NUWt%u&v##iHHk6OFs^#b6Ml;&qM zQA+Roh3waX$Jy*aW2#YjO1y~0mfylI#^_%wQQ3?6dMSg=0j;(67WOC5N_NKyjQfc- z_T15|6C?0)YLri`>L;mOX)@yj_rjL?vgkhFW2ySsU+n%x+8DHXk;|f{Xq;(QJ5q`2 z$0g$9iy~BKNBEdVX#r@S?^^(x`%>>>3t1xS-{l$uDv9a^?EX~3a613yn0aZ$Gi9l; z`_jz9BzyF62zxNs{C@xiobf0APJb}F*MnZ08>_~v%TvulhO32L%|-$KZkOIS zPbP0y7BCBD(2qco7>EO2KVZc^yYWt+!T7_X`Mwu0!yKwVbqOPSXnYq8lw82<#+ANe z-=#$cV|I}b5^kP0_8G3n(GHDJP@{vWNCVarL7&b!s!PXslKG8V#&yMrUxW_5BZ z@lh&&Yz$!*(^9%s99VyAbM z8tr$uj;jv)W^EK6i_DdC@m?GFV1d6~o2A5eQwQ+Yd1*(gKC4%cznayuV|j_W*+sQX z%H5D%;90@O=RTC}clq!hvS#JlqV0+ml1IW^PO8QK_r6dRrRveCdM})ZaoZJ`0$!() zyFSnv2xez`o(}lfOvegMl6D5RD>Jom`t?+j1Ecugxd(fv7CW5ZPNg|WV|Ck9>Z?!P z3t1(wd)PnQzjiE~EIoW@w(Rc%Y-$u4n8^=Q5g<22RVjMFtT9>3IU<4l+zxz8& zE=%LoAEj+7q*+%wRkvYB!FHva*=5X3nwOc-Mvj{8xnB64j@p{wY{BCq?s&pu5sad3 zf(067FAhNcW5r=L!ESV2IN>5_g4I5=Du;}xq<~HJDnAdJD&u9+goXUY(xW+bd&bp# zn44WJhYY7gg;PCwD^Q|vQGeOYZPaF0VcpA)n&Z%hb$b@9p?0S+SuqLcyW-IDjUJn@ ze;jGDUk|i<;?WQgwrEqZP3{o7c8algBaq<UgfQ6)Q-85TKaq1gV`p}!`Z(Z7t1#0>^j;Vp3cU}Yud;=Tmd^}eeit7 z3&+Otu{#n);i<8bV06V#&_~c*Kydz$cD(EieD*lbqU!Gr1w_k3X$JN{a1slpB`8aj z%N?#+lSg09pP$I><2oLJb#`j`RHYf7*&NJ)t7^$=t;y{OUX}NC@EZ2F%mcyBw%Hho zf|xhj_L8UdLMO1HHydNN;2zT2T)xQWaCl&KMLbYj!~-?&v*l7*8pn%cUTb@vYVV7_ zxh-ZJYQL4q7g^wg{sKPe8Tg=M$C>w8a=$<=vQDkV)kn^RLz!z|T$|ztrggb>FR!Xy zj9>S3Ik;aO{V2S)Yo&bq(NDtnbgf2>JK>3D53^dIgVoxXS)2c`eWxdx|8L2>@6uV# zfZsgds%fuOrEdN&*cH4bv9paVo^D5XkbFGCb3Z7icN1gg!E@9pjq`-s<|F!S-e=@O zz{KdVx@@puk5`0(qJJpOLC0{Kxft?5b($RmG+SJVQh3h55B`*zP2s-}d_*b3~w8dJCDpOA;2)YZZon_Hvi5{KQIYCvyv zI=Cgrr_!&T_{CDEJKh;T8nWZm%DO$LYYauF@#xYwkOa`;^a#3N$T zcy%sY8z37;_N;H4Q>f3l_|z=+Jh*OyUGPY}13M=!h1GR9?M&IyG)|~U4x}bKX1bF3 zQupU=4fcyYeQp0p>sO8TITBfPfrys6jIHt67$f_LaTNyREMKVDs9C&vACtw~2HNZV zGgy1}I1lxspw0MKr_z3|T70{adHte)L*P_}f&Dr4^EP|lS8dc^^!_c@($|vKvnLEf= zAsMDgFm99Pi_9pz73ZruG#@1$Qu%nHmu)IIo;w~E?W>u(4LTQAv`o=G;XDtgUY$kK zdLdhs6{B#%WLFG7$u-7)zUz0q&2yO}#dR6ZDB5YCBxYblu#OqYFDqdl$VHRUC>(O9 z;TLBlIPWEMLcGf$e3FbfVWeb+a1?6;$I}9AisOX4g#FR}juv@_e1~+^;ruDNuk2tN z!J%I-!zcUCXiOiVaSUkmXf!5AXiOQP@nTPgFy2G>^_LM2)b59RG<*n7L|e}g+Crc$ z0kj<%LYt0#kNbIzy4N)7;x))Rbus+k-DB*3bL)Niy!$eo3%t|bmyjWJ0?K=!v&X`i z6w%*?0@B=eXmEJqILo>2Wqa+39URve%o4`C=CNtOv%xc4cx~Kl_Ii-(3GoNp(%I7$ zN7XcF^MncH)m^BVG`*S*Z7wMv1dWw0O`Ff>FO_DqrX2EQ$HSA=^|`rnvNAUBli$*Lp>GpbC19ZD&+YU`iHkN}=k{*F>_tcEjaN{-IUI*QN z3u`GJ6Vd7F?|+FnDe3jS3vJT_9O0rvZ<<3r95ktx$_bV0(~f1v zE1dFv<~?0jZgnnJ5bjG+N=nvtrONO?a@Te}ERR-@pX$G-E6so-BNfD5wP>h3z4W01 z#CJ&g8vH$(t8%$Z?&%tDxTos^Xs6Y+R5Qb$k9v<8qOp~|`4mC5`K9T{GJndx%B*Jh zbnPxN6zUjY<{oOA)`ZJ+(>lzUW$naZ@1iuo$ zKZdt8&T+HxAaG zrZy+9uBd}ullNRv3}Oy-#e1`3Ja#n~r@WnktpSg^&R(^)I4)P$Q28Ypu@8-)q4q*U z?S+QgJJ+shsC;{kr(T&1J|LUw+i`)Vnw1tVd#_;7N-JS{bYQ5J7A|8UjyprP9AVXqUn4t@@ucr zbX8GASCRi{7^17@_}VmGWi2>Qm4?^@b^dA4RVnCUyN0ztjdXJ%yEX6wtY75%im-CA z(syhsy>)?xTcNXaePfDO`;t?2ic8Y!l{L^=WJ5%CmX4#LaQ7PpAphegwK-RzKx|+>^Oz78QY=0QN0P(eEb}ReUuo#JTzmlH;m@DBH?$4_2Zlu1p7W1py!ul_E3AbSX>0tBNLwfpX{#-K z`>aUY`$HmakL8UNXL~dfXL}z#y3C_T!fK_3h=j!`drB3%Fz#k{1$tTcZ>w3Gf5U(W zugBS%2I6cBzcbEuuNMDGc8}F`fWYStX{FIc*4dSb)>4H(8R2;HpeZ6rk(`B)PkJP0 zm0W#Ryln&GZ8yN$n8yr-!R+OcnA;7JnA_4cokx1LsM{XIMjrOJvQ74z*{>iQ^+@5v zX=|BZi@J4;eCOHh&g0MVh+o+sN0T#s2it6-TsECTe>t2w!uSM)a_1;W+I|) zR&^5Qkt^-&k+?6gL5t(v4a>P%i@TAnXBiTCYmj`1ye&lJt@#|0x80G*TWz6DJu)ov z_FyFP#@x4lEArNwO5^poMB_CzLixz!^+D=d#Hc9pcDEL>BFY!CwGr5_jJZaOye&jj zBnFYUOWn;ZTZ^N~o_sCF$RQH?u%AY(6@B@uVX?PzE%p|z^PEes^F;D8WuX?aDHw=l zjTC#EJtX#)H&AlnS+Tba#B6dj4)D36ltg213)w{AotRn=3X?$Lk6ii)jdD#!tb1te zO-|KgOGn2LX3;2>B@%n{u{Ge18rJt6IAld4Z!4rh{=36P{P%zsd3!uEYtF@gZQz5U zk++EhSnD&pIaQx2E5~O86Fu@)6N$Xt9ErST3`E|Roip;bd8$5#CL&(}`1@_J+O!B{ghQTC~@P zN8Ykgqt>_5XTqr1AvGi|_Ev*&yaJ>311`Ua(cr)^8?7Yh)j6u$Dv{jQ3=c0B;VQo!sSs2ptr)j!ZG`!tVTBWAP(-|kskdSBd zYl~2mm2Rbo&_l))w3QJcsC?iAPL;bzgUAQg_@Xux$)egqlNv)=1>d>y6OF(bA`v(* zdccHUx2T8HlCefeePQs=83y?uX_Sj>;t0P)5uPpbR`iJ9+XV*I$+phhnzt#k#`IX; zrh@h&J*(yTTrHEi=dy3n5Er4r4LeDvqOO3b=mZt74#C9DGKYPCE={#i?m!%{al(!v z{wVqNga~&W&mC>IW7Pr_u~8b0|)qc`+cuE5xqN`GV#`G9^Kf!*bhPhYcBx+~7Uoe@C)AKWh$;hT8h_u%8 z`>Z?9f@M|DxP&zh6xPZ--Zk0aHa9`>ij-w^De}mr}gmcfNI{;AUg2 znZjFcBl99NWGGHFJ{G@|{m576o5tKl*TWlpHsa^Gz@#r&E4(6IprkRI zFwsRe@vR1)8Nj($fRDV&6!24_{XADDGAVfQs$}0Q-42Qq%;|wUBYl2nA&tr2!dYl_5M?;D*(T?t`;#t@V4=;wtrts>(F z(Y)YXisv~HYidB;=sEOcFx%#dg|9>r`5UC*T-f2T#Xqhy6vtN4`s#IT0=^{_oLE>mSA+=nTJHaVZjFklUpo23ghuiF|7yaBhsn0y*EvO9!wZw!(7MiEIg=vYeU4G#!R869rS;BRN9mG~S3xrQW}Dc{f#5IIekpcZ8&MlY2b}|rVPnEU0$-vvrB%#eY+&b%`(i!$s8tp`^8pZ z8E3)`A3Wf`gE!5{f9@|EE!XYY7IWEFZ>WPixh0b|abB%`i`M>Ll-r(l8tv=r`4`tu zuc!P=9S4cs)-o;IB!WNX+qS%#>8&)O{!siM8wo4)h7&V1!$|!SKKxF20NyZ~){azr zfF^Hfy5aV%mu)?{ABopVm8jb`Do4C-GnHGoS z$q0?j0=1!)?{huhT#(Mz=T1T{_t3YWTp)++m$SURzT4-^p<|}!eHHAh;O+{GN;sX| zIty}d%&?xAFpL(;i-^)K52ITcR#xA$L)@n4?e}$2&kff1h5~2tO}OXd@VB`^A2V;L za9G*bMkxE0#fv!RXl}M(_f&4=1gqyNtj}3Pf5sUs^YAM+^w;*EM$TJt1>Ftdo*jUa z#|$@2pd1VAg^qWy7Ro07y4l7G(VMO9$gSoG@4tZZPc4*(OOaAXNDLM>c-fD)T7}WB z+u58Ya~Rd5?==;U5SwcV$#dOovG&Hs9C%vHS<&7BjJ7aXHS-(YTWOmdea*DQ0ze zYl*%^p83ocC(C2C<)1enFXMWw8cq6G?9HOv72+IUmd&sx1grh$h4yp5=EsSLiL zKd1(8Mtsx3=CJlHD}&q(Tu;7HgbsB`8Ep(Fj+8yPICo9lOt=~ujr>>OTb^U6 zMg2ni1_*1lg8Ic6s_xLKBhH}r)IS{FF6Q(V)%uQ{hD?l~zlrfy7oA48OmWJE3da>T z%trQLxaYMqBnzxE$5o=tmu_!^*r@lNI?#8sahJ$!_H+~1b0WsdevaNQarRc&UuU})-lr^+!B2GGXG-YjT;)c}B7dub&Z)Oo@~G9Q z;UG5dz&!^WgDPP9V?@Ot%oNP9$kpI>c@FES;Ch}DIpINZW7|A--}UiF&xG#|Iw~Er z)@#3S3nI4E^N16BdIjFK0=qJ*PSe>4OHZ$o=b&e7=#@d<(z(i~aoE|sg)v3$8z=lg zgOPLk?zW9>IXv&lM8*dA13O8=Jy)LA`?|iPu)&6&TlR#%Dcm#t^iAl~&X&;Cfz*TdvGrJ{KitGrKB)Ps=%iA9vaodx5l2 zJ1K28W{*7gzUF0ZQ7YUlXQ$pi@iqO5&WnYSeM|M&&%ih4Hxkrx&MwogiCWy2g!3O_ zjFrnGr%CSA=E5hM{f+&)r)5Q-+Y5rJ>p1m%%;J~$IMo*L<*^0c^*=r;BgY?O!0(+u zC-0ku%X?++d~HX;6B-FIhS66HBxwXh!K@xzI$cf;?j#_!7D- z82QrkCu@X{gVZmD4FafNT{=p2%Oo9atQ^UVHqZ8^sq4459Bc8mRBCeO$2%~;wU)8} z*E;p7*}{kJD4fCu2gb;|j%AxYv}*3aA|^`ZY}{lvAtJHTzo*2~+vi;b^^6niZ=P_OO`eT>au?prgVsE^ z%%a$yp6h7lWMu|Z*y*QcWZN}bUbWsi-^;AAW*1{vH#E$NE$<&-$Bl*u@cnJSHPY!zt`vu8@F z$e(au$71+6>F@Jxk(LcCPOCS@na;P27L|h~RQk!pd2C9ly?pyo11Iv^#t{bXB{OvaKT5fE z)PpXan|42Tcgeb=;c&hhi_`KZg^IaYc_wO1$(HfEv^3o|1HQGAot~3!T{_C{S_qx= zY^hbg8j|c1)g(Web-kK?q%BOR2pUVwlVB_1r&IIv`$^ZkiO<}njsJG}Zq)drXA}P2F6Q$e zwT*WbG|UnN7gtJcwW6o4$9mz#X!FhXWSRB_w}oxHc_Z=WJr+Z$S80os5oKeke`9NJ zb(mA9gsQ`>y|;#`WF<;+F1*+O-de-!+-3)S&--0pR8J4m~i(Dzqw9A=Mn`d@u4tDd{RhkJ;#___}$(IMb z{A@tV0_LVr>tkPHe!;FZ^Gu&Fo8oFT2$zij;T{dbWdWI==psvO9_AH6u8D(R%_pHh z&eitvfwpa~%a68(=dmkNCo7kxp1cv+R*-0v9d#PA3?4nnWMnOFfHv}&w{PjM*xoWv zNo&lw$*1O2?&!uYulwDKOP&lq5M7QcKk07IGH4dA=P3?)ADIPq(tr&{nZ9zu$L=&u zE9{E2K`lJJWpZxCvJDBOE>yA;FM8UY}LV{uMia=&M--iynkUu@}yxh z?wah#dahtQS|!eU$Zb&l8v}skcG-kD_#6}PJB;>EOGFV5YVL!{c_M59mo4MJ5SJ;` z?^Z~KTS_Z8ioDrlP|lQDp>62z&(fwvypw&8aU5{jNY-_171bt8zIN*pXy0Sd3jsdX z=8Bfdsfxwe)*rPa%HUf?x@f0Ix1@#b&~sciAWe_x0%5yz7S?)I^sFa?1+x3Fk54bl zZBN;8e7U^}rR}F9ZS_4SMIr(m>fKc`zl5x%>~)4v_hWWNENUppU&j|v{l1_*By6|H zRG$;}xGOhyHz#D*mU5*AtJ*?Z!B~(mS1OWQc=d+nrk&j_RIXC8#TH4|pngo~qU|@b z=gY}w<0>uFt)W@l{jqk}n(OP29t*E3sqdZ0`LZnXi)~*luY;yc2mW;4?;O~@ydp85 zda~l4>+`p+xjz2L>9CPMUo!Bri zUI*zYEyVl8Ss9V{S7#yaVK=*ClzXnfe+OT6_(?}q7vJWNk$JVL_X2Jfd@0|OP{jmT zmVY(GR&{TAtYt}~SZ;(|k4h>`2*{8DUo7HrRa#)B!{6#F6N7SS3s((Ki}pRwVbjgNO}1xe;!ZnXKC=7r5+KM#(=ZU^$fW;!(s5Ax@zWr}9od2x!F?v2j; zp0=F@duj^NLjAwB;wT2ebElu8HYO4q0wr4fC%VtK5pL8_(n| z$F|hkt)f%;dDfUsQ+7>*ydd9s2_Rmm+1F=#NHrC1c*n!NjNwqM5h$5}GP2iAKH$GJ zKZ8z4o1hqwt>IM?p*K>tG!aHFr{dq>-85lWj64hYyf-FYu()JMCWj|Z_HN>`@{uiR zmdKXvbo3=L@_;DWZ76W|b*$iiJ9Or}-e4p~9dy{wFlwH1T$y2T2;L^T-i0^SI z-(TTviIwx%v#qnEyFwlX&?a`Hve`TjCm zkBRc(r&>SV4j!3?%=$r`dtx|YyolU5$p&w{zibrnyyh#LBgXZO&jKr&IPfPi^w#%P zj7F`L<6R%_Ir_C8>(gVGdi>)W1E(Y^@yg6ml4O|PS@dNdXBsUYn00*lSanlDykd9& z`@2Qc3!G%Q-|&Fp{!C$mViA9W*k2~>)~($pIdOww6FuWUz}fF7NLObisr3a$tm7P* zRktT&m2tPzJYlzUR)Rv%jQ9I_qbPC-SkK!Oh*#j-1CmiTYyy<4Wvra=ijNsZ!>0IH z$E-sMhE0Y|??Q8^7G7~G{WtPOeZX>@_;|OQv)9MhV=bMVga4g;oOrx|+b0R}^}xpT z)&lx%$8XtWhSW-_no!lbylZ()h~w-V;x}yVj^XS^^FHTQb{IWA)BZq)$tcEexC?pC z&Va1(5!oRkL)JX!-+*&N++QrWD~_t{4dP}F_o|-6>Isb&;==4igvAuaHhmlN{wUHJq*jPIG`sykZ4THvAed6IRThj_+=)a}idD zfz@dI{-~n<=;<)c2S<55Vlo^ea`Y>VUlz&9kU3`$B|98Oo53mt2q#*jq}Zo!eR4f~ zBsQnxDzQ&3a_E;=WAKs=I=qS=lkji9Mg6O~ZaK~Fx-%AmQ`2qqTM6^!>5g=pSjwz6A;v?I zMK|8BICFdcXxLHpnAuju1HwHSUx~_?MqS#_EZS|JtdKuKJsG9_S)17su|$>0)=l zvmO{dz}HU;*{{WYxx@a^)Hiu71^SD}Xk+aUWvEY2W1IzUvQmurx}o4Oz8|rsvlVUL z#+tUu=K8kn%}s5`np=^(zP(rEep8i)-J44*HbD;k)@4wasW^}2jNURyt;m0XZQcXy zbEB;g#aQpdzqNZhYisvp)MXTz_t<@r8vldx6x%d&2E{mC6lNe2QLMD~o(dZ(P3qz0 zHZ`E8V0UZn4Y}$xhtnl)-0w5^k$=JQjtfO`vkCdi_NwzMm)a+aF|g%th8>wKnvesC zcgRe2RJk{sRN##n{GNMZtkaW+d;_vH!acR8d055ap5lLriX1BCXeGob>k^W5m43cN z+l~`EMB$!@wYT$6;=1bIufucLiVA~zn_2-bS$W!`S}MycMk{SkWrRM?H-wT`|CBiw z$s4(zw~_?Kn_IJ_wschahb0oE0?*4EJ+6$dzx9qpSm);0st1ybm6GLuD4__n8T4&CJ!2b>y&>VA zt}jKUTaA(Xw+eW_`ZPstTk%fsJ-z41tBkH`ctbOXtut&v>5YwKEOtZU)U64YqQI)!yDebtm!wW8}IR}aHw z_6X2Pp4u?;Zjd_5ct@Fts78=H3f=#q2)t+KVr{i14;;sZq@6f(+>nm*u=O(ZU0=zt z30Fq=tGlbO&E3!nTRh$0U(uHJLLpzeKS!5oD_Y`M68JXp3x*Ys3$?pIzulG_Q9Qk^ zKN_f|!M10dqiw6lt@O2t(C;>^1nmDpR8*`A8Y^jTXEI$*>oHFg)`Hfb)o$7mNO+CT zqsyr^*pZ;q4J)L|5Itw5yGv}4^6U+@_E=Yxc7h$H|4~bT%V0TAyfD9_ycBEn<>gqH z^Q>*EZ^nx06WL98lKjoqh+iq~jGp0xUpUn%&ZX;x?ye~fnaq(FhqhAU5CgwxXj!aEjqMZCq_;)(W~zOqAnHJerX|Eb}G z-qv{Q4%n2@a)UV8pl#Cp-p1*2Z-o`J_V;IKU4zy=FO-i~2=IWyJ*Q64JdX=cVkxlV zyUV?faRVbYw8a&Eg8vt-54fIRjL-wAk-0=PKM&o=DWNjb6y64@JiB0lY5-llEwdp- z=D7HVyX|8=2Bt2lvx~0$Co(YV^-XIr>J3;)!IPBT40+t>U?$lS5F1NaLO?B_+z9Q@ z1)j*n&J|taXwecyw{9xb%!Ui(TUbIva=_~69phb)x2~k}?y}5+U)#q@)Y?jW+&Nkk zs5LnTZ6%V8p|$e1+oY{yn6#Pju@;lzkOgC@EXAr%22;yzkc~@~tAYPn_@o=u zrR)vAyPv28mm&r=8>K2yN=2#FJN-(WoP-lQHkSBzuG?vnmf_3dMjytw4!`mhXQL=@ zt#~8ftt>8|EyOqGYo(T>A15_t2uA7do%*c)BgThhogL>t5;yQ_1@8Kk$p3bB1nsJb zUoFo4L4&#$zn*Y*W2NSHV>+wBeCuqZa$B7T+Njh+&b2DVrZ+kJ%VvY8&w~v?-|u%C zG${AtFTuFm+25qgG2$Vz$H<;Jdqu3A(^tgi8g*P&ICV^_oX9t7&O@{`RAB_HQ^s`c zy6nS_NNVZ22qp_7m=rqov$M#OBpPj+M;dLBW^7Gl-86mINb9EQyY%%mN9Z420U9Nb z4J*&OPfO)#HF+_|^_-4K`u@~R!RVp2Wv=Hlkfi6@6)RqLqGcL8TxC;pu!ayGpU zmYmA*w7BxRJ?Os(=6xI3-P`$7z!pY zn#Jxys}m7t|A{mu)PJUU5r;i_=Zw>v8gsQn0PTZLF;Y`ioM;~ol^^LE-3 z)7@5^ZtF{gJ+5cPK+h8=5f2+ezud*)|I-#8zMl!P!oIl4iWO@BamsJ7(+M0QoQRCz5sj0G zOY{*vrafCE8qHnMfBIh1r)t4f<^YN2^NuF;?1u9ZBa0B^#9Tp?AB4s>Ro5 zG%jmU*yY2IgV)+a>8R7wjr*AY6^iDV0A zWUNxkeg7JI+rBA?TVMoeAN8hj^2D0#PQ6lU8jR?3BYx=(vU&u~rXeSKbg*(l_G zT9v^Zr{l@to{RrUcCFa>C1Mr24cWi6X_$q2o>pe0Jgx!0sH?;Lz<%otS2o)!hH4nf)-WQUfpRh^ za!OpSb0PT!mj$D8;J1{cf!RPY1lvINhj$&;p|CoFb=M;AdJAmEIgGSUIf(METY(IQ z?P&dnC+=Wpx2m^DZGU&G8zQX|M%1ca8hX{COG`bMV})g!7DY{Gbko=GMarzAJb`bT z^^Bj{n$*($gHJ4{Vdp`bXnA!r*=*#>+k{kUjo`M9w#{QI@cj*X%YxP2z4HqfeUY~1 ziNjAIwwoibcg)HZBxKg4JJwtCRpbS2_Q6ZWD)>5IwoN>N6%?|RVynJP+xkSxE|g|_ z^PhqDN@GfxI+c$h$zs3}Dc}u1*0WA;<@s^a1Y{XuO~`ctvJBl=OnkASX+z7KEmF&Z7DuQc zC^jtELA`W^=jZIs0Zu2b#W+NGUC&%1PS-s$ozs_aL%Gz5oF9sE$jEWhCH=(UlIYAp zE7A_CYh&{p?P@G$&Jw`4t4lbeY^u~(t;urbkUL20H1O;ZANQ`y&c51(yfp#w{wBfo z!u%^7SJ({D?-awk_g~&E>HdpkK45iR2!AUUS(%90;4SleTfE@0A7C8v)iIdY6A)d$ z2sV1S=j5lHFiB#F30`5nA}~9jN|0CkCF1&HrQ7`(fqUnBw;<2G#U*nbtsL-@5%mtC z9z`PUkQ3Ar@#vHA?ruJ#^DD&+qj^SC)=kM4APwCgi%K>$63uOj*7ui9ktNj#4jJo- z&vv?&Zt-GG!sK#b$8I2-$0JF88*JTuJZ<>r;D9VJwc$y}!o0h{D zOkPj6;jyM;Ekisd&BAahbwa$fAUoa#el&=@v%%!LI?F2K$tdzKWb)`ggF0GXkZtk6 z^1%9c9DOr58z}d|K2UP4R`U3~sCu&SPjxhFOTnt81a zCw&30MNgw8Tg1X$w#}>1ddDivFfB*=jz_YLju;Q8;>1a9-^2PWySjINC}={Q4n7H1 ze+2BX3-|o(SRc-^q+jtLN=i)CH7td*bT*cq&x(9>7PK5x4-|CPv7)3LqzbV^>hXY;W+`BtsOkz?sBM%GKekKg*QUmx?b zZ1wbVoIZjbsWnSX@~zwA{NBxTwX>aeySv-S<~hB*vedg7 za7Pp6`79_!Q~}z7azgsy3AFYe4_nmH?cX$y0VNa}*&+fLk53ibFPFb+HmdsD-{I{T z7ow`BG3*<}&$r~^Z1i{NJMJ7iRD+dJCWZ#;RUNuGf^#LN4`HKlcxt+=BpAMw#*C26?<`EB== zZ2IvQ*uSc~iUjZ;Fu z4adl8yRHonwguW(wA0(BaPcAoGVwBC{n7KN;A=8nX!V_rWfbHS2pX=yRr7Oq$(e~(Cg6CGVt{_)@Mb(9@M@XV3!cC z-o~ZP+jlOh8XP?fW^M=COYr0e=x(W6epCd;OguRPXTwR)x&VEL1y5{t)cBSEW1`+kXXAyM62UNuUd@$|}4Cs<$p{Qn{r~un&>XYmt{!y^?>_{&}(<2PRo>s3bZ4 zKCIc80MG+xn;22{a|-)9%JvUowp)DVfl^6R`HTu+Oacp7OEu5AK8X811_3 zduE}~o#F!I{PWlxkg5>Aqtv@_=Vfc}Ds2v}4!0c*Awz~QXzdN*HWeT2bn@`I_7y=M zxnvm)lQ$ZaTI7Ryvqj_<^X2n!nu!;ynGM>zZ``davMa#lvt@6ofxmimY?XH-Wp7zr z%__a0CVPpZlFL7MH|zr@|3sefHHo~^dIT5<^A@FeNFp-i4oeMmhu3*k67sQTe(+X! z{q;2uikRhQnc`qs(`P`6&OG`SW_zC-8N0aeZ39|{)KPt*sT|$s!uz=Fv93E<#SIik zT8)-sBt2fC?wZk-*^qNB4?4bZQ?GD63k`H5OdE1YPD;ksTY^R*EH$eH$G{(z41(y= zas0%yxGjmDoTuM3_I{W=$aN<}ay4?i;#@j)$X8;efO!)lk?%@1!U06!-jwT6;x$Q! zVnNBZ;q*l&`7%h%4JxvykjNLI{XhO(vO1GLmFsCV@b0jkw|V3gQB4TLfE|Dk3fgsTKF7YTfq*M5$V})LI3% z`Tu_RKKGfKB%zojD$27y5EGzr+hS|ymTmfS8{&wrmocOIs5CJ`#hp} z+g!*6$9+jP>NKVIo>hpIya6W(p+|JRS0;d6R_aro{X%ycoN`u6Wz$h2GS2a-BG(J)>rF%9%M`+dhUq_GGF+ zZjIy=tP)=-o?qHkk2egF0|U8Xjw?4ftQ>zhMCEDHJy`49=H8HrJmF1v(DJ+{bMje# z)uxl~nJLefCZh(TbS0of>%Z&f`O^O)uk-In-cugKZKAdFSbk6Dw3EClwd#8ulDiY9 zNx4E#*;5Vdd`mlRyl3rCGp|_n$fL$8l>hNk&m#O{71mK}YMjXlDC>#k?>FQoip_Jp z58mOf>|^Eg(f-i0_G)V!dysYJqll}M!$s#drnKv}ls%pI3@BQ)Wb$90kMQP0dFp8E zJkIKSXg7KETk5@|H{`B0+<3zPA)CHcd0c(ZLhPqLI+XH9VEnGwvijX==!v@qm2Y(*>IyHJ@(%qsdsCzs+6Sg*EGey4#1+;*ykm8uU09b{VRm|7_n^6(QA{Z^!Ie z7zve{d;W%dF8xo&S{<_qZz-5L#CL&9!K`6>I-w1@Wyo^mZ`FWvYqDi3Ro`}Q>GI{S zJGy4qW;c2#Zpxok;4SmJ%p~k9Ev#AP%f&i36LOMzXGNr|rlmB|%{&OlRZCoWXLZV7 zo{N}fm(RS0>6IfrrvBxSR7ll*g;ieunrKR;yax&Xkkwan4z7q~)HuvkKjTdJR?k!? zt)04-a@s6+!}j2I>={_%U0v@@esf6Y7L~)pWf=~BLwT1}K6DUrFY9pdfS_;tyQmqg zrj42;b9Ce6_nwcG9S($h*SP{$Q_yu9hk&6x8mS%Uprxqn0J!Auv|4YV>v z_KrMo0P<+i7R>(84DnL_b(r%$dhOQj?^Qq!=A4|7UkE%~Hz7Z7%fgg5a;9PiVL6`o zW?$i1s4usBa1QH3mF~W8a@Vf%;rB1x2W6dj%-P;4_)XQ!%AtFTu~u-&I?1RZhnv3X zW5(Ao>-X8nch%49R{gv@B&mEtPGjj=n9(oC+WVh1SV{HTNV~ z_f^;3V_wY^TffO$i?u**B^lIKTF_`^FSm6S(yx>mk{^x`ww(up20I zG8S03lq$0j-dRd*cLF3ATgtrVswMMqGi)kPkL;~8cs^^SDkRb#9gp%#jp3<=bWgW@=R_Y>~CuO zHLZGjhxC}8@m4+BuG3(>(>6P4zfPTQNh{iwMcVPW|Dt&bYo~R@&fe^O^VcRcp0~%_ zRa?~8#Q3?wTa^LJE$=X-n%MWwISji*h1=Y)JGyYT9_#r}GKxxYw?ys53VCmnd$DXc z0V_7rmwQSndzdf&HhA}w$dqtACA=5=0IIdko!lW_=uXTX0WGKuFB>^bS4|l>CcysK zx9Cjo`L?~2_I27WxgSjV&YDUE%v$kVR!nWtS2j>DXlcLfi*s9Q$D8q$6;$!yEl3^L z+__+_qEDs{{Wcr%cmg>c>jC^; zsm0BW&>LY{1ZH-@Rr&-r`;)S7^7QqM&@+bT52z`?od(<=m#41N6GiGwXc}X$cx`G5 zG%WmLRF%7kbMYlh*1qcy1+b&v2<^)79)%P}U)OjYdj#HB!3B9Q*24G=Mc7CSOjvbHf?Rq;YeEs$ZhWmKvbXw!FRZ(gY9FKq z=UMZ-6&2L@2G^`CO*RiU7)3Y@N(t?)G{0(aBF%}&_h?6fEIf=I?&$;l# zX?wo?1$y3D_fK=-%xwbtqsN=vbjR)j&nT1ko)Q<|UussAEDmC3&(B};u2b%BO!ema zN20FQp!T@mG1cqw50Wr!XcBh&`vUeL7sNdX&c_96qpiVOLyxBOz?8J>2 zA$OkD`RCSzxwy-YG_b!;nU-R5^cXc>oNU7RNLUdjdmWfPa0d)Ec>t>w;#EEHOebpy zw=nQ3ts|!p{hE}2OL!D#Q+U$YnZvz(6^iZvT^8{%D@{o#SeIbRJ=&{JvtGR5X-s^; z9dF~Btjnq1G?b_ur#cVzSGRdwxwt>${k%|>fb?I<`{uKdi(xo1GXVH8d)gx}FB!I{ zOSsoi%P+-goSA6FGu|(FcPK28Z$%2;9VRW3ls*RL>Jz-vuxB-9&-*xm;4mGH#W;tO zz6wloIe8v?+m&x!&x@$+jNP@-ir4pzq>PH?gMY!6g2k@!#HIf z?Ud!A_B<20J32KZSETU;sbZ0ooa`}hj-wr`b$4*b?sSoAM)oGYtu(ap(AqA=sg8po z&$@#lmgdBhk48Dlyr!Sl-N{%X4V35e0PT75Ik9&jYBsrM&pgyh5=*gr=T%FRaJsn? zr9K_^PhGjpv+n;&_rvcXH>`T()w4WB2Wm>HVBJEFR~N56HFK@I%8j>&SOV5>EFEb| zs#0p!p6Xe9A%49DyBYQwhFChyZ|$k8i!;~mDs@*yDXDQL$QKK8y*suIgWVw+775-R z4#FleYwaqzmOa>iG3*X*%)Hn`$aOX*n0*?#JCxSs@k2n;e>)W zxZ!B;`SqQpC)DJoq~?#FRbDzAw$5D4;4@%rH}~8WxqtqO((BwaJ@WUaoM}z{a7y_f zJN~h?O1`Tk_HKigHNe|hYSdK77n%`^wO?ve`P#>J`Zf$GS}$AhfNa5(+(xvcE7z#mvopzbH@=TO9i#DsovBTZ zM!w4b+Rks5jxm3ZahTBPgf@_vgA*a8)Ut5{t!Z^*S#n;^%snHDlTjkt-jxmg=;x2d z{Tfns)kpT8_p07|i0u93Pqd?_Hq~q}N{yn&cjQVdS8n;A`?n$=$(~ns6r=BigDx|* z>5ZKq7ydkTZqBPa@cMNQ&#CcrzGKg|_arnX;e>yl_mm>h*r#cjnNs9#I%~<*ODNF> z%3DFRU*&2hve)xx{$|u@FZWvpc)vPftaZ-j+IwyW_5KD?ulB?B*q3 z{_)KnsG;1E(++Mb^OjT`+$Q&&^6^V*NVgOktSB7{ZI(8jX+;~~le^i_U)|EGgH`6SZji>We3*elTQ>4zyKe*{E%o(GLTsSM3gd)9rulOw{JdvHey&Zwrv?8AKxxswPvjPog$rX?Q4J1|8?YI?rgRC@EAGaGl$?f9rudFZNvZiS6RoO=&k#Z*Amy zI};44L2PVTdAlc_I*r)dPk7Aj!T7h6B72jO``*vXue`lr&zmCtB+#d?_oR-V?b*`f z+{|me(qs1qCucIf|JeHF9I>}Wp7P-M{#eeZNjN#DPR|@|>!GZp?|!ETTHLKS-})?U zr^i8iz4?~;_?3$J-V302wU&N~QxVRbF}II2n}DH6z$ph z>CS%gWYT=p$krO3(VAt7UQY?B*J7x}cYlvaX~~IFOMd-L?sTT(#t-$)`>}p2$K2dE zS3x{$unlk;?wjNN4Cu#d|DL<|e9r{$2*l*R*nWXWX%Dey2vFMc9M6HeRjIV(dy;r6 z>6F)SCNwQ2N2C^9f&Ely%Py1W3Jf_T8(wO;o+5RcEx9PSCR1wX&Kw7f?d^gQTr z*f)NS_d!k&9_yBrI;*PBJlwSL!;KeKM)qD8xoP9*+e<2fG56gyO#v(+JQr~hIK`if z$TGdyt>G$UEb8~O{?YXZ>t3LYO6yR1{KGB}P9w1|f4a3|RO(}i; z_5LMTWl+ar&Bf;}B_?lWrbwNN8-&c?Kdt<6HPN*SH}}*k;zZuu<0|50ppADJnU5k9~ZW!Rs#~#Q4oWpv*VJ&Wa4{+xI&IG(4@V9_d0Ve}K z05}2|b9d?s){237bxV6S^j0$)R-(%Fj?}OFZr&qJbX=)|*kImOw#GTmLfJh=lWp8ZJI{Ihm>=AO07vDhgg zQYBAx;WfcwPo}P#v{vb~UAx@5iq<{-tX;-p`bl}wE-{(;u7S*m|Lu;e7xK+|zHz<+ zzq}wGTd_%q$(vGemtz&)K)<>QFYYBB0gPrIYsL3{`d`wnz!Wr zSlWiX&>U;e;@j4*Eacu^hHzA6_}|7WrYRTX&ii04^Inc$0~mZxq@fSq2{89`ef?+! z-h~j($ z=UyaN1B+M&C*H4I^~jN3ZU=wE%W!a2JE$ug>%@{p*gLB_tY)(N`61bO8#BfKXZ1_I z?gE^ea{Hg1U0lkPp6qX=F3NSJ9-lh^XL*>;9kU)pst*_9^`e}IMskyC? z&<#V7!m7t-G3U(pQ-#i&19e;QJsLE>ESy)j6Lz=#HH#~c^&Y6XZoIC|m|m<-7%jiZvJ{EFaX1HE|0w>J91fpBB6zFo`>nNi4W2rdh>Ofbtj zgYChV25do#k$xfSLLE(hvnAAS`U7<#e?Y}B6$8+WZx4jq@fW=4GwVVvelQ5N^ulj> zu)VRmA=KX9=xYP(p1k8ZOfV}#;c&3FDPa2A8akQ-E$!hcW*iecyCU2kY7Gb4mIc~k z`G#5pEhbT>!c8$dT9&qimbaL#p*Ch4znZ;(=mj!r$~@4c@Uc-$6otg*NPi0GM~2~% zc*W5i)k~PHl=z&IE+wTj)Y9G-YU-XGDoqAkEMrr&f&y)Ap|+t&e?}|~ZjeQOk$+7XrwHDSU8QC3+wuM#!d7HSVj>TzaU zz~{FkP7k&O!;Jwpl_+Bd%s^+Lu7lmfY;O#h^&KsBvZ;?{our6`Ep6x{4K2Zy0lzuj zLLvusO`))?Rawasy1|+^lO|PtTd3I#hw7FF+7Wj_M_pYY;196!rv=&rb?wMT6S01? zc7-`IjPU8cU=sq5=Vz81z;Wmw)OJGj{%vQiPHzLvwM%zOdzYeZKw8bdPEFM z7E6pOwh~}zg*Yb@@9Aa>VZs%_dEq9*6~n1=vaQgHA;fG5hEZOb-igr`)Zwzvn)R|H z#P(>jwu3Dj?bM2|4AF5VPu+rcO4cZ-w0fl`j!lRWqwO)Rq!ajF6O=fs?_0tl2;mwE znN66l0;pZ&u@0HVu`PUfsM{`)_2dis7cQgn{=g6R*Stt=~1A}3)z(}KiA z9Z>RP4mN|$txW;0UjlwKyQK;Y71Kj)bpf-Z6@4kda@qs76&kPE>SNPF=RqHftsh(7 zLf=yvQd3DvOdTpc9hy^Hu(??()%J{oGAccoe7fn|W&t(p(acLrs72;UEsRWG6UkR} z*SrtOtCbownH?g%R#dP|uZq)VXt`QyS+%amgth#l9w_J3Xxr67#fq-ZD%3K~&MaD1 z_McKYS7MP>A8hD=dIk9}!$)>v?bg(UZ}ta;WsLwIHw&A-b}JFiT(M(PE-md9L#*6D zUZV*%`|4D@-qMf~$XdZf^ASKCGb((n{E(IsOleBY%J|New zkWWoqL$pAiPz)4|mhukza7X)4tB+!EY9wX`DtM~zBHV|0pcRo~!<97xQD}FtD8{kf zTfm>Iy0$=lM;K$-%Exjp)>Q=td=0)}3-VU$^Vc(vjOD9E4_52#K)tV{2^NY#5T*g* zgIqM=Z*x5syZDQ)r2dB5S$L3$z`TmN^Qsms#OV@IHh13Ch0_=C@0_wZ5?)XVnzD+@ zc~$d-(DRP08-#C~A;g68c-Lu#orb?I3wL=hbg}Wa0{?qWte40!LowS@_TKxBE0?t#rbA#Q0$evIbAjIZLi!4vCjbsW96AJ9%*R zbSOMmP{12-b9}9>l%LuPRp<{aD+BWe zl(eM_D!ed_P;aAuUac=2;517^7gQD*Hnn6y*|E}uM15CI8B%B~T@kBzYXL&JkTO%x z%gnVjg(|})rL7vWqO>XClO{oG_=tmrthwN%xuvN81|&T3=qbv`Hmzj74m!dL66TmO zW6ai$b_f_#jN4UI|)$0ER|bfS4E9H-nK{Gt<=%}mNsrT&_BAS-rXHS|o&t-@crJ1s}t zq1;Qr^TWR5fW!W+aKRh!>+c_R5N4bqIsj4cQQ&BYq=9y&jGW{LR%`4as zqzz1|rljsff5ME0*_j>O!qS zv}}E_9vZ0>GD_qT2*dhq36JT-(@H8em6$~Ugc%z1$VmkwJI9Ue9L;F_4^>q5jRq(L z%cY$!NRyp1_F3{s+YXm0+hGrTAUciYaSw#@F1Y=0k6C}8vHred{oQT-eII{epHWsD z%q(P33gZ`h)l4dVECNP}mTOQ=tEr7mVUCe=gvb7u>60ehR`;DG!Pe^b_9n#<3UqZ4 zdla%75SzSX17=p3jp(jWvFaKFbxXq?&9>B+HaN&meil&4lHhD#cCX?zQ8Kziq_@{Ku<70eRu>)OTg&JM%KHf*Jbmtf+K#;m98wKU|h8^P6Z2g_io-VQavQsP~EFjA;?D z+p;ce5iO=_1pHG>h$2W2rJ7j1lap<%FtU=NY{c4OMIH7_Fq*K|u=lI%^*UI}#WiZ4 z)s2<@o&mGb(CT6ynrS^iQ!dkF^kF8tD3~+7z zzt9#1{;{?wtj1)!`IccP4U2wDUo=Ms3q}UV$^Tr!1kD1Naj{i{t-E@&U}XL1(aAzJ zB|3>}*=`Y1gt7%OHrr9EF#)Vaky7mngx0eGDJw#pN=vB`Y?13$@QvlCB-!`#g1Mg} zFOE@^4;5jezmJcmi(?}ucKaZU-NRr7>lWsvmeD=TE5p>Rg>P&AA|1md7$2sf_%J&< zJu0q65KCwIEffF+hjIYv-kB*u`Uf@Ls~~u^F3)MTbb;`Najvderl-JYa*;TN?*FaDWy| z5es;72jNrnVFENGm-!Uwwb%m&s8oAenxkt2n)L0sF;OA5{c47V;uD`XSFLKJ(oP%& zkwu6WBibLjhp8&ILsjDya`LlDS|)_dx~Uv7kO0fn_kY?=4Pmw9FkfV-%3+?%hS81PDLGkmxn%aw|~D zZ4NU_D6_B0o+rbUaEuRAgbZW-n@D^PG8HX#e1qz|*S9uceE>peYc?(F&PvN3=;S*c zwEu2_WS+?25Sh|D7_3vAo(hNBc=8Tvu(iJyi)R}WyWH1Clj9Wb@+h4gmM9-LU!?kb z#003QO##_V*tEo+WhfYyb|^or6Y4)oi#pT0e;xApU2VYE%yXJxiNi;FSa)mT7&EQ5 zRCYhNVowLX(IQDsL(&S;jWyTbYB$nq6ibhnYLS#rO~K}4E&B!YuI958F(=>;LhX-j zO-a^0JZwc?q;iZSQ3327$?!}K$p@T?ejB>ci~ zIGp&ntWQF>PvZA{lKz_?+)4Z2`r)|JAL{J-Gggcjrto$O?_xZ$?Qy5ThS}IO`?Qtq zr!Nr>{CuP|WgBiW1lH}0BplkuFWS)J?Ewr+w+$Of8J^6n>>Px)w015Ib)Y*<50o{` z@RgJSy+oa75jg2= zjSU`B0MHzSnc7eJfL-TC*fybX!hYb#fl!{gU14Kd+d@1M18WCHL0d;F4>g2WK-EMq zhRp@x*zzdE{DD78wX~yRKPZUhJlN8vP9`PR!EU)VtIp2h*o7#=Ib+T}&DeRDITus0 znvr?JvbwG<*orKXEd~oloRy_O7{@oP7KZd-k5J06naQ6VeV%%-M51B`UxKwv2< z-{&76YLN$}z^8j&SnRNv+7?=h6=rL&H9#XxpbZC;o9qMrQU|6DCe-Z1_IQ*4RgC>` zjh1JFqK)lG!m^2c%R*Q*`c)I)7!l77^IQqK6gmq@P_1@f&_~p}o9D$e-RUI;J*j;~ zv`U*`Pi#__pcT!vp(Y$vQYB*&I7b%dK@1il5SE9jc?w3%M6YTO)(0_%x8aQbGUQP! z@764c0mE3TWV4xuStOH>p29`P~I-?Q-daTKz%dA?ejMT=X`K^+N=K`Ir ztaz%btWibH4RbX}!`P>W*nl|%6FV8AH`B1v0^3KZZKaV`f1i-sEk zXfzgH7hKA%XcJPL;BboCo4{COskKCu`bq=x1aYc*lRPB}k<}tEYrv%B<3$2_dIxhy zi9}Ne_Q4!%&l>SW6F`l+P$y@QxNic-giS6=R85czG$M{UW|0M!f-o-0Am#!~)blJH zl8r;JutaOq3cK@RQsU-3PXusRh}F+s2~JkaX^29XZ}Z{sU>joeI`PGr(a_bn!-V=- zAiHW#s&s~NGN>&q7CE;!uL$^%r)yULkl!U$1Jyz&qYw;9#r1Sh6}_*f-s z&d1rYo=D#1X|+ZG29Z<_>~nl*Wz>~!Pame~1|F@FG6$VZ&(d?%0OlC=m006N%@xezBwxILkdYoY3uBwY}yZ^tSOt?rZOw_<4I87-JB>_{?(%zpr#1Cp+` zqrM(OHZ14M7~urb9+qd*Fx*>1IM>CT>VuV53aIv~Ug=nsQ5vgj%j-D4dUQuD5PEPA zH+Hnkim-bej-x?JwLpD?X~nvj(25BRbsH@YPxMO5acrP4Dnb2lZtLh%b5^XaJ=UF3kS}?rSJiQ}? zTH72O|$f9*#T`c{K7^1mG$SaXoBd}KO-X2M7qepeeO(=C9*}1=qvh({vuZl5P4#t$QOgeU@-(Xg`r}Y7%oPL zkz$lMOcaRGVvHCo#=+h&K@K->B0>Uh&f^?gShR}{u}mx%onnPpDNYtY6{m<(MYX8; zx8nayoFRTLej&~jUE(aUN}Mgu5$B5Y#Q9>ixIkPeE)o}uOT>SPOT`+oR$M05iOaQY!^GkJz}T$gSc1xQQRkXiTlL^;z99{cvw6l9u<#?$Hf!kPvS}O zlz3YFSv(`270-$1#S7v^@sfC1ydqu|uZh>i8{$pzmUvt27JI}y_`$n(#d~6(_zNCL z_&|Ip{wh8aAB#`K-^70Lck!wChxknVQ+zJI5C_CT@um1md@a5a--?I`w$zK6bEk_I z9~6?3xoER-mOL0ytUM>FzpEdVf6saOsuIz)`=}KUmX!8yNx18-?dzuh^WgCxIOk2C zQ#8nXuzdNdCCA(sKJ(3aeLHAJ9s@g&WoNR@Ot3QbVmoT73!jYM2=h`_c3<=?4_fC8 ze6K;@yWFx_;TV|uh=P`26E9{U+c;^CO<3G2PhcUiF>ApIEE_*lOq_uX^IwW6#FdP~ zaHGI~F}@D>dM!Q$Em#N2n;tTXe5U|*E52ud18VBs0>b&V&jbAsp*il0%Jpn z*`WH|3Cl!!{5;Y=Zkp2&>8?Z5jsP95a)_!V zLu|tVkg4gp;A>v$-kfwv;>A&}G-SAuwd=~zqest?0AF`fg8@ezE zw~xR+3I3wJ$SeCK(n|L<&ICYQKyNhxBx$Qp;>Cy!EiJo z1gNxhidj%HZRYqQ?1@%R9A8;FX|y?M!r>E+h#`fsBd;(MkahN{uaL$Bz@|O_8bSS@ESh}Hn@I0@Y`WkQSr5nPLrtkzjtfAw#&ui zKhDs2ZHtS?H^Ka;_-h+nJl>h7@!IYdkMECcsQB9E7LOl0SmU+5EgrvpxW;Q6TRi?K znCldOZCi`SzXOZA!fV@FJbu+!jn}rdczo%2jn{Uyc>F#JRqa=QxW=Dzn9)o7Po1Rk*8(pu^H@Ao{Dvbn{z>2~dhlO&l*Z>5 z;M{Z%{Kb!D&TvT{}UVE)hmAgG#&pI;A?vDub!dtsbdZ72Sz`t zeU6@`@fQO>EQ+?;|97)Bek<^_#p{oXKV+W9KLk7mqy16%erR&l|8@hv*v9JqbsL^U zQuxW^3~{OwNRmp$kDy5ve*FYPxFBux$KsD2HHE*n(2(}yczoq48vhXRD>V{-Rs6ad zjW711e=1gzO5qbu)A%(owEHDSeJOk%-qul(J_EjI`)z@!Re19V{2pkJ{9lA8OcZ|H zk=VCzMiWr{ug0#Q!XI;VZ}tBeilp!r!1o+qtv}cJjllb(?5*;j(53ONDF*hYqaT%i z+1VQ31U&ab^he<{&(nDE69fC)(T~D+uGV-z@av;!EBz-f)cCJ~?^%E5B^qCFOmF

f-}b9C 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�$jV$9+ANPA9V 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�Iy@g#!uhC)L)tqp6MQpC^4Xb%Nx5yz3 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 literal 0 HcmV?d00001 diff --git a/slsDetectorSoftware/jungfrauDetectorServer/mcb_funcs.c b/slsDetectorSoftware/jungfrauDetectorServer/mcb_funcs.c new file mode 100755 index 000000000..88cd7a138 --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/mcb_funcs.c @@ -0,0 +1,2649 @@ +#ifdef MCB_FUNCS + +#include +#include +#include +#include +#include +#include "registers_m.h" + +#ifndef PICASSOD +#include "server_defs.h" +#else +#include "picasso_defs.h" +#endif +#include "firmware_funcs.h" +#include "mcb_funcs.h" + + +/* global variables */ +#undef DEBUG +#undef DEBUGOUT + +extern int nModX; +//extern int dataBytes; +extern int dynamicRange; +const int nChans=NCHAN; +const int nChips=NCHIP; +const int nDacs=NDAC; +const int nAdcs=NADC; +enum detectorSettings thisSettings; + +int sChan, sChip, sMod, sDac, sAdc; +const int allSelected=-2; +const int noneSelected=-1; + + +sls_detector_module *detectorModules=NULL; +int *detectorChips=NULL; +int *detectorChans=NULL; +int *detectorDacs=NULL; +int *detectorAdcs=NULL; +//int numberOfProbes; + +ROI rois[MAX_ROIS]; +int nROI=0; + + +int initDetector() { + + int imod; + // sls_detector_module *myModule; + int n=getNModBoard(); + nModX=n; + +#ifdef VERBOSE + printf("Board is for %d modules\n",n); +#endif + detectorModules=malloc(n*sizeof(sls_detector_module)); + detectorChips=malloc(n*NCHIP*sizeof(int)); + detectorChans=malloc(n*NCHIP*NCHAN*sizeof(int)); + detectorDacs=malloc(n*NDAC*sizeof(int)); + detectorAdcs=malloc(n*NADC*sizeof(int)); +#ifdef VERBOSE + printf("modules from 0x%x to 0x%x\n",(unsigned int)(detectorModules), (unsigned int)(detectorModules+n)); + printf("chips from 0x%x to 0x%x\n",(unsigned int)(detectorChips), (unsigned int)(detectorChips+n*NCHIP)); + printf("chans from 0x%x to 0x%x\n",(unsigned int)(detectorChans), (unsigned int)(detectorChans+n*NCHIP*NCHAN)); + printf("dacs from 0x%x to 0x%x\n",(unsigned int)(detectorDacs), (unsigned int)(detectorDacs+n*NDAC)); + printf("adcs from 0x%x to 0x%x\n",(unsigned int)(detectorAdcs), (unsigned int)(detectorAdcs+n*NADC)); +#endif + for (imod=0; imoddacs=detectorDacs+imod*NDAC; + (detectorModules+imod)->adcs=detectorAdcs+imod*NADC; + (detectorModules+imod)->chipregs=detectorChips+imod*NCHIP; + (detectorModules+imod)->chanregs=detectorChans+imod*NCHIP*NCHAN; + (detectorModules+imod)->ndac=NDAC; + (detectorModules+imod)->nadc=NADC; + (detectorModules+imod)->nchip=NCHIP; + (detectorModules+imod)->nchan=NCHIP*NCHAN; + (detectorModules+imod)->module=imod; + (detectorModules+imod)->gain=0; + (detectorModules+imod)->offset=0; + (detectorModules+imod)->reg=0; + /* initialize registers, dacs, retrieve sn, adc values etc */ + } + thisSettings=UNINITIALIZED; + sChan=noneSelected; + sChip=noneSelected; + sMod=noneSelected; + sDac=noneSelected; + sAdc=noneSelected; + + /* + setCSregister(ALLMOD); //commented out by dhanya + setSSregister(ALLMOD); + counterClear(ALLMOD); + clearSSregister(ALLMOD); + putout("0000000000000000",ALLMOD); + */ + + /* initialize dynamic range etc. */ + /* dynamicRange=getDynamicRange(); //always 16 not required commented out + nModX=setNMod(-1);*/ + + //dataBytes=nModX*NCHIP*NCHAN*4; + // dynamicRange=32; + // initChip(0, 0,ALLMOD); + //nModX=n; + // + allocateRAM(); + + + return OK; +} + + + + +int copyChannel(sls_detector_channel *destChan, sls_detector_channel *srcChan) { + destChan->chan=srcChan->chan; + destChan->chip=srcChan->chip; + destChan->module=srcChan->module; + destChan->reg=srcChan->reg; + return OK; +} + + +int copyChip(sls_detector_chip *destChip, sls_detector_chip *srcChip) { + + int ichan; + int ret=OK; + if ((srcChip->nchan)>(destChip->nchan)) { + printf("Number of channels of source is larger than number of channels of destination\n"); + return FAIL; + } + + destChip->nchan=srcChip->nchan; + destChip->reg=srcChip->reg; + destChip->chip=srcChip->chip; + destChip->module=srcChip->module; + for (ichan=0; ichan<(srcChip->nchan); ichan++) { + *((destChip->chanregs)+ichan)=*((srcChip->chanregs)+ichan); + } + return ret; +} + + +int copyModule(sls_detector_module *destMod, sls_detector_module *srcMod) { + + int ichip, idac, ichan, iadc; + + int ret=OK; + +#ifdef VERBOSE + printf("Copying module %x to module %x\n",(unsigned int)(srcMod),(unsigned int)(destMod)); +#endif + + if (srcMod->module>=0) { +#ifdef VERBOSE + printf("Copying module number %d to module number %d\n",srcMod->module,destMod->module); +#endif + destMod->module=srcMod->module; + } + if (srcMod->serialnumber>=0){ +/* #ifdef VERBOSE */ +/* printf("Copying module serial number %x to module serial number %x\n",srcMod->serialnumber,destMod->serialnumber); */ +/* #endif */ + destMod->serialnumber=srcMod->serialnumber; + } + if ((srcMod->nchip)>(destMod->nchip)) { + printf("Number of chip of source is larger than number of chips of destination\n"); + return FAIL; + } + if ((srcMod->nchan)>(destMod->nchan)) { + printf("Number of channels of source is larger than number of channels of destination\n"); + return FAIL; + } + if ((srcMod->ndac)>(destMod->ndac)) { + printf("Number of dacs of source is larger than number of dacs of destination\n"); + return FAIL; + } + if ((srcMod->nadc)>(destMod->nadc)) { + printf("Number of dacs of source is larger than number of dacs of destination\n"); + return FAIL; + } + +#ifdef VERBOSE + printf("DACs: src %d, dest %d\n",srcMod->ndac,destMod->ndac); + printf("ADCs: src %d, dest %d\n",srcMod->nadc,destMod->nadc); + printf("Chips: src %d, dest %d\n",srcMod->nchip,destMod->nchip); + printf("Chans: src %d, dest %d\n",srcMod->nchan,destMod->nchan); + +#endif + + + + destMod->ndac=srcMod->ndac; + destMod->nadc=srcMod->nadc; + destMod->nchip=srcMod->nchip; + destMod->nchan=srcMod->nchan; + if (srcMod->reg>=0) + destMod->reg=srcMod->reg; +#ifdef VERBOSE + printf("Copying register %x (%x)\n",destMod->reg,srcMod->reg ); +#endif + if (srcMod->gain>=0) + destMod->gain=srcMod->gain; + if (srcMod->offset>=0) + destMod->offset=srcMod->offset; + + // printf("copying gain and offset %f %f to %f %f\n",srcMod->gain,srcMod->offset,destMod->gain,destMod->offset); + + for (ichip=0; ichip<(srcMod->nchip); ichip++) { + if (*((srcMod->chipregs)+ichip)>=0) + *((destMod->chipregs)+ichip)=*((srcMod->chipregs)+ichip); + } + for (ichan=0; ichan<(srcMod->nchan); ichan++) { + if (*((srcMod->chanregs)+ichan)>=0) + *((destMod->chanregs)+ichan)=*((srcMod->chanregs)+ichan); + } + for (idac=0; idac<(srcMod->ndac); idac++) { + if (*((srcMod->dacs)+idac)>=0) + *((destMod->dacs)+idac)=*((srcMod->dacs)+idac); + } + for (iadc=0; iadc<(srcMod->nadc); iadc++) { + if (*((srcMod->adcs)+iadc)>=0) + *((destMod->adcs)+iadc)=*((srcMod->adcs)+iadc); + } + return ret; +} + + + +/* Register commands */ + + +int clearDACSregister(int imod) { + + putout("1111111111111111",imod);//reset + putout("1111111111111110",imod);//cs down + + /* commented out by dhanya + putout("0000000001000000",imod); + putout("0000000101000000",imod); + putout("0000000101000000",imod); + putout("0000000001000000",imod); + */ +#ifdef DEBUG + fprintf(stdout, "Clearing DAC shiftregister\n"); +#endif + // sDac=0; + sMod=imod; + if (imod==ALLMOD) + sMod=allSelected; + return OK; +} + +int nextDAC(int imod) { + + putout("1111111111111011",imod);//cs up + putout("1111111111111001",imod);//clk down + putout("1111111111111111",imod);//reset + + /*commented out by dhanya + putout("0000000001000000",imod); + putout("0000000001001000",imod); + putout("0000000001000000",imod); + */ +#ifdef DEBUG + fprintf(stdout, "Next DAC\n"); +#endif + // sDac++; + sMod=imod; + if (imod==ALLMOD) + sMod=allSelected; + return OK; +} + + +int clearCSregister(int imod) { + + putout("0000000001000000",imod); + putout("0000100001000000",imod); + putout("0000100001000000",imod); + putout("0000000001000000",imod); +#ifdef DEBUG + fprintf(stdout, "Clearing CS shiftregister\n"); +#endif + /* + sChan=noneSelected; + sMod=noneSelected; + sDac=noneSelected; + sAdc=noneSelected; + */ + sChip=noneSelected; + sMod=imod; + if (imod==ALLMOD) + sMod=allSelected; + //putout("0000000000000000",imod); + return 0; +} + +int setCSregister(int imod){ + + putout("0000000001000000",imod); + putout("0001000001000000",imod); + putout("0001000001000000",imod); + putout("0000000001000000",imod); +#ifdef DEBUG + fprintf(stdout, "Setting CS shiftregister\n"); +#endif + putout("0000000000000000",imod); + sChip=allSelected; + sMod=imod; + if (imod==ALLMOD) + sMod=allSelected; + return 0; +} + +int nextChip(int imod){ + + putout("0000000001000000",imod); + putout("0010000001000000",imod); + putout("0000000001000000",imod); +#ifdef DEBUG + fprintf(stdout, "Next Chip\n"); +#endif + sChip++; + sMod=imod; + if (imod==ALLMOD) + sMod=allSelected; + return 0; +} + +int firstChip(int imod){ + + putout("0100000001000000",imod); + putout("0110000001000000",imod); + putout("0100000001000000",imod); +#ifdef DEBUG + fprintf(stdout, "First Chip\n"); +#endif + sChip=0; + sMod=imod; + if (imod==ALLMOD) + sMod=allSelected; + return 0; +} + +int clearSSregister(int imod){ + int i; + putout("0000011000000000",imod); + for (i=0; i<10; i++) + putout("0000111000000000",imod); + putout("0000011000000000",imod); +#ifdef DEBUG + fprintf(stdout,"Clearing SS shiftregister\n"); +#endif + putout("0000000000000000",imod); + sChan=noneSelected; + sMod=imod; + if (imod==ALLMOD) + sMod=allSelected; + return 0; +} + +int setSSregister(int imod){ + int i; + putout("0000011000000000",imod); + for (i=0; i<10; i++) + putout("0001011000000000",imod); + putout("0000011000000000",imod); +#ifdef DEBUG + fprintf(stdout,"Setting SS shiftregister\n"); +#endif + putout("0000000000000000",imod); + sChan=allSelected; + sMod=imod; + if (imod==ALLMOD) + sMod=allSelected; + return 0; +} + +int nextStrip(int imod){ + putout("0000011000000000",imod); + putout("0010011000000000",imod); + putout("0000011000000000",imod); +#ifdef DEBUG + fprintf(stdout,"|-"); +#endif + sChan++; + sMod=imod; + if (imod==ALLMOD) + sMod=allSelected; + return 0; +} + +int selChannel(const int strip,int imod) { + int istrip; + clearSSregister(imod); + nextStrip(imod); + for (istrip=0; istrip=0 && imod=0) + initDAC(ind,val, imod); + + if (imod>=0 && imodgain,(detectorModules+imod)->offset); +#endif + if ((detectorModules+imod)->gain>0) + myg=(detectorModules+imod)->gain; + else { + if (thisSettings>=0 && thisSettings<3) + myg=g[thisSettings]; + // else + //myg=-1; + } + + if ((detectorModules+imod)->offset>0) + myo=(detectorModules+imod)->offset; + else { + if (thisSettings>=0 && thisSettings<3) + myo=o[thisSettings]; + // else + //myo=-1; + } + + if (myg>0 && myo>0) { + //ethr=(myo-detectorDacs[VTHRESH+imod*NDAC])*1000/myg; + + ethr=(myo-setDACRegister(VDAC0,-1,imod))*1000/myg;//edited by dhanya + // else + // ethr=-1; + + } +#ifdef VERBOSE + //printf("module=%d gain=%f, offset=%f, dacu=%f\n",imod, myg, myo, detectorDacs[VTHRESH+imod*NDAC]); + printf("module=%d gain=%f, offset=%f, dacu=%d\n",imod, myg, myo,(int)(setDACRegister(VDAC0,-1,imod)));//edited by dhanya + printf("Threshold energy of module %d is %d eV\n", imod, ethr); +#endif + + if (imod==0) + ret=ethr; + else { + if (ethr>(ret+100) || ethr<(ret-100)) + return FAIL; + } + } + } + return ret; +} + +int setThresholdEnergy(int ethr) { + double g[3]=DEFAULTGAIN; + double o[3]=DEFAULTOFFSET; + double myg=-1, myo=-1; + int dacu; + int imod; + int ret=ethr; + + setSettings(GET_SETTINGS,-1);//-1 added by dhanya + if (thisSettings>=0 || thisSettings<3){ + myg=g[thisSettings]; + myo=o[thisSettings]; + } + for (imod=0; imodgain>0) + myg=(detectorModules+imod)->gain; + else + if (thisSettings>=0 && thisSettings<3) + myg=g[thisSettings]; + else + myg=-1; + if ((detectorModules+imod)->offset>0) + myo=(detectorModules+imod)->offset; + else + if (thisSettings>=0 && thisSettings<3) + myo=o[thisSettings]; + else + myo=-1; + } else { + if (thisSettings>=0 && thisSettings<3) + myo=o[thisSettings]; + else + myo=-1; + if (thisSettings>=0 && thisSettings<3) + myg=g[thisSettings]; + else + myg=-1; + } + if (myg>0 && myo>0) { + dacu=myo-myg*((double)ethr)/1000.; +#ifdef VERBOSE + printf("module %d (%x): gain %f, off %f, energy %d eV, dac %d\n",imod,(unsigned int)((detectorModules+imod)),(detectorModules+imod)->gain,(detectorModules+imod)->offset, ethr,dacu); +#endif + } else { + dacu=ethr; +#ifdef VERBOSE + printf("could not set threshold energy for module %d, settings %d (offset is %f; gain is %f)\n",imod,thisSettings,myo,myg); +#endif + } + initDACbyIndexDACU(VDAC0, dacu, imod); ///needs to be fixed dhanya + } + return ret; +} + + + +int getDACbyIndexDACU(int ind, int imod) { + /* + if (detectorDacs) { + if (imodndac) + return (detectorDacs[ind+imod*NDAC]); + } + return FAIL; + */ + return setDACRegister(ind, -1, imod); +} + + +int initDAC(int dac_addr, int value, int imod) { +// int i; +#ifdef VERBOSE + printf("Programming dac %d with value %d\n", dac_addr, value); +#endif + clearDACSregister(imod); + program_one_dac(dac_addr,value,imod); + nextDAC(imod); + clearDACSregister(imod); + + return 0; +} + +int getTemperatureByModule(int tempSensor, int imod) +{ + int im; + //for the particular module + if (imod>=0 && imod=0 && imod=0 && imod=0) { +#ifdef VERBOSE + fprintf(stdout, "voltage %d\n", *(v+iaddr)); +#endif + program_one_dac(iaddr, *(v+iaddr),imod); + } + nextDAC(imod); + } + + + clearDACSregister(imod); + + return 0; + +} + + + + +int setSettings(int i, int imod) { +#ifdef VERBOSE + if(i==-1) + printf("\nReading settings of detector...\n"); + else + printf("\ninside set settings wit settings=%d...\n",i); +#endif + int confgain[] = CONF_GAIN; + int isett=-2,retval; + + //reading settings + if(i==GET_SETTINGS){ + retval=initConfGainByModule(i,i,imod); + if(retval==i) + isett=UNDEFINED; + } + //writing settings + else{ + retval=initConfGainByModule(i,confgain[i],imod); + if(retval!=i) + isett=UNDEFINED; + } + //if error while read/writing + if(isett==UNDEFINED) + printf("Error:Weird Value read back from the Gain/Settings Reg\n"); + else{ + //validating the settings read back + if((retval>=HIGHGAIN)&&(retval<=VERYHIGHGAIN)) + isett=retval; + else{ + isett=UNDEFINED; + printf("Error:Wrong Settings Read out:%d\n",retval); + } + } + thisSettings=isett; +#ifdef VERBOSE + printf("detector settings are %d\n",thisSettings); +#endif + return thisSettings; +} + + + + +/* Initialization*/ + +int initChannelbyNumber(sls_detector_channel myChan) { + int reg=myChan.reg; + int ft=reg & TRIM_DR; + int cae=(reg>>(NTRIMBITS))&1; + int ae=(reg>>(NTRIMBITS+1))&1; + int coe=(reg>>(NTRIMBITS+2))&1; + int ocoe=(reg>>(NTRIMBITS+3))&1; + int counts=(reg>>(NTRIMBITS+4)); +#ifdef VERBOSE + printf("Initializing channel %d chip %d module %d reg %x\n",myChan.chan,myChan.chip,myChan.module, reg); + printf("trim %d, cae %d, ae %d, coe %d, ocoe %d, counts %d\n",ft, cae, ae, coe, ocoe, counts); +#endif + + if (myChan.chip<0) + setCSregister(myChan.module); + else + selChip(myChan.chip,myChan.module); + + if (myChan.chan<0) + setSSregister(myChan.module); + else + selChannel(myChan.chan,myChan.module); + + initChannel(ft,cae,ae, coe, ocoe, counts,myChan.module); + + setDynamicRange(dynamicRange); + + setCSregister(ALLMOD); + clearSSregister(ALLMOD); + putout("0000000000000000",ALLMOD); + + return myChan.reg; + +} + +int getChannelbyNumber(sls_detector_channel* myChan) { + int imod, ichip, ichan; + imod=myChan->module; + ichip=myChan->chip; + ichan=myChan->chan; + + if (detectorChans) { + if (imod=0) { + if (ichip<(detectorModules+imod)->nchip && ichan<(detectorModules+imod)->nchan/(detectorModules+imod)->nchip) + myChan->reg=detectorChans[imod*NCHAN*NCHIP+ichip*NCHAN+ichan]; + return OK; + } + } + return FAIL; + +} + +int getTrimbit(int imod, int ichip, int ichan) { + if (detectorChans) { + if (imod=0) + if (ichip<(detectorModules+imod)->nchip && ichan<(detectorModules+imod)->nchan/(detectorModules+imod)->nchip) + return (detectorChans[imod*NCHAN*NCHIP+ichip*NCHAN+ichan] & TRIM_DR); + } + + return -1; +} + +int initChannel(int ft,int cae, int ae, int coe, int ocoe, int counts, int imod){ + + int ibit, bit, i, im, ichip, ichan; + int chanmi, chanma, chipmi, chipma, modmi, modma; + + + + sMod=imod; + // printf("initializing module %d\n",sMod); + if (imod==ALLMOD) { + sMod=allSelected; + + // printf("initializing all modules\n"); + } + + if (sChan==allSelected) { + // printf("initializing all channels ft=%d coe=%d\n",ft,coe); + chanmi=0; + chanma=NCHAN; + } else if (sChan==noneSelected || sChan>NCHAN || sChan<0) { + // printf("initializing no channels ft=%d coe=%d\n",ft,coe); + chanmi=0; + chanma=-1; + } else { + // printf("initializing channel %d ft=%d coe=%d\n",sChan, ft,coe); + chanmi=sChan; + chanma=sChan+1; + } + + if (sChip==allSelected) { + // printf("initializing all chips\n"); + chipmi=0; + chipma=NCHIP; + } else if (sChip==noneSelected || sChip>NCHIP || sChip<0) { + // printf("initializing no chips\n"); + chipmi=0; + chipma=-1; + } else { + // printf("initializing chip %d\n",sChip); + chipmi=sChip; + chipma=sChip+1; + } + + + if (sMod==allSelected) { + modmi=0; + modma=nModX;//getNModBoard(); + } else if (sMod==noneSelected || sMod>nModX || sMod<0) {//(sMod==noneSelected || sMod>getNModBoard() || sMod<0) { + modmi=0; + modma=-1; + return 1; + } else { + modmi=sMod; + modma=sMod+1; + } + + if (detectorChans) { + for (im=modmi; im63 || ft<0) { + fprintf(stdout,"Fine Threshold is %d while should be between 0 and 63!",ft); + return 1; + } + /*cal_enable*/ + if (cae) { + putout("0100000000000000",imod); + putout("0110000000000000",imod); + } else { + putout("0000000000000000",imod); + putout("0010000000000000",imod); + } + /*n_an_enable*/ + if (ae) { + putout("0000000000000000",imod); + putout("0010000000000000",imod); + putout("0000000000000000",imod); + } else { + putout("0100000000000000",imod); + putout("0110000000000000",imod); + putout("0100000000000000",imod); + } + /*trb5*/ + ibit=5; + bit=ft & (1<>1; + int nchan, ichan; + int ft, cae, ae, coe, ocoe, counts, chanreg; + + + + nchan=myChip.nchan; + if (ichip<0) + setCSregister(imod); + else + selChip(ichip,imod); + + clearSSregister(imod); + for (ichan=0; ichan>(NTRIMBITS+1))&1; + ae=(chanreg>>(NTRIMBITS+2))&1; + coe=((chanreg)>>(NTRIMBITS+3))&1; + ocoe=((chanreg)>>(NTRIMBITS+4))&1; + counts=((chanreg)>>(NTRIMBITS+5)); + nextStrip(imod); + initChannel(ft,cae,ae, coe, ocoe, counts,imod); + } + initChip(obe,ow,imod); + return myChip.reg; + +} + +int getChipbyNumber(sls_detector_chip* myChip){ + int imod, ichip; + imod=myChip->module; + ichip=myChip->chip; + + if (detectorChips) { + if (imodnchip) { + myChip->reg=detectorChips[ichip+imod*NCHIP]; + myChip->nchan=NCHAN; + myChip->chanregs=detectorChans+imod*NCHAN*NCHIP+ichip*NCHIP; + return OK; + } + } + return FAIL; + +} + + + +int initChip(int obe, int ow,int imod){ + int i; + int im, ichip; + int chipmi, chipma, modmi, modma; + /* switch (ow) { + case 0:; + case 1: + setDynamicRange(32); + break; + case 2: + setDynamicRange(16); + break; + case 3: + setDynamicRange(8); + break; + case 4: + setDynamicRange(4); + break; + case 5: + setDynamicRange(1); + break; + default: + setDynamicRange(32); + break; + } + */ + +#ifdef DEBUGOUT + printf("Initializing chip\n"); +#endif + putout("0000000000000000",imod); +#ifdef DEBUGOUT + printf("Output mode= %d\n", ow); +#endif + + /* clearing shift in register */ + for (i=0; i<10; i++) + putout("0000100000000000",imod); + putout("0000000000000000",imod); + + if (ow>0) { + putout("0100000000000000",imod); + putout("0110000000000000",imod); + putout("0100000000000000",imod); + for (i=0; i<(OUTMUX_OFFSET-1); i++) { + putout("0000000000000000",imod); + putout("0010000000000000",imod); + putout("0000000000000000",imod); + } + if (ow>1) { + putout("0000000000000000",imod); + putout("0010000000000000",imod); + putout("0000000000000000",imod); + } + if (ow>2) { + putout("0000000000000000",imod); + putout("0010000000000000",imod); + putout("0000000000000000",imod); + } + if (ow>3) { + putout("0000000000000000",imod); + putout("0010000000000000",imod); + putout("0000000000000000",imod); + } + if (ow>4) { + putout("0000000000000000",imod); + putout("0010000000000000",imod); + putout("0000000000000000",imod); + } + } +#ifdef DEBUGOUT + printf("Output buffer enable= %d\n", obe); +#endif + if (obe) { + putout("0100000000000000",imod); + putout("0110000000000000",imod); + putout("0100000000000000",imod); + } else { + putout("0000000000000000",imod); + putout("0010000000000000",imod); + putout("0000000000000000",imod); + } + /*}*/ + putout("0000000000000000",imod); + + + + + + sMod=imod; + if (imod==ALLMOD) + sMod=allSelected; + + + if (sChip==allSelected) { + chipmi=0; + chipma=NCHIP; + } else if (sChip==noneSelected || sChip>NCHIP || sChip<0) { + chipmi=0; + chipma=-1; + } else { + chipmi=sChip; + chipma=sChip+1; + } + + + if (sMod==allSelected) { + modmi=0; + modma=nModX;//getNModBoard(); + } else if (sMod==noneSelected || sMod>nModX || sMod<0) {//(sMod==noneSelected || sMod>getNModBoard() || sMod<0) { + modmi=0; + modma=-1; + } else { + modmi=sMod; + modma=sMod+1; + } + + if (detectorChips) { + for (im=modmi; imNCHIP || sChip<0) { + chipmi=0; + chipma=-1; + } else { + chipmi=sChip; + chipma=sChip+1; + } + + + if (sMod==allSelected) { + modmi=0; + modma=nModX;//getNModBoard(); + } else if (sMod==noneSelected || sMod>nModX || sMod<0) {//(sMod==noneSelected || sMod>getNModBoard() || sMod<0) { + modmi=0; + modma=-1; + } else { + modmi=sMod; + modma=sMod+1; + } + + if (detectorChips) { + for (im=modmi; imnModX || sMod<0) {//(sMod==noneSelected || sMod>getNModBoard() || sMod<0) { + modmi=0; + modma=-1; + } else { + modmi=sMod; + modma=sMod+1; + } + + if (detectorModules) { + for (im=modmi; imreg)=cm; +#ifdef VERBOSE + printf("imod=%d reg=%d (%x)\n",im,(detectorModules+im)->reg,(unsigned int)((detectorModules+im))); +#endif + } + } + return 0; +} + +int initModulebyNumber(sls_detector_module myMod) { + + printf("\ninside initmoduleynumber..\n"); + + int nchip,nchan;//int ichip, nchip, ichan, nchan; + int im, modmi,modma; + // int ft, cae, ae, coe, ocoe, counts, chanreg; + int imod; + // int obe; + // int ow; + int v[NDAC]; + + + nchip=myMod.nchip; + nchan=(myMod.nchan)/nchip; + + imod=myMod.module; + sMod=imod; + + if (sMod==ALLMOD) + sMod=allSelected; + + if (sMod==allSelected) { + modmi=0; + modma=nModX;//getNModBoard(); + } else if (sMod==noneSelected || sMod>nModX || sMod<0) {// (sMod==noneSelected || sMod>getNModBoard() || sMod<0) { + modmi=0; + modma=-1; + } else { + modmi=sMod; + modma=sMod+1; + } + + + /* + for (idac=0; idacmodule; +#ifdef VERBOSE + printf("Getting module %d\n",imod); +#endif + if (detectorModules) { + copyModule(myMod,detectorModules+imod); + ; + } else + return FAIL; + + return OK; +} + +/* To chips */ +int clearCounter(int imod){ + int i; +#ifdef DEBUG + printf("Clearing counter with contclear\n"); +#endif + putout("0000000000000000",imod); + for (i=0; i<10; i++) + putout("0000000000010000",imod); + putout("0000000000000000",imod); + + return 0; +} + +int clearOutReg(int imod){ + int i; +#ifdef DEBUG + printf("Clearing output register\n"); +#endif + putout("0000010000000000",imod); + for (i=0; i<10; i++) + putout("0000110000000000",imod); + putout("0000010000000000",imod); + return 0; +} +int setOutReg(int imod){ + int i; +#ifdef DEBUG + printf("Setting output register\n"); +#endif + putout("0000010000000000",imod); + for (i=0; i<10; i++) + putout("0001010000000000",imod); + putout("0000010000000000",imod); + return 0; +} + + +int extPulse(int ncal, int imod) { + int ical; +#ifdef DEBUG + printf("Giving a clock pulse to the counter\n"); +#endif + for (ical=0; ical0 && i%2==0) { + printf("Shift in: module %d chip %i bit %d read %d instead of %d \n",k,j,i,val & 1<< j, i%2); + result++; + } + if (i%2>0 && (val & 1<0 && (dum & (1<0) { + printf("Shift out: module %d chip %i bit %d read %d instead of %d \n",k,j,i,val & 1<< j, (dum &1<0 && i%2==0) { + printf("Shift stsel: module %d chip %i bit %d read %d instead of %d \n",k,j,i,val & 1<< j, i%2); + result++; + } + if (i%2>0 && (val & 1<> 1; + + + putout("0000000000000000",ALLMOD); + putout("0010000000000000",ALLMOD); //change mux setting + putout("0000000000000000",ALLMOD); + } + + printf("Test FpgaMux module %d : %d errors\n", imod,result); + if (result) + return 1; + else + return 0; +} + + + + + + + + + +int calibration_sensor(int num, int *v, int *dacs) { + int ich, ichip, imod; + int val[10]; + + + printf("calibrating sensor..."); + for (imod=0; imod=0){ + + //clear rois + for(i=0;i=0) && (adc<=4)); + else { + printf("warning:adc value greater than 5. deleting roi\n"); + adc=-1; + } + } + } + + + //set rois for just 1 adc - take only 1st roi + if(adc!=-1){ + rois[0].xmin=adc*(GOTTHARDNCHAN*NCHIPS_PER_ADC); + rois[0].xmax=(adc+1)*(GOTTHARDNCHAN*NCHIPS_PER_ADC)-1; + rois[0].ymin=-1; + rois[0].ymax=-1; + nROI = 1; + }else + nROI = 0; + + if((arg[0].xmin!=rois[0].xmin)||(arg[0].xmax!=rois[0].xmax)||(arg[0].ymin!=rois[0].ymin)||(arg[0].ymax!=rois[0].ymax)) + *ret=FAIL; + if(n!=nROI) + *ret=FAIL; + + //set adc of interest + setADC(adc); + } + +//#ifdef VERBOSE + printf("Rois:\n"); + for( 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 Nk5l4rl$-I|{{$6L%BKJT literal 0 HcmV?d00001 diff --git a/slsDetectorSoftware/jungfrauDetectorServer/registers_m.h b/slsDetectorSoftware/jungfrauDetectorServer/registers_m.h new file mode 100755 index 000000000..d0f5f762a --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/registers_m.h @@ -0,0 +1,464 @@ +#ifndef REGISTERS_G_H +#define REGISTERS_G_H + + +#include "sls_detector_defs.h" + + +/* Definitions for FPGA*/ +#define CSP0 0x20200000 +#define MEM_SIZE 0x100000 + + + +/* values defined for FPGA */ +#define MCSNUM 0x0 +#define FIXED_PATT_VAL 0xacdc1980 + + +#define FPGA_INIT_PAT 0x60008 +#define FPGA_INIT_ADDR 0xb0000000 + + + + +/* constant FPGAVersionReg_c : integer:= 0; */ +/* constant FixedPatternReg_c : integer:= 1; */ +/* constant StatusReg_c : integer:= 2; */ +/* constant LookAtMeReg_c : integer:= 3; */ +/* constant SystemStatusReg_c : integer:= 4; */ + +/* constant PLL_ParamOutReg_c : integer:=5; -- RO register to check control signals going to the chip */ + + +/* --time registers use only even numbers! */ +/* constant TimeFromStartReg_c : integer:= 16; */ +/* --constant TimeFromStartReg_c : integer:= 17; MSB */ +/* constant GetDelayReg_c : integer:= 18; */ +/* --constant GetDelayReg_c : integer:= 19; MSB */ +/* constant GetCyclesReg_c : integer:= 20; */ +/* --constant GetTrainsReg_c : integer:= 21; MSB */ +/* constant GetFramesReg_c : integer:= 22; */ +/* --constant GetFramesReg_c : integer:= 23; MSB */ +/* constant GetPeriodReg_c : integer:= 24; */ +/* --constant GetPeriodReg_c : integer:= 25; MSB */ +/* constant GetExpTimeReg_c : integer:= 26; */ +/* --constant GetExpTimeReg_c : integer:= 27; MSB */ +/* constant GetGatesReg_c : integer:= 28; */ +/* --constant GetGatesReg_c : integer:= 29; MSB */ + + + + + +/* -----rw: */ + +/* constant DACReg_c : integer:= 64; */ +/* constant ADCWriteReg_c : integer:= 65; */ +/* constant ADCsyncReg_c : integer:= 66; */ +/* constant HVReg_c : integer:= 67; */ +/* constant DummyReg_c : integer:= 68; */ + +/* constant rx_udpip_AReg_c : integer:= 69; */ +/* constant udpports_AReg_c : integer:= 70; */ +/* constant rx_udpmacL_AReg_c : integer:= 71; */ +/* constant rx_udpmacH_AReg_c : integer:= 72; */ +/* constant detectormacL_AReg_c : integer:= 73; */ +/* constant detectormacH_AReg_c : integer:= 74; */ +/* constant detectorip_AReg_c : integer:= 75; */ +/* constant ipchksum_AReg_c : integer:= 76; */ + +/* constant ConfigReg_c : integer:= 77; */ +/* constant ExtSignalReg_c : integer:= 78; */ +/* constant ControlReg_c : integer:= 79; */ + + + +/* constant PLL_ParamReg_c : integer:= 80; */ +/* constant PLL_CntrlReg_c : integer:=81; */ + + + + +/* --time registers use only even numbers! */ +/* -- DELAY_AFTER_TRIGGER, */ +/* constant SetDelayReg_c : integer:= 96; */ +/* --constant SetDelayReg_c : integer:= 97; MSB */ +/* -- CYCLES_NUMBER, */ +/* constant SetCyclesReg_c : integer:= 98; */ +/* --constant SetCyclesReg_c : integer:= 99;MSB */ +/* -- FRAME_NUMBER, */ +/* constant SetFramesReg_c : integer:= 100; */ +/* --constant SetFramesReg_c : integer:= 101; MSB */ +/* -- FRAME_PERIOD, */ +/* constant SetPeriodReg_c : integer:= 102; */ +/* --constant SetPeriodReg_c : integer:= 103; MSB */ +/* -- ACQUISITION_TIME, */ +/* constant SetExpTimeReg_c : integer:= 104; */ +/* --constant SetExpTimeReg_c : integer:= 105; MSB */ +/* -- GATES_NUMBER, */ +/* constant SetGatesReg_c : integer:= 106; */ +/* --constant SetGatesReg_c : integer:= 107; MSB */ + + +/* registers defined in FPGA */ +#define PCB_REV_REG 0x2c<<11 +#define GAIN_REG 0x10<<11 +//#define FLOW_CONTROL_REG 0x11<<11 +//#define FLOW_STATUS_REG 0x12<<11 +//#define FRAME_REG 0x13<<11 +#define MULTI_PURPOSE_REG 0x14<<11 +#define DAQ_REG 0x15<<11 +//#define TIME_FROM_START_REG 0x16<<11 +#define DAC_REG 64<<11//0x17<<11// control the dacs +//ADC +#define ADC_WRITE_REG 65<<11//0x18<<11 +#define ADC_SYNC_REG 66<<11//0x19<<11 +//#define MUTIME_REG 0x1a<<11 +//temperature +#define TEMP_IN_REG 0x1b<<11 +#define TEMP_OUT_REG 0x1c<<11 +//configure MAC +#define TSE_CONF_REG 0x1d<<11 +#define ENET_CONF_REG 0x1e<<11 +//#define WRTSE_SHAD_REG 0x1f<<11 +//HV +#define HV_REG 67<<11//0x20<<11 + + +#define DUMMY_REG 68<<11//0x21<<11 +#define FPGA_VERSION_REG 0<<11 //0x22<<11 +#define FIX_PATT_REG 1<<11 //0x23<<11 +#define CONTROL_REG 79<<11//0x24<<11 +#define STATUS_REG 2<<11 //0x25<<11 +#define CONFIG_REG 77<<11//0x26<<11 +#define EXT_SIGNAL_REG 78<<11// 0x27<<11 +#define FPGA_SVN_REG 0x29<<11 + + +#define CHIP_OF_INTRST_REG 0x2A<<11 + +//FIFO +#define LOOK_AT_ME_REG 3<<11 //0x28<<11 +#define SYSTEM_STATUS_REG 4<<11 + +#define FIFO_DATA_REG_OFF 0x50<<11 /////// + + +//to read back dac registers +#define MOD_DACS1_REG 0x65<<11 +#define MOD_DACS2_REG 0x66<<11 +#define MOD_DACS3_REG 0x67<<11 + +//user entered + + + + + +#define GET_ACTUAL_TIME_LSB_REG 16<<11 +#define GET_ACTUAL_TIME_MSB_REG 17<<11 + + +#define SET_DELAY_LSB_REG 96<<11 //0x68<<11 +#define SET_DELAY_MSB_REG 97<<11 //0x69<<11 +#define GET_DELAY_LSB_REG 18<<11//0x6a<<11 +#define GET_DELAY_MSB_REG 19<<11//0x6b<<11 + +#define SET_CYCLES_LSB_REG 98<<11//0x6c<<11 +#define SET_CYCLES_MSB_REG 99<<11//0x6d<<11 +#define GET_CYCLES_LSB_REG 20<<11//0x6e<<11 +#define GET_CYCLES_MSB_REG 21<<11//0x6f<<11 + +#define SET_FRAMES_LSB_REG 100<<11//0x70<<11 +#define SET_FRAMES_MSB_REG 101<<11//0x71<<11 +#define GET_FRAMES_LSB_REG 22<<11//0x72<<11 +#define GET_FRAMES_MSB_REG 23<<11//0x73<<11 + +#define SET_PERIOD_LSB_REG 102<<11//0x74<<11 +#define SET_PERIOD_MSB_REG 103<<11//0x75<<11 +#define GET_PERIOD_LSB_REG 24<<11//0x76<<11 +#define GET_PERIOD_MSB_REG 25<<11//0x77<<11 + +#define SET_EXPTIME_LSB_REG 104<<11//0x78<<11 +#define SET_EXPTIME_MSB_REG 105<<11//0x79<<11 +#define GET_EXPTIME_LSB_REG 26<<11//0x7a<<11 +#define GET_EXPTIME_MSB_REG 27<<11//0x7b<<11 + +#define SET_GATES_LSB_REG 106<<11//0x7c<<11 +#define SET_GATES_MSB_REG 107<<11//0x7d<<11 +#define GET_GATES_LSB_REG 28<<11//0x7e<<11 +#define GET_GATES_MSB_REG 29<<11//0x7f<<11 + + + + + +#define PLL_PARAM_REG 80<<11//0x37<<11 +#define PLL_PARAM_OUT_REG 5<<11 //0x38<<11 +#define PLL_CNTRL_REG 81<<11//0x34<<11 + + + + +#define RX_UDP_AREG 69<<11 //rx_udpip_AReg_c : integer:= 69; */ +#define UDPPORTS_AREG 70<<11// udpports_AReg_c : integer:= 70; */ +#define RX_UDPMACL_AREG 71<<11//rx_udpmacL_AReg_c : integer:= 71; */ +#define RX_UDPMACH_AREG 72<<11//rx_udpmacH_AReg_c : integer:= 72; */ +#define DETECTORMACL_AREG 73<<11//detectormacL_AReg_c : integer:= 73; */ +#define DETECTORMACH_AREG 74<<11//detectormacH_AReg_c : integer:= 74; */ +#define DETECTORIP_AREG 75<<11//detectorip_AReg_c : integer:= 75; */ +#define IPCHKSUM_AREG 76<<11//ipchksum_AReg_c : integer:= 76; */ + + + + + + + + + + + + + + +#define ROI_REG 0x35<<11 +#define OVERSAMPLING_REG 0x36<<11 +#define MOENCH_CNTR_REG 0x31<<11 +#define MOENCH_CNTR_OUT_REG 0x33<<11 +#define MOENCH_CNTR_CONF_REG 0x32<<11 + + + +//image +#define DARK_IMAGE_REG 0x81<<11 +#define GAIN_IMAGE_REG 0x82<<11 + +//counter block memory +#define COUNTER_MEMORY_REG 0x85<<11 + + +#define GET_MEASUREMENT_TIME_LSB_REG 0x023000 +#define GET_MEASUREMENT_TIME_MSB_REG 0x024000 + +//#define GET_ACTUAL_TIME_LSB_REG 0x025000 +//#define GET_ACTUAL_TIME_MSB_REG 0x026000 + + +//not used +//#define MCB_DOUT_REG_OFF 0x200000 +//#define FIFO_CNTRL_REG_OFF 0x300000 +//#define FIFO_COUNTR_REG_OFF 0x400000 +//not used so far +//#define SPEED_REG 0x006000 +//#define SET_NBITS_REG 0x008000 +//not used +//#define GET_SHIFT_IN_REG 0x022000 + + + +#define SHIFTMOD 2 +#define SHIFTFIFO 9 + +/** for PCB_REV_REG */ +#define DETECTOR_TYPE_MASK 0xF0000 +#define DETECTOR_TYPE_OFFSET 16 +#define BOARD_REVISION_MASK 0xFFFF +#define MOENCH_MODULE 2 + + + + +/* for control register */ +#define START_ACQ_BIT 0x00000001 +#define STOP_ACQ_BIT 0x00000002 +#define START_FIFOTEST_BIT 0x00000004 // ????? +#define STOP_FIFOTEST_BIT 0x00000008 // ?????? +#define START_READOUT_BIT 0x00000010 +#define STOP_READOUT_BIT 0x00000020 +#define START_EXPOSURE_BIT 0x00000040 +#define STOP_EXPOSURE_BIT 0x00000080 +#define START_TRAIN_BIT 0x00000100 +#define STOP_TRAIN_BIT 0x00000200 +#define SYNC_RESET 0x00000400 + +/* for status register */ +#define RUN_BUSY_BIT 0x00000001 +#define READOUT_BUSY_BIT 0x00000002 +#define FIFOTEST_BUSY_BIT 0x00000004 //???? +#define WAITING_FOR_TRIGGER_BIT 0x00000008 +#define DELAYBEFORE_BIT 0x00000010 +#define DELAYAFTER_BIT 0x00000020 +#define EXPOSING_BIT 0x00000040 +#define COUNT_ENABLE_BIT 0x00000080 +#define READSTATE_0_BIT 0x00000100 +#define READSTATE_1_BIT 0x00000200 +#define READSTATE_2_BIT 0x00000400 + +#define RUNSTATE_0_BIT 0x00001000 +#define RUNSTATE_1_BIT 0x00002000 +#define RUNSTATE_2_BIT 0x00004000 +#define SOME_FIFO_FULL_BIT 0x00008000 // error! +#define ALL_FIFO_EMPTY_BIT 0x00010000 // data ready +#define RUNMACHINE_BUSY_BIT 0x00020000 +#define READMACHINE_BUSY_BIT 0x00040000 + + + +/* for fifo status register */ +#define FIFO_ENABLED_BIT 0x80000000 +#define FIFO_DISABLED_BIT 0x01000000 +#define FIFO_ERROR_BIT 0x08000000 +#define FIFO_EMPTY_BIT 0x04000000 +#define FIFO_DATA_READY_BIT 0x02000000 +#define FIFO_COUNTER_MASK 0x000001ff +#define FIFO_NM_MASK 0x00e00000 +#define FIFO_NM_OFF 21 +#define FIFO_NC_MASK 0x001ffe00 +#define FIFO_NC_OFF 9 + +/* for config register *///not really used yet +#define TOT_ENABLE_BIT 0x00000002 +#define TIMED_GATE_BIT 0x00000004 +#define CONT_RO_ENABLE_BIT 0x00080000 +#define CPU_OR_RECEIVER_BIT 0x00001000 + + + +/* for speed register */ +#define CLK_DIVIDER_MASK 0x000000ff +#define CLK_DIVIDER_OFFSET 0 +#define SET_LENGTH_MASK 0x00000f00 +#define SET_LENGTH_OFFSET 8 +#define WAIT_STATES_MASK 0x0000f000 +#define WAIT_STATES_OFFSET 12 +#define TOTCLK_DIVIDER_MASK 0xff000000 +#define TOTCLK_DIVIDER_OFFSET 24 +#define TOTCLK_DUTYCYCLE_MASK 0x00ff0000 +#define TOTCLK_DUTYCYCLE_OFFSET 16 + +/* for external signal register */ +#define SIGNAL_OFFSET 4 +#define SIGNAL_MASK 0xF +#define EXT_SIG_OFF 0x0 +#define EXT_GATE_IN_ACTIVEHIGH 0x1 +#define EXT_GATE_IN_ACTIVELOW 0x2 +#define EXT_TRIG_IN_RISING 0x3 +#define EXT_TRIG_IN_FALLING 0x4 +#define EXT_RO_TRIG_IN_RISING 0x5 +#define EXT_RO_TRIG_IN_FALLING 0x6 +#define EXT_GATE_OUT_ACTIVEHIGH 0x7 +#define EXT_GATE_OUT_ACTIVELOW 0x8 +#define EXT_TRIG_OUT_RISING 0x9 +#define EXT_TRIG_OUT_FALLING 0xA +#define EXT_RO_TRIG_OUT_RISING 0xB +#define EXT_RO_TRIG_OUT_FALLING 0xC + + + +/* for temperature register */ +#define T1_CLK_BIT 0x00000001 +#define T1_CS_BIT 0x00000002 +#define T2_CLK_BIT 0x00000004 +#define T2_CS_BIT 0x00000008 + + + +/* fifo control register */ +#define FIFO_RESET_BIT 0x00000001 +#define FIFO_DISABLE_TOGGLE_BIT 0x00000002 + + +//chip shiftin register meaning +#define OUTMUX_OFF 20 +#define OUTMUX_MASK 0x1f +#define PROBES_OFF 4 +#define PROBES_MASK 0x7f +#define OUTBUF_OFF 0 +#define OUTBUF_MASK 1 + + +/* multi purpose register */ +#define PHASE_STEP_BIT 0x00000001 +#define PHASE_STEP_OFFSET 0 +// #define xxx_BIT 0x00000002 +#define RESET_COUNTER_BIT 0x00000004 +#define RESET_COUNTER_OFFSET 2 +//#define xxx_BIT 0x00000008 +//#define xxx_BIT 0x00000010 +#define SW1_BIT 0x00000020 +#define SW1_OFFSET 5 +#define WRITE_BACK_BIT 0x00000040 +#define WRITE_BACK_OFFSET 6 +#define RESET_BIT 0x00000080 +#define RESET_OFFSET 7 +#define ENET_RESETN_BIT 0x00000800 +#define ENET_RESETN_OFFSET 11 +#define INT_RSTN_BIT 0x00002000 +#define INT_RSTN_OFFSET 13 +#define DIGITAL_TEST_BIT 0x00004000 +#define DIGITAL_TEST_OFFSET 14 +//#define CHANGE_AT_POWER_ON_BIT 0x00008000 +//#define CHANGE_AT_POWER_ON_OFFSET 15 + + +/* settings/conf gain register */ +#define GAIN_MASK 0x0000000f +#define GAIN_OFFSET 0 +#define SETTINGS_MASK 0x000000f0 +#define SETTINGS_OFFSET 4 + + +/* CHIP_OF_INTRST_REG */ +#define CHANNEL_MASK 0xffff0000 +#define CHANNEL_OFFSET 16 +#define ACTIVE_ADC_MASK 0x0000001f + + + +/**ADC SYNC CLEAN FIFO*/ +#define ADCSYNC_CLEAN_FIFO_BITS 0x300000 +#define CLEAN_FIFO_MASK 0x0fffff + + + + + + +#define PLL_CNTR_ADDR_OFF 16 //PLL_CNTR_REG bits 21 downto 16 represent the counter address + +#define PLL_CNTR_RECONFIG_RESET_BIT 0 +#define PLL_CNTR_READ_BIT 1 +#define PLL_CNTR_WRITE_BIT 2 + +#define PLL_MODE_REG 0x0 +#define PLL_STATUS_REG 0x1 +#define PLL_START_REG 0x2 +#define PLL_N_COUNTER_REG 0x3 +#define PLL_M_COUNTER_REG 0x4 +#define PLL_C_COUNTER_REG 0x5 //which ccounter stands in param 22:18; 7:0 lowcount 15:8 highcount; 16 bypassenable; 17 oddivision +#define PLL_PHASE_SHIFT_REG 0x6 +#define PLL_K_COUNTER_REG 0x7 +#define PLL_BANDWIDTH_REG 0x8 +#define PLL_CHARGEPUMP_REG 0x9 +#define PLL_VCO_DIV_REG 0x1c +#define PLL_MIF_REG 0x1f + +#define PPL_M_CNT_PARAM_DEFAULT 0x4040 +#define PPL_N_CNT_PARAM_DEFAULT 0x20D0C +#define PPL_C0_CNT_PARAM_DEFAULT 0x20D0C +#define PPL_C1_CNT_PARAM_DEFAULT 0xA0A0 +#define PPL_C2_CNT_PARAM_DEFAULT 0x20D0C +#define PPL_C2_CNT_PARAM_DEFAULT 0x0808 +#define PPL_BW_PARAM_DEFAULT 0x2EE0 +#define PPL_VCO_PARAM_DEFAULT 0x1 + + + + + + + +#endif + diff --git a/slsDetectorSoftware/jungfrauDetectorServer/server.c b/slsDetectorSoftware/jungfrauDetectorServer/server.c new file mode 100755 index 000000000..1804b9330 --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/server.c @@ -0,0 +1,137 @@ +/* A simple server in the internet domain using TCP + The port number is passed as an argument */ + +#include "sls_detector_defs.h" + +#include "communication_funcs.h" +#include "server_funcs.h" +#include + + +extern int sockfd; +extern int phase_shift; + + + +void error(char *msg) +{ + perror(msg); +} + +int main(int argc, char *argv[]) +{ + int portno, b; + char cmd[500]; + int retval=OK; + int sd, fd; + int iarg; + int checkType = 1; + + + for(iarg=1; iarg 2) && (!strcasecmp(argv[2],"stopserver"))){ + portno = DEFAULT_PORTNO+1; + if ( sscanf(argv[1],"%d",&portno) ==0) { + printf("could not open stop server: unknown port\n"); + return 1; + } + b=0; + printf("\n\nStop Server\nOpening stop server on port %d\n",portno); + checkType=0; + + } + + //control server + else { + portno = DEFAULT_PORTNO; + if(checkType) + sprintf(cmd,"%s %d stopserver &",argv[0],DEFAULT_PORTNO+1); + else + sprintf(cmd,"%s %d stopserver -test with_gotthard &",argv[0],DEFAULT_PORTNO+1); + printf("\n\nControl Server\nOpening control server on port %d\n",portno ); + + //printf("\n\ncmd:%s\n",cmd); + system(cmd); + b=1; + checkType=1; + + } + + + + + + init_detector(b, checkType); + + + sd=bindSocket(portno); + sockfd=sd; + if (getServerError(sd)) { + printf("server error!\n"); + return -1; + } + + /* assign function table */ + function_table(); +#ifdef VERBOSE + printf("function table assigned \n"); +#endif + + + /* waits for connection */ + while(retval!=GOODBYE) { +#ifdef VERBOSE + printf("\n"); +#endif +#ifdef VERY_VERBOSE + printf("Waiting for client call\n"); +#endif + fd=acceptConnection(sockfd); +#ifdef VERY_VERBOSE + printf("Conenction accepted\n"); +#endif + retval=decode_function(fd); +#ifdef VERY_VERBOSE + printf("function executed\n"); +#endif + closeConnection(fd); +#ifdef VERY_VERBOSE + printf("connection closed\n"); +#endif + } + + exitServer(sockfd); + printf("Goodbye!\n"); + + return 0; +} + diff --git a/slsDetectorSoftware/jungfrauDetectorServer/server_defs.h b/slsDetectorSoftware/jungfrauDetectorServer/server_defs.h new file mode 100755 index 000000000..850533266 --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/server_defs.h @@ -0,0 +1,63 @@ +#ifndef SERVER_DEFS_H +#define SERVER_DEFS_H + +#include "sls_detector_defs.h" + +#include + + +// Hardware definitions + +#define NCHAN (160*160) +#define NCHIP 1 +#define NMAXMODX 1 +#define NMAXMODY 1 +#define NMAXMOD (NMAXMODX*NMAXMODY) +#define NDAC 8 +#define NADC 1 + +/**when moench readout tested with gotthard module*/ +#define GOTTHARDNCHAN 128 +#define GOTTHARDNCHIP 10 + + + + +#define NCHANS (NCHAN*NCHIP*NMAXMOD) +#define NDACS (NDAC*NMAXMOD) + +#define NTRIMBITS 6 +#define NCOUNTBITS 24 + +#define NCHIPS_PER_ADC 2 + +//#define TRIM_DR ((2**NTRIMBITS)-1) +//#define COUNT_DR ((2**NCOUNTBITS)-1) +#define TRIM_DR (((int)pow(2,NTRIMBITS))-1) +#define COUNT_DR (((int)pow(2,NCOUNTBITS))-1) + + +#define ALLMOD 0xffff +#define ALLFIFO 0xffff + +#define GOTTHARD_ADCSYNC_VAL 0x32214 +#define ADCSYNC_VAL 0x02111 +#define TOKEN_RESTART_DELAY 0x88000000 +#define TOKEN_RESTART_DELAY_ROI 0x1b000000 +#define TOKEN_TIMING_REV1 0x1f16 +#define TOKEN_TIMING_REV2 0x1f0f + +#define DEFAULT_PHASE_SHIFT 0 // 120 +#define DEFAULT_IP_PACKETSIZE 0x0522 +#define DEFAULT_UDP_PACKETSIZE 0x050E +#define ADC1_IP_PACKETSIZE 256*2+14+20 +#define ADC1_UDP_PACKETSIZE 256*2+4+8+2 + +#ifdef VIRTUAL +#define DEBUGOUT +#endif + +#define CLK_FREQ 65.6E+6 + + +#endif diff --git a/slsDetectorSoftware/jungfrauDetectorServer/server_funcs.c b/slsDetectorSoftware/jungfrauDetectorServer/server_funcs.c new file mode 100755 index 000000000..0a73341d0 --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/server_funcs.c @@ -0,0 +1,3108 @@ +#include "sls_detector_defs.h" +#include "server_funcs.h" +#ifndef PICASSOD +#include "server_defs.h" +#else +#include "picasso_defs.h" +#endif +#include "firmware_funcs.h" +#include "mcb_funcs.h" +#include "trimming_funcs.h" +#include "registers_m.h" +#include "gitInfoMoench.h" + +#define FIFO_DATA_REG_OFF 0x50<<11 +//#define CONTROL_REG 0x24<<11 +// Global variables + + +int (*flist[256])(int); + + +//defined in the detector specific file +#ifdef MYTHEND +const enum detectorType myDetectorType=MYTHEN; +#elif GOTTHARDD +const enum detectorType myDetectorType=GOTTHARD; +#elif EIGERD +const enum detectorType myDetectorType=EIGER; +#elif PICASSOD +const enum detectorType myDetectorType=PICASSO; +#elif MOENCHD +const enum detectorType myDetectorType=MOENCH; +#else +const enum detectorType myDetectorType=GENERIC; +#endif + + +extern int nModX; +extern int nModY; +extern int dataBytes; +extern int dynamicRange; +extern int storeInRAM; + +extern int lockStatus; +extern char lastClientIP[INET_ADDRSTRLEN]; +extern char thisClientIP[INET_ADDRSTRLEN]; +extern int differentClients; + +/* global variables for optimized readout */ +extern unsigned int *ram_values; +char *dataretval=NULL; +int nframes, iframes, dataret; +char mess[1000]; + +int digitalTestBit = 0; + +extern int withGotthard; + + +int init_detector(int b, int checkType) { + + int i; + if (mapCSP0()==FAIL) { printf("Could not map memory\n"); + exit(1); + } + + // + + printf("v: 0x%x\n",bus_r(FPGA_VERSION_REG)); + printf("fp: 0x%x\n",bus_r(FIX_PATT_REG)); + + if (checkType) { + printf("Bus test..."); + for (i=0; i<1000000; i++) { + bus_w(SET_DELAY_LSB_REG, i*100); + bus_r(FPGA_VERSION_REG); + if (i*100!=bus_r(SET_DELAY_LSB_REG)) + printf("ERROR: wrote 0x%x, read 0x%x\n",i*100,bus_r(SET_DELAY_LSB_REG)); + } + printf("Finished\n"); + } + return 0; + + bus_w16(CONTROL_REG, SYNC_RESET); + bus_w16(CONTROL_REG, 0x0); + + + //confirm if it is really moench + if(((bus_r(PCB_REV_REG) & DETECTOR_TYPE_MASK)>>DETECTOR_TYPE_OFFSET) != MOENCH_MODULE ){ + if(checkType){ + printf("This is a Gotthard detector. Exiting Moench Server.\n\n"); + exit(-1); + } + //no check required as specified in command line arguments + else if(b){ + printf("***This is a GOTTHARD detector with %d chips per module***\n",GOTTHARDNCHIP); + printf("***Assuming this to be a MOENCH detector***\n"); + } + withGotthard = 1; + } else if(b){ + printf("***This is a MOENCH detector with %d chips per module***\n",NCHIP); + } + + if (b) { +#ifdef MCB_FUNCS + printf("\nBoard Revision:0x%x\n",(bus_r(PCB_REV_REG)&BOARD_REVISION_MASK)); + initDetector(); + printf("Initializing Detector\n"); + bus_w16(CONTROL_REG, SYNC_RESET); // reset registers +#endif + + + testFpga(); + testRAM(); + printf("ADC_SYNC_REG:%x\n",bus_r(ADC_SYNC_REG)); + //moench specific + + // setPhaseShiftOnce(); //firmware.h + + + prepareADC(); // server_funcs + setADC(-1); //already does setdaqreg and clean fifo + setSettings(GET_SETTINGS,-1); + + //Initialization + setFrames(1); + setTrains(1); + setExposureTime(1e3); + setPeriod(1E6); + setDelay(0); + setGates(0); + + setTiming(GET_EXTERNAL_COMMUNICATION_MODE); + setMaster(GET_MASTER); + setSynchronization(GET_SYNCHRONIZATION_MODE); + startReceiver(0); //firmware + } + strcpy(mess,"dummy message"); + strcpy(lastClientIP,"none"); + strcpy(thisClientIP,"none1"); + lockStatus=0; + return OK; +} + + +int decode_function(int file_des) { + int fnum,n; + int retval=FAIL; +#ifdef VERBOSE + printf( "receive data\n"); +#endif + n = receiveDataOnly(file_des,&fnum,sizeof(fnum)); + if (n <= 0) { +#ifdef VERBOSE + printf("ERROR reading from socket %d, %d %d\n", n, fnum, file_des); +#endif + return FAIL; + } +#ifdef VERBOSE + else + printf("size of data received %d\n",n); +#endif + +#ifdef VERBOSE + printf( "calling function fnum = %d %x\n",fnum,(unsigned int)(flist[fnum])); +#endif + if (fnum<0 || fnum>255) + fnum=255; + retval=(*flist[fnum])(file_des); + if (retval==FAIL) + printf( "Error executing the function = %d \n",fnum); + return retval; +} + + +int function_table() { + int i; + for (i=0;i<256;i++){ + flist[i]=&M_nofunc; + } + flist[F_EXIT_SERVER]=&exit_server; + flist[F_EXEC_COMMAND]=&exec_command; + flist[F_GET_DETECTOR_TYPE]=&get_detector_type; + flist[F_SET_NUMBER_OF_MODULES]=&set_number_of_modules; + flist[F_GET_MAX_NUMBER_OF_MODULES]=&get_max_number_of_modules; + flist[F_SET_EXTERNAL_SIGNAL_FLAG]=&set_external_signal_flag; + flist[F_SET_EXTERNAL_COMMUNICATION_MODE]=&set_external_communication_mode; + flist[F_GET_ID]=&get_id; + flist[F_DIGITAL_TEST]=&digital_test; + flist[F_WRITE_REGISTER]=&write_register; + flist[F_READ_REGISTER]=&read_register; + flist[F_SET_DAC]=&set_dac; + flist[F_GET_ADC]=&get_adc; + flist[F_SET_CHANNEL]=&set_channel; + flist[F_SET_CHIP]=&set_chip; + flist[F_SET_MODULE]=&set_module; + flist[F_GET_CHANNEL]=&get_channel; + flist[F_GET_CHIP]=&get_chip; + flist[F_GET_MODULE]=&get_module; + flist[F_GET_THRESHOLD_ENERGY]=&get_threshold_energy; + flist[F_SET_THRESHOLD_ENERGY]=&set_threshold_energy; + flist[F_SET_SETTINGS]=&set_settings; + flist[F_START_ACQUISITION]=&start_acquisition; + flist[F_STOP_ACQUISITION]=&stop_acquisition; + flist[F_START_READOUT]=&start_readout; + flist[F_GET_RUN_STATUS]=&get_run_status; + flist[F_READ_FRAME]=&read_frame; + flist[F_READ_ALL]=&read_all; + flist[F_START_AND_READ_ALL]=&start_and_read_all; + flist[F_SET_TIMER]=&set_timer; + flist[F_GET_TIME_LEFT]=&get_time_left; + flist[F_SET_DYNAMIC_RANGE]=&set_dynamic_range; + flist[F_SET_ROI]=&set_roi; + flist[F_SET_SPEED]=&set_speed; + flist[F_SET_READOUT_FLAGS]=&set_readout_flags; + flist[F_EXECUTE_TRIMMING]=&execute_trimming; + flist[F_LOCK_SERVER]=&lock_server; + flist[F_SET_PORT]=&set_port; + flist[F_GET_LAST_CLIENT_IP]=&get_last_client_ip; + flist[F_UPDATE_CLIENT]=&update_client; + flist[F_CONFIGURE_MAC]=&configure_mac; + flist[F_LOAD_IMAGE]=&load_image; + flist[F_SET_MASTER]=&set_master; + flist[F_SET_SYNCHRONIZATION_MODE]=&set_synchronization; + flist[F_READ_COUNTER_BLOCK]=&read_counter_block; + flist[F_RESET_COUNTER_BLOCK]=&reset_counter_block; + flist[F_START_RECEIVER]=&start_receiver; + flist[F_STOP_RECEIVER]=&stop_receiver; + flist[F_CALIBRATE_PEDESTAL]=&calibrate_pedestal; + return OK; +} + + +int M_nofunc(int file_des){ + + int ret=FAIL; + sprintf(mess,"Unrecognized Function\n"); + printf(mess); + + sendDataOnly(file_des,&ret,sizeof(ret)); + sendDataOnly(file_des,mess,sizeof(mess)); + return GOODBYE; +} + + +int exit_server(int file_des) { + int retval=FAIL; + sendDataOnly(file_des,&retval,sizeof(retval)); + printf("closing server."); + sprintf(mess,"closing server"); + sendDataOnly(file_des,mess,sizeof(mess)); + return GOODBYE; +} + +int exec_command(int file_des) { + char cmd[MAX_STR_LENGTH]; + char answer[MAX_STR_LENGTH]; + int retval=OK; + int sysret=0; + int n=0; + + /* receive arguments */ + n = receiveDataOnly(file_des,cmd,MAX_STR_LENGTH); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + retval=FAIL; + } + + /* execute action if the arguments correctly arrived*/ + if (retval==OK) { +#ifdef VERBOSE + printf("executing command %s\n", cmd); +#endif + if (lockStatus==0 || differentClients==0) + sysret=system(cmd); + + //should be replaced by popen + if (sysret==0) { + sprintf(answer,"Succeeded\n"); + if (lockStatus==1 && differentClients==1) + sprintf(answer,"Detector locked by %s\n", lastClientIP); + } else { + sprintf(answer,"Failed\n"); + retval=FAIL; + } + } else { + sprintf(answer,"Could not receive the command\n"); + } + + /* send answer */ + n = sendDataOnly(file_des,&retval,sizeof(retval)); + n = sendDataOnly(file_des,answer,MAX_STR_LENGTH); + if (n < 0) { + sprintf(mess,"Error writing to socket"); + retval=FAIL; + } + + + /*return ok/fail*/ + return retval; + +} + + + +int get_detector_type(int file_des) { + int n=0; + enum detectorType ret; + int retval=OK; + + sprintf(mess,"Can't return detector type\n"); + + + /* receive arguments */ + /* execute action */ + ret=myDetectorType; + +#ifdef VERBOSE + printf("Returning detector type %d\n",ret); +#endif + + /* send answer */ + /* send OK/failed */ + if (differentClients==1) + retval=FORCE_UPDATE; + + n += sendDataOnly(file_des,&retval,sizeof(retval)); + if (retval!=FAIL) { + /* send return argument */ + n += sendDataOnly(file_des,&ret,sizeof(ret)); + } else { + n += sendDataOnly(file_des,mess,sizeof(mess)); + } + /*return ok/fail*/ + return retval; + + +} + + +int set_number_of_modules(int file_des) { + int n; + int arg[2], ret=0; + int retval=OK; + int dim, nm; + + sprintf(mess,"Can't set number of modules\n"); + + /* receive arguments */ + n = receiveDataOnly(file_des,&arg,sizeof(arg)); + if (n < 0) { + sprintf(mess,"Error reading from socket %d", n); + retval=GOODBYE; + } + if (retval==OK) { + dim=arg[0]; + nm=arg[1]; + + /* execute action */ +#ifdef VERBOSE + printf("Setting the number of modules in dimension %d to %d\n",dim,nm ); +#endif + + //if (nm!=GET_FLAG) { + if (dim!=X && nm!=GET_FLAG) { + retval=FAIL; + sprintf(mess,"Can't change module number in dimension %d\n",dim); + } else { + if (lockStatus==1 && differentClients==1 && nm!=GET_FLAG) { + sprintf(mess,"Detector locked by %s\n", lastClientIP); + retval=FAIL; + } else { + ret=setNMod(nm); + if (nModX==nm || nm==GET_FLAG) { + retval=OK; + if (differentClients==1) + retval=FORCE_UPDATE; + } else + retval=FAIL; + } + } + } + /*} else { + if (dim==Y) { + ret=nModY; + } else if (dim==X) { + ret=setNMod(-1); + } + } + */ + + /* send answer */ + /* send OK/failed */ + n = sendDataOnly(file_des,&retval,sizeof(retval)); + if (retval!=FAIL) { + /* send return argument */ + n += sendDataOnly(file_des,&ret,sizeof(ret)); + } else { + n += sendDataOnly(file_des,mess,sizeof(mess)); + } + /*return ok/fail*/ + return retval; + +} + + +int get_max_number_of_modules(int file_des) { + int n; + int ret; + int retval=OK; + enum dimension arg; + + sprintf(mess,"Can't get max number of modules\n"); + /* receive arguments */ + n = receiveDataOnly(file_des,&arg,sizeof(arg)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + retval=FAIL; + } + /* execute action */ +#ifdef VERBOSE + printf("Getting the max number of modules in dimension %d \n",arg); +#endif + + + switch (arg) { + case X: + ret=getNModBoard(); + break; + case Y: + ret=NMAXMODY; + break; + default: + ret=FAIL; + retval=FAIL; + break; + } +#ifdef VERBOSE + printf("Max number of module in dimension %d is %d\n",arg,ret ); +#endif + + + + if (differentClients==1 && retval==OK) { + retval=FORCE_UPDATE; + } + + /* send answer */ + /* send OK/failed */ + n = sendDataOnly(file_des,&retval,sizeof(retval)); + if (retval!=FAIL) { + /* send return argument */ + n += sendDataOnly(file_des,&ret,sizeof(ret)); + } else { + n += sendDataOnly(file_des,mess,sizeof(mess)); + } + + + + /*return ok/fail*/ + return retval; +} + + +//index 0 is in gate +//index 1 is in trigger +//index 2 is out gate +//index 3 is out trigger + +int set_external_signal_flag(int file_des) { + int n; + int arg[2]; + int ret=OK; + int signalindex; + enum externalSignalFlag flag, retval; + + sprintf(mess,"Can't set external signal flag\n"); + + /* receive arguments */ + n = receiveDataOnly(file_des,&arg,sizeof(arg)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + ret=FAIL; + } + retval=SIGNAL_OFF; + if (ret==OK) { + signalindex=arg[0]; + flag=arg[1]; + /* execute action */ + switch (flag) { + case GET_EXTERNAL_SIGNAL_FLAG: + retval=getExtSignal(signalindex); + break; + + default: + if (differentClients==0 || lockStatus==0) { + retval=setExtSignal(signalindex,flag); + } else { + if (lockStatus!=0) { + ret=FAIL; + sprintf(mess,"Detector locked by %s\n", lastClientIP); + } + } + + } + +#ifdef VERBOSE + printf("Setting external signal %d to flag %d\n",signalindex,flag ); + printf("Set to flag %d\n",retval); +#endif + + } else { + ret=FAIL; + } + + if (ret==OK && differentClients!=0) + ret=FORCE_UPDATE; + + + /* send answer */ + /* send OK/failed */ + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if (ret!=FAIL) { + /* send return argument */ + n += sendDataOnly(file_des,&retval,sizeof(retval)); + } else { + n += sendDataOnly(file_des,mess,sizeof(mess)); + } + + + /*return ok/fail*/ + return ret; + +} + + +int set_external_communication_mode(int file_des) { + int n; + enum externalCommunicationMode arg, ret=GET_EXTERNAL_COMMUNICATION_MODE; + int retval=OK; + + sprintf(mess,"Can't set external communication mode\n"); + + + /* receive arguments */ + n = receiveDataOnly(file_des,&arg,sizeof(arg)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + retval=FAIL; + } + /* + enum externalCommunicationMode{ + GET_EXTERNAL_COMMUNICATION_MODE, + AUTO, + TRIGGER_EXPOSURE_SERIES, + TRIGGER_EXPOSURE_BURST, + TRIGGER_READOUT, + TRIGGER_COINCIDENCE_WITH_INTERNAL_ENABLE, + GATE_FIX_NUMBER, + GATE_FIX_DURATION, + GATE_WITH_START_TRIGGER, + GATE_COINCIDENCE_WITH_INTERNAL_ENABLE + }; + */ + if (retval==OK) { + /* execute action */ + + ret=setTiming(arg); + + /* switch(arg) { */ + /* default: */ + /* sprintf(mess,"The meaning of single signals should be set\n"); */ + /* retval=FAIL; */ + /* } */ + + +#ifdef VERBOSE + printf("Setting external communication mode to %d\n", arg); +#endif + } else + ret=FAIL; + + /* send answer */ + /* send OK/failed */ + n = sendDataOnly(file_des,&retval,sizeof(retval)); + if (retval!=FAIL) { + /* send return argument */ + n += sendDataOnly(file_des,&ret,sizeof(ret)); + } else { + n += sendDataOnly(file_des,mess,sizeof(mess)); + } + + /*return ok/fail*/ + return retval; +} + + + +int get_id(int file_des) { + // sends back 64 bits! + int64_t retval=-1; + int ret=OK; + int n=0; + enum idMode arg; + + sprintf(mess,"Can't return id\n"); + + /* receive arguments */ + n = receiveDataOnly(file_des,&arg,sizeof(arg)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + ret=FAIL; + } + +#ifdef VERBOSE + printf("Getting id %d\n", arg); +#endif + + switch (arg) { + case DETECTOR_SERIAL_NUMBER: + retval=getDetectorNumber(); + break; + case DETECTOR_FIRMWARE_VERSION: + retval=getFirmwareSVNVersion(); + retval=(retval <<32) | getFirmwareVersion(); + break; + case DETECTOR_SOFTWARE_VERSION: + retval= SVNREV; + retval= (retval <<32) | SVNDATE; + break; +/* case DETECTOR_FIRMWARE_SVN_VERSION: + retval=getFirmwareSVNVersion(); + break;*/ + default: + printf("Required unknown id %d \n", arg); + ret=FAIL; + retval=FAIL; + break; + } + +#ifdef VERBOSE + printf("Id is %llx\n", retval); +#endif + + if (differentClients==1) + ret=FORCE_UPDATE; + + /* send answer */ + /* send OK/failed */ + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if (ret!=FAIL) { + /* send return argument */ + n += sendDataOnly(file_des,&retval,sizeof(retval)); + } else { + n += sendDataOnly(file_des,mess,sizeof(mess)); + } + + /*return ok/fail*/ + return ret; + +} + +int digital_test(int file_des) { + + int retval; + int ret=OK; + int imod=-1; + int n=0; + int ibit=0; + int ow; + int ival; + enum digitalTestMode arg; + + sprintf(mess,"Can't send digital test\n"); + + n = receiveDataOnly(file_des,&arg,sizeof(arg)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + ret=FAIL; + } + +#ifdef VERBOSE + printf("Digital test mode %d\n",arg ); +#endif + + switch (arg) { + case CHIP_TEST: + n = receiveDataOnly(file_des,&imod,sizeof(imod)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + retval=FAIL; + } +#ifdef VERBOSE + printf("of module %d\n", imod); +#endif + retval=0; +#ifdef MCB_FUNCS + if (differentClients==1 && lockStatus==1) { + ret=FAIL; + sprintf(mess,"Detector locked by %s\n",lastClientIP); + break; + } + if (imod >= nModX) { + ret=FAIL; + sprintf(mess,"Module %d disabled\n",imod); + break; + } + if (testShiftIn(imod)) retval|=(1<<(ibit)); + ibit++; + if (testShiftOut(imod)) retval|=(1<<(ibit)); + ibit++; + if (testShiftStSel(imod)) retval|=(1<<(ibit)); + ibit++; + //if ( testDataInOut(0x123456, imod)) retval|=(1<<(ibit++)); + //if ( testExtPulse(imod)) retval|=(1<<(ibit++)); + // for (ow=0; ow<6; ow++) + // ow=1; + //#ifndef PICASSOD + for (ow=0; ow<5; ow++) { + //#endif + if (testDataInOutMux(imod, ow, 0x789abc)) retval|=(1<=getNModBoard()) + ret=FAIL; + if (imod<0) + imod=ALLMOD; + +#ifdef MCB_FUNCS + switch (ind) { + case V_DAC0 : + idac=VDAC0; + break; + case V_DAC1: + idac=VDAC1; + break; + case V_DAC2: + idac=VDAC2; + break; + case V_DAC3: + idac=VDAC3; + break; + case V_DAC4: + idac=VDAC4; + break; + case V_DAC5: + idac=VDAC5; + break; + case V_DAC6: + idac=VDAC6; + break; + case V_DAC7: + idac=VDAC7; + break; + case HV_POT: + idac=HIGH_VOLTAGE; + break; + + default: + printf("Unknown DAC index %d for Moench\n",ind); + sprintf(mess,"Unknown DAC index %d for Moench\n",ind); + ret=FAIL; + break; + } + + if (ret==OK) { + if (differentClients==1 && lockStatus==1) { + ret=FAIL; + sprintf(mess,"Detector locked by %s\n",lastClientIP); + } else{ + if(idac==HIGH_VOLTAGE) + retval=initHighVoltageByModule(val,imod); + else + retval=initDACbyIndexDACU(idac,val,imod); + } + } + if(ret==OK){ + ret=FAIL; + if(idac==HIGH_VOLTAGE){ + if(retval==-2) + strcpy(mess,"Invalid Voltage.Valid values are 0,90,110,120,150,180,200"); + else if(retval==-3) + strcpy(mess,"Weird value read back or it has not been set yet\n"); + else + ret=OK; + }//since v r saving only msb + else if ((retval-val)<=3 || val==-1) + ret=OK; + } +#endif + +#ifdef VERBOSE + printf("DAC set to %d V\n", retval); +#endif + + if(ret==FAIL) + printf("Setting dac %d of module %d: wrote %d but read %d\n", ind, imod, val, retval); + else{ + if (differentClients) + ret=FORCE_UPDATE; + } + + + /* send answer */ + /* send OK/failed */ + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if (ret!=FAIL) { + /* send return argument */ + n += sendDataOnly(file_des,&retval,sizeof(retval)); + } else { + n += sendDataOnly(file_des,mess,sizeof(mess)); + } + + + /*return ok/fail*/ + return ret; + +} + + + +int get_adc(int file_des) { + //default: mod 0 + int retval; + int ret=OK; + int arg[2]; + enum dacIndex ind; + int imod; + int n; + int idac=0; + + sprintf(mess,"Can't read ADC\n"); + + + n = receiveDataOnly(file_des,arg,sizeof(arg)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + ret=FAIL; + } + ind=arg[0]; + imod=arg[1]; + +#ifdef VERBOSE + printf("Getting ADC %d of module %d\n", ind, imod); +#endif + + if (imod>=getNModBoard() || imod<0) + ret=FAIL; + +#ifdef MCB_FUNCS + switch (ind) { + case TEMPERATURE_FPGA: + idac=TEMP_FPGA; + break; + case TEMPERATURE_ADC: + idac=TEMP_ADC; + break; + default: + printf("Unknown DAC index %d\n",ind); + sprintf(mess,"Unknown DAC index %d\n",ind); + ret=FAIL; + break; + } + + if (ret==OK) + retval=getTemperatureByModule(idac,imod); +#endif + +#ifdef VERBOSE + printf("ADC is %d V\n", retval); +#endif + if (ret==FAIL) { + printf("Getting adc %d of module %d failed\n", ind, imod); + } + + if (differentClients) + ret=FORCE_UPDATE; + + /* send answer */ + /* send OK/failed */ + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if (ret!=FAIL) { + /* send return argument */ + n += sendDataOnly(file_des,&retval,sizeof(retval)); + } else { + n += sendDataOnly(file_des,mess,sizeof(mess)); + } + + /*return ok/fail*/ + return ret; + +} + +int set_channel(int file_des) { + int ret=OK; + sls_detector_channel myChan; + int retval; + int n; + + + sprintf(mess,"Can't set channel\n"); + +#ifdef VERBOSE + printf("Setting channel\n"); +#endif + ret=receiveChannel(file_des, &myChan); + if (ret>=0) + ret=OK; + else + ret=FAIL; +#ifdef VERBOSE + printf("channel number is %d, chip number is %d, module number is %d, register is %lld\n", myChan.chan,myChan.chip, myChan.module, myChan.reg); +#endif + + if (ret==OK) { + if (myChan.module>=getNModBoard()) + ret=FAIL; + if (myChan.chip>=NCHIP) + ret=FAIL; + if (myChan.chan>=NCHAN) + ret=FAIL; + if (myChan.module<0) + myChan.module=ALLMOD; + } + + + if (ret==OK) { + if (differentClients==1 && lockStatus==1) { + ret=FAIL; + sprintf(mess,"Detector locked by %s\n",lastClientIP); + } else { +#ifdef MCB_FUNCS + retval=initChannelbyNumber(myChan); +#endif + } + } + /* Maybe this is done inside the initialization funcs */ + //copyChannel(detectorChans[myChan.module][myChan.chip]+(myChan.chan), &myChan); + + + + if (differentClients==1 && ret==OK) + ret=FORCE_UPDATE; + + /* send answer */ + /* send OK/failed */ + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if (ret!=FAIL) { + /* send return argument */ + n += sendDataOnly(file_des,&retval,sizeof(retval)); + } else { + n += sendDataOnly(file_des,mess,sizeof(mess)); + } + + + /*return ok/fail*/ + return ret; + +} + + + + +int get_channel(int file_des) { + + int ret=OK; + sls_detector_channel retval; + + int arg[3]; + int ichan, ichip, imod; + int n; + + sprintf(mess,"Can't get channel\n"); + + + + n = receiveDataOnly(file_des,arg,sizeof(arg)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + ret=FAIL; + } + ichan=arg[0]; + ichip=arg[1]; + imod=arg[2]; + + if (ret==OK) { + ret=FAIL; + if (imod>=0 && imod=0 && ichip=0 && ichan=0) + ret=OK; + else + ret=FAIL; +#ifdef VERBOSE + printf("chip number is %d, module number is %d, register is %d, nchan %d\n",myChip.chip, myChip.module, myChip.reg, myChip.nchan); +#endif + + if (ret==OK) { + if (myChip.module>=getNModBoard()) + ret=FAIL; + if (myChip.module<0) + myChip.module=ALLMOD; + if (myChip.chip>=NCHIP) + ret=FAIL; + } + if (differentClients==1 && lockStatus==1) { + ret=FAIL; + sprintf(mess,"Detector locked by %s\n",lastClientIP); + } else { +#ifdef MCB_FUNCS + retval=initChipbyNumber(myChip); +#endif + } + /* Maybe this is done inside the initialization funcs */ + //copyChip(detectorChips[myChip.module]+(myChip.chip), &myChip); + + if (differentClients && ret==OK) + ret=FORCE_UPDATE; + /* send answer */ + /* send OK/failed */ + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if (ret!=FAIL) { + /* send return argument */ + n += sendDataOnly(file_des,&retval,sizeof(retval)); + } else { + n += sendDataOnly(file_des,mess,sizeof(mess)); + } + + + return ret; +} + +int get_chip(int file_des) { + + + int ret=OK; + sls_detector_chip retval; + int arg[2]; + int ichip, imod; + int n; + + + + n = receiveDataOnly(file_des,arg,sizeof(arg)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + ret=FAIL; + } + ichip=arg[0]; + imod=arg[1]; + if (ret==OK) { + ret=FAIL; + if (imod>=0 && imod=0 && ichip=0) + ret=OK; + else + ret=FAIL; + + +#ifdef VERBOSE + printf("module number is %d,register is %d, nchan %d, nchip %d, ndac %d, nadc %d, gain %f, offset %f\n",myModule.module, myModule.reg, myModule.nchan, myModule.nchip, myModule.ndac, myModule.nadc, myModule.gain,myModule.offset); +#endif + + if (ret==OK) { + if (myModule.module>=getNModBoard()) { + ret=FAIL; + printf("Module number is too large %d\n",myModule.module); + } + if (myModule.module<0) + myModule.module=ALLMOD; + } + + if (ret==OK) { + if (differentClients==1 && lockStatus==1) { + ret=FAIL; + sprintf(mess,"Detector locked by %s\n",lastClientIP); + } else { +#ifdef MCB_FUNCS + retval=initModulebyNumber(myModule); +#endif + } + } + + if (differentClients==1 && ret==OK) + ret=FORCE_UPDATE; + + /* Maybe this is done inside the initialization funcs */ + //copyChip(detectorChips[myChip.module]+(myChip.chip), &myChip); + + /* send answer */ + /* send OK/failed */ + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if (ret!=FAIL) { + /* send return argument */ + n += sendDataOnly(file_des,&retval,sizeof(retval)); + } else { + n += sendDataOnly(file_des,mess,sizeof(mess)); + } + free(myChip); + free(myChan); + free(myDac); + free(myAdc); + + // setDynamicRange(dr); always 16 commented out + + + return ret; +} + + + + +int get_module(int file_des) { + + + int ret=OK; + + + int arg; + int imod; + int n; + + + + sls_detector_module myModule; + int *myChip=malloc(NCHIP*sizeof(int)); + int *myChan=malloc(NCHIP*NCHAN*sizeof(int)); + int *myDac=malloc(NDAC*sizeof(int));/**dhanya*/ + int *myAdc=malloc(NADC*sizeof(int));/**dhanya*/ + + + if (myDac) + myModule.dacs=myDac; + else { + sprintf(mess,"could not allocate dacs\n"); + ret=FAIL; + } + if (myAdc) + myModule.adcs=myAdc; + else { + sprintf(mess,"could not allocate adcs\n"); + ret=FAIL; + } + if (myChip) + myModule.chipregs=myChip; + else { + sprintf(mess,"could not allocate chips\n"); + ret=FAIL; + } + if (myChan) + myModule.chanregs=myChan; + else { + sprintf(mess,"could not allocate chans\n"); + ret=FAIL; + } + + myModule.ndac=NDAC; + myModule.nchip=NCHIP; + myModule.nchan=NCHAN*NCHIP; + myModule.nadc=NADC; + + + + + + n = receiveDataOnly(file_des,&arg,sizeof(arg)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + ret=FAIL; + } + imod=arg; + + if (ret==OK) { + ret=FAIL; + if (imod>=0 && imod-2) { + dataret=FAIL; + sprintf(mess,"no data and run stopped: %d frames left\n",(int)(getFrames()+2)); + printf("%s\n",mess); + } else { + dataret=FINISHED; + sprintf(mess,"acquisition successfully finished\n"); + printf("%s\n",mess); + } +#ifdef VERYVERBOSE + printf("%d %d %x %s\n",(int)(sizeof(mess)),(int)(strlen(mess)),(unsigned int)( mess),mess); +#endif + sendDataOnly(file_des,&dataret,sizeof(dataret)); + sendDataOnly(file_des,mess,sizeof(mess)); +#ifdef VERYVERBOSE + printf("message sent %s\n",mess); +#endif + printf("dataret %d\n",dataret); + return dataret; + } + } else { + nframes=0; + while(fifo_read_event()) { + nframes++; + } + dataretval=(char*)ram_values; + dataret=OK; +#ifdef VERBOSE + printf("sending data of %d frames\n",nframes); +#endif + for (iframes=0; iframes-2) { + dataret=FAIL; + sprintf(mess,"no data and run stopped: %d frames left\n",(int)(getFrames()+2)); + printf("%s\n",mess); + } else { + dataret=FINISHED; + sprintf(mess,"acquisition successfully finished\n"); + printf("%s\n",mess); + if (differentClients) + dataret=FORCE_UPDATE; + } +#ifdef VERBOSE + printf("Frames left %d\n",(int)(getFrames())); +#endif + sendDataOnly(file_des,&dataret,sizeof(dataret)); + sendDataOnly(file_des,mess,sizeof(mess)); + printf("dataret %d\n",dataret); + return dataret; + } + printf("dataret %d\n",dataret); + return dataret; +} + + + + + + + + +int read_all(int file_des) { + +while(read_frame(file_des)==OK) { + +#ifdef VERBOSE + printf("frame read\n"); +#endif + ; + } +#ifdef VERBOSE + printf("Frames finished\n"); +#endif + return OK; + + +} + +int start_and_read_all(int file_des) { + //int dataret=OK; +#ifdef VERBOSE + printf("Starting and reading all frames\n"); +#endif + + if (differentClients==1 && lockStatus==1) { + dataret=FAIL; + sprintf(mess,"Detector locked by %s\n",lastClientIP); + sendDataOnly(file_des,&dataret,sizeof(dataret)); + sendDataOnly(file_des,mess,sizeof(mess)); + return dataret; + + } + + startStateMachine(); + + /* ret=startStateMachine(); + if (ret!=OK) { + sprintf(mess,"could not start state machine\n"); + sendDataOnly(file_des,&ret,sizeof(ret)); + sendDataOnly(file_des,mess,sizeof(mess)); + + #ifdef VERBOSE + printf("could not start state machine\n"); +#endif +} else {*/ + read_all(file_des); +#ifdef VERBOSE + printf("Frames finished\n"); +#endif + //} + + + return OK; + + +} + +int set_timer(int file_des) { + enum timerIndex ind; + int64_t tns; + int n; + int64_t retval; + int ret=OK; + + + sprintf(mess,"can't set timer\n"); + + n = receiveDataOnly(file_des,&ind,sizeof(ind)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + ret=FAIL; + } + + n = receiveDataOnly(file_des,&tns,sizeof(tns)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + ret=FAIL; + } + + if (ret!=OK) { + printf(mess); + } + +#ifdef VERBOSE + printf("setting timer %d to %lld ns\n",ind,tns); +#endif + if (ret==OK) { + + if (differentClients==1 && lockStatus==1 && tns!=-1) { + ret=FAIL; + sprintf(mess,"Detector locked by %s\n",lastClientIP); + } else { + switch(ind) { + case FRAME_NUMBER: + retval=setFrames(tns); + break; + case ACQUISITION_TIME: + retval=setExposureTime(tns); + break; + case FRAME_PERIOD: + retval=setPeriod(tns); + break; + case DELAY_AFTER_TRIGGER: + retval=setDelay(tns); + break; + case GATES_NUMBER: + retval=setGates(tns); + break; + case PROBES_NUMBER: + sprintf(mess,"can't set timer for moench\n"); + ret=FAIL; + break; + case CYCLES_NUMBER: + retval=setTrains(tns); + break; + default: + ret=FAIL; + sprintf(mess,"timer index unknown %d\n",ind); + break; + } + } + } + if (ret!=OK) { + printf(mess); + if (differentClients) + ret=FORCE_UPDATE; + } + + if (ret!=OK) { + printf(mess); + printf("set timer failed\n"); + } else if (ind==FRAME_NUMBER) { + ret=allocateRAM(); + if (ret!=OK) + sprintf(mess, "could not allocate RAM for %lld frames\n", tns); + } + + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if (ret==FAIL) { + n = sendDataOnly(file_des,mess,sizeof(mess)); + } else { +#ifdef VERBOSE + printf("returning ok %d\n",(int)(sizeof(retval))); +#endif + + n = sendDataOnly(file_des,&retval,sizeof(retval)); + } + + return ret; + +} + + + + + + + + +int get_time_left(int file_des) { + + enum timerIndex ind; + int n; + int64_t retval; + int ret=OK; + + sprintf(mess,"can't get timer\n"); + n = receiveDataOnly(file_des,&ind,sizeof(ind)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + ret=FAIL; + } + + + //#ifdef VERBOSE + + printf("getting time left on timer %d \n",ind); + //#endif + + if (ret==OK) { + switch(ind) { + case FRAME_NUMBER: + printf("getting frames \n"); + retval=getFrames(); + break; + case ACQUISITION_TIME: + retval=getExposureTime(); + break; + case FRAME_PERIOD: + retval=getPeriod(); + break; + case DELAY_AFTER_TRIGGER: + retval=getDelay(); + break; + case GATES_NUMBER: + retval=getGates(); + break; + case PROBES_NUMBER: + retval=getProbes(); + break; + case CYCLES_NUMBER: + retval=getTrains(); + break; + case PROGRESS: + retval=getProgress(); + break; + case ACTUAL_TIME: + retval=getActualTime(); + break; + case MEASUREMENT_TIME: + retval=getMeasurementTime(); + break; + default: + ret=FAIL; + sprintf(mess,"timer index unknown %d\n",ind); + break; + } + } + + + if (ret!=OK) { + printf("get time left failed\n"); + } else if (differentClients) + ret=FORCE_UPDATE; + + //#ifdef VERBOSE + + printf("time left on timer %d is %lld\n",ind, retval); + //#endif + + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if (ret!=OK) { + n += sendDataOnly(file_des,mess,sizeof(mess)); + } else { + n = sendDataOnly(file_des,&retval,sizeof(retval)); + } +#ifdef VERBOSE + + printf("data sent\n"); +#endif + + return ret; + + +} + +int set_dynamic_range(int file_des) { + + + + int dr; + int n; + int retval; + int ret=OK; + + + sprintf(mess,"can't set dynamic range\n"); + + + n = receiveDataOnly(file_des,&dr,sizeof(dr)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + ret=FAIL; + } + + + if (differentClients==1 && lockStatus==1 && dr>=0) { + ret=FAIL; + sprintf(mess,"Detector locked by %s\n",lastClientIP); + } else { + retval=setDynamicRange(dr); + } + + //if (dr>=0 && retval!=dr) ret=FAIL; + if (ret!=OK) { + sprintf(mess,"set dynamic range failed\n"); + } else { + ret=allocateRAM(); + if (ret!=OK) + sprintf(mess,"Could not allocate RAM for the dynamic range selected\n"); + else if (differentClients) + ret=FORCE_UPDATE; + } + + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if (ret==FAIL) { + n = sendDataOnly(file_des,mess,sizeof(mess)); + } else { + n = sendDataOnly(file_des,&retval,sizeof(retval)); + } + return ret; +} + +int set_roi(int file_des) { + + int i; + int ret=OK; + int nroi=-1; + int n=0; + int retvalsize=0; + ROI arg[MAX_ROIS]; + ROI* retval=0; + + strcpy(mess,"Could not set/get roi\n"); + + + n = receiveDataOnly(file_des,&nroi,sizeof(nroi)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + ret=FAIL; + } + + if(nroi!=-1){ + n = receiveDataOnly(file_des,arg,nroi*sizeof(ROI)); + if (n != (nroi*sizeof(ROI))) { + sprintf(mess,"Received wrong number of bytes for ROI\n"); + ret=FAIL; + } +//#ifdef VERBOSE + /* + printf("Setting ROI to:"); + for( i=0;i=0) { + if (differentClients==1 && lockStatus==1 && val>=0) { + ret=FAIL; + sprintf(mess,"Detector locked by %s\n",lastClientIP); + } else { + switch (arg) { + case CLOCK_DIVIDER: + retval=setClockDivider(val); + break; + + case PHASE_SHIFT: + retval=phaseStep(val); + break; + + case OVERSAMPLING: + retval=setOversampling(val); + break; + + default: + ret=FAIL; + sprintf(mess,"Unknown speed parameter %d",arg); + } + } + } + + + switch (arg) { + case CLOCK_DIVIDER: + retval=getClockDivider(); + break; + + case PHASE_SHIFT: + retval=phaseStep(-1); + break; + + case OVERSAMPLING: + retval=setOversampling(-1); + break; + + default: + ret=FAIL; + sprintf(mess,"Unknown speed parameter %d",arg); + } + } + + + + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if (ret==FAIL) { + n = sendDataOnly(file_des,mess,sizeof(mess)); + } else { + n = sendDataOnly(file_des,&retval,sizeof(retval)); + } + return ret; +} + + + +int set_readout_flags(int file_des) { + + enum readOutFlags arg; + int n; + int ret=FAIL; + + + receiveDataOnly(file_des,&arg,sizeof(arg)); + + sprintf(mess,"can't set readout flags for moench\n"); + + sendDataOnly(file_des,&ret,sizeof(ret)); + sendDataOnly(file_des,mess,sizeof(mess)); + + return ret; +} + + + + + +int execute_trimming(int file_des) { + + int arg[3]; + int ret=FAIL; + enum trimMode mode; + + sprintf(mess,"can't set execute trimming for moench\n"); + + receiveDataOnly(file_des,&mode,sizeof(mode)); + receiveDataOnly(file_des,arg,sizeof(arg)); + + + sendDataOnly(file_des,&ret,sizeof(ret)); + sendDataOnly(file_des,mess,sizeof(mess)); + + return ret; +} + + +int lock_server(int file_des) { + + + int n; + int ret=OK; + + int lock; + n = receiveDataOnly(file_des,&lock,sizeof(lock)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + printf("Error reading from socket (lock)\n"); + ret=FAIL; + } + if (lock>=0) { + if (lockStatus==0 || strcmp(lastClientIP,thisClientIP)==0 || strcmp(lastClientIP,"none")==0) + lockStatus=lock; + else { + ret=FAIL; + sprintf(mess,"Server already locked by %s\n", lastClientIP); + } + } + if (differentClients && ret==OK) + ret=FORCE_UPDATE; + + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if (ret==FAIL) { + n = sendDataOnly(file_des,mess,sizeof(mess)); + } else + n = sendDataOnly(file_des,&lockStatus,sizeof(lockStatus)); + + return ret; + +} + +int set_port(int file_des) { + int n; + int ret=OK; + int sd=-1; + + enum portType p_type; /** data? control? stop? Unused! */ + int p_number; /** new port number */ + + n = receiveDataOnly(file_des,&p_type,sizeof(p_type)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + printf("Error reading from socket (ptype)\n"); + ret=FAIL; + } + + n = receiveDataOnly(file_des,&p_number,sizeof(p_number)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + printf("Error reading from socket (pnum)\n"); + ret=FAIL; + } + if (differentClients==1 && lockStatus==1 ) { + ret=FAIL; + sprintf(mess,"Detector locked by %s\n",lastClientIP); + } else { + if (p_number<1024) { + sprintf(mess,"Too low port number %d\n", p_number); + printf("\n"); + ret=FAIL; + } + + printf("set port %d to %d\n",p_type, p_number); + + sd=bindSocket(p_number); + } + if (sd>=0) { + ret=OK; + if (differentClients ) + ret=FORCE_UPDATE; + } else { + ret=FAIL; + sprintf(mess,"Could not bind port %d\n", p_number); + printf("Could not bind port %d\n", p_number); + if (sd==-10) { + sprintf(mess,"Port %d already set\n", p_number); + printf("Port %d already set\n", p_number); + + } + } + + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if (ret==FAIL) { + n = sendDataOnly(file_des,mess,sizeof(mess)); + } else { + n = sendDataOnly(file_des,&p_number,sizeof(p_number)); + closeConnection(file_des); + exitServer(sockfd); + sockfd=sd; + + } + + return ret; + +} + +int get_last_client_ip(int file_des) { + int ret=OK; + int n; + if (differentClients ) + ret=FORCE_UPDATE; + n = sendDataOnly(file_des,&ret,sizeof(ret)); + n = sendDataOnly(file_des,lastClientIP,sizeof(lastClientIP)); + + return ret; + +} + + +int send_update(int file_des) { + + int ret=OK; + enum detectorSettings t; + int n;//int thr, n; + //int it; + int64_t retval, tns=-1; + n = sendDataOnly(file_des,lastClientIP,sizeof(lastClientIP)); + n = sendDataOnly(file_des,&nModX,sizeof(nModX)); + n = sendDataOnly(file_des,&nModY,sizeof(nModY)); + n = sendDataOnly(file_des,&dynamicRange,sizeof(dynamicRange)); + n = sendDataOnly(file_des,&dataBytes,sizeof(dataBytes)); + t=setSettings(GET_SETTINGS,-1); + n = sendDataOnly(file_des,&t,sizeof(t)); +/* thr=getThresholdEnergy(); + n = sendDataOnly(file_des,&thr,sizeof(thr));*/ + retval=setFrames(tns); + n = sendDataOnly(file_des,&retval,sizeof(int64_t)); + retval=setExposureTime(tns); + n = sendDataOnly(file_des,&retval,sizeof(int64_t)); + retval=setPeriod(tns); + n = sendDataOnly(file_des,&retval,sizeof(int64_t)); + retval=setDelay(tns); + n = sendDataOnly(file_des,&retval,sizeof(int64_t)); + retval=setGates(tns); + n = sendDataOnly(file_des,&retval,sizeof(int64_t)); +/* retval=setProbes(tns); + n = sendDataOnly(file_des,&retval,sizeof(int64_t));*/ + retval=setTrains(tns); + n = sendDataOnly(file_des,&retval,sizeof(int64_t)); + + if (lockStatus==0) { + strcpy(lastClientIP,thisClientIP); + } + + return ret; + + +} +int update_client(int file_des) { + + int ret=OK; + + sendDataOnly(file_des,&ret,sizeof(ret)); + return send_update(file_des); + + + +} + + +int configure_mac(int file_des) { + + int ret=OK; + char arg[5][50]; + int n; + + int imod=0;//should be in future sent from client as -1, arg[2] + int ipad; + long long int imacadd; + long long int idetectormacadd; + int udpport; + int detipad; + int retval=-100; + + sprintf(mess,"Can't configure MAC\n"); + + + n = receiveDataOnly(file_des,arg,sizeof(arg)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + ret=FAIL; + } + + sscanf(arg[0], "%x", &ipad); + sscanf(arg[1], "%llx", &imacadd); + sscanf(arg[2], "%x", &udpport); + sscanf(arg[3], "%llx", &idetectormacadd); + sscanf(arg[4], "%x", &detipad); + +#ifdef VERBOSE + int i; + printf("\ndigital_test_bit in server %d\t",digitalTestBit); + printf("\nipadd %x\t",ipad); + printf("destination ip is %d.%d.%d.%d = 0x%x \n",(ipad>>24)&0xff,(ipad>>16)&0xff,(ipad>>8)&0xff,(ipad)&0xff,ipad); + printf("macad:%llx\n",imacadd); + for (i=0;i<6;i++) + printf("mac adress %d is 0x%x \n",6-i,(unsigned int)(((imacadd>>(8*i))&0xFF))); + printf("udp port:0x%x\n",udpport); + printf("detector macad:%llx\n",idetectormacadd); + for (i=0;i<6;i++) + printf("detector mac adress %d is 0x%x \n",6-i,(unsigned int)(((idetectormacadd>>(8*i))&0xFF))); + printf("detipad %x\n",detipad); + printf("\n"); +#endif + + + + if (imod>=getNModBoard()) + ret=FAIL; + if (imod<0) + imod=ALLMOD; + + //#ifdef VERBOSE + printf("Configuring MAC of module %d at port %x\n", imod, udpport); + //#endif +#ifdef MCB_FUNCS + if (ret==OK){ + if(runBusy()){ + ret=stopStateMachine(); + if(ret==FAIL) + strcpy(mess,"could not stop detector acquisition to configure mac"); + } + + if(ret==OK) + configureMAC(ipad,imacadd,idetectormacadd,detipad,digitalTestBit,udpport); + retval=getAdcConfigured(); + } +#endif + if (ret==FAIL) + printf("configuring MAC of mod %d failed\n", imod); + else + printf("Configuremac successful of mod %d and adc %d\n",imod,retval); + + if (differentClients) + ret=FORCE_UPDATE; + + /* send answer */ + /* send OK/failed */ + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if (ret==FAIL) + n += sendDataOnly(file_des,mess,sizeof(mess)); + else + n += sendDataOnly(file_des,&retval,sizeof(retval)); + /*return ok/fail*/ + return ret; + +} + + + +int load_image(int file_des) { + int retval; + int ret=OK; + int n; + enum imageType index; + short int ImageVals[NCHAN*NCHIP]; + + sprintf(mess,"Loading image failed\n"); + + n = receiveDataOnly(file_des,&index,sizeof(index)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + ret=FAIL; + } + + n = receiveDataOnly(file_des,ImageVals,dataBytes); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + ret=FAIL; + } + + switch (index) { + case DARK_IMAGE : +#ifdef VERBOSE + printf("Loading Dark image\n"); +#endif + break; + case GAIN_IMAGE : +#ifdef VERBOSE + printf("Loading Gain image\n"); +#endif + break; + default: + printf("Unknown index %d\n",index); + sprintf(mess,"Unknown index %d\n",index); + ret=FAIL; + break; + } + + if (ret==OK) { + if (differentClients==1 && lockStatus==1) { + ret=FAIL; + sprintf(mess,"Detector locked by %s\n",lastClientIP); + } else{ + retval=loadImage(index,ImageVals); + if (retval==-1) + ret = FAIL; + } + } + + if(ret==OK){ + if (differentClients) + ret=FORCE_UPDATE; + } + + /* send answer */ + /* send OK/failed */ + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if (ret!=FAIL) { + /* send return argument */ + n += sendDataOnly(file_des,&retval,sizeof(retval)); + } else { + n += sendDataOnly(file_des,mess,sizeof(mess)); + } + + /*return ok/fail*/ + return ret; +} + + + +int set_master(int file_des) { + + enum masterFlags retval=GET_MASTER; + enum masterFlags arg; + int n; + int ret=OK; + // int regret=OK; + + + sprintf(mess,"can't set master flags\n"); + + + n = receiveDataOnly(file_des,&arg,sizeof(arg)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + ret=FAIL; + } + + +#ifdef VERBOSE + printf("setting master flags to %d\n",arg); +#endif + + if (differentClients==1 && lockStatus==1 && arg!=GET_READOUT_FLAGS) { + ret=FAIL; + sprintf(mess,"Detector locked by %s\n",lastClientIP); + } else { + retval=setMaster(arg); + + } + if (retval==GET_MASTER) { + ret=FAIL; + } + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if (ret==FAIL) { + n = sendDataOnly(file_des,mess,sizeof(mess)); + } else { + n = sendDataOnly(file_des,&retval,sizeof(retval)); + } + return ret; +} + + + + + + +int set_synchronization(int file_des) { + + enum synchronizationMode retval=GET_MASTER; + enum synchronizationMode arg; + int n; + int ret=OK; + //int regret=OK; + + + sprintf(mess,"can't set synchronization mode\n"); + + + n = receiveDataOnly(file_des,&arg,sizeof(arg)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + ret=FAIL; + } +#ifdef VERBOSE + printf("setting master flags to %d\n",arg); +#endif + + if (differentClients==1 && lockStatus==1 && arg!=GET_READOUT_FLAGS) { + ret=FAIL; + sprintf(mess,"Detector locked by %s\n",lastClientIP); + } else { + //ret=setStoreInRAM(0); + // initChipWithProbes(0,0,0, ALLMOD); + retval=setSynchronization(arg); + } + if (retval==GET_SYNCHRONIZATION_MODE) { + ret=FAIL; + } + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if (ret==FAIL) { + n = sendDataOnly(file_des,mess,sizeof(mess)); + } else { + n = sendDataOnly(file_des,&retval,sizeof(retval)); + } + return ret; +} + + + + + + +int read_counter_block(int file_des) { + + int ret=OK; + int n; + int startACQ; + //char *retval=NULL; + short int CounterVals[NCHAN*NCHIP]; + + sprintf(mess,"Read counter block failed\n"); + + n = receiveDataOnly(file_des,&startACQ,sizeof(startACQ)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + ret=FAIL; + } + + if (ret==OK) { + if (differentClients==1 && lockStatus==1) { + ret=FAIL; + sprintf(mess,"Detector locked by %s\n",lastClientIP); + } else{ + ret=readCounterBlock(startACQ,CounterVals); +#ifdef VERBOSE + int i; + for(i=0;i<6;i++) + printf("%d:%d\t",i,CounterVals[i]); +#endif + } + } + + if(ret!=FAIL){ + if (differentClients) + ret=FORCE_UPDATE; + } + + /* send answer */ + /* send OK/failed */ + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if (ret!=FAIL) { + /* send return argument */ + n += sendDataOnly(file_des,CounterVals,dataBytes);//1280*2 + } else { + n += sendDataOnly(file_des,mess,sizeof(mess)); + } + + /*return ok/fail*/ + return ret; +} + + + + + +int reset_counter_block(int file_des) { + + int ret=OK; + int n; + int startACQ; + + sprintf(mess,"Reset counter block failed\n"); + + n = receiveDataOnly(file_des,&startACQ,sizeof(startACQ)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + ret=FAIL; + } + + if (ret==OK) { + if (differentClients==1 && lockStatus==1) { + ret=FAIL; + sprintf(mess,"Detector locked by %s\n",lastClientIP); + } else + ret=resetCounterBlock(startACQ); + } + + if(ret==OK){ + if (differentClients) + ret=FORCE_UPDATE; + } + + /* send answer */ + /* send OK/failed */ + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if (ret==FAIL) + n += sendDataOnly(file_des,mess,sizeof(mess)); + + /*return ok/fail*/ + return ret; +} + + + + + + +int start_receiver(int file_des) { + int ret=OK; + int n=0; + strcpy(mess,"Could not start receiver\n"); + + /* execute action if the arguments correctly arrived*/ +#ifdef MCB_FUNCS + if (lockStatus==1 && differentClients==1){//necessary??? + sprintf(mess,"Detector locked by %s\n", lastClientIP); + ret=FAIL; + } + else + ret = startReceiver(1); + +#endif + + + if(ret==OK && differentClients){ + printf("Force update\n"); + ret=FORCE_UPDATE; + } + + /* send answer */ + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if(ret==FAIL) + n = sendDataOnly(file_des,mess,sizeof(mess)); + /*return ok/fail*/ + return ret; +} + + + + + + +int stop_receiver(int file_des) { + int ret=OK; + int n=0; + + strcpy(mess,"Could not stop receiver\n"); + + /* execute action if the arguments correctly arrived*/ +#ifdef MCB_FUNCS + if (lockStatus==1 && differentClients==1){//necessary??? + sprintf(mess,"Detector locked by %s\n", lastClientIP); + ret=FAIL; + } + else + ret=startReceiver(0); + +#endif + + + if(ret==OK && differentClients){ + printf("Force update\n"); + ret=FORCE_UPDATE; + } + + /* send answer */ + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if(ret==FAIL) + n = sendDataOnly(file_des,mess,sizeof(mess)); + /*return ok/fail*/ + return ret; +} + + + + + +int calibrate_pedestal(int file_des){ + + int ret=OK; + int retval=-1; + int n; + int frames; + + sprintf(mess,"Could not calibrate pedestal\n"); + + n = receiveDataOnly(file_des,&frames,sizeof(frames)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + ret=FAIL; + } + + if (ret==OK) { + if (differentClients==1 && lockStatus==1) { + ret=FAIL; + sprintf(mess,"Detector locked by %s\n",lastClientIP); + } else + ret=calibratePedestal(frames); + } + + if(ret==OK){ + if (differentClients) + ret=FORCE_UPDATE; + } + + /* send answer */ + /* send OK/failed */ + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if (ret==FAIL) + n += sendDataOnly(file_des,mess,sizeof(mess)); + else + n += sendDataOnly(file_des,&retval,sizeof(retval)); + + /*return ok/fail*/ + return ret; +} + + diff --git a/slsDetectorSoftware/jungfrauDetectorServer/server_funcs.h b/slsDetectorSoftware/jungfrauDetectorServer/server_funcs.h new file mode 100755 index 000000000..5e371278a --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/server_funcs.h @@ -0,0 +1,97 @@ +#ifndef SERVER_FUNCS_H +#define SERVER_FUNCS_H + + +#include "sls_detector_defs.h" + + +#include +/* +#include +#include +#include +*/ +#include "communication_funcs.h" + + + + +#define GOODBYE -200 + +int sockfd; + +int function_table(); + +int decode_function(int); +int init_detector(int,int); + +int M_nofunc(int); +int exit_server(int); + + + + +// General purpose functions +int get_detector_type(int); +int set_number_of_modules(int); +int get_max_number_of_modules(int); + + +int exec_command(int); +int set_external_signal_flag(int); +int set_external_communication_mode(int); +int get_id(int); +int digital_test(int); +int write_register(int); +int read_register(int); +int set_dac(int); +int get_adc(int); +int set_channel(int); +int set_chip(int); +int set_module(int); +int get_channel(int); +int get_chip(int); +int get_module(int); + +int get_threshold_energy(int); +int set_threshold_energy(int); +int set_settings(int); +int start_acquisition(int); +int stop_acquisition(int); +int start_readout(int); +int get_run_status(int); +int read_frame(int); +int read_all(int); +int start_and_read_all(int); +int set_timer(int); +int get_time_left(int); +int set_dynamic_range(int); +int set_roi(int); +int get_roi(int); +int set_speed(int); +void prepareADC(void); +int set_readout_flags(int); +int execute_trimming(int); +int lock_server(int); +int set_port(int); +int get_last_client_ip(int); +int set_master(int); +int set_synchronization(int); + +int update_client(int); +int send_update(int); +int configure_mac(int); + +int load_image(int); +int read_counter_block(int); +int reset_counter_block(int); + +int start_receiver(int); +int stop_receiver(int); + + +int calibrate_pedestal(int); + +int set_roi(int); + +#endif diff --git a/slsDetectorSoftware/jungfrauDetectorServer/sharedmemory.c b/slsDetectorSoftware/jungfrauDetectorServer/sharedmemory.c new file mode 100755 index 000000000..4504cfe05 --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/sharedmemory.c @@ -0,0 +1,39 @@ +#include "sharedmemory.h" + +struct statusdata *stdata; + +int inism(int clsv) { + +static int scansmid; + + if (clsv==SMSV) { + if ( (scansmid=shmget(SMKEY,1024,IPC_CREAT | 0666 ))==-1 ) { + return -1; + } + if ( (stdata=shmat(scansmid,NULL,0))==(void*)-1) { + return -2; + } + } + + if (clsv==SMCL) { + if ( (scansmid=shmget(SMKEY,0,0) )==-1 ) { + return -3; + } + if ( (stdata=shmat(scansmid,NULL,0))==(void*)-1) { + return -4; + } + } + return 1; +} + +void write_status_sm(char *status) { + strcpy(stdata->status,status); +} + +void write_stop_sm(int v) { + stdata->stop=v; +} + +void write_runnumber_sm(int v) { + stdata->runnumber=v; +} diff --git a/slsDetectorSoftware/jungfrauDetectorServer/sharedmemory.h b/slsDetectorSoftware/jungfrauDetectorServer/sharedmemory.h new file mode 100755 index 000000000..bdbddf719 --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/sharedmemory.h @@ -0,0 +1,48 @@ +#ifndef SM +#define SM + +#include "sls_detector_defs.h" + +#include +#include +#include +#include +#include +#include +#include +//#include +#include +#include +#include +#include +#include +#include + + +#include + +#include +#include + +/* key for shared memory */ +#define SMKEY 10001 + +#define SMSV 1 +#define SMCL 2 + + +struct statusdata { + int runnumber; + int stop; + char status[20]; +} ; + + +/* for shared memory */ + +int inism(int clsv); +void write_status_sm(char *status); +void write_stop_sm(int v); +void write_runnumber_sm(int v); + +#endif diff --git a/slsDetectorSoftware/jungfrauDetectorServer/sls_detector_defs.h b/slsDetectorSoftware/jungfrauDetectorServer/sls_detector_defs.h new file mode 120000 index 000000000..c5062e03f --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/sls_detector_defs.h @@ -0,0 +1 @@ +../commonFiles/sls_detector_defs.h \ No newline at end of file diff --git a/slsDetectorSoftware/jungfrauDetectorServer/sls_detector_funcs.h b/slsDetectorSoftware/jungfrauDetectorServer/sls_detector_funcs.h new file mode 120000 index 000000000..844b67129 --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/sls_detector_funcs.h @@ -0,0 +1 @@ +../commonFiles/sls_detector_funcs.h \ No newline at end of file diff --git a/slsDetectorSoftware/jungfrauDetectorServer/sls_receiver_defs.h b/slsDetectorSoftware/jungfrauDetectorServer/sls_receiver_defs.h new file mode 120000 index 000000000..a07bf98e7 --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/sls_receiver_defs.h @@ -0,0 +1 @@ +../../slsReceiverSoftware/includes/sls_receiver_defs.h \ No newline at end of file diff --git a/slsDetectorSoftware/jungfrauDetectorServer/sls_receiver_funcs.h b/slsDetectorSoftware/jungfrauDetectorServer/sls_receiver_funcs.h new file mode 120000 index 000000000..67df52bf4 --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/sls_receiver_funcs.h @@ -0,0 +1 @@ +../../slsReceiverSoftware/includes/sls_receiver_funcs.h \ No newline at end of file diff --git a/slsDetectorSoftware/jungfrauDetectorServer/stop_server.c b/slsDetectorSoftware/jungfrauDetectorServer/stop_server.c new file mode 100755 index 000000000..e3c8ff7e1 --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/stop_server.c @@ -0,0 +1,46 @@ +/* A simple server in the internet domain using TCP + The port number is passed as an argument */ + + +#include "sls_detector_defs.h" + + +#include "communication_funcs.h" +#include "firmware_funcs.h" + + +int sockfd; + +int main(int argc, char *argv[]) +{ + int portno; + int retval=0; + + portno = DEFAULT_PORTNO; + + + bindSocket(portno); + if (getServerError()) + return -1; + + + + /* waits for connection */ + while(retval!=GOODBYE) { +#ifdef VERBOSE + printf("\n"); +#endif +#ifdef VERY_VERBOSE + printf("Stop server: waiting for client call\n"); +#endif + acceptConnection(); + retval=stopStateMachine(); + closeConnection(); + } + + exitServer(); + printf("Goodbye!\n"); + + return 0; +} + diff --git a/slsDetectorSoftware/jungfrauDetectorServer/trimming_funcs.c b/slsDetectorSoftware/jungfrauDetectorServer/trimming_funcs.c new file mode 100755 index 000000000..9a28b9b4a --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/trimming_funcs.c @@ -0,0 +1,749 @@ +#ifndef PICASSOD +#include "server_defs.h" +#else +#include "picasso_defs.h" +#endif +#include "trimming_funcs.h" +#include "mcb_funcs.h" +#include "firmware_funcs.h" +#include + + + +extern int nModX; +//extern int *values; + +extern const int nChans; +extern const int nChips; +extern const int nDacs; +extern const int nAdcs; + + +int trim_fixed_settings(int countlim, int par2, int im) +{ + + int retval=OK; +#ifdef VERBOSE + printf("Trimming with fixed settings\n"); +#endif +#ifdef VIRTUAL + return OK; +#endif + + if (par2<=0) + retval=trim_with_level(countlim, im); + else + retval=trim_with_median(countlim,im); + + + return retval; +} + + +int trim_with_noise(int countlim, int nsigma, int im) +{ + + + int retval=OK, retval1=OK, retval2=OK; +#ifdef VERBOSE + printf("Trimming using noise\n"); +#endif +#ifdef VIRTUAL + return OK; +#endif + + /* threshold scan */ + +#ifdef VERBOSE + printf("chosing vthresh and vtrim....."); +#endif + retval1=choose_vthresh_and_vtrim(countlim,nsigma, im); + +#ifdef VERBOSE + printf("trimming with noise.....\n"); +#endif + retval2=trim_with_level(countlim, im); + +#ifdef DEBUGOUT + printf("done\n"); +#endif + if (retval1==OK && retval2==OK) + retval=OK; + else + retval=FAIL; + + return retval; + +} + +int trim_with_beam(int countlim, int nsigma, int im) //rpc +{ + + + int retval=OK, retval1=OK, retval2=OK; + + printf("Trimming using beam\n"); + //return OK; +#ifdef VIRTUAL + printf("Trimming using beam\n"); + return OK; +#endif + /* threshold scan */ +#ifdef DEBUGOUT + printf("chosing vthresh and vtrim....."); +#endif + + retval1=choose_vthresh_and_vtrim(countlim,nsigma,im); + retval2=trim_with_median(TRIM_DR, im); + +#ifdef DEBUGOUT + printf("done\n"); +#endif + + if (retval1==OK && retval2==OK) + retval=OK; + else + retval=FAIL; + + return retval; + +} + + +int trim_improve(int maxit, int par2, int im) //rpc +{ + + int retval=OK, retval1=OK, retval2=OK; + + +#ifdef VERBOSE + printf("Improve the trimming\n"); +#endif +#ifdef VIRTUAL + return OK; +#endif + + + if (par2!=0 && im==ALLMOD) + retval1=choose_vthresh(); + + retval2=trim_with_median(2*maxit+1, im); +#ifdef DEBUGOUT + printf("done\n"); +#endif + if (retval1==OK && retval2==OK) + retval=OK; + else + retval=FAIL; + + return retval; + +} + +int calcthr_from_vcal(int vcal) { + int thrmin; + //thrmin=140+3*vcal/5; + thrmin=180+3*vcal/5; + return thrmin; +} + +int calccal_from_vthr(int vthr) { + int vcal; + vcal=5*(vthr-140)/3; + return vcal; +} + +int choose_vthresh_and_vtrim(int countlim, int nsigma, int im) { + int retval=OK; +#ifdef MCB_FUNCS + int modma, modmi, nm; + int thr, thrstep=5, nthr=31; + + int *fifodata; + + double vthreshmean, vthreshSTDev; + int *thrmi, *thrma; + double c; + double b=BVTRIM; + double a=AVTRIM; + int *trim; + int ich, imod, ichan; + int nvalid=0; + u_int32_t *scan; + int ithr; + sls_detector_channel myChan; + + + + setFrames(1); + // setNMod(getNModBoard()); + + if (im==ALLMOD){ + modmi=0; + modma=nModX; + } else { + modmi=im; + modma=im+1; + } + nm=modma-modmi; + + trim=malloc(sizeof(int)*nChans*nChips*nModX); + thrmi=malloc(sizeof(int)*nModX); + thrma=malloc(sizeof(int)*nModX); + + + for (ich=0; ichcountlim && trim[ich]==-1) { +//commented out by dhanya trim[ich]=getDACbyIndexDACU(VTHRESH,imod); +#ifdef VERBOSE + // printf("yes: %d %d %d\n",ich,ithr,scan[ich]); +#endif + } +#ifdef VERBOSE + /* else { + printf("no: %d %d %d\n",ich,ithr,scan[ich]); + }*/ +#endif + } + } + free(scan); + } + + for (imod=modmi; imodthrmi[imod] && trim[ich]0) { + vthreshmean=vthreshmean/nvalid; + //commented out by dhanya vthreshSTDev=sqrt((vthreshSTDev/nvalid)-vthreshmean*vthreshmean); + } else { + vthreshmean=thrmi[imod]; + vthreshSTDev=nthr*thrstep; + printf("No valid channel for module %d\n",imod); + retval=FAIL; + } + +#ifdef DEBUGOUT + printf("module= %d nvalid = %d mean=%f RMS=%f\n",imod, nvalid, vthreshmean,vthreshSTDev); +#endif + // *vthresh=round(vthreshmean-nsigma*vthreshSTDev); + thr=(int)(vthreshmean-nsigma*vthreshSTDev); + if (thr<0 || thr>(DAC_DR-1)) { + thr=thrmi[imod]/2; + printf("Can't find correct threshold for module %d\n",imod); + retval=FAIL; + } +//commented out by dhanya initDACbyIndexDACU(VTHRESH,thr,imod); +#ifdef VERBOSE + printf("vthresh=%d \n",thr); +#endif + c=CVTRIM-2.*nsigma*vthreshSTDev/63.; + //commented out by dhanya thr=(int)((-b-sqrt(b*b-4*a*c))/(2*a)); + if (thr<500 || thr>(DAC_DR-1)) { + thr=750; + printf("Can't find correct trimbit size for module %d\n",imod); + retval=FAIL; + } + + //commented out by dhanya initDACbyIndexDACU(VTRIM,thr,imod); + +#ifdef VERBOSE + printf("vtrim=%d \n",thr); +#endif + + } + free(trim); + free(thrmi); + free(thrma); + +#endif + return retval; +} + + + + + +int trim_with_level(int countlim, int im) { + int ich, itrim, ichan, ichip, imod; + u_int32_t *scan; + int *inttrim; + int modma, modmi, nm; + int retval=OK; + int *fifodata; + sls_detector_channel myChan; + printf("trimming module number %d", im); + + +#ifdef MCB_FUNCS + setFrames(1); + // setNMod(getNModBoard()); + + if (im==ALLMOD){ + modmi=0; + modma=nModX; + } else { + modmi=im; + modma=im+1; + } + nm=modma-modmi; + + inttrim=malloc(sizeof(int)*nChips*nChans*nModX); + printf("countlim=%d\n",countlim); + for (ich=0; ichcountlim){ + inttrim[ich]=itrim; + if (scan[ich]>2*countlim && itrim>0) { + //if (scan[ich]>2*countlim || itrim==0) { + inttrim[ich]=itrim-1; + } +#ifdef VERBOSE + printf("Channel %d trimbit %d counted %d (%08x) countlim %d\n",ich,itrim,scan[ich],fifodata[ich],countlim); +#endif + } + } +#ifdef VERBOSE + /* else + printf("Channel %d trimbit %d counted %d countlim %d\n",ich,itrim,scan[ich],countlim);*/ +#endif + } + } + free(scan); + } + + for (imod=modmi; imod0) + direction[ichan]=1; + else + direction[ichan]=-1; + } + //commented out by dhanya vthresh=getDACbyIndexDACU(VTHRESH,imod); + if ( direction[ichan]!=-3) { + if (abs(diff)>abs(olddiff[ichan])) { + vthresh=vthresh-direction[ichan]; + if (vthresh>(DAC_DR-1)) { + vthresh=(DAC_DR-1); + printf("can't equalize threshold for module %d\n", ichan); + retval=FAIL; + } + if (vthresh<0) { + vthresh=0; + printf("can't equalize threshold for module %d\n", ichan); + retval=FAIL; + } + direction[ichan]=-3; + } else { + vthresh=vthresh+direction[ichan]; + olddiff[ichan]=diff; + change_flag=1; + } +//commented out by dhanya initDACbyIndex(VTHRESH,vthresh, ichan); + } + } + iteration++; + free(scan); + free(scan1); + } +#endif + return retval; +} + + + + + +int trim_with_median(int stop, int im) { + + + int retval=OK; + +#ifdef MCB_FUNCS + int ichan, imod, ichip, ich; + u_int32_t *scan, *scan1; + int *olddiff, *direction; + int med, diff; + int change_flag=1; + int iteration=0; + int me[nModX], me1[nModX]; + int modma, modmi, nm; + int trim; + int *fifodata; + + setFrames(1); + // setNMod(getNModBoard()); + + if (im==ALLMOD){ + modmi=0; + modma=nModX; + } else { + modmi=im; + modma=im+1; + } + nm=modma-modmi; + + olddiff=malloc(4*nModX*nChips*nChans); + direction=malloc(4*nModX*nChips*nChans); + for (imod=modmi; imod0) { + direction[ichan]=1; + } else { + direction[ichan]=-1; + } + } + if ( direction[ichan]!=-3) { + if (abs(diff)>abs(olddiff[ichan])) { + trim=getTrimbit(imod,ichip,ich)+direction[ichan]; + printf("%d old diff %d < new diff %d %d - trimbit %d\n",ichan, olddiff[ichan], diff, direction[ichan], trim); + direction[ichan]=-3; + } else { + trim=getTrimbit(imod,ichip,ich)-direction[ichan]; + olddiff[ichan]=diff; + change_flag=1; + } + if (trim>TRIM_DR) { + trim=63; + printf("can't trim channel %d chip %d module %d to trim %d\n",ich, ichip, imod, trim); + retval=FAIL; + } + if (trim<0) { + printf("can't trim channel %d chip %d module %d to trim %d\n",ich, ichip, imod, trim); + trim=0; + retval=FAIL; + } + initChannel(trim,0,0,1,0,0,imod); + } + } + } + } + iteration++; + free(scan); + free(scan1); + } + free(olddiff); + free(direction); +#endif + return retval; +} diff --git a/slsDetectorSoftware/jungfrauDetectorServer/trimming_funcs.h b/slsDetectorSoftware/jungfrauDetectorServer/trimming_funcs.h new file mode 100755 index 000000000..42ecea24a --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/trimming_funcs.h @@ -0,0 +1,20 @@ +#ifndef TRIMMING_FUNCS_H +#define TRIMMING_FUNCS_H + +#include "sls_detector_defs.h" + +int trim_fixed_settings(int countlim, int par2, int imod); +int trim_with_noise(int countlim, int nsigma, int imod); +int trim_with_beam(int countlim, int nsigma, int imod); +int trim_improve(int maxit, int par2, int imod); +int calcthr_from_vcal(int vcal); +int calccal_from_vthr(int vthr); +int choose_vthresh_and_vtrim(int countlim, int nsigma, int imod); + +int choose_vthresh(); +int trim_with_level(int countlim, int imod); +int trim_with_median(int stop, int imod); +int calcthr_from_vcal(int vcal); +int calccal_from_vthr(int vthr); + +#endif