From 0c038093d83f8e266f09f489cd93dda3dbc6ab3f Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Thu, 27 Aug 2020 16:08:47 +0300 Subject: 4 winders test; keep alive embedded==>management. procedures. --- .../Embedded_SW/Embedded/Modules/Thread/Thread.h | 2 +- .../Embedded/Modules/Thread/Thread_Winder.c | 22 +++- .../Embedded/Modules/Thread/Thread_ex.h | 7 +- .../Embedded/Modules/Thread/Thread_init.c | 64 +++++++++-- .../Embedded/Modules/Thread/Thread_print.c | 126 +++++++++++++++------ 5 files changed, 173 insertions(+), 48 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h index 1f2da8dc0..13032f49d 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h @@ -54,7 +54,7 @@ typedef struct #define MAX_THREAD_FEED_MOTORS (WINDER_MOTOR+1) -#define MAX_SYSTEM_DANCERS (HARDWARE_DANCER_TYPE__RightDancer+1) +#define MAX_SYSTEM_DANCERS NUM_OF_ROTENC extern TimerMotors_t ThreadMotorIdToMotorId[MAX_THREAD_MOTORS_NUM]; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index 1ce27115d..852389001 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -347,10 +347,14 @@ int flipflop = 0; uint32_t motspeed; float speedf; int WinderCalculation = 0; +int MotorOrder[4] = {HARDWARE_MOTOR_TYPE__MOTO_SCREW,SCREW_2_Motor,SCREW_3_Motor,SCREW_4_Motor}; + + uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) { //uint32_t Steps; double temp,tempScrewSpeed; + int i,tempmot; //double screw_horizontal_speed = 0; //double RotationsPerSecond; if (WinderMotorSpeedCounter++>=MAX_WINDER_SPEED_CALCULATION) @@ -369,6 +373,14 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) ScrewCurrentDirection = 1-ScrewCurrentDirection; CalculationDirectionChangeCounter++; +#ifdef FOUR_WINDERS + tempmot = MotorOrder[0]; + MotorOrder[0] = MotorOrder[1]; + MotorOrder[1] = MotorOrder[2]; + MotorOrder[2] = MotorOrder[3]; + MotorOrder[3] = tempmot; + //Report("order change" ,__FILE__,MotorOrder[0],MotorOrder[1],RpWarning,MotorOrder[2], 0); +#endif if (SampleWinding) return OK; //double calcsteps = (ScrewRunningTime/SYS_CLK_FREQ)*ScrewSpeed; @@ -707,11 +719,13 @@ void ScrewTimerInterrupt(int ARG0) MotorSetDirection (SCREW_3_Motor, ScrewCurrentDirection); MotorSetDirection (SCREW_4_Motor, ScrewCurrentDirection); #endif - MotorSetSpeedDirect(HARDWARE_MOTOR_TYPE__MOTO_SCREW,ScrewSpeed); #ifdef FOUR_WINDERS - MotorSetSpeedDirect (SCREW_2_Motor, ScrewSpeed); - MotorSetSpeedDirect (SCREW_3_Motor, ScrewSpeed); - MotorSetSpeedDirect (SCREW_4_Motor, ScrewSpeed); + MotorSetSpeedDirect(MotorOrder[0],ScrewSpeed); + MotorSetSpeedDirect (MotorOrder[1], ScrewSpeed); + MotorSetSpeedDirect (MotorOrder[2], ScrewSpeed); + MotorSetSpeedDirect (MotorOrder[3], ScrewSpeed); +#else + MotorSetSpeedDirect(HARDWARE_MOTOR_TYPE__MOTO_SCREW,ScrewSpeed); #endif #ifdef READ_SCREW_ENCODER Read_Screw_Encoder(); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h index 4339c5312..c3f181b52 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h @@ -9,7 +9,7 @@ #define WINDER_DANCER HARDWARE_DANCER_TYPE__LeftDancer #define POOLER_DANCER HARDWARE_DANCER_TYPE__MiddleDancer #define FEEDER_DANCER HARDWARE_DANCER_TYPE__RightDancer -#define NUM_OF_DANCERS (HARDWARE_DANCER_TYPE__RightDancer+1) +#define NUM_OF_DANCERS NUM_OF_ROTENC //} DANCER_ENUM; typedef enum threadMotorsEnum { @@ -17,6 +17,11 @@ typedef enum threadMotorsEnum DRYER_MOTOR, POOLER_MOTOR, WINDER_MOTOR, +#ifdef FOUR_WINDERS + WINDER_2_MOTOR, + WINDER_3_MOTOR, + WINDER_4_MOTOR, +#endif SCREW_MOTOR, MAX_THREAD_MOTORS_NUM }threadMotorsEnum; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c index bbb3e4040..1920db03a 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c @@ -151,6 +151,39 @@ uint32_t MotorPidRequestMessage(HardwarePidControl* request) temp = temp*3/2; } DancerStopActivityLimit[Motor_i] = temp/(2*PI*DancersCfg[ThreadMotorIdToDancerId[Motor_i]].armlength); +#ifdef FOUR_WINDERS + if (Motor_i == WINDER_MOTOR) + { + int j,winderMotorId; + for (j=0;j<3;j++) + { + winderMotorId = j+WINDER_2_MOTOR; + memcpy (&MotorsControl[winderMotorId],request,sizeof(HardwarePidControl)); + if (MotorsControl[winderMotorId].pvinputfilterfactormode > MAX_CONTROL_SAMPLES) + MotorsControl[winderMotorId].pvinputfilterfactormode = MAX_CONTROL_SAMPLES; + #ifdef TEST_LONGER_PID_THREAD + MotorsControl[Motor_i].pvinputfilterfactormode = 10; //test longer control + #endif + for (i = 0;i < (int)MotorsControl[winderMotorId].pvinputfilterfactormode; i++) + { + MotorSamples[winderMotorId][i] = 0; //reset the samples value for control beginning + MotorSpeedSamples[winderMotorId][i] = 0; + } + NormalizedErrorCoEfficient[winderMotorId] = (2*PI*DancersCfg[ThreadMotorIdToDancerId[Motor_i]].armlength); + temp = 1<<(DancersCfg[ThreadMotorIdToDancerId[Motor_i]].resolutionbits); + temp=(NORMAL_COEF_DIVIDER*(temp-1)*DancersCfg[ThreadMotorIdToDancerId[Motor_i]].maximalmovementmm); + NormalizedErrorCoEfficient[winderMotorId] = NormalizedErrorCoEfficient[winderMotorId] / temp; + // uint32_t MotorSamples[MAX_THREAD_MOTORS_NUM][MAX_CONTROL_SAMPLES]; + temp = 1<<(DancersCfg[ThreadMotorIdToDancerId[Motor_i]].resolutionbits); + temp = (temp*DancersCfg[ThreadMotorIdToDancerId[Motor_i]].maximalmovementmm);//*3/2); + if (Motor_i == WINDER_MOTOR) + { + temp = temp*3/2; + } + DancerStopActivityLimit[winderMotorId] = temp/(2*PI*DancersCfg[ThreadMotorIdToDancerId[Motor_i]].armlength); + } + } +#endif return OK; } char DancerConfigPath[50] = "0://SysInfo//DancCfg.cfg"; @@ -159,31 +192,37 @@ uint32_t StoreDancerConfigMessage() { uint32_t status = OK; // FRESULT Fresult = FR_OK; - HardwareConfiguration DancerConfig; + //HardwareConfiguration DancerConfig; HardwareDancer Dancers[MAX_SYSTEM_DANCERS]; // uint8_t* response_buffer; // size_t response_size = 0; int Dancer_i; - hardware_configuration__init(&DancerConfig); - DancerConfig.dancers = (HardwareDancer**)my_malloc(sizeof(HardwareDancer*)*MAX_SYSTEM_DANCERS); + //hardware_configuration__init(&DancerConfig); + //DancerConfig.dancers = (HardwareDancer**)my_malloc(sizeof(HardwareDancer*)*MAX_SYSTEM_DANCERS); for (Dancer_i = 0; Dancer_i < MAX_SYSTEM_DANCERS; Dancer_i++) { hardware_dancer__init(&Dancers[Dancer_i]); - DancerConfig.dancers[Dancer_i] = &Dancers[Dancer_i]; + //DancerConfig.dancers[Dancer_i] = &Dancers[Dancer_i]; Dancers[Dancer_i].has_zeropoint = true; Dancers[Dancer_i].hardwaredancertype = Dancer_i; Dancers[Dancer_i].has_hardwaredancertype = true; - DancerConfig.dancers[Dancer_i]->zeropoint=Control_Read_Dancer_Position(Dancer_i,0); - DancerConfig.n_dancers++; - DancersCfg[Dancer_i].zeropoint = DancerConfig.dancers[Dancer_i]->zeropoint; + Dancers[Dancer_i].zeropoint=Control_Read_Dancer_Position(Dancer_i,0); + //DancerConfig.n_dancers++; + DancersCfg[Dancer_i].zeropoint = Dancers[Dancer_i].zeropoint; + DancersCfg[Dancer_i].zeropoint = Control_Read_Dancer_Position(Dancer_i,0); } status |= MCU_E2PromProgram(EEPROM_STORAGE_DANCER_0,DancersCfg[0].zeropoint); status |= MCU_E2PromProgram(EEPROM_STORAGE_DANCER_1,DancersCfg[1].zeropoint); status |= MCU_E2PromProgram(EEPROM_STORAGE_DANCER_2,DancersCfg[2].zeropoint); Report("~~~~~~Store eeprom 0",__FILE__,DancersCfg[0].zeropoint,(int)DancersCfg[1].zeropoint,RpWarning,(int)DancersCfg[2].zeropoint,0); -/* +#ifdef FOUR_WINDERS + status |= MCU_E2PromProgram(EEPROM_STORAGE_DANCER_3,DancersCfg[HARDWARE_DANCER_3].zeropoint); + status |= MCU_E2PromProgram(EEPROM_STORAGE_DANCER_4,DancersCfg[HARDWARE_DANCER_4].zeropoint); + Report("~~~~~~Store eeprom 1",__FILE__,__LINE__,(int)DancersCfg[HARDWARE_DANCER_3].zeropoint,RpWarning,(int)DancersCfg[HARDWARE_DANCER_4].zeropoint,0); +#endif + /* response_buffer = my_malloc(hardware_configuration__get_packed_size(&DancerConfig)); if (response_buffer) { @@ -208,11 +247,18 @@ uint32_t LoadDancerConfigMessage() MCU_E2PromRead(EEPROM_STORAGE_DANCER_0,&DancersCfg[0].zeropoint); MCU_E2PromRead(EEPROM_STORAGE_DANCER_1,&DancersCfg[1].zeropoint); MCU_E2PromRead(EEPROM_STORAGE_DANCER_2,&DancersCfg[2].zeropoint); - +#ifdef FOUR_WINDERS + MCU_E2PromRead(EEPROM_STORAGE_DANCER_3,&DancersCfg[3].zeropoint); + MCU_E2PromRead(EEPROM_STORAGE_DANCER_4,&DancersCfg[4].zeropoint); +#endif status |= Report("Dancer 0 Store data eeprom ",__FILE__,__LINE__,0,RpWarning,(int)DancersCfg[0].zeropoint,0); status |= Report("Dancer 1 Store data eeprom ",__FILE__,__LINE__,1,RpWarning,(int)DancersCfg[1].zeropoint,0); status |= Report("Dancer 2 Store data eeprom ",__FILE__,__LINE__,2,RpWarning,(int)DancersCfg[2].zeropoint,0); +#ifdef FOUR_WINDERS + status |= Report("Dancer 3 Store data eeprom ",__FILE__,__LINE__,3,RpWarning,(int)DancersCfg[3].zeropoint,0); + status |= Report("Dancer 4 Store data eeprom ",__FILE__,__LINE__,4,RpWarning,(int)DancersCfg[4].zeropoint,0); +#endif return status; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index 79832120b..7ec0ed5e5 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -46,13 +46,15 @@ double CurrentControlledSpeed[MAX_THREAD_MOTORS_NUM] = {0}; -TimerMotors_t ThreadMotorIdToMotorId[MAX_THREAD_MOTORS_NUM] = {HARDWARE_MOTOR_TYPE__MOTO_RDRIVING,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,HARDWARE_MOTOR_TYPE__MOTO_LDRIVING,HARDWARE_MOTOR_TYPE__MOTO_WINDER,HARDWARE_MOTOR_TYPE__MOTO_SCREW}; #ifdef FOUR_WINDERS -Dancers_4_Winders ThreadMotorIdToDancerId[MAX_THREAD_MOTORS_NUM] = {FEEDER_DANCER,NUM_OF_DANCERS,POOLER_DANCER,WINDER_DANCER,NUM_OF_DANCERS}; +TimerMotors_t ThreadMotorIdToMotorId[MAX_THREAD_MOTORS_NUM] = {HARDWARE_MOTOR_TYPE__MOTO_RDRIVING,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,HARDWARE_MOTOR_TYPE__MOTO_LDRIVING,HARDWARE_MOTOR_TYPE__MOTO_WINDER,Winder_2_Motor,Winder_3_Motor,Winder_4_Motor,HARDWARE_MOTOR_TYPE__MOTO_SCREW}; +Dancers_4_Winders ThreadMotorIdToDancerId[MAX_THREAD_MOTORS_NUM] = {NUM_OF_DANCERS,NUM_OF_DANCERS,HARDWARE_DANCER_1,HARDWARE_DANCER_0,HARDWARE_DANCER_4,HARDWARE_DANCER_3,HARDWARE_DANCER_2,NUM_OF_DANCERS}; +uint32_t ControlIdtoMotorId [MAX_THREAD_MOTORS_NUM] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; #else +TimerMotors_t ThreadMotorIdToMotorId[MAX_THREAD_MOTORS_NUM] = {HARDWARE_MOTOR_TYPE__MOTO_RDRIVING,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,HARDWARE_MOTOR_TYPE__MOTO_LDRIVING,HARDWARE_MOTOR_TYPE__MOTO_WINDER,HARDWARE_MOTOR_TYPE__MOTO_SCREW}; HardwareDancerType ThreadMotorIdToDancerId[MAX_THREAD_MOTORS_NUM] = {FEEDER_DANCER,NUM_OF_DANCERS,POOLER_DANCER,WINDER_DANCER,NUM_OF_DANCERS}; -#endif uint32_t ControlIdtoMotorId [MAX_THREAD_MOTORS_NUM] = {0xFF,0xFF,0xFF,0xFF,0xFF}; +#endif uint32_t SpeedControlId=0xFF; uint32_t PoolerSpeedControlId=0xFF; @@ -432,7 +434,10 @@ uint32_t ThreadControlSpeedReadFunction(uint32_t IfIndex, uint32_t ReadValue) uint16_t BreakSensorCounter = 0; uint16_t BreakSensorLatchCounter = 0; char TMessage[150]; - +#ifdef FOUR_WINDERS +char ATMessage[MAX_THREAD_MOTORS_NUM][150]; +int c = 0; +#endif uint32_t checkBreakSensor(uint32_t index) { if (BreakSensorenabled == true) @@ -550,7 +555,6 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) //#define MAX_CONTROL_SAMPLES 6 //extern uint32_t MotorSamples[MAX_THREAD_MOTORS_NUM][MAX_CONTROL_SAMPLES]; //extern int MotorSamplePointer[MAX_THREAD_MOTORS_NUM]; - //read value is the dancer angle int i,index=MAX_THREAD_MOTORS_NUM; int len; @@ -621,6 +625,29 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) //pooler dancer is right sided: data is opposite TranslatedReadValue = (-1*TranslatedReadValue); } +#ifdef FOUR_WINDERS + if (index == WINDER_MOTOR) + { + c++; + } + if (index == WINDER_2_MOTOR) + { + c++; + } + if (index == WINDER_3_MOTOR) + { + c++; + } + if (index == WINDER_4_MOTOR) + { + c++; + } + if ((index == WINDER_2_MOTOR)||(index == WINDER_3_MOTOR)) + { + //pooler dancer is right sided: data is opposite + TranslatedReadValue = (-1*TranslatedReadValue); + } +#endif if (index == POOLER_MOTOR) { //pooler dancer is right sided: data is opposite @@ -650,6 +677,10 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) ThreadControlActive = false; //MotorGetStatusFromFPGA(ThreadMotorIdToMotorId[index]); JobEndReason = JOB_WINDER_DANCER_FAIL+DancerId; +#ifdef FOUR_WINDERS + if (DancerId>HARDWARE_DANCER_2) + JobEndReason = JOB_WINDER_DANCER_FAIL+HARDWARE_DANCER_0; +#endif SendJobProgress(0.0,0,false, TMessage); //EndState(CurrentJob,TMessage ); SendSegmentFail(); @@ -702,24 +733,26 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) }*`/ }*/ calculated_speed = (1-MotorControlConfig[index].m_calculatedError)*OriginalMotorSpd_2PPS[index]; - if (index != WINDER_MOTOR) + if (index < WINDER_MOTOR) calculated_speed = calculated_speed*InitialDryerSpeed/OriginalMotorSpd_2PPS[DRYER_MOTOR]; //calculated_speed = (1-MotorControlConfig[index].m_calculatedError)*CurrentControlledSpeed[index]; - if (0)//(JobCounter % 1000 == 0) - //if (JobCounter < 100)//(FirstCalcInJob == true) + //if (0)//(JobCounter % 1000 == 0) +#ifdef FOUR_WINDERS + if (JobCounter % 500 < 4)//(FirstCalcInJob == true) { - if (index == FEEDER_MOTOR) + if (index >= WINDER_MOTOR) { // FirstCalcInJob = false; - len = usnprintf(TMessage, 150, "read %d avg %d error(6) %d integral(9) %d,delta(9) %d, calc(3) %d speed %d %d", + len = usnprintf(ATMessage[index], 150, "index %d read %d avg %d error(6) %d integral(9) %d,delta(9) %d, calc(3) %d speed %d %d",index, TranslatedReadValue,avreageSampleValue,(int)(MotorControlConfig[index].m_mesuredParam*1000000), (int)(MotorControlConfig[index].m_integral*1000000000),(int)((MotorControlConfig[index].m_mesuredParam*MotorControlConfig[index].m_params.dt)*1000000000), (int)(MotorControlConfig[index].m_calculatedError*1000),(int)calculated_speed, (int)(InitialDryerSpeed*100/OriginalMotorSpd_2PPS[DRYER_MOTOR])); - ReportWithPackageFilter(ThreadFilter,TMessage,__FILE__,MotorSamplePointer[index],JobCounter,RpError,ReadValue,0); + ReportWithPackageFilter(ThreadFilter,ATMessage[index],__FILE__,MotorSamplePointer[index],JobCounter,RpError,ReadValue,0); } + JobCounter++; } - +#endif #ifndef TEST_PID_THREAD if (fabs(calculated_speed-CurrentControlledSpeed[index])> MotorControlConfig[index].m_ingnoreValue) #else @@ -735,14 +768,6 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) }*/ CurrentControlledSpeed[index] = calculated_speed; MotorSetSpeed(ThreadMotorIdToMotorId[index], calculated_speed); -#ifdef FOUR_WINDERS - if (index == WINDER_MOTOR) - { - MotorSetSpeed(Winder_2_Motor, calculated_speed); - MotorSetSpeed(Winder_3_Motor, calculated_speed); - MotorSetSpeed(Winder_4_Motor, calculated_speed); - } -#endif } else { @@ -832,11 +857,32 @@ uint32_t HandleJobThreadControlParameters(ThreadParameters* ThreadParams) MotorControlConfig[POOLER_MOTOR].m_params.Kd = ThreadParams->pullerd; if(ThreadParams->winderp) + { MotorControlConfig[WINDER_MOTOR].m_params.Kp = ThreadParams->winderp; +#ifdef FOUR_WINDERS + MotorControlConfig[WINDER_2_MOTOR].m_params.Kp = ThreadParams->winderp; + MotorControlConfig[WINDER_3_MOTOR].m_params.Kp = ThreadParams->winderp; + MotorControlConfig[WINDER_4_MOTOR].m_params.Kp = ThreadParams->winderp; +#endif + } if(ThreadParams->winderi) + { MotorControlConfig[WINDER_MOTOR].m_params.Ki = ThreadParams->winderi; +#ifdef FOUR_WINDERS + MotorControlConfig[WINDER_2_MOTOR].m_params.Ki = ThreadParams->winderi; + MotorControlConfig[WINDER_3_MOTOR].m_params.Ki = ThreadParams->winderi; + MotorControlConfig[WINDER_4_MOTOR].m_params.Ki = ThreadParams->winderi; +#endif + } if(ThreadParams->winderd) + { MotorControlConfig[WINDER_MOTOR].m_params.Kd = ThreadParams->winderd; +#ifdef FOUR_WINDERS + MotorControlConfig[WINDER_2_MOTOR].m_params.Kd = ThreadParams->winderd; + MotorControlConfig[WINDER_3_MOTOR].m_params.Kd = ThreadParams->winderd; + MotorControlConfig[WINDER_4_MOTOR].m_params.Kd = ThreadParams->winderd; +#endif + } ReportWithPackageFilter(ThreadFilter,"Rockers activity",__FILE__,__LINE__,(int)Thread_Rockers_Bypass,RpWarning,(int)ThreadParams->bypassrockers,0); if(ThreadParams->bypassrockers) Thread_Rockers_Bypass = true; @@ -1032,13 +1078,14 @@ uint32_t ThreadPrepareState(void *JobDetails) IntersegmentLength = JobTicket->intersegmentlength; PrepareWaitCount = 0; +#ifndef FOUR_WINDERS status = ThreadPrepare_Tension (HARDWARE_DANCER_TYPE__LeftDancer, windertension); ReportWithPackageFilter(ThreadFilter,"ThreadPrepare_Tension Winder",__FILE__,HARDWARE_DANCER_TYPE__LeftDancer,PrepareWaitCount,RpWarning,(int)windertension,0); status = ThreadPrepare_Tension (HARDWARE_DANCER_TYPE__MiddleDancer, pullertension); ReportWithPackageFilter(ThreadFilter,"ThreadPrepare_Tension Puller",__FILE__,HARDWARE_DANCER_TYPE__MiddleDancer,PrepareWaitCount,RpWarning,(int)pullertension,0); status = ThreadPrepare_Tension (HARDWARE_DANCER_TYPE__RightDancer, feedertension); ReportWithPackageFilter(ThreadFilter,"ThreadPrepare_Tension Feeder",__FILE__,HARDWARE_DANCER_TYPE__RightDancer,PrepareWaitCount,RpWarning,(int)feedertension,0); - +#endif FirstCalcInJob = true; if(MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].speedmaster == false) { @@ -1098,6 +1145,11 @@ uint32_t ThreadPrepareState(void *JobDetails) { HW_Motor_Id = ThreadMotorIdToMotorId[Motor_i]; Pid_Id = Motor_i;/*ThreadMotorIdToControlId[Motor_i];*/ +#ifdef FOUR_WINDERS + if (Motor_i == WINDER_2_MOTOR) Pid_Id = WINDER_MOTOR; + if (Motor_i == WINDER_3_MOTOR) Pid_Id = WINDER_MOTOR; + if (Motor_i == WINDER_4_MOTOR) Pid_Id = WINDER_MOTOR; +#endif MotorControlConfig[Motor_i].m_params.MAX = 1; MotorControlConfig[Motor_i].m_params.MIN = MotorsControl[Pid_Id].outputproportionalpowerlimit*-1; MotorControlConfig[Motor_i].m_params.Kd = MotorsControl[Pid_Id].derivativetime; @@ -1116,7 +1168,6 @@ uint32_t ThreadPrepareState(void *JobDetails) MotorControlConfig[Motor_i].m_preError = 0; MotorControlConfig[Motor_i].m_SetParam = 0;//need to update SetParams on presegment stage - HandleJobThreadControlParameters(JobTicket->threadparameters); //OVERRIDES CONFIGURATION PARAMETERS!!! temp_dt = MotorControlConfig[Motor_i].m_params.dt/0.001; MotorTiming[Motor_i] = (int)temp_dt; @@ -1208,9 +1259,26 @@ uint32_t ThreadPrepareState(void *JobDetails) } #ifndef TEST_PID_THREAD ControlIdtoMotorId[Motor_i] = AddControlCallback(NULL,ThreadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+Motor_i),ThreadMotorIdToDancerId[Motor_i],Motor_i); +#endif + } +#ifdef FOUR_WINDERS + if ((Motor_i == WINDER_2_MOTOR)||(Motor_i == WINDER_3_MOTOR)||(Motor_i == WINDER_4_MOTOR)) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will n//ot be controlled + { + ReportWithPackageFilter(ThreadFilter,"Winder 2/3/4 Control",__FILE__,Motor_i,MotorControlConfig[WINDER_MOTOR].m_params.Kp,RpWarning,MotorControlConfig[WINDER_MOTOR].m_params.Ki,0); + if (ControlIdtoMotorId[Motor_i] != 0xFF) + { + if(RemoveControlCallback(ControlIdtoMotorId[Motor_i],ThreadControlCBFunction)!=OK) + ReportWithPackageFilter(ThreadFilter,"Remove Control Failed.",__FILE__,__LINE__,(int)Motor_i,RpError,(int)PoolerSpeedControlId,0); + CurrentControlledSpeed[Motor_i] = 0; + ControlIdtoMotorId[Motor_i] = 0xFF; + } +#ifndef TEST_PID_THREAD + ControlIdtoMotorId[Motor_i] = AddControlCallback(NULL,ThreadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+Motor_i),ThreadMotorIdToDancerId[Motor_i],Motor_i); +#endif #endif } } + HandleJobThreadControlParameters(JobTicket->threadparameters); //OVERRIDES CONFIGURATION PARAMETERS!!! #ifdef TEST_PID_THREAD testDancersControl(); @@ -1274,7 +1342,7 @@ uint32_t UpdatePidDuringRun(HardwarePidControl *request) void SetOriginMotorSpeed(float process_speed) { int Motor_i, HW_Motor_Id; - for (Motor_i = 0; Motor_i <= WINDER_MOTOR; Motor_i++) + for (Motor_i = 0; Motor_i < SCREW_MOTOR; Motor_i++) { HW_Motor_Id = ThreadMotorIdToMotorId[Motor_i]; //(Speed*uStep*PPR)/((2*PI*motor_Radius) @@ -1509,7 +1577,7 @@ char Endstr[150]; PoolerSpeedControlId = 0xFF; } - for ( Motor_i = 0;Motor_i <= WINDER_MOTOR;Motor_i++) + for ( Motor_i = 0;Motor_i < SCREW_MOTOR;Motor_i++) { if (ControlIdtoMotorId[Motor_i] != 0xFF) { @@ -1522,17 +1590,9 @@ char Endstr[150]; } Task_sleep(100); - for ( Motor_i = 0;Motor_i <= WINDER_MOTOR;Motor_i++) + for ( Motor_i = 0;Motor_i < SCREW_MOTOR;Motor_i++) { MotorStop(ThreadMotorIdToMotorId[Motor_i],Hard_Hiz); -#ifdef FOUR_WINDERS - if (Motor_i == WINDER_MOTOR) - { - MotorStop(Winder_2_Motor, Hard_Hiz); - MotorStop(Winder_3_Motor, Hard_Hiz); - MotorStop(Winder_4_Motor, Hard_Hiz); - } -#endif } MotorStop(HARDWARE_MOTOR_TYPE__MOTO_RLOADING,Hard_Hiz); -- cgit v1.3.1 From 916b852f7ad8018f883f3ae8a5b119be0cc12883 Mon Sep 17 00:00:00 2001 From: Ronen Sberlo Date: Sun, 30 Aug 2020 11:10:48 +0300 Subject: Tunnel entrances temperature read --- .../Embedded/Modules/Diagnostics/Diagnostics.c | 18 +++++---- .../Embedded/Modules/Heaters/Heaters_print.c | 47 +++++++++++++++++++++- .../Embedded/Modules/Thread/Thread_Winder.c | 3 +- .../Embedded/Modules/Thread/Thread_print.c | 2 +- 4 files changed, 58 insertions(+), 12 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index 18793ce28..2ebd21dd5 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -494,14 +494,14 @@ void CopyTemperaturesToMonitor(void) HeaterCounterIndex[HEATER_TYPE__HeadCoverHeater1]; DiagnosticsMonitor.n_headcoverheater2temperature = HeaterCounterIndex[HEATER_TYPE__HeadCoverHeater2]; - DiagnosticsMonitor.headzone4temperature = - HeaterTemperature[HEATER_TYPE__HeaterZone4]; - DiagnosticsMonitor.headzone6temperature = - HeaterTemperature[HEATER_TYPE__HeaterZone6]; - DiagnosticsMonitor.n_headzone4temperature = - HeaterCounterIndex[HEATER_TYPE__HeaterZone4]; - DiagnosticsMonitor.n_headzone6temperature = - HeaterCounterIndex[HEATER_TYPE__HeaterZone6]; + DiagnosticsMonitor.headzone11temperature = + HeaterTemperature[HEATER_TYPE__HeaterZone11]; + DiagnosticsMonitor.headzone12temperature = + HeaterTemperature[HEATER_TYPE__HeaterZone12]; + DiagnosticsMonitor.n_headzone11temperature = + HeaterCounterIndex[HEATER_TYPE__HeaterZone11]; + DiagnosticsMonitor.n_headzone12temperature = + HeaterCounterIndex[HEATER_TYPE__HeaterZone12]; DiagnosticsMonitor.n_headblower1airflow = HeaterCounterIndex[HEATER_TYPE__HeaterZone5]; DiagnosticsMonitor.n_headblower2airflow = HeaterCounterIndex[HEATER_TYPE__HeaterZone7]; @@ -960,6 +960,8 @@ void DiagnosticOneSecCollection(void) //DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone6, MillisecGetTemperatures(HEAD_PT100_ZONE_6_0X84_1)); DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone7, MillisecGetTemperatures(HEAD_PT100_ZONE_7_0X86_0)); //DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone8, MillisecGetTemperatures(HEAD_PT100_ZONE_8_0X86_1)); + DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone11, MillisecGetTemperatures(HEAD_PT100_ZONE_11_0X8A_0)); + DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone12, MillisecGetTemperatures(HEAD_PT100_ZONE_12_0X8A_1)); } DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DRYER_TEMP1)); DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DRYER_TEMP2)); diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index 8fe3de207..54e552684 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -119,7 +119,7 @@ void initializeArrays(void) HeaterId2PT100Id[i] = 0xFF; HeaterId2CurrentId[i] = NUM_OF_CURRENT_HEATERS; } - if (Head_Type > HEAD_TYPE_FLAT_WITHOUT_CARD) + if (Head_Type == HEAD_TYPE_FLAT) { HeaterId2PT100Id[HEATER_TYPE__DryerAirHeater] = DRYER_AIR_PT100; HeaterId2PT100Id[HEATER_TYPE__DryerMainHeater] = DRYER_MAIN_PT100; @@ -160,7 +160,7 @@ void initializeArrays(void) HeaterId2CurrentId[HEATER_TYPE__HeadCoverHeater2] = HEAD_CURRENT_HTOT_1; } - else + else if (Head_Type == HEAD_TYPE_FLAT_WITHOUT_CARD) { HeaterId2PT100Id[HEATER_TYPE__DryerAirHeater] = DRYER_AIR_PT100; HeaterId2PT100Id[HEATER_TYPE__DryerMainHeater] = DRYER_MAIN_PT100; @@ -191,7 +191,50 @@ void initializeArrays(void) HeaterId2CurrentId[HEATER_TYPE__HeaterZone5] = HEATER_HEAD_CURRENT_ZONE_5_6; HeaterId2CurrentId[HEATER_TYPE__HeaterZone6] = HEATER_HEAD_CURRENT_ZONE_5_6; HeaterId2CurrentId[HEATER_TYPE__MixerHeater] = HEATER_MIXCHIP_CURRENT; + } + else if (Head_Type == HEAD_TYPE_ARC) + { + HeaterId2PT100Id[HEATER_TYPE__DryerAirHeater] = DRYER_AIR_PT100; + HeaterId2PT100Id[HEATER_TYPE__DryerMainHeater] = DRYER_MAIN_PT100; + HeaterId2PT100Id[HEATER_TYPE__DryerSecondaryHeater] = DRYER_SECONDARY_PT100; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone1] = HEAD_PT100_ZONE_1_0X80_0; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone2] = HEAD_PT100_ZONE_2_0X80_1; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone3] = HEAD_PT100_ZONE_3_0X82_0; + /* + HeaterId2PT100Id[HEATER_TYPE__HeaterZone4] = HEAD_PT100_ZONE_4_0X82_1; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone5] = HEAD_PT100_ZONE_5_0X84_0; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone6] = HEAD_PT100_ZONE_6_0X84_1; + HeaterId2PT100Id[HEATER_TYPE__MixerHeater] = HEAD_PT100_MIXER_0X8E_0; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone7] = HEAD_PT100_ZONE_7_0X86_0; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone8] = HEAD_PT100_ZONE_8_0X86_1; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone9] = HEAD_PT100_ZONE_9_0X88_0; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone10] = HEAD_PT100_ZONE_10_0X88_1; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone11] = HEAD_PT100_ZONE_11_0X8A_0; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone12] = HEAD_PT100_ZONE_12_0X8A_1; + */ + HeaterId2PT100Id[HEATER_TYPE__HeadCoverHeater1] = HEAD_PT100_ZONE_11_0X8A_0; //HEAD_PT100_AIR_HEATER_2_0X8C_1; + HeaterId2PT100Id[HEATER_TYPE__HeadCoverHeater2] = HEAD_PT100_ZONE_12_0X8A_1; //HEAD_PT100_AIR_HEATER_1_0X8C_0 ; + HeaterId2CurrentId[HEATER_TYPE__DryerAirHeater] = NUM_OF_CURRENT_HEATERS; + HeaterId2CurrentId[HEATER_TYPE__DryerMainHeater] = HEATER_DRYER_CURRENT_1; + HeaterId2CurrentId[HEATER_TYPE__DryerSecondaryHeater] = HEATER_DRYER_CURRENT_2; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone1] = HEAD_CURRENT_ZONE_1; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone2] = HEAD_CURRENT_ZONE_2; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone3] = HEAD_CURRENT_ZONE_3; + /* + HeaterId2CurrentId[HEATER_TYPE__HeaterZone4] = HEAD_CURRENT_ZONE_4; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone5] = HEAD_CURRENT_ZONE_5; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone6] = HEAD_CURRENT_ZONE_6; + HeaterId2CurrentId[HEATER_TYPE__MixerHeater] = HEAD_CURRENT_MIXER; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone7] = HEAD_CURRENT_ZONE_7; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone8] = HEAD_CURRENT_ZONE_8; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone9] = HEAD_CURRENT_ZONE_9; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone10] = HEAD_CURRENT_ZONE_10; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone11] = HEAD_CURRENT_ZONE_11; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone12] = HEAD_CURRENT_ZONE_12; + */ + HeaterId2CurrentId[HEATER_TYPE__HeadCoverHeater1] = HEAD_CURRENT_HTIN_1; + HeaterId2CurrentId[HEATER_TYPE__HeadCoverHeater2] = HEAD_CURRENT_HTOT_1; } } uint32_t DryerInternalPT100Id = DRYER_AIR_PT100; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index 852389001..2b6492dab 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -347,8 +347,9 @@ int flipflop = 0; uint32_t motspeed; float speedf; int WinderCalculation = 0; +#ifdef FOUR_WINDERS int MotorOrder[4] = {HARDWARE_MOTOR_TYPE__MOTO_SCREW,SCREW_2_Motor,SCREW_3_Motor,SCREW_4_Motor}; - +#endif uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) { diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index 7ec0ed5e5..ab1ab77e6 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -1274,9 +1274,9 @@ uint32_t ThreadPrepareState(void *JobDetails) } #ifndef TEST_PID_THREAD ControlIdtoMotorId[Motor_i] = AddControlCallback(NULL,ThreadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+Motor_i),ThreadMotorIdToDancerId[Motor_i],Motor_i); -#endif #endif } +#endif } HandleJobThreadControlParameters(JobTicket->threadparameters); //OVERRIDES CONFIGURATION PARAMETERS!!! -- cgit v1.3.1 From e1532f3ce008c7c3d149f89fa80e74962d8cf2ca Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 1 Sep 2020 08:57:54 +0300 Subject: tests and prints for thread parameters in jog bugs --- Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c | 12 +++++++++++- .../Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c | 5 ++++- 2 files changed, 15 insertions(+), 2 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index ab1ab77e6..275e7e5b7 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -842,6 +842,16 @@ uint32_t HandleJobThreadControlParameters(ThreadParameters* ThreadParams) { return OK; } + if((ThreadParams->bypassrockers != true)&&(ThreadParams->bypassrockers != false)) + { + ReportWithPackageFilter(ThreadFilter,"incorrect Thread parameters ",__FILE__,__LINE__,(int)ThreadParams->feederp,RpWarning,(int)ThreadParams->bypassrockers,0); + return OK; + } + if ((ThreadParams->feederp>100000)||(ThreadParams->feederi>100000)) + { + ReportWithPackageFilter(ThreadFilter,"incorrect Thread parameters ",__FILE__,__LINE__,(int)ThreadParams->feederp,RpWarning,(int)ThreadParams->bypassrockers,0); + return OK; + } if(ThreadParams->feederp) MotorControlConfig[FEEDER_MOTOR].m_params.Kp = ThreadParams->feederp; if(ThreadParams->feederi) @@ -1168,6 +1178,7 @@ uint32_t ThreadPrepareState(void *JobDetails) MotorControlConfig[Motor_i].m_preError = 0; MotorControlConfig[Motor_i].m_SetParam = 0;//need to update SetParams on presegment stage + HandleJobThreadControlParameters(JobTicket->threadparameters); //OVERRIDES CONFIGURATION PARAMETERS!!! temp_dt = MotorControlConfig[Motor_i].m_params.dt/0.001; MotorTiming[Motor_i] = (int)temp_dt; @@ -1278,7 +1289,6 @@ uint32_t ThreadPrepareState(void *JobDetails) } #endif } - HandleJobThreadControlParameters(JobTicket->threadparameters); //OVERRIDES CONFIGURATION PARAMETERS!!! #ifdef TEST_PID_THREAD testDancersControl(); diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c index 14da2e78a..da2e416b8 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c @@ -962,7 +962,10 @@ void JobRequestFunc(MessageContainer* requestContainer) { Report("Job Request ",__FILE__,__LINE__,Ticket->processparameters->dyeingspeed,RpWarning,n_segments, Ticket->intersegmentlength); memcpy(&Configured,&JobConfigured,sizeof(JobConfigured)); - memcpy(&SavedThreadParameters,&Ticket->threadparameters,sizeof(SavedThreadParameters)); + if (Ticket->threadparameters) + memcpy(&SavedThreadParameters,&Ticket->threadparameters,sizeof(SavedThreadParameters)); + else + Report("Job Request empty thread parameters ",__FILE__,__LINE__,Ticket->processparameters->dyeingspeed,RpWarning,n_segments, Ticket->intersegmentlength); StartJob(CurrentJob); } } -- cgit v1.3.1 From b2977e51824febd45cfb7d33e8c4c8aa6514666c Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Wed, 2 Sep 2020 10:34:05 +0300 Subject: version 1.4.6.44 p1 IDS pre-run and remove integral on thread loading feeder control --- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- Software/Embedded_SW/Embedded/Modules/IDS/IDS.h | 4 + .../Embedded_SW/Embedded/Modules/IDS/IDS_maint.c | 10 +- .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 103 +++++++++++---------- .../Embedded/Modules/Thread/ThreadLoad.c | 2 +- .../stubs/embeddedparametersbuild_w_cleaning.cs | 4 +- 6 files changed, 69 insertions(+), 56 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c index 64002276c..bf2c4e98d 100644 --- a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c +++ b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c @@ -20,7 +20,7 @@ typedef struct } TangoVersion_t; -TangoVersion_t _gTangoVersion = {1,4,6,43}; +TangoVersion_t _gTangoVersion = {1,4,6,44}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//e diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h index ee308ce62..1c17c4f6b 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h @@ -13,6 +13,10 @@ extern double DispenserPreparePressure ; extern uint32_t DispenserPrepareTimeout ; extern uint32_t DispenserPrepareTimeLag ; extern uint32_t InitialDispenserSpeed; +extern double InitialDispenserPressure; +extern uint32_t InitialDispenserTimeout; + + extern uint32_t DispenserIdToMotorId[MAX_SYSTEM_DISPENSERS]; extern float DispenserPressure[MAX_SYSTEM_DISPENSERS]; diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c index 663a6713f..79418a8d8 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c @@ -72,8 +72,8 @@ bool PrimingActive[MAX_SYSTEM_DISPENSERS] = {false,false,false,false,false,false uint32_t DispenserHomingControlId[MAX_SYSTEM_DISPENSERS] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; uint32_t DispenserBacklashControlId[MAX_SYSTEM_DISPENSERS] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; uint32_t DispenserHomingTime[MAX_SYSTEM_DISPENSERS] = {0,0,0,0,0,0,0,0}; -#define INITIAL_DISPENSER_PRESSURE 2.10 -#define INITIAL_DISPENSER_TIMEOUT_LIMIT 60000 +#define INITIAL_DISPENSER_PRESSURE 3.85 +#define INITIAL_DISPENSER_TIMEOUT_LIMIT 120000 #define INITIAL_DISPENSER_TIMEOUT 100 #define INITIAL_DISPENSER_SPEED 1000 @@ -105,8 +105,10 @@ void IDS_Dispenser_SetAutoHoming_Config(AutoHoming_Config_enum Config) void IDS_Dispenser_SetBackLashValues(double initialdispenserpressure, uint32_t initialdispensertimeout, uint32_t initialdispensertimelag, uint32_t initialdispenserspeed) { - InitialDispenserPressure = initialdispenserpressure; - InitialDispenserTimeout = initialdispensertimeout; + if (initialdispenserpressure>2) + InitialDispenserPressure = initialdispenserpressure; + if (initialdispensertimeout>70000) + InitialDispenserTimeout = initialdispensertimeout; InitialDispenserTimeLag = initialdispensertimelag; InitialDispenserSpeed = initialdispenserspeed; diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index b15f70267..327d80eb1 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -514,6 +514,37 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue) char IdMessage[100]; int SegmentPrepareWFCFCounter = 0; bool pressureReady = false,endOfPrepareWCF = false; + +bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,double pressure) +{ + TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[DispenserId]; + float updatedSpeed,tempSpeed; + + if (pressure > RefMaxPressure*1.03) + { + tempSpeed = CurrentDispenserSpeed[DispenserId]; + //updatedSpeed = (tempSpeed * 0.992 > 100) ? tempSpeed * 0.992 : 100; + updatedSpeed = tempSpeed*0.98; + MotorSetSpeed(HW_Motor_Id, updatedSpeed); + CurrentDispenserSpeed[DispenserId] = updatedSpeed; + ReportWithPackageFilter(IDSFilter,"IDS decrease speed",__FILE__,DispenserId,(int)updatedSpeed,RpWarning,(int)(pressure*100),0); + //return true; //ready + } + else if (pressure < RefMaxPressure*0.97) + { + tempSpeed = CurrentDispenserSpeed[DispenserId]; + if (tempSpeed<50) tempSpeed = 50; + updatedSpeed = (tempSpeed * 1.02 < InitialDispenserSpeed) ? tempSpeed * 1.02 : InitialDispenserSpeed; + MotorSetSpeed(HW_Motor_Id, updatedSpeed); + CurrentDispenserSpeed[DispenserId] = updatedSpeed; + ReportWithPackageFilter(IDSFilter,"IDS increase speed",__FILE__,DispenserId,(int)updatedSpeed,RpWarning,(int)(pressure*100),0); + //return false; //not ready + } + if ((pressure>RefMaxPressure)&&(pressure<(RefMaxPressure+0.1))) + return true; + return false; +} + //******************************************************************************************************************** uint32_t IDS_Prepare_Callback(uint32_t DispenserId, uint32_t ReadValue) { @@ -525,6 +556,7 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue) //set the speed only before the first segment, speed is constant accros job int Dispenser_i,n_dispensers; double segmentfirst_speed; + double pressure; //REPORT_MSG((int)DispenserPrepareControlId, "Prepare Callback"); @@ -532,75 +564,50 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue) if (pressureReady == false) { - if (Special_Dispensers == false) + if (DispenserBuildTimeCounter<(2*eOneSecond)) { - if (DispenserBuildTimeCounter<(2*eOneSecond)) + for (i = 0; i < MAX_DYE_DISPENSERS; i++) { - for (i = 0; i < MAX_DYE_DISPENSERS; i++) - { - DispenserTotalPrepareSteps[i]+=(CurrentDispenserSpeed[i]*PRESSURE_READ_TIME_GAP/eOneSecond); - DispenserLastMovementDown[i] = false; - } - //REPORT_MSG(DispenserBuildTimeCounter,"waiting 2 seconds for pressure changes"); - return OK; + DispenserTotalPrepareSteps[i]+=(CurrentDispenserSpeed[i]*PRESSURE_READ_TIME_GAP/eOneSecond); + DispenserLastMovementDown[i] = false; } + //REPORT_MSG(DispenserBuildTimeCounter,"waiting 2 seconds for pressure changes"); + return OK; } for (i = 0; i < MAX_DYE_DISPENSERS; i++) { + pressure = GetDispenserPressure(i); //IDS_StopHomeDispenser(i); if (DispenserUsedInJob[i] == true) //we actually should check for all dispensers { DispenserTotalPrepareSteps[i]+=(CurrentDispenserSpeed[i]*PRESSURE_READ_TIME_GAP/eOneSecond); - HW_Motor_Id = DispenserIdToMotorId[i]; - if (GetDispenserPressure(i) > DispenserPreparePressure*1.05) +//#ifdef DISPENSER_UP_MOVEMENT + if (DispenserTotalPrepareSteps[i]120000) -#endif - { - NumofReadyDispensers++; - ReportWithPackageFilter(IDSFilter,"Dispenser total prepare steps ready",__FILE__,DispenserTotalPrepareSteps[i],(int)(DispenserPreparePressure*100),RpWarning,IDS_Dispenser_Data[i].consumedinnanolitter,0); - } - if (Special_Dispensers == true) - { - MotorStop(HW_Motor_Id, Hard_Hiz); - CurrentDispenserSpeed[i] = 0; - //ReportWithPackageFilter(IDSFilter,"IDS stopped ready",__FILE__,i,(int)(DispenserPreparePressure*100),RpWarning,(int)NumofReadyDispensers,0); - } - else - { - tempSpeed = CurrentDispenserSpeed[i]; - updatedSpeed = (tempSpeed*0.992>100)?tempSpeed*0.992:100; - MotorSetSpeed(HW_Motor_Id, updatedSpeed); - CurrentDispenserSpeed[i] = updatedSpeed; - //ReportWithPackageFilter(IDSFilter,"IDS reduce speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); - } + AdjustDispenserSpeedToPressure(i,InitialDispenserPressure,pressure); + } + else if (pressure > DispenserPreparePressure*1.2) + { + MotorStop(HW_Motor_Id, Hard_Hiz); + CurrentDispenserSpeed[i] = 1; } else { - if (Special_Dispensers == true) - { - tempSpeed = (DispenserPreparePressure-GetDispenserPressure(i))*InitialDispenserSpeed; - if (tempSpeed<300) - tempSpeed = 300; - } - else - { - tempSpeed = CurrentDispenserSpeed[i]; - } - updatedSpeed = (tempSpeed*1.03 0.02) + pressure = GetDispenserPressure(CLEANER_DISPENSER); + if (pressure > 0.02) { HW_Motor_Id = DispenserIdToMotorId[CLEANER_DISPENSER]; MotorStop(HW_Motor_Id, Hard_Hiz); if (CurrentDispenserSpeed[CLEANER_DISPENSER]) - ReportWithPackageFilter(IDSFilter,"IDS stop cleaner",__FILE__,CLEANER_DISPENSER,(int)(GetDispenserPressure(CLEANER_DISPENSER)*100),RpWarning,(int)CurrentDispenserSpeed[CLEANER_DISPENSER] ,0); + ReportWithPackageFilter(IDSFilter,"IDS stop cleaner",__FILE__,CLEANER_DISPENSER,(int)(pressure*100),RpWarning,(int)CurrentDispenserSpeed[CLEANER_DISPENSER] ,0); CurrentDispenserSpeed[CLEANER_DISPENSER] = 0; } @@ -724,7 +731,7 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue) HW_Motor_Id = DispenserIdToMotorId[CLEANER_DISPENSER]; MotorStop(HW_Motor_Id, Hard_Hiz); CurrentDispenserSpeed[CLEANER_DISPENSER] = 0; - ReportWithPackageFilter(IDSFilter,"IDS stop cleaner",__FILE__,CLEANER_DISPENSER,(int)(GetDispenserPressure(CLEANER_DISPENSER)*100),RpWarning,(int)CurrentDispenserSpeed[CLEANER_DISPENSER] ,0); + ReportWithPackageFilter(IDSFilter,"IDS stop cleaner",__FILE__,CLEANER_DISPENSER,(int)(pressure*100),RpWarning,(int)CurrentDispenserSpeed[CLEANER_DISPENSER] ,0); } SafeRemoveControlCallback(DispenserPrepareControlId, IDS_Prepare_Callback ); DispenserPrepareControlId = 0xFF; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index c478b82de..84cc5cf20 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -717,7 +717,7 @@ MotorControlConfig[FEEDER_MOTOR].m_params.MIN = MotorsControl[FEEDER_MOTOR].outputproportionalpowerlimit*-1; MotorControlConfig[FEEDER_MOTOR].m_params.Kd = MotorsControl[FEEDER_MOTOR].derivativetime; MotorControlConfig[FEEDER_MOTOR].m_params.Kp = MotorsControl[FEEDER_MOTOR].proportionalgain; - MotorControlConfig[FEEDER_MOTOR].m_params.Ki = MotorsControl[FEEDER_MOTOR].integraltime; + MotorControlConfig[FEEDER_MOTOR].m_params.Ki = 0;//MotorsControl[FEEDER_MOTOR].integraltime; MotorControlConfig[FEEDER_MOTOR].m_params.IntegralErrorMultiplier = MotorsControl[FEEDER_MOTOR].setpointramprateorsoftstartramp; MotorControlConfig[FEEDER_MOTOR].m_params.ProportionalErrorMultiplier = MotorsControl[FEEDER_MOTOR].outputonoffhysteresisvalue; MotorControlConfig[FEEDER_MOTOR].m_params.epsilon = MotorsControl[FEEDER_MOTOR].epsilon; diff --git a/Software/Stubs Collection/stubs/embeddedparametersbuild_w_cleaning.cs b/Software/Stubs Collection/stubs/embeddedparametersbuild_w_cleaning.cs index ee610b445..5b2cfdc0d 100644 --- a/Software/Stubs Collection/stubs/embeddedparametersbuild_w_cleaning.cs +++ b/Software/Stubs Collection/stubs/embeddedparametersbuild_w_cleaning.cs @@ -35,8 +35,8 @@ configurationParameters.CloseValveTimeout = 20; configurationParameters.OpenValveTimeout = 20; //backlash after filling - target pressure, timoeout, time staps (speed will be added in general parameters) -configurationParameters.InitialDispenserPressure = 0.25; -configurationParameters.InitialDispenserTimeout = 60000; //20 seconds +configurationParameters.InitialDispenserPressure = 3.85; //used for initial pre-run pressure +configurationParameters.InitialDispenserTimeout = 120000; ////used for initial pre-run number of steps configurationParameters.InitialDispenserTimeLag = 100; //job prepare - build pressure in dispensers - target pressure, timoeout, time staps, speed -- cgit v1.3.1 From bb8b2a7fac772ceb2a163aecb9c854f4fa9013c7 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Wed, 2 Sep 2020 12:38:57 +0300 Subject: thread load: handle safety alarm on head cover better, prevent RTFU arm raising on final jog --- .../Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index 84cc5cf20..eb422875f 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -346,14 +346,6 @@ //HARDWARE_MOTOR_TYPE__MOTO_DH_LID = 2, //HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID = 4, //DeActivateHeadMagnet(); - if (Head_Type != HEAD_TYPE_ARC) - { - CallbackCounter++; - if (MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_DH_LID,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DH_LID].directionthreadwize, 300, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DH_LID], Thread_Load_HomingCallback,20000)==ERROR) - { - Thread_Load_HomingCallback(HARDWARE_MOTOR_TYPE__MOTO_DH_LID,NO_LIMIT); - } - } CallbackCounter++; //MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID].directionthreadwize, 200, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID], Thread_Load_HomingCallback,10000); int direction; @@ -366,6 +358,14 @@ direction = DRIER_LID_OPEN; } MotorGotoWithCallback(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID, direction, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID], Thread_Load_HomingCallback,10000); + if (Head_Type != HEAD_TYPE_ARC) + { + CallbackCounter++; + if (MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_DH_LID,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DH_LID].directionthreadwize, 300, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DH_LID], Thread_Load_HomingCallback,20000)==ERROR) + { + Thread_Load_HomingCallback(HARDWARE_MOTOR_TYPE__MOTO_DH_LID,NO_LIMIT); + } + } if (Head_Type == HEAD_TYPE_FLAT) { Report("Thread_Load_Lift_actuators",__FILE__,__LINE__,LOW,RpMessage,false,0); @@ -754,6 +754,7 @@ numberOfSteps-800, Thread_Load_Dryer_Loading_Callback, 10000); return OK; } + double keepfeedertension = 0; uint32_t Thread_Load_Jog_ThreadStop(uint32_t index, uint32_t ReadValue) { REPORT_MSG(LoadStages, "Thread Load State Machine step Thread_Load_Jog_ThreadStop"); @@ -761,6 +762,7 @@ LoadingControlId = 0xFF; ThreadAbortJoggingFunc(); LoadStages++; + ProcessParametersKeep.feedertension = keepfeedertension; ThreadLoadStateMachine(LoadStages); return OK; } @@ -768,6 +770,8 @@ //Jog Thread Shortly To Make Sure Spool Is Running. Report End Of Loading { REPORT_MSG(LoadStages, "Thread Load State Machine step Thread_Load_Jog_Thread"); + keepfeedertension = feedertension; + ProcessParametersKeep.feedertension = 0.0; ThreadJoggingFunc(20); LoadingControlId = AddControlCallback("Load jog",Thread_Load_Jog_ThreadStop, eOneSecond*25,Control_Read_Dancer_Position,(IfTypeThread*0x100+FEEDER_MOTOR),FEEDER_DANCER,FEEDER_MOTOR); return OK; -- cgit v1.3.1 From 7390afe73ac4844291632ae89b5ab1fbe7ab9271 Mon Sep 17 00:00:00 2001 From: Avi Levkovich Date: Wed, 2 Sep 2020 16:40:26 +0300 Subject: Change actuators logic on loading (move to Trigger_Head_Actuators_Control) --- .../Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c | 6 +++--- Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c | 9 +++++++-- 2 files changed, 10 insertions(+), 5 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c index 33d888b14..6bde7ec11 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c @@ -517,7 +517,7 @@ uint32_t HeadCard_ActControlCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag Global_Act_Cmd_flag++;//Sync the callback to the command //3sec delay - Timeout - ActControlId = AddControlCallback("ActuatorControl", HeadCard_ActuatorsCallBackFunction, (3* eOneSecond), TemplateDataReadCBFunction,Act_ID,0, 0 ); + ActControlId = AddControlCallback("ActuatorControl", HeadCard_ActuatorsCallBackFunction, (2* eOneSecond), TemplateDataReadCBFunction,Act_ID,0, 0 ); return status; } @@ -640,8 +640,8 @@ uint32_t HeadCard_Actuators_Stub(ACTUATORS Act_ID, bool Enable, bool Direction)/ } } - status |= Head_Write_IO_Reg(0x42,HIGH); - status |= Head_Write_IO_Reg(0x46,LOW_AND_HIGH); + //status |= Head_Write_IO_Reg(0x42,HIGH); + //status |= Head_Write_IO_Reg(0x46,LOW_AND_HIGH); return status; } diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index c478b82de..e986c1756 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -370,7 +370,9 @@ { Report("Thread_Load_Lift_actuators",__FILE__,__LINE__,LOW,RpMessage,false,0); Trigger_Head_Actuators_Stub(ACTOT, ENABLE, UP); - Trigger_Head_Actuators_Stub(ACTIN, ENABLE, UP); + //Trigger_Head_Actuators_Stub(ACTIN, ENABLE, UP); + //Trigger_Head_Actuators_Control(ACTOT, LOW,true);//UP + Trigger_Head_Actuators_Control(ACTIN, LOW,true);//UP } return OK; } @@ -504,7 +506,10 @@ if (Head_Type == HEAD_TYPE_FLAT) { Report("Thread_Load_Close_actuators",__FILE__,__LINE__,LOW,RpMessage,true,0); - Trigger_Head_Actuators_Stub(ACTOT, ENABLE, DOWN); + + Trigger_Head_Actuators_Control(ACTIN, LOW,false);//DOWN + //Trigger_Head_Actuators_Stub(ACTOT, ENABLE, DOWN); + //Trigger_Head_Actuators_Stub(ACTIN, ENABLE, DOWN); HeadCard_Actuators_Relocate(); } -- cgit v1.3.1 From 09df687f1d804afab0e2515bd29df1152d619f9e Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Sun, 6 Sep 2020 00:16:07 +0300 Subject: extended tracing in dispenser 3 consumption. improvements in thread loading --- .../Embedded_SW/Embedded/Drivers/Motors/Motor.h | 2 + .../Embedded/Drivers/Motors/MotorActions.c | 78 +++++++++++++-- .../Embedded/Drivers/flash_ram/MCU_E2Prom.h | 1 + .../Modules/Diagnostics/DiagnosticsHoming.c | 31 +++++- .../Embedded/Modules/IDS/IDS_dispenser.c | 7 +- .../Embedded/Modules/Thread/ThreadLoad.c | 110 ++++++++++++++++----- 6 files changed, 189 insertions(+), 40 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h index fdfb99561..e6947a8d4 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h @@ -305,6 +305,8 @@ typedef enum Soft_Hiz, }STOP_TYPE_ENUM; +extern int32_t AccumulatedArmMovement; + uint32_t MotorStop(TimerMotors_t _motorId, STOP_TYPE_ENUM StopType); uint32_t MotorMove(TimerMotors_t _motorId,bool direction, uint32_t Steps); diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c index f500104f4..8c12b4ea3 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c @@ -203,6 +203,9 @@ uint32_t MotorGotoWithBusyCallback (TimerMotors_t MotorId,bool direction, uint32 MotorControlCallback[MotorId] = MotorMoveCallBackFunction; return MotorControlId[MotorId]; } +int32_t AccumulatedArmMovement = 0; +int32_t InitialArmLocation = 0; +bool ArmDirection = true; uint32_t MotorMoveWithCallback (TimerMotors_t MotorId,bool direction, uint32_t Steps, callback_fptr callback,uint32_t timeout) //TODO { @@ -219,12 +222,18 @@ uint32_t MotorMoveWithCallback (TimerMotors_t MotorId,bool direction, uint32_t S //SetMotorSpeed (deviceId, parameter); MotorCallback[MotorId] = callback; MotorTimeout[MotorId] = 0; - MotorTimeLag[MotorId] = 20; + MotorTimeLag[MotorId] = 40; MotorTimeLimit[MotorId] = timeout; + if (MotorId ==HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM) + { + InitialArmLocation = Read_Dryer_ENC_Position(0,0); + AccumulatedArmMovement = 0; + ArmDirection = direction; + } //MotorStop(MotorId,Hard_Hiz ); MotorMove(MotorId,direction,Steps ); - MotorControlId[MotorId] = AddControlCallback(NULL, MotorMoveCallBackFunction, /*eTenMillisecond*/20, MotorControlGetnBusyState,(IfTypeMotors*0x100+MotorId), MotorId, 0 ); + MotorControlId[MotorId] = AddControlCallback(NULL, MotorMoveCallBackFunction, /*eTenMillisecond*/40, MotorControlGetnBusyState,(IfTypeMotors*0x100+MotorId), MotorId, 0 ); MotorControlCallback[MotorId] = MotorMoveCallBackFunction; return MotorControlId[MotorId]; } @@ -471,7 +480,7 @@ uint32_t MotorSetSpeedWithCallback (TimerMotors_t MotorId, uint32_t _freq, callb } uint32_t MotorMoveCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) //TODO { - uint32_t MotorId,encoder; + uint32_t MotorId,encoder,temp = 0,tt; uint32_t Busy = BusyFlag; if (IfIndex>>8 != IfTypeMotors) { @@ -483,14 +492,66 @@ uint32_t MotorMoveCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) //TODO CallbackCalls++; if (MotorId ==HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM) { - if (CallbackCalls%200 == 0) + encoder = Read_Dryer_ENC_Position(0,0); + tt=InitialArmLocation; + if (ArmDirection == 1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize) //unloading - numbers going down + { + //previous number is bigger than current + if (InitialArmLocation>encoder) + { + temp = InitialArmLocation-encoder; + if ((temp>25)&&(temp<1000)) + { + AccumulatedArmMovement+=temp; + InitialArmLocation=encoder; + } + } + else if (InitialArmLocation25)&&(temp<1000)) + { + AccumulatedArmMovement+=temp; + InitialArmLocation=encoder; + InitialArmLocation=encoder; + } + } + } + else //loading - going up + { + //previous number is smaller than current + if (InitialArmLocation25)&&(temp<1000)) + { + AccumulatedArmMovement+=temp; + InitialArmLocation=encoder; + } + } + else if (InitialArmLocation>encoder)//rollover + { + temp = 0x3FFF + encoder -InitialArmLocation; + if ((temp>25)&&(temp<1000)) + { + AccumulatedArmMovement+=temp; + InitialArmLocation=encoder; + } + } + } + /*if (temp>1000) + { + Report("MotorMoveCallBackFunction temp curr prev total",__FILE__,encoder,tt,RpWarning,temp,0); + }*/ + if (CallbackCalls%50 == 0) { - Read_Dryer_ENC_Position(); + //encoder = Read_Dryer_ENC_Position(0,0); + Report("MotorMoveCallBackFunction periodic curr prev total",__FILE__,encoder,temp,RpWarning,AccumulatedArmMovement,0); } - if (CallbackCalls%200 == 1) + if (CallbackCalls%200 == 0) { - encoder = Read_Dryer_ENC_Position(0,0); - Report("MotorMoveCallBackFunction",__FILE__,__LINE__,DrierZeroPosition,RpWarning,MotorId,0); + //encoder = Read_Dryer_ENC_Position(0,0); + Report("MotorMoveCallBackFunction",__FILE__,__LINE__,encoder,RpWarning,CallbackCalls,0); } } else @@ -520,6 +581,7 @@ uint32_t MotorMoveCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) //TODO Report("motor timeout",__FILE__,__LINE__,MotorId,RpMessage,MotorTimeout[MotorId],0); Busy = BUSY; } + Report("MotorMoveCallBackFunction curr prev total",__FILE__,encoder,temp,RpWarning,AccumulatedArmMovement,0); //call the module callback if (MotorCallback[MotorId]) { diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h index 3691b41bd..bb171dda4 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h @@ -46,6 +46,7 @@ typedef enum { EEPROM_STORAGE_DANCER_4, EEPROM_PRESSURE_SENSOR_V0_0, EEPROM_PRESSURE_SENSOR_V0_1, + EEPROM_DRIER_LOADING_ARM_ANGLE, MAX_EEPROM_STORAGE }EEPROM_STORAGE_USAGE_ENUM; #define MAX_SERIAL_NUM_LEN 5 //5*4 bytes diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c index 04e333459..b40bbe4c7 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c @@ -462,6 +462,23 @@ uint32_t DispenserAbortHomingRequestFunc(MessageContainer* requestContainer) return OK; } +/******************************************************************************** + * Drier Loading Arm Homing + ********************************************************************************/ +uint32_t Drier_Center = 0; +float Calculate_Arm_Angle(uint32_t Current_Angle) +{ + uint32_t angle; + float Calc_angle; + if (Current_Angle >= Drier_Center) + angle = Current_Angle - Drier_Center; + else + angle = Current_Angle + 0x3FFF - Drier_Center; + Calc_angle = angle/0x3FFF; + MCU_E2PromProgram(EEPROM_DRIER_LOADING_ARM_ANGLE,Calc_angle); + ReportWithPackageFilter(DiagnosticsFilter,"Calculate_Arm_Angle",__FILE__,(int)(Calc_angle*1000),Current_Angle,RpMessage,Drier_Center,0); + return Calc_angle; +} uint32_t Diagnostics_Set_Load_Arm_To_Stopper_Callback(uint32_t deviceID, uint32_t BusyFlag) { MessageContainer responseContainer; @@ -490,7 +507,7 @@ uint32_t Diagnostics_Dryer_UnLoading_Callback(uint32_t MotorId, uint32_t ReadVal uint32_t temp = Read_Dryer_ENC_Position(); ReportWithPackageFilter(DiagnosticsFilter,"Diagnostics_Dryer_UnLoading_Callback",__FILE__,ReadValue,temp,RpMessage,D_DrierPrevLocation,0); //ReportWithPackageFilter(DiagnosticsFilter,"Diagnostics_Dryer_UnLoading_Callback details",__FILE__,(int)(TotalLoadedLen),D_numberOfCycles,RpMessage,CallbackCounter,0); - if ((abs (temp -D_DrierPrevLocation)>1000 )&&(ReadValue == NOTBUSY)) // OK - take another round + if ((AccumulatedArmMovement>8000 )&&(ReadValue == NOTBUSY)) // OK - take another round // if (ReadValue == NOTBUSY) // OK - take another round { D_DrierPrevLocation = temp; @@ -510,7 +527,7 @@ uint32_t Diagnostics_Dryer_UnLoading_Callback(uint32_t MotorId, uint32_t ReadVal } else //timeout or no movement { - ReportWithPackageFilter(DiagnosticsFilter,"Store Number of cycles in drier - halted",__FILE__,__LINE__,D_numberOfCycles,RpMessage,LoadArmRounds,0); + ReportWithPackageFilter(DiagnosticsFilter,"Unloading drier - halted",__FILE__,__LINE__,D_numberOfCycles,RpMessage,LoadArmRounds,0); MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,LoadArmRounds-(D_numberOfCycles-2));//it takes two cycles to identify a stop of the arm ReportWithPackageFilter(DiagnosticsFilter,"Drier unloading timeout(1) or no movement",__FILE__,temp,D_DrierPrevLocation,RpWarning,ReadValue,0); @@ -533,6 +550,7 @@ uint32_t Diagnostics_Dryer_UnLoading(void) MCU_E2PromRead(EEPROM_STORAGE_DRYER_CYCLES,&LoadArmRounds); MCU_E2PromRead(EEPROM_STORAGE_DRYER_CENTER,&temp); + Drier_Center = temp; D_DrierPrevLocation = temp; ReportWithPackageFilter(DiagnosticsFilter,"Diagnostics_Set_Load_Arm_To_Start_Position",__FILE__,__LINE__,D_DrierPrevLocation,RpMessage, LoadArmRounds,0); MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround/6*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulleyradius); @@ -548,6 +566,7 @@ uint32_t Diagnostics_Dryer_MovetoEncoderPosition_Callback(uint32_t MotorId, uint MessageContainer responseContainer; MotorHomingResponse response = MOTOR_HOMING_RESPONSE__INIT; + ReportWithPackageFilter(DiagnosticsFilter,"Store angle of arm drier - ended",__FILE__,__LINE__,(int)(Calculate_Arm_Angle(ReadValue)*360),RpMessage,D_numberOfCycles,0); //ReportWithPackageFilter(DiagnosticsFilter,"Diagnostics_Dryer_MovetoEncoderPosition_Callback",__FILE__,__LINE__,0,RpMessage,CallbackCounter,0); MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, 200); responseContainer = createContainer(MESSAGE_TYPE__MotorHomingResponse, HomingToken[MotorId], true, &response, &motor_homing_response__pack, &motor_homing_response__get_packed_size); @@ -586,7 +605,8 @@ uint32_t Diagnostics_Dryer_Loading_Callback(uint32_t MotorId, uint32_t ReadValue } else { - ReportWithPackageFilter(DiagnosticsFilter,"Store Number of cycles in drier - halted",__FILE__,__LINE__,D_numberOfCycles,RpMessage,LoadArmRounds,0); + ReportWithPackageFilter(DiagnosticsFilter,"Loading drier - halted",__FILE__,__LINE__,D_numberOfCycles,RpMessage,LoadArmRounds,0); + ReportWithPackageFilter(DiagnosticsFilter,"Store angle of arm drier - halted",__FILE__,__LINE__,(int)(Calculate_Arm_Angle(ReadValue)*360),RpMessage,D_numberOfCycles,0); MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, 200); } return OK; @@ -594,9 +614,14 @@ uint32_t Diagnostics_Dryer_Loading_Callback(uint32_t MotorId, uint32_t ReadValue uint32_t Diagnostics_Dryer_Loading(void) { + //float Calc_angle; +#warning assuming loading starts from 0 if (dryerbufferlength) LoadArmRounds = (int)dryerbufferlength; MCU_E2PromRead(EEPROM_STORAGE_DRYER_CENTER,&D_DrierPrevLocation); + //MCU_E2PromProgram(EEPROM_DRIER_LOADING_ARM_ANGLE,Calc_angle); + //ReportWithPackageFilter(DiagnosticsFilter,"Diagnostics_Dryer_Loading request: current ",__FILE__,__LINE__,D_numberOfCycles,RpMessage,LoadArmRounds,0); + Drier_Center = D_DrierPrevLocation; D_numberOfCycles = 0; D_numberOfSteps = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround/**LoadArmRounds*/*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].microstep*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulleyradius; diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c index 3c9e4ef05..b35259ad9 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c @@ -353,7 +353,10 @@ void IDS_Dispenser_Content_Calculation (char DispenserId) // IDS_Dispenser_Data[DispenserId].nanolitterperpulse ;//* dir; //double consumedintimeframe = (double)(CurrentDispenserSpeed[DispenserId]); //pulses only //consumedintimeframe = 10+DispenserId; - IDS_Dispenser_Data[DispenserId].consumedinnanolitter += (CurrentDispenserSpeed[DispenserId]*4/10);//100 milliseconds ==> speed/10 + IDS_Dispenser_Data[DispenserId].consumedinnanolitter += (CurrentDispenserSpeed[DispenserId]*4/10);//400 milliseconds ==> speed*4/10 + if ((DispenserId == 2)&&(CurrentDispenserSpeed[DispenserId]>0)) + ReportWithPackageFilter(IDSFilter,"IDS_Dispenser_Data ",__FILE__,DispenserId,(int)IDS_Dispenser_Data[DispenserId].consumedinnanolitter,RpWarning,(int)CurrentDispenserSpeed[DispenserId],0); + if (IDS_Dispenser_Data[DispenserId].consumedinnanolitter<0) IDS_Dispenser_Data[DispenserId].consumedinnanolitter = 0; if (CurrentDispenserSpeed[DispenserId]>0.1) @@ -367,7 +370,7 @@ void IDS_Dispenser_Content_Calculation (char DispenserId) } if (DispenserId == 0) { - if ((seconds_counter++>=9000)&&(DispenserDataUpdated == true))//9000)// - one hour) + if ((seconds_counter++>=600)&&(DispenserDataUpdated == true))//9000)// - one hour) { seconds_counter = 0; if (IDS_Dispenser_Data[DispenserId].consumedinnanolitter) diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index bc240cd0f..a4172185a 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -103,7 +103,7 @@ uint32_t UnloadingStart = 0; uint8_t NumberOfDrierLoaderCycles = 0; uint32_t status = OK; - uint32_t LoadingControlId = 0xFF,PullerControlId = 0xFF,WinderControlId = 0xFF, SpeedTControlId = 0xFF; + uint32_t LoadingControlId = 0xFF,PullerControlId = 0xFF,WinderControlId = 0xFF, SpeedTControlId = 0xFF,ThreadLoadControlId = 0xFF; uint32_t previousPosition = 0, currentPosition = 0,Tinitialpos = 0xFFFF; uint32_t LoadCounter = 0; double TotalLoadedLen = 0.0; @@ -111,6 +111,7 @@ float numberOfSteps = 0; float numberOfCycles = 0; double DrierPrevLocation = 0; + int DrierCenterLocation = 0; FPGA_GPI_ENUM screw[2] = {GPI_LS_SCREW_RIGHT,GPI_LS_SCREW_LEFT}; int Screw_Dir = false; bool InitCalled = false; @@ -120,6 +121,9 @@ uint32_t ThreadLoadStateMachine( THREAD_LOAD_STAGES_ENUM LoadStages); uint32_t ThreadLoadControlCBFunction(uint32_t index, uint32_t ReadValue); uint32_t ThreadLoadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue); + uint32_t ThreadUpdateCallBackFunction(uint32_t IfIndex, uint32_t ReadValue); + + uint32_t Thread_Load_Dryer_UnLoading(void); uint32_t ThreadLoadingReport(void); bool ThreadLoaded(void); @@ -200,6 +204,7 @@ { LOG_ERROR (LoadStages, "Thread_Load_Reduce_Heat failed"); strcpy(LoadErrorMsg,"Thread_Load_Reduce_Heat failed"); + load.color = fastBILNK; LoadStatus = ERROR; TryAgain = true; //ThreadLoadButton(LoadStages); @@ -369,7 +374,7 @@ if (Head_Type == HEAD_TYPE_FLAT) { Report("Thread_Load_Lift_actuators",__FILE__,__LINE__,LOW,RpMessage,false,0); - Trigger_Head_Actuators_Stub(ACTOT, ENABLE, UP); + //Trigger_Head_Actuators_Stub(ACTOT, ENABLE, UP); //Trigger_Head_Actuators_Stub(ACTIN, ENABLE, UP); //Trigger_Head_Actuators_Control(ACTOT, LOW,true);//UP Trigger_Head_Actuators_Control(ACTIN, LOW,true);//UP @@ -393,6 +398,15 @@ status |= MCU_E2PromProgram(EEPROM_PULLER_TENSION_POSITION,1); } + if (Head_Type == HEAD_TYPE_FLAT) + { + Report("Thread_Load_Lift_ OT actuator",__FILE__,__LINE__,LOW,RpMessage,false,0); + Trigger_Head_Actuators_Stub(ACTOT, ENABLE, UP); + //Trigger_Head_Actuators_Stub(ACTIN, ENABLE, UP); + //Trigger_Head_Actuators_Control(ACTOT, LOW,true);//UP + //Trigger_Head_Actuators_Control(ACTIN, LOW,true);//UP + } + return OK; } uint32_t Thread_Load_Lift_Rockers(void) @@ -460,6 +474,11 @@ MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_RLOADING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].directionthreadwize, 250, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_RLOADING], Thread_Load_HomingCallback,25000); CallbackCounter++; MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_LLOADING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].directionthreadwize, 250, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_LLOADING], Thread_Load_HomingCallback,25000); + if (Head_Type == HEAD_TYPE_FLAT) + { + Report("Thread_Load_Close_ OT actuator",__FILE__,__LINE__,LOW,RpMessage,true,0); + Trigger_Head_Actuators_Stub(ACTOT, ENABLE, DOWN); + } return OK; } @@ -495,29 +514,24 @@ }*/ } - return OK; - } - uint32_t Thread_Load_Close_Lids(void) - { - REPORT_MSG(LoadStages, "Thread Load State Machine step Thread_Load_Close_Lids"); - //Close Dyeing Head Cover And Dryer Lid - //HARDWARE_MOTOR_TYPE__MOTO_DH_LID = 2, - //HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID = 4, if (Head_Type == HEAD_TYPE_FLAT) { Report("Thread_Load_Close_actuators",__FILE__,__LINE__,LOW,RpMessage,true,0); - Trigger_Head_Actuators_Control(ACTIN, LOW,false);//DOWN + //Trigger_Head_Actuators_Control(ACTIN, LOW,false);//DOWN //Trigger_Head_Actuators_Stub(ACTOT, ENABLE, DOWN); //Trigger_Head_Actuators_Stub(ACTIN, ENABLE, DOWN); HeadCard_Actuators_Relocate(); } - if (Head_Type != HEAD_TYPE_ARC) - { - CallbackCounter++; - MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_DH_LID,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DH_LID].directionthreadwize, 300, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DH_LID], Thread_Load_HomingCallback,20000); - } + return OK; + } + uint32_t Thread_Load_Close_Lids(void) + { + REPORT_MSG(LoadStages, "Thread Load State Machine step Thread_Load_Close_Lids"); + //Close Dyeing Head Cover And Dryer Lid + //HARDWARE_MOTOR_TYPE__MOTO_DH_LID = 2, + //HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID = 4, CallbackCounter++; // MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID].directionthreadwize, 200, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID], Thread_Load_HomingCallback,10000); int direction; @@ -530,6 +544,15 @@ direction = DRIER_LID_CLOSE; } MotorGotoWithCallback(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID, direction, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID], Thread_Load_HomingCallback,10000); + if (Head_Type != HEAD_TYPE_ARC) + { + CallbackCounter++; + if(MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_DH_LID,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DH_LID].directionthreadwize, 300, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DH_LID], Thread_Load_HomingCallback,20000)==ERROR) + { + Thread_Load_HomingCallback(HARDWARE_MOTOR_TYPE__MOTO_DH_LID,NO_LIMIT); + } + } + return OK; } uint32_t Thread_Load_Resume_Heating(void) @@ -662,7 +685,7 @@ { TryAgain = true; SecondTry = false; - Report("Store Number of cycles in drier - halted",__FILE__,__LINE__,numberOfCycles,RpMessage,LoadArmRounds,0); + Report("Loading drier - halted",__FILE__,__LINE__,numberOfCycles,RpMessage,LoadArmRounds,0); MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,numberOfCycles+CurrentlyLoaded); TimeoutsCounter = 0; CallbackCounter = 0; @@ -808,6 +831,11 @@ RemoveControlCallback(SpeedTControlId, ThreadLoadLengthCBFunction ); SpeedTControlId = 0xFF; } + if (ThreadLoadControlId != 0xFF) + { + RemoveControlCallback(ThreadLoadControlId, ThreadUpdateCallBackFunction ); + ThreadLoadControlId = 0xFF; + } MotorStopAction(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM); MotorStopAction(HARDWARE_MOTOR_TYPE__MOTO_RLOADING); @@ -816,7 +844,10 @@ MotorStopAction(HARDWARE_MOTOR_TYPE__MOTO_LDANCER1); MotorStopAction(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID); MotorStopAction(HARDWARE_MOTOR_TYPE__MOTO_DH_LID); - MotorStop(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Hard_Stop); + MotorStop(HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,Hard_Stop); + MotorStop(HARDWARE_MOTOR_TYPE__MOTO_WINDER,Hard_Hiz); + MotorStop(HARDWARE_MOTOR_TYPE__MOTO_SCREW,Hard_Hiz); + MotorStop(HARDWARE_MOTOR_TYPE__MOTO_RDRIVING,Hard_Hiz); if (LoadStages!=THREAD_LOAD_END) { usnprintf(LoadErrorMsg, 100, "Load sequence stopped by user on stage %d",LoadStages); @@ -845,14 +876,14 @@ bool direction; numberOfCycles++; uint32_t temp = Read_Dryer_ENC_Position(); - Report("Thread_Load_Dryer_UnLoading_Callback",__FILE__,ReadValue,temp,RpMessage,DrierPrevLocation,0); + Report("Thread_Load_Dryer_UnLoading_Callback",__FILE__,AccumulatedArmMovement,temp,RpMessage,DrierPrevLocation,0); //Report("Thread_Load_Dryer_UnLoading_Callback details",__FILE__,(int)(TotalLoadedLen),numberOfCycles,RpMessage,CallbackCounter,0); if (LoadStages != THREAD_LOAD_SET_LOAD_ARM_TO_START_POSITION) { Report("Thread_Load_Dryer_UnLoading_Callback wrong state",__FILE__,__LINE__,LoadStages,RpMessage,DrierPrevLocation,0); return OK; } - if ((abs (temp -DrierPrevLocation)>1000 )&&(ReadValue == NOTBUSY)) // OK - take another round + if ((AccumulatedArmMovement>8000 )&&(ReadValue == NOTBUSY)) // OK - take another round { DrierPrevLocation = temp; Report("Thread_Load_Dryer_UnLoading cycles",__FILE__,numberOfCycles,LoadArmRounds,RpMessage,0,0); @@ -871,14 +902,14 @@ } else //timeout or no movement { - Report("Store Number of cycles in drier - halted",__FILE__,__LINE__,numberOfCycles,RpMessage,LoadArmRounds,0); + Report("Unloading drier - halted",__FILE__,__LINE__,numberOfCycles,RpMessage,LoadArmRounds,0); if (SecondTry == true) MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,0); else MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,LoadArmRounds-numberOfCycles); - if (abs(temp -DrierPrevLocation)<200) + if (abs(temp -DrierCenterLocation)<200) { - if (tempdata.len, requestContainer->data.data); ustrncpy (ThreadLoadingToken, requestContainer->token,36); //MessageState = 1; + ThreadLoadControlId = AddControlCallback("ThreadLoad", ThreadUpdateCallBackFunction, 4* eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); Report("StartThreadLoadingFunc",__FILE__,__LINE__,0,RpWarning,(int)LoadStages,0); ThreadLoadingReport(); return OK; -- cgit v1.3.1 From dc3e9a8e3936f24d01d85652ff2fb9b8c320261c Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Sun, 6 Sep 2020 15:24:39 +0300 Subject: some fixes in dispenser handling, implement setheaterstate, procedures and stubs updated --- .../Embedded_SW/Embedded/Communication/Container.c | 3 + .../Embedded/Drivers/Motors/MotorActions.c | 4 +- .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 9 +- .../Embedded/Modules/Heaters/Heaters_ex.h | 2 + .../Embedded/Modules/Heaters/Heaters_print.c | 36 + .../Embedded/Modules/IDS/IDS_dispenser.c | 8 +- .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 19 +- .../Embedded/Modules/Stubs_Handler/Progress.c | 2 + .../Embedded/Modules/Thread/ThreadLoad.c | 19 +- .../Embedded/StateMachines/Printing/JobSTM.c | 1 + .../Procedures/EmbeddedParametersBuild.pproj | 2 +- .../Stubs Collection/Procedures/FFS Rebuild.pproj | 1 + Software/Stubs Collection/stubs/1.tpf | 3084 -- .../Scripts/Assemblies/ArcHead/clean_motor_ls.cs | 278 + .../Scripts/Assemblies/Dryer/Blowe_RMO_LOG.CSV | 5399 ---- .../Scripts/Assemblies/Dryer/Dryer_Encoder.cs | 55 + .../stubs/Scripts/Assemblies/Dryer/Dryer_SSR.cs | 28 +- .../stubs/Scripts/Assemblies/Dryer/Dryer_Tset.CSV | 24579 ++++++++++++++- .../stubs/Scripts/Assemblies/Dryer/Dryer_Tset1.CSV | 1600 + .../Scripts/Assemblies/Dryer/Dryer_Tset111.CSV | 29654 +++++++++++++++++++ .../stubs/Scripts/Assemblies/Dryer/blower_rpm.cs | 62 + .../Scripts/Assemblies/Dryer/test_dryer_heater.cs | 2 +- .../Dye head/Actuator_In_new set point.cs | 34 + .../Dye head/Write SYLKO to head eeprom.cs | 118 + .../ElectricalEnclosure_Fans1.cs | 80 +- ..._WORK_New_Calibrate_Midtank_pressure_sensors.cs | 272 +- .../New_Calibrate_Midtank_pressure_sensors.cs | 393 + .../New_Calibrate_Midtank_pressure_sensors1.cs | 423 + .../New_Calibrate_Midtank_pressure_sensors2.cs | 447 + .../Scripts/Assemblies/MidTank/midtanksetparams.cs | 79 +- .../Assemblies/New_DyeHead/Test_Actuator.cs | 42 + .../Scripts/Assemblies/New_DyeHead/Test_Lid.cs | 145 + .../PowerStep01/Get_PowerStep01_Parameters.cs | 227 + .../Motor_GMotor_Get_Param_Powerstep01_rev3.cs | 237 + .../stubs/Scripts/Assemblies/WHS/fan1-4.cs | 3 +- .../stubs/Scripts/Head_Type_Indification_2.cs | 25 + .../stubs/Scripts/Jig_Tester/JIG_TESTER.cs | 291 +- .../stubs/Scripts/Jig_Tester/Jig-TesterV 1.0.docx | Bin 0 -> 2159500 bytes .../stubs/Scripts/Jig_Tester/Jig-TesterV 1.1.docx | Bin 0 -> 3989402 bytes .../stubs/Scripts/Jig_Tester/LTFU_Jig.cs | 10 +- .../stubs/Scripts/Jig_Tester/MidTank_Jig.cs | 4 +- .../stubs/Scripts/Jig_Tester/RTFU_Jig.cs | 4 +- .../stubs/Scripts/Main card Watchdog test.cs | 24 + .../stubs/Scripts/MidTank Calibration.pproj | 1 + .../Stubs Collection/stubs/Scripts/Priming.pproj | 1 + .../stubs/Scripts/Set cleaning sequence.cs | 23 + .../WHS_waste_Tank_Calibration_Save_V0.pproj | 1 + .../stubs/Scripts/Write SYLKO to head eeprom.cs | 118 - .../Scripts/config head type to hed card eeprom.cs | 118 + .../stubs/Scripts/progress_test.pproj | 1 + .../Stubs Collection/stubs/Scripts/test halt.cs | 24 + .../stubs/embeddedparametersbuild_w_cleaning.cs | 6 +- 52 files changed, 59074 insertions(+), 8924 deletions(-) create mode 100644 Software/Stubs Collection/Procedures/FFS Rebuild.pproj delete mode 100644 Software/Stubs Collection/stubs/1.tpf create mode 100644 Software/Stubs Collection/stubs/Scripts/Assemblies/ArcHead/clean_motor_ls.cs create mode 100644 Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/Dryer_Encoder.cs create mode 100644 Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/Dryer_Tset1.CSV create mode 100644 Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/Dryer_Tset111.CSV create mode 100644 Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/blower_rpm.cs create mode 100644 Software/Stubs Collection/stubs/Scripts/Assemblies/Dye head/Actuator_In_new set point.cs create mode 100644 Software/Stubs Collection/stubs/Scripts/Assemblies/Dye head/Write SYLKO to head eeprom.cs create mode 100644 Software/Stubs Collection/stubs/Scripts/Assemblies/MidTank/New_Calibrate_Midtank_pressure_sensors.cs create mode 100644 Software/Stubs Collection/stubs/Scripts/Assemblies/MidTank/New_Calibrate_Midtank_pressure_sensors1.cs create mode 100644 Software/Stubs Collection/stubs/Scripts/Assemblies/MidTank/New_Calibrate_Midtank_pressure_sensors2.cs create mode 100644 Software/Stubs Collection/stubs/Scripts/Assemblies/New_DyeHead/Test_Actuator.cs create mode 100644 Software/Stubs Collection/stubs/Scripts/Assemblies/New_DyeHead/Test_Lid.cs create mode 100644 Software/Stubs Collection/stubs/Scripts/Assemblies/PowerStep01/Get_PowerStep01_Parameters.cs create mode 100644 Software/Stubs Collection/stubs/Scripts/Assemblies/PowerStep01/Motor_GMotor_Get_Param_Powerstep01_rev3.cs create mode 100644 Software/Stubs Collection/stubs/Scripts/Head_Type_Indification_2.cs create mode 100644 Software/Stubs Collection/stubs/Scripts/Jig_Tester/Jig-TesterV 1.0.docx create mode 100644 Software/Stubs Collection/stubs/Scripts/Jig_Tester/Jig-TesterV 1.1.docx create mode 100644 Software/Stubs Collection/stubs/Scripts/Main card Watchdog test.cs create mode 100644 Software/Stubs Collection/stubs/Scripts/MidTank Calibration.pproj create mode 100644 Software/Stubs Collection/stubs/Scripts/Priming.pproj create mode 100644 Software/Stubs Collection/stubs/Scripts/Set cleaning sequence.cs create mode 100644 Software/Stubs Collection/stubs/Scripts/WHS_waste_Tank_Calibration_Save_V0.pproj delete mode 100644 Software/Stubs Collection/stubs/Scripts/Write SYLKO to head eeprom.cs create mode 100644 Software/Stubs Collection/stubs/Scripts/config head type to hed card eeprom.cs create mode 100644 Software/Stubs Collection/stubs/Scripts/progress_test.pproj create mode 100644 Software/Stubs Collection/stubs/Scripts/test halt.cs (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Communication/Container.c b/Software/Embedded_SW/Embedded/Communication/Container.c index b14efbd55..307e4eecb 100644 --- a/Software/Embedded_SW/Embedded/Communication/Container.c +++ b/Software/Embedded_SW/Embedded/Communication/Container.c @@ -349,6 +349,9 @@ void receive_callback(char* buffer, size_t length) case MESSAGE_TYPE__StartEventsNotificationRequest: StartEventsNotificationRequestFunc(requestContainer); break; + case MESSAGE_TYPE__SetHeaterStateRequest: + SetHeaterStateRequestFunc(requestContainer); + break; case MESSAGE_TYPE__StopEventsNotificationRequest: StopEventsNotificationRequestFunc(requestContainer); break; diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c index 8c12b4ea3..f33edee50 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c @@ -222,7 +222,7 @@ uint32_t MotorMoveWithCallback (TimerMotors_t MotorId,bool direction, uint32_t S //SetMotorSpeed (deviceId, parameter); MotorCallback[MotorId] = callback; MotorTimeout[MotorId] = 0; - MotorTimeLag[MotorId] = 40; + MotorTimeLag[MotorId] = 20; MotorTimeLimit[MotorId] = timeout; if (MotorId ==HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM) { @@ -233,7 +233,7 @@ uint32_t MotorMoveWithCallback (TimerMotors_t MotorId,bool direction, uint32_t S //MotorStop(MotorId,Hard_Hiz ); MotorMove(MotorId,direction,Steps ); - MotorControlId[MotorId] = AddControlCallback(NULL, MotorMoveCallBackFunction, /*eTenMillisecond*/40, MotorControlGetnBusyState,(IfTypeMotors*0x100+MotorId), MotorId, 0 ); + MotorControlId[MotorId] = AddControlCallback(NULL, MotorMoveCallBackFunction, /*eTenMillisecond*/20, MotorControlGetnBusyState,(IfTypeMotors*0x100+MotorId), MotorId, 0 ); MotorControlCallback[MotorId] = MotorMoveCallBackFunction; return MotorControlId[MotorId]; } diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index e8e2e4ed0..78398119b 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -446,6 +446,7 @@ uint16_t FluidLevelWarning = 20,FluidLevelError = 50; int NumOfSystemAlarms = MAX_SYSTEM_ALARMS; //bool DispenserInUse[MAX_SYSTEM_DISPENSERS] = {false,false,false,false,false,false,false,false}; bool EventsNotificationRequestAccepted = false; +char AlarmReasonStr[100]; //read dispensers limit switches. 25 - send warning. up - stop job and send alarm //Cone missing //Dyeing head over temperature @@ -594,7 +595,8 @@ void AlarmHandlingLoadFlags(void) CheckCurrentAlarms = (AlarmhandlingFlags && 0x0002); CheckTamperAlarms = (AlarmhandlingFlags && 0x0004); CheckMotorAlarms = (AlarmhandlingFlags && 0x0008); - ReportWithPackageFilter(AlarmFilter,"Alarm group setting", __FILE__,__LINE__,0, RpMessage, 1*CheckHardLimitAlarms+2*CheckCurrentAlarms+3*CheckTamperAlarms+4*CheckMotorAlarms, 0); + usnprintf(AlarmReasonStr, 100, "Alarm group from EEPPROM Current %d Motor %d Tamper %d",CheckCurrentAlarms,CheckMotorAlarms,CheckTamperAlarms); + ReportWithPackageFilter(AlarmFilter,AlarmReasonStr, __FILE__,__LINE__,0, RpMessage, 1*CheckHardLimitAlarms+2*CheckCurrentAlarms+3*CheckTamperAlarms+4*CheckMotorAlarms, 0); } void AlarmHandlingSetFlags(bool checkHardLimitAlarms,bool checkCurrentAlarms, bool checkTamperAlarms, bool checkMotorAlarms) @@ -604,7 +606,9 @@ void AlarmHandlingSetFlags(bool checkHardLimitAlarms,bool checkCurrentAlarms CheckCurrentAlarms = checkCurrentAlarms; CheckTamperAlarms = checkTamperAlarms; CheckMotorAlarms = checkMotorAlarms; - ReportWithPackageFilter(AlarmFilter,"Alarm group setting", __FILE__,__LINE__,0, RpMessage, 1*CheckHardLimitAlarms+2*CheckCurrentAlarms+3*CheckTamperAlarms+4*CheckMotorAlarms, 0); + usnprintf(AlarmReasonStr, 100, "Alarm group setting Current %d Motor %d Tamper %d",CheckCurrentAlarms,CheckMotorAlarms,CheckTamperAlarms); + ReportWithPackageFilter(AlarmFilter,AlarmReasonStr, __FILE__,__LINE__,0, RpMessage, 1*CheckHardLimitAlarms+2*CheckCurrentAlarms+3*CheckTamperAlarms+4*CheckMotorAlarms, 0); + if (CheckHardLimitAlarms) flags |= 0x1; if (CheckCurrentAlarms) flags |= 0x2; if (CheckTamperAlarms) flags |= 0x4; @@ -615,7 +619,6 @@ void AlarmHandlingSetFlags(bool checkHardLimitAlarms,bool checkCurrentAlarms AlarmhandlingFlags = flags; } } -char AlarmReasonStr[100]; JobEndReasonEnum getEndReason(uint32_t AlarmId) { switch (AlarmItem[AlarmId].AlarmSource) diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h index 00d5a2a65..c428faea3 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h @@ -22,6 +22,8 @@ void HeatingTestSendResonse(uint32_t status, bool last,bool heater1Active,bool h uint32_t HeaterCommandRequestMessage(int HeaterId, bool OnOff, int Temperature); void HeatingTestRequest(MessageContainer* requestContainer); void HeatingTestPollRequest(MessageContainer* requestContainer); +void SetHeaterStateRequestFunc(MessageContainer* requestContainer); + bool HeaterCheckReady(void); bool isHeaterReady(uint8_t HeaterId); diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index 56e71b345..783e337cc 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -15,6 +15,8 @@ #include "PMR/Hardware/HardwarePidControlType.pb-c.h" #include "PMR/Hardware/HardwarePidControl.pb-c.h" #include "PMR/Hardware/HardwareBlower.pb-c.h" +#include "PMR/Diagnostics/SetHeaterStateRequest.pb-c.h" +#include "PMR/Diagnostics/SetHeaterStateResponse.pb-c.h" #include "PMR/Diagnostics/HeaterType.pb-c.h" #include "PMR/Diagnostics/HeaterState.pb-c.h" #include "PMR/common/MessageContainer.pb-c.h" @@ -638,6 +640,40 @@ int GetFilteredHeaterRead(int HeaterId) * initialized all global data *************************************************************************************/ bool HeaterRestarted[HEATER_TYPE_MAX_HEATERS] = {false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false}; + +void SetHeaterStateRequestFunc(MessageContainer* requestContainer) +{ + + uint32_t status = PASSED; + MessageContainer responseContainer; + + SetHeaterStateRequest* request = set_heater_state_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); + + SetHeaterStateResponse response = SET_HEATER_STATE_RESPONSE__INIT; + + if (request->has_heatertype) + { + if ((request->has_isactive)&&(request->has_setpoint)) + status = HeaterCommandRequestMessage(request->heatertype,true,request->setpoint); + else + status = HeaterCommandRequestMessage(request->heatertype,false,request->setpoint); + } + + responseContainer = createContainer(MESSAGE_TYPE__SetHeaterStateResponse, requestContainer->token, true, &response, &set_heater_state_response__pack, &set_heater_state_response__get_packed_size); + if (status) + { + responseContainer.has_error = true; + responseContainer.error = (ErrorCode)status; + } + //------------------------------------------------------------------------------------------- + uint8_t* container_buffer = malloc(message_container__get_packed_size(&responseContainer)); + size_t container_size = message_container__pack(&responseContainer, container_buffer); + free(responseContainer.data.data); + SendChars((char*)container_buffer, container_size); + + set_heater_state_request__free_unpacked(request,NULL); + +} uint32_t HeaterCommandRequestMessage(int HeaterNum, bool OnOff, int Temperature) { //uint32_t status = NOT_SUPPORTED; diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c index 75acec0b6..c8f435cb9 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c @@ -354,12 +354,16 @@ void IDS_Dispenser_Content_Calculation (char DispenserId) //double consumedintimeframe = (double)(CurrentDispenserSpeed[DispenserId]); //pulses only //consumedintimeframe = 10+DispenserId; IDS_Dispenser_Data[DispenserId].consumedinnanolitter += (CurrentDispenserSpeed[DispenserId]*4/10);//400 milliseconds ==> speed*4/10 + if (IDS_Dispenser_Data[DispenserId].consumedinnanolitter<0) + IDS_Dispenser_Data[DispenserId].consumedinnanolitter = 0; //if ((DispenserId == 2)&&(CurrentDispenserSpeed[DispenserId]>0)) - // ReportWithPackageFilter(IDSFilter,"IDS_Dispenser_Data ",__FILE__,DispenserId,(int)IDS_Dispenser_Data[DispenserId].consumedinnanolitter,RpWarning,(int)CurrentDispenserSpeed[DispenserId],0); + // ReportWithPackageFilter(IDSFilter,"IDS_Dispenser_Data info",__FILE__,DispenserId,(int)IDS_Dispenser_Data[DispenserId].consumedinnanolitter,RpWarning,(int)CurrentDispenserSpeed[DispenserId],0); + //if ((DispenserId == 2)&&(CurrentDispenserSpeed[DispenserId]<0)) + // ReportWithPackageFilter(IDSFilter,"IDS_Dispenser_Data fill",__FILE__,DispenserId,(int)IDS_Dispenser_Data[DispenserId].consumedinnanolitter,RpWarning,(int)(-1*CurrentDispenserSpeed[DispenserId]),0); if (IDS_Dispenser_Data[DispenserId].consumedinnanolitter<0) IDS_Dispenser_Data[DispenserId].consumedinnanolitter = 0; - if (CurrentDispenserSpeed[DispenserId]>0.1) + if (abs(CurrentDispenserSpeed[DispenserId])>0) { DispenserDataUpdated = true; IDS_Dispenser_Data[DispenserId].totalconsumedinnanolitter += (CurrentDispenserSpeed[DispenserId]/10); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index 327d80eb1..d40f3c00b 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -452,10 +452,12 @@ c. Go to step 2.a x Segment.BrushStopsCount. uint32_t DispenserPrepareControlId = 0xFF; int NumOfActiveDispensers = 0; int DispenserBuildTimeCounter = 0; -#define DISPENSER_UP_MOVEMENT + double TargetNumberOfStepsPreRun,MaximalPressurePreRun; int DispenserTotalPrepareSteps[MAX_SYSTEM_DISPENSERS]; bool DispenserLastMovementDown[MAX_SYSTEM_DISPENSERS]; -#define PRESSURE_READ_TIME_GAP 100 + + #define PRESSURE_READ_TIME_GAP 100 + uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue) { if (AutoHoming_Config >= AutoHoming_JobEnd_PowerOn_off) @@ -582,10 +584,10 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl { DispenserTotalPrepareSteps[i]+=(CurrentDispenserSpeed[i]*PRESSURE_READ_TIME_GAP/eOneSecond); HW_Motor_Id = DispenserIdToMotorId[i]; -//#ifdef DISPENSER_UP_MOVEMENT - if (DispenserTotalPrepareSteps[i] DispenserPreparePressure*1.2) { @@ -597,7 +599,6 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl if (AdjustDispenserSpeedToPressure(i,DispenserPreparePressure,pressure) == true) NumofReadyDispensers++; } -//#endif ReportWithPackageFilter(IDSFilter,"IDS prepare",__FILE__,i,(int)DispenserTotalPrepareSteps[i],RpWarning,(int)(CurrentDispenserSpeed[i]*100),0); } } @@ -758,7 +759,7 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl JobTicket* JobTicket = JobDetails; JobEndSequence = false; - if ((pressurebuildup>0.1)&&(pressurebuildup<4.0)) + if ((pressurebuildup>0.1)&&(pressurebuildup<4.5)) { ReportWithPackageFilter(IDSFilter,"Setting pressure from RML feeder tension",__FILE__,__LINE__,(int)(pressurebuildup*100),RpWarning,(int)(DispenserPreparePressure*100),0); DispenserPreparePressure = pressurebuildup; @@ -778,6 +779,8 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl CleaningDispenserSpeed = 0; EnableCleaning = false; } + TargetNumberOfStepsPreRun = InitialDispenserTimeout; + MaximalPressurePreRun = InitialDispenserPressure; for (Motor_i = 0;Motor_i < MAX_SYSTEM_DISPENSERS;Motor_i++) { @@ -1840,7 +1843,7 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) DispenserPreSegmentControlId = 0xFF; } - IDS_Dispenser_Store_Data (); + //IDS_Dispenser_Store_Data (); for ( Dispenser_i = 0;Dispenser_i < MAX_SYSTEM_DISPENSERS;Dispenser_i++) { diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index 7295084e3..8856d873a 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -898,6 +898,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) uint32_t timeout = 0xFFFFFFFFU; ROM_WatchdogReloadSet(WATCHDOG0_BASE, timeout); #endif + HeatersEnd(); FRESULT iFResult = Init_Flash_File_System(true); if(iFResult != FR_OK) { @@ -930,6 +931,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) if((request->amount == 0x0CE) && (request->delay == 0x0CE)) //Get Gas Sensor { LOG_ERROR(request->delay,"FlashInit"); + HeatersEnd(); FlashInit(); response.progress = (double)OK; response.has_progress = true; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index a4172185a..cd7c146fe 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -373,10 +373,7 @@ } if (Head_Type == HEAD_TYPE_FLAT) { - Report("Thread_Load_Lift_actuators",__FILE__,__LINE__,LOW,RpMessage,false,0); - //Trigger_Head_Actuators_Stub(ACTOT, ENABLE, UP); - //Trigger_Head_Actuators_Stub(ACTIN, ENABLE, UP); - //Trigger_Head_Actuators_Control(ACTOT, LOW,true);//UP + Report("Thread_Load_Lift right actuator",__FILE__,__LINE__,LOW,RpMessage,false,0); Trigger_Head_Actuators_Control(ACTIN, LOW,true);//UP } return OK; @@ -400,11 +397,8 @@ } if (Head_Type == HEAD_TYPE_FLAT) { - Report("Thread_Load_Lift_ OT actuator",__FILE__,__LINE__,LOW,RpMessage,false,0); + Report("Thread_Load_Lift left actuator",__FILE__,__LINE__,LOW,RpMessage,false,0); Trigger_Head_Actuators_Stub(ACTOT, ENABLE, UP); - //Trigger_Head_Actuators_Stub(ACTIN, ENABLE, UP); - //Trigger_Head_Actuators_Control(ACTOT, LOW,true);//UP - //Trigger_Head_Actuators_Control(ACTIN, LOW,true);//UP } return OK; @@ -476,7 +470,7 @@ MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_LLOADING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].directionthreadwize, 250, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_LLOADING], Thread_Load_HomingCallback,25000); if (Head_Type == HEAD_TYPE_FLAT) { - Report("Thread_Load_Close_ OT actuator",__FILE__,__LINE__,LOW,RpMessage,true,0); + Report("Thread_Load_Close left actuator",__FILE__,__LINE__,LOW,RpMessage,true,0); Trigger_Head_Actuators_Stub(ACTOT, ENABLE, DOWN); } @@ -516,12 +510,7 @@ } if (Head_Type == HEAD_TYPE_FLAT) { - Report("Thread_Load_Close_actuators",__FILE__,__LINE__,LOW,RpMessage,true,0); - - //Trigger_Head_Actuators_Control(ACTIN, LOW,false);//DOWN - //Trigger_Head_Actuators_Stub(ACTOT, ENABLE, DOWN); - - //Trigger_Head_Actuators_Stub(ACTIN, ENABLE, DOWN); + Report("Thread_Load_Close right actuators",__FILE__,__LINE__,LOW,RpMessage,true,0); HeadCard_Actuators_Relocate(); } return OK; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c index e16909c45..c217a68b3 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c @@ -1401,6 +1401,7 @@ Void jobTask(UArg arg0, UArg arg1) JobResumed = false; setmachineActive(false); SetMachineStatus(MACHINE_STATE__Ready); + IDS_Dispenser_Store_Data(); resetIdleCounter(); CurrentJob = NULL; if (IFS_Clearing_SuctionWaiting == true) diff --git a/Software/Stubs Collection/Procedures/EmbeddedParametersBuild.pproj b/Software/Stubs Collection/Procedures/EmbeddedParametersBuild.pproj index 408dfea72..d15843b99 100644 --- a/Software/Stubs Collection/Procedures/EmbeddedParametersBuild.pproj +++ b/Software/Stubs Collection/Procedures/EmbeddedParametersBuild.pproj @@ -1 +1 @@ -{"$id":"1","Name":"EmbeddedParametersBuild","Description":"This procedure lets the FSE to define values for cleaning, tamper alarms, initial heating, WCF value and automatic dispenser filling.","Scripts":{"$id":"2","$values":[{"$id":"3","Code":"using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing System.IO;\r\nusing Google.Protobuf;\r\nusing Tango.BL.Enumerations;\r\nusing Tango.PMR.Stubs;\r\nusing Tango.PMR.Diagnostics;\r\nusing Tango.FSE.Common.Diagnostics;\r\nusing Tango.PMR.EmbeddedParameters;\r\nusing Tango.PMR.IO;\r\nusing Tango.FSE.Procedures;\r\n\r\n\r\npublic class Cleaning\r\n{\r\n\t[Description(\"Actuator Going up time\")]\r\n\tpublic int Tup;\r\n\t[Description(\"Actuator Wait up time\")]\r\n\tpublic int Tdelay1;\r\n\t[Description(\"Actuator Wait Down time\")]\r\n\tpublic int Tdelay2;\r\n}\r\npublic class Advanced\r\n{\r\n\t[Description(\"Automatic heating on machine StartUp\")]\r\n\tpublic bool InitialHeating;\r\n\t[Description(\"Waste pressure buildup factor\")]\r\n\tpublic int WFCF;\r\n\t[Description(\"Auto fill mode on/off\")]\r\n\tpublic bool Autofill;\r\n}\r\n\r\npublic class Program\r\n{\r\n public void OnExecute(IProcedureContext context)\r\n {\r\n\r\n context.AddResult(ResultType.Passed, \"My Value Name\", \"Test for this value has passed.\");\r\n\t\tConfigurationParameters configurationParameters = new ConfigurationParameters();\r\n\r\n\t\tbool AdvancedParams = context.GetInput(\"AdvancedParameters\");\r\n\t\tAdvanced Advancedparam = new Advanced();\r\n\t\tAdvancedparam.InitialHeating = true;\r\n\t\tAdvancedparam.WFCF = 40;\r\n\t\tAdvancedparam.Autofill = true;\r\n\t\tif (AdvancedParams == true)\r\n \tAdvancedparam =\tcontext.RequestUserInputFor(Advancedparam,\"Advanced parameters input Required\",\"Please fill in the form\");\r\n\r\n\t\tconfigurationParameters.BreakSensorLimit = 10;\r\n\r\n\t\t//how many samples to collect in diagnostics before sending\r\n\t\tconfigurationParameters.DiagnosticCollectionLimit = 3;\r\n\r\n\t\t//how many consecutive readout before declaring DC over/underheat alarm\r\n\t\tconfigurationParameters.OverHeatCountLimit = 3;\r\n\t\tconfigurationParameters.UnderHeatCountLimit = 3;\r\n\r\n\t\t// time of motor activity before opening the valve or after closing the valve, in milliseconds\r\n\t\tconfigurationParameters.CloseValveTimeout = 20;\r\n\t\tconfigurationParameters.OpenValveTimeout = 20;\r\n\r\n\t\t//backlash after filling - target pressure, timoeout, time staps (speed will be added in general parameters)\r\n\t\tconfigurationParameters.InitialDispenserPressure = 0.25; \r\n\t\tconfigurationParameters.InitialDispenserTimeout = 60000; //20 seconds\r\n\t\tconfigurationParameters.InitialDispenserTimeLag = 100;\r\n\r\n\t\t//job prepare - build pressure in dispensers - target pressure, timoeout, time staps, speed\r\n\t\tconfigurationParameters.DispenserBuildPressureSpeed = 950; //no more than 1000\r\n\t\tconfigurationParameters.DispenserBuildPressureLimit = 0.85; \r\n\t\tconfigurationParameters.DispenserBuildPressureTimeout = 180000;\r\n\t\tconfigurationParameters.DispenserBuildPressureLag = 100;\r\n\r\n\t\t//temperature band 1000 = 100% - thresholds for job start around target temprature - AC\r\n\t\tconfigurationParameters.ACHeatersLowerOperationLimit = 995;\r\n\t\tconfigurationParameters.ACHeatersUpperOperationLimit = 1005;\r\n\r\n\t\t//temperature band 1000 = 100% - thresholds for job start around target temprature - DC\r\n\t\tconfigurationParameters.DCHeatersLowerOperationLimit = 978;\r\n\t\tconfigurationParameters.DCHeatersUpperOperationLimit = 1005;\r\n\r\n\t\t// mid tank reading offset to add to the readout (OBSOLETE!)\r\n\t\tconfigurationParameters.MidTankPressureCorrection = 0.0;\r\n\r\n\t\t//waste factor for intersegment pressure building\r\n\t\tconfigurationParameters.DispenserPresegmentWFCF = Advancedparam.WFCF;\r\n\r\n\t\t//how much time to start the WFCF process (pressure buildup) before segment start\r\n\t\tconfigurationParameters.IDSPreSegmentWFCFTimeBeforeSegment = 12000;\r\n\r\n\t\t//flag: start heaters according to saved process parameters upon init?\r\n\t\tconfigurationParameters.StartHeatingOnInitSequence = Advancedparam.InitialHeating;\r\n\r\n\t\t// current test for the heaters - alarm thresholds\r\n\t\tconfigurationParameters.CurrentAlarmLowLimit = 0.78;\r\n\t\tconfigurationParameters.CurrentAlarmHighLimit = 1.07;\r\n\r\n\t\t//currently not in use\r\n\t\tconfigurationParameters.IDSSegmentRefillTimeout = 5000;\r\n\t\tconfigurationParameters.IDSPreSegmentBuildupTime = 5000;\r\n\t\t//cleaning!!!!!!!!!!\r\n\t\tconfigurationParameters.IDSCleaningSpeed = 800;\r\n\t\tconfigurationParameters.IDSCleaningStopBeforeSegmentTime = 10000; //end of presegemnt\r\n\t\tconfigurationParameters.IDSCleaningStartSprayPreSegmentTime =2000; //beginning of presegment\r\n\r\n\t\tbool SetCleaning = context.GetInput(\"SetCleaningValues\");\r\n Cleaning Clean = new Cleaning();\r\n\t\tClean.Tup = 10;\r\n\t\tClean.Tdelay1 = 98;\r\n\t\tClean.Tdelay2 = 198;//300 milli up, stay 1 sec, stay down 2 sec\r\n\t\tif (SetCleaning == true)\r\n \tClean =\tcontext.RequestUserInputFor(Clean,\"Cleaning Input Required\",\"Please fill in the form\");\r\n\r\n\t\t// Tup = LeftRockerSpeed/100;\r\n\t\t// Tdelay1 = LeftRockerSpeed%100;\r\n\t\t// Tdelay2 = RightRockerSpeed;\r\n\t\tint LeftRockerSpeed = Clean.Tup*100+Clean.Tdelay1;\r\n\t\tint RightRockerSpeed = Clean.Tdelay2;\r\n\r\n\t\tconfigurationParameters.IDSLeftCleaningMotorSpeed = LeftRockerSpeed;\r\n\t\tconfigurationParameters.IDSRightCleaningMotorSpeed = RightRockerSpeed;\r\n\r\n\t\tconfigurationParameters.SwitchToIdleTimeinSeconds = 3600;\r\n\t\tconfigurationParameters.IdleDrierTemperature = 80;\r\n\t\tconfigurationParameters.IdleHeadTemperature = 80;\r\n\t\tconfigurationParameters.IdleMixerTemperature = 0;\r\n\t\tconfigurationParameters.PowerOffTemperatureLimit = 60;\r\n\r\n\t\t//general parameters, ORDER MUST BE PRESERVED!!!!\r\n\t\t//check the dispensers hard limit alarms\r\n\t\t/*1*/\r\n\t\tDouble checkHardLimitAlarms = new Double();\r\n\t\tcheckHardLimitAlarms = 1.0;\r\n\t\tconfigurationParameters.GeneralParameters.Add(checkHardLimitAlarms);\r\n\r\n\t\t/*2*/\r\n\t\tDouble checkCurrentAlarms = new Double();\r\n\t\tcheckCurrentAlarms = 0.0;\r\n\t\tconfigurationParameters.GeneralParameters.Add(checkCurrentAlarms);\r\n\t\t//check the tamper alarms\r\n\r\n\t\t/*3*/\r\n\t\tDouble checkTamperAlarms = new Double();\r\n\t\tcheckTamperAlarms = context.GetInput(\"CheckTampers\");\r\n\t\tconfigurationParameters.GeneralParameters.Add(checkTamperAlarms);\r\n\r\n\t\t/*4*/\r\n\t\tDouble checkMotorAlarms = new Double();\r\n\t\tcheckMotorAlarms = 1.0;\r\n\t\tconfigurationParameters.GeneralParameters.Add(checkMotorAlarms);\r\n\r\n\t\t/*5*/\r\n\t\tDouble WinderBackToBaseTime = new Double();\r\n\t\tWinderBackToBaseTime = 820.0;\r\n\t\tconfigurationParameters.GeneralParameters.Add(WinderBackToBaseTime);\r\n\t\t/*6*/\r\n\t\tDouble DispenserInitialPressureSpeed = new Double();\r\n\t\tDispenserInitialPressureSpeed = 1050.0;\r\n\t\tconfigurationParameters.GeneralParameters.Add(DispenserInitialPressureSpeed);\r\n\r\n\t\t/*7*/\r\n\t\tDouble SetDiagnosticMode = new Double();\r\n\t\tSetDiagnosticMode = 3.0;\t\t\r\n\t\tconfigurationParameters.GeneralParameters.Add(SetDiagnosticMode);\r\n\r\n\t\t/*8*/\t\t\r\n\t\tDouble SetAutoFill = new Double();\r\n\t\tSetAutoFill = 3.0;\t\t\r\n\t\tif (Advancedparam.Autofill == false)\r\n\t\t\tSetAutoFill = 0.0;\r\n\t\tconfigurationParameters.GeneralParameters.Add(SetAutoFill);\r\n\r\n\t\t//configurationParameters\t= context.RequestUserInputFor(configurationParameters,\"ConfigurationParameters Input Required\",\"Please fill in the form\");\r\n\t\t/*Directory.CreateDirectory (\"C:/Temp\");\r\n\t\tFile.WriteAllBytes(\"C:/temp/EmbParam.cfg\",configurationParameters.ToBytes());\r\n\r\n\t\tbyte[] fileBytes1 = File.ReadAllBytes(\"C:/temp/EmbParam.cfg\");*/\r\n\t\tbyte[] fileBytes = configurationParameters.ToBytes();\r\n\r\n\r\n\t\tvar config = ConfigurationParameters.Parser.ParseFrom(fileBytes);\r\n\r\n\t\tcontext.Write( config);\r\n\t\tThread.Sleep(1000);\r\n\r\n\t\r\n\t\tcontext.Write(\"\\n\\n Deleting old file\");\r\n\r\n\t\tDeleteRequest deleteRequest = new DeleteRequest();\r\n\t\tdeleteRequest.Path = \"SYSINFO//EmbParam.cfg\";\r\n\t\tdeleteRequest.Attribute = Tango.PMR.IO.FileAttribute.Unspecified;\r\n\t\tDeleteResponse response5 = context.Send(deleteRequest);\r\n\r\n\r\n\t\tThread.Sleep(1000);\r\n\t\tcontext.Write(\"\\n\\n Loading new file file\");\r\n\r\n\t\tFileUploadRequest fileUploadRequest = new FileUploadRequest();\r\n\t\tfileUploadRequest.Path = \"SYSINFO//EmbParam.cfg\";\r\n\t\tfileUploadRequest.Length = (int)fileBytes.Length;\r\n\t\tFileUploadResponse response2 = context.Send(fileUploadRequest);\r\n\t\tThread.Sleep(1000);\r\n\t\tlong chunk_size = response2.MaxChunkLength;\r\n\r\n\t\tcontext.Write(\"Chunk size \"+ chunk_size + \" file size \"+ fileBytes.Length +\"\\n\\n\");\r\n\t\tif (chunk_size < fileBytes.Length)\r\n\t\t{\r\n\t\t\tcontext.AddResult(ResultType.Failed, \"Chunk size too small\", chunk_size);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tFileChunkUploadRequest fileChunkUploadRequest = new FileChunkUploadRequest();\r\n\t\t\tfileChunkUploadRequest.UploadID = response2.UploadID;\r\n\t\t\tfileChunkUploadRequest.Buffer = ByteString.CopyFrom(fileBytes);\t\r\n\t\t\tvar response3 = context.Send(fileChunkUploadRequest);\r\n\t\t\r\n\t\t\t//if (response3.\r\n\r\n\t\t\t// activating the new file\r\n\t\t\tProgressRequest progressRequest = new ProgressRequest();\r\n\t\t\tprogressRequest.Amount = 0xCD;\r\n\t\t\tprogressRequest.Delay = 0xCD;\r\n\t\t\tvar response1 = context.Send(progressRequest);\r\n\t\t\tcontext.AddResult(ResultType.Passed, \"parameters loaded\", chunk_size);\r\n\t\t}\r\n\r\n }\r\n}","Name":"Program.csx","IsEntryPoint":true},{"$id":"4","Code":"using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing Google.Protobuf;\r\nusing Tango.BL.Enumerations;\r\nusing Tango.PMR.Stubs;\r\nusing Tango.PMR.Diagnostics;\r\nusing Tango.FSE.Common.Diagnostics;\r\nusing Tango.FSE.Procedures;\r\n\r\npublic class Service\r\n{\r\n public double Calc(double a, double b)\r\n {\r\n return a + b;\r\n }\r\n}","Name":"Service.csx","IsEntryPoint":false}]},"Inputs":{"$id":"5","$values":[{"$id":"6","Type":"Selection","SelectionInputs":{"$id":"7","$values":[{"$id":"8","Name":"Enable Tamper Check","Value":"1.0"},{"$id":"9","Name":"Disable Tamper Check","Value":"0.0"}]},"DisplayName":"Check Tamper / Fan alarms","Description":"Check Tamper / Fan alarms (1 -true, 0 - false)","Key":"CheckTampers","Value":"1.0"},{"$id":"10","Type":"Default","SelectionInputs":{"$id":"11","$values":[]},"DisplayName":"Set advanced parameters","Description":"Set advanced parameters","Key":"AdvancedParameters","Value":"false"},{"$id":"12","Type":"Default","SelectionInputs":{"$id":"13","$values":[]},"DisplayName":"Set Cleaning Values","Description":"Set to 1 if you want to update the cleaning values","Key":"SetCleaningValues","Value":"false"}]},"Variables":{"$id":"14","$values":[]},"ReferenceAssemblies":{"$id":"15","$values":[{"$id":"16","File":"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\mscorlib.dll","HintType":"System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"17","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Core\\v4.0_4.0.0.0__b77a5c561934e089\\System.Core.dll","HintType":"System.Linq.Enumerable, System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"18","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Windows.Forms\\v4.0_4.0.0.0__b77a5c561934e089\\System.Windows.Forms.dll","HintType":"System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"19","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.FSE.Procedures.dll","HintType":"Tango.FSE.Procedures.ProcedureProject, Tango.FSE.Procedures, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"20","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.FSE.Common.dll","HintType":"Tango.FSE.Common.Diagnostics.IDiagnosticsProvider, Tango.FSE.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"21","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.BL.dll","HintType":"Tango.BL.Enumerations.TechMonitors, Tango.BL, Version=2.0.36.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"22","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.PMR.dll","HintType":"Tango.PMR.Common.MessageType, Tango.PMR, Version=2.0.40.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"23","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.Transport.dll","HintType":"Tango.Transport.ITransporter, Tango.Transport, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"24","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.Integration.dll","HintType":"Tango.Integration.Operation.IMachineOperator, Tango.Integration, Version=2.0.31.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"25","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Google.Protobuf.dll","HintType":"Google.Protobuf.IMessage, Google.Protobuf, Version=3.4.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604"},{"$id":"26","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Drawing\\v4.0_4.0.0.0__b03f5f7f11d50a3a\\System.Drawing.dll","HintType":"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"}]},"Resources":{"$id":"27","$values":[]},"Dialogs":{"$id":"28","$values":[]},"ID":"2bd29884-5eb9-4d27-be4e-6cfa31dc9f66","ApartmentState":"MTA"} \ No newline at end of file +{"$id":"1","Name":"EmbeddedParametersBuild","Description":"This procedure lets the FSE to define values for cleaning, tamper alarms, initial heating, WCF value and automatic dispenser filling.","Scripts":{"$id":"2","$values":[{"$id":"3","Code":"using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing System.IO;\r\nusing Google.Protobuf;\r\nusing Tango.BL.Enumerations;\r\nusing Tango.PMR.Stubs;\r\nusing Tango.PMR.Diagnostics;\r\nusing Tango.FSE.Common.Diagnostics;\r\nusing Tango.PMR.EmbeddedParameters;\r\nusing Tango.PMR.IO;\r\nusing Tango.FSE.Procedures;\r\n\r\n\r\npublic class Cleaning\r\n{\r\n\t[Description(\"Actuator Going up time\")]\r\n\tpublic int Tup;\r\n\t[Description(\"Actuator Wait up time\")]\r\n\tpublic int Tdelay1;\r\n\t[Description(\"Actuator Wait Down time\")]\r\n\tpublic int Tdelay2;\r\n}\r\npublic class Advanced\r\n{\r\n\t[Description(\"Automatic heating on machine StartUp\")]\r\n\tpublic bool InitialHeating;\r\n\t[Description(\"Waste pressure buildup factor\")]\r\n\tpublic int WFCF;\r\n\t[Description(\"Auto fill mode on/off\")]\r\n\tpublic bool Autofill;\r\n}\r\n\r\npublic class Program\r\n{\r\n public void OnExecute(IProcedureContext context)\r\n {\r\n\r\n context.AddResult(ResultType.Passed, \"My Value Name\", \"Test for this value has passed.\");\r\n\t\tConfigurationParameters configurationParameters = new ConfigurationParameters();\r\n\r\n\t\tbool AdvancedParams = context.GetInput(\"AdvancedParameters\");\r\n\t\tAdvanced Advancedparam = new Advanced();\r\n\t\tAdvancedparam.InitialHeating = true;\r\n\t\tAdvancedparam.WFCF = 40;\r\n\t\tAdvancedparam.Autofill = true;\r\n\t\tif (AdvancedParams == true)\r\n \tAdvancedparam =\tcontext.RequestUserInputFor(Advancedparam,\"Advanced parameters input Required\",\"Please fill in the form\");\r\n\r\n\t\tconfigurationParameters.BreakSensorLimit = 10;\r\n\r\n\t\t//how many samples to collect in diagnostics before sending\r\n\t\tconfigurationParameters.DiagnosticCollectionLimit = 3;\r\n\r\n\t\t//how many consecutive readout before declaring DC over/underheat alarm\r\n\t\tconfigurationParameters.OverHeatCountLimit = 3;\r\n\t\tconfigurationParameters.UnderHeatCountLimit = 3;\r\n\r\n\t\t// time of motor activity before opening the valve or after closing the valve, in milliseconds\r\n\t\tconfigurationParameters.CloseValveTimeout = 20;\r\n\t\tconfigurationParameters.OpenValveTimeout = 20;\r\n\r\n\t\t//backlash after filling - target pressure, timoeout, time staps (speed will be added in general parameters)\r\n\t\tconfigurationParameters.InitialDispenserPressure = 3.85; //used for initial pre-run maximal pressure\r\n\t\tconfigurationParameters.InitialDispenserTimeout = 120000; ////used for initial pre-run target number of steps\r\n\t\tconfigurationParameters.InitialDispenserTimeLag = 100;\r\n\r\n\t\t//job prepare - build pressure in dispensers - target pressure, timoeout, time staps, speed\r\n\t\tconfigurationParameters.DispenserBuildPressureSpeed = 950; //no more than 1000\r\n\t\tconfigurationParameters.DispenserBuildPressureLimit = 0.85; \r\n\t\tconfigurationParameters.DispenserBuildPressureTimeout = 180000;\r\n\t\tconfigurationParameters.DispenserBuildPressureLag = 100;\r\n\r\n\t\t//temperature band 1000 = 100% - thresholds for job start around target temprature - AC\r\n\t\tconfigurationParameters.ACHeatersLowerOperationLimit = 995;\r\n\t\tconfigurationParameters.ACHeatersUpperOperationLimit = 1005;\r\n\r\n\t\t//temperature band 1000 = 100% - thresholds for job start around target temprature - DC\r\n\t\tconfigurationParameters.DCHeatersLowerOperationLimit = 978;\r\n\t\tconfigurationParameters.DCHeatersUpperOperationLimit = 1005;\r\n\r\n\t\t// mid tank reading offset to add to the readout (OBSOLETE!)\r\n\t\tconfigurationParameters.MidTankPressureCorrection = 0.0;\r\n\r\n\t\t//waste factor for intersegment pressure building\r\n\t\tconfigurationParameters.DispenserPresegmentWFCF = Advancedparam.WFCF;\r\n\r\n\t\t//how much time to start the WFCF process (pressure buildup) before segment start\r\n\t\tconfigurationParameters.IDSPreSegmentWFCFTimeBeforeSegment = 12000;\r\n\r\n\t\t//flag: start heaters according to saved process parameters upon init?\r\n\t\tconfigurationParameters.StartHeatingOnInitSequence = Advancedparam.InitialHeating;\r\n\r\n\t\t// current test for the heaters - alarm thresholds\r\n\t\tconfigurationParameters.CurrentAlarmLowLimit = 0.78;\r\n\t\tconfigurationParameters.CurrentAlarmHighLimit = 1.07;\r\n\r\n\t\t//currently not in use\r\n\t\tconfigurationParameters.IDSSegmentRefillTimeout = 5000;\r\n\t\tconfigurationParameters.IDSPreSegmentBuildupTime = 5000;\r\n\t\t//cleaning!!!!!!!!!!\r\n\t\tconfigurationParameters.IDSCleaningSpeed = 800;\r\n\t\tconfigurationParameters.IDSCleaningStopBeforeSegmentTime = 10000; //end of presegemnt\r\n\t\tconfigurationParameters.IDSCleaningStartSprayPreSegmentTime =2000; //beginning of presegment\r\n\r\n\t\tbool SetCleaning = context.GetInput(\"SetCleaningValues\");\r\n Cleaning Clean = new Cleaning();\r\n\t\tClean.Tup = 10;\r\n\t\tClean.Tdelay1 = 98;\r\n\t\tClean.Tdelay2 = 198;//300 milli up, stay 1 sec, stay down 2 sec\r\n\t\tif (SetCleaning == true)\r\n \tClean =\tcontext.RequestUserInputFor(Clean,\"Cleaning Input Required\",\"Please fill in the form\");\r\n\r\n\t\t// Tup = LeftRockerSpeed/100;\r\n\t\t// Tdelay1 = LeftRockerSpeed%100;\r\n\t\t// Tdelay2 = RightRockerSpeed;\r\n\t\tint LeftRockerSpeed = Clean.Tup*100+Clean.Tdelay1;\r\n\t\tint RightRockerSpeed = Clean.Tdelay2;\r\n\r\n\t\tconfigurationParameters.IDSLeftCleaningMotorSpeed = LeftRockerSpeed;\r\n\t\tconfigurationParameters.IDSRightCleaningMotorSpeed = RightRockerSpeed;\r\n\r\n\t\tconfigurationParameters.SwitchToIdleTimeinSeconds = 3600;\r\n\t\tconfigurationParameters.IdleDrierTemperature = 80;\r\n\t\tconfigurationParameters.IdleHeadTemperature = 80;\r\n\t\tconfigurationParameters.IdleMixerTemperature = 0;\r\n\t\tconfigurationParameters.PowerOffTemperatureLimit = 60;\r\n\r\n\t\t//general parameters, ORDER MUST BE PRESERVED!!!!\r\n\t\t//check the dispensers hard limit alarms\r\n\t\t/*1*/\r\n\t\tDouble checkHardLimitAlarms = new Double();\r\n\t\tcheckHardLimitAlarms = 1.0;\r\n\t\tconfigurationParameters.GeneralParameters.Add(checkHardLimitAlarms);\r\n\r\n\t\t/*2*/\r\n\t\tDouble checkCurrentAlarms = new Double();\r\n\t\tcheckCurrentAlarms = 0.0;\r\n\t\tconfigurationParameters.GeneralParameters.Add(checkCurrentAlarms);\r\n\t\t//check the tamper alarms\r\n\r\n\t\t/*3*/\r\n\t\tDouble checkTamperAlarms = new Double();\r\n\t\tcheckTamperAlarms = context.GetInput(\"CheckTampers\");\r\n\t\tconfigurationParameters.GeneralParameters.Add(checkTamperAlarms);\r\n\r\n\t\t/*4*/\r\n\t\tDouble checkMotorAlarms = new Double();\r\n\t\tcheckMotorAlarms = 1.0;\r\n\t\tconfigurationParameters.GeneralParameters.Add(checkMotorAlarms);\r\n\r\n\t\t/*5*/\r\n\t\tDouble WinderBackToBaseTime = new Double();\r\n\t\tWinderBackToBaseTime = 820.0;\r\n\t\tconfigurationParameters.GeneralParameters.Add(WinderBackToBaseTime);\r\n\t\t/*6*/\r\n\t\tDouble DispenserInitialPressureSpeed = new Double();\r\n\t\tDispenserInitialPressureSpeed = 1050.0;\r\n\t\tconfigurationParameters.GeneralParameters.Add(DispenserInitialPressureSpeed);\r\n\r\n\t\t/*7*/\r\n\t\tDouble SetDiagnosticMode = new Double();\r\n\t\tSetDiagnosticMode = 3.0;\t\t\r\n\t\tconfigurationParameters.GeneralParameters.Add(SetDiagnosticMode);\r\n\r\n\t\t/*8*/\t\t\r\n\t\tDouble SetAutoFill = new Double();\r\n\t\tSetAutoFill = 3.0;\t\t\r\n\t\tif (Advancedparam.Autofill == false)\r\n\t\t\tSetAutoFill = 0.0;\r\n\t\tconfigurationParameters.GeneralParameters.Add(SetAutoFill);\r\n\r\n\t\t//configurationParameters\t= context.RequestUserInputFor(configurationParameters,\"ConfigurationParameters Input Required\",\"Please fill in the form\");\r\n\t\t/*Directory.CreateDirectory (\"C:/Temp\");\r\n\t\tFile.WriteAllBytes(\"C:/temp/EmbParam.cfg\",configurationParameters.ToBytes());\r\n\r\n\t\tbyte[] fileBytes1 = File.ReadAllBytes(\"C:/temp/EmbParam.cfg\");*/\r\n\t\tbyte[] fileBytes = configurationParameters.ToBytes();\r\n\r\n\r\n\t\tvar config = ConfigurationParameters.Parser.ParseFrom(fileBytes);\r\n\r\n\t\tcontext.Write( config);\r\n\t\tThread.Sleep(1000);\r\n\r\n\t\r\n\t\tcontext.Write(\"\\n\\n Deleting old file\");\r\n\r\n\t\tDeleteRequest deleteRequest = new DeleteRequest();\r\n\t\tdeleteRequest.Path = \"SYSINFO//EmbParam.cfg\";\r\n\t\tdeleteRequest.Attribute = Tango.PMR.IO.FileAttribute.Unspecified;\r\n\t\tDeleteResponse response5 = context.Send(deleteRequest);\r\n\r\n\r\n\t\tThread.Sleep(1000);\r\n\t\tcontext.Write(\"\\n\\n Loading new file file\");\r\n\r\n\t\tFileUploadRequest fileUploadRequest = new FileUploadRequest();\r\n\t\tfileUploadRequest.Path = \"SYSINFO//EmbParam.cfg\";\r\n\t\tfileUploadRequest.Length = (int)fileBytes.Length;\r\n\t\tFileUploadResponse response2 = context.Send(fileUploadRequest);\r\n\t\tThread.Sleep(1000);\r\n\t\tlong chunk_size = response2.MaxChunkLength;\r\n\r\n\t\tcontext.Write(\"Chunk size \"+ chunk_size + \" file size \"+ fileBytes.Length +\"\\n\\n\");\r\n\t\tif (chunk_size < fileBytes.Length)\r\n\t\t{\r\n\t\t\tcontext.AddResult(ResultType.Failed, \"Chunk size too small\", chunk_size);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tFileChunkUploadRequest fileChunkUploadRequest = new FileChunkUploadRequest();\r\n\t\t\tfileChunkUploadRequest.UploadID = response2.UploadID;\r\n\t\t\tfileChunkUploadRequest.Buffer = ByteString.CopyFrom(fileBytes);\t\r\n\t\t\tvar response3 = context.Send(fileChunkUploadRequest);\r\n\t\t\r\n\t\t\t//if (response3.\r\n\r\n\t\t\t// activating the new file\r\n\t\t\tProgressRequest progressRequest = new ProgressRequest();\r\n\t\t\tprogressRequest.Amount = 0xCD;\r\n\t\t\tprogressRequest.Delay = 0xCD;\r\n\t\t\tvar response1 = context.Send(progressRequest);\r\n\t\t\tcontext.AddResult(ResultType.Passed, \"parameters loaded\", chunk_size);\r\n\t\t}\r\n\r\n }\r\n}","Name":"Program.csx","IsEntryPoint":true},{"$id":"4","Code":"using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing Google.Protobuf;\r\nusing Tango.BL.Enumerations;\r\nusing Tango.PMR.Stubs;\r\nusing Tango.PMR.Diagnostics;\r\nusing Tango.FSE.Common.Diagnostics;\r\nusing Tango.FSE.Procedures;\r\n\r\npublic class Service\r\n{\r\n public double Calc(double a, double b)\r\n {\r\n return a + b;\r\n }\r\n}","Name":"Service.csx","IsEntryPoint":false}]},"Inputs":{"$id":"5","$values":[{"$id":"6","Type":"Selection","SelectionInputs":{"$id":"7","$values":[{"$id":"8","Name":"Enable Tamper Check","Value":"1.0"},{"$id":"9","Name":"Disable Tamper Check","Value":"0.0"}]},"DisplayName":"Check Tamper / Fan alarms","Description":"Check Tamper / Fan alarms (1 -true, 0 - false)","Key":"CheckTampers","Value":"1.0"},{"$id":"10","Type":"Default","SelectionInputs":{"$id":"11","$values":[]},"DisplayName":"Set advanced parameters","Description":"Set advanced parameters","Key":"AdvancedParameters","Value":"false"},{"$id":"12","Type":"Default","SelectionInputs":{"$id":"13","$values":[]},"DisplayName":"Set Cleaning Values","Description":"Set to 1 if you want to update the cleaning values","Key":"SetCleaningValues","Value":"false"}]},"Variables":{"$id":"14","$values":[]},"ReferenceAssemblies":{"$id":"15","$values":[{"$id":"16","File":"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\mscorlib.dll","HintType":"System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"17","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Core\\v4.0_4.0.0.0__b77a5c561934e089\\System.Core.dll","HintType":"System.Linq.Enumerable, System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"18","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Windows.Forms\\v4.0_4.0.0.0__b77a5c561934e089\\System.Windows.Forms.dll","HintType":"System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"19","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.FSE.Procedures.dll","HintType":"Tango.FSE.Procedures.ProcedureProject, Tango.FSE.Procedures, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"20","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.FSE.Common.dll","HintType":"Tango.FSE.Common.Diagnostics.IDiagnosticsProvider, Tango.FSE.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"21","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.BL.dll","HintType":"Tango.BL.Enumerations.TechMonitors, Tango.BL, Version=2.0.36.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"22","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.PMR.dll","HintType":"Tango.PMR.Common.MessageType, Tango.PMR, Version=2.0.40.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"23","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.Transport.dll","HintType":"Tango.Transport.ITransporter, Tango.Transport, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"24","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.Integration.dll","HintType":"Tango.Integration.Operation.IMachineOperator, Tango.Integration, Version=2.0.31.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"25","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Google.Protobuf.dll","HintType":"Google.Protobuf.IMessage, Google.Protobuf, Version=3.4.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604"},{"$id":"26","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Drawing\\v4.0_4.0.0.0__b03f5f7f11d50a3a\\System.Drawing.dll","HintType":"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"}]},"Resources":{"$id":"27","$values":[]},"Dialogs":{"$id":"28","$values":[]},"ID":"2bd29884-5eb9-4d27-be4e-6cfa31dc9f66","ApartmentState":"MTA"} \ No newline at end of file diff --git a/Software/Stubs Collection/Procedures/FFS Rebuild.pproj b/Software/Stubs Collection/Procedures/FFS Rebuild.pproj new file mode 100644 index 000000000..2dca7e072 --- /dev/null +++ b/Software/Stubs Collection/Procedures/FFS Rebuild.pproj @@ -0,0 +1 @@ +{"$id":"1","Name":"FFS Rebuild","Description":"This procedure formats the flash file system of the embedded system. use it if the embedded storage looks malfunctioning. this call disconnects the tablet and holds the system for one minute.","Scripts":{"$id":"2","$values":[{"$id":"3","Code":"using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing Google.Protobuf;\r\nusing Tango.BL.Enumerations;\r\nusing Tango.PMR.Stubs;\r\nusing Tango.PMR.Diagnostics;\r\nusing Tango.FSE.Common.Diagnostics;\r\nusing Tango.FSE.Procedures;\r\n\r\npublic class Program\r\n{\r\n public void OnExecute(IProcedureContext context)\r\n {\r\n\t\tStubDancerPositionRequest stubDancerPositionRequest = new StubDancerPositionRequest();\r\n\t\tstring response1 = context.GetInput(\"ValidationPassword\");\r\n List list = new List();\r\n\t\tif (response1 == \"Aa123456\")\r\n\t\t{\r\n\t\t\t//CF - initialize FFS\r\n\t\t\tProgressRequest progressRequest = new ProgressRequest();\r\n\t\t\tprogressRequest.Amount = 0xCF;\r\n\t\t\tprogressRequest.Delay = 0xCF;\r\n\t\t\t\r\n\t\t\t\tvar response = context.Send(progressRequest);\r\n\t }\r\n\r\n }\r\n}","Name":"Program.csx","IsEntryPoint":true},{"$id":"4","Code":"using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing Google.Protobuf;\r\nusing Tango.BL.Enumerations;\r\nusing Tango.PMR.Stubs;\r\nusing Tango.PMR.Diagnostics;\r\nusing Tango.FSE.Common.Diagnostics;\r\nusing Tango.FSE.Procedures;\r\n\r\npublic class Service\r\n{\r\n public double Calc(double a, double b)\r\n {\r\n return a + b;\r\n }\r\n}","Name":"Service.csx","IsEntryPoint":false}]},"Inputs":{"$id":"5","$values":[{"$id":"6","Type":"Default","SelectionInputs":{"$id":"7","$values":[]},"DisplayName":"Validation Password","Description":"Validation Password","Key":"ValidationPassword","Value":"0"}]},"Variables":{"$id":"8","$values":[]},"ReferenceAssemblies":{"$id":"9","$values":[{"$id":"10","File":"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\mscorlib.dll","HintType":"System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"11","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Core\\v4.0_4.0.0.0__b77a5c561934e089\\System.Core.dll","HintType":"System.Linq.Enumerable, System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"12","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Windows.Forms\\v4.0_4.0.0.0__b77a5c561934e089\\System.Windows.Forms.dll","HintType":"System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"13","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.FSE.Procedures.dll","HintType":"Tango.FSE.Procedures.ProcedureProject, Tango.FSE.Procedures, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"14","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.FSE.Common.dll","HintType":"Tango.FSE.Common.Diagnostics.IDiagnosticsProvider, Tango.FSE.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"15","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.BL.dll","HintType":"Tango.BL.Enumerations.TechMonitors, Tango.BL, Version=2.0.36.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"16","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.PMR.dll","HintType":"Tango.PMR.Common.MessageType, Tango.PMR, Version=2.0.40.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"17","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.Transport.dll","HintType":"Tango.Transport.ITransporter, Tango.Transport, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"18","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.Integration.dll","HintType":"Tango.Integration.Operation.IMachineOperator, Tango.Integration, Version=2.0.31.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"19","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Google.Protobuf.dll","HintType":"Google.Protobuf.IMessage, Google.Protobuf, Version=3.4.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604"},{"$id":"20","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Drawing\\v4.0_4.0.0.0__b03f5f7f11d50a3a\\System.Drawing.dll","HintType":"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"}]},"Resources":{"$id":"21","$values":[]},"Dialogs":{"$id":"22","$values":[]},"ID":"23b690b1-bd08-45ba-807b-3faa244ed8c3","ApartmentState":"MTA"} \ No newline at end of file diff --git a/Software/Stubs Collection/stubs/1.tpf b/Software/Stubs Collection/stubs/1.tpf deleted file mode 100644 index 25215919f..000000000 --- a/Software/Stubs Collection/stubs/1.tpf +++ /dev/null @@ -1,3084 +0,0 @@ - - - - - - Temperatures - - - e4892498-fa1a-413c-9dd8-633efaade51c - 415 - 692.74336283185824 - 160 - 102.34070796460173 - 0 - 6b9cba1d-4acf-4992-97ad-e422bca6ada2 - -1 - - - a15665e3-af39-42d8-8c06-97d770632e10 - 928 - 593.77433628318579 - 207 - 184.4159292035398 - 0 - 6D6CFA18-5922-4AFE-84B3-2721CE128681 - -1 - - DryerAirHeater - 0 - 69.85 - false - false - true - - 0 - - - 0ac64716-d30c-489b-939e-a26d06445866 - 828 - 682.88053097345 - 130 - 100.31415929203541 - 0 - A5DFC2DB-3B36-4377-96A0-D492CE785C00 - -1 - - DryerMainHeater - 0 - 92.97 - false - false - true - - 0 - - - 181796d8-64f6-420a-8f37-9af9df67d6a9 - 717 - 684.46902654867324 - 127 - 101.3274336283186 - 0 - 86808B48-B7F9-43AD-840E-2A6A5987C305 - -1 - - DryerSecondaryHeater - 0 - 92.94 - true - false - true - - 0 - - - fd2bb3a3-a411-470d-bde7-0beaf84da059 - 931 - 83.08407079646031 - 186 - 195.56194690265494 - 0 - 8E764A14-0F84-4FEC-928B-32A2509CAD57 - -1 - - HeaterZone3 - 0 - 39.55 - false - false - true - - 0 - - - 7e8dd386-cca6-4d07-8a3e-af5403756002 - 1106 - 88.1504424778762 - 200 - 187.45575221238937 - 0 - B4EE8CC0-EE2B-4ABE-BF09-9226860E756B - -1 - - HeaterZone2 - 0 - 37.29 - false - false - true - - 0 - - - 32a91e5f-27c8-490d-b187-8e39b6626a13 - 1311 - 89.163716814159329 - 157 - 194.54867256637175 - 0 - 27E7BB74-81C3-4EF2-80AE-962F111C441F - -1 - - HeaterZone1 - 0 - 34.27 - false - false - true - - 0 - - - c844235a-8a29-4c2e-a964-e8f546d2ced7 - 1140 - 588.70796460177 - 173 - 183.40265486725662 - 0 - 42A62A48-F1D5-4BB6-AFEA-6A7DF6DCF626 - -1 - - MixerHeater - 0 - 54.669999999999995 - false - false - true - - 0 - - - 45b121b5-cf7c-41f7-8089-6d4d6b1ed2c8 - 751 - 80.420353982302458 - 169 - 197.27876106194645 - 0 - 94574D69-46E1-4144-A8B5-D4BF0DA96D18 - -1 - - HeaterZone4 - 0 - 40.71 - false - false - true - - 0 - - - e6b3eb18-482b-450e-b8a8-d2ac6bba4fd4 - 547 - 85.482300884952679 - 186 - 195.56194690265494 - 0 - D6771DF4-771E-4D62-B6BA-BDE361C0A0F3 - -1 - - HeaterZone5 - 0 - 43.389999999999993 - false - false - true - - 0 - - - efff2e67-e3a3-4667-9208-4704707d7cda - 353 - 86.69911504424698 - 186 - 195.56194690265494 - 0 - D2B6CAA0-055E-4871-8D91-A5370F1ACB22 - -1 - - HeaterZone6 - 0 - 46.809999999999995 - false - false - true - - 0 - - - f9936dba-cef8-41e3-a715-eb629dca1870 - 265 - 683.95575221238948 - 131 - 109.43362831858394 - 0 - 1778C1A7-AFB5-42F9-9E00-E80D30D9FC0A - -1 - 10 - 0 - - - 5f2610dc-3b9d-4302-b8f5-77a5e1c73b8c - 1027.9999999999973 - 291.07079646017547 - 44 - 42.557522123893705 - 0 - -14774017 - D - - - eadb5257-47a2-4336-a72a-f2d157fe70cb - 907.99999999999909 - 295.35840707964616 - 44 - 42.557522123893705 - 0 - -14774017 - F - - - 6c59af66-169a-46e0-89ae-a81e3e619043 - 785.00000000000159 - 288.5000000000004 - 44 - 42.557522123893705 - 0 - -14774017 - I - - - 3b32b9a8-f300-443f-950e-c49f81678bac - 624.99999999999966 - 285.86725663716874 - 44 - 42.557522123893705 - 0 - -14774017 - L - - - f6d44793-ed44-46ed-8854-eacbc11af10c - 569 - 688.00884955752213 - 155 - 96.261061946902714 - 0 - df38139e-0026-46bc-b72f-df5f9eec80f7 - -1 - - - 43793f93-da64-4409-b583-bca498f641e6 - 1308 - 656.59734513274338 - 203 - 107.40707964601774 - 0 - -1 - - - - be9db1fd-d408-4f1c-a15a-d6ffe58fafb6 - 1292 - 343.56637168141606 - 186 - 195.56194690265494 - 0 - 188285E5-1493-4BED-8269-91743770A631 - -1 - - HeaterZone7 - 0 - 50.449999999999996 - false - false - true - - 0 - - - f129ea0d-9abb-437f-928e-1cd1f569db2a - 1190.0000000000025 - 294.69026548672929 - 39 - 38.504424778760836 - 0 - -14774017 - C - - - 217c677a-3e11-4a7c-959b-616dae1259dd - 1369 - 295.87168141592934 - 44 - 42.557522123893705 - 0 - -14774017 - A - - - 381f67cf-b7c6-4f6d-b089-37130798a5d8 - 1107 - 342.55309734513293 - 186 - 195.56194690265494 - 0 - 461FA2D7-1918-4958-AAA7-37A1A329FA12 - -1 - - HeaterZone8 - 0 - 48.22 - false - false - true - - 0 - - - 3c923a93-4d15-4bbc-b1b3-be1876a77cfc - 924 - 343.56637168141606 - 186 - 195.56194690265494 - 0 - 63E2AFE0-0746-4AAB-AA74-C26EC1F282AE - -1 - - HeaterZone9 - 0 - 47.269999999999996 - false - false - true - - 0 - - - 26e078e6-df8c-4fbf-b10e-4b3f7c7e9500 - 359 - 342.55309734513304 - 186 - 195.56194690265494 - 0 - 2D578A37-D808-40D0-ACE4-4A868EDD6BDC - -1 - - HeaterZone12 - 0 - 39.64 - false - false - true - - 0 - - - 7a8c3948-bb3d-4eb1-9276-315d34038f91 - 550 - 343.56637168141611 - 186 - 195.56194690265494 - 0 - D41BBB23-6EB5-4743-89DB-9191000B475F - -1 - - HeaterZone11 - 0 - 45.449999999999996 - false - false - true - - 0 - - - f7d4c8ac-28cb-4779-83ef-3ede5e5a612c - 738 - 344.57964601769908 - 186 - 195.56194690265494 - 0 - B4D0A1C8-711C-49A9-82A3-B5B9F35FC131 - -1 - - HeaterZone10 - 0 - 48.459999999999994 - false - false - true - - 0 - - - 120a9bea-5b5a-4ba4-92f5-40135f49a344 - 6 - 535.07522123893818 - 338 - 137.80530973451323 - 0 - -14774017 - - 0 - 674d92c5-e6f8-4a62-bc62-b8e2fe0882a0 - 2020-01-14T07:44:15.1425366Z - Process parameters 2 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 7 - 0 - 0 - 0 - 0 - 7 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - - - - Name - 0 - - - Dyeing Speed - 1 - - - Min Ink Uptake - 2 - - - Max Ink Uptake - 3 - - - Feeder Tension - 4 - - - Puller Tension - 5 - - - Winder Tension - 6 - - - Mixer Temp - 7 - - - Head Zone 1 Temp - 8 - - - Head Zone 2 Temp - 9 - - - Head Zone 3 Temp - 10 - - - Head Zone 4 Temp - 11 - - - Head Zone 5 Temp - 12 - - - Head Zone 6 Temp - 13 - - - Dryer Air Flow - 14 - - - Dryer Zone 1 Temp - 15 - - - Dryer Zone 2 Temp - 16 - - - Dryer Zone 3 Temp - 17 - - - Dryer Buffer Length - 18 - - - Head Air Flow - 19 - - - Process Parameters Tables Group Guid - 20 - - - Table Index - 21 - - - - - e502555c-95b0-4688-b5e3-8becb30fc62c - 1458.875 - 91.7821782178217 - 200 - 187.45575221238937 - 0 - F8C1BA7F-F6DF-414D-BAF5-D4CB292F91F6 - -1 - - HeadCoverHeater1 - 0 - 283.75 - false - false - true - - 0 - - - 0f7a35fc-e363-45b2-948d-ba66f91e4f0d - 1457.8333333333333 - 344.58910891089096 - 200 - 187.45575221238937 - 0 - F39B952A-6194-4055-A5CB-A3421BFE0F9B - -1 - - HeadCoverHeater2 - 0 - 283.75 - false - false - true - - 0 - - - 0214c2bd-98e2-4435-b55f-ec165b0782dd - 532 - 587.69469026548677 - 163 - 77.008849557522126 - 0 - FE0D0A56-5795-4C5A-8E09-939FBB35C441 - -1 - 10 - 2 - - - 387e9a45-e608-47b8-9f3c-5572d0544e41 - 708 - 584.65486725663732 - 168 - 84.101769911504334 - 0 - 94F3E5A1-413E-4EA0-BDE1-F0625BFF7910 - -1 - 10 - 2 - - - 18f62f2f-dbc0-4a3e-8af6-efdffc9562a5 - 12 - 699.86283185840716 - 234 - 96.2610619469026 - 0 - B6FE07F8-2435-495D-ABFE-358C76812413 - -1 - - - cb7b89a1-cdb4-408e-acc8-40e8dcb8d6ac - 7 - 5.995575221238937 - 142 - 84.101769911504391 - 0 - 9F98B9D3-F989-4D03-90E8-721671835E0B - -1 - 10 - 2 - - - 6be6ca7d-3ca6-4206-9c67-415174b71ace - 168 - 7.3893805309738809 - 146 - 83.088495575221259 - 0 - D59EFB38-79D9-446C-BCB5-92D8FDA900E4 - -1 - 10 - 2 - - - 2dca972d-3c41-4b07-a047-b63a23470a7e - 347 - 574.92035398230325 - 160 - 102.34070796460173 - 0 - 75f69efe-1c7e-4015-a6eb-2686d4f67a67 - -1 - - - 38e5d1ac-40a5-4c5f-822c-51813cb15b7b - 31 - 144.3584070796461 - 310 - 315.12831858407088 - 0 - -14774017 - - 0 - ce709f03-59be-410d-a928-e942c0c46ce3 - 2020-02-09T12:45:24.1272815Z - Process parameters 6 - 50 - 0 - 0 - 0 - 5000 - 5000 - 80 - 80 - 90 - 110 - 120 - 120 - 135 - 7 - 190 - 0 - 0 - 0 - 12 - 0 - 135 - 125 - 135 - 135 - 140 - 140 - 0 - 0 - 0 - 0 - 0 - - - - Process Parameters Tables Group Guid - 0 - - - Name - 1 - - - Table Index - 2 - - - Dyeing Speed - 3 - - - Min Ink Uptake - 4 - - - Max Ink Uptake - 5 - - - Feeder Tension - 6 - - - Puller Tension - 7 - - - Winder Tension - 8 - - - Mixer Temp - 9 - - - Head Zone 1 Temp - 10 - - - Head Zone 2 Temp - 11 - - - Head Zone 3 Temp - 12 - - - Head Zone 4 Temp - 13 - - - Head Zone 5 Temp - 14 - - - Head Zone 6 Temp - 15 - - - Head Zone 7 Temp - 16 - - - Head Zone 8 Temp - 17 - - - Head Zone 9 Temp - 18 - - - Head Zone 10 Temp - 19 - - - Head Zone 11 Temp - 20 - - - Head Zone 12 Temp - 21 - - - St Sp Zone 1 Temp - 22 - - - St Sp Zone 2 Temp - 23 - - - Dryer Zone 1 Temp - 24 - - - Dryer Zone 2 Temp - 25 - - - Dryer Zone 3 Temp - 26 - - - Dryer Air Flow - 27 - - - Head Air Flow - 28 - - - Dryer Buffer Length - 29 - - - - - d2e09fbf-2ac8-4c32-a4f5-45e50e305098 - 1016 - 821.96460176991263 - 361 - 233.95575221238948 - 0 - -14774017 - - 0 - 9b265a7c-cc48-4c5a-abed-dfa8c8e3099f - 2020-02-09T13:11:03.3185652Z - Process parameters 2 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 100 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - - - - Name - 0 - - - Dyeing Speed - 1 - - - Min Ink Uptake - 2 - - - Max Ink Uptake - 3 - - - Feeder Tension - 4 - - - Puller Tension - 5 - - - Winder Tension - 6 - - - Mixer Temp - 7 - - - Head Zone 1 Temp - 8 - - - Head Zone 2 Temp - 9 - - - Head Zone 3 Temp - 10 - - - Head Zone 4 Temp - 11 - - - Head Zone 5 Temp - 12 - - - Head Zone 6 Temp - 13 - - - Dryer Air Flow - 14 - - - Dryer Zone 1 Temp - 15 - - - Dryer Zone 2 Temp - 16 - - - Dryer Zone 3 Temp - 17 - - - Dryer Buffer Length - 18 - - - Head Air Flow - 19 - - - Process Parameters Tables Group Guid - 20 - - - Table Index - 21 - - - - - 11f4748e-ed30-48d6-a08a-afeaa0277e2e - 330 - 12.154867256637203 - 205 - 90.181415929203524 - 0 - 1778C1A7-AFB5-42F9-9E00-E80D30D9FC02 - -1 - 10 - 2 - - - dcf78507-ea09-4529-b635-ec1eeed31141 - 145 - 842.58849557522137 - 357 - 215.82743362831855 - 0 - FE0D0A56-5795-4C5A-8E09-939FBB35C441 - -14774017 - 1275 - 0 - 100 - true - 2 - - - 85762a06-25d4-457a-9974-7eab916d65c5 - 540 - 4.0486725663717493 - 205 - 90.181415929203524 - 0 - 055D0A38-09BD-490D-9852-12B06A4B22F2 - -1 - 10 - 0 - - - - - Thread - - - 50bae43f-8b1a-4279-9238-b976a0c72af3 - 1530 - 193.19911504424795 - 169 - 181.37610619469029 - 0 - A8DB1D27-6B25-4FB4-A3F5-46A29BA51955 - -1 - 10 - 2 - - - 68eef943-2151-4df5-be61-044c3865606e - 1172 - 145.78318584070678 - 175 - 167.827433628319 - 0 - 96B89605-F999-43FE-A1CD-2645BFB33A36 - -1 - 10 - 0 - - - 6be024c6-3d1b-4267-9b77-44473aba56b7 - 988 - 143.32300884955998 - 190 - 167.09734513274049 - 0 - FC60060A-3736-4910-B41A-FF6DABDF0E9E - -1 - 10 - 0 - - - 7c720f3b-00e1-49dd-92f9-fdd1e9686623 - 817 - 142.42035398230098 - 169 - 168.31858407079625 - 0 - 4CE6A82E-D841-4D33-BBB2-11F0743A441C - -1 - 10 - 0 - - - 3ebd6759-521b-4ed1-a353-ee1ad7801f28 - 922 - 516.43362831858417 - 439 - 304.995575221239 - 0 - D126DB23-784B-4F0C-8F88-D89A65A7549F - -14774017 - 1460 - 0 - 16384 - true - 1 - - - 984b4126-3dda-4624-a79f-0646eb0e1358 - 465 - 515.420353982301 - 439 - 304.995575221239 - 0 - 10102BC3-0EAE-47FF-A8E5-8640780CAA3D - -14774017 - 1516 - 0 - 16384 - true - 1 - - - 8ebc3ab7-a02d-4b12-93b3-2563443831d7 - 15 - 518.46017699115032 - 439 - 304.995575221239 - 0 - C0BCCD5C-346B-4C4A-A080-39D28E9E1A0C - -14774017 - 1398 - 0 - 16384 - true - 1 - - - acafb268-5e97-4277-8dc8-173250a9e3f8 - 12 - 13.849557522123973 - 439 - 304.995575221239 - 0 - 9FBC5460-BA59-486B-8D85-BD7D8A959F98 - -14774017 - 1273 - 0 - 100 - true - 1 - - - be4cb8d9-b516-4604-a6a5-1638cbc50251 - 860 - -24.18584070796669 - 345 - 169.21681415929209 - 0 - 4CE6A82E-D841-4D33-BBB2-11F0743A441C - -14774017 - 514 - 0 - 100000 - true - 1 - - - 75b99507-4eba-4b11-b52e-26732d4c5479 - 19 - 324.14159292035305 - 429 - 193.26548672566258 - 0 - F1DF490B-0577-4FA7-ACA1-0EEF4F934E8F - -14774017 - 1398 - 0 - 100 - true - 4 - - - a30e48de-be76-4230-92d0-d27d6f37b940 - 474 - 320.03097345132551 - 429 - 193.26548672566258 - 0 - 5F12B974-2C9E-4DDD-9B20-733251A5D7E6 - -14774017 - 1398 - 0 - 100 - true - 4 - - - 5ac4b368-093a-4192-98d4-e9d24f229b13 - 928 - 321.64601769912122 - 429 - 193.26548672566258 - 0 - 84CF23C9-D20D-4C08-BE1D-80201FC43C06 - -14774017 - 1398 - 0 - 100 - true - 4 - - - 9c34dc69-cfaa-48b4-9d02-8f0d9bba79dd - 1303 - 34.380530973454768 - 176 - 83.05309734512457 - 0 - -1 - - 89B7B89D-8050-4188-B568-35B1910CFB6F - 96B89605-F999-43FE-A1CD-2645BFB33A36 - 84CF23C9-D20D-4C08-BE1D-80201FC43C06 - FC60060A-3736-4910-B41A-FF6DABDF0E9E - 5F12B974-2C9E-4DDD-9B20-733251A5D7E6 - 9ADF7823-B293-4275-9999-F62474D246AA - 4CE6A82E-D841-4D33-BBB2-11F0743A441C - F1DF490B-0577-4FA7-ACA1-0EEF4F934E8F - - - - be5b2c37-4481-4293-b957-bf65d8516fee - 464 - 21.274336283185846 - 315 - 177.3230088495576 - 0 - -1 - 20 - - - aace77b8-02ca-4c88-abc1-590fc2592b99 - 1355 - 146.70796460176933 - 175 - 167.827433628319 - 0 - 89B7B89D-8050-4188-B568-35B1910CFB6F - -1 - 10 - 0 - - - - - Dispensers - - - dce78f33-c966-4848-8c6e-a4a01dbc7577 - 1322.1428571428571 - 214.15929203538531 - 159 - 215.8274336283186 - 0 - 2CC8E461-E91F-4D4C-A402-922477F06C87 - -1 - 800 - Dispenser 1 - - - 2d03fc19-0502-43e1-a3ff-4012a612112b - 1149 - 218.48230088495342 - 159 - 215.8274336283186 - 0 - C8D8FE90-0375-44A2-A6D1-E997789E065C - -16724737 - 1200 - Dispenser 2 - - - 81958374-3fa3-48b3-a554-5653fe1934b1 - 959 - 210.32743362830422 - 156 - 215.8274336283186 - 0 - 08ED9044-CAD6-4492-94B2-C07206E0164B - -65325 - 1200 - Dispenser 3 - - - 8fead411-7198-4428-a364-e32f3035ed94 - 775 - 206.42920353980952 - 159 - 215.8274336283186 - 0 - 179F34BB-3252-4D3A-965C-E6EB43D6FE7C - -524544 - 1200 - Dispenser 4 - - - 31bfa89f-e64d-4a3b-8585-c4a1b2e5a139 - 585 - 208.47345132741418 - 159 - 215.8274336283186 - 0 - 716B35CF-46E0-47D5-AF85-5233D212568F - -2108246 - 1200 - Dispenser 5 - - - c2bff5f3-6dc9-4b07-87ba-9e3a5814804e - 372 - 216.75221238937439 - 159 - 215.8274336283186 - 0 - 99528449-4D76-4874-AB95-522951560E01 - -263685 - 1200 - Dispenser 6 - - - 071281a5-3569-4a62-8b68-7bea850a3c07 - 217 - 211.63716814158107 - 159 - 215.8274336283186 - 0 - E8ED07E2-7C36-459C-B9E5-6A23A1E24F03 - -723724 - 1200 - Dispenser 7 - - - 7b703b9a-a626-4ae5-8e31-fa1cfe5718f4 - 45 - 216.04867256635521 - 159 - 215.8274336283186 - 0 - 8A957565-4165-49F7-854D-D21F95FFBE1B - -724238 - 1200 - Dispenser 8 - - - caca40a2-310c-452e-adcf-c28ee38f6bdc - 1305 - 31.606194690259713 - 150 - 156.04424778761069 - 0 - 1F0F907A-EC16-4386-AFC8-B2B156F2A822 - -15856114 - 10 - 2 - - - af52d36f-27a2-4a31-8ceb-9c43fedbed22 - 1127 - 32.535398230081626 - 150 - 156.04424778761069 - 0 - A499E5E0-A812-4032-8F96-B38C6762C4BD - -15293470 - 10 - 2 - - - d40eada8-d22a-4521-bd2a-d998ed93106f - 955 - 32.61946902653176 - 150 - 156.04424778761069 - 0 - 6B1DF4B0-BCC2-400C-A3B7-31C5119A55BB - -1570857 - 10 - 2 - - - b2d6364d-8b5c-43d2-8838-927c85b017b1 - 774 - 31.960176991142362 - 150 - 156.04424778761069 - 0 - F33667BD-D9FA-4DC7-BC2C-0E89E60AE4BE - -1379575 - 10 - 2 - - - 3980e685-73b3-4af1-9593-9235be147322 - 596 - 32.889380530964274 - 150 - 156.04424778761069 - 0 - 19645882-6587-4A50-BD85-AF06617DC654 - -7763381 - 10 - 2 - - - 51465293-58d5-40a4-8302-81856f8b4f47 - 424 - 32.973451327414409 - 150 - 156.04424778761069 - 0 - AF3FD56C-95BF-4DE1-8EDC-8426B0DB2A26 - -1 - 10 - 2 - - - c2a8c5b2-891b-4f9f-862c-c1c294366c78 - 252 - 31.703539823006281 - 150 - 156.04424778761069 - 0 - 60DA9EA3-C8A6-4D41-8AD8-3EB1BAA79CC9 - -8391822 - 10 - 2 - - - 9618e441-8973-4e16-a90b-06ce5798bd29 - 80 - 31.787610619456416 - 150 - 156.04424778761069 - 0 - EF66F95A-E166-4FA2-B1AF-D6F55621817A - -2186185 - 10 - 2 - - - bce8c8e8-a317-4991-9aa7-cd99a45d1509 - 28.22352941176473 - 682.03174474303751 - 247 - 122.24778761061873 - 0 - 66cc8510-db9c-4e13-9151-01e705ec04de - -1 - - - 72a23702-31bb-4ab8-aee5-2a02bcb1270b - 235.16470588235291 - 699.99460095802579 - 200 - 94.15929203539747 - 0 - 36ba0ba4-e41d-45ff-8f68-1699e00c7107 - -1 - - - 2dd6ff17-e515-4d8f-814f-a9683f404a8e - 140 - 867.73893805310092 - 160 - 85.49115044247776 - 0 - 78482AA4-3DF6-421F-944C-64328D3C3EF2 - -14774017 - 10 - 0 - 70 - true - - - 06843009-1da0-4811-8e77-50576d0edcb1 - 507 - 792.77433628318749 - 219 - 125.75221238938025 - 0 - 0c5dc1e9-da17-4ff8-86aa-6b39fd796ba9 - -16777216 - - - 935dddd0-0c6f-4766-8173-f9118006a12b - 1303 - 475.87168141593065 - 160 - 124.6504424778754 - 0 - B2164815-FBF3-4CF8-81D8-20F719626664 - -15856114 - 10 - 2 - - - 97e39a59-dba8-4e42-a124-b37de9453baf - 370 - 781.46902654866153 - 710 - 401.24778761063465 - 0 - D023F15D-3555-48E9-A9E9-5DF99F60D791 - 0 - 1956 - 0 - 100 - true - 2 - - - 46bdfce3-1c69-45dd-bbe9-582d1ac1e6f2 - 1128 - 482.80530973451141 - 140 - 117.32300884955743 - 0 - 0FE216B2-A097-4F2C-B465-08593F2532B3 - -15293470 - 10 - 2 - - - 429154a5-9a16-4423-85ca-ee4bae9aec3c - 968 - 481.35398230088504 - 140 - 117.32300884955743 - 0 - 3271FD82-46D3-4789-B612-564967826C75 - -1570857 - 10 - 2 - - - 0f6ab8e8-99a7-4468-bde8-690a63467688 - 766 - 476.07964601769811 - 140 - 117.32300884955743 - 0 - FBB806E7-42FA-4BAA-BDA1-3B8B07913AAD - -1379575 - 10 - 2 - - - bc0ac903-9c1f-4580-8b9e-670a76350473 - 586 - 474.38938053097161 - 140 - 117.32300884955743 - 0 - 436A22BB-AF79-4CB2-8A7D-DD4D9E54A81E - -7763381 - 10 - 2 - - - f9c960b2-b93e-46d5-b892-30337c0b55af - 391 - 474.87168141592781 - 140 - 117.32300884955743 - 0 - 89EA6CC8-5363-4BEC-A370-D906611087A7 - -1 - 10 - 2 - - - 5ac157ab-2d53-4307-bf0b-b069854701ac - 226 - 471.66814159292005 - 140 - 117.32300884955743 - 0 - D5EBE52B-E2DF-4C97-80B1-F111F6B15854 - -8391822 - 10 - 2 - - - 65a19d7e-c524-48a0-bd70-28b99b113dd1 - 69 - 473.97787610619389 - 140 - 117.32300884955743 - 0 - FE521D1B-A0EA-4FEA-AE64-33998A6CE138 - -1 - 10 - 2 - - - 5bf7a681-ee47-477e-8b47-ba7a2eb6e115 - 1130 - 624.9557522123913 - 144 - 80.495575221237516 - 0 - 3174ADCF-5793-4B5A-A3C6-B96E146A903D - -1 - 10 - 0 - - - 29b17a4b-fd4e-49cc-a3cd-418730176bf7 - 969 - 625.95575221239 - 144 - 80.495575221237516 - 0 - AD50C358-5BAF-4A2F-8593-51A22C85B3D1 - -1 - 10 - 0 - - - 21a5429f-c3a2-4e3b-ae77-c5538f30130d - 775 - 623.66814159292062 - 144 - 82.535398230087083 - 0 - E2F0FC31-CE7E-416B-ACEA-8EB6CA9B850B - -1 - 10 - 0 - - - 96a46b0c-37b1-4457-93fb-b3dc301c5743 - 588 - 625.06637168141322 - 144 - 80.495575221237516 - 0 - 37872FE8-D68A-45BC-A441-372B7805C09F - -1 - 10 - 0 - - - d4ad8603-9929-415f-9990-1869fcff36e4 - 1310 - 628.69469026548632 - 144 - 80.495575221237516 - 0 - 84682E90-6926-42AA-BF8C-2CCCF5C26C97 - -1 - 10 - 0 - - - 25249d78-ee37-42a8-b5aa-96f60e97c3ea - 20.870588235294122 - 784.26605504587133 - 327 - 108.53097345133028 - 0 - 8B1FCBC3-FEEA-4F87-B56F-CE5D28B7ACA4 - -1 - - - fc1d62f7-d13b-4a7b-8f9f-c687c987c7a9 - 1065 - 788.41592920352355 - 370 - 362.10619469026585 - 0 - 1F0F907A-EC16-4386-AFC8-B2B156F2A822 - -14774017 - 1426 - 0 - 100 - true - 3 - - - cc99a514-1498-4b93-a4eb-4e0a2a2e9de6 - 628 - 765.4469026548752 - 394 - 372.88495575221242 - 0 - A499E5E0-A812-4032-8F96-B38C6762C4BD - -14774017 - 1282 - 0 - 100 - true - 1 - - - cdddd48e-422d-48f4-8397-5032c3705fdb - 1069 - 698.04867256637226 - 382 - 136.79203539823016 - 0 - 04C58CA0-9719-4BB0-8D3B-D4C71129D8E4 - -1 - - - ee6d4c5a-ca5b-4557-8012-dacf700cdc08 - 231 - 624.06637168142413 - 144 - 80.495575221237516 - 0 - 37872FE8-D68A-45BC-A441-372B7805C010 - -8391822 - 10 - 0 - - - 20576bb2-202f-4170-9af5-f3c18b410112 - 77 - 624.46460176991513 - 144 - 80.495575221237516 - 0 - 37872FE8-D68A-45BC-A441-372B7805C011 - -2186185 - 10 - 0 - - - - - Thread insertion - - - 443a977c-8e89-4a56-82e4-684bac7945c9 - 25 - 22.761061946902203 - 247 - 172.25663716814159 - 0 - 08d15ca1-d7d1-460f-8f37-42c37c287cd1 - -1 - 500 - - - a821b716-cb7d-4951-84ee-e56955431099 - 355 - 20.592920353981697 - 260 - 153.00442477876106 - 0 - b90a4e78-ebbf-44db-829b-949517d6400b - -1 - 350 - - - e36e321b-d48d-4199-a1ee-75ac18e9de1e - 694 - 19.367256637167998 - 217 - 155.26106194690203 - 0 - b7c1aea4-32c1-41cb-bca3-4aa665529b49 - -1 - 350 - - - 8790db03-4dfd-4d49-aec0-706babb55af9 - 396 - 244.37610619468319 - 240 - 172.30973451327589 - 0 - 2d3eaca5-4dfd-40d9-9d1f-aa4ae794eddc - -1 - 500 - - - 69ebcb28-13d9-41b3-a9ef-b2be51584141 - 36 - 245.4955752212249 - 255 - 170.15044247787392 - 0 - c6099065-a735-4cc5-b575-c31a45bb9262 - -1 - 400 - - - 4d562029-3fdf-40a4-a5a7-9a322253c912 - 1168 - 47.305309734517039 - 304 - 167.26548672566202 - 0 - -1 - 40 - - - 92607e12-2dd6-41c9-8f89-f051f386b734 - 1316 - 380.876106194693 - 240 - 144.699115044238 - 0 - DCE08A06-6711-43AE-AB7C-EADD5AB70EE0 - -1 - - - 7b5b6896-f626-4e59-a5cf-2600e603c0f6 - 723 - 241.30530973452125 - 237 - 179.22123893805463 - 0 - 7b6d0a93-5a91-4e1f-af47-353afd8b5ea6 - -1 - 20 - - - 2052a2d3-843c-4a1c-87fd-acd0832fd1b9 - 85 - 589.09734513273827 - 220 - 168.473451327436 - 0 - c9482395-35e6-4340-8dab-83d5dfe907a7 - -1 - 2200 - - - 339b7d00-d688-41cf-926a-8171d5e62740 - 403 - 591.712389380534 - 240 - 159.84070796460173 - 0 - f3b5076e-cba3-4ad2-b3cc-0c4e907bd9ef - -1 - 400 - - - 7644a8f9-00a2-4e37-8f48-0667b1541114 - 1047 - 251.86283185840875 - 233 - 159.57079646017985 - 0 - bda5aa4d-13aa-4259-92e5-b969276cb2b1 - -1 - 500 - - - c706d31b-48b0-44cc-a9c4-11d3acdcf667 - 535 - 441.07493391564333 - 269 - 127.67256637168134 - 0 - 2a454081-bd5e-41de-ae5d-97aefe1d76de - -1 - - - 7ccff69d-50f9-4e9b-a997-72a67917df5e - 727 - 590.61504424779025 - 241 - 154.99115044247867 - 0 - 7c03f12f-ab2a-4421-8575-aefd6dec0001 - -1 - 500 - - - a88a74cb-418b-4ed0-89ec-c42ff560528e - 1073 - 593.7123893805292 - 227 - 145.08849557522183 - 0 - 4d097acc-df45-46af-bb7e-3d177ab27a9b - -1 - 2 - - - 37267035-ae9d-4c72-a04f-215f754d0900 - 283 - 451.07079646016848 - 240 - 116.10176991150968 - 0 - 8a65badb-3d7d-4b7b-8dcd-783e443b0689 - -1 - - - ca4a5397-68a1-4a2f-b614-80132cd513ee - 52 - 452.20353982301083 - 240 - 116.10176991150968 - 0 - 6f48e18c-d472-425a-ba7e-633630605e11 - -1 - - - - - Head graphs - - - ffe980da-dbbe-4bac-9595-46f587e9df00 - 3 - 5.8097345132742362 - 363 - 157.76991150442467 - 0 - 0E4783A1-B8DE-451E-B357-322C39E448FB - -14774017 - 2962 - 0 - 300 - true - 2 - - - 81b78212-14d8-4a66-bf3a-eeea9900e0d6 - 371 - 21.075221238938013 - 128 - 91.469026548670342 - 0 - AA1CF164-76FE-49C6-AA73-0EBA29816E92 - -1 - - - 3941a557-05e6-4c1b-bb98-4f2a59892431 - 517 - 11.517699115044195 - 103 - 113.4867256637167 - 0 - 188285E5-1493-4BED-8269-91743770A631 - -1 - - HeaterZone7 - 0 - 77.96 - false - false - true - - 0 - - - 7e0942e7-a87a-402a-b580-5091ed6b29ee - 8 - 276.6194690265491 - 357 - 143.58407079645986 - 0 - 0E4783A1-B8DE-451E-B357-322C39E44809 - -14774017 - 2962 - 0 - 300 - true - 2 - - - 064bd571-4250-4ea3-8ed5-96f1ddc8fe6b - 374 - 280.73893805309746 - 128 - 91.469026548670342 - 0 - 8FEB7F10-E1FB-465A-A987-6E8659C2186A - -1 - - - 4845ec5b-067b-43c2-aaf1-314dcb358a7c - 519 - 283.3407079646019 - 103 - 121.59292035398221 - 0 - 63E2AFE0-0746-4AAB-AA74-C26EC1F282AE - -1 - - HeaterZone9 - 0 - 78.1 - false - false - true - - 0 - - - 85b25b0b-cd3d-4a8a-88f5-f832623d7ec2 - 8.75 - 704.87334618417651 - 350 - 152.70353982300856 - 0 - 0E4783A1-B8DE-451E-B357-322C39E44812 - -14774017 - 2962 - 0 - 300 - true - 2 - - - 85e9ecc2-3bce-4055-89a9-1712752898a9 - 375.66666666666663 - 902.19714360816624 - 128 - 91.469026548670342 - 0 - 500698E0-5623-4A47-9537-FCAAF5D0B725 - -1 - - - 8d9b0d4b-ac5e-4c17-b7eb-4d59825064c7 - 523.04166666666652 - 895.90015771488663 - 103 - 121.59292035398221 - 0 - F39B952A-6194-4055-A5CB-A3421BFE0F9B - -1 - - HeadCoverHeater2 - 0 - 283.75 - false - false - true - - 0 - - - 63ccee8d-ce38-4c69-b8d1-141f320d11f9 - 6 - 563.37610619469046 - 358 - 141.55752212389359 - 0 - 0E4783A1-B8DE-451E-B357-322C39E44811 - -14774017 - 2962 - 0 - 300 - true - 2 - - - 5ed86083-bdd6-4648-b7ca-f17fa97f034a - 379 - 573.57522123893818 - 128 - 91.469026548670342 - 0 - C113AA1D-25F5-4095-A1F3-18BEDFC0EEEE - -1 - - - 8269194e-5348-4367-8ae9-e6c0647febaf - 523 - 571.1106194690268 - 103 - 116.52654867256626 - 0 - D41BBB23-6EB5-4743-89DB-9191000B475F - -1 - - HeaterZone11 - 0 - 74.32 - false - false - true - - 0 - - - 182492d7-b240-4162-b8ec-39996eec3cc7 - 9 - 418.47787610619497 - 353 - 145.61061946902635 - 0 - 0E4783A1-B8DE-451E-B357-322C39E44810 - -14774017 - 2962 - 0 - 300 - true - 2 - - - e8130372-e0ee-4c1c-a43d-4ab15ff57bd8 - 378 - 430.703539823009 - 128 - 91.469026548670342 - 0 - DCCCCF68-5895-40BE-9E90-1FA35E44D2E4 - -1 - - - af0d953f-45de-4c0d-9eeb-d7a5c17681e4 - 519 - 428.23893805309746 - 103 - 121.59292035398221 - 0 - B4D0A1C8-711C-49A9-82A3-B5B9F35FC131 - -1 - - HeaterZone10 - 0 - 74.7 - false - false - true - - 0 - - - 00dda04e-1853-422f-ac47-29bdbab642d7 - 7 - 142.86725663716828 - 357 - 152.70353982300867 - 0 - 0E4783A1-B8DE-451E-B357-322C39E44808 - -14774017 - 2962 - 0 - 300 - true - 2 - - - e7935033-56c6-42a4-a2b3-f5eedb0a11e7 - 382 - 151.03982300884968 - 128 - 91.469026548670342 - 0 - E772ECA1-24EB-446A-AB28-F5E3D853B9F6 - -1 - - - b339a7c0-7555-4e54-9834-6193ed7c2b7a - 519 - 147.561946902655 - 104 - 109.43362831858406 - 0 - 461FA2D7-1918-4958-AAA7-37A1A329FA12 - -1 - - HeaterZone8 - 0 - 79.4 - false - false - true - - 0 - - - 40d16753-8448-4af9-8fbd-98c1ed301de5 - 623 - 117.5353982300885 - 363 - 157.76991150442467 - 0 - D7585119-4A42-4370-8F1E-F3E62553E588 - -14774017 - 2962 - 0 - 300 - true - 2 - - - b3826c8e-1d82-4f4f-ad9f-d88f257dffb2 - 1005 - 12.221238938053205 - 128 - 91.469026548670342 - 0 - d59b64f7-a8cf-4a2b-935a-943ae35fb78c - -1 - - - d3631074-68c4-4377-b0c5-9213a6b1b2c0 - 1148 - 293.47345132743362 - 103 - 113.4867256637167 - 0 - 8E764A14-0F84-4FEC-928B-32A2509CAD57 - -1 - - HeaterZone3 - 0 - 70.97 - false - false - true - - 0 - - - 99af8946-4971-4913-9382-705c4e05b7ce - 621 - 275.60619469026591 - 363 - 157.76991150442467 - 0 - 098F7CAB-030C-46B0-B2B8-A85AF2253032 - -14774017 - 2962 - 0 - 100 - true - 2 - - - 233f0076-7595-4ecb-8496-41eeb7b457ea - 993 - 279.72566371681404 - 128 - 91.469026548670342 - 0 - 9de55ec4-201f-4f62-9003-f63ebea06f8f - -1 - - - f815ebb5-61af-45ff-8109-5f5e717a5c4d - 1146 - 14.823008849557596 - 103 - 113.4867256637167 - 0 - 27E7BB74-81C3-4EF2-80AE-962F111C441F - -1 - - HeaterZone1 - 0 - 57.9 - false - false - true - - 0 - - - 7b7d9bea-29df-4f94-8ab6-2a6d7105bccf - 627 - 6.07522123893807 - 363 - 157.76991150442467 - 0 - A8DB1D27-6B25-4FB4-A3F5-46A29BA51955 - -14774017 - 2962 - 0 - 300 - true - 2 - - - 72d7192b-dd27-4064-9f5f-90062388a81c - 1003 - 151.03982300884974 - 128 - 91.469026548670342 - 0 - df38139e-0026-46bc-b72f-df5f9eec80f7 - -1 - - - 915f8dfc-5407-43ca-a0c7-d774867dfb5f - 1145 - 153.64159292035396 - 103 - 113.4867256637167 - 0 - B4EE8CC0-EE2B-4ABE-BF09-9226860E756B - -1 - - HeaterZone2 - 0 - 67.04 - false - false - true - - 0 - - - 64fba32f-3c03-42b3-b1ed-e2bdbe454bd6 - 630 - 535.00442477876129 - 363 - 157.76991150442467 - 0 - 246C2551-5EFD-48E9-94F6-6313C5E5018F - -14774017 - 2962 - 0 - 300 - true - 2 - - - 5f451443-fab2-4bf6-8f21-5e038ca2c726 - 1008 - 707.327433628319 - 128 - 91.469026548670342 - 0 - 16D0DEF7-A2E0-4163-9F4B-FBEC2573BCC7 - -1 - - - e5c1becb-1402-45fa-b252-60a03d4401cc - 1150 - 716.00884955752235 - 103 - 113.4867256637167 - 0 - D2B6CAA0-055E-4871-8D91-A5370F1ACB22 - -1 - - HeaterZone6 - 0 - 73.69 - false - false - true - - 0 - - - 4f3b4ecd-759a-4ba5-80f3-74cc485d7085 - 629 - 387.066371681416 - 363 - 157.76991150442467 - 0 - 6C0C1AB0-3EE9-40D7-8424-A79436FBC804 - -14774017 - 2962 - 0 - 300 - true - 2 - - - 665593d6-e689-459e-94f9-2cdcce6150ac - 1004 - 562.42920353982311 - 128 - 91.469026548670342 - 0 - d28bfa3c-edce-4f19-a296-3da251fcc0e2 - -1 - - - 42b4b029-e8bc-4156-b6c1-bb64aae83f9e - 1149 - 571.1106194690268 - 103 - 113.4867256637167 - 0 - D6771DF4-771E-4D62-B6BA-BDE361C0A0F3 - -1 - - HeaterZone5 - 0 - 72.69 - false - false - true - - 0 - - - 60dff2b2-7ddc-47a9-90b1-3f45968c1790 - 630 - 692.06194690265511 - 363 - 157.76991150442467 - 0 - DACEBF90-E2B4-4CC9-A973-B8B429AA0089 - -14774017 - 2962 - 0 - 300 - true - 2 - - - b53a74f3-8e91-40ce-b980-c5b237baeee9 - 1002 - 413.47787610619491 - 128 - 91.469026548670342 - 0 - 81a3ae80-f4ea-4857-bc4e-2055d3b5fbc7 - -1 - - - 8c438e59-d87c-46d2-8050-acc8a0c455d7 - 1148 - 434.31858407079636 - 103 - 113.4867256637167 - 0 - 94574D69-46E1-4144-A8B5-D4BF0DA96D18 - -1 - - HeaterZone4 - 0 - 73.54 - false - false - true - - 0 - - - f786b4da-3291-4ccb-a280-196fd8697ac1 - 5.7499999999999858 - 866.06435643564362 - 350 - 152.70353982300856 - 0 - 0E4783A1-B8DE-451E-B357-322C39E448DD - -14774017 - 2962 - 0 - 300 - true - 2 - - - 584c7f29-49cc-4845-a7ab-09239bd3a986 - 377.875 - 735.75944098834611 - 128 - 91.469026548670342 - 0 - 96A8AF31-B489-4FA2-BF99-C66D7DEC94C8 - -1 - - - 5c6da8d4-bd2e-44cc-8d99-a6b8bca7df3f - 524.20833333333337 - 721.52681153071046 - 103 - 121.59292035398221 - 0 - 2D578A37-D808-40D0-ACE4-4A868EDD6BDC - -1 - - HeaterZone12 - 0 - 72.72 - false - false - true - - 0 - - - 05eab3d7-3af6-4d3f-b3b3-468eeb77a503 - 644.29166666666674 - 874.00000000000011 - 350 - 152.70353982300856 - 0 - 0E4783A1-B8DE-451E-B357-322C39E448CC - -14774017 - 2962 - 0 - 300 - true - 2 - - - c1f48bf1-9cb3-475a-b152-e8b9a211b694 - 1010.1666666666667 - 895.60597564181194 - 128 - 91.469026548670342 - 0 - 7FCA67CB-785B-49F7-B9F2-191E3ACC6CB7 - -1 - - - c5fbeda2-230d-40e4-9d52-5b3236e0c561 - 1161.708333333333 - 885.907999649522 - 103 - 121.59292035398221 - 0 - F8C1BA7F-F6DF-414D-BAF5-D4CB292F91F6 - -1 - - HeadCoverHeater1 - 0 - 283.75 - false - false - true - - 0 - - - - - waste - - - bb9bf273-0a3d-4202-98ce-37a5f206ed75 - 119 - 68.898230088495609 - 339 - 184.4159292035398 - 0 - 7e1f53ec-8176-4efa-ac3d-c8f2436e60d1 - -1 - - - 59678a51-f995-4952-b250-e449f1fcbeac - 468 - 80.336283185839477 - 280 - 166.17699115044252 - 0 - 78db28d0-0407-4942-bb62-c44da81c4f9e - -1 - - - 8f9ff579-0e9d-4f48-8ed0-6fa563f2aba7 - 873 - 63.831858407079665 - 174 - 133.75221238938059 - 0 - 06bd7c0b-5aef-445a-86c0-853becf8594b - -1 - - - 70d1bd1e-acdb-436a-b205-6eeb9d137120 - 1070 - 70.106194690265909 - 221 - 123.61946902654864 - 0 - 4048bf02-27dc-4049-9284-fe913a7e0ebe - -1 - - - dcc7ce16-5b89-4ff8-acd5-7fb0b9ebb6d1 - 877 - 248.24778761061947 - 186 - 126.65929203539827 - 0 - 00ea1771-efee-4f3e-a0d2-8b2a4214e9fd - -1 - - - 2b99bbf7-94da-4bb2-acc9-91b35e543c5d - 897 - 358.69469026548683 - 147 - 69.9159292035398 - 0 - -14774017 - Waste lower presence - - - c150533c-abe4-4edf-b6ad-fa475b133142 - 1112 - 253.66814159291806 - 186 - 126.65929203539827 - 0 - d2f266e3-779b-4dfe-b513-26ce61c529a4 - -1 - - - d96f2a6d-0ccb-401e-8931-09086ca81fae - 1143 - 366.78318584070507 - 147 - 69.9159292035398 - 0 - -14774017 - Waste middle presence - - - bb9847ba-9671-4613-bf23-a0c637ebc79d - 151 - 271.55309734513281 - 200 - 63.836283185840671 - 0 - -14774017 - pump - - - d13a2df4-3f54-4c31-8f9a-ee7810fb6af5 - 504 - 283.71238938053096 - 192 - 67.88938053097354 - 0 - -14774017 - valve - - - a79322a7-fbb8-469b-a4d9-a0ffb3c17a5d - 639 - 358.69469026548683 - 134 - 99.300884955752167 - 0 - 94F3E5A1-413E-4EA0-BDE1-F0625BFF7910 - -1 - 10 - 2 - - - 979459b4-b609-487f-b6d7-55f435659658 - 1027 - 391.93362831858775 - 118 - 93.221238938053034 - 0 - FE0D0A56-5795-4C5A-8E09-939FBB35C441 - -1 - 10 - 2 - - - 8b11bfca-091d-4461-8713-ba2fd9c8484e - 432 - 511.69911504424789 - 461 - 250.27876106194691 - 0 - 94F3E5A1-413E-4EA0-BDE1-F0625BFF7910 - -14774017 - 419 - 0 - 100 - true - 2 - - - 8aa4b451-71d6-429c-94e4-2581e3c62a7a - 956 - 513.80973451327361 - 461 - 250.27876106194691 - 0 - FE0D0A56-5795-4C5A-8E09-939FBB35C441 - -14774017 - 419 - 0 - 100 - true - 2 - - - 1f85047c-0b3e-49c6-a80a-c2585de00a81 - 288 - 366.80088495575222 - 217 - 97.2743362831859 - 0 - B6FE07F8-2435-495D-ABFE-358C76812413 - -1 - - - c296a84d-7af4-4a26-9a35-0b82d378edce - 41 - 351.6017699115045 - 209 - 120.57964601769913 - 0 - 1778C1A7-AFB5-42F9-9E00-E80D30D9FC0A - -1 - 10 - 2 - - - ab6714cc-04d8-471f-a263-db28c30e229d - 59 - 550.2035398230089 - 294 - 171.24336283185835 - 0 - 78482AA4-3DF6-421F-944C-64328D3C3EF2 - -14774017 - 10 - 0 - 7000 - true - - - cde1d5a8-7238-44b8-8d4e-30a2dba70c12 - 1294 - 166.17256637168146 - 217 - 132.73893805309734 - 0 - 2a454081-bd5e-41de-ae5d-97aefe1d76de - -1 - - - - - disp - - - f9531a72-3742-47a7-86bb-b589f8b3eb55 - 123 - 128.33628318584061 - 390 - 249.67699115047321 - 0 - A499E5E0-A812-4032-8F96-B38C6762C4BD - -14774017 - 3600 - 0 - 100 - true - 3 - - - aae29286-81b3-476a-9f58-c0fd246cae96 - 880 - 158.81415929204155 - 442 - 241.88495575221771 - 0 - F33667BD-D9FA-4DC7-BC2C-0E89E60AE4BE - -14774017 - 3600 - 0 - 100 - true - 3 - - - 7d94c7c4-1288-4f9d-b0e6-a06794829642 - 1055 - 14.181415929203524 - 161 - 111.46017699115049 - 0 - -14774017 - Y - - - c95f9ad1-b607-4606-8217-400bea76f3d6 - 384 - 23.991150442480944 - 161 - 111.46017699115049 - 0 - -14774017 - C - - - 8f141fa5-fb24-4557-adcf-a6aa55a28fb4 - 121 - -8.8495575221214722 - 169 - 132.73893805309734 - 0 - A499E5E0-A812-4032-8F96-B38C6762C4BD - -1 - 10 - 3 - - - 7eab018a-ef43-4bca-a6cf-857d69767bba - 839 - -4.7079646017762684 - 169 - 132.73893805309734 - 0 - F33667BD-D9FA-4DC7-BC2C-0E89E60AE4BE - -1 - 10 - 3 - - - 2a9e89d4-5d60-4a83-9527-cb77fdf35c14 - 1276 - 22.287610619469035 - 187 - 102.34070796460179 - 0 - -1 - - 1F0F907A-EC16-4386-AFC8-B2B156F2A822 - A499E5E0-A812-4032-8F96-B38C6762C4BD - 6B1DF4B0-BCC2-400C-A3B7-31C5119A55BB - F33667BD-D9FA-4DC7-BC2C-0E89E60AE4BE - 19645882-6587-4A50-BD85-AF06617DC654 - 96B89605-F999-43FE-A1CD-2645BFB33A36 - 84CF23C9-D20D-4C08-BE1D-80201FC43C06 - C0BCCD5C-346B-4C4A-A080-39D28E9E1A0C - 10102BC3-0EAE-47FF-A8E5-8640780CAA3D - FC60060A-3736-4910-B41A-FF6DABDF0E9E - 5F12B974-2C9E-4DDD-9B20-733251A5D7E6 - D126DB23-784B-4F0C-8F88-D89A65A7549F - - - - 6d2e7962-b3ae-4682-b20e-9654f48dcffe - 587 - 5.0619469026548813 - 155 - 131.72566371681415 - 0 - 2CC8E461-E91F-4D4C-A402-922477F06C87 - -1 - 500 - Dispenser 1 - - - 5ee2718f-f068-427b-a31e-d586c7d7682c - 131 - 552.94690265486338 - 390 - 249.67699115047321 - 0 - 1F0F907A-EC16-4386-AFC8-B2B156F2A822 - -14774017 - 3600 - 0 - 100 - true - 3 - - - 1c254a92-c075-453f-9667-cdcc91cf8e6a - 399 - 455.67256637168265 - 161 - 111.46017699115049 - 0 - -14774017 - K - - - d1087b1a-c36b-4242-96f5-07c2bb602cc4 - 145 - 409.52212389380446 - 169 - 132.73893805309734 - 0 - 1F0F907A-EC16-4386-AFC8-B2B156F2A822 - -1 - 10 - 3 - - - 53fe93a2-88a5-4d4d-9cd5-eb4d8a8fefae - 604 - 561.16371681414739 - 390 - 249.67699115047321 - 0 - 6B1DF4B0-BCC2-400C-A3B7-31C5119A55BB - -14774017 - 3600 - 0 - 100 - true - 3 - - - 0bef6e9d-6da0-4f06-9e1a-c00142bde4c1 - 832 - 440.91150442477635 - 161 - 111.46017699115049 - 0 - -14774017 - M - - - 762c5a97-a3bc-45b4-aa9f-0b50afa9cb9b - 633 - 434.0132743362783 - 169 - 132.73893805309734 - 0 - 6B1DF4B0-BCC2-400C-A3B7-31C5119A55BB - -1 - 10 - 3 - - - be584f80-3250-494c-87fc-250d6deae051 - 1045 - 559.4070796459921 - 390 - 249.67699115047321 - 0 - 19645882-6587-4A50-BD85-AF06617DC654 - -14774017 - 3600 - 0 - 100 - true - 3 - - - 39f6a02c-c4d9-47d0-b92d-bdea0ed5d3ce - 1056 - 435.43805309733875 - 169 - 132.73893805309734 - 0 - 19645882-6587-4A50-BD85-AF06617DC654 - -1 - 10 - 3 - - - 5b924929-9b16-4598-94cc-b2f4bca26798 - 1304 - 448.0884955752224 - 161 - 111.46017699115049 - 0 - -14774017 - TI - - - 89ae1fa5-1ad1-469e-ae76-0a29c35805cd - 588 - 317.1504424778762 - 283 - 74.982300884955748 - 0 - E144A221-4859-4DC3-9A7E-4A2969FB0826 - -1 - - - c218cf34-74c2-41bb-8c3b-3030abce451a - 1363 - 384.02654867256643 - 156 - 94.234513274336337 - 0 - E144A221-4859-4DC3-9A7E-4A2969FB0826 - -1 - - - 75af30c6-d7f8-4745-bfb5-d6dc5d50479a - 767 - 362.74778761061958 - 283 - 74.982300884955748 - 0 - E144A221-4859-4DC3-9A7E-4A2969FB0826 - -1 - - - df1fd958-fd8a-4b00-98e1-679455494d60 - 309 - 13.168141592920392 - 112 - 107.40707964601768 - 0 - 3174ADCF-5793-4B5A-A3C6-B96E146A903D - -1 - 10 - 0 - - - f07225b3-1522-4cb6-9ba8-5b9697f05467 - 1180 - 60.7920353982301 - 102 - 88.1548672566372 - 0 - E2F0FC31-CE7E-416B-ACEA-8EB6CA9B850B - -1 - 10 - 0 - - - 45b87322-e1f5-42eb-88c6-71c2eeb2899a - 1258 - 463.06194690265494 - 88 - 75.995575221239 - 0 - 37872FE8-D68A-45BC-A441-372B7805C09F - -1 - 10 - 0 - - - 0c1c25e8-3ce3-4994-bbb9-bd6b2367a413 - 810 - 462.04867256637175 - 77 - 80.048672566371636 - 0 - AD50C358-5BAF-4A2F-8593-51A22C85B3D1 - -1 - 10 - 0 - - - fa2f697e-b229-418a-bae6-78b92bf0458b - 336 - 428.61061946902663 - 95 - 96.261061946902657 - 0 - 84682E90-6926-42AA-BF8C-2CCCF5C26C97 - -1 - 10 - 0 - - - - - Priming - - - ea45a516-9dac-4c9a-9261-0c44e22aa065 - 808 - 155.02654867256638 - 219 - 200.62831858407088 - 0 - A499E5E0-A812-4032-8F96-B38C6762C4BD - -1 - 10 - 2 - - - 3e2cb7dc-a5f3-4ba6-a520-2bae8ff0e4a8 - 832 - 451.91592920353986 - 332 - 326.27433628318596 - 0 - C8D8FE90-0375-44A2-A6D1-E997789E065C - -1 - 1200 - Dispenser 2 - - - 6f8dfd8d-ed50-4923-b908-e0b5bc5d6ae5 - 154 - 131.72123893805315 - 474 - 410.37610619469024 - 0 - A499E5E0-A812-4032-8F96-B38C6762C4BD - -14774017 - 1942 - 0 - 100 - true - 1 - - - 604e031b-89c3-4c9d-90ef-7b861a77e5e0 - 243 - 595.80088495575228 - 497 - 189.48230088495575 - 0 - 8B1FCBC3-FEEA-4F87-B56F-CE5D28B7ACA4 - -1 - - - c414ae0e-323a-48c1-9165-2c05cc4234c6 - 1291 - 584.65486725663732 - 200 - 171.24336283185835 - 0 - 0bd10306-2944-4cda-bc59-0264da2883d2 - -1 - - - - - 0 - \ No newline at end of file diff --git a/Software/Stubs Collection/stubs/Scripts/Assemblies/ArcHead/clean_motor_ls.cs b/Software/Stubs Collection/stubs/Scripts/Assemblies/ArcHead/clean_motor_ls.cs new file mode 100644 index 000000000..2a0fc12cf --- /dev/null +++ b/Software/Stubs Collection/stubs/Scripts/Assemblies/ArcHead/clean_motor_ls.cs @@ -0,0 +1,278 @@ +using System; +using System.Text; +using System.Linq; +using System.Drawing; +using System.Diagnostics; +using System.Windows.Forms; +using System.Threading; +using System.Threading.Tasks; +using System.Collections.Generic; +using Tango.PMR.Stubs; +using Tango.Stubs; + + +const Int32 LS_FRONT=0X460110; +const Int32 LS_REAR=0X460120; +const Int32 LS_UPPER=0X460140; +const Int32 LS_SPARE=0X460180; + +const Int32 DyeingHeadLid_Motor = 2; + +const Int32 F1_MOTO_DH_LID_A1_TX_00 = 0x600002F0 ; +const Int32 F1_MOTO_DH_LID_A1_TX_01 = 0x600002F2 ; +const Int32 F1_MOTO_DH_LID_A1_RX_00 = 0x600002F4 ; +const Int32 F1_MOTO_DH_LID_A1_RX_01 = 0x600002F6 ; + +//---------------------Start Command ---------------- +const Int32 CMD_RUN = 0; //Run on Pulse Per Secound .positive run Up and negative run Down +const Int32 CMD_STOP= 1; //0;Hard stop(Defualt);1-Soft stop;2-Hard Hiz;3-Soft Hiz +const Int32 CMD_HOME= 2; //Run until home .positive run Up and negative run Down +const Int32 CMD_DLY = 3; //delay in Seconds . +const Int32 CMD_MOVE= 4; //Move step. positive move Up and negative move Down +const Int32 CMD_MAX_SPEED = 5; //set Maximum speed.motor will stop before that command + +const Int32 CMD_LOOP_NM=6; //NUMBER OF counter +const Int32 CMD_LOOP= 7; //jump up(+) or down(-) command u +const Int32 CMD_END = 13; //end loop . + + +const Int32 x_STEP_MODE = 0x16; +const Int32 x_STATUS = 0x19; +const Int32 x_GET_PARAM = 0x20; +const Int32 x_POWERSTEP01_STATUS = 0x1B; + + +//-------------------------------------------- Flow Test Double PBU ------------------------------------------------ + +Int32[] Start_Table = new int [] +{ + CMD_RUN,-40, + CMD_DLY,200, + CMD_STOP,0, + CMD_DLY,10, + CMD_HOME,40, + CMD_END,3, +}; + +//////////////////////////////////// + +public void OnExecute(StubManager stubManager) +{ +Int32 COMMAND=0; +Int32 Data=0; +Int32 Index=0; +Int32 speed=0; +Int32 Loop_cnt=1; +Int32 j=0; + + + + var stopwatch = new Stopwatch(); + stopwatch.Start(); + + long elapsed_time = stopwatch.ElapsedMilliseconds; + stubManager.WriteLine(elapsed_time); + + while (j!=-1) + { + { + COMMAND=Start_Table[j]; + Data=Start_Table[j+1]; + + switch (COMMAND) + { + case CMD_RUN: + stubManager.WriteLine("CMD_RUN"); + Motor_Run(Data); + break; + + case CMD_STOP: + stubManager.WriteLine("CMD_stop"); + Motor_Stop(Data); + break; + + case CMD_DLY: + stubManager.WriteLine("CMD_delay"); + + for (;Data>0;Data--) + { + Thread.Sleep(100); //100msec delay + stubManager.WriteLine("CMD_delay " + Data ); + } + break; + + + case CMD_MOVE: + stubManager.WriteLine("CMD_move"); + + Motor_Move(Data); + break; + + case CMD_END: + stubManager.WriteLine("CMD_end"); + + j=-3; + break; + + case CMD_MAX_SPEED: + stubManager.WriteLine("CMD_MAX_SPEED"); + + Motor_Max_speed(Data); + break; + + case CMD_HOME: + stubManager.WriteLine("CMD_home"); + + Move_Home(Data); + break; + + + case CMD_LOOP_NM: + stubManager.WriteLine("LOOP_NM" + Data ); + + Loop_cnt=Data-1; + break; + + case CMD_LOOP: + stubManager.WriteLine("CMD_loop"); + + if (Loop_cnt!=0) + { + j = j+2*Data; + Loop_cnt-- ; + } + break; + + default: + break; + + } + + j = j + 2; + + + } + + } + +} +Int32 Motor_Max_speed(Int32 speed) +{ + UInt32 i=Convert.ToUInt32((speed *4/61)*256*256 ) ; + stubManager.WriteHex(i,8); + + stubManager.Run("StubMotorStopRequest" ,DyeingHeadLid_Motor,0); //hold motor + + + Motor_SetParam(F1_MOTO_DH_LID_A1_TX_01,F1_MOTO_DH_LID_A1_TX_00,0x07,i); //set max speed + + return 1; +} + + +int Motor_SetParam(Int32 HighAdr, Int32 LowAdr, Int32 ParaAddr, uint ParaData1) +{ + + Int32 Temp = 0; + Temp = (ParaAddr << 8 ) + ( (Int32) ParaData1 >> 24); + + stubManager.Run("StubFpgaWriteRegRequest" ,HighAdr, (Temp & 0xffff)); + Temp = ((Int32)ParaData1 >> 8) & 0xffff; + stubManager.Run("StubFpgaWriteRegRequest" ,LowAdr, (Temp)); + + return 1; +} + +Int32 Move_Home(Int32 speed) +{ + Int32 Bit = 1; + if (speed <0 ) + stubManager.Run("StubMotorRunRequest" ,DyeingHeadLid_Motor, false, (-speed) ); + else + stubManager.Run("StubMotorRunRequest" ,DyeingHeadLid_Motor, true, speed); + int i=0; + while ((Bit != 0x0)&& (i<20000) ) //wait until Limit Switch or timeout 200*50msec=10sec + { + Bit=read_pio (LS_FRONT); // read LS_FRONT + Thread.Sleep(20); + i++; + } + stubManager.Run("StubMotorStopRequest" ,DyeingHeadLid_Motor,0); //hold motor + return 0; +} + +Int32 read_pio(Int32 i2c_input) +{ + Int32 temp=0; + var response = stubManager.Run("ProgressRequest" ,0x0EAD,i2c_input); // read break + + temp = (Int32) (response.Progress); + stubManager.WriteHex(temp, 4); + stubManager.WriteLine(" "); + temp =temp & (i2c_input& 0xff); //if break ok + + return temp; +} + + + +////////////////////////////////////////////////////////////// +Int32 Motor_Move (Int32 position) + + { + Int32 x=16; + var response = stubManager.Run("StubMotorRequest" ,DyeingHeadLid_Motor, (x_GET_PARAM | x_STEP_MODE)<<8, 0, 0); + + response.RecivedData=response.RecivedData & 0x0007; + if (response.RecivedData == 0) + x=1; + if (response.RecivedData == 1) + x=2; + if (response.RecivedData == 2) + x=4; + if (response.RecivedData == 3) + x=8; + + + int i=0; + if (position<0 ) + stubManager.Run("StubMotorMovRequest" ,DyeingHeadLid_Motor, false, (-position * x) ); + else + stubManager.Run("StubMotorMovRequest" ,DyeingHeadLid_Motor, true, position * x); + + Thread.Sleep(100); //100msec delay + + while (i==0) + { + response = stubManager.Run("StubMotorRequest" ,DyeingHeadLid_Motor, (x_GET_PARAM | x_POWERSTEP01_STATUS)<<16, 0, 0); + + stubManager.WriteHex(response.RecivedData,4); + response.RecivedData=response.RecivedData & 0x0002; + if (response.RecivedData==0x0002) + i=1; + Thread.Sleep(100); //100msec delay + + + } + return 0; + } + +////////////////////////////////////////////////////////////// +Int32 Motor_Run (Int32 speed) + + { + if (speed<0 ) + stubManager.Run("StubMotorRunRequest" ,DyeingHeadLid_Motor, false, (-speed) ); + else + stubManager.Run("StubMotorRunRequest" ,DyeingHeadLid_Motor, true, speed); + return 0; + } + +//--------------------------------------- + + Int32 Motor_Stop(Int32 Stop_Value ) +{ + stubManager.Run("StubMotorStopRequest" ,DyeingHeadLid_Motor, Stop_Value); + return 1; +} + diff --git a/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/Blowe_RMO_LOG.CSV b/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/Blowe_RMO_LOG.CSV index 414b0f976..c6461ea3e 100644 --- a/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/Blowe_RMO_LOG.CSV +++ b/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/Blowe_RMO_LOG.CSV @@ -1,5401 +1,2 @@ ,RPM 0,2688 -1,2688 -2,2675 -3,2688 -4,2688 -5,2688 -6,2688 -7,2688 -8,2688 -9,2688 -10,2688 -11,2688 -12,2700 -13,2688 -14,2675 -15,2688 -16,2688 -17,2688 -18,2688 -19,2688 -20,2688 -21,2688 -22,2688 -23,2675 -24,2688 -25,2688 -26,2688 -27,2688 -28,2688 -29,2688 -30,2688 -31,2688 -32,2688 -33,2688 -34,2688 -35,2688 -36,2688 -37,2688 -38,2688 -39,2675 -40,2688 -41,2688 -42,2688 -43,2675 -44,2688 -45,2688 -46,2688 -47,2688 -48,2688 -49,2688 -50,2688 -51,2688 -52,2688 -53,2688 -54,2688 -55,2688 -56,2675 -57,2675 -58,2688 -59,2688 -60,2688 -61,2688 -62,2688 -63,2688 -64,2688 -65,2675 -66,2688 -67,2688 -68,2688 -69,2688 -70,2675 -71,2688 -72,2688 -73,2688 -74,2688 -75,2688 -76,2688 -77,2688 -78,2688 -79,2688 -80,2688 -81,2688 -82,2688 -83,2688 -84,2688 -85,2688 -86,2688 -87,2688 -88,2688 -89,2688 -90,2688 -91,2688 -92,2688 -93,2688 -94,2675 -95,2688 -96,2688 -97,2688 -98,2688 -99,2688 -100,2688 -101,2688 -102,2688 -103,2688 -104,2688 -105,2688 -106,2688 -107,2688 -108,2688 -109,2688 -110,2688 -111,2688 -112,2688 -113,2688 -114,2675 -115,2688 -116,2688 -117,2688 -118,2675 -119,2688 -120,2688 -121,2675 -122,2688 -123,2688 -124,2688 -125,2688 -126,2688 -127,2688 -128,2688 -129,2688 -130,2688 -131,2675 -132,2688 -133,2688 -134,2688 -135,2688 -136,2688 -137,2688 -138,2688 -139,2688 -140,2688 -141,2688 -142,2688 -143,2688 -144,2688 -145,2688 -146,2688 -147,2688 -148,2688 -149,2688 -150,2675 -151,2688 -152,2688 -153,2675 -154,2688 -155,2688 -156,2688 -157,2688 -158,2688 -159,2675 -160,2688 -161,2688 -162,2688 -163,2688 -164,2675 -165,2688 -166,2688 -167,2688 -168,2688 -169,2688 -170,2688 -171,2688 -172,2688 -173,2688 -174,2688 -175,2675 -176,2688 -177,2688 -178,2688 -179,2688 -180,2688 -181,2675 -182,2688 -183,2688 -184,2688 -185,2688 -186,2688 -187,2675 -188,2675 -189,2688 -190,2688 -191,2688 -192,2688 -193,2675 -194,2688 -195,2688 -196,2688 -197,2688 -198,2675 -199,2688 -200,2688 -201,2700 -202,2688 -203,2688 -204,2688 -205,2688 -206,2675 -207,2688 -208,2675 -209,2688 -210,2675 -211,2688 -212,2688 -213,2675 -214,2688 -215,2688 -216,2688 -217,2688 -218,2675 -219,2688 -220,2688 -221,2688 -222,2688 -223,2688 -224,2688 -225,2688 -226,2675 -227,2688 -228,2688 -229,2675 -230,2688 -231,2675 -232,2688 -233,2688 -234,2688 -235,2688 -236,2688 -237,2688 -238,2688 -239,2688 -240,2688 -241,2688 -242,2688 -243,2688 -244,2688 -245,2688 -246,2688 -247,2688 -248,2688 -249,2688 -250,2675 -251,2688 -252,2688 -253,2688 -254,2688 -255,2688 -256,2675 -257,2688 -258,2688 -259,2688 -260,2688 -261,2688 -262,2688 -263,2688 -264,2688 -265,2688 -266,2688 -267,2688 -268,2688 -269,2688 -270,2688 -271,2688 -272,2688 -273,2688 -274,2688 -275,2688 -276,2688 -277,2688 -278,2688 -279,2688 -280,2688 -281,2688 -282,2688 -283,2688 -284,2675 -285,2675 -286,2688 -287,2688 -288,2688 -289,2688 -290,2688 -291,2688 -292,2688 -293,2688 -294,2688 -295,2688 -296,2675 -297,2688 -298,2688 -299,2688 -300,2688 -301,2688 -302,2688 -303,2688 -304,2688 -305,2688 -306,2688 -307,2688 -308,2688 -309,2688 -310,2675 -311,2688 -312,2688 -313,2688 -314,2675 -315,2688 -316,2688 -317,2688 -318,2688 -319,2688 -320,2688 -321,2688 -322,2688 -323,2688 -324,2688 -325,2688 -326,2688 -327,2688 -328,2688 -329,2688 -330,2688 -331,2688 -332,2688 -333,2688 -334,2700 -335,2688 -336,2688 -337,2688 -338,2688 -339,2688 -340,2700 -341,2688 -342,2688 -343,2688 -344,2688 -345,2700 -346,2688 -347,2675 -348,2688 -349,2688 -350,2675 -351,2688 -352,2688 -353,2688 -354,2688 -355,2688 -356,2688 -357,2688 -358,2688 -359,2688 -360,2688 -361,2688 -362,2688 -363,2688 -364,2688 -365,2688 -366,2688 -367,2688 -368,2688 -369,2688 -370,2688 -371,2675 -372,2700 -373,2688 -374,2688 -375,2675 -376,2688 -377,2688 -378,2688 -379,2688 -380,2688 -381,2688 -382,2688 -383,2688 -384,2688 -385,2688 -386,2688 -387,2688 -388,2688 -389,2675 -390,2688 -391,2688 -392,2675 -393,2688 -394,2688 -395,2688 -396,2700 -397,2688 -398,2688 -399,2688 -400,2688 -401,2688 -402,2688 -403,2688 -404,2688 -405,2688 -406,2688 -407,2688 -408,2688 -409,2688 -410,2688 -411,2688 -412,2688 -413,2688 -414,2688 -415,2688 -416,2688 -417,2688 -418,2688 -419,2688 -420,2688 -421,2688 -422,2688 -423,2688 -424,2688 -425,2688 -426,2688 -427,2688 -428,2688 -429,2675 -430,2700 -431,2675 -432,2688 -433,2688 -434,2688 -435,2688 -436,2688 -437,2688 -438,2688 -439,2688 -440,2688 -441,2688 -442,2675 -443,2688 -444,2688 -445,2688 -446,2688 -447,2688 -448,2675 -449,2675 -450,2675 -451,2688 -452,2688 -453,2688 -454,2688 -455,2688 -456,2688 -457,2688 -458,2688 -459,2688 -460,2688 -461,2688 -462,2688 -463,2688 -464,2688 -465,2688 -466,2688 -467,2688 -468,2688 -469,2688 -470,2688 -471,2688 -472,2688 -473,2688 -474,2688 -475,2688 -476,2688 -477,2675 -478,2688 -479,2688 -480,2688 -481,2688 -482,2688 -483,2688 -484,2688 -485,2688 -486,2688 -487,2688 -488,2688 -489,2688 -490,2688 -491,2688 -492,2688 -493,2688 -494,2688 -495,2688 -496,2688 -497,2688 -498,2688 -499,2688 -500,2675 -501,2688 -502,2675 -503,2688 -504,2688 -505,2688 -506,2688 -507,2688 -508,2688 -509,2688 -510,2688 -511,2688 -512,2688 -513,2688 -514,2688 -515,2688 -516,2700 -517,2688 -518,2688 -519,2688 -520,2688 -521,2688 -522,2688 -523,2688 -524,2675 -525,2688 -526,2688 -527,2675 -528,2688 -529,2675 -530,2688 -531,2688 -532,2688 -533,2688 -534,2688 -535,2688 -536,2688 -537,2688 -538,2688 -539,2688 -540,2688 -541,2688 -542,2688 -543,2688 -544,2688 -545,2688 -546,2688 -547,2688 -548,2688 -549,2688 -550,2688 -551,2688 -552,2688 -553,2688 -554,2688 -555,2688 -556,2688 -557,2675 -558,2688 -559,2688 -560,2700 -561,2688 -562,2688 -563,2688 -564,2688 -565,2688 -566,2688 -567,2688 -568,2675 -569,2688 -570,2688 -571,2688 -572,2688 -573,2688 -574,2688 -575,2688 -576,2688 -577,2688 -578,2688 -579,2688 -580,2688 -581,2688 -582,2675 -583,2675 -584,2688 -585,2675 -586,2688 -587,2688 -588,2688 -589,2688 -590,2688 -591,2688 -592,2688 -593,2688 -594,2688 -595,2688 -596,2688 -597,2688 -598,2688 -599,2688 -600,2688 -601,2675 -602,2688 -603,2688 -604,2688 -605,2688 -606,2688 -607,2688 -608,2688 -609,2688 -610,2688 -611,2688 -612,2688 -613,2688 -614,2688 -615,2688 -616,2688 -617,2688 -618,2688 -619,2688 -620,2688 -621,2688 -622,2688 -623,2688 -624,2675 -625,2688 -626,2688 -627,2688 -628,2688 -629,2675 -630,2688 -631,2675 -632,2688 -633,2688 -634,2688 -635,2675 -636,2675 -637,2688 -638,2688 -639,2688 -640,2688 -641,2688 -642,2688 -643,2688 -644,2688 -645,2688 -646,2688 -647,2675 -648,2688 -649,2688 -650,2688 -651,2688 -652,2688 -653,2675 -654,2688 -655,2688 -656,2688 -657,2688 -658,2688 -659,2688 -660,2688 -661,2688 -662,2688 -663,2688 -664,2688 -665,2675 -666,2688 -667,2675 -668,2688 -669,2688 -670,2688 -671,2688 -672,2688 -673,2688 -674,2688 -675,2688 -676,2675 -677,2688 -678,2688 -679,2688 -680,2675 -681,2675 -682,2688 -683,2688 -684,2688 -685,2688 -686,2688 -687,2688 -688,2688 -689,2688 -690,2688 -691,2688 -692,2688 -693,2688 -694,2688 -695,2688 -696,2688 -697,2688 -698,2688 -699,2688 -700,2688 -701,2688 -702,2688 -703,2688 -704,2688 -705,2688 -706,2688 -707,2675 -708,2688 -709,2688 -710,2688 -711,2688 -712,2688 -713,2675 -714,2688 -715,2688 -716,2688 -717,2675 -718,2688 -719,2688 -720,2688 -721,2688 -722,2688 -723,2688 -724,2688 -725,2688 -726,2688 -727,2688 -728,2675 -729,2688 -730,2688 -731,2688 -732,2675 -733,2675 -734,2675 -735,2688 -736,2688 -737,2675 -738,2688 -739,2688 -740,2688 -741,2688 -742,2688 -743,2688 -744,2688 -745,2688 -746,2688 -747,2688 -748,2688 -749,2688 -750,2688 -751,2688 -752,2688 -753,2688 -754,2688 -755,2688 -756,2688 -757,2688 -758,2688 -759,2688 -760,2688 -761,2688 -762,2688 -763,2688 -764,2688 -765,2675 -766,2688 -767,2688 -768,2688 -769,2688 -770,2688 -771,2688 -772,2688 -773,2688 -774,2688 -775,2675 -776,2688 -777,2688 -778,2688 -779,2688 -780,2700 -781,2688 -782,2688 -783,2688 -784,2688 -785,2688 -786,2688 -787,2688 -788,2688 -789,2675 -790,2688 -791,2688 -792,2688 -793,2688 -794,2688 -795,2688 -796,2675 -797,2688 -798,2688 -799,2688 -800,2675 -801,2688 -802,2688 -803,2688 -804,2688 -805,2675 -806,2688 -807,2688 -808,2688 -809,2688 -810,2688 -811,2688 -812,2688 -813,2688 -814,2688 -815,2688 -816,2688 -817,2688 -818,2688 -819,2688 -820,2688 -821,2688 -822,2688 -823,2688 -824,2675 -825,2688 -826,2688 -827,2688 -828,2688 -829,2688 -830,2688 -831,2675 -832,2688 -833,2688 -834,2688 -835,2688 -836,2688 -837,2688 -838,2688 -839,2688 -840,2688 -841,2688 -842,2688 -843,2688 -844,2675 -845,2688 -846,2675 -847,2688 -848,2688 -849,2675 -850,2688 -851,2688 -852,2688 -853,2688 -854,2688 -855,2688 -856,2688 -857,2688 -858,2688 -859,2688 -860,2688 -861,2688 -862,2688 -863,2688 -864,2688 -865,2688 -866,2688 -867,2688 -868,2688 -869,2675 -870,2688 -871,2688 -872,2688 -873,2688 -874,2688 -875,2688 -876,2688 -877,2688 -878,2688 -879,2688 -880,2688 -881,2688 -882,2700 -883,2688 -884,2675 -885,2688 -886,2675 -887,2688 -888,2688 -889,2688 -890,2688 -891,2688 -892,2688 -893,2688 -894,2688 -895,2688 -896,2688 -897,2688 -898,2688 -899,2675 -900,2688 -901,2688 -902,2675 -903,2688 -904,2688 -905,2688 -906,2675 -907,2688 -908,2688 -909,2688 -910,2688 -911,2688 -912,2688 -913,2688 -914,2688 -915,2675 -916,2688 -917,2675 -918,2688 -919,2688 -920,2688 -921,2688 -922,2675 -923,2688 -924,2688 -925,2688 -926,2688 -927,2688 -928,2688 -929,2688 -930,2688 -931,2688 -932,2675 -933,2688 -934,2688 -935,2688 -936,2688 -937,2688 -938,2688 -939,2688 -940,2688 -941,2688 -942,2688 -943,2688 -944,2675 -945,2688 -946,2688 -947,2688 -948,2688 -949,2688 -950,2688 -951,2688 -952,2688 -953,2688 -954,2688 -955,2688 -956,2688 -957,2688 -958,2688 -959,2688 -960,2688 -961,2688 -962,2688 -963,2688 -964,2688 -965,2688 -966,2688 -967,2688 -968,2688 -969,2675 -970,2688 -971,2688 -972,2688 -973,2688 -974,2688 -975,2688 -976,2688 -977,2688 -978,2688 -979,2688 -980,2675 -981,2688 -982,2688 -983,2688 -984,2688 -985,2688 -986,2688 -987,2688 -988,2688 -989,2688 -990,2688 -991,2688 -992,2688 -993,2688 -994,2688 -995,2688 -996,2688 -997,2688 -998,2688 -999,2688 -1000,2688 -1001,2688 -1002,2688 -1003,2688 -1004,2688 -1005,2688 -1006,2688 -1007,2688 -1008,2688 -1009,2688 -1010,2688 -1011,2688 -1012,2688 -1013,2688 -1014,2688 -1015,2675 -1016,2688 -1017,2688 -1018,2688 -1019,2675 -1020,2675 -1021,2688 -1022,2675 -1023,2675 -1024,2688 -1025,2688 -1026,2675 -1027,2688 -1028,2688 -1029,2688 -1030,2688 -1031,2688 -1032,2688 -1033,2688 -1034,2688 -1035,2688 -1036,2688 -1037,2688 -1038,2688 -1039,2688 -1040,2688 -1041,2688 -1042,2688 -1043,2688 -1044,2688 -1045,2688 -1046,2688 -1047,2688 -1048,2688 -1049,2688 -1050,2688 -1051,2688 -1052,2688 -1053,2688 -1054,2688 -1055,2675 -1056,2688 -1057,2688 -1058,2688 -1059,2675 -1060,2675 -1061,2688 -1062,2675 -1063,2688 -1064,2688 -1065,2688 -1066,2688 -1067,2688 -1068,2688 -1069,2688 -1070,2675 -1071,2688 -1072,2688 -1073,2688 -1074,2688 -1075,2688 -1076,2688 -1077,2688 -1078,2688 -1079,2688 -1080,2688 -1081,2688 -1082,2688 -1083,2688 -1084,2675 -1085,2688 -1086,2688 -1087,2688 -1088,2688 -1089,2688 -1090,2688 -1091,2688 -1092,2688 -1093,2688 -1094,2688 -1095,2688 -1096,2688 -1097,2688 -1098,2688 -1099,2688 -1100,2675 -1101,2688 -1102,2688 -1103,2688 -1104,2688 -1105,2675 -1106,2688 -1107,2688 -1108,2675 -1109,2688 -1110,2688 -1111,2688 -1112,2688 -1113,2688 -1114,2688 -1115,2675 -1116,2688 -1117,2688 -1118,2688 -1119,2688 -1120,2688 -1121,2688 -1122,2688 -1123,2688 -1124,2688 -1125,2688 -1126,2688 -1127,2688 -1128,2688 -1129,2688 -1130,2688 -1131,2688 -1132,2688 -1133,2688 -1134,2688 -1135,2675 -1136,2688 -1137,2688 -1138,2688 -1139,2688 -1140,2688 -1141,2688 -1142,2688 -1143,2688 -1144,2688 -1145,2688 -1146,2688 -1147,2688 -1148,2675 -1149,2688 -1150,2688 -1151,2688 -1152,2688 -1153,2688 -1154,2688 -1155,2688 -1156,2688 -1157,2688 -1158,2688 -1159,2688 -1160,2688 -1161,2688 -1162,2688 -1163,2688 -1164,2688 -1165,2688 -1166,2688 -1167,2675 -1168,2688 -1169,2688 -1170,2688 -1171,2688 -1172,2688 -1173,2688 -1174,2688 -1175,2688 -1176,2675 -1177,2688 -1178,2675 -1179,2675 -1180,2688 -1181,2688 -1182,2688 -1183,2688 -1184,2688 -1185,2688 -1186,2688 -1187,2675 -1188,2688 -1189,2688 -1190,2675 -1191,2688 -1192,2675 -1193,2688 -1194,2688 -1195,2688 -1196,2688 -1197,2688 -1198,2688 -1199,2688 -1200,2688 -1201,2688 -1202,2688 -1203,2688 -1204,2688 -1205,2688 -1206,2688 -1207,2675 -1208,2688 -1209,2688 -1210,2688 -1211,2688 -1212,2688 -1213,2688 -1214,2688 -1215,2688 -1216,2688 -1217,2688 -1218,2688 -1219,2688 -1220,2688 -1221,2688 -1222,2688 -1223,2700 -1224,2688 -1225,2688 -1226,2688 -1227,2675 -1228,2688 -1229,2688 -1230,2688 -1231,2688 -1232,2688 -1233,2688 -1234,2688 -1235,2688 -1236,2688 -1237,2688 -1238,2688 -1239,2688 -1240,2675 -1241,2688 -1242,2688 -1243,2688 -1244,2688 -1245,2675 -1246,2675 -1247,2688 -1248,2688 -1249,2688 -1250,2688 -1251,2688 -1252,2688 -1253,2688 -1254,2675 -1255,2688 -1256,2688 -1257,2700 -1258,2688 -1259,2688 -1260,2688 -1261,2688 -1262,2688 -1263,2688 -1264,2688 -1265,2688 -1266,2688 -1267,2688 -1268,2688 -1269,2688 -1270,2688 -1271,2688 -1272,2688 -1273,2688 -1274,2688 -1275,2675 -1276,2688 -1277,2688 -1278,2688 -1279,2688 -1280,2688 -1281,2688 -1282,2688 -1283,2688 -1284,2675 -1285,2688 -1286,2688 -1287,2675 -1288,2688 -1289,2688 -1290,2688 -1291,2688 -1292,2688 -1293,2688 -1294,2675 -1295,2688 -1296,2688 -1297,2688 -1298,2688 -1299,2688 -1300,2688 -1301,2688 -1302,2688 -1303,2688 -1304,2688 -1305,2688 -1306,2688 -1307,2688 -1308,2688 -1309,2688 -1310,2675 -1311,2688 -1312,2688 -1313,2700 -1314,2688 -1315,2675 -1316,2688 -1317,2688 -1318,2688 -1319,2688 -1320,2688 -1321,2688 -1322,2675 -1323,2688 -1324,2688 -1325,2688 -1326,2688 -1327,2688 -1328,2688 -1329,2688 -1330,2688 -1331,2688 -1332,2688 -1333,2688 -1334,2688 -1335,2688 -1336,2688 -1337,2688 -1338,2688 -1339,2688 -1340,2688 -1341,2688 -1342,2688 -1343,2688 -1344,2688 -1345,2688 -1346,2688 -1347,2688 -1348,2688 -1349,2688 -1350,2688 -1351,2688 -1352,2675 -1353,2688 -1354,2675 -1355,2688 -1356,2688 -1357,2688 -1358,2688 -1359,2688 -1360,2688 -1361,2688 -1362,2688 -1363,2688 -1364,2688 -1365,2688 -1366,2675 -1367,2675 -1368,2675 -1369,2688 -1370,2675 -1371,2688 -1372,2688 -1373,2688 -1374,2688 -1375,2688 -1376,2688 -1377,2688 -1378,2688 -1379,2688 -1380,2688 -1381,2688 -1382,2688 -1383,2688 -1384,2688 -1385,2688 -1386,2688 -1387,2688 -1388,2688 -1389,2688 -1390,2688 -1391,2688 -1392,2688 -1393,2688 -1394,2688 -1395,2688 -1396,2675 -1397,2688 -1398,2688 -1399,2688 -1400,2675 -1401,2688 -1402,2688 -1403,2688 -1404,2688 -1405,2688 -1406,2688 -1407,2688 -1408,2688 -1409,2688 -1410,2700 -1411,2688 -1412,2675 -1413,2688 -1414,2688 -1415,2688 -1416,2700 -1417,2688 -1418,2688 -1419,2688 -1420,2688 -1421,2688 -1422,2688 -1423,2688 -1424,2688 -1425,2688 -1426,2688 -1427,2688 -1428,2688 -1429,2688 -1430,2688 -1431,2688 -1432,2688 -1433,2675 -1434,2688 -1435,2688 -1436,2675 -1437,2688 -1438,2688 -1439,2688 -1440,2688 -1441,2688 -1442,2688 -1443,2688 -1444,2688 -1445,2688 -1446,2688 -1447,2688 -1448,2688 -1449,2688 -1450,2688 -1451,2688 -1452,2688 -1453,2688 -1454,2688 -1455,2688 -1456,2675 -1457,2688 -1458,2688 -1459,2688 -1460,2688 -1461,2688 -1462,2675 -1463,2688 -1464,2688 -1465,2688 -1466,2675 -1467,2688 -1468,2688 -1469,2688 -1470,2688 -1471,2688 -1472,2688 -1473,2688 -1474,2675 -1475,2688 -1476,2688 -1477,2675 -1478,2675 -1479,2688 -1480,2688 -1481,2688 -1482,2688 -1483,2688 -1484,2688 -1485,2688 -1486,2688 -1487,2688 -1488,2688 -1489,2688 -1490,2688 -1491,2688 -1492,2688 -1493,2688 -1494,2688 -1495,2688 -1496,2688 -1497,2688 -1498,2688 -1499,2688 -1500,2688 -1501,2688 -1502,2688 -1503,2688 -1504,2688 -1505,2688 -1506,2688 -1507,2688 -1508,2688 -1509,2688 -1510,2688 -1511,2675 -1512,2688 -1513,2688 -1514,2688 -1515,2688 -1516,2688 -1517,2688 -1518,2688 -1519,2688 -1520,2688 -1521,2688 -1522,2688 -1523,2688 -1524,2688 -1525,2688 -1526,2688 -1527,2688 -1528,2688 -1529,2688 -1530,2688 -1531,2688 -1532,2688 -1533,2688 -1534,2688 -1535,2675 -1536,2675 -1537,2688 -1538,2688 -1539,2688 -1540,2688 -1541,2688 -1542,2675 -1543,2688 -1544,2688 -1545,2688 -1546,2688 -1547,2688 -1548,2688 -1549,2688 -1550,2688 -1551,2688 -1552,2688 -1553,2688 -1554,2688 -1555,2688 -1556,2688 -1557,2688 -1558,2688 -1559,2688 -1560,2688 -1561,2688 -1562,2688 -1563,2675 -1564,2675 -1565,2688 -1566,2688 -1567,2688 -1568,2688 -1569,2688 -1570,2688 -1571,2688 -1572,2688 -1573,2688 -1574,2675 -1575,2688 -1576,2688 -1577,2675 -1578,2688 -1579,2688 -1580,2688 -1581,2688 -1582,2675 -1583,2688 -1584,2688 -1585,2688 -1586,2688 -1587,2688 -1588,2688 -1589,2688 -1590,2688 -1591,2688 -1592,2675 -1593,2688 -1594,2688 -1595,2688 -1596,2688 -1597,2688 -1598,2688 -1599,2688 -1600,2688 -1601,2688 -1602,2688 -1603,2688 -1604,2675 -1605,2688 -1606,2688 -1607,2688 -1608,2688 -1609,2688 -1610,2675 -1611,2688 -1612,2688 -1613,2688 -1614,2675 -1615,2688 -1616,2688 -1617,2688 -1618,2688 -1619,2688 -1620,2688 -1621,2688 -1622,2688 -1623,2688 -1624,2688 -1625,2688 -1626,2688 -1627,2688 -1628,2688 -1629,2688 -1630,2688 -1631,2688 -1632,2675 -1633,2688 -1634,2688 -1635,2675 -1636,2688 -1637,2688 -1638,2688 -1639,2688 -1640,2688 -1641,2688 -1642,2675 -1643,2688 -1644,2688 -1645,2688 -1646,2688 -1647,2688 -1648,2688 -1649,2688 -1650,2688 -1651,2688 -1652,2688 -1653,2688 -1654,2688 -1655,2688 -1656,2688 -1657,2688 -1658,2688 -1659,2688 -1660,2688 -1661,2688 -1662,2688 -1663,2688 -1664,2688 -1665,2688 -1666,2688 -1667,2688 -1668,2688 -1669,2688 -1670,2688 -1671,2688 -1672,2688 -1673,2688 -1674,2688 -1675,2688 -1676,2688 -1677,2688 -1678,2688 -1679,2688 -1680,2688 -1681,2688 -1682,2688 -1683,2688 -1684,2675 -1685,2688 -1686,2688 -1687,2688 -1688,2688 -1689,2688 -1690,2688 -1691,2688 -1692,2675 -1693,2688 -1694,2688 -1695,2688 -1696,2688 -1697,2688 -1698,2688 -1699,2688 -1700,2688 -1701,2675 -1702,2688 -1703,2688 -1704,2700 -1705,2688 -1706,2688 -1707,2688 -1708,2688 -1709,2688 -1710,2688 -1711,2688 -1712,2675 -1713,2688 -1714,2688 -1715,2688 -1716,2688 -1717,2688 -1718,2688 -1719,2688 -1720,2688 -1721,2688 -1722,2688 -1723,2688 -1724,2675 -1725,2688 -1726,2688 -1727,2688 -1728,2688 -1729,2688 -1730,2688 -1731,2688 -1732,2688 -1733,2688 -1734,2688 -1735,2688 -1736,2688 -1737,2688 -1738,2688 -1739,2688 -1740,2688 -1741,2688 -1742,2700 -1743,2688 -1744,2688 -1745,2688 -1746,2688 -1747,2688 -1748,2688 -1749,2688 -1750,2688 -1751,2688 -1752,2688 -1753,2688 -1754,2688 -1755,2688 -1756,2675 -1757,2688 -1758,2688 -1759,2688 -1760,2688 -1761,2675 -1762,2688 -1763,2688 -1764,2688 -1765,2675 -1766,2688 -1767,2688 -1768,2688 -1769,2688 -1770,2688 -1771,2688 -1772,2688 -1773,2688 -1774,2688 -1775,2688 -1776,2675 -1777,2688 -1778,2688 -1779,2688 -1780,2688 -1781,2688 -1782,2688 -1783,2688 -1784,2675 -1785,2688 -1786,2688 -1787,2688 -1788,2675 -1789,2688 -1790,2688 -1791,2688 -1792,2675 -1793,2675 -1794,2688 -1795,2688 -1796,2688 -1797,2688 -1798,2675 -1799,2688 -1800,2688 -1801,2688 -1802,2688 -1803,2688 -1804,2688 -1805,2688 -1806,2688 -1807,2688 -1808,2688 -1809,2688 -1810,2688 -1811,2688 -1812,2688 -1813,2688 -1814,2688 -1815,2688 -1816,2688 -1817,2688 -1818,2688 -1819,2675 -1820,2688 -1821,2688 -1822,2688 -1823,2688 -1824,2688 -1825,2688 -1826,2688 -1827,2688 -1828,2688 -1829,2688 -1830,2688 -1831,2688 -1832,2688 -1833,2688 -1834,2688 -1835,2688 -1836,2688 -1837,2688 -1838,2688 -1839,2688 -1840,2688 -1841,2688 -1842,2688 -1843,2688 -1844,2688 -1845,2688 -1846,2675 -1847,2688 -1848,2688 -1849,2688 -1850,2688 -1851,2688 -1852,2688 -1853,2688 -1854,2688 -1855,2688 -1856,2688 -1857,2688 -1858,2688 -1859,2688 -1860,2688 -1861,2688 -1862,2688 -1863,2688 -1864,2688 -1865,2688 -1866,2688 -1867,2688 -1868,2688 -1869,2688 -1870,2688 -1871,2688 -1872,2688 -1873,2688 -1874,2688 -1875,2688 -1876,2688 -1877,2700 -1878,2675 -1879,2688 -1880,2675 -1881,2688 -1882,2688 -1883,2688 -1884,2688 -1885,2688 -1886,2688 -1887,2688 -1888,2688 -1889,2700 -1890,2688 -1891,2688 -1892,2688 -1893,2675 -1894,2688 -1895,2688 -1896,2688 -1897,2688 -1898,2688 -1899,2688 -1900,2688 -1901,2688 -1902,2688 -1903,2688 -1904,2688 -1905,2688 -1906,2688 -1907,2688 -1908,2688 -1909,2688 -1910,2675 -1911,2688 -1912,2688 -1913,2675 -1914,2688 -1915,2688 -1916,2688 -1917,2688 -1918,2688 -1919,2688 -1920,2688 -1921,2688 -1922,2688 -1923,2688 -1924,2688 -1925,2688 -1926,2688 -1927,2688 -1928,2688 -1929,2675 -1930,2688 -1931,2688 -1932,2688 -1933,2675 -1934,2688 -1935,2688 -1936,2688 -1937,2688 -1938,2688 -1939,2688 -1940,2675 -1941,2688 -1942,2688 -1943,2688 -1944,2688 -1945,2688 -1946,2688 -1947,2688 -1948,2688 -1949,2688 -1950,2688 -1951,2688 -1952,2688 -1953,2688 -1954,2688 -1955,2688 -1956,2688 -1957,2688 -1958,2688 -1959,2688 -1960,2688 -1961,2688 -1962,2688 -1963,2688 -1964,2688 -1965,2675 -1966,2688 -1967,2688 -1968,2688 -1969,2688 -1970,2688 -1971,2688 -1972,2688 -1973,2675 -1974,2688 -1975,2688 -1976,2688 -1977,2675 -1978,2688 -1979,2688 -1980,2688 -1981,2688 -1982,2688 -1983,2688 -1984,2688 -1985,2675 -1986,2688 -1987,2688 -1988,2688 -1989,2688 -1990,2675 -1991,2688 -1992,2688 -1993,2688 -1994,2675 -1995,2675 -1996,2688 -1997,2688 -1998,2688 -1999,2675 -2000,2688 -2001,2688 -2002,2688 -2003,2688 -2004,2688 -2005,2688 -2006,2688 -2007,2688 -2008,2688 -2009,2688 -2010,2688 -2011,2688 -2012,2688 -2013,2688 -2014,2688 -2015,2688 -2016,2688 -2017,2688 -2018,2688 -2019,2688 -2020,2675 -2021,2675 -2022,2675 -2023,2688 -2024,2688 -2025,2688 -2026,2688 -2027,2688 -2028,2675 -2029,2688 -2030,2688 -2031,2688 -2032,2675 -2033,2688 -2034,2688 -2035,2688 -2036,2688 -2037,2688 -2038,2688 -2039,2675 -2040,2688 -2041,2688 -2042,2675 -2043,2688 -2044,2688 -2045,2688 -2046,2688 -2047,2700 -2048,2688 -2049,2675 -2050,2688 -2051,2688 -2052,2688 -2053,2688 -2054,2688 -2055,2675 -2056,2688 -2057,2688 -2058,2688 -2059,2688 -2060,2688 -2061,2688 -2062,2688 -2063,2688 -2064,2675 -2065,2675 -2066,2700 -2067,2688 -2068,2688 -2069,2688 -2070,2688 -2071,2688 -2072,2688 -2073,2688 -2074,2688 -2075,2688 -2076,2688 -2077,2688 -2078,2688 -2079,2688 -2080,2688 -2081,2688 -2082,2688 -2083,2688 -2084,2675 -2085,2688 -2086,2688 -2087,2688 -2088,2688 -2089,2688 -2090,2688 -2091,2688 -2092,2688 -2093,2688 -2094,2688 -2095,2688 -2096,2688 -2097,2688 -2098,2688 -2099,2688 -2100,2688 -2101,2688 -2102,2688 -2103,2688 -2104,2688 -2105,2688 -2106,2688 -2107,2688 -2108,2688 -2109,2688 -2110,2688 -2111,2688 -2112,2688 -2113,2688 -2114,2688 -2115,2688 -2116,2688 -2117,2688 -2118,2688 -2119,2688 -2120,2688 -2121,2688 -2122,2688 -2123,2688 -2124,2688 -2125,2688 -2126,2688 -2127,2688 -2128,2688 -2129,2688 -2130,2675 -2131,2688 -2132,2688 -2133,2688 -2134,2688 -2135,2688 -2136,2688 -2137,2688 -2138,2688 -2139,2688 -2140,2688 -2141,2688 -2142,2688 -2143,2688 -2144,2688 -2145,2688 -2146,2688 -2147,2688 -2148,2688 -2149,2688 -2150,2688 -2151,2688 -2152,2688 -2153,2688 -2154,2688 -2155,2688 -2156,2688 -2157,2688 -2158,2688 -2159,2688 -2160,2688 -2161,2688 -2162,2675 -2163,2688 -2164,2688 -2165,2688 -2166,2688 -2167,2688 -2168,2688 -2169,2688 -2170,2688 -2171,2688 -2172,2688 -2173,2675 -2174,2688 -2175,2688 -2176,2688 -2177,2688 -2178,2688 -2179,2688 -2180,2688 -2181,2675 -2182,2688 -2183,2688 -2184,2688 -2185,2688 -2186,2688 -2187,2688 -2188,2688 -2189,2688 -2190,2688 -2191,2688 -2192,2688 -2193,2688 -2194,2688 -2195,2675 -2196,2688 -2197,2688 -2198,2688 -2199,2688 -2200,2675 -2201,2688 -2202,2688 -2203,2688 -2204,2688 -2205,2688 -2206,2675 -2207,2688 -2208,2688 -2209,2675 -2210,2688 -2211,2688 -2212,2688 -2213,2688 -2214,2688 -2215,2688 -2216,2688 -2217,2688 -2218,2688 -2219,2688 -2220,2688 -2221,2688 -2222,2688 -2223,2688 -2224,2688 -2225,2675 -2226,2675 -2227,2688 -2228,2688 -2229,2688 -2230,2688 -2231,2688 -2232,2688 -2233,2688 -2234,2688 -2235,2688 -2236,2688 -2237,2688 -2238,2688 -2239,2688 -2240,2688 -2241,2688 -2242,2688 -2243,2688 -2244,2688 -2245,2688 -2246,2688 -2247,2688 -2248,2688 -2249,2688 -2250,2688 -2251,2688 -2252,2688 -2253,2688 -2254,2688 -2255,2688 -2256,2688 -2257,2675 -2258,2688 -2259,2688 -2260,2688 -2261,2688 -2262,2688 -2263,2688 -2264,2688 -2265,2688 -2266,2688 -2267,2688 -2268,2688 -2269,2688 -2270,2688 -2271,2675 -2272,2688 -2273,2688 -2274,2688 -2275,2675 -2276,2688 -2277,2688 -2278,2688 -2279,2688 -2280,2688 -2281,2688 -2282,2688 -2283,2688 -2284,2688 -2285,2688 -2286,2688 -2287,2675 -2288,2688 -2289,2688 -2290,2688 -2291,2688 -2292,2688 -2293,2688 -2294,2700 -2295,2688 -2296,2688 -2297,2688 -2298,2688 -2299,2688 -2300,2675 -2301,2688 -2302,2688 -2303,2688 -2304,2688 -2305,2688 -2306,2688 -2307,2688 -2308,2688 -2309,2688 -2310,2688 -2311,2688 -2312,2688 -2313,2688 -2314,2688 -2315,2675 -2316,2675 -2317,2688 -2318,2688 -2319,2688 -2320,2688 -2321,2688 -2322,2688 -2323,2688 -2324,2688 -2325,2688 -2326,2675 -2327,2688 -2328,2688 -2329,2688 -2330,2688 -2331,2688 -2332,2675 -2333,2675 -2334,2688 -2335,2688 -2336,2688 -2337,2688 -2338,2688 -2339,2688 -2340,2688 -2341,2688 -2342,2688 -2343,2688 -2344,2688 -2345,2688 -2346,2688 -2347,2688 -2348,2675 -2349,2688 -2350,2688 -2351,2675 -2352,2688 -2353,2688 -2354,2688 -2355,2688 -2356,2688 -2357,2688 -2358,2688 -2359,2675 -2360,2688 -2361,2688 -2362,2688 -2363,2688 -2364,2688 -2365,2675 -2366,2688 -2367,2688 -2368,2688 -2369,2688 -2370,2675 -2371,2675 -2372,2688 -2373,2688 -2374,2688 -2375,2688 -2376,2675 -2377,2688 -2378,2675 -2379,2688 -2380,2688 -2381,2688 -2382,2688 -2383,2675 -2384,2675 -2385,2688 -2386,2688 -2387,2688 -2388,2688 -2389,2688 -2390,2688 -2391,2688 -2392,2688 -2393,2688 -2394,2688 -2395,2688 -2396,2688 -2397,2688 -2398,2688 -2399,2688 -2400,2688 -2401,2688 -2402,2688 -2403,2688 -2404,2688 -2405,2688 -2406,2688 -2407,2688 -2408,2688 -2409,2675 -2410,2688 -2411,2688 -2412,2688 -2413,2688 -2414,2675 -2415,2688 -2416,2688 -2417,2688 -2418,2688 -2419,2688 -2420,2688 -2421,2688 -2422,2688 -2423,2688 -2424,2688 -2425,2688 -2426,2688 -2427,2688 -2428,2688 -2429,2688 -2430,2688 -2431,2688 -2432,2700 -2433,2688 -2434,2688 -2435,2688 -2436,2688 -2437,2688 -2438,2675 -2439,2688 -2440,2688 -2441,2688 -2442,2688 -2443,2688 -2444,2688 -2445,2688 -2446,2688 -2447,2688 -2448,2688 -2449,2688 -2450,2688 -2451,2688 -2452,2688 -2453,2688 -2454,2688 -2455,2688 -2456,2688 -2457,2688 -2458,2688 -2459,2675 -2460,2688 -2461,2688 -2462,2688 -2463,2675 -2464,2700 -2465,2688 -2466,2675 -2467,2688 -2468,2688 -2469,2688 -2470,2688 -2471,2688 -2472,2688 -2473,2688 -2474,2688 -2475,2688 -2476,2688 -2477,2688 -2478,2675 -2479,2688 -2480,2688 -2481,2688 -2482,2688 -2483,2688 -2484,2688 -2485,2688 -2486,2675 -2487,2688 -2488,2688 -2489,2688 -2490,2688 -2491,2688 -2492,2688 -2493,2688 -2494,2688 -2495,2688 -2496,2688 -2497,2688 -2498,2688 -2499,2675 -2500,2688 -2501,2688 -2502,2675 -2503,2675 -2504,2688 -2505,2688 -2506,2688 -2507,2688 -2508,2688 -2509,2688 -2510,2675 -2511,2688 -2512,2688 -2513,2688 -2514,2675 -2515,2688 -2516,2688 -2517,2688 -2518,2688 -2519,2688 -2520,2675 -2521,2688 -2522,2688 -2523,2688 -2524,2675 -2525,2688 -2526,2688 -2527,2688 -2528,2688 -2529,2688 -2530,2688 -2531,2688 -2532,2688 -2533,2688 -2534,2688 -2535,2688 -2536,2675 -2537,2688 -2538,2688 -2539,2688 -2540,2688 -2541,2688 -2542,2675 -2543,2688 -2544,2688 -2545,2688 -2546,2688 -2547,2675 -2548,2688 -2549,2675 -2550,2688 -2551,2688 -2552,2688 -2553,2688 -2554,2688 -2555,2688 -2556,2700 -2557,2688 -2558,2688 -2559,2688 -2560,2688 -2561,2688 -2562,2675 -2563,2688 -2564,2688 -2565,2688 -2566,2688 -2567,2688 -2568,2688 -2569,2688 -2570,2688 -2571,2688 -2572,2688 -2573,2688 -2574,2688 -2575,2688 -2576,2688 -2577,2688 -2578,2688 -2579,2688 -2580,2688 -2581,2688 -2582,2688 -2583,2688 -2584,2688 -2585,2688 -2586,2688 -2587,2688 -2588,2688 -2589,2688 -2590,2688 -2591,2688 -2592,2688 -2593,2688 -2594,2688 -2595,2688 -2596,2688 -2597,2688 -2598,2688 -2599,2688 -2600,2688 -2601,2688 -2602,2675 -2603,2675 -2604,2688 -2605,2688 -2606,2688 -2607,2688 -2608,2688 -2609,2700 -2610,2688 -2611,2688 -2612,2688 -2613,2675 -2614,2688 -2615,2688 -2616,2688 -2617,2688 -2618,2688 -2619,2688 -2620,2688 -2621,2688 -2622,2688 -2623,2688 -2624,2688 -2625,2688 -2626,2688 -2627,2688 -2628,2688 -2629,2688 -2630,2688 -2631,2688 -2632,2688 -2633,2688 -2634,2688 -2635,2688 -2636,2688 -2637,2688 -2638,2688 -2639,2688 -2640,2688 -2641,2688 -2642,2688 -2643,2688 -2644,2688 -2645,2688 -2646,2688 -2647,2675 -2648,2688 -2649,2688 -2650,2675 -2651,2688 -2652,2688 -2653,2688 -2654,2688 -2655,2688 -2656,2688 -2657,2688 -2658,2688 -2659,2688 -2660,2688 -2661,2688 -2662,2688 -2663,2675 -2664,2688 -2665,2688 -2666,2688 -2667,2675 -2668,2688 -2669,2688 -2670,2688 -2671,2688 -2672,2675 -2673,2688 -2674,2688 -2675,2675 -2676,2688 -2677,2688 -2678,2688 -2679,2688 -2680,2688 -2681,2688 -2682,2688 -2683,2688 -2684,2675 -2685,2688 -2686,2688 -2687,2688 -2688,2688 -2689,2688 -2690,2688 -2691,2688 -2692,2688 -2693,2688 -2694,2675 -2695,2688 -2696,2688 -2697,2688 -2698,2688 -2699,2688 -2700,2675 -2701,2688 -2702,2688 -2703,2675 -2704,2688 -2705,2688 -2706,2688 -2707,2675 -2708,2688 -2709,2688 -2710,2688 -2711,2688 -2712,2688 -2713,2688 -2714,2688 -2715,2675 -2716,2675 -2717,2688 -2718,2688 -2719,2688 -2720,2688 -2721,2688 -2722,2688 -2723,2688 -2724,2688 -2725,2688 -2726,2688 -2727,2688 -2728,2688 -2729,2675 -2730,2688 -2731,2675 -2732,2688 -2733,2688 -2734,2688 -2735,2688 -2736,2688 -2737,2688 -2738,2688 -2739,2688 -2740,2688 -2741,2688 -2742,2688 -2743,2688 -2744,2688 -2745,2688 -2746,2688 -2747,2688 -2748,2688 -2749,2688 -2750,2688 -2751,2688 -2752,2688 -2753,2688 -2754,2675 -2755,2688 -2756,2675 -2757,2688 -2758,2675 -2759,2688 -2760,2688 -2761,2688 -2762,2688 -2763,2688 -2764,2688 -2765,2675 -2766,2675 -2767,2688 -2768,2688 -2769,2688 -2770,2688 -2771,2688 -2772,2688 -2773,2688 -2774,2688 -2775,2688 -2776,2688 -2777,2688 -2778,2688 -2779,2688 -2780,2688 -2781,2688 -2782,2688 -2783,2675 -2784,2688 -2785,2688 -2786,2688 -2787,2688 -2788,2688 -2789,2688 -2790,2675 -2791,2688 -2792,2688 -2793,2688 -2794,2688 -2795,2688 -2796,2688 -2797,2688 -2798,2688 -2799,2688 -2800,2688 -2801,2688 -2802,2688 -2803,2688 -2804,2688 -2805,2688 -2806,2688 -2807,2688 -2808,2688 -2809,2688 -2810,2688 -2811,2675 -2812,2688 -2813,2688 -2814,2675 -2815,2688 -2816,2688 -2817,2675 -2818,2688 -2819,2688 -2820,2688 -2821,2688 -2822,2688 -2823,2688 -2824,2675 -2825,2688 -2826,2688 -2827,2688 -2828,2688 -2829,2688 -2830,2688 -2831,2688 -2832,2688 -2833,2688 -2834,2688 -2835,2688 -2836,2688 -2837,2675 -2838,2688 -2839,2675 -2840,2688 -2841,2688 -2842,2688 -2843,2688 -2844,2688 -2845,2688 -2846,2688 -2847,2688 -2848,2688 -2849,2688 -2850,2688 -2851,2688 -2852,2688 -2853,2688 -2854,2688 -2855,2688 -2856,2688 -2857,2688 -2858,2688 -2859,2675 -2860,2688 -2861,2688 -2862,2675 -2863,2688 -2864,2688 -2865,2675 -2866,2688 -2867,2688 -2868,2688 -2869,2688 -2870,2688 -2871,2688 -2872,2688 -2873,2688 -2874,2688 -2875,2688 -2876,2688 -2877,2675 -2878,2688 -2879,2688 -2880,2688 -2881,2688 -2882,2688 -2883,2688 -2884,2688 -2885,2688 -2886,2688 -2887,2688 -2888,2688 -2889,2688 -2890,2688 -2891,2688 -2892,2688 -2893,2688 -2894,2688 -2895,2688 -2896,2688 -2897,2688 -2898,2688 -2899,2688 -2900,2688 -2901,2688 -2902,2688 -2903,2688 -2904,2688 -2905,2688 -2906,2688 -2907,2688 -2908,2688 -2909,2688 -2910,2688 -2911,2688 -2912,2688 -2913,2688 -2914,2688 -2915,2688 -2916,2688 -2917,2675 -2918,2688 -2919,2688 -2920,2688 -2921,2688 -2922,2688 -2923,2675 -2924,2688 -2925,2688 -2926,2688 -2927,2688 -2928,2688 -2929,2688 -2930,2675 -2931,2688 -2932,2688 -2933,2688 -2934,2688 -2935,2700 -2936,2688 -2937,2688 -2938,2688 -2939,2688 -2940,2675 -2941,2688 -2942,2688 -2943,2688 -2944,2688 -2945,2675 -2946,2688 -2947,2688 -2948,2688 -2949,2688 -2950,2688 -2951,2688 -2952,2688 -2953,2688 -2954,2688 -2955,2688 -2956,2688 -2957,2688 -2958,2688 -2959,2688 -2960,2688 -2961,2688 -2962,2688 -2963,2688 -2964,2675 -2965,2688 -2966,2688 -2967,2675 -2968,2688 -2969,2688 -2970,2688 -2971,2688 -2972,2688 -2973,2688 -2974,2688 -2975,2688 -2976,2688 -2977,2688 -2978,2675 -2979,2688 -2980,2688 -2981,2688 -2982,2688 -2983,2688 -2984,2688 -2985,2688 -2986,2688 -2987,2688 -2988,2688 -2989,2688 -2990,2688 -2991,2688 -2992,2688 -2993,2688 -2994,2688 -2995,2688 -2996,2688 -2997,2688 -2998,2688 -2999,2688 -3000,2688 -3001,2688 -3002,2688 -3003,2688 -3004,2688 -3005,2688 -3006,2688 -3007,2688 -3008,2688 -3009,2688 -3010,2688 -3011,2688 -3012,2688 -3013,2688 -3014,2688 -3015,2688 -3016,2688 -3017,2688 -3018,2688 -3019,2675 -3020,2688 -3021,2688 -3022,2688 -3023,2700 -3024,2688 -3025,2688 -3026,2688 -3027,2688 -3028,2688 -3029,2688 -3030,2688 -3031,2688 -3032,2688 -3033,2688 -3034,2688 -3035,2688 -3036,2688 -3037,2688 -3038,2688 -3039,2688 -3040,2688 -3041,2688 -3042,2700 -3043,2688 -3044,2675 -3045,2688 -3046,2688 -3047,2688 -3048,2688 -3049,2688 -3050,2688 -3051,2688 -3052,2675 -3053,2688 -3054,2675 -3055,2688 -3056,2688 -3057,2688 -3058,2688 -3059,2675 -3060,2688 -3061,2688 -3062,2688 -3063,2675 -3064,2688 -3065,2688 -3066,2688 -3067,2675 -3068,2688 -3069,2688 -3070,2688 -3071,2688 -3072,2688 -3073,2675 -3074,2688 -3075,2688 -3076,2675 -3077,2688 -3078,2688 -3079,2688 -3080,2688 -3081,2688 -3082,2688 -3083,2688 -3084,2688 -3085,2688 -3086,2675 -3087,2688 -3088,2688 -3089,2688 -3090,2688 -3091,2688 -3092,2688 -3093,2688 -3094,2688 -3095,2688 -3096,2688 -3097,2688 -3098,2688 -3099,2675 -3100,2675 -3101,2688 -3102,2688 -3103,2688 -3104,2688 -3105,2688 -3106,2688 -3107,2688 -3108,2688 -3109,2688 -3110,2675 -3111,2688 -3112,2688 -3113,2688 -3114,2688 -3115,2688 -3116,2688 -3117,2675 -3118,2688 -3119,2688 -3120,2688 -3121,2688 -3122,2688 -3123,2688 -3124,2675 -3125,2688 -3126,2688 -3127,2688 -3128,2688 -3129,2688 -3130,2688 -3131,2688 -3132,2675 -3133,2700 -3134,2688 -3135,2688 -3136,2688 -3137,2675 -3138,2688 -3139,2675 -3140,2688 -3141,2688 -3142,2688 -3143,2675 -3144,2688 -3145,2688 -3146,2688 -3147,2688 -3148,2688 -3149,2688 -3150,2688 -3151,2688 -3152,2688 -3153,2688 -3154,2688 -3155,2688 -3156,2688 -3157,2688 -3158,2688 -3159,2688 -3160,2688 -3161,2688 -3162,2688 -3163,2688 -3164,2688 -3165,2688 -3166,2688 -3167,2688 -3168,2700 -3169,2688 -3170,2675 -3171,2688 -3172,2688 -3173,2688 -3174,2675 -3175,2688 -3176,2675 -3177,2688 -3178,2688 -3179,2688 -3180,2688 -3181,2688 -3182,2675 -3183,2688 -3184,2688 -3185,2688 -3186,2688 -3187,2688 -3188,2688 -3189,2688 -3190,2688 -3191,2688 -3192,2688 -3193,2675 -3194,2688 -3195,2688 -3196,2688 -3197,2675 -3198,2688 -3199,2688 -3200,2675 -3201,2688 -3202,2688 -3203,2688 -3204,2688 -3205,2688 -3206,2675 -3207,2688 -3208,2688 -3209,2688 -3210,2688 -3211,2688 -3212,2688 -3213,2688 -3214,2688 -3215,2688 -3216,2688 -3217,2688 -3218,2688 -3219,2688 -3220,2688 -3221,2688 -3222,2675 -3223,2688 -3224,2675 -3225,2688 -3226,2688 -3227,2688 -3228,2688 -3229,2688 -3230,2688 -3231,2688 -3232,2688 -3233,2688 -3234,2688 -3235,2688 -3236,2688 -3237,2688 -3238,2688 -3239,2688 -3240,2688 -3241,2688 -3242,2688 -3243,2688 -3244,2675 -3245,2688 -3246,2688 -3247,2688 -3248,2688 -3249,2688 -3250,2688 -3251,2688 -3252,2688 -3253,2688 -3254,2688 -3255,2688 -3256,2688 -3257,2688 -3258,2688 -3259,2688 -3260,2688 -3261,2688 -3262,2688 -3263,2688 -3264,2688 -3265,2688 -3266,2688 -3267,2688 -3268,2675 -3269,2688 -3270,2688 -3271,2688 -3272,2688 -3273,2688 -3274,2675 -3275,2688 -3276,2688 -3277,2688 -3278,2688 -3279,2688 -3280,2688 -3281,2688 -3282,2688 -3283,2688 -3284,2688 -3285,2688 -3286,2675 -3287,2688 -3288,2688 -3289,2688 -3290,2688 -3291,2688 -3292,2688 -3293,2688 -3294,2675 -3295,2688 -3296,2688 -3297,2688 -3298,2688 -3299,2688 -3300,2688 -3301,2688 -3302,2688 -3303,2688 -3304,2688 -3305,2688 -3306,2688 -3307,2688 -3308,2688 -3309,2688 -3310,2688 -3311,2675 -3312,2688 -3313,2675 -3314,2688 -3315,2675 -3316,2688 -3317,2688 -3318,2688 -3319,2688 -3320,2688 -3321,2688 -3322,2675 -3323,2675 -3324,2688 -3325,2688 -3326,2688 -3327,2688 -3328,2688 -3329,2688 -3330,2675 -3331,2688 -3332,2688 -3333,2688 -3334,2675 -3335,2688 -3336,2688 -3337,2688 -3338,2688 -3339,2688 -3340,2688 -3341,2688 -3342,2688 -3343,2688 -3344,2688 -3345,2688 -3346,2688 -3347,2688 -3348,2675 -3349,2688 -3350,2688 -3351,2688 -3352,2688 -3353,2688 -3354,2688 -3355,2675 -3356,2675 -3357,2675 -3358,2688 -3359,2688 -3360,2688 -3361,2688 -3362,2688 -3363,2688 -3364,2688 -3365,2688 -3366,2688 -3367,2688 -3368,2688 -3369,2675 -3370,2688 -3371,2688 -3372,2688 -3373,2688 -3374,2688 -3375,2688 -3376,2688 -3377,2688 -3378,2688 -3379,2688 -3380,2688 -3381,2688 -3382,2688 -3383,2675 -3384,2688 -3385,2688 -3386,2688 -3387,2688 -3388,2688 -3389,2688 -3390,2675 -3391,2688 -3392,2688 -3393,2688 -3394,2688 -3395,2688 -3396,2675 -3397,2688 -3398,2688 -3399,2675 -3400,2688 -3401,2688 -3402,2675 -3403,2688 -3404,2688 -3405,2688 -3406,2675 -3407,2688 -3408,2675 -3409,2688 -3410,2688 -3411,2675 -3412,2688 -3413,2688 -3414,2688 -3415,2688 -3416,2688 -3417,2688 -3418,2688 -3419,2675 -3420,2688 -3421,2688 -3422,2688 -3423,2675 -3424,2688 -3425,2688 -3426,2688 -3427,2700 -3428,2688 -3429,2675 -3430,2675 -3431,2688 -3432,2688 -3433,2688 -3434,2688 -3435,2688 -3436,2688 -3437,2688 -3438,2688 -3439,2688 -3440,2688 -3441,2688 -3442,2688 -3443,2675 -3444,2688 -3445,2675 -3446,2688 -3447,2688 -3448,2688 -3449,2688 -3450,2688 -3451,2675 -3452,2688 -3453,2688 -3454,2688 -3455,2688 -3456,2688 -3457,2675 -3458,2688 -3459,2688 -3460,2675 -3461,2675 -3462,2688 -3463,2688 -3464,2688 -3465,2688 -3466,2688 -3467,2688 -3468,2688 -3469,2688 -3470,2688 -3471,2688 -3472,2688 -3473,2688 -3474,2688 -3475,2688 -3476,2688 -3477,2688 -3478,2688 -3479,2688 -3480,2688 -3481,2675 -3482,2688 -3483,2675 -3484,2688 -3485,2688 -3486,2688 -3487,2688 -3488,2688 -3489,2675 -3490,2688 -3491,2675 -3492,2675 -3493,2688 -3494,2688 -3495,2688 -3496,2688 -3497,2688 -3498,2688 -3499,2675 -3500,2688 -3501,2688 -3502,2688 -3503,2688 -3504,2688 -3505,2688 -3506,2688 -3507,2688 -3508,2688 -3509,2688 -3510,2688 -3511,2675 -3512,2688 -3513,2688 -3514,2688 -3515,2688 -3516,2688 -3517,2688 -3518,2688 -3519,2688 -3520,2688 -3521,2675 -3522,2675 -3523,2688 -3524,2688 -3525,2688 -3526,2688 -3527,2675 -3528,2688 -3529,2688 -3530,2688 -3531,2688 -3532,2688 -3533,2688 -3534,2688 -3535,2688 -3536,2688 -3537,2688 -3538,2688 -3539,2675 -3540,2688 -3541,2675 -3542,2675 -3543,2688 -3544,2688 -3545,2688 -3546,2688 -3547,2688 -3548,2688 -3549,2688 -3550,2688 -3551,2688 -3552,2675 -3553,2688 -3554,2688 -3555,2675 -3556,2688 -3557,2675 -3558,2688 -3559,2688 -3560,2688 -3561,2688 -3562,2688 -3563,2688 -3564,2688 -3565,2688 -3566,2688 -3567,2688 -3568,2675 -3569,2688 -3570,2688 -3571,2688 -3572,2688 -3573,2675 -3574,2675 -3575,2688 -3576,2688 -3577,2688 -3578,2688 -3579,2688 -3580,2688 -3581,2688 -3582,2688 -3583,2688 -3584,2688 -3585,2688 -3586,2675 -3587,2688 -3588,2688 -3589,2688 -3590,2688 -3591,2688 -3592,2688 -3593,2688 -3594,2688 -3595,2688 -3596,2688 -3597,2688 -3598,2675 -3599,2688 -3600,2688 -3601,2675 -3602,2688 -3603,2675 -3604,2675 -3605,2675 -3606,2688 -3607,2675 -3608,2688 -3609,2688 -3610,2688 -3611,2688 -3612,2688 -3613,2688 -3614,2688 -3615,2688 -3616,2688 -3617,2675 -3618,2688 -3619,2688 -3620,2675 -3621,2688 -3622,2688 -3623,2688 -3624,2688 -3625,2688 -3626,2688 -3627,2688 -3628,2688 -3629,2688 -3630,2688 -3631,2688 -3632,2688 -3633,2688 -3634,2688 -3635,2688 -3636,2688 -3637,2688 -3638,2688 -3639,2675 -3640,2688 -3641,2688 -3642,2688 -3643,2688 -3644,2688 -3645,2688 -3646,2688 -3647,2688 -3648,2688 -3649,2688 -3650,2688 -3651,2688 -3652,2688 -3653,2688 -3654,2688 -3655,2688 -3656,2688 -3657,2675 -3658,2688 -3659,2688 -3660,2688 -3661,2688 -3662,2688 -3663,2688 -3664,2675 -3665,2688 -3666,2688 -3667,2688 -3668,2688 -3669,2688 -3670,2688 -3671,2688 -3672,2688 -3673,2688 -3674,2688 -3675,2688 -3676,2688 -3677,2688 -3678,2688 -3679,2688 -3680,2688 -3681,2688 -3682,2688 -3683,2688 -3684,2675 -3685,2688 -3686,2688 -3687,2688 -3688,2688 -3689,2688 -3690,2675 -3691,2688 -3692,2688 -3693,2688 -3694,2688 -3695,2688 -3696,2688 -3697,2688 -3698,2688 -3699,2688 -3700,2688 -3701,2688 -3702,2688 -3703,2675 -3704,2688 -3705,2688 -3706,2688 -3707,2688 -3708,2688 -3709,2675 -3710,2688 -3711,2688 -3712,2688 -3713,2688 -3714,2688 -3715,2688 -3716,2688 -3717,2688 -3718,2688 -3719,2700 -3720,2688 -3721,2675 -3722,2688 -3723,2675 -3724,2688 -3725,2688 -3726,2688 -3727,2675 -3728,2688 -3729,2688 -3730,2688 -3731,2675 -3732,2688 -3733,2688 -3734,2688 -3735,2688 -3736,2688 -3737,2675 -3738,2688 -3739,2688 -3740,2688 -3741,2688 -3742,2688 -3743,2688 -3744,2688 -3745,2688 -3746,2688 -3747,2688 -3748,2688 -3749,2675 -3750,2688 -3751,2688 -3752,2688 -3753,2688 -3754,2688 -3755,2688 -3756,2688 -3757,2675 -3758,2688 -3759,2688 -3760,2688 -3761,2688 -3762,2688 -3763,2688 -3764,2688 -3765,2688 -3766,2688 -3767,2675 -3768,2688 -3769,2688 -3770,2688 -3771,2688 -3772,2688 -3773,2688 -3774,2688 -3775,2688 -3776,2688 -3777,2688 -3778,2688 -3779,2688 -3780,2688 -3781,2688 -3782,2688 -3783,2688 -3784,2688 -3785,2688 -3786,2688 -3787,2688 -3788,2688 -3789,2688 -3790,2688 -3791,2688 -3792,2688 -3793,2688 -3794,2688 -3795,2688 -3796,2688 -3797,2688 -3798,2688 -3799,2688 -3800,2688 -3801,2688 -3802,2675 -3803,2688 -3804,2688 -3805,2688 -3806,2688 -3807,2688 -3808,2688 -3809,2688 -3810,2688 -3811,2688 -3812,2688 -3813,2688 -3814,2688 -3815,2688 -3816,2688 -3817,2688 -3818,2675 -3819,2688 -3820,2688 -3821,2688 -3822,2688 -3823,2688 -3824,2688 -3825,2675 -3826,2688 -3827,2688 -3828,2688 -3829,2688 -3830,2688 -3831,2688 -3832,2688 -3833,2688 -3834,2688 -3835,2688 -3836,2688 -3837,2688 -3838,2688 -3839,2688 -3840,2688 -3841,2675 -3842,2688 -3843,2675 -3844,2688 -3845,2675 -3846,2688 -3847,2688 -3848,2675 -3849,2675 -3850,2688 -3851,2688 -3852,2688 -3853,2688 -3854,2688 -3855,2688 -3856,2675 -3857,2688 -3858,2688 -3859,2688 -3860,2688 -3861,2688 -3862,2675 -3863,2688 -3864,2688 -3865,2688 -3866,2688 -3867,2675 -3868,2688 -3869,2688 -3870,2688 -3871,2688 -3872,2675 -3873,2688 -3874,2688 -3875,2675 -3876,2688 -3877,2688 -3878,2688 -3879,2688 -3880,2688 -3881,2688 -3882,2688 -3883,2688 -3884,2688 -3885,2688 -3886,2688 -3887,2688 -3888,2688 -3889,2688 -3890,2688 -3891,2688 -3892,2688 -3893,2688 -3894,2688 -3895,2688 -3896,2688 -3897,2688 -3898,2688 -3899,2688 -3900,2700 -3901,2688 -3902,2688 -3903,2688 -3904,2688 -3905,2688 -3906,2688 -3907,2675 -3908,2688 -3909,2675 -3910,2688 -3911,2688 -3912,2688 -3913,2688 -3914,2688 -3915,2688 -3916,2688 -3917,2688 -3918,2688 -3919,2675 -3920,2688 -3921,2688 -3922,2688 -3923,2688 -3924,2688 -3925,2688 -3926,2688 -3927,2688 -3928,2688 -3929,2688 -3930,2688 -3931,2688 -3932,2688 -3933,2688 -3934,2688 -3935,2688 -3936,2688 -3937,2675 -3938,2675 -3939,2688 -3940,2688 -3941,2688 -3942,2675 -3943,2688 -3944,2688 -3945,2688 -3946,2688 -3947,2688 -3948,2675 -3949,2675 -3950,2688 -3951,2688 -3952,2688 -3953,2688 -3954,2688 -3955,2688 -3956,2688 -3957,2688 -3958,2688 -3959,2688 -3960,2688 -3961,2675 -3962,2688 -3963,2688 -3964,2688 -3965,2688 -3966,2700 -3967,2688 -3968,2688 -3969,2688 -3970,2688 -3971,2688 -3972,2688 -3973,2688 -3974,2675 -3975,2675 -3976,2688 -3977,2688 -3978,2688 -3979,2688 -3980,2688 -3981,2688 -3982,2688 -3983,2688 -3984,2688 -3985,2675 -3986,2675 -3987,2688 -3988,2688 -3989,2688 -3990,2688 -3991,2688 -3992,2688 -3993,2688 -3994,2688 -3995,2688 -3996,2688 -3997,2688 -3998,2688 -3999,2688 -4000,2688 -4001,2688 -4002,2688 -4003,2688 -4004,2688 -4005,2675 -4006,2688 -4007,2688 -4008,2688 -4009,2688 -4010,2688 -4011,2688 -4012,2675 -4013,2688 -4014,2688 -4015,2688 -4016,2688 -4017,2688 -4018,2688 -4019,2688 -4020,2675 -4021,2675 -4022,2688 -4023,2688 -4024,2688 -4025,2688 -4026,2688 -4027,2688 -4028,2688 -4029,2688 -4030,2688 -4031,2688 -4032,2688 -4033,2688 -4034,2688 -4035,2688 -4036,2688 -4037,2688 -4038,2688 -4039,2688 -4040,2675 -4041,2688 -4042,2688 -4043,2675 -4044,2688 -4045,2688 -4046,2688 -4047,2688 -4048,2688 -4049,2688 -4050,2675 -4051,2688 -4052,2688 -4053,2688 -4054,2688 -4055,2688 -4056,2688 -4057,2688 -4058,2688 -4059,2688 -4060,2688 -4061,2688 -4062,2675 -4063,2700 -4064,2688 -4065,2688 -4066,2688 -4067,2688 -4068,2675 -4069,2688 -4070,2675 -4071,2688 -4072,2688 -4073,2688 -4074,2688 -4075,2688 -4076,2688 -4077,2688 -4078,2688 -4079,2688 -4080,2688 -4081,2688 -4082,2700 -4083,2688 -4084,2700 -4085,2688 -4086,2688 -4087,2688 -4088,2688 -4089,2675 -4090,2688 -4091,2688 -4092,2688 -4093,2688 -4094,2688 -4095,2688 -4096,2688 -4097,2688 -4098,2688 -4099,2688 -4100,2688 -4101,2688 -4102,2688 -4103,2688 -4104,2688 -4105,2688 -4106,2688 -4107,2700 -4108,2688 -4109,2688 -4110,2688 -4111,2688 -4112,2675 -4113,2675 -4114,2688 -4115,2688 -4116,2688 -4117,2688 -4118,2688 -4119,2688 -4120,2700 -4121,2688 -4122,2688 -4123,2688 -4124,2688 -4125,2688 -4126,2688 -4127,2688 -4128,2688 -4129,2675 -4130,2688 -4131,2688 -4132,2688 -4133,2688 -4134,2688 -4135,2688 -4136,2688 -4137,2675 -4138,2688 -4139,2675 -4140,2688 -4141,2688 -4142,2688 -4143,2688 -4144,2675 -4145,2688 -4146,2688 -4147,2675 -4148,2688 -4149,2688 -4150,2688 -4151,2688 -4152,2688 -4153,2700 -4154,2675 -4155,2688 -4156,2675 -4157,2675 -4158,2688 -4159,2688 -4160,2688 -4161,2675 -4162,2688 -4163,2688 -4164,2688 -4165,2688 -4166,2688 -4167,2688 -4168,2688 -4169,2675 -4170,2688 -4171,2688 -4172,2688 -4173,2688 -4174,2688 -4175,2688 -4176,2688 -4177,2675 -4178,2688 -4179,2688 -4180,2688 -4181,2688 -4182,2675 -4183,2688 -4184,2688 -4185,2688 -4186,2688 -4187,2688 -4188,2688 -4189,2688 -4190,2688 -4191,2688 -4192,2688 -4193,2688 -4194,2675 -4195,2688 -4196,2688 -4197,2688 -4198,2688 -4199,2688 -4200,2688 -4201,2688 -4202,2675 -4203,2688 -4204,2688 -4205,2688 -4206,2675 -4207,2688 -4208,2688 -4209,2688 -4210,2688 -4211,2688 -4212,2688 -4213,2688 -4214,2688 -4215,2675 -4216,2675 -4217,2688 -4218,2675 -4219,2688 -4220,2688 -4221,2688 -4222,2688 -4223,2688 -4224,2688 -4225,2688 -4226,2688 -4227,2688 -4228,2688 -4229,2688 -4230,2688 -4231,2675 -4232,2688 -4233,2688 -4234,2675 -4235,2675 -4236,2688 -4237,2688 -4238,2688 -4239,2688 -4240,2675 -4241,2688 -4242,2688 -4243,2675 -4244,2688 -4245,2688 -4246,2688 -4247,2688 -4248,2688 -4249,2688 -4250,2700 -4251,2675 -4252,2688 -4253,2688 -4254,2688 -4255,2688 -4256,2688 -4257,2688 -4258,2688 -4259,2688 -4260,2688 -4261,2688 -4262,2688 -4263,2688 -4264,2688 -4265,2675 -4266,2688 -4267,2688 -4268,2688 -4269,2688 -4270,2688 -4271,2675 -4272,2688 -4273,2700 -4274,2688 -4275,2675 -4276,2688 -4277,2688 -4278,2688 -4279,2688 -4280,2675 -4281,2688 -4282,2688 -4283,2688 -4284,2688 -4285,2675 -4286,2688 -4287,2688 -4288,2675 -4289,2688 -4290,2675 -4291,2688 -4292,2688 -4293,2688 -4294,2688 -4295,2688 -4296,2688 -4297,2688 -4298,2688 -4299,2688 -4300,2688 -4301,2688 -4302,2688 -4303,2688 -4304,2688 -4305,2688 -4306,2688 -4307,2675 -4308,2675 -4309,2688 -4310,2688 -4311,2688 -4312,2675 -4313,2675 -4314,2688 -4315,2688 -4316,2688 -4317,2688 -4318,2688 -4319,2675 -4320,2688 -4321,2688 -4322,2688 -4323,2688 -4324,2675 -4325,2688 -4326,2688 -4327,2688 -4328,2688 -4329,2688 -4330,2675 -4331,2688 -4332,2688 -4333,2688 -4334,2688 -4335,2688 -4336,2688 -4337,2700 -4338,2688 -4339,2688 -4340,2688 -4341,2688 -4342,2688 -4343,2700 -4344,2688 -4345,2675 -4346,2688 -4347,2688 -4348,2675 -4349,2675 -4350,2688 -4351,2688 -4352,2688 -4353,2688 -4354,2688 -4355,2688 -4356,2688 -4357,2688 -4358,2688 -4359,2688 -4360,2688 -4361,2688 -4362,2688 -4363,2688 -4364,2688 -4365,2688 -4366,2688 -4367,2688 -4368,2688 -4369,2688 -4370,2688 -4371,2688 -4372,2688 -4373,2675 -4374,2675 -4375,2688 -4376,2688 -4377,2675 -4378,2688 -4379,2688 -4380,2688 -4381,2688 -4382,2688 -4383,2688 -4384,2688 -4385,2688 -4386,2675 -4387,2688 -4388,2688 -4389,2688 -4390,2688 -4391,2688 -4392,2688 -4393,2688 -4394,2688 -4395,2688 -4396,2688 -4397,2688 -4398,2700 -4399,2688 -4400,2688 -4401,2688 -4402,2688 -4403,2688 -4404,2688 -4405,2688 -4406,2688 -4407,2688 -4408,2675 -4409,2688 -4410,2688 -4411,2688 -4412,2688 -4413,2688 -4414,2688 -4415,2675 -4416,2688 -4417,2688 -4418,2688 -4419,2688 -4420,2688 -4421,2688 -4422,2688 -4423,2688 -4424,2688 -4425,2688 -4426,2688 -4427,2688 -4428,2688 -4429,2688 -4430,2688 -4431,2688 -4432,2688 -4433,2688 -4434,2688 -4435,2688 -4436,2688 -4437,2688 -4438,2688 -4439,2688 -4440,2688 -4441,2688 -4442,2688 -4443,2675 -4444,2688 -4445,2675 -4446,2675 -4447,2688 -4448,2688 -4449,2688 -4450,2688 -4451,2675 -4452,2688 -4453,2688 -4454,2675 -4455,2688 -4456,2688 -4457,2688 -4458,2688 -4459,2688 -4460,2688 -4461,2688 -4462,2688 -4463,2688 -4464,2688 -4465,2688 -4466,2688 -4467,2688 -4468,2688 -4469,2688 -4470,2688 -4471,2688 -4472,2688 -4473,2688 -4474,2688 -4475,2688 -4476,2675 -4477,2688 -4478,2688 -4479,2688 -4480,2688 -4481,2688 -4482,2688 -4483,2688 -4484,2688 -4485,2688 -4486,2688 -4487,2688 -4488,2688 -4489,2688 -4490,2688 -4491,2688 -4492,2675 -4493,2688 -4494,2688 -4495,2688 -4496,2688 -4497,2688 -4498,2688 -4499,2688 -4500,2688 -4501,2688 -4502,2688 -4503,2688 -4504,2688 -4505,2688 -4506,2688 -4507,2688 -4508,2688 -4509,2688 -4510,2688 -4511,2688 -4512,2688 -4513,2688 -4514,2688 -4515,2675 -4516,2688 -4517,2675 -4518,2688 -4519,2688 -4520,2688 -4521,2688 -4522,2688 -4523,2688 -4524,2688 -4525,2688 -4526,2688 -4527,2688 -4528,2688 -4529,2688 -4530,2688 -4531,2688 -4532,2688 -4533,2688 -4534,2688 -4535,2688 -4536,2688 -4537,2675 -4538,2675 -4539,2688 -4540,2688 -4541,2688 -4542,2688 -4543,2688 -4544,2688 -4545,2688 -4546,2688 -4547,2688 -4548,2688 -4549,2688 -4550,2688 -4551,2688 -4552,2688 -4553,2688 -4554,2675 -4555,2688 -4556,2688 -4557,2688 -4558,2688 -4559,2688 -4560,2688 -4561,2688 -4562,2688 -4563,2688 -4564,2688 -4565,2675 -4566,2688 -4567,2688 -4568,2688 -4569,2688 -4570,2688 -4571,2688 -4572,2688 -4573,2688 -4574,2688 -4575,2688 -4576,2688 -4577,2688 -4578,2700 -4579,2688 -4580,2688 -4581,2688 -4582,2688 -4583,2688 -4584,2688 -4585,2688 -4586,2688 -4587,2688 -4588,2688 -4589,2675 -4590,2675 -4591,2675 -4592,2688 -4593,2688 -4594,2688 -4595,2688 -4596,2688 -4597,2688 -4598,2688 -4599,2688 -4600,2688 -4601,2688 -4602,2688 -4603,2688 -4604,2688 -4605,2688 -4606,2700 -4607,2688 -4608,2688 -4609,2688 -4610,2688 -4611,2688 -4612,2688 -4613,2688 -4614,2688 -4615,2675 -4616,2688 -4617,2688 -4618,2688 -4619,2688 -4620,2688 -4621,2688 -4622,2688 -4623,2688 -4624,2688 -4625,2688 -4626,2688 -4627,2688 -4628,2688 -4629,2688 -4630,2688 -4631,2688 -4632,2688 -4633,2688 -4634,2688 -4635,2688 -4636,2688 -4637,2688 -4638,2688 -4639,2688 -4640,2688 -4641,2688 -4642,2688 -4643,2688 -4644,2688 -4645,2688 -4646,2688 -4647,2688 -4648,2688 -4649,2688 -4650,2688 -4651,2688 -4652,2688 -4653,2688 -4654,2688 -4655,2688 -4656,2688 -4657,2688 -4658,2688 -4659,2688 -4660,2675 -4661,2688 -4662,2688 -4663,2688 -4664,2688 -4665,2688 -4666,2675 -4667,2688 -4668,2688 -4669,2688 -4670,2688 -4671,2688 -4672,2688 -4673,2688 -4674,2688 -4675,2688 -4676,2688 -4677,2688 -4678,2688 -4679,2688 -4680,2688 -4681,2688 -4682,2688 -4683,2688 -4684,2688 -4685,2688 -4686,2688 -4687,2675 -4688,2688 -4689,2688 -4690,2688 -4691,2688 -4692,2688 -4693,2688 -4694,2700 -4695,2675 -4696,2688 -4697,2688 -4698,2688 -4699,2675 -4700,2688 -4701,2675 -4702,2688 -4703,2688 -4704,2688 -4705,2688 -4706,2675 -4707,2688 -4708,2688 -4709,2688 -4710,2688 -4711,2688 -4712,2675 -4713,2688 -4714,2688 -4715,2688 -4716,2688 -4717,2688 -4718,2688 -4719,2688 -4720,2688 -4721,2688 -4722,2688 -4723,2688 -4724,2688 -4725,2675 -4726,2688 -4727,2688 -4728,2675 -4729,2688 -4730,2688 -4731,2688 -4732,2688 -4733,2688 -4734,2688 -4735,2688 -4736,2688 -4737,2688 -4738,2688 -4739,2688 -4740,2688 -4741,2688 -4742,2688 -4743,2688 -4744,2688 -4745,2688 -4746,2688 -4747,2688 -4748,2688 -4749,2688 -4750,2688 -4751,2688 -4752,2688 -4753,2688 -4754,2688 -4755,2688 -4756,2688 -4757,2688 -4758,2688 -4759,2688 -4760,2688 -4761,2688 -4762,2688 -4763,2688 -4764,2688 -4765,2688 -4766,2688 -4767,2688 -4768,2688 -4769,2688 -4770,2688 -4771,2675 -4772,2688 -4773,2688 -4774,2688 -4775,2688 -4776,2688 -4777,2688 -4778,2688 -4779,2688 -4780,2688 -4781,2688 -4782,2688 -4783,2675 -4784,2688 -4785,2688 -4786,2688 -4787,2675 -4788,2688 -4789,2688 -4790,2688 -4791,2688 -4792,2688 -4793,2688 -4794,2688 -4795,2688 -4796,2688 -4797,2688 -4798,2688 -4799,2688 -4800,2688 -4801,2688 -4802,2688 -4803,2700 -4804,2688 -4805,2688 -4806,2688 -4807,2688 -4808,2688 -4809,2688 -4810,2688 -4811,2688 -4812,2688 -4813,2688 -4814,2688 -4815,2688 -4816,2688 -4817,2675 -4818,2688 -4819,2688 -4820,2688 -4821,2675 -4822,2688 -4823,2688 -4824,2688 -4825,2688 -4826,2688 -4827,2675 -4828,2688 -4829,2688 -4830,2688 -4831,2688 -4832,2688 -4833,2675 -4834,2688 -4835,2688 -4836,2688 -4837,2688 -4838,2688 -4839,2688 -4840,2688 -4841,2688 -4842,2675 -4843,2688 -4844,2688 -4845,2688 -4846,2688 -4847,2688 -4848,2688 -4849,2675 -4850,2688 -4851,2675 -4852,2688 -4853,2688 -4854,2688 -4855,2688 -4856,2688 -4857,2688 -4858,2688 -4859,2688 -4860,2688 -4861,2688 -4862,2688 -4863,2688 -4864,2688 -4865,2688 -4866,2688 -4867,2675 -4868,2688 -4869,2688 -4870,2688 -4871,2675 -4872,2688 -4873,2675 -4874,2675 -4875,2688 -4876,2688 -4877,2688 -4878,2688 -4879,2688 -4880,2688 -4881,2688 -4882,2688 -4883,2688 -4884,2688 -4885,2688 -4886,2688 -4887,2688 -4888,2688 -4889,2688 -4890,2688 -4891,2688 -4892,2688 -4893,2688 -4894,2688 -4895,2688 -4896,2688 -4897,2688 -4898,2688 -4899,2688 -4900,2688 -4901,2688 -4902,2675 -4903,2688 -4904,2688 -4905,2688 -4906,2688 -4907,2688 -4908,2688 -4909,2688 -4910,2688 -4911,2688 -4912,2688 -4913,2688 -4914,2688 -4915,2688 -4916,2688 -4917,2688 -4918,2688 -4919,2688 -4920,2688 -4921,2688 -4922,2688 -4923,2688 -4924,2688 -4925,2688 -4926,2688 -4927,2688 -4928,2688 -4929,2688 -4930,2688 -4931,2688 -4932,2688 -4933,2688 -4934,2688 -4935,2675 -4936,2675 -4937,2688 -4938,2688 -4939,2688 -4940,2688 -4941,2688 -4942,2688 -4943,2688 -4944,2675 -4945,2675 -4946,2688 -4947,2675 -4948,2688 -4949,2675 -4950,2688 -4951,2688 -4952,2688 -4953,2688 -4954,2688 -4955,2688 -4956,2675 -4957,2688 -4958,2688 -4959,2688 -4960,2675 -4961,2688 -4962,2688 -4963,2688 -4964,2688 -4965,2688 -4966,2675 -4967,2688 -4968,2688 -4969,2675 -4970,2688 -4971,2688 -4972,2688 -4973,2688 -4974,2688 -4975,2688 -4976,2675 -4977,2688 -4978,2688 -4979,2688 -4980,2688 -4981,2688 -4982,2688 -4983,2688 -4984,2675 -4985,2688 -4986,2688 -4987,2688 -4988,2688 -4989,2675 -4990,2688 -4991,2675 -4992,2688 -4993,2688 -4994,2675 -4995,2688 -4996,2688 -4997,2688 -4998,2688 -4999,2688 -5000,2675 -5001,2688 -5002,2688 -5003,2688 -5004,2688 -5005,2675 -5006,2700 -5007,2688 -5008,2688 -5009,2688 -5010,2688 -5011,2688 -5012,2688 -5013,2688 -5014,2688 -5015,2675 -5016,2688 -5017,2688 -5018,2688 -5019,2688 -5020,2688 -5021,2675 -5022,2688 -5023,2688 -5024,2688 -5025,2688 -5026,2688 -5027,2675 -5028,2688 -5029,2688 -5030,2688 -5031,2688 -5032,2688 -5033,2688 -5034,2688 -5035,2688 -5036,2688 -5037,2688 -5038,2688 -5039,2688 -5040,2688 -5041,2688 -5042,2688 -5043,2688 -5044,2688 -5045,2688 -5046,2688 -5047,2688 -5048,2688 -5049,2688 -5050,2688 -5051,2688 -5052,2688 -5053,2688 -5054,2688 -5055,2688 -5056,2688 -5057,2688 -5058,2688 -5059,2688 -5060,2675 -5061,2688 -5062,2688 -5063,2688 -5064,2688 -5065,2688 -5066,2688 -5067,2688 -5068,2675 -5069,2675 -5070,2688 -5071,2688 -5072,2688 -5073,2688 -5074,2688 -5075,2688 -5076,2688 -5077,2688 -5078,2688 -5079,2675 -5080,2675 -5081,2688 -5082,2688 -5083,2688 -5084,2688 -5085,2688 -5086,2688 -5087,2688 -5088,2675 -5089,2688 -5090,2688 -5091,2688 -5092,2688 -5093,2688 -5094,2688 -5095,2688 -5096,2688 -5097,2675 -5098,2688 -5099,2688 -5100,2688 -5101,2688 -5102,2688 -5103,2688 -5104,2688 -5105,2688 -5106,2688 -5107,2688 -5108,2688 -5109,2675 -5110,2688 -5111,2688 -5112,2688 -5113,2688 -5114,2688 -5115,2688 -5116,2675 -5117,2688 -5118,2688 -5119,2688 -5120,2688 -5121,2688 -5122,2688 -5123,2688 -5124,2688 -5125,2688 -5126,2675 -5127,2700 -5128,2688 -5129,2688 -5130,2688 -5131,2688 -5132,2688 -5133,2688 -5134,2688 -5135,2688 -5136,2688 -5137,2688 -5138,2688 -5139,2688 -5140,2688 -5141,2688 -5142,2688 -5143,2688 -5144,2688 -5145,2688 -5146,2675 -5147,2688 -5148,2688 -5149,2688 -5150,2688 -5151,2688 -5152,2675 -5153,2688 -5154,2688 -5155,2688 -5156,2688 -5157,2688 -5158,2688 -5159,2675 -5160,2688 -5161,2688 -5162,2688 -5163,2688 -5164,2688 -5165,2675 -5166,2688 -5167,2675 -5168,2688 -5169,2675 -5170,2688 -5171,2688 -5172,2688 -5173,2688 -5174,2688 -5175,2675 -5176,2675 -5177,2675 -5178,2688 -5179,2675 -5180,2688 -5181,2688 -5182,2675 -5183,2688 -5184,2688 -5185,2688 -5186,2688 -5187,2688 -5188,2688 -5189,2688 -5190,2688 -5191,2688 -5192,2688 -5193,2688 -5194,2688 -5195,2675 -5196,2688 -5197,2688 -5198,2688 -5199,2688 -5200,2675 -5201,2675 -5202,2688 -5203,2688 -5204,2688 -5205,2688 -5206,2688 -5207,2688 -5208,2675 -5209,2688 -5210,2688 -5211,2688 -5212,2688 -5213,2688 -5214,2688 -5215,2688 -5216,2688 -5217,2688 -5218,2688 -5219,2688 -5220,2688 -5221,2675 -5222,2688 -5223,2688 -5224,2688 -5225,2688 -5226,2688 -5227,2688 -5228,2688 -5229,2688 -5230,2688 -5231,2675 -5232,2688 -5233,2688 -5234,2688 -5235,2688 -5236,2688 -5237,2688 -5238,2688 -5239,2688 -5240,2675 -5241,2688 -5242,2688 -5243,2688 -5244,2688 -5245,2688 -5246,2688 -5247,2688 -5248,2688 -5249,2688 -5250,2688 -5251,2688 -5252,2688 -5253,2688 -5254,2688 -5255,2688 -5256,2688 -5257,2688 -5258,2688 -5259,2688 -5260,2675 -5261,2688 -5262,2688 -5263,2688 -5264,2688 -5265,2688 -5266,2675 -5267,2688 -5268,2688 -5269,2688 -5270,2688 -5271,2688 -5272,2675 -5273,2688 -5274,2688 -5275,2688 -5276,2688 -5277,2688 -5278,2688 -5279,2688 -5280,2688 -5281,2688 -5282,2688 -5283,2688 -5284,2688 -5285,2688 -5286,2675 -5287,2675 -5288,2688 -5289,2688 -5290,2688 -5291,2688 -5292,2688 -5293,2688 -5294,2688 -5295,2688 -5296,2688 -5297,2688 -5298,2688 -5299,2688 -5300,2688 -5301,2688 -5302,2688 -5303,2688 -5304,2688 -5305,2675 -5306,2688 -5307,2688 -5308,2688 -5309,2688 -5310,2688 -5311,2688 -5312,2688 -5313,2688 -5314,2688 -5315,2688 -5316,2688 -5317,2688 -5318,2688 -5319,2688 -5320,2688 -5321,2688 -5322,2688 -5323,2688 -5324,2688 -5325,2688 -5326,2688 -5327,2688 -5328,2688 -5329,2688 -5330,2675 -5331,2688 -5332,2688 -5333,2688 -5334,2688 -5335,2688 -5336,2688 -5337,2688 -5338,2688 -5339,2688 -5340,2688 -5341,2688 -5342,2688 -5343,2688 -5344,2688 -5345,2688 -5346,2688 -5347,2688 -5348,2688 -5349,2688 -5350,2675 -5351,2688 -5352,2675 -5353,2688 -5354,2688 -5355,2688 -5356,2688 -5357,2675 -5358,2688 -5359,2688 -5360,2688 -5361,2688 -5362,2688 -5363,2675 -5364,2688 -5365,2688 -5366,2688 -5367,2675 -5368,2688 -5369,2688 -5370,2688 -5371,2688 -5372,2688 -5373,2688 -5374,2688 -5375,2688 -5376,2688 -5377,2688 -5378,2688 -5379,2688 -5380,2688 -5381,2688 -5382,2688 -5383,2675 -5384,2688 -5385,2688 -5386,2688 -5387,2688 -5388,2688 -5389,2688 -5390,2688 -5391,2688 -5392,2688 -5393,2688 -5394,2688 -5395,2688 -5396,2688 -5397,2688 -5398,2688 -5399,2675 diff --git a/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/Dryer_Encoder.cs b/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/Dryer_Encoder.cs new file mode 100644 index 000000000..d2eb00cb6 --- /dev/null +++ b/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/Dryer_Encoder.cs @@ -0,0 +1,55 @@ +using System; +using System.Text; +using System.Linq; +using System.Drawing; +using System.Diagnostics; +using System.Windows.Forms; +using System.Threading; +using System.Threading.Tasks; +using System.Collections.Generic; +using Tango.PMR.Stubs; +using Tango.Stubs; + +include "..\..\Defines\Tango_Defines_Basic.cs" +include "Tango_Defines_SSI.cs" +//include "C:\To_Backup\Mulberry\Mulberry_current\Customers\Twine\Tango\LAB_Tests\Main_PCB\ATP_Test\Scripts\Defines\Tango_Defines_Basic.cs" +//include "C:\To_Backup\Mulberry\Mulberry_current\Customers\Twine\Tango\LAB_Tests\Main_PCB\ATP_Test\Scripts\Defines\Tango_Defines_SSI.cs" + + +public void OnExecute(StubManager stubManager) +{ + int k = 0; + Fpga_Read_Reg(FPGA1, F1_Prescaler1_reg1, 0); + Fpga_Read_Reg(FPGA1, F1_Prescaler1_reg2, 0); + + //Set output clock frequency to about 200 kHz + Fpga_Write_Reg(FPGA1, F1_Prescaler1_reg1, 0x0024, 0); + Fpga_Write_Reg(FPGA1, F1_Prescaler1_reg2, 0x0024, 0); + + Fpga_Read_Reg(FPGA1, F1_Prescaler1_reg1, 0); + Fpga_Read_Reg(FPGA1, F1_Prescaler1_reg2, 0); + + for (int i = 0; i < 1000; i++) + { + + stubManager.Write(ReadEncoder_Dryer() +"\n"); + + Thread.Sleep(100); + } + + +} + +Int32 ReadEncoder_Dryer() +{ + Int32 temp; + Int32 temp1; + stubManager.Run("StubFpgaWriteRegRequest" ,0x6000019e, 0x0000); //triggers a TX transmission + + var response = stubManager.Run("StubFpgaReadRegRequest" ,0x60000190); + var response1 = stubManager.Run("StubFpgaReadRegRequest" ,0x60000192); + + temp = Convert.ToInt32 (((((response1.Value <<16) + response.Value)>>10 ) & 0x3fff)); + + return temp; +} diff --git a/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/Dryer_SSR.cs b/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/Dryer_SSR.cs index b059a170f..b092d6a20 100644 --- a/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/Dryer_SSR.cs +++ b/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/Dryer_SSR.cs @@ -26,17 +26,16 @@ float temp1=4096*95*5; stubManager.WriteHex(response.TemperatureCMultBy100,4); SetBit (FPGA2, F2_CTRL, 10, 1); stubManager.Write("\tTesting SSR no. 1\t"); - Thread.Sleep(1000); - - + Thread.Sleep(10000); + var response1 = stubManager.Run("StubIntADCReadRequest" ,16); temp=Convert.ToUInt32 (response1.SamplingInBits); - temp=temp*800*3*100; + + temp=temp*2400*60*100; temp=temp/(4096*95*50); - stubManager.Write("Current = "+ temp + "A\n"); - temp=temp*60; - stubManager.Write("Voltage = "+ temp + " Volt\n"); + stubManager.Write("Voltage = "+ temp + "Volt/n"); + stubManager.Write("Current = "+ temp*100/6 + "mA/n"); SetBit (FPGA2, F2_CTRL, 10, 0); @@ -50,17 +49,16 @@ var response1 = stubManager.Run("StubIntADCReadRequest" stubManager.WriteHex(response.TemperatureCMultBy100,4); SetBit (FPGA2, F2_CTRL, 9, 1); stubManager.Write("\tTesting SSR no. 2\t"); - Thread.Sleep(1000); + Thread.Sleep(10000); -response1 = stubManager.Run("StubIntADCReadRequest" ,17); + response1 = stubManager.Run("StubIntADCReadRequest" ,17); temp=Convert.ToUInt32 (response1.SamplingInBits); - stubManager.WriteLine(temp); - temp=temp*800*3*100; - temp=temp/(4096*95*120); - stubManager.Write("Current = "+ temp + "A\n"); - temp=temp*120; - stubManager.Write("Voltage = "+ temp + " Volt\n"); + + temp=temp*2400*1000; + temp=temp/(4096*95*100); + stubManager.Write("Current = "+ temp*100/6 + "mA/n"); + SetBit (FPGA2, F2_CTRL, 9, 0); diff --git a/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/Dryer_Tset.CSV b/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/Dryer_Tset.CSV index daadff892..de439d914 100644 --- a/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/Dryer_Tset.CSV +++ b/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/Dryer_Tset.CSV @@ -1,14 +1,99 @@ -24/06/2020 9:51:30 +03/09/2020 22:34:12 Heating to 190 -24/06/2020 9:51:30 - 99 - 99 - 99 - 99 - 99 - 99 - 99 - 98 +03/09/2020 22:34:12 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 60 + 60 + 60 + 60 + 61 + 61 + 61 + 62 + 62 + 63 + 63 + 64 + 64 + 65 + 65 + 66 + 66 + 67 + 67 + 68 + 68 + 69 + 69 + 70 + 71 + 71 + 72 + 72 + 73 + 73 + 74 + 74 + 75 + 75 + 76 + 76 + 77 + 78 + 78 + 79 + 80 + 80 + 81 + 81 + 82 + 82 + 83 + 83 + 84 + 84 + 85 + 85 + 86 + 86 + 87 + 87 + 88 + 88 + 89 + 89 + 89 + 90 + 90 + 91 + 91 + 92 + 92 + 93 + 93 + 93 + 94 + 94 + 95 + 95 + 96 + 96 + 97 + 97 98 98 98 @@ -16,88 +101,128 @@ Heating to 190 99 99 100 - 100 - 100 + 101 + 101 101 102 + 102 + 102 + 103 103 103 104 104 105 105 + 105 106 106 + 106 + 107 107 107 108 108 + 108 + 109 109 109 110 110 + 110 + 111 111 111 112 112 112 + 112 + 113 113 113 114 114 + 114 + 115 + 115 115 115 - 116 116 116 117 117 + 117 + 117 118 118 + 118 + 119 119 119 119 120 120 + 120 + 120 121 121 121 122 122 + 122 + 122 123 123 123 124 124 + 124 + 124 + 125 + 125 125 125 125 126 126 126 + 126 + 127 127 127 127 128 128 + 128 + 128 + 129 + 129 129 129 129 130 130 130 + 130 + 131 131 131 131 132 132 132 + 132 + 132 133 133 133 + 133 + 134 134 134 134 + 134 + 135 135 135 135 @@ -108,9 +233,15 @@ Heating to 190 137 137 137 + 137 + 137 138 138 138 + 138 + 138 + 139 + 139 139 139 139 @@ -118,12 +249,18 @@ Heating to 190 140 140 140 + 140 + 141 141 141 141 142 142 142 + 142 + 142 + 143 + 143 143 143 143 @@ -131,10 +268,14 @@ Heating to 190 144 144 144 + 144 + 145 145 145 145 145 + 145 + 146 146 146 146 @@ -142,14 +283,20 @@ Heating to 190 147 147 147 + 147 + 147 148 148 148 148 + 148 + 149 149 149 149 149 + 149 + 150 150 150 150 @@ -158,10 +305,14 @@ Heating to 190 151 151 151 + 151 + 152 152 152 152 152 + 152 + 153 153 153 153 @@ -171,6 +322,9 @@ Heating to 190 154 154 154 + 154 + 155 + 155 155 155 155 @@ -184,6 +338,9 @@ Heating to 190 157 157 157 + 157 + 157 + 158 158 158 158 @@ -193,11 +350,15 @@ Heating to 190 159 159 159 + 159 + 159 160 160 160 160 160 + 160 + 161 161 161 161 @@ -208,6 +369,8 @@ Heating to 190 162 162 162 + 162 + 163 163 163 163 @@ -218,6 +381,8 @@ Heating to 190 164 164 164 + 164 + 165 165 165 165 @@ -228,10 +393,16 @@ Heating to 190 166 166 166 + 166 + 166 167 167 167 167 + 167 + 167 + 167 + 168 168 168 168 @@ -248,12 +419,17 @@ Heating to 190 170 170 170 + 170 + 170 171 171 171 171 171 171 + 171 + 172 + 172 172 172 172 @@ -277,11 +453,18 @@ Heating to 190 175 175 175 + 175 + 176 + 176 176 176 176 176 176 + 176 + 177 + 177 + 177 177 177 177 @@ -316,7 +499,6 @@ Heating to 190 180 180 180 - 180 181 181 181 @@ -345,6 +527,8 @@ Heating to 190 184 184 184 + 184 + 185 185 185 185 @@ -374,10 +558,9 @@ Heating to 190 188 188 189 -24/06/2020 9:57:48 +03/09/2020 22:43:52 cooling down -24/06/2020 9:59:48 - 190 +03/09/2020 22:45:53 190 190 190 @@ -402,7 +585,6 @@ cooling down 188 188 188 - 188 187 187 187 @@ -416,14 +598,13 @@ cooling down 185 184 184 - 184 183 183 183 182 182 182 - 182 + 181 181 181 180 @@ -434,14 +615,11 @@ cooling down 179 178 178 - 178 177 177 177 176 176 - 176 - 176 175 175 175 @@ -458,22 +636,19 @@ cooling down 171 171 171 - 171 170 170 170 169 169 169 - 169 - 168 168 168 168 167 167 167 - 166 + 167 166 166 166 @@ -484,8 +659,6 @@ cooling down 164 164 164 - 164 - 163 163 163 163 @@ -498,7 +671,7 @@ cooling down 161 161 161 - 161 + 160 160 160 160 @@ -507,9 +680,6 @@ cooling down 159 159 159 - 159 - 158 - 158 158 158 158 @@ -524,7 +694,6 @@ cooling down 156 156 156 - 156 155 155 155 @@ -535,15 +704,11 @@ cooling down 154 154 154 - 154 - 153 153 153 153 153 153 - 153 - 152 152 152 152 @@ -556,8 +721,6 @@ cooling down 151 151 151 - 151 - 150 150 150 150 @@ -578,8 +741,6 @@ cooling down 148 148 148 - 148 - 148 147 147 147 @@ -587,10 +748,6 @@ cooling down 147 147 147 - 147 - 147 - 146 - 146 146 146 146 @@ -606,10 +763,6 @@ cooling down 145 145 145 - 145 - 144 - 144 - 144 144 144 144 @@ -626,8 +779,6 @@ cooling down 143 143 143 - 143 - 142 142 142 142 @@ -638,9 +789,6 @@ cooling down 142 142 142 - 142 - 141 - 141 141 141 141 @@ -656,3 +804,24324 @@ cooling down 140 140 140 + 140 + 140 + 140 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 59 +04/09/2020 0:00:34 +Heating to 190 +04/09/2020 0:00:34 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 61 + 61 + 61 + 61 + 62 + 62 + 62 + 63 + 63 + 64 + 64 + 65 + 65 + 65 + 66 + 66 + 67 + 67 + 68 + 69 + 69 + 70 + 70 + 71 + 71 + 72 + 72 + 73 + 73 + 74 + 75 + 75 + 76 + 76 + 77 + 77 + 78 + 78 + 79 + 79 + 80 + 80 + 81 + 81 + 82 + 82 + 83 + 83 + 84 + 84 + 85 + 85 + 86 + 87 + 87 + 88 + 88 + 89 + 89 + 90 + 90 + 91 + 91 + 92 + 92 + 92 + 93 + 93 + 94 + 94 + 95 + 95 + 96 + 96 + 97 + 97 + 97 + 98 + 98 + 99 + 99 + 99 + 100 + 100 + 101 + 101 + 101 + 102 + 102 + 103 + 103 + 103 + 104 + 104 + 105 + 105 + 105 + 106 + 106 + 106 + 107 + 107 + 107 + 108 + 108 + 108 + 109 + 109 + 110 + 110 + 110 + 111 + 111 + 111 + 112 + 112 + 112 + 113 + 113 + 113 + 114 + 114 + 114 + 114 + 115 + 115 + 116 + 116 + 116 + 116 + 117 + 117 + 117 + 118 + 118 + 118 + 118 + 119 + 119 + 119 + 120 + 120 + 120 + 120 + 121 + 121 + 121 + 121 + 122 + 122 + 122 + 123 + 123 + 123 + 123 + 124 + 124 + 124 + 124 + 125 + 125 + 125 + 125 + 126 + 126 + 126 + 126 + 127 + 127 + 127 + 128 + 128 + 128 + 128 + 129 + 129 + 129 + 129 + 130 + 130 + 130 + 130 + 130 + 131 + 131 + 131 + 131 + 132 + 132 + 132 + 132 + 133 + 133 + 133 + 133 + 134 + 134 + 134 + 134 + 134 + 135 + 135 + 135 + 135 + 136 + 136 + 136 + 136 + 137 + 137 + 137 + 137 + 137 + 138 + 138 + 138 + 138 + 138 + 139 + 139 + 139 + 139 + 140 + 140 + 140 + 140 + 140 + 141 + 141 + 141 + 141 + 142 + 142 + 142 + 142 + 142 + 143 + 143 + 143 + 143 + 143 + 144 + 144 + 144 + 144 + 144 + 145 + 145 + 145 + 145 + 146 + 146 + 146 + 146 + 146 + 147 + 147 + 147 + 147 + 147 + 147 + 148 + 148 + 148 + 148 + 148 + 149 + 149 + 149 + 149 + 150 + 150 + 150 + 150 + 150 + 150 + 151 + 151 + 151 + 151 + 151 + 151 + 152 + 152 + 152 + 152 + 152 + 152 + 153 + 153 + 153 + 153 + 153 + 154 + 154 + 154 + 154 + 154 + 154 + 155 + 155 + 155 + 155 + 155 + 155 + 156 + 156 + 156 + 156 + 156 + 156 + 157 + 157 + 157 + 157 + 157 + 158 + 158 + 158 + 158 + 158 + 158 + 159 + 159 + 159 + 159 + 159 + 159 + 160 + 160 + 160 + 160 + 160 + 160 + 161 + 161 + 161 + 161 + 161 + 161 + 162 + 162 + 162 + 162 + 162 + 162 + 163 + 163 + 163 + 163 + 163 + 164 + 164 + 164 + 164 + 164 + 164 + 165 + 165 + 165 + 165 + 165 + 165 + 165 + 166 + 166 + 166 + 166 + 166 + 166 + 167 + 167 + 167 + 167 + 167 + 167 + 168 + 168 + 168 + 168 + 168 + 168 + 169 + 169 + 169 + 169 + 169 + 169 + 170 + 170 + 170 + 170 + 170 + 170 + 170 + 171 + 171 + 171 + 171 + 171 + 171 + 172 + 172 + 172 + 172 + 172 + 172 + 172 + 173 + 173 + 173 + 173 + 173 + 173 + 174 + 174 + 174 + 174 + 174 + 174 + 174 + 175 + 175 + 175 + 175 + 175 + 175 + 175 + 176 + 176 + 176 + 176 + 176 + 176 + 176 + 176 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 179 + 179 + 179 + 179 + 179 + 179 + 179 + 179 + 179 + 180 + 180 + 180 + 180 + 180 + 180 + 180 + 180 + 181 + 181 + 181 + 181 + 181 + 181 + 181 + 181 + 182 + 182 + 182 + 182 + 182 + 182 + 183 + 183 + 183 + 183 + 183 + 183 + 183 + 184 + 184 + 184 + 184 + 184 + 184 + 184 + 185 + 185 + 185 + 185 + 185 + 185 + 185 + 186 + 186 + 186 + 186 + 186 + 186 + 186 + 187 + 187 + 187 + 187 + 187 + 187 + 187 + 188 + 188 + 188 + 188 + 188 + 188 + 188 + 188 + 189 +04/09/2020 0:10:05 +cooling down +04/09/2020 0:12:05 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 189 + 189 + 189 + 189 + 189 + 189 + 189 + 188 + 188 + 188 + 188 + 187 + 187 + 187 + 187 + 186 + 186 + 186 + 185 + 185 + 185 + 184 + 184 + 184 + 183 + 183 + 183 + 182 + 182 + 181 + 181 + 181 + 180 + 180 + 180 + 179 + 179 + 179 + 178 + 178 + 178 + 177 + 177 + 177 + 176 + 176 + 175 + 175 + 175 + 174 + 174 + 174 + 173 + 173 + 173 + 172 + 172 + 172 + 171 + 171 + 171 + 170 + 170 + 169 + 169 + 169 + 169 + 168 + 168 + 168 + 167 + 167 + 167 + 167 + 166 + 166 + 166 + 165 + 165 + 165 + 165 + 164 + 164 + 164 + 163 + 163 + 163 + 163 + 162 + 162 + 162 + 162 + 161 + 161 + 161 + 161 + 160 + 160 + 160 + 160 + 160 + 159 + 159 + 159 + 158 + 158 + 158 + 158 + 158 + 157 + 157 + 157 + 157 + 157 + 156 + 156 + 156 + 156 + 156 + 155 + 155 + 155 + 155 + 154 + 154 + 154 + 154 + 154 + 154 + 153 + 153 + 153 + 153 + 153 + 152 + 152 + 152 + 152 + 152 + 151 + 151 + 151 + 151 + 151 + 151 + 150 + 150 + 150 + 150 + 150 + 150 + 150 + 149 + 149 + 149 + 149 + 149 + 149 + 148 + 148 + 148 + 148 + 148 + 148 + 148 + 147 + 147 + 147 + 147 + 147 + 147 + 146 + 146 + 146 + 146 + 146 + 146 + 146 + 146 + 145 + 145 + 145 + 145 + 145 + 145 + 145 + 145 + 144 + 144 + 144 + 144 + 144 + 144 + 144 + 143 + 143 + 143 + 143 + 143 + 143 + 143 + 143 + 143 + 142 + 142 + 142 + 142 + 142 + 142 + 142 + 142 + 141 + 141 + 141 + 141 + 141 + 141 + 141 + 141 + 141 + 141 + 140 + 140 + 140 + 140 + 140 + 140 + 140 + 140 + 140 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 59 +04/09/2020 1:27:04 +Heating to 190 +04/09/2020 1:27:04 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 61 + 61 + 61 + 62 + 62 + 63 + 63 + 63 + 64 + 64 + 65 + 65 + 66 + 66 + 67 + 67 + 68 + 68 + 69 + 69 + 70 + 70 + 71 + 71 + 72 + 72 + 73 + 74 + 74 + 75 + 75 + 76 + 76 + 77 + 77 + 78 + 78 + 79 + 80 + 80 + 81 + 81 + 82 + 82 + 83 + 83 + 84 + 84 + 85 + 85 + 86 + 86 + 87 + 87 + 88 + 88 + 89 + 89 + 89 + 90 + 90 + 91 + 91 + 92 + 92 + 93 + 93 + 94 + 94 + 94 + 95 + 95 + 96 + 96 + 96 + 97 + 97 + 98 + 98 + 98 + 99 + 99 + 100 + 100 + 100 + 101 + 101 + 102 + 102 + 102 + 103 + 103 + 104 + 104 + 104 + 105 + 105 + 105 + 106 + 106 + 106 + 107 + 107 + 107 + 108 + 108 + 108 + 109 + 109 + 109 + 110 + 110 + 110 + 111 + 111 + 111 + 112 + 112 + 112 + 113 + 113 + 113 + 114 + 114 + 114 + 114 + 115 + 115 + 115 + 116 + 116 + 117 + 117 + 117 + 117 + 118 + 118 + 118 + 119 + 119 + 119 + 119 + 120 + 120 + 120 + 121 + 121 + 121 + 121 + 122 + 122 + 122 + 122 + 123 + 123 + 123 + 124 + 124 + 124 + 124 + 125 + 125 + 125 + 125 + 126 + 126 + 126 + 126 + 127 + 127 + 127 + 127 + 128 + 128 + 128 + 128 + 129 + 129 + 129 + 129 + 130 + 130 + 130 + 130 + 131 + 131 + 131 + 131 + 131 + 132 + 132 + 132 + 132 + 133 + 133 + 133 + 133 + 134 + 134 + 134 + 134 + 135 + 135 + 135 + 135 + 135 + 136 + 136 + 136 + 136 + 137 + 137 + 137 + 137 + 137 + 138 + 138 + 138 + 138 + 138 + 139 + 139 + 139 + 139 + 140 + 140 + 140 + 140 + 140 + 141 + 141 + 141 + 141 + 141 + 142 + 142 + 142 + 142 + 142 + 143 + 143 + 143 + 143 + 143 + 144 + 144 + 144 + 144 + 144 + 145 + 145 + 145 + 145 + 145 + 146 + 146 + 146 + 146 + 147 + 147 + 147 + 147 + 147 + 148 + 148 + 148 + 148 + 148 + 148 + 149 + 149 + 149 + 149 + 149 + 150 + 150 + 150 + 150 + 150 + 150 + 151 + 151 + 151 + 151 + 151 + 152 + 152 + 152 + 152 + 152 + 153 + 153 + 153 + 153 + 153 + 153 + 154 + 154 + 154 + 154 + 154 + 155 + 155 + 155 + 155 + 155 + 155 + 156 + 156 + 156 + 156 + 156 + 156 + 157 + 157 + 157 + 157 + 157 + 157 + 158 + 158 + 158 + 158 + 158 + 158 + 159 + 159 + 159 + 159 + 159 + 159 + 160 + 160 + 160 + 160 + 160 + 160 + 161 + 161 + 161 + 161 + 161 + 161 + 162 + 162 + 162 + 162 + 162 + 162 + 163 + 163 + 163 + 163 + 163 + 163 + 163 + 164 + 164 + 164 + 164 + 164 + 164 + 165 + 165 + 165 + 165 + 165 + 165 + 166 + 166 + 166 + 166 + 166 + 166 + 166 + 167 + 167 + 167 + 167 + 167 + 168 + 168 + 168 + 168 + 168 + 168 + 168 + 169 + 169 + 169 + 169 + 169 + 169 + 169 + 170 + 170 + 170 + 170 + 170 + 170 + 171 + 171 + 171 + 171 + 171 + 171 + 171 + 172 + 172 + 172 + 172 + 172 + 172 + 172 + 173 + 173 + 173 + 173 + 173 + 173 + 173 + 174 + 174 + 174 + 174 + 174 + 174 + 174 + 175 + 175 + 175 + 175 + 175 + 175 + 175 + 176 + 176 + 176 + 176 + 176 + 176 + 176 + 176 + 176 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 179 + 179 + 179 + 179 + 179 + 179 + 179 + 179 + 179 + 179 + 180 + 180 + 180 + 180 + 180 + 180 + 180 + 180 + 181 + 181 + 181 + 181 + 181 + 181 + 181 + 181 + 182 + 182 + 182 + 182 + 182 + 182 + 182 + 183 + 183 + 183 + 183 + 183 + 183 + 183 + 184 + 184 + 184 + 184 + 184 + 184 + 184 + 184 + 185 + 185 + 185 + 185 + 185 + 185 + 185 + 186 + 186 + 186 + 186 + 186 + 186 + 186 + 187 + 187 + 187 + 187 + 187 + 187 + 187 + 188 + 188 + 188 + 188 + 188 + 188 + 188 + 188 + 189 +04/09/2020 1:36:30 +cooling down +04/09/2020 1:38:30 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 189 + 189 + 189 + 189 + 189 + 189 + 189 + 188 + 188 + 188 + 188 + 188 + 187 + 187 + 187 + 187 + 186 + 186 + 186 + 185 + 185 + 185 + 184 + 184 + 184 + 183 + 183 + 183 + 182 + 182 + 182 + 181 + 181 + 181 + 180 + 180 + 180 + 179 + 179 + 179 + 178 + 178 + 178 + 177 + 177 + 177 + 176 + 176 + 176 + 175 + 175 + 175 + 174 + 174 + 174 + 173 + 173 + 173 + 172 + 172 + 172 + 171 + 171 + 171 + 170 + 170 + 169 + 169 + 169 + 169 + 168 + 168 + 168 + 167 + 167 + 167 + 167 + 166 + 166 + 166 + 165 + 165 + 165 + 165 + 164 + 164 + 164 + 164 + 163 + 163 + 163 + 163 + 162 + 162 + 162 + 162 + 161 + 161 + 161 + 161 + 160 + 160 + 160 + 160 + 160 + 159 + 159 + 159 + 159 + 158 + 158 + 158 + 158 + 158 + 157 + 157 + 157 + 157 + 157 + 156 + 156 + 156 + 156 + 156 + 155 + 155 + 155 + 155 + 155 + 154 + 154 + 154 + 154 + 154 + 153 + 153 + 153 + 153 + 153 + 153 + 152 + 152 + 152 + 152 + 152 + 151 + 151 + 151 + 151 + 151 + 151 + 150 + 150 + 150 + 150 + 150 + 150 + 149 + 149 + 149 + 149 + 149 + 149 + 149 + 148 + 148 + 148 + 148 + 148 + 148 + 148 + 147 + 147 + 147 + 147 + 147 + 147 + 147 + 146 + 146 + 146 + 146 + 146 + 146 + 146 + 146 + 145 + 145 + 145 + 145 + 145 + 145 + 145 + 145 + 144 + 144 + 144 + 144 + 144 + 144 + 144 + 144 + 144 + 143 + 143 + 143 + 143 + 143 + 143 + 143 + 143 + 142 + 142 + 142 + 142 + 142 + 142 + 142 + 142 + 142 + 142 + 141 + 141 + 141 + 141 + 141 + 141 + 141 + 141 + 140 + 140 + 140 + 140 + 140 + 140 + 140 + 140 + 140 + 140 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 59 +04/09/2020 2:53:13 +Heating to 190 +04/09/2020 2:53:13 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 61 + 61 + 61 + 61 + 62 + 62 + 63 + 63 + 63 + 64 + 64 + 65 + 65 + 66 + 66 + 67 + 67 + 68 + 68 + 69 + 69 + 70 + 70 + 71 + 71 + 72 + 72 + 73 + 73 + 74 + 75 + 75 + 76 + 76 + 77 + 78 + 78 + 79 + 79 + 80 + 80 + 81 + 81 + 82 + 82 + 83 + 83 + 84 + 84 + 85 + 85 + 86 + 86 + 87 + 87 + 88 + 88 + 89 + 89 + 90 + 90 + 90 + 91 + 91 + 92 + 92 + 93 + 93 + 93 + 94 + 94 + 95 + 95 + 96 + 96 + 96 + 97 + 97 + 98 + 98 + 98 + 99 + 99 + 99 + 100 + 100 + 101 + 101 + 101 + 102 + 102 + 102 + 103 + 103 + 103 + 104 + 104 + 105 + 105 + 105 + 106 + 106 + 106 + 107 + 107 + 107 + 108 + 108 + 108 + 109 + 109 + 109 + 109 + 110 + 110 + 110 + 111 + 111 + 111 + 112 + 112 + 112 + 113 + 113 + 113 + 113 + 114 + 114 + 114 + 115 + 115 + 115 + 115 + 116 + 116 + 116 + 117 + 117 + 117 + 117 + 118 + 118 + 118 + 119 + 119 + 119 + 119 + 120 + 120 + 120 + 121 + 121 + 121 + 121 + 122 + 122 + 122 + 122 + 123 + 123 + 123 + 123 + 124 + 124 + 124 + 124 + 125 + 125 + 125 + 125 + 126 + 126 + 126 + 126 + 127 + 127 + 127 + 127 + 128 + 128 + 128 + 128 + 129 + 129 + 129 + 129 + 130 + 130 + 130 + 130 + 130 + 131 + 131 + 131 + 131 + 132 + 132 + 132 + 132 + 132 + 133 + 133 + 133 + 133 + 134 + 134 + 134 + 134 + 134 + 135 + 135 + 135 + 135 + 135 + 136 + 136 + 136 + 136 + 136 + 137 + 137 + 137 + 137 + 138 + 138 + 138 + 138 + 138 + 139 + 139 + 139 + 139 + 139 + 140 + 140 + 140 + 140 + 140 + 141 + 141 + 141 + 141 + 141 + 142 + 142 + 142 + 142 + 142 + 142 + 143 + 143 + 143 + 143 + 143 + 144 + 144 + 144 + 144 + 144 + 145 + 145 + 145 + 145 + 145 + 146 + 146 + 146 + 146 + 146 + 147 + 147 + 147 + 147 + 147 + 147 + 148 + 148 + 148 + 148 + 148 + 149 + 149 + 149 + 149 + 149 + 149 + 150 + 150 + 150 + 150 + 150 + 151 + 151 + 151 + 151 + 151 + 151 + 152 + 152 + 152 + 152 + 152 + 152 + 153 + 153 + 153 + 153 + 153 + 153 + 154 + 154 + 154 + 154 + 154 + 154 + 155 + 155 + 155 + 155 + 155 + 155 + 156 + 156 + 156 + 156 + 156 + 156 + 156 + 157 + 157 + 157 + 157 + 157 + 157 + 158 + 158 + 158 + 158 + 158 + 158 + 159 + 159 + 159 + 159 + 159 + 159 + 160 + 160 + 160 + 160 + 160 + 160 + 161 + 161 + 161 + 161 + 161 + 161 + 161 + 162 + 162 + 162 + 162 + 162 + 162 + 163 + 163 + 163 + 163 + 163 + 163 + 163 + 164 + 164 + 164 + 164 + 164 + 164 + 165 + 165 + 165 + 165 + 165 + 165 + 165 + 166 + 166 + 166 + 166 + 166 + 166 + 167 + 167 + 167 + 167 + 167 + 167 + 168 + 168 + 168 + 168 + 168 + 168 + 168 + 169 + 169 + 169 + 169 + 169 + 169 + 169 + 170 + 170 + 170 + 170 + 170 + 170 + 170 + 171 + 171 + 171 + 171 + 171 + 171 + 171 + 172 + 172 + 172 + 172 + 172 + 172 + 172 + 173 + 173 + 173 + 173 + 173 + 173 + 173 + 174 + 174 + 174 + 174 + 174 + 174 + 174 + 175 + 175 + 175 + 175 + 175 + 175 + 175 + 176 + 176 + 176 + 176 + 176 + 176 + 176 + 176 + 176 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 179 + 179 + 179 + 179 + 179 + 179 + 179 + 179 + 179 + 180 + 180 + 180 + 180 + 180 + 180 + 180 + 180 + 180 + 181 + 181 + 181 + 181 + 181 + 181 + 181 + 181 + 182 + 182 + 182 + 182 + 182 + 182 + 182 + 183 + 183 + 183 + 183 + 183 + 183 + 183 + 184 + 184 + 184 + 184 + 184 + 184 + 184 + 184 + 184 + 185 + 185 + 185 + 185 + 185 + 185 + 185 + 186 + 186 + 186 + 186 + 186 + 186 + 186 + 186 + 187 + 187 + 187 + 187 + 187 + 187 + 187 + 188 + 188 + 188 + 188 + 188 + 188 + 188 + 188 + 189 +04/09/2020 3:02:59 +cooling down +04/09/2020 3:04:59 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 189 + 189 + 189 + 189 + 189 + 189 + 189 + 188 + 188 + 188 + 188 + 187 + 187 + 187 + 187 + 186 + 186 + 186 + 186 + 185 + 185 + 185 + 184 + 184 + 184 + 183 + 183 + 183 + 182 + 182 + 182 + 181 + 181 + 181 + 180 + 180 + 180 + 179 + 179 + 179 + 178 + 178 + 178 + 177 + 177 + 177 + 176 + 176 + 176 + 175 + 175 + 175 + 174 + 174 + 174 + 173 + 173 + 173 + 172 + 172 + 172 + 171 + 171 + 170 + 170 + 170 + 170 + 169 + 169 + 169 + 168 + 168 + 168 + 167 + 167 + 167 + 167 + 166 + 166 + 166 + 166 + 165 + 165 + 165 + 165 + 164 + 164 + 164 + 163 + 163 + 163 + 163 + 162 + 162 + 162 + 162 + 162 + 161 + 161 + 161 + 161 + 160 + 160 + 160 + 160 + 159 + 159 + 159 + 159 + 159 + 158 + 158 + 158 + 158 + 158 + 157 + 157 + 157 + 157 + 157 + 156 + 156 + 156 + 156 + 156 + 155 + 155 + 155 + 155 + 155 + 154 + 154 + 154 + 154 + 154 + 154 + 153 + 153 + 153 + 153 + 153 + 152 + 152 + 152 + 152 + 152 + 151 + 151 + 151 + 151 + 151 + 151 + 151 + 150 + 150 + 150 + 150 + 150 + 150 + 149 + 149 + 149 + 149 + 149 + 149 + 149 + 148 + 148 + 148 + 148 + 148 + 148 + 148 + 147 + 147 + 147 + 147 + 147 + 147 + 147 + 147 + 146 + 146 + 146 + 146 + 146 + 146 + 146 + 146 + 145 + 145 + 145 + 145 + 145 + 145 + 145 + 145 + 144 + 144 + 144 + 144 + 144 + 144 + 144 + 144 + 144 + 143 + 143 + 143 + 143 + 143 + 143 + 143 + 143 + 142 + 142 + 142 + 142 + 142 + 142 + 142 + 142 + 142 + 141 + 141 + 141 + 141 + 141 + 141 + 141 + 141 + 141 + 141 + 140 + 140 + 140 + 140 + 140 + 140 + 140 + 140 + 140 + 140 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 59 +04/09/2020 4:20:17 +Heating to 190 +04/09/2020 4:20:17 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 61 + 61 + 61 + 61 + 62 + 62 + 62 + 63 + 63 + 64 + 64 + 64 + 65 + 65 + 66 + 66 + 67 + 67 + 68 + 68 + 69 + 69 + 70 + 70 + 71 + 71 + 72 + 72 + 73 + 74 + 74 + 75 + 75 + 76 + 76 + 77 + 77 + 78 + 78 + 79 + 79 + 80 + 80 + 81 + 81 + 82 + 82 + 83 + 83 + 84 + 84 + 85 + 85 + 86 + 86 + 87 + 87 + 88 + 88 + 89 + 89 + 89 + 90 + 90 + 91 + 91 + 92 + 92 + 93 + 93 + 93 + 94 + 94 + 95 + 95 + 95 + 96 + 96 + 97 + 97 + 97 + 98 + 98 + 99 + 99 + 99 + 100 + 100 + 100 + 101 + 101 + 102 + 102 + 102 + 103 + 103 + 103 + 104 + 104 + 104 + 105 + 105 + 105 + 106 + 106 + 107 + 107 + 107 + 108 + 108 + 108 + 109 + 109 + 109 + 110 + 110 + 110 + 111 + 111 + 111 + 112 + 112 + 112 + 112 + 113 + 113 + 113 + 114 + 114 + 114 + 115 + 115 + 115 + 115 + 116 + 116 + 116 + 117 + 117 + 117 + 117 + 118 + 118 + 118 + 118 + 119 + 119 + 119 + 120 + 120 + 120 + 120 + 121 + 121 + 121 + 121 + 122 + 122 + 122 + 122 + 123 + 123 + 123 + 123 + 124 + 124 + 124 + 124 + 125 + 125 + 125 + 125 + 126 + 126 + 126 + 126 + 127 + 127 + 127 + 127 + 127 + 128 + 128 + 128 + 128 + 129 + 129 + 129 + 129 + 130 + 130 + 130 + 130 + 130 + 131 + 131 + 131 + 131 + 132 + 132 + 132 + 132 + 132 + 133 + 133 + 133 + 133 + 133 + 134 + 134 + 134 + 134 + 134 + 135 + 135 + 135 + 135 + 136 + 136 + 136 + 136 + 136 + 137 + 137 + 137 + 137 + 137 + 138 + 138 + 138 + 138 + 138 + 139 + 139 + 139 + 139 + 139 + 140 + 140 + 140 + 140 + 140 + 141 + 141 + 141 + 141 + 142 + 142 + 142 + 142 + 142 + 142 + 143 + 143 + 143 + 143 + 143 + 144 + 144 + 144 + 144 + 144 + 144 + 145 + 145 + 145 + 145 + 145 + 146 + 146 + 146 + 146 + 146 + 146 + 147 + 147 + 147 + 147 + 147 + 148 + 148 + 148 + 148 + 148 + 148 + 149 + 149 + 149 + 149 + 149 + 149 + 150 + 150 + 150 + 150 + 150 + 150 + 151 + 151 + 151 + 151 + 151 + 152 + 152 + 152 + 152 + 152 + 152 + 153 + 153 + 153 + 153 + 153 + 153 + 154 + 154 + 154 + 154 + 154 + 154 + 155 + 155 + 155 + 155 + 155 + 156 + 156 + 156 + 156 + 156 + 156 + 156 + 157 + 157 + 157 + 157 + 157 + 157 + 158 + 158 + 158 + 158 + 158 + 158 + 158 + 159 + 159 + 159 + 159 + 159 + 159 + 160 + 160 + 160 + 160 + 160 + 160 + 160 + 161 + 161 + 161 + 161 + 161 + 161 + 161 + 162 + 162 + 162 + 162 + 162 + 162 + 163 + 163 + 163 + 163 + 163 + 163 + 163 + 164 + 164 + 164 + 164 + 164 + 164 + 164 + 165 + 165 + 165 + 165 + 165 + 166 + 166 + 166 + 166 + 166 + 166 + 166 + 167 + 167 + 167 + 167 + 167 + 167 + 167 + 168 + 168 + 168 + 168 + 168 + 168 + 168 + 169 + 169 + 169 + 169 + 169 + 169 + 169 + 170 + 170 + 170 + 170 + 170 + 170 + 170 + 171 + 171 + 171 + 171 + 171 + 171 + 171 + 172 + 172 + 172 + 172 + 172 + 172 + 172 + 173 + 173 + 173 + 173 + 173 + 173 + 173 + 174 + 174 + 174 + 174 + 174 + 174 + 174 + 175 + 175 + 175 + 175 + 175 + 175 + 175 + 175 + 176 + 176 + 176 + 176 + 176 + 176 + 176 + 176 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 179 + 179 + 179 + 179 + 179 + 179 + 179 + 179 + 179 + 179 + 180 + 180 + 180 + 180 + 180 + 180 + 180 + 180 + 181 + 181 + 181 + 181 + 181 + 181 + 181 + 181 + 181 + 182 + 182 + 182 + 182 + 182 + 182 + 182 + 182 + 183 + 183 + 183 + 183 + 183 + 183 + 183 + 184 + 184 + 184 + 184 + 184 + 184 + 184 + 185 + 185 + 185 + 185 + 185 + 185 + 185 + 186 + 186 + 186 + 186 + 186 + 186 + 186 + 186 + 187 + 187 + 187 + 187 + 187 + 187 + 187 + 187 + 188 + 188 + 188 + 188 + 188 + 188 + 188 + 188 + 189 +04/09/2020 4:30:11 +cooling down +04/09/2020 4:32:11 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 189 + 189 + 189 + 189 + 189 + 189 + 189 + 188 + 188 + 188 + 188 + 187 + 187 + 187 + 187 + 186 + 186 + 186 + 186 + 185 + 185 + 185 + 184 + 184 + 184 + 183 + 183 + 183 + 182 + 182 + 182 + 181 + 181 + 181 + 180 + 180 + 180 + 179 + 179 + 179 + 178 + 178 + 178 + 177 + 177 + 177 + 176 + 176 + 176 + 175 + 175 + 175 + 174 + 174 + 174 + 173 + 173 + 173 + 172 + 172 + 172 + 171 + 171 + 171 + 171 + 170 + 170 + 170 + 169 + 169 + 169 + 168 + 168 + 168 + 168 + 167 + 167 + 167 + 166 + 166 + 166 + 165 + 165 + 165 + 165 + 164 + 164 + 164 + 164 + 163 + 163 + 163 + 163 + 162 + 162 + 162 + 162 + 161 + 161 + 161 + 161 + 161 + 160 + 160 + 160 + 160 + 159 + 159 + 159 + 159 + 159 + 158 + 158 + 158 + 158 + 157 + 157 + 157 + 157 + 157 + 156 + 156 + 156 + 156 + 156 + 156 + 155 + 155 + 155 + 155 + 155 + 154 + 154 + 154 + 154 + 154 + 154 + 153 + 153 + 153 + 153 + 153 + 153 + 152 + 152 + 152 + 152 + 152 + 152 + 151 + 151 + 151 + 151 + 151 + 151 + 150 + 150 + 150 + 150 + 150 + 150 + 150 + 149 + 149 + 149 + 149 + 149 + 148 + 148 + 148 + 148 + 148 + 148 + 148 + 148 + 147 + 147 + 147 + 147 + 147 + 147 + 147 + 146 + 146 + 146 + 146 + 146 + 146 + 146 + 146 + 145 + 145 + 145 + 145 + 145 + 145 + 145 + 145 + 144 + 144 + 144 + 144 + 144 + 144 + 144 + 144 + 144 + 143 + 143 + 143 + 143 + 143 + 143 + 143 + 143 + 143 + 142 + 142 + 142 + 142 + 142 + 142 + 142 + 142 + 142 + 142 + 141 + 141 + 141 + 141 + 141 + 141 + 141 + 141 + 141 + 141 + 140 + 140 + 140 + 140 + 140 + 140 + 140 + 140 + 140 + 140 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 59 +04/09/2020 5:47:35 +Heating to 190 +04/09/2020 5:47:35 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 61 + 61 + 61 + 62 + 62 + 62 + 63 + 63 + 63 + 64 + 64 + 65 + 65 + 66 + 66 + 67 + 67 + 68 + 68 + 69 + 69 + 70 + 70 + 71 + 71 + 72 + 72 + 73 + 73 + 74 + 75 + 75 + 76 + 76 + 77 + 77 + 78 + 78 + 79 + 79 + 80 + 80 + 81 + 81 + 82 + 82 + 83 + 83 + 84 + 84 + 85 + 85 + 86 + 86 + 87 + 87 + 88 + 88 + 88 + 89 + 90 + 90 + 91 + 91 + 92 + 92 + 92 + 93 + 93 + 94 + 94 + 94 + 95 + 95 + 96 + 96 + 96 + 97 + 97 + 98 + 98 + 98 + 99 + 99 + 100 + 100 + 100 + 101 + 101 + 101 + 102 + 102 + 102 + 103 + 103 + 104 + 104 + 104 + 105 + 105 + 105 + 106 + 106 + 106 + 107 + 107 + 107 + 108 + 108 + 108 + 109 + 109 + 109 + 109 + 110 + 110 + 110 + 111 + 111 + 111 + 112 + 112 + 112 + 113 + 113 + 113 + 113 + 114 + 114 + 114 + 115 + 115 + 115 + 115 + 116 + 116 + 116 + 117 + 117 + 117 + 117 diff --git a/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/Dryer_Tset1.CSV b/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/Dryer_Tset1.CSV new file mode 100644 index 000000000..6d1a7862c --- /dev/null +++ b/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/Dryer_Tset1.CSV @@ -0,0 +1,1600 @@ +06/07/2020 9:43:12 +Heating to 190 +06/07/2020 9:43:12 + 23 + 23 + 23 + 23 + 23 + 23 + 23 + 23 + 23 + 23 + 23 + 23 + 23 + 23 + 23 + 23 + 23 + 23 + 23 + 23 + 23 + 23 + 23 + 23 + 23 + 23 + 24 + 24 + 24 + 24 + 24 + 24 + 25 + 25 + 25 + 26 + 26 + 26 + 27 + 27 + 28 + 28 + 29 + 29 + 30 + 30 + 31 + 31 + 32 + 32 + 33 + 33 + 34 + 34 + 35 + 35 + 36 + 37 + 37 + 38 + 38 + 39 + 39 + 40 + 41 + 41 + 42 + 42 + 43 + 43 + 44 + 44 + 45 + 46 + 46 + 47 + 47 + 48 + 48 + 49 + 49 + 50 + 50 + 51 + 52 + 52 + 53 + 53 + 54 + 54 + 55 + 55 + 56 + 56 + 56 + 57 + 57 + 58 + 58 + 59 + 59 + 60 + 60 + 60 + 61 + 61 + 62 + 62 + 63 + 63 + 63 + 64 + 64 + 65 + 65 + 65 + 66 + 66 + 66 + 67 + 67 + 68 + 68 + 68 + 69 + 69 + 69 + 70 + 70 + 71 + 71 + 71 + 72 + 72 + 72 + 73 + 73 + 73 + 74 + 74 + 74 + 75 + 75 + 75 + 76 + 76 + 76 + 77 + 77 + 77 + 78 + 78 + 78 + 79 + 79 + 79 + 79 + 80 + 80 + 80 + 81 + 81 + 81 + 82 + 82 + 82 + 82 + 83 + 83 + 83 + 84 + 84 + 84 + 84 + 85 + 85 + 85 + 86 + 86 + 86 + 86 + 87 + 87 + 87 + 88 + 88 + 88 + 88 + 89 + 89 + 89 + 89 + 90 + 90 + 90 + 91 + 91 + 91 + 92 + 92 + 92 + 92 + 93 + 93 + 93 + 93 + 94 + 94 + 94 + 94 + 95 + 95 + 95 + 95 + 96 + 96 + 96 + 96 + 97 + 97 + 97 + 97 + 98 + 98 + 98 + 98 + 98 + 99 + 99 + 99 + 99 + 100 + 100 + 100 + 100 + 101 + 101 + 101 + 101 + 102 + 102 + 102 + 102 + 102 + 103 + 103 + 103 + 103 + 104 + 104 + 104 + 104 + 105 + 105 + 105 + 105 + 105 + 106 + 106 + 106 + 106 + 106 + 107 + 107 + 107 + 107 + 107 + 108 + 108 + 108 + 108 + 108 + 109 + 109 + 109 + 109 + 110 + 110 + 110 + 110 + 110 + 111 + 111 + 111 + 111 + 111 + 112 + 112 + 112 + 112 + 112 + 113 + 113 + 113 + 113 + 113 + 114 + 114 + 114 + 114 + 114 + 115 + 115 + 115 + 115 + 115 + 116 + 116 + 116 + 116 + 116 + 117 + 117 + 117 + 117 + 117 + 118 + 118 + 118 + 118 + 119 + 119 + 119 + 119 + 119 + 119 + 120 + 120 + 120 + 120 + 120 + 121 + 121 + 121 + 121 + 121 + 122 + 122 + 122 + 122 + 122 + 123 + 123 + 123 + 123 + 123 + 123 + 124 + 124 + 124 + 124 + 124 + 125 + 125 + 125 + 125 + 125 + 125 + 126 + 126 + 126 + 126 + 126 + 127 + 127 + 127 + 127 + 127 + 128 + 128 + 128 + 128 + 128 + 128 + 129 + 129 + 129 + 129 + 129 + 130 + 130 + 130 + 130 + 130 + 130 + 131 + 131 + 131 + 131 + 131 + 131 + 132 + 132 + 132 + 132 + 132 + 132 + 133 + 133 + 133 + 133 + 133 + 134 + 134 + 134 + 134 + 134 + 134 + 135 + 135 + 135 + 135 + 135 + 135 + 136 + 136 + 136 + 136 + 136 + 136 + 137 + 137 + 137 + 137 + 137 + 137 + 138 + 138 + 138 + 138 + 138 + 138 + 139 + 139 + 139 + 139 + 139 + 139 + 140 + 140 + 140 + 140 + 140 + 140 + 141 + 141 + 141 + 141 + 141 + 141 + 142 + 142 + 142 + 142 + 142 + 142 + 143 + 143 + 143 + 143 + 143 + 143 + 144 + 144 + 144 + 144 + 144 + 144 + 145 + 145 + 145 + 145 + 145 + 145 + 145 + 146 + 146 + 146 + 146 + 146 + 146 + 147 + 147 + 147 + 147 + 147 + 147 + 147 + 148 + 148 + 148 + 148 + 148 + 148 + 149 + 149 + 149 + 149 + 149 + 149 + 150 + 150 + 150 + 150 + 150 + 150 + 150 + 151 + 151 + 151 + 151 + 151 + 151 + 151 + 152 + 152 + 152 + 152 + 152 + 152 + 152 + 153 + 153 + 153 + 153 + 153 + 153 + 153 + 154 + 154 + 154 + 154 + 154 + 154 + 155 + 155 + 155 + 155 + 155 + 155 + 155 + 156 + 156 + 156 + 156 + 156 + 156 + 156 + 157 + 157 + 157 + 157 + 157 + 157 + 157 + 158 + 158 + 158 + 158 + 158 + 158 + 158 + 159 + 159 + 159 + 159 + 159 + 159 + 160 + 160 + 160 + 160 + 160 + 160 + 160 + 161 + 161 + 161 + 161 + 161 + 161 + 161 + 162 + 162 + 162 + 162 + 162 + 162 + 162 + 163 + 163 + 163 + 163 + 163 + 163 + 163 + 164 + 164 + 164 + 164 + 164 + 164 + 164 + 165 + 165 + 165 + 165 + 165 + 165 + 165 + 166 + 166 + 166 + 166 + 166 + 166 + 166 + 166 + 167 + 167 + 167 + 167 + 167 + 167 + 167 + 167 + 168 + 168 + 168 + 168 + 168 + 168 + 168 + 169 + 169 + 169 + 169 + 169 + 169 + 169 + 170 + 170 + 170 + 170 + 170 + 170 + 170 + 170 + 171 + 171 + 171 + 171 + 171 + 171 + 171 + 172 + 172 + 172 + 172 + 172 + 172 + 172 + 172 + 173 + 173 + 173 + 173 + 173 + 173 + 173 + 174 + 174 + 174 + 174 + 174 + 174 + 174 + 175 + 175 + 175 + 175 + 175 + 175 + 175 + 175 + 176 + 176 + 176 + 176 + 176 + 176 + 176 + 176 + 176 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 179 + 179 + 179 + 179 + 179 + 179 + 179 + 179 + 179 + 179 + 180 + 180 + 180 + 180 + 180 + 180 + 180 + 180 + 180 + 180 + 181 + 181 + 181 + 181 + 181 + 181 + 181 + 181 + 181 + 181 + 182 + 182 + 182 + 182 + 182 + 182 + 182 + 182 + 182 + 182 + 183 + 183 + 183 + 183 + 183 + 183 + 183 + 183 + 183 + 183 + 184 + 184 + 184 + 184 + 184 + 184 + 184 + 184 + 184 + 185 + 185 + 185 + 185 + 185 + 185 + 185 + 185 + 185 + 185 + 186 + 186 + 186 + 186 + 186 + 186 + 186 + 186 + 186 + 187 + 187 + 187 + 187 + 187 + 187 + 187 + 187 + 187 + 188 + 188 + 188 + 188 + 188 + 188 + 188 + 188 + 188 + 188 + 189 +06/07/2020 9:56:54 +cooling down +06/07/2020 9:58:54 + 191 + 191 + 191 + 191 + 191 + 191 + 191 + 191 + 191 + 191 + 191 + 190 + 190 + 190 + 190 + 190 + 190 + 190 + 189 + 189 + 189 + 189 + 188 + 188 + 188 + 188 + 187 + 187 + 186 + 186 + 186 + 185 + 185 + 185 + 184 + 184 + 184 + 183 + 183 + 183 + 182 + 182 + 182 + 181 + 181 + 181 + 180 + 180 + 179 + 179 + 179 + 178 + 178 + 178 + 177 + 177 + 177 + 176 + 176 + 175 + 175 + 175 + 174 + 174 + 174 + 173 + 173 + 173 + 172 + 172 + 172 + 171 + 171 + 171 + 170 + 170 + 170 + 169 + 169 + 169 + 168 + 168 + 168 + 167 + 167 + 167 + 167 + 166 + 166 + 166 + 165 + 165 + 165 + 164 + 164 + 164 + 164 + 163 + 163 + 163 + 162 + 162 + 162 + 161 + 161 + 161 + 161 + 160 + 160 + 160 + 160 + 159 + 159 + 159 + 159 + 158 + 158 + 158 + 158 + 157 + 157 + 157 + 157 + 157 + 156 + 156 + 156 + 156 + 155 + 155 + 155 + 155 + 155 + 154 + 154 + 154 + 154 + 153 + 153 + 153 + 153 + 153 + 152 + 152 + 152 + 152 + 152 + 152 + 151 + 151 + 151 + 151 + 151 + 150 + 150 + 150 + 150 + 150 + 149 + 149 + 149 + 149 + 149 + 149 + 148 + 148 + 148 + 148 + 148 + 148 + 147 + 147 + 147 + 147 + 147 + 147 + 146 + 146 + 146 + 146 + 146 + 146 + 145 + 145 + 145 + 145 + 145 + 145 + 145 + 144 + 144 + 144 + 144 + 144 + 144 + 144 + 143 + 143 + 143 + 143 + 143 + 143 + 143 + 142 + 142 + 142 + 142 + 142 + 142 + 142 + 142 + 141 + 141 + 141 + 141 + 141 + 141 + 141 + 141 + 141 + 140 + 140 + 140 + 140 + 140 + 140 + 140 + 140 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 diff --git a/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/Dryer_Tset111.CSV b/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/Dryer_Tset111.CSV new file mode 100644 index 000000000..4ab057b1c --- /dev/null +++ b/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/Dryer_Tset111.CSV @@ -0,0 +1,29654 @@ +16/08/2020 18:49:18 +Heating to 190 +16/08/2020 18:49:18 + 24 + 24 + 24 + 24 + 24 + 24 + 24 + 24 + 24 + 24 + 24 + 24 + 24 + 25 + 25 + 25 + 25 + 25 + 26 + 26 + 26 + 26 + 27 + 27 + 27 + 28 + 28 + 29 + 29 + 29 + 30 + 30 + 31 + 31 + 32 + 32 + 33 + 33 + 33 + 34 + 34 + 35 + 36 + 36 + 37 + 38 + 38 + 39 + 39 + 40 + 40 + 41 + 41 + 42 + 42 + 43 + 43 + 44 + 44 + 45 + 45 + 46 + 46 + 47 + 47 + 48 + 48 + 49 + 49 + 50 + 50 + 51 + 51 + 52 + 52 + 53 + 53 + 53 + 54 + 54 + 55 + 55 + 56 + 56 + 57 + 57 + 57 + 58 + 58 + 59 + 59 + 60 + 60 + 60 + 61 + 61 + 62 + 62 + 63 + 63 + 63 + 64 + 64 + 65 + 65 + 66 + 66 + 66 + 67 + 67 + 67 + 68 + 68 + 69 + 69 + 69 + 70 + 70 + 70 + 71 + 71 + 71 + 72 + 72 + 72 + 73 + 73 + 73 + 74 + 74 + 74 + 75 + 75 + 75 + 76 + 76 + 76 + 77 + 77 + 77 + 78 + 78 + 78 + 79 + 79 + 79 + 79 + 80 + 80 + 80 + 81 + 81 + 81 + 81 + 82 + 82 + 82 + 83 + 83 + 83 + 84 + 84 + 84 + 84 + 85 + 85 + 85 + 85 + 86 + 86 + 86 + 87 + 87 + 87 + 87 + 88 + 88 + 88 + 88 + 89 + 89 + 89 + 89 + 90 + 90 + 90 + 91 + 91 + 91 + 91 + 92 + 92 + 92 + 92 + 93 + 93 + 93 + 93 + 94 + 94 + 94 + 94 + 95 + 95 + 95 + 95 + 95 + 96 + 96 + 96 + 96 + 97 + 97 + 97 + 97 + 98 + 98 + 98 + 98 + 98 + 99 + 99 + 99 + 99 + 100 + 100 + 100 + 100 + 100 + 101 + 101 + 101 + 101 + 102 + 102 + 102 + 102 + 102 + 103 + 103 + 103 + 103 + 104 + 104 + 104 + 104 + 104 + 105 + 105 + 105 + 105 + 105 + 106 + 106 + 106 + 106 + 106 + 107 + 107 + 107 + 107 + 107 + 108 + 108 + 108 + 108 + 108 + 109 + 109 + 109 + 109 + 110 + 110 + 110 + 110 + 110 + 111 + 111 + 111 + 111 + 111 + 112 + 112 + 112 + 112 + 112 + 112 + 113 + 113 + 113 + 113 + 113 + 114 + 114 + 114 + 114 + 114 + 115 + 115 + 115 + 115 + 115 + 115 + 116 + 116 + 116 + 116 + 116 + 117 + 117 + 117 + 117 + 117 + 117 + 118 + 118 + 118 + 118 + 118 + 119 + 119 + 119 + 119 + 119 + 119 + 120 + 120 + 120 + 120 + 120 + 120 + 121 + 121 + 121 + 121 + 121 + 122 + 122 + 122 + 122 + 122 + 122 + 123 + 123 + 123 + 123 + 123 + 123 + 124 + 124 + 124 + 124 + 124 + 124 + 125 + 125 + 125 + 125 + 125 + 125 + 126 + 126 + 126 + 126 + 126 + 126 + 127 + 127 + 127 + 127 + 127 + 127 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 129 + 129 + 129 + 129 + 129 + 129 + 130 + 130 + 130 + 130 + 130 + 130 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 132 + 132 + 132 + 132 + 132 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 134 + 134 + 134 + 134 + 134 + 134 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 137 + 137 + 137 + 137 + 137 + 137 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 140 + 140 + 140 + 140 + 140 + 140 + 140 + 141 + 141 + 141 + 141 + 141 + 141 + 141 + 142 + 142 + 142 + 142 + 142 + 142 + 142 + 143 + 143 + 143 + 143 + 143 + 143 + 143 + 143 + 144 + 144 + 144 + 144 + 144 + 144 + 144 + 145 + 145 + 145 + 145 + 145 + 145 + 146 + 146 + 146 + 146 + 146 + 146 + 146 + 147 + 147 + 147 + 147 + 147 + 147 + 147 + 147 + 148 + 148 + 148 + 148 + 148 + 148 + 148 + 148 + 149 + 149 + 149 + 149 + 149 + 149 + 149 + 150 + 150 + 150 + 150 + 150 + 150 + 150 + 150 + 151 + 151 + 151 + 151 + 151 + 151 + 151 + 151 + 152 + 152 + 152 + 152 + 152 + 152 + 152 + 152 + 153 + 153 + 153 + 153 + 153 + 153 + 154 + 154 + 154 + 154 + 154 + 154 + 154 + 154 + 155 + 155 + 155 + 155 + 155 + 155 + 155 + 155 + 155 + 156 + 156 + 156 + 156 + 156 + 156 + 156 + 156 + 156 + 157 + 157 + 157 + 157 + 157 + 157 + 157 + 157 + 157 + 158 + 158 + 158 + 158 + 158 + 158 + 158 + 158 + 158 + 159 + 159 + 159 + 159 + 159 + 159 + 159 + 159 + 159 + 160 + 160 + 160 + 160 + 160 + 160 + 160 + 160 + 160 + 161 + 161 + 161 + 161 + 161 + 161 + 161 + 161 + 161 + 162 + 162 + 162 + 162 + 162 + 162 + 162 + 162 + 163 + 163 + 163 + 163 + 163 + 163 + 163 + 163 + 164 + 164 + 164 + 164 + 164 + 164 + 164 + 164 + 164 + 165 + 165 + 165 + 165 + 165 + 165 + 165 + 165 + 165 + 166 + 166 + 166 + 166 + 166 + 166 + 166 + 166 + 167 + 167 + 167 + 167 + 167 + 167 + 167 + 167 + 167 + 168 + 168 + 168 + 168 + 168 + 168 + 168 + 168 + 168 + 169 + 169 + 169 + 169 + 169 + 169 + 169 + 169 + 169 + 170 + 170 + 170 + 170 + 170 + 170 + 170 + 170 + 170 + 171 + 171 + 171 + 171 + 171 + 171 + 171 + 171 + 171 + 172 + 172 + 172 + 172 + 172 + 172 + 172 + 172 + 172 + 173 + 173 + 173 + 173 + 173 + 173 + 173 + 173 + 173 + 174 + 174 + 174 + 174 + 174 + 174 + 174 + 174 + 174 + 174 + 175 + 175 + 175 + 175 + 175 + 175 + 175 + 175 + 175 + 175 + 176 + 176 + 176 + 176 + 176 + 176 + 176 + 176 + 176 + 176 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 179 + 179 + 179 + 179 + 179 + 179 + 179 + 179 + 179 + 180 + 180 + 180 + 180 + 180 + 180 + 180 + 180 + 180 + 180 + 181 + 181 + 181 + 181 + 181 + 181 + 181 + 181 + 181 + 182 + 182 + 182 + 182 + 182 + 182 + 182 + 182 + 182 + 183 + 183 + 183 + 183 + 183 + 183 + 183 + 183 + 183 + 183 + 184 + 184 + 184 + 184 + 184 + 184 + 184 + 184 + 184 + 185 + 185 + 185 + 185 + 185 + 185 + 185 + 185 + 185 + 185 + 186 + 186 + 186 + 186 + 186 + 186 + 186 + 186 + 186 + 186 + 187 + 187 + 187 + 187 + 187 + 187 + 187 + 187 + 187 + 188 + 188 + 188 + 188 + 188 + 188 + 188 + 188 + 188 + 188 + 189 +16/08/2020 19:04:08 +cooling down +16/08/2020 19:06:08 + 193 + 193 + 193 + 193 + 193 + 193 + 192 + 192 + 192 + 192 + 192 + 192 + 192 + 192 + 191 + 191 + 191 + 191 + 191 + 191 + 190 + 190 + 190 + 190 + 190 + 189 + 189 + 189 + 189 + 188 + 188 + 188 + 188 + 187 + 187 + 187 + 186 + 186 + 186 + 185 + 185 + 185 + 185 + 184 + 184 + 184 + 183 + 183 + 183 + 182 + 182 + 182 + 181 + 181 + 181 + 180 + 180 + 180 + 179 + 179 + 179 + 178 + 178 + 178 + 178 + 177 + 177 + 176 + 176 + 176 + 175 + 175 + 175 + 174 + 174 + 174 + 174 + 173 + 173 + 173 + 172 + 172 + 172 + 171 + 171 + 171 + 171 + 170 + 170 + 170 + 169 + 169 + 169 + 169 + 168 + 168 + 168 + 167 + 167 + 167 + 167 + 166 + 166 + 166 + 166 + 165 + 165 + 165 + 165 + 164 + 164 + 164 + 164 + 163 + 163 + 163 + 163 + 162 + 162 + 162 + 162 + 161 + 161 + 161 + 161 + 160 + 160 + 160 + 160 + 159 + 159 + 159 + 159 + 158 + 158 + 158 + 158 + 158 + 157 + 157 + 157 + 157 + 157 + 156 + 156 + 156 + 156 + 156 + 155 + 155 + 155 + 155 + 155 + 154 + 154 + 154 + 154 + 154 + 153 + 153 + 153 + 153 + 153 + 153 + 152 + 152 + 152 + 152 + 152 + 151 + 151 + 151 + 151 + 151 + 151 + 150 + 150 + 150 + 150 + 150 + 150 + 149 + 149 + 149 + 149 + 149 + 149 + 149 + 148 + 148 + 148 + 148 + 148 + 148 + 147 + 147 + 147 + 147 + 147 + 147 + 146 + 146 + 146 + 146 + 146 + 146 + 146 + 146 + 145 + 145 + 145 + 145 + 145 + 145 + 145 + 144 + 144 + 144 + 144 + 144 + 144 + 144 + 144 + 143 + 143 + 143 + 143 + 143 + 143 + 143 + 143 + 142 + 142 + 142 + 142 + 142 + 142 + 142 + 142 + 141 + 141 + 141 + 141 + 141 + 141 + 141 + 141 + 141 + 140 + 140 + 140 + 140 + 140 + 140 + 140 + 140 + 140 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 139 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 138 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 137 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 136 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 135 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 134 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 133 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 132 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 131 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 130 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 129 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 128 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 127 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 126 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 125 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 124 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 122 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 121 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 120 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 119 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 118 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 117 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 116 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 115 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 114 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 113 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 112 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 111 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 110 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 109 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 108 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 107 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 106 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 105 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 104 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 103 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 101 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 99 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 98 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 97 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 96 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 95 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 94 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 93 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 92 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 91 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 90 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 89 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 88 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 87 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 86 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 85 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 84 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 83 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 82 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 81 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 80 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 79 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 78 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 77 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 76 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 75 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 74 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 73 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 72 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 71 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 70 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 69 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 68 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 67 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 66 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 65 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 63 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 62 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 61 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 59 +16/08/2020 20:12:40 +Heating to 190 +16/08/2020 20:12:40 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 59 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 60 + 61 + 61 + 61 + 61 + 62 + 62 + 62 + 62 + 63 + 63 + 64 + 64 + 64 + 65 + 65 + 66 + 66 + 66 + 67 + 67 + 68 + 68 + 69 + 69 + 70 + 70 + 71 + 71 + 71 + 72 + 72 + 73 + 73 + 74 + 74 + 75 + 75 + 76 + 76 + 77 + 77 + 78 + 78 + 79 + 80 + 80 + 81 + 81 + 82 + 82 + 82 + 83 + 83 + 84 + 84 + 85 + 85 + 86 + 86 + 87 + 87 + 87 + 88 + 88 + 89 + 89 + 90 + 90 + 90 + 91 + 91 + 92 + 92 + 93 + 93 + 93 + 94 + 94 + 95 + 95 + 95 + 96 + 96 + 97 + 97 + 97 + 98 + 98 + 98 + 99 + 99 + 99 + 100 + 100 + 101 + 101 + 101 + 102 + 102 + 102 + 103 + 103 + 103 + 104 + 104 + 104 + 105 + 105 + 105 + 106 + 106 + 106 + 107 + 107 + 107 + 108 + 108 + 108 + 109 + 109 + 109 + 109 + 110 + 110 + 110 + 111 + 111 + 111 + 112 + 112 + 113 + 113 + 113 + 113 + 114 + 114 + 114 + 115 + 115 + 115 + 115 + 116 + 116 + 116 + 116 + 117 + 117 + 117 + 118 + 118 + 118 + 118 + 119 + 119 + 119 + 119 + 120 + 120 + 120 + 120 + 121 + 121 + 121 + 121 + 122 + 122 + 122 + 122 + 123 + 123 + 123 + 123 + 124 + 124 + 124 + 124 + 125 + 125 + 125 + 125 + 126 + 126 + 126 + 126 + 126 + 127 + 127 + 127 + 127 + 128 + 128 + 128 + 128 + 129 + 129 + 129 + 129 + 129 + 130 + 130 + 130 + 130 + 131 + 131 + 131 + 131 + 131 + 132 + 132 + 132 + 132 + 133 + 133 + 133 + 133 + 134 + 134 + 134 + 134 + 134 + 135 + 135 + 135 + 135 + 135 + 136 + 136 + 136 + 136 + 136 + 137 + 137 + 137 + 137 + 137 + 138 + 138 + 138 + 138 + 138 + 139 + 139 + 139 + 139 + 139 + 140 + 140 + 140 + 140 + 140 + 140 + 141 + 141 + 141 + 141 + 141 + 142 + 142 + 142 + 142 + 142 + 142 + 143 + 143 + 143 + 143 + 143 + 144 + 144 + 144 + 144 + 144 + 144 + 145 + 145 + 145 + 145 + 145 + 145 + 146 + 146 + 146 + 146 + 146 + 146 + 147 + 147 + 147 + 147 + 147 + 147 + 148 + 148 + 148 + 148 + 148 + 148 + 149 + 149 + 149 + 149 + 149 + 149 + 150 + 150 + 150 + 150 + 150 + 150 + 151 + 151 + 151 + 151 + 151 + 151 + 151 + 152 + 152 + 152 + 152 + 152 + 152 + 153 + 153 + 153 + 153 + 153 + 153 + 154 + 154 + 154 + 154 + 154 + 154 + 155 + 155 + 155 + 155 + 155 + 155 + 156 + 156 + 156 + 156 + 156 + 156 + 156 + 157 + 157 + 157 + 157 + 157 + 157 + 157 + 158 + 158 + 158 + 158 + 158 + 158 + 159 + 159 + 159 + 159 + 159 + 159 + 159 + 160 + 160 + 160 + 160 + 160 + 160 + 160 + 161 + 161 + 161 + 161 + 161 + 161 + 161 + 162 + 162 + 162 + 162 + 162 + 162 + 162 + 163 + 163 + 163 + 163 + 163 + 163 + 163 + 164 + 164 + 164 + 164 + 164 + 164 + 164 + 164 + 165 + 165 + 165 + 165 + 165 + 165 + 165 + 166 + 166 + 166 + 166 + 166 + 166 + 166 + 166 + 167 + 167 + 167 + 167 + 167 + 167 + 167 + 168 + 168 + 168 + 168 + 168 + 168 + 168 + 169 + 169 + 169 + 169 + 169 + 169 + 169 + 169 + 170 + 170 + 170 + 170 + 170 + 170 + 170 + 171 + 171 + 171 + 171 + 171 + 171 + 171 + 171 + 172 + 172 + 172 + 172 + 172 + 172 + 172 + 173 + 173 + 173 + 173 + 173 + 173 + 173 + 173 + 173 + 174 + 174 + 174 + 174 + 174 + 174 + 174 + 174 + 175 + 175 + 175 + 175 + 175 + 175 + 175 + 175 + 176 + 176 + 176 + 176 + 176 + 176 + 176 + 176 + 176 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 177 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 178 + 179 + 179 + 179 + 179 + 179 + 179 + 179 + 179 + 179 + 180 + 180 + 180 + 180 + 180 + 180 + 180 + 180 + 180 + 181 + 181 + 181 + 181 + 181 + 181 + 181 + 181 + 181 + 182 + 182 + 182 + 182 + 182 + 182 + 182 + 182 + 182 + 183 + 183 + 183 + 183 + 183 + 183 + 183 + 183 + 184 + 184 + 184 + 184 + 184 + 184 + 184 + 184 + 185 + 185 + 185 + 185 + 185 + 185 + 185 + 185 + 185 + 186 + 186 + 186 + 186 + 186 + 186 + 186 + 186 + 187 + 187 + 187 + 187 + 187 + 187 + 187 + 187 + 187 + 188 + 188 + 188 + 188 + 188 + 188 + 188 + 189 +16/08/2020 20:23:12 +cooling down +17/08/2020 0:35:05 + 42 +17/08/2020 0:35:06 +Heating to 190 +17/08/2020 0:35:06 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 42 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 41 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 39 + 40 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 39 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 37 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 34 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 32 + 33 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 31 + 32 + 32 + 32 + 31 + 31 + 31 + 32 + 31 + 31 + 31 + 31 + 32 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 31 + 30 + 30 + 31 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 30 + 29 + 30 + 30 + 30 + 30 + 30 + 30 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 diff --git a/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/blower_rpm.cs b/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/blower_rpm.cs new file mode 100644 index 000000000..13e6af513 --- /dev/null +++ b/Software/Stubs Collection/stubs/Scripts/Assemblies/Dryer/blower_rpm.cs @@ -0,0 +1,62 @@ +using System; +using System.Text; +using System.Linq; +using System.Drawing; +using System.Diagnostics; +using System.Windows.Forms; +using System.Threading; +using System.Threading.Tasks; +using System.Collections.Generic; +using Tango.PMR.Stubs; +using Tango.Stubs; + +include "..\..\Defines\Tango_Defines_Basic.cs" +include "Tango_Defines_SSR.cs" +include "Tango_Defines_Tacho.cs" + +const int Time_Test_On_Second= 60*30*3 ; //1.5 hour +const string File_Name = @"P:\Scripts\Assemblies\Dryer\Blowe_RMO_LOG.CSV"; //3 hour + + +public void OnExecute(StubManager stubManager) +{ + + +/* + const int LOW = 75;//0 - 100% + var response = stubManager.Run("StubFpgaWriteRegRequest" ,0x60000400 | 0x112, 0xFF);//Freq 8 bit + var response1 = stubManager.Run("StubFpgaWriteRegRequest" ,0x60000400 | 0x3EC, LOW+1);//Low 8 bit + var response2 = stubManager.Run("StubFpgaWriteRegRequest" ,0x60000400 | 0x3EE, 101 - LOW);//High 8 bit +*/ + + + + + + + + var RetVal=Fpga_Read_Reg(FPGA1, F1_Tacho_reg8, 0); + UInt32 temp; + + +// stubManager.WriteToFile(File_Name,",RPM "); + + + for (int i=0;i("StubMotorRunRequest" ,3,true, 2200); - for (int i=0;i<5;i++) + for (int i=0;i<10;i++) { stubManager.WriteLine("--------------------loop number " + i +" ---------------------" ); diff --git a/Software/Stubs Collection/stubs/Scripts/Assemblies/Dye head/Actuator_In_new set point.cs b/Software/Stubs Collection/stubs/Scripts/Assemblies/Dye head/Actuator_In_new set point.cs new file mode 100644 index 000000000..dc5d5af07 --- /dev/null +++ b/Software/Stubs Collection/stubs/Scripts/Assemblies/Dye head/Actuator_In_new set point.cs @@ -0,0 +1,34 @@ +using System; +using System.Text; +using System.Linq; +using System.Drawing; +using System.Diagnostics; +using System.Windows.Forms; +using System.Threading; +using System.Threading.Tasks; +using System.Collections.Generic; +using Tango.PMR.Stubs; +using Tango.Stubs; + +public void OnExecute(StubManager stubManager) +{ +int Delay_UP=200; //msec +int Delay_stop=500; +int Delay_limit=1000; + + stubManager.Run("ProgressRequest" ,0xfead, 0xcaf000); //mov ACTUATOR-IN down up to limit switch + Thread.Sleep(2000); +// while (true) +// { + + stubManager.Run("ProgressRequest" ,0xfead, 0xcaf003); //mov ACTUATOR-IN up + Thread.Sleep(Delay_UP); + stubManager.Run("ProgressRequest" ,0xfead, 0xcaf008); //stop ACTUATOR-IN + Thread.Sleep(Delay_stop); + // stubManager.Run("ProgressRequest" ,0xfead, 0xcaf000); //mov ACTUATOR-IN down up to limit switch +// Thread.Sleep(Delay_limit); + + // } + + +} \ No newline at end of file diff --git a/Software/Stubs Collection/stubs/Scripts/Assemblies/Dye head/Write SYLKO to head eeprom.cs b/Software/Stubs Collection/stubs/Scripts/Assemblies/Dye head/Write SYLKO to head eeprom.cs new file mode 100644 index 000000000..d7729ca2f --- /dev/null +++ b/Software/Stubs Collection/stubs/Scripts/Assemblies/Dye head/Write SYLKO to head eeprom.cs @@ -0,0 +1,118 @@ +using System; +using System.Text; +using System.Linq; +using System.Drawing; +using System.Diagnostics; +using System.Windows.Forms; +using System.Threading; +using System.Threading.Tasks; +using System.Collections.Generic; +using Tango.PMR.Stubs; +using Tango.Stubs; + +//---------------------- +const Int32 I2C_ID = 3; //MCU_I2C3 +const Int32 TCA9548A_address = 0xE2; +const Int32 I2C_Slave_Add = 0xA0; // //eeprom address - 32kByte +int Head_Mux_Channel_ID = 4; //Head MUX channel +//---------------------- + +const Int32 SerialNum = 0x01; + + +int enable_channel(int Channel_ID) +{ + uint Const_temp = 0x01; + + StubI2CWriteBytesRequest stubI2CWriteBytesRequest = new StubI2CWriteBytesRequest(); + stubI2CWriteBytesRequest.I2CId = I2C_ID; + stubI2CWriteBytesRequest.SlaveAddress = TCA9548A_address; + + Const_temp = Const_temp << Channel_ID; + stubI2CWriteBytesRequest.BytesTWrite.Add(Const_temp); + + var response = stubManager.Run(stubI2CWriteBytesRequest); + + return 1; +} + + +int adc_write(uint I2C_Slave_Add, uint Page) +{ + StubI2CWriteBytesRequest stubI2CWriteBytesRequest = new StubI2CWriteBytesRequest(); + stubI2CWriteBytesRequest.I2CId = I2C_ID; + stubI2CWriteBytesRequest.SlaveAddress = I2C_Slave_Add; + + UInt32 uInt32 = new UInt32(); + stubI2CWriteBytesRequest.BytesTWrite.Add(0);//Byte 0 to write + stubI2CWriteBytesRequest.BytesTWrite.Add(Page);//Byte 0 to write + //-------------------------------------------------------------- + + stubI2CWriteBytesRequest.BytesTWrite.Add(SerialNum);//S/N + stubI2CWriteBytesRequest.BytesTWrite.Add(0x03);//HEAD_TYPE_SYLKO + //stubI2CWriteBytesRequest.BytesTWrite.Add(0x04);//HEAD_TYPE_STAPLE_SPUN + + var response = stubManager.Run(stubI2CWriteBytesRequest); + + return 1; +} + +int adc_set_for_read_ch(uint I2C_Slave_Add, uint Page) +{ + StubI2CWriteBytesRequest stubI2CWriteBytesRequest = new StubI2CWriteBytesRequest(); + stubI2CWriteBytesRequest.I2CId = I2C_ID; + stubI2CWriteBytesRequest.SlaveAddress = I2C_Slave_Add; + + + UInt32 uInt32 = new UInt32(); + stubI2CWriteBytesRequest.BytesTWrite.Add(0);//Byte 0 to write + stubI2CWriteBytesRequest.BytesTWrite.Add(Page);//Byte 0 to write + + var response = stubManager.Run(stubI2CWriteBytesRequest); + + return 1; +} + +int adc_read_ch(uint I2C_Slave_Add) +{ + StubI2CReadBytesRequest stubI2CReadBytesRequest = new StubI2CReadBytesRequest(); + stubI2CReadBytesRequest.I2CId = I2C_ID; + stubI2CReadBytesRequest.SlaveAddress = I2C_Slave_Add + 1; + stubI2CReadBytesRequest.NumberOfBytesToRead = 10; // Number of bytes to read + + var response1 = stubManager.Run(stubI2CReadBytesRequest); + uint temph=0; + + for(int i=0; i Disp0enser 0-7 + + for (int i = 0; i<1; i++) + { + + adc_write(I2C_Slave_Add,0x00); + Thread.Sleep(10); //Sleep for 5 milli. - must! otherwise read 0xff (See data sheet ) + + stubManager.Write("\nPage 0x00 #"); + stubManager.Write(i); + stubManager.Write("\t- The Buffer is: "); + adc_set_for_read_ch(I2C_Slave_Add, 0x00); + //Thread.Sleep(1); //Sleep for 10 milli. + adc_read_ch(I2C_Slave_Add); + + Thread.Sleep(1000); + + } +} \ No newline at end of file diff --git a/Software/Stubs Collection/stubs/Scripts/Assemblies/ElectricalEnclosure/ElectricalEnclosure_Fans1.cs b/Software/Stubs Collection/stubs/Scripts/Assemblies/ElectricalEnclosure/ElectricalEnclosure_Fans1.cs index af5a07543..ba39cb2b0 100644 --- a/Software/Stubs Collection/stubs/Scripts/Assemblies/ElectricalEnclosure/ElectricalEnclosure_Fans1.cs +++ b/Software/Stubs Collection/stubs/Scripts/Assemblies/ElectricalEnclosure/ElectricalEnclosure_Fans1.cs @@ -73,7 +73,7 @@ public void OnExecute(StubManager stubManager) for (int i = 0; i<1000; i++) { - stubManager.Write("----------------------------------------\n"); + stubManager.Write("\n----------------------------------------\n"); // Fpga_Read_Reg(FPGA1, F1_Tacho_reg0, 0); stubManager.Write("\n"); // Fpga_Read_Reg(FPGA1, F1_Tacho_reg1, 1); stubManager.Write("\n"); // Fpga_Read_Reg(FPGA1, F1_Tacho_reg2, 1); stubManager.Write("\n"); @@ -83,61 +83,85 @@ public void OnExecute(StubManager stubManager) var RetVal=Fpga_Read_Reg(FPGA1, F1_Tacho_reg0, 0); stubManager.Write("\nFan5 Speed-"); stubManager.WriteHex(RetVal.Value,4); - - + if (RetVal.Value>0x440 && RetVal.Value<0x4d0) + stubManager.Write("\t Pass"); + else + stubManager.Write("\t Fail"); RetVal=Fpga_Read_Reg(FPGA1, F1_Tacho_reg1, 0); stubManager.Write("\nFan1 Speed-"); stubManager.WriteHex(RetVal.Value,4); + if (RetVal.Value>0x220 && RetVal.Value<0x300) + stubManager.Write("\t Pass"); + else + stubManager.Write("\t Fail"); + + + - RetVal = Fpga_Read_Reg(FPGA1, F1_gpi_FANS, 0); - Temp1=RetVal.Value & 0x0001; - if (Temp1 !=0x0001) - stubManager.Write("\tFan1 Running "); - else - stubManager.Write("\tFan1 Stop"); +// RetVal = Fpga_Read_Reg(FPGA1, F1_gpi_FANS, 0); +// Temp1=RetVal.Value & 0x0001; +// if (Temp1 !=0x0001) +// stubManager.Write("\tFan1 Running "); +// else +// stubManager.Write("\tFan1 Stop"); RetVal=Fpga_Read_Reg(FPGA1, F1_Tacho_reg2, 0); stubManager.Write("\nFan2 Speed-"); stubManager.WriteHex(RetVal.Value,4); + if (RetVal.Value>0x220 && RetVal.Value<0x300) + stubManager.Write("\t Pass"); + else + stubManager.Write("\t Fail"); + - Temp1=RetVal.Value & 0x0002; - if (Temp1 !=0x0002) - stubManager.Write("\tFan2 Running "); - else - stubManager.Write("\tFan2 Stop"); +// Temp1=RetVal.Value & 0x0002; +// if (Temp1 !=0x0002) +// stubManager.Write("\tFan2 Running "); +// else +// stubManager.Write("\tFan2 Stop"); RetVal=Fpga_Read_Reg(FPGA1, F1_Tacho_reg3, 0); stubManager.Write("\nFan3 Speed-"); stubManager.WriteHex(RetVal.Value,4); + if (RetVal.Value>0x220 && RetVal.Value<0x300) + stubManager.Write("\t Pass"); + else + stubManager.Write("\t Fail"); + - Temp1=RetVal.Value & 0x0004; - if (Temp1 !=0x0004) - stubManager.Write("\tFan3 Running "); - else - stubManager.Write("\tFan3 Stop"); +// Temp1=RetVal.Value & 0x0004; +// if (Temp1 !=0x0004) +// stubManager.Write("\tFan3 Running "); +// else +// stubManager.Write("\tFan3 Stop"); RetVal=Fpga_Read_Reg(FPGA1, F1_Tacho_reg4, 0); stubManager.Write("\nFan4 Speed-"); stubManager.WriteHex(RetVal.Value,4); + if (RetVal.Value>0x220 && RetVal.Value<0x300) + stubManager.Write("\t Pass"); + else + stubManager.Write("\t Fail"); + - Temp1=RetVal.Value & 0x0008; - if (Temp1 !=0x0008) - stubManager.Write("\tFan4 Running "); - else - stubManager.Write("\tFan4 Stop"); +// Temp1=RetVal.Value & 0x0008; +// if (Temp1 !=0x0008) +// stubManager.Write("\tFan4 Running "); +// else +// stubManager.Write("\tFan4 Stop"); - Fpga_Read_Reg(FPGA1, F1_Tacho_reg5, 1); stubManager.Write("\n"); - Fpga_Read_Reg(FPGA1, F1_Tacho_reg6, 1); stubManager.Write("\n"); - Fpga_Read_Reg(FPGA1, F1_Tacho_reg7, 1); stubManager.Write("\n"); - Fpga_Read_Reg(FPGA2, F2_Tacho_reg0, 1); stubManager.Write("\n"); +// Fpga_Read_Reg(FPGA1, F1_Tacho_reg5, 1); stubManager.Write("\n"); +// Fpga_Read_Reg(FPGA1, F1_Tacho_reg6, 1); stubManager.Write("\n"); +// Fpga_Read_Reg(FPGA1, F1_Tacho_reg7, 1); stubManager.Write("\n"); +// Fpga_Read_Reg(FPGA2, F2_Tacho_reg0, 1); stubManager.Write("\n"); //stubManager.Write("\n\n"); Thread.Sleep(1000); diff --git a/Software/Stubs Collection/stubs/Scripts/Assemblies/MidTank/DO_NOT_WORK_New_Calibrate_Midtank_pressure_sensors.cs b/Software/Stubs Collection/stubs/Scripts/Assemblies/MidTank/DO_NOT_WORK_New_Calibrate_Midtank_pressure_sensors.cs index 254a3143b..2acbe7d71 100644 --- a/Software/Stubs Collection/stubs/Scripts/Assemblies/MidTank/DO_NOT_WORK_New_Calibrate_Midtank_pressure_sensors.cs +++ b/Software/Stubs Collection/stubs/Scripts/Assemblies/MidTank/DO_NOT_WORK_New_Calibrate_Midtank_pressure_sensors.cs @@ -13,6 +13,7 @@ using Tango.PMR.EmbeddedParameters; using Tango.Stubs; //---------------------- +const double Slop=0.92; const double MIN_SLOP=0.7; const double MAX_SLOP=1.4; const double ERROR_SLOP=-1; @@ -39,6 +40,7 @@ private const string FILE_PATH = @"C:\MidTankLog\"; string File_name; double [,] voltage_array = new double[9,9]; string [] Parameter = new string[5] {"\t","Empty [V]","100cc [V]","800cc [V]"," b [L/V] "}; + double Full_Cartridge=1; // 1 litter less 100 cc //---------------------- const Int32 I2C_ID = 2; @@ -58,9 +60,11 @@ const Int32 I2C_ID = 2; public void OnExecute(StubManager stubManager) { Int32 midtankno = 0; - double Slop; - double Zero_Point; - + double Full_Point=0; //on Voltage + double resualt; + double Sum=0 ; + double Old_Sum=0 ; + if (!Directory.Exists(FILE_PATH)) { @@ -73,9 +77,9 @@ public void OnExecute(StubManager stubManager) stubManager.Write("\n"); Machine_SN = response; stubManager.WriteLine(Machine_SN); - File_name= FILE_PATH +Machine_SN + DateTime.Now.ToString("MM_dd_yyyy_HH_mm_ss")+".LOG"; + File_name= FILE_PATH +Machine_SN + DateTime.Now.ToString("MM_dd_yyyy_HH_mm_ss")+".csv"; stubManager.Write(File_name); - stubManager.WriteToFile(File_name,"MidTank S/N:" + Machine_SN); + stubManager.WriteToFile(File_name,"MidTank S/N:," + Machine_SN); // voltage_array[1,0]=1; // voltage_array[2,0]=2; @@ -91,59 +95,79 @@ public void OnExecute(StubManager stubManager) var response1 = stubManager.ShowResponseWindow("Enter Midtank number to calibrate (1-8):", ""); stubManager.WriteLine(response1); midtankno = Int32.Parse(response1); - stubManager.WriteToFile(File_name,"MidTank Number:\t" + response1); + stubManager.AppendToFile(File_name,"MidTank Number:\t" + response1); - string box_msg = "Please Insert cartridge "; + string box_msg = "Please Insert cartridge with 1000cc except Lubbricant add 500cc only "; // string box_title = "Midatnk empty"; // MessageBox.Show(box_msg, box_title); MessageBox.Show(box_msg); - open_valve(midtankno,1,1) ; //open Air valve - open_valve(midtankno,0,1) ; //open Ink valve - - - - - - - - + open_valve(midtankno,1,1) ; //open Air valve + open_valve(midtankno,0,1) ; //open Ink valve + Int32 i=0; + while (i<60*15) //check for 15 minitus + { + Sum=0; + for (Int32 j=0;j<30;j++) + { + resualt=read_pressure_sensor(midtankno); + stubManager.AppendToFile(File_name,resualt+",mV"); + Sum=Sum+resualt; + Thread.Sleep(1000); + } + i=i+1; + if (Sum>Old_Sum) + Old_Sum=Sum-Old_Sum; + else + Old_Sum=Old_Sum-Sum; + + if ( Old_Sum <0.02) + i=60*15; //end + Old_Sum=Sum; + } + Full_Point=Sum/30; + box_msg = "Send file" + File_name +"to Mati"; + MessageBox.Show(box_msg); - stubManager.Run("StubFpgaWriteRegRequest" ,F3_VALVE_OUT, 0x000f); // open all valve air of midtank and close all ink of midtank - Thread.Sleep(500); - stubManager.Run("StubFpgaWriteRegRequest" ,F3_VALVE_OUT, 0x00ff); // open all valve air of midtank and close all ink of midtank - Thread.Sleep(500); - stubManager.Run("StubFpgaWriteRegRequest" ,F3_VALVE_OUT, 0x0fff); // open all valve air of midtank and close all ink of midtank - Thread.Sleep(500); - stubManager.Run("stubFpgaWriteRegRequest" ,F3_VALVE_OUT, 0xffff); // open all valve air and ink of midtank - Thread.Sleep(2500); - - Thread.Sleep(1000); + // stubManager.Run("StubFpgaWriteRegRequest" ,F3_VALVE_OUT, 0x000f); // open all valve air of midtank and close all ink of midtank + // Thread.Sleep(500); + // stubManager.Run("StubFpgaWriteRegRequest" ,F3_VALVE_OUT, 0x00ff); // open all valve air of midtank and close all ink of midtank + // Thread.Sleep(500); + // stubManager.Run("StubFpgaWriteRegRequest" ,F3_VALVE_OUT, 0x0fff); // open all valve air of midtank and close all ink of midtank + // Thread.Sleep(500); + // stubManager.Run("stubFpgaWriteRegRequest" ,F3_VALVE_OUT, 0xffff); // open all valve air and ink of midtank + // + // Thread.Sleep(2500); + + // Thread.Sleep(1000); - read_pressure_sensor(1); + // read_pressure_sensor(1); - box_msg ="Insert 100cc of appropriate ink/lube to each midtank\n\t1.black ink\n\t2. Magenta ink\n\t3. Transparent ink\n\t4. Cleaner\n\t5. Cyan ink\n\t6. Yellow ink\n\t7. Spot color\n\t8. Lubricant/n"; - MessageBox.Show(box_msg); - - read_pressure_sensor(2); + // box_msg ="Insert 100cc of appropriate ink/lube to each midtank\n\t1.black ink\n\t2. Magenta ink\n\t3. Transparent ink\n\t4. Cleaner\n\t5. Cyan ink\n\t6. Yellow ink\n\t7. Spot color\n\t8. Lubricant/n"; + // MessageBox.Show(box_msg); +// + // read_pressure_sensor(2); // voltage_array[3,2]=2.5; - box_msg = "Add another 700cc for ink and TI \nFor Lubbricant add 500cc only."; - MessageBox.Show(box_msg); - read_pressure_sensor(3); - stubManager.Run("stubFpgaWriteRegRequest" ,F3_VALVE_OUT, 0x0000); // close all valve air and ink of midtank +// box_msg = "Add another 700cc for ink and TI \nFor Lubbricant add 500cc only."; +// MessageBox.Show(box_msg); +// read_pressure_sensor(3); +// stubManager.Run("stubFpgaWriteRegRequest" ,F3_VALVE_OUT, 0x0000); // close all valve air and ink of midtank // voltage_array[3,3]=4.5; + close_valve(midtankno,1,1) ; //close Air valve + close_valve(midtankno,0,1) ; //close Ink valve - calc_slop(); - print_table(); +// calc_slop(); +// print_table(); - insert_slop_t_eeprom(); +// insert_slop_t_eeprom(Full_Point, midtankno); + insert_slop_t_eeprom(Full_Point, midtankno); box_msg ="Turn Power Off and On to finish the calibration."; MessageBox.Show(box_msg); @@ -178,54 +202,55 @@ int calc_slop() } - int insert_slop_t_eeprom() + int insert_slop_t_eeprom( double FullPoint,Int32 midtankno) { - stubManager.Write("\n "); +// stubManager.Write("\n "); MidTankDataSetupRequest midTankDataSetupRequest = new MidTankDataSetupRequest(); - for (uint i=1;i<9;i++) - { - if (voltage_array[i,4]!= ERROR_SLOP) - { +// for (uint i=1;i<9;i++) +// { +// if (voltage_array[i,4]!= ERROR_SLOP) +// { MidTankData midTankData = new MidTankData(); - midTankData.MidTankId = i-1; - midTankData.InitialOffsetA = voltage_array[i,2]; - midTankData.SlopeB = voltage_array[i,4]; + midTankData.MidTankId = Convert.ToUInt32 (midtankno-1); + midTankData.InitialOffsetA =FullPoint - (Full_Cartridge-0.1)/Slop; + midTankData.SlopeB = Slop; - stubManager.Write("\nMidtank No:" + i+ "=\tA="+voltage_array[i,2]+"\tSlop="+voltage_array[i,4]); + stubManager.Write("\nMidtank No:" + midtankno + "=\tVoltage Zero is ="+(FullPoint - (Full_Cartridge-0.1)/Slop)+"\tSlop="+ Slop); + stubManager.AppendToFile(File_name,"\nMidtank No:" + midtankno + "=\tVoltage Zero is ="+(FullPoint - (Full_Cartridge-0.1)/Slop)+"\tSlop="+ Slop); midTankDataSetupRequest.MidTankInfo.Add(midTankData); - } + // } var response = stubManager.Run(midTankDataSetupRequest); - } + //} return 1; } - - -int print_table() - { - - for (uint i=0;i<5;i++) - { - stubManager.AppendToFile(File_name,Parameter[i]+"\t"+voltage_array[1,i]+"\t"+voltage_array[2,i]+"\t"+voltage_array[3,i]+"\t"+voltage_array[4,i]+"\t"+voltage_array[5,i]+"\t"+voltage_array[6,i]+"\t"+voltage_array[7,i]+"\t"+voltage_array[8,i]) ; - } - - - return 1; - - } - - +// +// +//int print_table() +// { +// +// for (uint i=0;i<5;i++) +// { +// stubManager.AppendToFile(File_name,Parameter[i]+"\t"+voltage_array[1,i]+"\t"+voltage_array[2,i]+"\t"+voltage_array[3,i]+"\t"+voltage_array[4,i]+"\t"+voltage_array[5,i]+"\t"+voltage_array[6,i]+"\t"+voltage_array[7,i]+"\t"+voltage_array[8,i]) ; +// } +// +// +// return 1; +// +// } + +//start mat int adc_configuration(uint I2C_Slave_Add,uint channel ) { @@ -261,7 +286,7 @@ int adc_set_for_read_ch(uint I2C_Slave_Add) -int adc_read_ch(uint I2C_Slave_Add,uint table_index_x,uint table_index_y) +double adc_read_ch(uint I2C_Slave_Add) { StubI2CReadBytesRequest stubI2CReadBytesRequest = new StubI2CReadBytesRequest(); stubI2CReadBytesRequest.I2CId = I2C_ID; @@ -281,67 +306,80 @@ int adc_read_ch(uint I2C_Slave_Add,uint table_index_x,uint table_index_y) temp=temp & 0x0fff; calc = (double)temp *2.5 / 4096.0; - stubManager.Write("ADC [volts]:\t"); - stubManager.Write(calc+"\t"); +// stubManager.Write("ADC [volts]:\t"); +// stubManager.Write(calc+"\t"); calc1 = (1.96- calc) * 4.64 + 1.96; stubManager.Write("Vsensor [volts]:\t"); - stubManager.Write(calc1); + stubManager.Write(calc1 + "\n"); - voltage_array[table_index_x,table_index_y]=calc1; + // voltage_array[table_index_x,table_index_y]=calc1; - return 1; + return calc1; } -int read_pressure_sensor(uint i ) +double read_pressure_sensor(Int32 i ) { - - stubManager.Write("\n-----------MIDTANK_PRESSESENS-------test_no= "+i); - - stubManager.Write("\n1_1= "); +double resualt =0 ; + switch (i) + { + case 1: + adc_configuration(0x44,0x20); //a2d_address 0x44 channel channel 2 + adc_set_for_read_ch(0x44); + resualt=adc_read_ch(0x44); + break; - adc_configuration(0x44,0x20); //a2d_address 0x44 channel channel 2 - adc_set_for_read_ch(0x44); - adc_read_ch(0x44,1,i); - - stubManager.Write("\n2_1= "); - adc_configuration(0x44,0x08); //a2d_address 0x44 channel channel 4 - adc_set_for_read_ch(0x44); - adc_read_ch(0x44,2,i); - - stubManager.Write("\n3_1= "); - adc_configuration(0x46,0x80); //a2d_address 0x46 channel channel 0 - adc_set_for_read_ch(0x46); - adc_read_ch(0x46,3,i); - - stubManager.Write("\n4_1= "); - adc_configuration(0x46,0x20); //a2d_address 0x46 channel channel 2 - adc_set_for_read_ch(0x46); - adc_read_ch(0x46,4,i); + case 2: + adc_configuration(0x44,0x08); //a2d_address 0x44 channel channel 4 + adc_set_for_read_ch(0x44); + resualt=adc_read_ch(0x44); + break; - stubManager.Write("\n1_2= "); - adc_configuration(0x44,0x10); //a2d_address 0x44 channel channel 3 - adc_set_for_read_ch(0x44); - adc_read_ch(0x44,5,i); - - stubManager.Write("\n2_2= "); - adc_configuration(0x44,0x04); //a2d_address 0x44 channel channel 5 - adc_set_for_read_ch(0x44); - adc_read_ch(0x44,6,i); - - stubManager.Write("\n3_2= "); - adc_configuration(0x46,0x40); //a2d_address 0x46 channel channel 1 - adc_set_for_read_ch(0x46); - adc_read_ch(0x46,7,i); - - stubManager.Write("\n4_2= "); - adc_configuration(0x46,0x10); //a2d_address 0x46 channel channel 3 - adc_set_for_read_ch(0x46); - adc_read_ch(0x46,8,i); + case 3: + adc_configuration(0x46,0x80); //a2d_address 0x46 channel channel 0 + adc_set_for_read_ch(0x46); + resualt=adc_read_ch(0x46); + break; - return 1; + case 4: + adc_configuration(0x46,0x20); //a2d_address 0x46 channel channel 2 + adc_set_for_read_ch(0x46); + resualt=adc_read_ch(0x46); + break; + + case 5: + adc_configuration(0x44,0x10); //a2d_address 0x44 channel channel 3 + adc_set_for_read_ch(0x44); + resualt=adc_read_ch(0x44); + break; + + case 6: + adc_configuration(0x44,0x04); //a2d_address 0x44 channel channel 5 + adc_set_for_read_ch(0x44); + resualt=adc_read_ch(0x44); + break; + + case 7: + adc_configuration(0x46,0x40); //a2d_address 0x46 channel channel 1 + adc_set_for_read_ch(0x46); + resualt=adc_read_ch(0x46); + break; + + case 8: + adc_configuration(0x46,0x10); //a2d_address 0x46 channel channel 3 + adc_set_for_read_ch(0x46); + resualt=adc_read_ch(0x46); + break; + + default: + stubManager.Write("Error"); + + break; + } + + return resualt; } -//strat mat + //-------------------------------- int open_valve (int valve_nm,int valve_type,int check_valve) //valve_type=0 is Air ,1 is Ink ; check_valve=1 send feedbak diff --git a/Software/Stubs Collection/stubs/Scripts/Assemblies/MidTank/New_Calibrate_Midtank_pressure_sensors.cs b/Software/Stubs Collection/stubs/Scripts/Assemblies/MidTank/New_Calibrate_Midtank_pressure_sensors.cs new file mode 100644 index 000000000..62d0e017f --- /dev/null +++ b/Software/Stubs Collection/stubs/Scripts/Assemblies/MidTank/New_Calibrate_Midtank_pressure_sensors.cs @@ -0,0 +1,393 @@ +using System; +using System.IO; +using System.Text; +using System.Linq; +using System.Drawing; +using System.Diagnostics; +using System.Windows.Forms; +using System.Threading; +using System.Threading.Tasks; +using System.Collections.Generic; +using Tango.PMR.Stubs; +using Tango.PMR.EmbeddedParameters; +using Tango.Stubs; + +//---------------------- +const double MIN_SLOP=0.7; +const double MAX_SLOP=1.4; +const double ERROR_SLOP=-1; +const double MIN_50cc_on_volt=2.3; +const double MAX_50cc_on_volt=3.2; +const double ERROR_50cc_on_volt=-1; + +int [] Convert_Midtank_No = new Int32 [8] {1,3,5,7,2,4,6,8}; +uint [,] ADC_Add_Chnl = new uint [8,2] { + {0x44,0x20}, + {0x44,0x08}, + {0x46,0x80}, + {0x46,0x20}, + {0x44,0x10}, + {0x44,0x04}, + {0x46,0x40}, + {0x46,0x10}, + }; + + +const Int32 F3_VALVE_OUT = 0x600008E2 ; +string Machine_SN ; +private const string FILE_PATH = @"C:\MidTankLog\"; +string File_name; +double Full_Cartridge=1000; // on CC +double Slop=0.92; + +//---------------------- +const Int32 I2C_ID = 2; +//const Int32 I2C_Slave_Add = 0x46; //must be 0x40, 0x44 or 0x46 +//---------------------- + + +public void OnExecute(StubManager stubManager) +{ + Int32 midtankno = 0; + double Full_Point=0; //on Voltage + double resualt; + double Sum=0 ; + double Old_Sum=0 ; + + + if (!Directory.Exists(FILE_PATH)) + { + Directory.CreateDirectory(FILE_PATH); + } + + + + var response = stubManager.ShowResponseWindow("Enter Midtank S/N: ", ""); + stubManager.Write("\n"); + Machine_SN = response; + stubManager.WriteLine(Machine_SN); + File_name= FILE_PATH +Machine_SN + DateTime.Now.ToString("MM_dd_yyyy_HH_mm_ss")+".csv"; + stubManager.Write(File_name); + stubManager.WriteToFile(File_name,"MidTank S/N:," + Machine_SN); + + + var response1 = stubManager.ShowResponseWindow("Enter Midtank number to calibrate (1-8):", ""); + stubManager.WriteLine(response1); + midtankno = Int32.Parse(response1); + stubManager.AppendToFile(File_name,"MidTank Number:\t" + response1); + if (midtankno==8) + Slop=1; + else + Slop=0.92; + + var response10 = stubManager.ShowResponseWindow("Enter Cartridge Valume on CC (500-1500):", ""); + stubManager.WriteLine(response10); + Full_Cartridge = double.Parse(response10); + stubManager.AppendToFile(File_name,"Cartridge Valume:\t" + response10); + stubManager.AppendToFile(File_name,"Slop value:\t" + Slop); + + + DialogResult result = MessageBox.Show("Are you sure to calibrate Midtank No: "+ midtankno + " with "+ Full_Cartridge +" CC" , "Warning",MessageBoxButtons.YesNo); + if(result == DialogResult.Yes) + { + + + + string box_msg = "Please Insert cartridge "; + + MessageBox.Show(box_msg); + + open_valve(midtankno,1,1) ; //open Air valve + open_valve(midtankno,0,1) ; //open Ink valve + Int32 i=0; + while (i<60*15) //check for 15 minitus + { + Sum=0; + for (Int32 j=0;j<30;j++) + { + resualt=read_pressure_sensor(midtankno); + stubManager.AppendToFile(File_name,resualt+",V"); + Sum=Sum+resualt; + Thread.Sleep(1000); + } + i=i+1; + if (Sum>Old_Sum) + Old_Sum=Sum-Old_Sum; + else + Old_Sum=Old_Sum-Sum; + + if ( Old_Sum <0.02) + i=60*15; //end + Old_Sum=Sum; + } + Full_Point=Sum/30; + + + close_valve(midtankno,1,1) ; //close Air valve + close_valve(midtankno,0,1) ; //close Ink valve + + + insert_slop_t_eeprom(Full_Point, midtankno); + box_msg ="Turn Power Off and On to finish the calibration."; + MessageBox.Show(box_msg); + } + + +} + + + int insert_slop_t_eeprom( double FullPoint,Int32 midtankno) +{ +// stubManager.Write("\n "); + + MidTankDataSetupRequest midTankDataSetupRequest = new MidTankDataSetupRequest(); + + MidTankData midTankData = new MidTankData(); + midTankData.MidTankId = Convert.ToUInt32 (midtankno-1); + midTankData.InitialOffsetA =FullPoint - (Full_Cartridge/1000-0.1)/Slop; + midTankData.SlopeB = Slop; + + stubManager.Write("\nMidtank No:" + midtankno + "=\tVoltage Zero is ="+(FullPoint - (Full_Cartridge/1000-0.1)/Slop)+"\tSlop="+ Slop); + stubManager.AppendToFile(File_name,"\nMidtank No:" + midtankno + "=\tVoltage Zero is ="+(FullPoint - (Full_Cartridge/1000-0.1)/Slop)+"\tSlop="+ Slop); + + + midTankDataSetupRequest.MidTankInfo.Add(midTankData); + + +var response = stubManager.Run(midTankDataSetupRequest); + +return 1; +} + + +int adc_configuration(uint I2C_Slave_Add,uint channel ) + { + StubI2CWriteBytesRequest stubI2CWriteBytesRequest = new StubI2CWriteBytesRequest(); + stubI2CWriteBytesRequest.I2CId = I2C_ID; + stubI2CWriteBytesRequest.SlaveAddress = I2C_Slave_Add; + + UInt32 uInt32 = new UInt32(); + stubI2CWriteBytesRequest.BytesTWrite.Add(0x00);//Byte 0 to write + stubI2CWriteBytesRequest.BytesTWrite.Add(channel);//Byte 1 to Write, must be 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02 or 0x01 for different channels + stubI2CWriteBytesRequest.BytesTWrite.Add(0x80);//Byte 2 to Write + + var response = stubManager.Run(stubI2CWriteBytesRequest); + + return 1; + } + + +int adc_set_for_read_ch(uint I2C_Slave_Add) + { + StubI2CWriteBytesRequest stubI2CWriteBytesRequest = new StubI2CWriteBytesRequest(); + stubI2CWriteBytesRequest.I2CId = I2C_ID; + stubI2CWriteBytesRequest.SlaveAddress = I2C_Slave_Add; + + UInt32 uInt32 = new UInt32(); + stubI2CWriteBytesRequest.BytesTWrite.Add(0x01);//Byte 0 to write + + var response = stubManager.Run(stubI2CWriteBytesRequest); + + return 1; + } + + + + +double adc_read_ch(uint I2C_Slave_Add) + { + StubI2CReadBytesRequest stubI2CReadBytesRequest = new StubI2CReadBytesRequest(); + stubI2CReadBytesRequest.I2CId = I2C_ID; + stubI2CReadBytesRequest.SlaveAddress = I2C_Slave_Add; + stubI2CReadBytesRequest.NumberOfBytesToRead = 2; // Number of bytes to read + + var response1 = stubManager.Run(stubI2CReadBytesRequest); + uint temph=0; + uint templ=0; + uint temp; + double calc; + double calc1; + double calc2; + temph=response1.ReadBytes[0]; + templ=response1.ReadBytes[1]; + temp = (temph << 8) | templ; + temp=temp & 0x0fff; + + calc = (double)temp *2.5 / 4096.0; + + calc1 = (1.96- calc) * 4.64 + 1.96; + stubManager.Write("Vsensor [volts]:\t"); + stubManager.Write(calc1 + "\n"); + + + return calc1; + } + +double read_pressure_sensor(Int32 i ) + { +double resualt =0 ; + switch (i) + { + case 1: + adc_configuration(0x44,0x20); //a2d_address 0x44 channel channel 2 + adc_set_for_read_ch(0x44); + resualt=adc_read_ch(0x44); + break; + + case 2: + adc_configuration(0x44,0x08); //a2d_address 0x44 channel channel 4 + adc_set_for_read_ch(0x44); + resualt=adc_read_ch(0x44); + break; + + case 3: + adc_configuration(0x46,0x80); //a2d_address 0x46 channel channel 0 + adc_set_for_read_ch(0x46); + resualt=adc_read_ch(0x46); + break; + + case 4: + adc_configuration(0x46,0x20); //a2d_address 0x46 channel channel 2 + adc_set_for_read_ch(0x46); + resualt=adc_read_ch(0x46); + break; + + case 5: + adc_configuration(0x44,0x10); //a2d_address 0x44 channel channel 3 + adc_set_for_read_ch(0x44); + resualt=adc_read_ch(0x44); + break; + + case 6: + adc_configuration(0x44,0x04); //a2d_address 0x44 channel channel 5 + adc_set_for_read_ch(0x44); + resualt=adc_read_ch(0x44); + break; + + case 7: + adc_configuration(0x46,0x40); //a2d_address 0x46 channel channel 1 + adc_set_for_read_ch(0x46); + resualt=adc_read_ch(0x46); + break; + + case 8: + adc_configuration(0x46,0x10); //a2d_address 0x46 channel channel 3 + adc_set_for_read_ch(0x46); + resualt=adc_read_ch(0x46); + break; + + default: + stubManager.Write("Error"); + + break; + } + + return resualt; + } + + +//-------------------------------- +int open_valve (int valve_nm,int valve_type,int check_valve) //valve_type=0 is Air ,1 is Ink ; check_valve=1 send feedbak +{ + int temp1=Convert_Midtank_No[valve_nm-1] ; + + string temp; + SetBit (F3_VALVE_OUT,(((valve_type+1)*8)- temp1), 1); + + if (check_valve!=0) + { + temp="Air"; + if (valve_type==1) + temp="Ink"; + + DialogResult result = MessageBox.Show("Did " + temp + "Valve of Midtank " + valve_nm +" open?", "Warning",MessageBoxButtons.YesNo); + if(result == DialogResult.No) + { +// Units_status[(valve_nm-1)*3+valve_type,1]="Fail"; + stubManager.Write(temp +"Valve\tFail\n"); + return 0; + } + else + { +// Units_status[(valve_nm-1)*3+valve_type,1]="Pass"; + stubManager.Write(temp +"Valve\tOpen\n"); + return 1; + } + + } + return 1; + +} +//-------------------------------- +int close_valve (int valve_nm,int valve_type,int check_valve) +{ + int temp1=Convert_Midtank_No[valve_nm-1]; + + string temp; + SetBit (F3_VALVE_OUT,(((valve_type+1)*8)- temp1), 0); + if (check_valve!=0) + { + temp="Air"; + if (valve_type==1) + temp="Ink"; + + DialogResult result = MessageBox.Show("Did " + temp +" Valve of Midtank " + valve_nm +" close?", "Warning",MessageBoxButtons.YesNo); + if(result == DialogResult.No) + { +// Units_status[(valve_nm-1)*3+valve_type,1]="Fail"; + stubManager.Write(temp +"Valve\tFail\n"); + return 0; + } + else + { +// Units_status[(valve_nm-1)*3+valve_type,1]="Pass"; + stubManager.Write(temp +"Valve\tclose\n"); + return 1; + } + } + return 1; + +} + +public Int32 SetBit(Int32 Adr, Int32 BitNo, Int32 Bit) +{ + Int32 BitMask; + var RetVal = Fpga_Read_Reg(Adr); + Int32 RV = (Int32) RetVal.Value; + + if (Bit == 0x1) + { + BitMask = 0x1 << BitNo; + RV = RV | BitMask; + Fpga_Write_Reg( Adr, RV ); + } + else if (Bit == 0x0) + { + BitMask = ~(0x1 << BitNo); + RV = RV & BitMask; + Fpga_Write_Reg(Adr, RV ); + } + return 1; +} + +int Fpga_Write_Reg(Int32 Addr, Int32 Data) +{ + var response = stubManager.Run("StubFpgaWriteRegRequest" ,Addr, Data); + + return 1; +} + + + +StubFpgaReadRegResponse Fpga_Read_Reg(Int32 Addr) +{ + var response = stubManager.Run("StubFpgaReadRegRequest" ,Addr); + response.Value = response.Value & 0xffff; + + return response; +} + + + + +//end mati \ No newline at end of file diff --git a/Software/Stubs Collection/stubs/Scripts/Assemblies/MidTank/New_Calibrate_Midtank_pressure_sensors1.cs b/Software/Stubs Collection/stubs/Scripts/Assemblies/MidTank/New_Calibrate_Midtank_pressure_sensors1.cs new file mode 100644 index 000000000..9edb49e03 --- /dev/null +++ b/Software/Stubs Collection/stubs/Scripts/Assemblies/MidTank/New_Calibrate_Midtank_pressure_sensors1.cs @@ -0,0 +1,423 @@ +using System; +using System.IO; +using System.Text; +using System.Linq; +using System.Drawing; +using System.Diagnostics; +using System.Windows.Forms; +using System.Threading; +using System.Threading.Tasks; +using System.Collections.Generic; +using Tango.PMR.Stubs; +using Tango.PMR.EmbeddedParameters; +using Tango.Stubs; + +//---------------------- +const double MIN_SLOP=0.7; +const double MAX_SLOP=1.4; +const double ERROR_SLOP=-1; +const double MIN_50cc_on_volt=2.3; +const double MAX_50cc_on_volt=3.2; +const double ERROR_50cc_on_volt=-1; + +int [] Convert_Midtank_No = new Int32 [8] {1,3,5,7,2,4,6,8}; +uint [,] ADC_Add_Chnl = new uint [8,2] { + {0x44,0x20}, + {0x44,0x08}, + {0x46,0x80}, + {0x46,0x20}, + {0x44,0x10}, + {0x44,0x04}, + {0x46,0x40}, + {0x46,0x10}, + }; + + +const Int32 F3_VALVE_OUT = 0x600008E2 ; +string Machine_SN ; +private const string FILE_PATH = @"C:\MidTankLog\"; +string File_name; +double Full_Cartridge=1000; // on CC +double Slop=0.92; + +//---------------------- +const Int32 I2C_ID = 2; +//const Int32 I2C_Slave_Add = 0x46; //must be 0x40, 0x44 or 0x46 +//---------------------- + + +public void OnExecute(StubManager stubManager) +{ + Int32 Timout ; + Int32 Interval; + Int32 midtankno = 0; + double Full_Point=0; //on Voltage + double resualt; + double Sum=0 ; + double Old_Sum=0 ; + + + if (!Directory.Exists(FILE_PATH)) + { + Directory.CreateDirectory(FILE_PATH); + } + + + + var response = stubManager.ShowResponseWindow("Enter Midtank S/N: ", ""); + stubManager.Write("\n"); + Machine_SN = response; + stubManager.WriteLine(Machine_SN); + File_name= FILE_PATH +Machine_SN + DateTime.Now.ToString("MM_dd_yyyy_HH_mm_ss")+".csv"; + stubManager.Write(File_name); + stubManager.WriteToFile(File_name,"MidTank S/N:," + Machine_SN); + + + var response1 = stubManager.ShowResponseWindow("Enter Midtank number to calibrate (1-8):", ""); + stubManager.WriteLine(response1); + midtankno = Int32.Parse(response1); + stubManager.AppendToFile(File_name,"MidTank Number:\t" + response1); + if (midtankno==8) + { + Slop=1; + Timout=60; //60 minutes + Interval=60; //60 second + } + else + { + Slop=0.92; + Timout=10*2; //10 minutes + Interval=30; //30 second + + } + var response10 = stubManager.ShowResponseWindow("Enter Cartridge Valume on CC (500-1500):", ""); + stubManager.WriteLine(response10); + Full_Cartridge = double.Parse(response10); + stubManager.AppendToFile(File_name,"Cartridge Valume:\t" + response10); + stubManager.AppendToFile(File_name,"Slop value:\t" + Slop); + + + DialogResult result = MessageBox.Show("Are you sure to calibrate Midtank No: "+ midtankno + " with "+ Full_Cartridge +" CC" , "Warning",MessageBoxButtons.YesNo); + if(result == DialogResult.Yes) + { + + + + string box_msg = "Please Insert cartridge "; + + MessageBox.Show(box_msg); + + open_valve(midtankno,1,1) ; //open Air valve + open_valve(midtankno,0,1) ; //open Ink valve + Int32 i=0; + while (iOld_Sum) + Old_Sum=Sum-Old_Sum; + else + Old_Sum=Old_Sum-Sum; + + if ((check_valve(midtankno,1) == 0) && (check_valve(midtankno,0) == 0)) + { + i++; + if ( Old_Sum <0.02) + i=Timout; //end + Old_Sum=Sum; + } + else + { + open_valve(midtankno,1,0) ; //open Air valve + open_valve(midtankno,0,0) ; //open Ink valve + Old_Sum=0; + } + } + Full_Point=Sum/Interval; + + + close_valve(midtankno,1,1) ; //close Air valve + close_valve(midtankno,0,1) ; //close Ink valve + + + insert_slop_t_eeprom(Full_Point, midtankno); + box_msg ="Turn Power Off and On to finish the calibration."; + MessageBox.Show(box_msg); + } + + +} + + + int insert_slop_t_eeprom( double FullPoint,Int32 midtankno) +{ +// stubManager.Write("\n "); + + MidTankDataSetupRequest midTankDataSetupRequest = new MidTankDataSetupRequest(); + + MidTankData midTankData = new MidTankData(); + midTankData.MidTankId = Convert.ToUInt32 (midtankno-1); + midTankData.InitialOffsetA =FullPoint - (Full_Cartridge/1000-0.1)/Slop; + midTankData.SlopeB = Slop; + + stubManager.Write("\nMidtank No:" + midtankno + "=\tVoltage Zero is ="+(FullPoint - (Full_Cartridge/1000-0.1)/Slop)+"\tSlop="+ Slop); + stubManager.AppendToFile(File_name,"\nMidtank No:" + midtankno + "=\tVoltage Zero is ="+(FullPoint - (Full_Cartridge/1000-0.1)/Slop)+"\tSlop="+ Slop); + + + midTankDataSetupRequest.MidTankInfo.Add(midTankData); + + +var response = stubManager.Run(midTankDataSetupRequest); + +return 1; +} + + +int adc_configuration(uint I2C_Slave_Add,uint channel ) + { + StubI2CWriteBytesRequest stubI2CWriteBytesRequest = new StubI2CWriteBytesRequest(); + stubI2CWriteBytesRequest.I2CId = I2C_ID; + stubI2CWriteBytesRequest.SlaveAddress = I2C_Slave_Add; + + UInt32 uInt32 = new UInt32(); + stubI2CWriteBytesRequest.BytesTWrite.Add(0x00);//Byte 0 to write + stubI2CWriteBytesRequest.BytesTWrite.Add(channel);//Byte 1 to Write, must be 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02 or 0x01 for different channels + stubI2CWriteBytesRequest.BytesTWrite.Add(0x80);//Byte 2 to Write + + var response = stubManager.Run(stubI2CWriteBytesRequest); + + return 1; + } + + +int adc_set_for_read_ch(uint I2C_Slave_Add) + { + StubI2CWriteBytesRequest stubI2CWriteBytesRequest = new StubI2CWriteBytesRequest(); + stubI2CWriteBytesRequest.I2CId = I2C_ID; + stubI2CWriteBytesRequest.SlaveAddress = I2C_Slave_Add; + + UInt32 uInt32 = new UInt32(); + stubI2CWriteBytesRequest.BytesTWrite.Add(0x01);//Byte 0 to write + + var response = stubManager.Run(stubI2CWriteBytesRequest); + + return 1; + } + + + + +double adc_read_ch(uint I2C_Slave_Add) + { + StubI2CReadBytesRequest stubI2CReadBytesRequest = new StubI2CReadBytesRequest(); + stubI2CReadBytesRequest.I2CId = I2C_ID; + stubI2CReadBytesRequest.SlaveAddress = I2C_Slave_Add; + stubI2CReadBytesRequest.NumberOfBytesToRead = 2; // Number of bytes to read + + var response1 = stubManager.Run(stubI2CReadBytesRequest); + uint temph=0; + uint templ=0; + uint temp; + double calc; + double calc1; + double calc2; + temph=response1.ReadBytes[0]; + templ=response1.ReadBytes[1]; + temp = (temph << 8) | templ; + temp=temp & 0x0fff; + + calc = (double)temp *2.5 / 4096.0; + + calc1 = (1.96- calc) * 4.64 + 1.96; + stubManager.Write("Vsensor [volts]:\t"); + stubManager.Write(calc1 + "\n"); + + + return calc1; + } + +double read_pressure_sensor(Int32 i ) + { +double resualt =0 ; + switch (i) + { + case 1: + adc_configuration(0x44,0x20); //a2d_address 0x44 channel channel 2 + adc_set_for_read_ch(0x44); + resualt=adc_read_ch(0x44); + break; + + case 2: + adc_configuration(0x44,0x08); //a2d_address 0x44 channel channel 4 + adc_set_for_read_ch(0x44); + resualt=adc_read_ch(0x44); + break; + + case 3: + adc_configuration(0x46,0x80); //a2d_address 0x46 channel channel 0 + adc_set_for_read_ch(0x46); + resualt=adc_read_ch(0x46); + break; + + case 4: + adc_configuration(0x46,0x20); //a2d_address 0x46 channel channel 2 + adc_set_for_read_ch(0x46); + resualt=adc_read_ch(0x46); + break; + + case 5: + adc_configuration(0x44,0x10); //a2d_address 0x44 channel channel 3 + adc_set_for_read_ch(0x44); + resualt=adc_read_ch(0x44); + break; + + case 6: + adc_configuration(0x44,0x04); //a2d_address 0x44 channel channel 5 + adc_set_for_read_ch(0x44); + resualt=adc_read_ch(0x44); + break; + + case 7: + adc_configuration(0x46,0x40); //a2d_address 0x46 channel channel 1 + adc_set_for_read_ch(0x46); + resualt=adc_read_ch(0x46); + break; + + case 8: + adc_configuration(0x46,0x10); //a2d_address 0x46 channel channel 3 + adc_set_for_read_ch(0x46); + resualt=adc_read_ch(0x46); + break; + + default: + stubManager.Write("Error"); + + break; + } + + return resualt; + } + + +//-------------------------------- +int open_valve (int valve_nm,int valve_type,int check_valve) //valve_type=0 is Air ,1 is Ink ; check_valve=1 send feedbak +{ + int temp1=Convert_Midtank_No[valve_nm-1] ; + + string temp; + SetBit (F3_VALVE_OUT,(((valve_type+1)*8)- temp1), 1); + + if (check_valve!=0) + { + temp="Air"; + if (valve_type==1) + temp="Ink"; + + DialogResult result = MessageBox.Show("Did " + temp + "Valve of Midtank " + valve_nm +" open?", "Warning",MessageBoxButtons.YesNo); + if(result == DialogResult.No) + { +// Units_status[(valve_nm-1)*3+valve_type,1]="Fail"; + stubManager.Write(temp +"Valve\tFail\n"); + return 0; + } + else + { +// Units_status[(valve_nm-1)*3+valve_type,1]="Pass"; + stubManager.Write(temp +"Valve\tOpen\n"); + return 1; + } + + } + return 1; + +} +//-------------------------------- +int close_valve (int valve_nm,int valve_type,int check_valve) +{ + int temp1=Convert_Midtank_No[valve_nm-1]; + + string temp; + SetBit (F3_VALVE_OUT,(((valve_type+1)*8)- temp1), 0); + if (check_valve!=0) + { + temp="Air"; + if (valve_type==1) + temp="Ink"; + + DialogResult result = MessageBox.Show("Did " + temp +" Valve of Midtank " + valve_nm +" close?", "Warning",MessageBoxButtons.YesNo); + if(result == DialogResult.No) + { +// Units_status[(valve_nm-1)*3+valve_type,1]="Fail"; + stubManager.Write(temp +"Valve\tFail\n"); + return 0; + } + else + { +// Units_status[(valve_nm-1)*3+valve_type,1]="Pass"; + stubManager.Write(temp +"Valve\tclose\n"); + return 1; + } + } + return 1; + +} + +public Int32 SetBit(Int32 Adr, Int32 BitNo, Int32 Bit) +{ + Int32 BitMask; + var RetVal = Fpga_Read_Reg(Adr); + Int32 RV = (Int32) RetVal.Value; + + if (Bit == 0x1) + { + BitMask = 0x1 << BitNo; + RV = RV | BitMask; + Fpga_Write_Reg( Adr, RV ); + } + else if (Bit == 0x0) + { + BitMask = ~(0x1 << BitNo); + RV = RV & BitMask; + Fpga_Write_Reg(Adr, RV ); + } + return 1; +} + +int Fpga_Write_Reg(Int32 Addr, Int32 Data) +{ + var response = stubManager.Run("StubFpgaWriteRegRequest" ,Addr, Data); + + return 1; +} + + +Int32 check_valve (Int32 valve_nm,int valve_type) +{ + Int32 temp1=Convert_Midtank_No[valve_nm-1]; + + var response = stubManager.Run("StubFpgaReadRegRequest" ,F3_VALVE_OUT); + Int32 RV =(Int32) response.Value & 0xffff ; + RV = RV & ( 0x1 << (((valve_type+1)*8)- temp1)); + return RV; + +} + + +StubFpgaReadRegResponse Fpga_Read_Reg(Int32 Addr) +{ + var response = stubManager.Run("StubFpgaReadRegRequest" ,Addr); + response.Value = response.Value & 0xffff; + + return response; +} + + + + +//end mati \ No newline at end of file diff --git a/Software/Stubs Collection/stubs/Scripts/Assemblies/MidTank/New_Calibrate_Midtank_pressure_sensors2.cs b/Software/Stubs Collection/stubs/Scripts/Assemblies/MidTank/New_Calibrate_Midtank_pressure_sensors2.cs new file mode 100644 index 000000000..403d0b818 --- /dev/null +++ b/Software/Stubs Collection/stubs/Scripts/Assemblies/MidTank/New_Calibrate_Midtank_pressure_sensors2.cs @@ -0,0 +1,447 @@ +using System; +using System.IO; +using System.Text; +using System.Linq; +using System.Drawing; +using System.Diagnostics; +using System.Windows.Forms; +using System.Threading; +using System.Threading.Tasks; +using System.Collections.Generic; +using Tango.PMR.Stubs; +using Tango.PMR.EmbeddedParameters; +using Tango.Stubs; + +//---------------------- +const double MIN_SLOP=0.7; +const double MAX_SLOP=1.4; +const double ERROR_SLOP=-1; +const double MIN_50cc_on_volt=2.3; +const double MAX_50cc_on_volt=3.2; +const double ERROR_50cc_on_volt=-1; + +int [] Convert_Midtank_No = new Int32 [8] {1,3,5,7,2,4,6,8}; +uint [,] ADC_Add_Chnl = new uint [8,2] { + {0x44,0x20}, + {0x44,0x08}, + {0x46,0x80}, + {0x46,0x20}, + {0x44,0x10}, + {0x44,0x04}, + {0x46,0x40}, + {0x46,0x10}, + }; + + +const Int32 F3_VALVE_OUT = 0x600008E2 ; +string Machine_SN ; +private const string FILE_PATH = @"C:\MidTankLog\"; +string File_name; +double Full_Cartridge=1000; // on CC +double Slop=0.92; +//---------------------- +const Int32 I2C_ID = 2; +//const Int32 I2C_Slave_Add = 0x46; //must be 0x40, 0x44 or 0x46 +//---------------------- + + +public void OnExecute(StubManager stubManager) +{ + Int32 Timout ; + Int32 Interval; + Int32 midtankno = 0; + double Full_Point=0; //on Voltage + double resualt; + double Sum=0 ; + double Old_Sum=0 ; + double Start_Point=0; + + + if (!Directory.Exists(FILE_PATH)) + { + Directory.CreateDirectory(FILE_PATH); + } + + + + var response = stubManager.ShowResponseWindow("Enter Midtank S/N: ", ""); + stubManager.Write("\n"); + Machine_SN = response; + stubManager.WriteLine(Machine_SN); + File_name= FILE_PATH +Machine_SN + DateTime.Now.ToString("MM_dd_yyyy_HH_mm_ss")+".csv"; + stubManager.Write(File_name); + stubManager.WriteToFile(File_name,"MidTank S/N:," + Machine_SN); + + + var response1 = stubManager.ShowResponseWindow("Enter Midtank number to calibrate (1-8):", ""); + stubManager.WriteLine(response1); + midtankno = Int32.Parse(response1); + stubManager.AppendToFile(File_name,"MidTank Number:\t" + response1); + if (midtankno==8) + { + Slop=1; + Timout=60; //60 minutes + Interval=60; //60 second + } + else + { + Slop=0.92; + Timout=10*2; //10 minutes + Interval=30; //30 second + + } + var response10 = stubManager.ShowResponseWindow("Enter Cartridge Valume on CC (500-1500):", ""); + stubManager.WriteLine(response10); + Full_Cartridge = double.Parse(response10); + stubManager.AppendToFile(File_name,"Cartridge Valume:\t" + response10); + stubManager.AppendToFile(File_name,"Slop value:\t" + Slop); + + + DialogResult result = MessageBox.Show("Are you sure to calibrate Midtank No: "+ midtankno + " with "+ Full_Cartridge +" CC" , "Warning",MessageBoxButtons.YesNo); + if(result == DialogResult.Yes) + { + + + + string box_msg = "Please Insert cartridge "; + + MessageBox.Show(box_msg); + + open_valve(midtankno,1,1) ; //open Air valve + open_valve(midtankno,0,1) ; //open Ink valve + Int32 i=0; + while (iOld_Sum) + Old_Sum=Sum-Old_Sum; + else + Old_Sum=Old_Sum-Sum; + + + if ((check_valve(midtankno,1) != 0) && (check_valve(midtankno,0) != 0)) + { + i++; + if ( Old_Sum <0.02) + i=Timout+1; //end + Old_Sum=Sum; + } + else + { + open_valve(midtankno,1,0) ; //open Air valve + open_valve(midtankno,0,0) ; //open Ink valve + Old_Sum=0; + + } + } + Full_Point=Sum/Interval; + + + close_valve(midtankno,1,1) ; //close Air valve + close_valve(midtankno,0,1) ; //close Ink valve + + + if (insert_slop_t_eeprom(Full_Point, midtankno,Start_Point)==0) + { + box_msg ="Turn Power Off and On to finish the calibration."; + MessageBox.Show(box_msg); + } + else + { + box_msg ="Calibration error"; + MessageBox.Show(box_msg); + + } + } + +} + + + int insert_slop_t_eeprom( double FullPoint,Int32 midtankno, double StartPoint) +{ +// stubManager.Write("\n "); + + StartPoint=FullPoint-StartPoint; + StartPoint=StartPoint/Full_Cartridge; + if ((StartPoint>0.7 ) && (StartPoint>1.3 )) + { + MidTankDataSetupRequest midTankDataSetupRequest = new MidTankDataSetupRequest(); + + MidTankData midTankData = new MidTankData(); + midTankData.MidTankId = Convert.ToUInt32 (midtankno-1); + midTankData.InitialOffsetA =FullPoint - (Full_Cartridge/1000-0.1)/Slop; + midTankData.SlopeB = Slop; + + stubManager.Write("\nMidtank No:" + midtankno + "=\tVoltage Zero is ="+(FullPoint - (Full_Cartridge/1000-0.1)/Slop)+"\tSlop="+ Slop); + stubManager.AppendToFile(File_name,"\nMidtank No:" + midtankno + "=\tVoltage Zero is ="+(FullPoint - (Full_Cartridge/1000-0.1)/Slop)+"\tSlop="+ Slop); + + + midTankDataSetupRequest.MidTankInfo.Add(midTankData); + + + var response = stubManager.Run(midTankDataSetupRequest); + + return 0; + } + else + stubManager.Write("\nError"); + stubManager.AppendToFile(File_name,"\n Slop Error"); + return 1; + +} + + +int adc_configuration(uint I2C_Slave_Add,uint channel ) + { + StubI2CWriteBytesRequest stubI2CWriteBytesRequest = new StubI2CWriteBytesRequest(); + stubI2CWriteBytesRequest.I2CId = I2C_ID; + stubI2CWriteBytesRequest.SlaveAddress = I2C_Slave_Add; + + UInt32 uInt32 = new UInt32(); + stubI2CWriteBytesRequest.BytesTWrite.Add(0x00);//Byte 0 to write + stubI2CWriteBytesRequest.BytesTWrite.Add(channel);//Byte 1 to Write, must be 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02 or 0x01 for different channels + stubI2CWriteBytesRequest.BytesTWrite.Add(0x80);//Byte 2 to Write + + var response = stubManager.Run(stubI2CWriteBytesRequest); + + return 1; + } + + +int adc_set_for_read_ch(uint I2C_Slave_Add) + { + StubI2CWriteBytesRequest stubI2CWriteBytesRequest = new StubI2CWriteBytesRequest(); + stubI2CWriteBytesRequest.I2CId = I2C_ID; + stubI2CWriteBytesRequest.SlaveAddress = I2C_Slave_Add; + + UInt32 uInt32 = new UInt32(); + stubI2CWriteBytesRequest.BytesTWrite.Add(0x01);//Byte 0 to write + + var response = stubManager.Run(stubI2CWriteBytesRequest); + + return 1; + } + + + + +double adc_read_ch(uint I2C_Slave_Add) + { + StubI2CReadBytesRequest stubI2CReadBytesRequest = new StubI2CReadBytesRequest(); + stubI2CReadBytesRequest.I2CId = I2C_ID; + stubI2CReadBytesRequest.SlaveAddress = I2C_Slave_Add; + stubI2CReadBytesRequest.NumberOfBytesToRead = 2; // Number of bytes to read + + var response1 = stubManager.Run(stubI2CReadBytesRequest); + uint temph=0; + uint templ=0; + uint temp; + double calc; + double calc1; + double calc2; + temph=response1.ReadBytes[0]; + templ=response1.ReadBytes[1]; + temp = (temph << 8) | templ; + temp=temp & 0x0fff; + + calc = (double)temp *2.5 / 4096.0; + + calc1 = (1.96- calc) * 4.64 + 1.96; + stubManager.Write("Vsensor [volts]:\t"); + stubManager.Write(calc1 + "\n"); + + + return calc1; + } + +double read_pressure_sensor(Int32 i ) + { +double resualt =0 ; + switch (i) + { + case 1: + adc_configuration(0x44,0x20); //a2d_address 0x44 channel channel 2 + adc_set_for_read_ch(0x44); + resualt=adc_read_ch(0x44); + break; + + case 2: + adc_configuration(0x44,0x08); //a2d_address 0x44 channel channel 4 + adc_set_for_read_ch(0x44); + resualt=adc_read_ch(0x44); + break; + + case 3: + adc_configuration(0x46,0x80); //a2d_address 0x46 channel channel 0 + adc_set_for_read_ch(0x46); + resualt=adc_read_ch(0x46); + break; + + case 4: + adc_configuration(0x46,0x20); //a2d_address 0x46 channel channel 2 + adc_set_for_read_ch(0x46); + resualt=adc_read_ch(0x46); + break; + + case 5: + adc_configuration(0x44,0x10); //a2d_address 0x44 channel channel 3 + adc_set_for_read_ch(0x44); + resualt=adc_read_ch(0x44); + break; + + case 6: + adc_configuration(0x44,0x04); //a2d_address 0x44 channel channel 5 + adc_set_for_read_ch(0x44); + resualt=adc_read_ch(0x44); + break; + + case 7: + adc_configuration(0x46,0x40); //a2d_address 0x46 channel channel 1 + adc_set_for_read_ch(0x46); + resualt=adc_read_ch(0x46); + break; + + case 8: + adc_configuration(0x46,0x10); //a2d_address 0x46 channel channel 3 + adc_set_for_read_ch(0x46); + resualt=adc_read_ch(0x46); + break; + + default: + stubManager.Write("Error"); + + break; + } + + return resualt; + } + + +//-------------------------------- +int open_valve (int valve_nm,int valve_type,int check_valve) //valve_type=0 is Air ,1 is Ink ; check_valve=1 send feedbak +{ + int temp1=Convert_Midtank_No[valve_nm-1] ; + + string temp; + SetBit (F3_VALVE_OUT,(((valve_type+1)*8)- temp1), 1); + + if (check_valve!=0) + { + temp="Air"; + if (valve_type==1) + temp="Ink"; + + DialogResult result = MessageBox.Show("Did " + temp + "Valve of Midtank " + valve_nm +" open?", "Warning",MessageBoxButtons.YesNo); + if(result == DialogResult.No) + { +// Units_status[(valve_nm-1)*3+valve_type,1]="Fail"; + stubManager.Write(temp +"Valve\tFail\n"); + return 0; + } + else + { +// Units_status[(valve_nm-1)*3+valve_type,1]="Pass"; + stubManager.Write(temp +"Valve\tOpen\n"); + return 1; + } + + } + return 1; + +} +//-------------------------------- +int close_valve (int valve_nm,int valve_type,int check_valve) +{ + int temp1=Convert_Midtank_No[valve_nm-1]; + + string temp; + SetBit (F3_VALVE_OUT,(((valve_type+1)*8)- temp1), 0); + if (check_valve!=0) + { + temp="Air"; + if (valve_type==1) + temp="Ink"; + + DialogResult result = MessageBox.Show("Did " + temp +" Valve of Midtank " + valve_nm +" close?", "Warning",MessageBoxButtons.YesNo); + if(result == DialogResult.No) + { +// Units_status[(valve_nm-1)*3+valve_type,1]="Fail"; + stubManager.Write(temp +"Valve\tFail\n"); + return 0; + } + else + { +// Units_status[(valve_nm-1)*3+valve_type,1]="Pass"; + stubManager.Write(temp +"Valve\tclose\n"); + return 1; + } + } + return 1; + +} + +public Int32 SetBit(Int32 Adr, Int32 BitNo, Int32 Bit) +{ + Int32 BitMask; + var RetVal = Fpga_Read_Reg(Adr); + Int32 RV = (Int32) RetVal.Value; + + if (Bit == 0x1) + { + BitMask = 0x1 << BitNo; + RV = RV | BitMask; + Fpga_Write_Reg( Adr, RV ); + } + else if (Bit == 0x0) + { + BitMask = ~(0x1 << BitNo); + RV = RV & BitMask; + Fpga_Write_Reg(Adr, RV ); + } + return 1; +} + +int Fpga_Write_Reg(Int32 Addr, Int32 Data) +{ + var response = stubManager.Run("StubFpgaWriteRegRequest" ,Addr, Data); + + return 1; +} + + +Int32 check_valve (Int32 valve_nm,int valve_type) +{ + Int32 temp1=Convert_Midtank_No[valve_nm-1]; + + var response = stubManager.Run("StubFpgaReadRegRequest" ,F3_VALVE_OUT); + Int32 RV =(Int32) response.Value & 0xffff ; + RV = RV & ( 0x1 << (((valve_type+1)*8)- temp1)); + return RV; + +} + + +StubFpgaReadRegResponse Fpga_Read_Reg(Int32 Addr) +{ + var response = stubManager.Run("StubFpgaReadRegRequest" ,Addr); + response.Value = response.Value & 0xffff; + + return response; +} + + + + +//end mati \ No newline at end of file diff --git a/Software/Stubs Collection/stubs/Scripts/Assemblies/MidTank/midtanksetparams.cs b/Software/Stubs Collection/stubs/Scripts/Assemblies/MidTank/midtanksetparams.cs index 352666c85..d3aa81e83 100644 --- a/Software/Stubs Collection/stubs/Scripts/Assemblies/MidTank/midtanksetparams.cs +++ b/Software/Stubs Collection/stubs/Scripts/Assemblies/MidTank/midtanksetparams.cs @@ -13,13 +13,50 @@ using Tango.PMR.EmbeddedParameters; public void OnExecute(StubManager stubManager) { + uint midtankno = 0; + double Slop; + double Zero_Point; + +MidTankDataSetupRequest midTankDataSetupRequest = new MidTankDataSetupRequest(); + var response = stubManager.ShowResponseWindow("Enter Midtank number to calibrate (1-8):", ""); + //stubManager.WriteLine(response); + stubManager.Write("\n"); + midtankno = uint.Parse(response); -MidTankDataSetupRequest midTankDataSetupRequest = new MidTankDataSetupRequest(); + var response1 = stubManager.ShowResponseWindow("Enter Midtank Slop ", ""); + //stubManager.WriteLine(response); + stubManager.Write("\n"); + Slop = double.Parse(response1); + + var response2= stubManager.ShowResponseWindow("Enter Zero point (100cc)", ""); + //stubManager.WriteLine(response); + stubManager.Write("\n"); + Zero_Point = double.Parse(response2); + + DialogResult result = MessageBox.Show("Are you sure to calibrate Midtank No: "+ midtankno + "with Slop "+ Slop +" and Zero_Point " + Zero_Point , "Warning",MessageBoxButtons.YesNo); + if(result == DialogResult.Yes) + { + MidTankData midTankData = new MidTankData(); + midTankData.MidTankId = midtankno-1; + midTankData.InitialOffsetA = Zero_Point; + midTankData.SlopeB = Slop; + midTankDataSetupRequest.MidTankInfo.Add(midTankData); + var response3 = stubManager.Run(midTankDataSetupRequest); + string box_msg ="Turn Power Off and On to finish the calibration."; + MessageBox.Show(box_msg); + + } + +} + + + +//MidTankDataSetupRequest midTankDataSetupRequest = new MidTankDataSetupRequest(); //50cc [V] 1.93242734375 1.94375546875 1.9295953125 1.935259375 1.92109921875 2.8245171875 1.92676328125 1.92676328125 //b [mL/V] -1 -1 -1 -1 -1 0.885922630082808 -1 -1 - +/* MidTankData midTankData = new MidTankData(); midTankData.MidTankId = 0; midTankData.InitialOffsetA = 2.64273428916931; @@ -76,9 +113,39 @@ midTankDataSetupRequest.MidTankInfo.Add(midTankData7); var response = stubManager.Run(midTankDataSetupRequest); - - - + */ +//} + +/* + int insert_slop_t_eeprom() +{ + stubManager.Write("\n "); + + MidTankDataSetupRequest midTankDataSetupRequest = new MidTankDataSetupRequest(); + + + for (uint i=1;i<9;i++) + { + if (voltage_array[i,4]!= ERROR_SLOP) + { + MidTankData midTankData = new MidTankData(); + midTankData.MidTankId = i-1; + midTankData.InitialOffsetA = voltage_array[i,2]; + midTankData.SlopeB = voltage_array[i,4]; + + stubManager.Write("\nMidtank No:" + i+ "=\tA="+voltage_array[i,2]+"\tSlop="+voltage_array[i,4]); + + + midTankDataSetupRequest.MidTankInfo.Add(midTankData); -} \ No newline at end of file + } +var response = stubManager.Run(midTankDataSetupRequest); + + + + } +} + +*/ + diff --git a/Software/Stubs Collection/stubs/Scripts/Assemblies/New_DyeHead/Test_Actuator.cs b/Software/Stubs Collection/stubs/Scripts/Assemblies/New_DyeHead/Test_Actuator.cs new file mode 100644 index 000000000..f9555a05b --- /dev/null +++ b/Software/Stubs Collection/stubs/Scripts/Assemblies/New_DyeHead/Test_Actuator.cs @@ -0,0 +1,42 @@ +using System; +using System.Text; +using System.Linq; +using System.Drawing; +using System.Diagnostics; +using System.Windows.Forms; +using System.Threading; +using System.Threading.Tasks; +using System.Collections.Generic; +using Tango.PMR.Stubs; +using Tango.Stubs; + +public void OnExecute(StubManager stubManager) +{ + int sleep_up=2000;//2 second + int sleep_dn=2000;//2 second + var response = stubManager.ShowResponseWindow("Enter Loop Number for Actuator.", ""); + //stubManager.WriteLine(response); + int Loop_Nm = int.Parse(response); + + for (int i=0;i("ProgressRequest" ,0xfead, 0xcaf000); //mov ACTUATOR-IN down + Thread.Sleep(sleep_dn); + stubManager.Run("ProgressRequest" ,0xfead, 0xcaf101); //mov ACTUATOR-OUT up + Thread.Sleep(sleep_dn); + stubManager.Run("ProgressRequest" ,0xfead, 0xcaf001); //mov ACTUATOR-IN up + Thread.Sleep(sleep_up); + stubManager.Run("ProgressRequest" ,0xfead, 0xcaf100); //mov ACTUATOR-OUT down + Thread.Sleep(sleep_up); + + } + // stubManager.Run("ProgressRequest" ,0xfead, 0xcaf100); //mov ACTUATOR-OUTdown + // stubManager.Run("ProgressRequest" ,0xfead, 0xcaf101); //mov ACTUATOR-OUT up + + + + + +} \ No newline at end of file diff --git a/Software/Stubs Collection/stubs/Scripts/Assemblies/New_DyeHead/Test_Lid.cs b/Software/Stubs Collection/stubs/Scripts/Assemblies/New_DyeHead/Test_Lid.cs new file mode 100644 index 000000000..110a0f09b --- /dev/null +++ b/Software/Stubs Collection/stubs/Scripts/Assemblies/New_DyeHead/Test_Lid.cs @@ -0,0 +1,145 @@ +using System; +using System.Text; +using System.IO; +using System.Linq; +using System.Drawing; +using System.Diagnostics; +using System.Windows.Forms; +using System.Threading; +using System.Threading.Tasks; +using System.Collections.Generic; +using Tango.PMR.Stubs; +using Tango.Stubs; + +const int New_DyeHead_UNDER_TEST=48; + +const Int32 MGNET_OPEN=0x42F801; +const Int32 MGNET_EN=0x42F701; +const Int32 MGNET_CLOSE=0x42F800; +const Int32 MGNET_DIS=0x42F700; + +const Int32 LS_FRONT=0X460110; +const Int32 LS_REAR=0X460120; +const Int32 LS_UPPER=0X460140; +const Int32 LS_SPARE=0X460180; + +const Int32 DyeingHeadLid_Motor = 2; + +//-------------------------------------------------------------------------------- + +public void OnExecute(StubManager stubManager) +{ + var response = stubManager.ShowResponseWindow("Enter Loop Number for Dye Head Lead.", ""); + //stubManager.WriteLine(response); + int Loop_Nm = int.Parse(response); + + for (int i=0;i("ProgressRequest" ,0x0EAD,MGNET_OPEN); // turn magnet on + Thread.Sleep(100); + + stubManager.Run("ProgressRequest" ,0x0EAD,MGNET_EN); // magnet enable + Thread.Sleep(100); + + Thread.Sleep(1000); +//---------------------- chekc Magnet is open ---------------------------- +// DialogResult result = MessageBox.Show("Make shure, Magnet is open and DyeHead cover on front.", "Warning",MessageBoxButtons.YesNo); +// if(result == DialogResult.No) +// { +// stubManager.Write("Magnet is close\n"); +// return 0; +// } + temp=read_pio (LS_UPPER); // read LS_UPPER + if (temp != 0) + { + stubManager.Write("LS_UPPER of Magnet is close\n"); + return 1; + } + stubManager.Write("Magnet is Open\n"); + + +//---------------------- Move DyeingHead Lid Motor rear---------------------------- + stubManager.Run("StubMotorRunRequest" ,DyeingHeadLid_Motor, true, 250); + stubManager.Write("*** Open Lid Head ********* \n"); + + temp = 0; + i=0; + while ((temp == 0x0)&& (i<200) ) //wait until Limit Switch or timeout 200*50msec=10sec + { + temp=read_pio (LS_REAR); // read LS_REAR + Thread.Sleep(50); + + i++; + } + + stubManager.Run("StubMotorStopRequest" ,DyeingHeadLid_Motor,3); //stop motor + if(i==200) + { + stubManager.Write("LS_REAR Not calibrate\n"); + return 1; + } + +//---------------------- Move DyeingHead Lid Motor front---------------------------- + stubManager.Write("*** Close Lid Head \n"); + stubManager.Run("StubMotorRunRequest" ,DyeingHeadLid_Motor, false, 250); + temp = 0; + i=0; + while ((temp == 0x0)&& (i<200) ) //wait until Limit Switch or timeout 200*50msec=10sec + { + temp=read_pio (LS_FRONT); // read LS_FRONT + Thread.Sleep(50); + i++; + } + stubManager.Run("StubMotorStopRequest" ,DyeingHeadLid_Motor,3); //stop motor + if(i==200) + { + stubManager.Write("LS_FRONT Not calibrate\n"); + return 1; + } +//---------------------- Close Magnet ---------------------------- + stubManager.Run("ProgressRequest" ,0x0EAD,MGNET_CLOSE); // turn magnet off + Thread.Sleep(2000); + stubManager.Run("ProgressRequest" ,0x0EAD,MGNET_DIS); // magnet Disable + + stubManager.Write("Magnet is Close\n"); + Thread.Sleep(1000); + + temp=read_pio (LS_UPPER); // read LS_UPPER + if (temp == 0) + { + stubManager.Write("LS_UPPER of Magnet is open\n"); + return 1; + } + stubManager.Write("LS_UPPER of Magnet is close\n"); + return 0; + } + +Int32 read_pio(Int32 i2c_input) +{ + Int32 temp=0; + var response = stubManager.Run("ProgressRequest" ,0x0EAD,i2c_input); // read break + + temp = (Int32) (response.Progress); + temp =temp & (i2c_input& 0xff); //if break ok + + return temp; +} +//end mati diff --git a/Software/Stubs Collection/stubs/Scripts/Assemblies/PowerStep01/Get_PowerStep01_Parameters.cs b/Software/Stubs Collection/stubs/Scripts/Assemblies/PowerStep01/Get_PowerStep01_Parameters.cs new file mode 100644 index 000000000..ebe0dbf0f --- /dev/null +++ b/Software/Stubs Collection/stubs/Scripts/Assemblies/PowerStep01/Get_PowerStep01_Parameters.cs @@ -0,0 +1,227 @@ +using System; +using System.Text; +using System.Linq; +using System.Drawing; +using System.Diagnostics; +using System.Windows.Forms; +using System.Threading; +using System.Threading.Tasks; +using System.Collections.Generic; +using Tango.PMR.Stubs; +using Tango.Stubs; + +//unmark Auto logging ! + +const Int32 x_POWERSTEP01_CONFIG = 0x1A; +const Int32 x_POWERSTEP01_STATUS = 0x1B; +const Int32 x_POWERSTEP01_GATECFG1 = 0x18; +const Int32 x_POWERSTEP01_GATECFG2 = 0x19; + +const Int32 x_ABS_POS = 0x01; +const Int32 x_EL_POS = 0x02; +const Int32 x_MARK = 0x03; +const Int32 x_SPEED = 0x04; +const Int32 x_ACC = 0x05; +const Int32 x_DEC = 0x06; +const Int32 x_MAX_SPEED = 0x07; +const Int32 x_MIN_SPEED = 0x08; +const Int32 x_FS_SPD = 0x15; +const Int32 x_KVAL_HOLD = 0x09; +const Int32 x_KVAL_RUN = 0x0A; +const Int32 x_KVAL_ACC = 0x0B; +const Int32 x_KVAL_DEC = 0x0C; +const Int32 x_INT_SPD = 0x0D; +const Int32 x_ST_SLP = 0x0E; +const Int32 x_FN_SLP_ACC = 0x0F; +const Int32 x_FN_SLP_DEC = 0x10; +const Int32 x_K_THERM = 0x11; +const Int32 x_ADC_OUT = 0x12; +const Int32 x_OCD_TH = 0x13; +const Int32 x_STALL_TH = 0x14; +const Int32 x_STEP_MODE = 0x16; +const Int32 x_ALARM_EN = 0x17; +const Int32 x_CONFIG = 0x18; +const Int32 x_STATUS = 0x19; +//------------------------------- +const Int32 x_GET_PARAM = 0x20; +//------------------------------- +const Int32 Max_Motor_ID = 25; + +string[] Motor_ID = new string[30]; + + +Motor_ID[0] ="DH_CLEANHEAD "; +Motor_ID[1] ="DH_CLEANMECH "; +Motor_ID[2] ="DH_LID "; +Motor_ID[3] ="DRYER_DRIVING"; +Motor_ID[4] ="DRYER_LID "; +Motor_ID[5] ="DRYER_LOADARM"; +Motor_ID[6] ="DISPENCER_1 "; +Motor_ID[7] ="DISPENCER_2 "; +Motor_ID[8] ="DISPENCER_3 "; +Motor_ID[9] ="DISPENCER_4 "; +Motor_ID[10]="DISPENCER_5 "; +Motor_ID[11]="DISPENCER_6 "; +Motor_ID[12]="DISPENCER_7 "; +Motor_ID[13]="DISPENCER_8 "; +Motor_ID[14]="SCREW "; +Motor_ID[15]="WINDER "; +Motor_ID[16]="LDANCER1 "; +Motor_ID[17]="LDANCER2 "; +Motor_ID[18]="LDRIVING "; +Motor_ID[19]="LLODING "; +Motor_ID[20]="LPIVOT "; +Motor_ID[21]="RDANCER "; +Motor_ID[22]="RDRIVING "; +Motor_ID[23]="RLOADARM "; +Motor_ID[24]="RLODING "; +Motor_ID[25]="SPARE1_1 "; +Motor_ID[26]="SPARE1_2 "; +Motor_ID[27]="SPARE2_1 "; +Motor_ID[28]="SPARE2_2 "; +Motor_ID[29]="SPARE3 "; + +public void OnExecute(StubManager stubManager) +{ + + var i = stubManager.ShowResponseWindow("Please Enter Motor ID:"); + + stubManager.Write("Motor_ID:\t\t "); + stubManager.Write(i); + stubManager.Write("\n"); + + stubManager.Write("ABS_POS:\t\t"); + var response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_ABS_POS)<<24, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("EL_POS:\t\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_EL_POS)<<16, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("MARK:\t\t\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_MARK)<<24, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("SPEED:\t\t\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_SPEED)<<24, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("ACC:\t\t\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_ACC)<<16, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("DEC:\t\t\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_DEC)<<16, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("MAX_SPEED:\t\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_MAX_SPEED)<<16, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("MIN_SPEED:\t\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_MIN_SPEED)<<16, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("FS_SPD:\t\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_FS_SPD)<<16, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("KVAL\\TVAL_HOLD:\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_KVAL_HOLD)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("KVAL\\TVAL_RUN:\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_KVAL_RUN)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("KVAL\\TVAL_ACC:\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_KVAL_ACC)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("KVAL\\TVAL_DEC:\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_KVAL_DEC)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("INT_SPEED:\t\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_INT_SPD)<<16, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("ST_SLP\\T_FAST:\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_ST_SLP)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("FN_SLP_ACC\\TON_MIN:\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_FN_SLP_ACC)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("FN_SLP_DEC\\TOFF_MIN:"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_FN_SLP_DEC)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("K_THERM:\t\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_K_THERM)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("ADC_OUT:\t\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_ADC_OUT)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("OCD_TH:\t\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_OCD_TH)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("STALL_TH:\t\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_STALL_TH)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("STEP_MODE:\t\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_STEP_MODE)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("ALARM_EN:\t\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_ALARM_EN)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("GATECFG1:\t\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_POWERSTEP01_GATECFG1)<<16, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("GATECFG2:\t\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_POWERSTEP01_GATECFG2)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("CONFIG:\t\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_POWERSTEP01_CONFIG)<<16, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + stubManager.Write("STATUS:\t\t"); + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_POWERSTEP01_STATUS)<<16, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); +} \ No newline at end of file diff --git a/Software/Stubs Collection/stubs/Scripts/Assemblies/PowerStep01/Motor_GMotor_Get_Param_Powerstep01_rev3.cs b/Software/Stubs Collection/stubs/Scripts/Assemblies/PowerStep01/Motor_GMotor_Get_Param_Powerstep01_rev3.cs new file mode 100644 index 000000000..384c079fa --- /dev/null +++ b/Software/Stubs Collection/stubs/Scripts/Assemblies/PowerStep01/Motor_GMotor_Get_Param_Powerstep01_rev3.cs @@ -0,0 +1,237 @@ +using System; +using System.Text; +using System.Linq; +using System.Drawing; +using System.Diagnostics; +using System.Windows.Forms; +using System.Threading; +using System.Threading.Tasks; +using System.Collections.Generic; +using Tango.PMR.Stubs; +using Tango.Stubs; + +//unmark Auto logging ! + +//General Configuration +const Int32 x_ABS_POS = 0x01; +const Int32 x_EL_POS = 0x02; +const Int32 x_MARK = 0x03; +const Int32 x_SPEED = 0x04; +const Int32 x_ACC = 0x05; +const Int32 x_DEC = 0x06; +const Int32 x_MAX_SPEED = 0x07; +const Int32 x_MIN_SPEED = 0x08; +//VOLTAGE / CURRENT +const Int32 x_KTVAL_HOLD = 0x09; +const Int32 x_KTVAL_RUN = 0x0A; +const Int32 x_KTVAL_ACC = 0x0B; +const Int32 x_KTVAL_DEC = 0x0C; +const Int32 x_INT_SPD = 0x0D;//voltage +const Int32 x_ST_SLP_T_FAST = 0x0E; +const Int32 x_FN_SLP_ACC_TON_MIN = 0x0F; +const Int32 x_FN_SLP_DEC_TOFF_MIN = 0x10; +const Int32 x_K_THERM = 0x11;//VOLTAGE +const Int32 x_ADC_OUT = 0x12; +const Int32 x_OCD_TH = 0x13; +const Int32 x_STALL_TH = 0x14;//VOLTAGE +const Int32 x_FS_SPD = 0x15; +const Int32 x_STEP_MODE = 0x16; +const Int32 x_ALARM_EN = 0x17; +const Int32 x_POWERSTEP01_GATECFG1 = 0x18; +const Int32 x_POWERSTEP01_GATECFG2 = 0x19; +const Int32 x_POWERSTEP01_CONFIG = 0x1A; +const Int32 x_POWERSTEP01_STATUS = 0x1B; +//VOLTAGE / CURRENT + +//------------------------------- +const Int32 x_GET_PARAM = 0x20; +//------------------------------- +Int32 Start_index = 0; // start from motor + +const Int32 Max_Motor_ID = 25; + +string[] Motor_ID = new string[30]; + + +Motor_ID[0] ="DH_CLEANHEAD "; +Motor_ID[1] ="DH_CLEANMECH "; +Motor_ID[2] ="DH_LID "; +Motor_ID[3] ="DRYER_DRIVING"; +Motor_ID[4] ="DRYER_LID "; +Motor_ID[5] ="DRYER_LOADARM"; +Motor_ID[6] ="DISPENCER_1 "; +Motor_ID[7] ="DISPENCER_2 "; +Motor_ID[8] ="DISPENCER_3 "; +Motor_ID[9] ="DISPENCER_4 "; +Motor_ID[10]="DISPENCER_5 "; +Motor_ID[11]="DISPENCER_6 "; +Motor_ID[12]="DISPENCER_7 "; +Motor_ID[13]="DISPENCER_8 "; +Motor_ID[14]="SCREW "; +Motor_ID[15]="WINDER "; +Motor_ID[16]="LDANCER1 "; +Motor_ID[17]="LDANCER2 "; +Motor_ID[18]="LDRIVING "; +Motor_ID[19]="LLODING "; +Motor_ID[20]="LPIVOT "; +Motor_ID[21]="RDANCER "; +Motor_ID[22]="RDRIVING "; +Motor_ID[23]="RLOADARM "; +Motor_ID[24]="RLODING "; +Motor_ID[25]="SPARE1_1 "; +Motor_ID[26]="SPARE1_2 "; +Motor_ID[27]="SPARE2_1 "; +Motor_ID[28]="SPARE2_2 "; +Motor_ID[29]="SPARE3 "; + + + + +public void OnExecute(StubManager stubManager) +{ + Int32 i = 0; + + Int32 motname = 0; +//stubManager.Run("StubFpgaWriteRegRequest" ,0x60000380 , 0x06b9); //7ff mati +//stubManager.Run("StubFpgaWriteRegRequest" ,0x60000390 , 0x003f); +//stubManager.Run("StubFpgaWriteRegRequest" ,0x60000550 , 0x0003); //ff mati +//stubManager.Run("StubFpgaWriteRegRequest" ,0x60000b80 , 0x001f); + + +// stubManager.Write("\n\n"); + stubManager.Write("MoTor\tABS_POS\tEL_POS\tMARK\tSPEED\tACC\tDEC\tMAX_SPEED\tMIN_SPEED\tKTVAL_HOLD\tKTVAL_RUN\tTKVAL_ACC\tTKVAL_DEC\tINT_SPD\tT_FAST\t TON_MIN\tTOFF_MIN\tK_THERM\tADC_OUT\tOCD_TH\tSTALL_TH\tFS_SPD\tSTEP_MODE\tALARM_EN\tGATECFG1\tGATECFG2\tCONFIG\tSTATUS\n"); +// stubManager.Write("------\t\t\t--------\t--------\t----------\t---\t\t---\t\t----------\t---------\t---------\t---------\t------\t\t--------\t------\n"); + + + + for (i = Start_index; i < Max_Motor_ID; i++) + { + +// if((i%8 ==0) ) +// { +// } + //stubManager.Write(i); + + stubManager.Write(Motor_ID[i]); + stubManager.Write("\t\t"); + + var response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_ABS_POS)<<24, 0, 0); + stubManager.WriteHex(response.RecivedData,6); + stubManager.Write("\t"); + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_EL_POS)<<16, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\t"); + + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_MARK)<<24, 0, 0); + stubManager.WriteHex(response.RecivedData,6); + stubManager.Write("\t"); + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_SPEED)<<24, 0, 0); + stubManager.WriteHex(response.RecivedData,6); + stubManager.Write("\t"); + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_ACC)<<16, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\t"); + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_DEC)<<16, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\t"); + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_MAX_SPEED)<<16, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\t"); + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_MIN_SPEED)<<16, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\t"); + + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_KTVAL_HOLD)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\t"); + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_KTVAL_RUN)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\t"); + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_KTVAL_ACC)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\t"); + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_KTVAL_DEC)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\t"); + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_INT_SPD)<<16, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\t"); + + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_ST_SLP_T_FAST)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\t"); + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_FN_SLP_ACC_TON_MIN)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\t"); + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_FN_SLP_DEC_TOFF_MIN)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\t"); + + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_K_THERM)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\t"); + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_ADC_OUT)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\t"); + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_OCD_TH)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\t"); + + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_STALL_TH)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\t"); + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_FS_SPD)<<16, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\t"); + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_STEP_MODE)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\t"); + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_ALARM_EN)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\t"); + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_POWERSTEP01_GATECFG1)<<16, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\t"); + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_POWERSTEP01_GATECFG2)<<8, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\t"); + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_POWERSTEP01_CONFIG)<<16, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\t"); + + response = stubManager.Run("StubMotorRequest" ,i, (x_GET_PARAM | x_POWERSTEP01_STATUS)<<16, 0, 0); + stubManager.WriteHex(response.RecivedData,4); + stubManager.Write("\n"); + + + + + } + + +} \ No newline at end of file diff --git a/Software/Stubs Collection/stubs/Scripts/Assemblies/WHS/fan1-4.cs b/Software/Stubs Collection/stubs/Scripts/Assemblies/WHS/fan1-4.cs index 6e7617cc0..69f8e4d13 100644 --- a/Software/Stubs Collection/stubs/Scripts/Assemblies/WHS/fan1-4.cs +++ b/Software/Stubs Collection/stubs/Scripts/Assemblies/WHS/fan1-4.cs @@ -12,7 +12,7 @@ using Tango.Stubs; public void OnExecute(StubManager stubManager) { - int x=80; + int x=0; // var response1 = stubManager.ShowResponseWindow("Please Enter fan value from 0 to 255:"); // int x = Int32.Parse(response1); @@ -23,6 +23,7 @@ public void OnExecute(StubManager stubManager) stubManager.Run("ProgressRequest" ,0xffac4, x); //whs fan3 full stubManager.Run("ProgressRequest" ,0xffac5, x); //whs fan4 full + var response = stubManager.Run("ProgressRequest" ,0x3ea, 6); //whs fan4 full } \ No newline at end of file diff --git a/Software/Stubs Collection/stubs/Scripts/Head_Type_Indification_2.cs b/Software/Stubs Collection/stubs/Scripts/Head_Type_Indification_2.cs new file mode 100644 index 000000000..a5f28a01d --- /dev/null +++ b/Software/Stubs Collection/stubs/Scripts/Head_Type_Indification_2.cs @@ -0,0 +1,25 @@ +using System; +using System.Text; +using System.Linq; +using System.Drawing; +using System.Diagnostics; +using System.Windows.Forms; +using System.Threading; +using System.Threading.Tasks; +using System.Collections.Generic; +using Tango.PMR.Stubs; +using Tango.Stubs; + +public void OnExecute(StubManager stubManager) +{ + + var response = stubManager.Run("ProgressRequest" ,0xFEAD, 0); + + /* Response: + HEAD_TYPE_UNKNOWN // 0 + HEAD_TYPE_FLAT_WITHOUT_CARD// 1 + HEAD_TYPE_UNKNOWN_WITH_CARD// 2 + HEAD_TYPE_FLAT// 3 + HEAD_TYPE_ARC// 4 + */ +} \ No newline at end of file diff --git a/Software/Stubs Collection/stubs/Scripts/Jig_Tester/JIG_TESTER.cs b/Software/Stubs Collection/stubs/Scripts/Jig_Tester/JIG_TESTER.cs index 7841b09eb..a90acd902 100644 --- a/Software/Stubs Collection/stubs/Scripts/Jig_Tester/JIG_TESTER.cs +++ b/Software/Stubs Collection/stubs/Scripts/Jig_Tester/JIG_TESTER.cs @@ -28,6 +28,7 @@ System.Timers.Timer timer; string [,] Units_status = new string[50,2]; +string File_Name2; string File_Name1 ; string Status; @@ -36,7 +37,7 @@ const int Winder =0 ; const int LTFU =1 ; string path; -string path1="C:\\Jig_Log\\"; +string path1="C:\\Jig_Log\\";; bool BlinkOn = false; bool timer_started = false; @@ -47,6 +48,10 @@ int UNIT_UNDER_TEST ; public void OnExecute(StubManager stubManager) { + string u =System.Environment.UserName; + + + Label Run_text = new Label () { Width = 110, @@ -219,7 +224,7 @@ public void OnExecute(StubManager stubManager) Height = 20, Text =" S/N" }; - SN_lbl.Location = new Point (30, 10); + SN_lbl.Location = new Point (40, 10); form1.Controls.Add(SN_lbl); TextBox SN_TexstBox = new TextBox () { @@ -229,6 +234,27 @@ public void OnExecute(StubManager stubManager) }; SN_TexstBox.Location = new Point (40, 40); form1.Controls.Add(SN_TexstBox); + //-----Create Lable to Part Number ----------- + + Label PN_lbl = new Label () + { + Width = 150, + Height = 20, + Text =" P/N" + }; + PN_lbl.Location = new Point (190, 10); + form1.Controls.Add(PN_lbl); + + TextBox PN_TexstBox = new TextBox () + { + Width = 150, + Height = 20, + Text ="" + }; + PN_TexstBox.Location = new Point (190, 40); + PN_TexstBox.CharacterCasing = CharacterCasing.Upper; + + form1.Controls.Add(PN_TexstBox); //----------Create Lable to LOCATION---------- Label Location_lbl = new Label () { @@ -236,7 +262,7 @@ public void OnExecute(StubManager stubManager) Height = 20, Text ="LOCATION" }; - Location_lbl.Location = new Point (300, 10); + Location_lbl.Location = new Point (440, 10); form1.Controls.Add(Location_lbl); TextBox Location_TexstBox = new TextBox () @@ -245,7 +271,7 @@ public void OnExecute(StubManager stubManager) Height = 20, Text =Location_str }; - Location_TexstBox.Location = new Point (300, 40); + Location_TexstBox.Location = new Point (440, 40); form1.Controls.Add(Location_TexstBox); Run_text.Location = new System.Drawing.Point(300, 100); @@ -253,6 +279,25 @@ public void OnExecute(StubManager stubManager) Run_text.Name = "blink_Text"; Run_text.Font = new Font("Areal", 16, System.Drawing.FontStyle.Bold); form1.Controls.Add(Run_text); +//-------------------------------------------------------------------------------- + Button Open_Log_btm = new Button() + { + Width = 100, + Height = 40, + }; + Open_Log_btm.Text = "Open Log File"; + Open_Log_btm.BackColor = System.Drawing.Color.Red; + Open_Log_btm.Location = new System.Drawing.Point(300, 286); + Open_Log_btm.Enabled= false; + form1.Controls.Add(Open_Log_btm); + + + Open_Log_btm.Click += (_, __) => + { + System.Diagnostics.Process.Start(File_Name2 ); + }; + + //-------------------------------------------------------------------------------- Button Stop_btm = new Button() { @@ -263,6 +308,10 @@ public void OnExecute(StubManager stubManager) Stop_btm.BackColor = System.Drawing.Color.Red; Stop_btm.Location = new System.Drawing.Point(4, 286); Stop_btm.Enabled= false; + + + + Stop_btm.Click += (_, __) => { timer.Stop(); @@ -273,7 +322,7 @@ public void OnExecute(StubManager stubManager) }; form1.Controls.Add(Stop_btm); - + disable_test(); void disable_test() { Winder_btm.Enabled = false; @@ -286,23 +335,23 @@ public void OnExecute(StubManager stubManager) Mixer_btm.Enabled= false; NewMixer_btm.Enabled= false; NewDyeHead_btm.Enabled= false; - Stop_btm.Enabled= true; - } - - void enable_test() - { - Winder_btm.Enabled = true; - LTFU_btm.Enabled = true; - RTFU_btm.Enabled = true; - Dryer_btm.Enabled = true; - MidTank_btm.Enabled= true; - DyeHead_btm.Enabled= true; - WHS_btm.Enabled= true; - Mixer_btm.Enabled= true; - NewMixer_btm.Enabled= true; - NewDyeHead_btm.Enabled= true; Stop_btm.Enabled= false; } + +// void enable_test() +// { +// Winder_btm.Enabled = true; +// LTFU_btm.Enabled = true; +// RTFU_btm.Enabled = true; +// Dryer_btm.Enabled = true; +// MidTank_btm.Enabled= true; +// DyeHead_btm.Enabled= true; +// WHS_btm.Enabled= true; +// Mixer_btm.Enabled= true; +// NewMixer_btm.Enabled= true; +// NewDyeHead_btm.Enabled= true; +// Stop_btm.Enabled= false; +// } void Timer_en() { if (timer_started == false) @@ -320,9 +369,11 @@ public void OnExecute(StubManager stubManager) } } void end_test() - { enable_test(); + { disable_test(); + //enable_test(); + Timer_dis(); - + Open_Log_btm.Enabled= true; Run_text.Text = Status; if (Status=="Pass") { @@ -337,22 +388,126 @@ public void OnExecute(StubManager stubManager) } } +PN_TexstBox.TextChanged += (_,__)=> + + { + string temp; + + if (SN_TexstBox.Text.Length!=15) + { + disable_test(); + return; + } + + if (PN_TexstBox.Text.Contains("-")) + + { + temp=PN_TexstBox.Text.Substring(0, PN_TexstBox.Text.IndexOf("-")); + switch (temp) + { + case "AM00315": //DyeHead + NewDyeHead_btm.Enabled= true; + break; + case "AM00103": //Winder + Winder_btm.Enabled = true; + break; + case "AM00087": //MidTank + MidTank_btm.Enabled = true; + break; + case "AM00031": //LTFU + LTFU_btm.Enabled = true; + break; + case "AM00007": //Dryer + Dryer_btm.Enabled = true; + break; + case "AM00030": //RTFU + RTFU_btm.Enabled = true; + break; + case "AM00281": //New Mixer + NewMixer_btm.Enabled= true; + break; + // case "AM00281": // Mixer + // Mixer_btm.Enabled= true; + // break; + default: + disable_test(); + break; + } + } + else + disable_test(); + + + }; + SN_TexstBox.TextChanged += (_,__)=> + + { + string temp; + if (SN_TexstBox.Text.Length!=15) + { + disable_test(); + return; + } + if (PN_TexstBox.Text.Contains("-")) + { + + temp=PN_TexstBox.Text.Substring(0, PN_TexstBox.Text.IndexOf("-")); + + switch (temp) + { + case "AM00315": //DyeHead + NewDyeHead_btm.Enabled= true; + break; + case "AM00103": //Winder + Winder_btm.Enabled = true; + break; + case "AM00087": //MidTank + MidTank_btm.Enabled = true; + break; + case "AM00031": //LTFU + LTFU_btm.Enabled = true; + break; + case "AM00007": //Dryer + Dryer_btm.Enabled = true; + break; + case "AM00030": //RTFU + RTFU_btm.Enabled = true; + break; + case "AM00286": //New Mixer + NewMixer_btm.Enabled= true; + break; + default: + disable_test(); + break; +// case "AM00281": // Mixer +// Mixer_btm.Enabled= true; +// break; + } + } + else + disable_test(); + }; //----------------------------------------- Winder_btm.Click += async(_,__) => { + Open_Log_btm.Enabled= false; Run_text.Text = "Run"; stubManager.WriteLine("DUT- Winder "); - path="C:\\Users\\lp4\\Dropbox\\"+Location_TexstBox.Text +"_Bench_Tester"+"\\Winder\\" ; +// path="C:\\Users\\" + u + "\\Dropbox\\"+Location_TexstBox.Text +"_Bench_Tester"+"\\Winder\\" ; + path="C:\\Users\\" + u + "\\Dropbox\\"+Location_TexstBox.Text +"_Bench_Tester"+"\\Winder\\" ; + Timer_en(); _cancellationTokenSource = new CancellationTokenSource(); try { - disable_test(); + // disable_test(); + Winder_btm.Enabled = false; + Stop_btm.Enabled= true; var longRunningTask = await Winder_test(setLabel1TextSafe, _cancellationTokenSource.Token, SN_TexstBox.Text ,Location_TexstBox.Text ); } catch (OperationCanceledException) { - enable_test(); + disable_test(); Status="Cancel"; stubManager.Run("StubMotorStopRequest" ,WINDER_Motor,3); //stop motor stubManager.Run("StubMotorStopRequest" ,SCREW,3); //stop motor @@ -368,23 +523,27 @@ public void OnExecute(StubManager stubManager) //----------------------------------------- LTFU_btm.Click += async(_,__) => { + Open_Log_btm.Enabled= false; Run_text.Text = "Run"; stubManager.WriteLine("DUT- LTFU "); - path="C:\\Users\\lp4\\Dropbox\\"+Location_TexstBox.Text +"_Bench_Tester"+"\\LTFU\\" ; + path="C:\\Users\\" + u + "\\Dropbox\\"+Location_TexstBox.Text +"_Bench_Tester"+"\\LTFU\\" ; Timer_en(); _cancellationTokenSource = new CancellationTokenSource(); try { - disable_test(); +// disable_test(); + LTFU_btm.Enabled = false; + Stop_btm.Enabled= true; var longRunningTask = await LTFU_test(setLabel1TextSafe, _cancellationTokenSource.Token, SN_TexstBox.Text ,Location_TexstBox.Text ); } catch (OperationCanceledException) { - enable_test(); + disable_test(); Status="Cancel"; stubManager.Run("StubMotorStopRequest" ,LLOADING_Motor, 3); //hold LRoading high z stubManager.Run("StubMotorStopRequest" ,LDANCER1_Motor, 3); //hold Lloading high z + stubManager.Run("StubMotorStopRequest" ,LDANCER2_Motor, 3); //hold Lloading high z stubManager.Run("StubMotorStopRequest" ,LDRIVING_Motor,3); //stop motor Thread.Sleep(100); @@ -402,21 +561,24 @@ public void OnExecute(StubManager stubManager) //----------------------------------------- Dryer_btm.Click += async(_,__) => { + Open_Log_btm.Enabled= false; Run_text.Text = "Run"; stubManager.WriteLine("DUT- Dryer "); - path="C:\\Users\\lp4\\Dropbox\\"+Location_TexstBox.Text +"_Bench_Tester"+"\\Dryer\\" ; + path="C:\\Users\\" + u + "\\Dropbox\\"+Location_TexstBox.Text +"_Bench_Tester"+"\\Dryer\\" ; Timer_en(); _cancellationTokenSource = new CancellationTokenSource(); try { - disable_test(); - var longRunningTask = await Dryer_test(setLabel1TextSafe, _cancellationTokenSource.Token, SN_TexstBox.Text ,Location_TexstBox.Text ); +// disable_test(); + Dryer_btm.Enabled = false; + Stop_btm.Enabled= true; + var longRunningTask = await Dryer_test(setLabel1TextSafe, _cancellationTokenSource.Token, SN_TexstBox.Text ,Location_TexstBox.Text ); } catch (OperationCanceledException) { - enable_test(); + disable_test(); Status="Cancel"; stubManager.Run("StubMotorStopRequest" ,DryerLid_Motor, 2); //Hard stop hiZ motor stubManager.Run("StubMotorStopRequest" ,DryerMain_Motor,3); //stop motor @@ -436,20 +598,23 @@ public void OnExecute(StubManager stubManager) //----------------------------------------- DyeHead_btm.Click += async(_,__) => { + Open_Log_btm.Enabled= false; Run_text.Text = "Run"; stubManager.WriteLine("DUT- DyeHead "); - path="C:\\Users\\lp4\\Dropbox\\"+Location_TexstBox.Text +"_Bench_Tester"+"\\DyeHead\\" ; + path="C:\\Users\\" + u + "\\Dropbox\\"+Location_TexstBox.Text +"_Bench_Tester"+"\\DyeHead\\" ; Timer_en(); _cancellationTokenSource = new CancellationTokenSource(); try { - disable_test(); - var longRunningTask = await DyeHead_test(setLabel1TextSafe, _cancellationTokenSource.Token, SN_TexstBox.Text ,Location_TexstBox.Text ); +// disable_test(); + DyeHead_btm.Enabled= false; + Stop_btm.Enabled= true; + var longRunningTask = await DyeHead_test(setLabel1TextSafe, _cancellationTokenSource.Token, SN_TexstBox.Text ,Location_TexstBox.Text ); } catch (OperationCanceledException) { - enable_test(); + disable_test(); Status="Cancel"; stubManager.Run("StubMotorStopRequest" ,MAGNET_Driver,3); //stop magnet stubManager.Run("StubMotorStopRequest" ,DyeingHeadLid_Motor,3); //stop motor @@ -472,28 +637,29 @@ public void OnExecute(StubManager stubManager) //----------------------------------------- NewDyeHead_btm.Click += async(_,__) => { + Open_Log_btm.Enabled= false; Run_text.Text = "Run"; stubManager.WriteLine("DUT- New DyeHead "); -// path="C:\\Users\\lp4\\Dropbox\\"+Location_TexstBox.Text +"_Bench_Tester"+"\\NewDyeHead\\" ; - path="C:\\Users\\lp4\\Dropbox\\"+Location_TexstBox.Text +"_Bench_Tester"+"\\DyeHead\\" ; + path="C:\\Users\\" + u + "\\Dropbox\\"+Location_TexstBox.Text +"_Bench_Tester"+"\\NewDyeHead\\" ; Timer_en(); _cancellationTokenSource = new CancellationTokenSource(); try { - disable_test(); -//mf var longRunningTask = await NewDyeHead_test(setLabel1TextSafe, _cancellationTokenSource.Token, SN_TexstBox.Text ,Location_TexstBox.Text ); +// disable_test(); + NewDyeHead_btm.Enabled= false; + Stop_btm.Enabled= true; + var longRunningTask = await NewDyeHead_test(setLabel1TextSafe, _cancellationTokenSource.Token, SN_TexstBox.Text ,Location_TexstBox.Text ); } catch (OperationCanceledException) { - enable_test(); + disable_test(); Status="Cancel"; stubManager.Run("StubMotorStopRequest" ,MAGNET_Driver,3); //stop magnet stubManager.Run("StubMotorStopRequest" ,DyeingHeadLid_Motor,3); //stop motor for (Int32 i = 0; i < 12; i++) //???MF { - stubManager.Run("ProgressRequest" ,0x0EAD,0x40F000 + i*0x100); // turn all heaters OFF Thread.Sleep(10); } @@ -509,19 +675,22 @@ public void OnExecute(StubManager stubManager) //----------------------------------------- RTFU_btm.Click += async(_,__) => { + Open_Log_btm.Enabled= false; Run_text.Text = "Run"; stubManager.WriteLine("DUT- RTFU "); - path="C:\\Users\\lp4\\Dropbox\\"+Location_TexstBox.Text +"_Bench_Tester"+"\\RTFU\\" ; + path="C:\\Users\\" + u + "\\Dropbox\\"+Location_TexstBox.Text +"_Bench_Tester"+"\\RTFU\\" ; Timer_en(); _cancellationTokenSource = new CancellationTokenSource(); try { - disable_test(); +// disable_test(); + RTFU_btm.Enabled= false; + Stop_btm.Enabled= true; var longRunningTask = await RTFU_test(setLabel1TextSafe, _cancellationTokenSource.Token, SN_TexstBox.Text ,Location_TexstBox.Text ); } catch (OperationCanceledException) { - enable_test(); + disable_test(); Status="Cancel"; stubManager.Run("StubMotorStopRequest" ,RLOADING_Motor, 3); //hold Rloading high z Thread.Sleep(100); @@ -539,19 +708,22 @@ public void OnExecute(StubManager stubManager) //----------------------------------------- MidTank_btm.Click += async(_,__) => { + Open_Log_btm.Enabled= false; Run_text.Text = "Run"; stubManager.WriteLine("DUT- MidTank "); - path="C:\\Users\\lp4\\Dropbox\\"+Location_TexstBox.Text +"_Bench_Tester"+"\\MidTank\\" ; + path="C:\\Users\\" + u + "\\Dropbox\\"+Location_TexstBox.Text +"_Bench_Tester"+"\\MidTank\\" ; Timer_en(); _cancellationTokenSource = new CancellationTokenSource(); try { - disable_test(); +// disable_test(); + MidTank_btm.Enabled= false; + Stop_btm.Enabled= true; var longRunningTask = await MidTank_test(setLabel1TextSafe, _cancellationTokenSource.Token, SN_TexstBox.Text ,Location_TexstBox.Text ); } catch (OperationCanceledException) { - enable_test(); + disable_test(); Status="Cancel"; stubManager.Run("StubFpgaWriteRegRequest" ,F3_VALVE_OUT, 0); //close all valve @@ -566,20 +738,23 @@ public void OnExecute(StubManager stubManager) //---------------------------Mixer-------------- Mixer_btm.Click += async(_,__) => { + Open_Log_btm.Enabled= false; Run_text.Text = "Run"; stubManager.WriteLine("DUT- Mixer "); - path="C:\\Users\\lp4\\Dropbox\\"+Location_TexstBox.Text +"_Bench_Tester"+"\\Mixer\\" ; + path="C:\\Users\\" + u + "\\Dropbox\\"+Location_TexstBox.Text +"_Bench_Tester"+"\\Mixer\\" ; Timer_en(); _cancellationTokenSource = new CancellationTokenSource(); try { - disable_test(); +// disable_test(); + Mixer_btm.Enabled= false; + Stop_btm.Enabled= true; var longRunningTask = await Mixer_test(setLabel1TextSafe, _cancellationTokenSource.Token, SN_TexstBox.Text ,Location_TexstBox.Text ); } catch (OperationCanceledException) { - enable_test(); + disable_test(); Status="Cancel"; SetBit (F1_gpo_01, 7, 0); //clear bit F1_VALVE_MIXCHIP_WASTECH SetBit (F2_CTRL, 7, 0); //clear bit mixer SSR @@ -594,20 +769,23 @@ public void OnExecute(StubManager stubManager) //---------------------------new Mixer-------------- NewMixer_btm.Click += async(_,__) => { + Open_Log_btm.Enabled= false; Run_text.Text = "Run"; stubManager.WriteLine("DUT- New Mixer "); - path="C:\\Users\\lp4\\Dropbox\\"+Location_TexstBox.Text +"_Bench_Tester"+"\\Mixer\\" ; + path="C:\\Users\\" + u + "\\Dropbox\\"+Location_TexstBox.Text +"_Bench_Tester"+"\\Mixer\\" ; Timer_en(); _cancellationTokenSource = new CancellationTokenSource(); try { - disable_test(); - var longRunningTask = await New_Mixer_test(setLabel1TextSafe, _cancellationTokenSource.Token, SN_TexstBox.Text ,Location_TexstBox.Text ); +// disable_test(); + NewMixer_btm.Enabled= false; + Stop_btm.Enabled= true; + var longRunningTask = await New_Mixer_test(setLabel1TextSafe, _cancellationTokenSource.Token, SN_TexstBox.Text ,Location_TexstBox.Text ); } catch (OperationCanceledException) { - enable_test(); + disable_test(); Status="Cancel"; // SetBit (F1_gpo_01, 7, 0); ????????????//clear bit F1_VALVE_MIXCHIP_WASTECH // SetBit (F2_CTRL, 7, 0); //????????????clear bit mixer SSR @@ -630,7 +808,6 @@ public void OnExecute(StubManager stubManager) form1.Controls.Add(_calc_text); // stubManager.WriteLine("Start dialog!"); form1.ShowDialog(); - return ; @@ -661,7 +838,7 @@ if (!Directory.Exists(path)) -string File_Name2=Environment.ExpandEnvironmentVariables(path +Stemp1+"_"+ s_n +"_"+DUT +"_"+ DateTime.Now.ToString("MM_dd_yyyy_HH_mm_ss")+".log" ); + File_Name2=Environment.ExpandEnvironmentVariables(path +Stemp1+"_"+ s_n +"_"+DUT +"_"+ DateTime.Now.ToString("MM_dd_yyyy_HH_mm_ss")+".log" ); stubManager.Write(File_Name2 +"\n"); diff --git a/Software/Stubs Collection/stubs/Scripts/Jig_Tester/Jig-TesterV 1.0.docx b/Software/Stubs Collection/stubs/Scripts/Jig_Tester/Jig-TesterV 1.0.docx new file mode 100644 index 000000000..f7aa53997 Binary files /dev/null and b/Software/Stubs Collection/stubs/Scripts/Jig_Tester/Jig-TesterV 1.0.docx differ diff --git a/Software/Stubs Collection/stubs/Scripts/Jig_Tester/Jig-TesterV 1.1.docx b/Software/Stubs Collection/stubs/Scripts/Jig_Tester/Jig-TesterV 1.1.docx new file mode 100644 index 000000000..948efd86b Binary files /dev/null and b/Software/Stubs Collection/stubs/Scripts/Jig_Tester/Jig-TesterV 1.1.docx differ diff --git a/Software/Stubs Collection/stubs/Scripts/Jig_Tester/LTFU_Jig.cs b/Software/Stubs Collection/stubs/Scripts/Jig_Tester/LTFU_Jig.cs index 3f9f2a346..ba072b955 100644 --- a/Software/Stubs Collection/stubs/Scripts/Jig_Tester/LTFU_Jig.cs +++ b/Software/Stubs Collection/stubs/Scripts/Jig_Tester/LTFU_Jig.cs @@ -52,7 +52,7 @@ public Task LTFU_test( Action settext, CancellationToken cancel Test_LLOADING_LTFU(); stubManager.Run("StubMotorStopRequest" ,LLOADING_Motor, 3); //hold LRoading high z delay(100); - Motor_SetParam(F1_MOTO_LLOADING_TX1,F1_MOTO_LLOADING_TX0,0x0a,0x14000000); //set kval ran to 0x14,0.65A +// Motor_SetParam(F1_MOTO_LLOADING_TX1,F1_MOTO_LLOADING_TX0,0x0a,0x14000000); //set kval ran to 0x14,0.65A settext("Test LDRIVING LTFU"); Test_LDRIVING_LTFU(); @@ -355,9 +355,9 @@ int Test_DANCER_LTFU() } - if (temp_right_after>temp_right_before) - temp_right_before=temp_right_before+0x4000; - temp_right_before=temp_right_before-temp_right_after; + if (temp_right_after200)) { Units_status[8,1]="Pass"; @@ -465,7 +465,7 @@ int Test_DANCER_LTFU() return 12; } Units_status[8,1]="Fail"; - stubManager.Write("LDANCER2_SSI\tFail\n"); + stubManager.Write("LDANCER_Right_SSI\tFail\n"); return 12; diff --git a/Software/Stubs Collection/stubs/Scripts/Jig_Tester/MidTank_Jig.cs b/Software/Stubs Collection/stubs/Scripts/Jig_Tester/MidTank_Jig.cs index 27e17ed93..16139df2c 100644 --- a/Software/Stubs Collection/stubs/Scripts/Jig_Tester/MidTank_Jig.cs +++ b/Software/Stubs Collection/stubs/Scripts/Jig_Tester/MidTank_Jig.cs @@ -143,9 +143,9 @@ int open_valve (int valve_nm,int valve_type,int check_valve) //valve_type=0 is if (check_valve!=0) { - temp="Air"; + temp="Air "; if (valve_type==1) - temp="Ink"; + temp="Ink "; DialogResult result = MessageBox.Show("Did " + temp + "Valve of Midtank " + valve_nm +" open?", "Warning",MessageBoxButtons.YesNo); if(result == DialogResult.No) diff --git a/Software/Stubs Collection/stubs/Scripts/Jig_Tester/RTFU_Jig.cs b/Software/Stubs Collection/stubs/Scripts/Jig_Tester/RTFU_Jig.cs index 9863a2ea1..4f47a1cd0 100644 --- a/Software/Stubs Collection/stubs/Scripts/Jig_Tester/RTFU_Jig.cs +++ b/Software/Stubs Collection/stubs/Scripts/Jig_Tester/RTFU_Jig.cs @@ -76,7 +76,7 @@ int Test_RLOADING_RTFU() int temp=1; int counter; -// Motor_SetParam(F1_MOTO_RLOADING_TX1,F1_MOTO_RLOADING_TX0,0x0a,0x40000000); //set kval ran to 0x40- 1.9A +// Motor_SetParam(F1_MOTO_RLOADING_TX1,F1_MOTO_RLOADING_TX0,0x0a,0x2c000000); //set kval ran to 0x40- 1.9A delay(100); stubManager.Run("StubMotorRunRequest" ,RLOADING_Motor, true,200); //move Rloading down delay(3000); @@ -317,7 +317,7 @@ int Test_DANCER_RTFU() stubManager.Write("temp="+temp + "\temp1="+temp1 +"\n"); - DialogResult result = MessageBox.Show("SSI Dancer led is Green(not blinking)?", "Warning",MessageBoxButtons.YesNo); + DialogResult result = MessageBox.Show("SSI Dancer led is Green(Not blinking)?", "Warning",MessageBoxButtons.YesNo); if(result == DialogResult.No) { Units_status[8,1]="Fail"; diff --git a/Software/Stubs Collection/stubs/Scripts/Main card Watchdog test.cs b/Software/Stubs Collection/stubs/Scripts/Main card Watchdog test.cs new file mode 100644 index 000000000..3db075678 --- /dev/null +++ b/Software/Stubs Collection/stubs/Scripts/Main card Watchdog test.cs @@ -0,0 +1,24 @@ +using System; +using System.Text; +using System.Linq; +using System.Drawing; +using System.Diagnostics; +using System.Windows.Forms; +using System.Threading; +using System.Threading.Tasks; +using System.Collections.Generic; +using Tango.PMR.Stubs; +using Tango.Stubs; + +public void OnExecute(StubManager stubManager) +{ + +//"Set WFCF Value +ProgressRequest progressRequest = new ProgressRequest(); +progressRequest.Amount = 0xAD9; +progressRequest.Delay = 0; + +var response = stubManager.Run(progressRequest); + + +} \ No newline at end of file diff --git a/Software/Stubs Collection/stubs/Scripts/MidTank Calibration.pproj b/Software/Stubs Collection/stubs/Scripts/MidTank Calibration.pproj new file mode 100644 index 000000000..ce80c8a70 --- /dev/null +++ b/Software/Stubs Collection/stubs/Scripts/MidTank Calibration.pproj @@ -0,0 +1 @@ +{"$id":"1","Name":"MidTank Calibration","Description":null,"Scripts":{"$id":"2","$values":[{"$id":"3","Code":"using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing System.Drawing;\r\nusing Google.Protobuf;\r\nusing Tango.BL.Entities;\r\nusing Tango.BL.Enumerations;\r\nusing Tango.PMR.Stubs;\r\nusing Tango.PMR.Diagnostics;\r\nusing Tango.FSE.Common.Connection;\r\nusing Tango.FSE.Common.Diagnostics;\r\nusing Tango.FSE.Procedures;\r\nusing System.IO;\r\nusing System.Windows.Forms;\r\nusing Tango.PMR.EmbeddedParameters;\r\n\r\npublic class Program\r\n{\r\nconst double\tMIN_SLOP=0.7;\r\nconst double\tMAX_SLOP=1.4;\r\nconst double\tERROR_SLOP=-1;\r\nconst double\tMIN_50cc_on_volt=2.3;\r\nconst double\tMAX_50cc_on_volt=3.2;\r\nconst double\tERROR_50cc_on_volt=-1;\r\n\r\nint [] Convert_Midtank_No = new Int32 [8] {1,3,5,7,2,4,6,8};\r\nuint [,] ADC_Add_Chnl = new uint [8,2]\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t{0x44,0x20},\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t{0x44,0x08},\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t{0x46,0x80},\r\n\t\t\t\t\t\t\t\t\t\t\t\t{0x46,0x20},\r\n\t\t\t\t\t\t\t\t\t\t\t\t{0x44,0x10},\r\n\t\t\t\t\t\t\t\t\t\t\t\t{0x44,0x04},\r\n\t\t\t\t\t\t\t\t\t\t\t\t{0x46,0x40},\r\n\t\t\t\t\t\t\t\t\t\t\t\t{0x46,0x10},\r\n\t\t\t\t\t\t\t\t\t\t};\r\n\r\n\r\nconst Int32\tF3_VALVE_OUT\t=\t0x600008E2\t;\r\nstring Machine_SN\t;\r\nprivate const string FILE_PATH = @\"C:\\MidTankLog\\\";\r\nstring File_name;\r\ndouble Full_Cartridge=1000;\t// on CC \r\ndouble \tSlop=0.92;\r\n//----------------------\r\nconst Int32 I2C_ID = 2;\r\n//const Int32 I2C_Slave_Add = 0x46; //must be 0x40, 0x44 or 0x46\r\n//----------------------\r\n\r\n\r\nprivate IProcedureContext context;\r\n\r\n\r\n\r\n\r\n public void OnExecute(IProcedureContext context)\r\n {\r\n \r\n\r\n\tInt32 Timout ;\r\n\tInt32 Interval;\r\n\tInt32 midtankno = 0;\r\n\tdouble Full_Point=0;\t\t\t//on Voltage\r\n\tdouble resualt;\r\n\tdouble Sum=0 ;\r\n\tdouble Old_Sum=0 ;\r\n\tdouble Start_Point=0;\r\n\t\r\n\r\n\tif (!Directory.Exists(FILE_PATH))\r\n\t\t{\r\n\t\t\tDirectory.CreateDirectory(FILE_PATH);\r\n\t\t}\t\t\t\r\n\r\n\r\n\r\n var response =context.RequestUserInputFor(\"Enter Midtank S/N: \", \"\");\r\n\tcontext.Write(\"\\n\");\r\n\tMachine_SN = response;\r\n\tcontext.WriteLine(Machine_SN);\r\n\tFile_name= FILE_PATH +Machine_SN + DateTime.Now.ToString(\"MM_dd_yyyy_HH_mm_ss\")+\".csv\";\r\n\tcontext.Write(File_name);\r\n \tcontext.WriteToFile(File_name,\"MidTank S/N:,\" + Machine_SN);\r\n\t\r\n\r\n var response1 =context.RequestUserInputFor(\"Enter Midtank number to calibrate (1-8):\", \"\");\r\n context.WriteLine(response1);\r\n\tmidtankno = Int32.Parse(response1);\r\n \tcontext.AppendToFile(File_name,\"MidTank Number:\\t\" + response1);\r\n\tif (midtankno==8)\r\n\t{\r\n\t\tSlop=1;\r\n\t\tTimout=60;\t\t//60 minutes\r\n\t\tInterval=60;\t//60 second\r\n\t}\r\n\telse\r\n\t{\r\n\t\tSlop=0.92;\r\n\t\tTimout=10*2;\t\t//10 minutes\r\n\t\tInterval=30;\t//30 second\r\n\r\n\t}\r\n var response10 =context.RequestUserInputFor(\"Enter Cartridge Valume on CC (500-1500):\", \"\");\r\n context.WriteLine(response10);\r\n\tFull_Cartridge = double.Parse(response10);\r\n \tcontext.AppendToFile(File_name,\"Cartridge Valume:\\t\" + response10);\r\n \tcontext.AppendToFile(File_name,\"Slop value:\\t\" + Slop);\r\n\r\n\r\n\tDialogResult result = MessageBox.Show(\"Are you sure to calibrate Midtank No: \"+ midtankno + \" with \"+ Full_Cartridge +\" CC\" , \"Warning\",MessageBoxButtons.YesNo);\r\n\tif(result == DialogResult.Yes)\r\n\t{\r\n\r\n\r\n\r\n\t\tstring box_msg = \"Please Insert cartridge \";\r\n\r\n\t\tMessageBox.Show(box_msg);\r\n\t\t\r\n\t\topen_valve(midtankno,1,1)\t\t;\t//open Air valve\r\n\t\topen_valve(midtankno,0,1)\t\t;\t//open Ink valve\r\n\t\tInt32 i=0; \r\n\t\twhile (iOld_Sum)\r\n\t\t\t\tOld_Sum=Sum-Old_Sum;\r\n\t\t\telse\r\n\t\t\t\tOld_Sum=Old_Sum-Sum;\r\n\t\t\r\n \r\n\t\t\tif ((check_valve(midtankno,1) != 0) && (check_valve(midtankno,0) != 0))\r\n\t\t\t{\r\n\t\t\t\ti++;\r\n\t\t\t\tif ( Old_Sum <0.02)\t\r\n\t\t\t\t\ti=Timout+1;\t\t//end \r\n\t\t\t\tOld_Sum=Sum;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\topen_valve(midtankno,1,0)\t\t;\t//open Air valve\r\n\t\t\topen_valve(midtankno,0,0)\t\t;\t//open Ink valve\r\n\t\t\tOld_Sum=0;\r\n\t\t\t\r\n\t\t\t}\t\r\n\t\t}\r\n\t\tFull_Point=Sum/Interval;\r\n\t\t\r\n\r\n\t\tclose_valve(midtankno,1,1)\t\t;\t//close Air valve\r\n\t\tclose_valve(midtankno,0,1)\t\t;\t//close Ink valve\r\n\r\n\t\t\t\r\n\t\tif (insert_slop_t_eeprom(Full_Point, midtankno,Start_Point)==0)\r\n\t\t{\r\n\t\t\t\tbox_msg =\"Turn Power Off and On to finish the calibration.\";\r\n\t\t\t\tMessageBox.Show(box_msg);\r\n\r\n\r\n \tcontext.AddResult(ResultType.Passed, \"Test passed\", \"Test passed.\");\r\n\t\t\t\t\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t\tbox_msg =\"Calibration error\";\r\n\t\t\t\tMessageBox.Show(box_msg);\r\n\r\n\r\n \tcontext.AddResult(ResultType.Failed, \"Test Fail\", \"Test Fail.\");\r\n\t\t\t\t\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n\r\n\tint\tinsert_slop_t_eeprom( double FullPoint,Int32 midtankno, double StartPoint)\r\n{\r\n//\tcontext.Write(\"\\n \");\r\n\r\n\t\tStartPoint=FullPoint-StartPoint;\r\n\t\tStartPoint=StartPoint/Full_Cartridge;\r\n\t\tif ((StartPoint>0.7 ) && (StartPoint>1.3 ))\r\n\t\t{\r\n\t\t\tMidTankDataSetupRequest midTankDataSetupRequest = new MidTankDataSetupRequest();\r\n\r\n\t\t\tMidTankData midTankData = new MidTankData();\r\n\t\t\tmidTankData.MidTankId = Convert.ToUInt32 (midtankno-1);\r\n\t\t\tmidTankData.InitialOffsetA =FullPoint - (Full_Cartridge/1000-0.1)/Slop;\r\n\t\t\tmidTankData.SlopeB = Slop;\r\n\t\t\t\r\n\t\t\tcontext.Write(\"\\nMidtank No:\" + midtankno + \"=\\tVoltage Zero is =\"+(FullPoint - (Full_Cartridge/1000-0.1)/Slop)+\"\\tSlop=\"+ Slop);\r\n\t\t\tcontext.AppendToFile(File_name,\"\\nMidtank No:\" + midtankno + \"=\\tVoltage Zero is =\"+(FullPoint - (Full_Cartridge/1000-0.1)/Slop)+\"\\tSlop=\"+ Slop);\r\n\r\n\t\t\t\r\n\t\t\tmidTankDataSetupRequest.MidTankInfo.Add(midTankData);\r\n\t\t\r\n\r\n\t\t\tvar response =context.Send(midTankDataSetupRequest);\r\n\r\n\t\t\treturn\t0;\r\n\t\t}\r\n\t\telse\r\n\t\t\tcontext.Write(\"\\nError\");\r\n\t\t\tcontext.AppendToFile(File_name,\"\\n Slop Error\");\r\n\t\t\treturn\t1;\r\n\t\r\n\r\n }\r\n\r\n\r\n\r\nint adc_configuration(uint I2C_Slave_Add,uint channel ) \r\n\t{\r\n\tStubI2CWriteBytesRequest stubI2CWriteBytesRequest = new StubI2CWriteBytesRequest();\r\n\tstubI2CWriteBytesRequest.I2CId = I2C_ID;\r\n\tstubI2CWriteBytesRequest.SlaveAddress = I2C_Slave_Add;\r\n\t\r\n\tUInt32 uInt32 = new UInt32();\r\n\tstubI2CWriteBytesRequest.BytesTWrite.Add(0x00);//Byte 0 to write\r\n\tstubI2CWriteBytesRequest.BytesTWrite.Add(channel);//Byte 1 to Write, must be 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02 or 0x01 for different channels\r\n\tstubI2CWriteBytesRequest.BytesTWrite.Add(0x80);//Byte 2 to Write\r\n\t\r\n\tvar response =context.Send(stubI2CWriteBytesRequest);\r\n\t\r\n\treturn 1;\r\n\t}\r\n\r\n\r\nint adc_set_for_read_ch(uint I2C_Slave_Add) \r\n\t{\r\n\tStubI2CWriteBytesRequest stubI2CWriteBytesRequest = new StubI2CWriteBytesRequest();\r\n\tstubI2CWriteBytesRequest.I2CId = I2C_ID;\r\n\tstubI2CWriteBytesRequest.SlaveAddress = I2C_Slave_Add;\r\n\t\r\n\tUInt32 uInt32 = new UInt32();\r\n\tstubI2CWriteBytesRequest.BytesTWrite.Add(0x01);//Byte 0 to write\r\n\r\n\tvar response =context.Send(stubI2CWriteBytesRequest);\r\n\t\r\n\treturn 1;\r\n\t}\r\n\r\n\r\n\r\n\r\ndouble adc_read_ch(uint I2C_Slave_Add) \r\n\t{\r\n\tStubI2CReadBytesRequest stubI2CReadBytesRequest = new StubI2CReadBytesRequest();\r\n\tstubI2CReadBytesRequest.I2CId = I2C_ID;\r\n\tstubI2CReadBytesRequest.SlaveAddress = I2C_Slave_Add;\r\n\tstubI2CReadBytesRequest.NumberOfBytesToRead = 2; // Number of bytes to read\r\n\r\n\tvar response1 =context.Send(stubI2CReadBytesRequest);\r\n\tuint temph=0;\r\n\tuint templ=0;\r\n\tuint temp;\r\n\tdouble calc;\r\n\tdouble calc1;\r\n\tdouble calc2;\r\n\t\t\ttemph=response1.ReadBytes[0];\r\n\t\t\ttempl=response1.ReadBytes[1];\r\n\t\t\ttemp = (temph << 8) | templ;\r\n\t\t\ttemp=temp & 0x0fff;\r\n\t\t\t\t\r\n\t\t\tcalc = (double)temp *2.5 / 4096.0;\r\n\t\t\r\n\t\t\tcalc1 = (1.96- calc) * 4.64 + 1.96;\r\n\t\t\tcontext.Write(\"Vsensor [volts]:\\t\");\r\n\t\t\tcontext.Write(calc1 + \"\\n\");\r\n\r\n\t\r\n\treturn calc1;\r\n\t}\r\n\r\ndouble\t\tread_pressure_sensor(Int32 i )\r\n\t{\r\ndouble resualt =0 ;\r\n\t\t switch (i)\r\n {\r\n case 1:\r\n\t\t\tadc_configuration(0x44,0x20);\t\t//a2d_address 0x44 channel channel 2\r\n\t\t\tadc_set_for_read_ch(0x44);\r\n\t\t\tresualt=adc_read_ch(0x44);\r\n\t\tbreak;\r\n\t\t\r\n\t\tcase 2:\r\n\t\t\tadc_configuration(0x44,0x08);\t\t//a2d_address 0x44 channel channel 4\r\n\t\t\tadc_set_for_read_ch(0x44);\r\n\t\t\tresualt=adc_read_ch(0x44);\r\n\t\tbreak;\r\n\t\t\r\n\t\tcase 3:\r\n\t\t\tadc_configuration(0x46,0x80);\t\t//a2d_address 0x46 channel channel 0\r\n\t\t\tadc_set_for_read_ch(0x46);\r\n\t\t\tresualt=adc_read_ch(0x46);\r\n\t\tbreak;\r\n\t\t\r\n\t\tcase 4:\r\n\t\t\tadc_configuration(0x46,0x20);\t\t//a2d_address 0x46 channel channel 2\r\n\t\t\tadc_set_for_read_ch(0x46);\r\n\t\t\tresualt=adc_read_ch(0x46);\r\n\t\tbreak;\r\n\t\t\r\n\t\tcase 5:\r\n\t\t\tadc_configuration(0x44,0x10);\t\t//a2d_address 0x44 channel channel 3\r\n\t\t\tadc_set_for_read_ch(0x44);\r\n\t\t\tresualt=adc_read_ch(0x44);\r\n\t\tbreak;\r\n\t\t\r\n\t\tcase 6:\r\n\t\t\tadc_configuration(0x44,0x04);\t\t//a2d_address 0x44 channel channel 5\r\n\t\t\tadc_set_for_read_ch(0x44);\r\n\t\t\tresualt=adc_read_ch(0x44);\r\n\t\tbreak;\r\n\t\t\r\n\t\tcase 7:\r\n\t\t\tadc_configuration(0x46,0x40);\t\t//a2d_address 0x46 channel channel 1\r\n\t\t\tadc_set_for_read_ch(0x46);\r\n\t\t\tresualt=adc_read_ch(0x46);\r\n\t\tbreak;\r\n\t\t\r\n\t\tcase 8:\r\n\t\t\tadc_configuration(0x46,0x10);\t\t//a2d_address 0x46 channel channel 3\r\n\t\t\tadc_set_for_read_ch(0x46);\r\n\t\t\tresualt=adc_read_ch(0x46);\r\n\t\tbreak;\r\n\t\t\r\n default:\r\n context.Write(\"Error\");\r\n\r\n break;\r\n\t }\t\r\n\t\t\r\n\t\treturn resualt;\r\n\t}\t\r\n\r\n\r\n//--------------------------------\r\nint open_valve (int valve_nm,int valve_type,int check_valve)\t\t//valve_type=0 is Air ,1 is Ink ; check_valve=1 send feedbak\r\n{\r\n\tint temp1=Convert_Midtank_No[valve_nm-1]\t;\r\n\r\n\tstring temp;\r\n\tSetBit (F3_VALVE_OUT,(((valve_type+1)*8)- temp1), 1);\t\r\n\t\r\n\t\tif (check_valve!=0)\r\n\t\t{\r\n\t\t\ttemp=\"Air\";\r\n\t\t\tif (valve_type==1)\r\n\t\t\ttemp=\"Ink\";\r\n\t\t\t\t\r\n\t\t\tDialogResult result = MessageBox.Show(\"Did \" + temp + \"Valve of Midtank \" + valve_nm +\" open?\", \"Warning\",MessageBoxButtons.YesNo);\r\n\t\t\tif(result == DialogResult.No)\r\n\t\t\t\t{\r\n//\t\t\t\t\tUnits_status[(valve_nm-1)*3+valve_type,1]=\"Fail\";\r\n\t\t\t\t\tcontext.Write(temp +\"Valve\\tFail\\n\");\t\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\telse \r\n\t\t\t\t{\r\n//\t\t\t\t\tUnits_status[(valve_nm-1)*3+valve_type,1]=\"Pass\";\r\n\t\t\t\t\tcontext.Write(temp +\"Valve\\tOpen\\n\");\t\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\t}\r\n\t\t\t\r\n\t\t}\r\n\t\treturn 1;\r\n\r\n}\r\n//--------------------------------\t\r\nint close_valve (int valve_nm,int valve_type,int check_valve)\r\n{\r\n\tint temp1=Convert_Midtank_No[valve_nm-1];\t\r\n\r\n\tstring temp;\r\n\tSetBit (F3_VALVE_OUT,(((valve_type+1)*8)- temp1), 0);\r\n\tif (check_valve!=0)\r\n\t\t{\r\n\t\t\ttemp=\"Air\";\r\n\t\t\tif (valve_type==1)\r\n\t\t\ttemp=\"Ink\";\r\n\t\t\t\t\r\n\t\t\tDialogResult result = MessageBox.Show(\"Did \" + temp +\" Valve of Midtank \" + valve_nm +\" close?\", \"Warning\",MessageBoxButtons.YesNo);\r\n\t\t\tif(result == DialogResult.No)\r\n\t\t\t\t{\r\n//\t\t\t\t\tUnits_status[(valve_nm-1)*3+valve_type,1]=\"Fail\";\r\n\t\t\t\t\tcontext.Write(temp +\"Valve\\tFail\\n\");\t\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\telse \r\n\t\t\t\t{\r\n//\t\t\t\t\tUnits_status[(valve_nm-1)*3+valve_type,1]=\"Pass\";\r\n\t\t\t\t\tcontext.Write(temp +\"Valve\\tclose\\n\");\t\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\t}\t\t\t\r\n\t\t}\r\n\treturn 1;\r\n\r\n}\r\n\r\npublic Int32 SetBit(Int32 Adr, Int32 BitNo, Int32 Bit)\r\n{\r\n\tInt32 BitMask;\r\n\tInt32 RetVal;\r\n\tRetVal = Fpga_Read_Reg(Adr);\r\n\tInt32 RV = RetVal ;\r\n\t\r\n\tif (Bit == 0x1) \r\n\t{\r\n\t\tBitMask = 0x1 << BitNo;\r\n\t\tRV = RV | BitMask;\r\n\t\tFpga_Write_Reg( Adr, RV );\r\n\t}\r\n\telse if (Bit == 0x0)\r\n\t{\r\n\t\tBitMask = ~(0x1 << BitNo);\r\n\t\tRV = RV & BitMask;\r\n\t\tFpga_Write_Reg(Adr, RV );\t\r\n\t}\r\n\treturn 1;\r\n}\r\n\r\nint Fpga_Write_Reg(Int32 Addr, Int32 Data)\r\n{\r\n\tvar response =context.Send(\"StubFpgaWriteRegRequest\" ,Addr, Data);\r\n\t\r\n\treturn 1;\r\n}\r\n\r\n\r\nInt32 check_valve (Int32 valve_nm,int valve_type)\r\n{\r\n\tInt32 temp1=Convert_Midtank_No[valve_nm-1];\t\r\n\t\r\n var response =context.Send(\"StubFpgaReadRegRequest\" ,F3_VALVE_OUT);\r\n\tInt32 RV =(Int32) response.Value & 0xffff ;\r\n\tRV = RV & ( 0x1 << (((valve_type+1)*8)- temp1));\r\n\treturn RV;\r\n\r\n}\r\n\r\n\r\nInt32 Fpga_Read_Reg(Int32 Addr)\r\n{\r\n \r\ncontext.Write(\"123\");\r\n\r\n\tvar response =context.Send(\"StubFpgaReadRegRequest\" ,Addr);\r\n\tcontext.Write(\"456\");\r\n\r\n\tInt32 RV= (Int32) response.Value & 0xffff;\r\n\tcontext.Write(\"789\");\r\n\r\n\treturn RV;\r\n} \r\n \r\n \r\n \r\n}","Name":"Program.csx","IsEntryPoint":true},{"$id":"4","Code":"using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing System.Drawing;\r\nusing Google.Protobuf;\r\nusing Tango.BL.Entities;\r\nusing Tango.BL.Enumerations;\r\nusing Tango.PMR.Stubs;\r\nusing Tango.PMR.Diagnostics;\r\nusing Tango.FSE.Common.Connection;\r\nusing Tango.FSE.Common.Diagnostics;\r\nusing Tango.FSE.Procedures;\r\n\r\npublic class Service\r\n{\r\n public double Calc(double a, double b)\r\n {\r\n return a + b;\r\n }\r\n}","Name":"Service.csx","IsEntryPoint":false}]},"Inputs":{"$id":"5","$values":[]},"Variables":{"$id":"6","$values":[]},"ReferenceAssemblies":{"$id":"7","$values":[{"$id":"8","File":"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\mscorlib.dll","HintType":"System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"9","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Core\\v4.0_4.0.0.0__b77a5c561934e089\\System.Core.dll","HintType":"System.Linq.Enumerable, System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"10","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Windows.Forms\\v4.0_4.0.0.0__b77a5c561934e089\\System.Windows.Forms.dll","HintType":"System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"11","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.FSE.Procedures.dll","HintType":"Tango.FSE.Procedures.ProcedureProject, Tango.FSE.Procedures, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"12","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.FSE.Common.dll","HintType":"Tango.FSE.Common.Diagnostics.IDiagnosticsProvider, Tango.FSE.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"13","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.BL.dll","HintType":"Tango.BL.Enumerations.TechMonitors, Tango.BL, Version=2.0.36.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"14","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.PMR.dll","HintType":"Tango.PMR.Common.MessageType, Tango.PMR, Version=2.0.40.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"15","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.Transport.dll","HintType":"Tango.Transport.ITransporter, Tango.Transport, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"16","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.Integration.dll","HintType":"Tango.Integration.Operation.IMachineOperator, Tango.Integration, Version=2.0.31.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"17","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Google.Protobuf.dll","HintType":"Google.Protobuf.IMessage, Google.Protobuf, Version=3.4.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604"},{"$id":"18","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Drawing\\v4.0_4.0.0.0__b03f5f7f11d50a3a\\System.Drawing.dll","HintType":"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"}]},"Resources":{"$id":"19","$values":[]},"Dialogs":{"$id":"20","$values":[]},"ID":"e2c3c81d-1914-4d45-b031-d054af33a18e","ApartmentState":"STA"} \ No newline at end of file diff --git a/Software/Stubs Collection/stubs/Scripts/Priming.pproj b/Software/Stubs Collection/stubs/Scripts/Priming.pproj new file mode 100644 index 000000000..309dae73e --- /dev/null +++ b/Software/Stubs Collection/stubs/Scripts/Priming.pproj @@ -0,0 +1 @@ +{"$id":"1","Name":"Priming","Description":null,"Scripts":{"$id":"2","$values":[{"$id":"3","Name":"Program.csx","Code":"using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing System.Drawing;\r\nusing Google.Protobuf;\r\nusing Tango.BL.Entities;\r\nusing Tango.BL.Enumerations;\r\nusing Tango.PMR.Stubs;\r\nusing Tango.PMR.Diagnostics;\r\nusing Tango.FSE.Common.Connection;\r\nusing Tango.FSE.Common.Diagnostics;\r\nusing Tango.FSE.Procedures;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\nusing System.Windows.Forms;\r\n\r\n\r\npublic class Program\r\n{\r\n\r\n\r\nprivate IProcedureContext context;\r\n\r\n//---------------------Start Command ----------------\r\nconst Int32\tCMD_RUN\t=\t0;\t\t//Run on Pulse Per Secound .positive run Up and negative run Down b\r\nconst Int32\tCMD_STOP=\t1;\t\t//0;Hard stop(Defualt);1-Soft stop;2-Hard Hiz;3-Soft Hiz\r\nconst Int32\tCMD_VALVE=\t2;\t\t//0-to Midtank ,1-to head \r\nconst Int32\tCMD_DLY\t=\t3;\t\t//delay in Seconds .\r\nconst Int32\tCMD_TIME=\t4;\t\t//Print Time .\r\nconst Int32\tCMD_PRESS=\t5;\t\t//return from Delay loop when pressure is high (on mBAR) .\r\nconst Int32 CMD_LOOP_NM=6;\t\t//NUMBER OF counter\r\nconst Int32 CMD_LOOP=\t7;\t\t//jump up(+) or down(-) command u\r\nconst Int32 CMD_MTV_OPEN =\t8;\t\t//0 Air ; 1 Ink\r\nconst Int32 CMD_MTV_CLOSE=\t9;\t\t//0 Air ; 1 Ink\r\nconst Int32 CMD_LBL=\t10;\t//label for user \r\nconst Int32 CMD_SMP=\t11; //sample rate ,defualt 100msec (1); for 1 second is 10.\r\nconst Int32 CMD_PRESL=\t12; //return from Delay loop when pressure is low (on mBAR) .\r\n\r\nconst Int32\tCMD_END\t=\t13;\t//end loop .\r\n \r\n\r\nInt32[] BuildUp_Table = new int []\r\n{\r\n\tCMD_VALVE,1,\r\n\tCMD_PRESL,200,\r\n\tCMD_DLY,200, \r\n\r\n\tCMD_LOOP_NM,3,\r\n\r\n\tCMD_VALVE,0,\r\n\tCMD_DLY,1, \r\n\tCMD_VALVE,1,\r\n\tCMD_DLY,1, \r\n\tCMD_LOOP,-4,\r\n\r\n\tCMD_VALVE,0,\r\n\tCMD_RUN,1068,\r\n\tCMD_PRESS,1000,\t//mbar --> 1000 = 100% work, 4000 = 200% work, 350 = 20% work\r\n\tCMD_DLY,150, \t\t\r\n\tCMD_LBL,1,\r\n\tCMD_PRESS,2000,\t//mbar --> 2000 = 100% work, 4000 = 200% work, 350 = 20% work\r\n\tCMD_DLY,60, \t\t\r\n\tCMD_LBL,2,\r\n\tCMD_PRESS,3000,\r\n\tCMD_DLY,60, // to limit\r\n\tCMD_STOP,0,\r\n\tCMD_VALVE,1,\r\n\tCMD_END,3,\r\n};\r\n\t\r\n\r\nInt32[] Up_Table = new int []\r\n{\r\n\tCMD_VALVE,1,\r\n\tCMD_PRESL,200,\r\n\tCMD_DLY,200, \r\n\t\r\n\tCMD_PRESS,3000,\t//mbar --> 1000 = 100% work, 4000 = 200% work, 350 = 20% work\r\n\tCMD_RUN,534, // 100%\r\n\tCMD_DLY,120,\r\n\tCMD_STOP,0,\r\n\tCMD_END,3,\r\n};\r\nInt32 Dispenser_sample_rate= 1; \r\n\r\n\tstring path = @\"C:\\Dispenser_setup\\Log\\\"; \t\r\n//----------------------\r\nconst UInt32 I2C_ID \t\t\t= \t4;\t\t\t\t\t//MCU_I2C4 \r\nconst UInt32 TCA9548A_address \t=\t0xE2;\t \t\r\nconst UInt32 I2C_Slave_Low_Add \t= \t0xA0;\t\t\t\t//eeprom address - 64k low \r\nconst UInt32 I2C_Slave_High_Add = \t0xA2;\t\t\t\t//eeprom address - 64k High\r\n//----------------------\r\nbyte [] EEPROM_Data = new byte [128];\r\n\r\n\r\n//---------------------End Command ----------------\r\n\r\nconst Int32\tDispenser_Motor1\t=\t6;\t\t \r\nconst Int32\tDispenser_Motor2\t=\t7;\t\t \r\nconst Int32\tDispenser_Motor3\t=\t8;\t\t \r\nconst Int32\tDispenser_Motor4\t=\t9;\t\t \r\nconst Int32\tDispenser_Motor5\t=\t10;\t\t \r\nconst Int32\tDispenser_Motor6\t=\t11;\t\t \r\nconst Int32\tDispenser_Motor7\t=\t12;\t\t \r\nconst Int32\tDispenser_Motor8\t=\t13;\t\t \r\n\r\nconst Int32 AN_IDS_PRESSENS_1\t=\t2;\r\nconst Int32 AN_IDS_PRESSENS_2\t=\t3;\r\nconst Int32 AN_IDS_PRESSENS_3\t=\t4;\r\nconst Int32 AN_IDS_PRESSENS_4\t=\t5;\r\nconst Int32 AN_IDS_PRESSENS_5\t=\t6;\r\nconst Int32 AN_IDS_PRESSENS_6\t=\t7;\r\nconst Int32 AN_IDS_PRESSENS_7\t=\t8;\r\nconst Int32 AN_IDS_PRESSENS_8\t=\t9;\r\n\r\nconst Int32\tF2_LS_01_Direct\t=\t0x60000420\t;\t//\tReads the direct values that are currently being sent to the fpga.\trsv\t\trsv\t\trsv\t\t\t\t\t\trsv\t\t\t\t\t\tF2_LS_DISPENSER_UP_2\tF2_LS_DISPENSER_25_2\tF2_LS_DISPENSER_75_2\tF2_LS_DISPENSER_DOWN_2 \tF2_LS_DISPENSER_50_2\tF2_LS_DISPENSER_SPARE_2\tF2_LS_DISPENSER_UP_1\tF2_LS_DISPENSER_25_1 \tF2_LS_DISPENSER_75_1\tF2_LS_DISPENSER_DOWN_1\tF2_LS_DISPENSER_50_1\tF2_LS_DISPENSER_SPARE_1\t\t\t\r\nconst Int32\tF2_LS_02_Direct\t=\t0x60000430\t;\t//\tReads the direct values that are currently being sent to the fpga.\trsv\t\trsv\t\trsv\t\t\t\t\t\trsv\t\t\t\t\t\tF2_LS_DISPENSER_UP_4\tF2_LS_DISPENSER_25_4\tF2_LS_DISPENSER_75_4\tF2_LS_DISPENSER_DOWN_4\tF2_LS_DISPENSER_50_4\tF2_LS_DISPENSER_SPARE_4\tF2_LS_DISPENSER_UP_3\tF2_LS_DISPENSER_25_3 \tF2_LS_DISPENSER_75_3\tF2_LS_DISPENSER_DOWN_3\tF2_LS_DISPENSER_50_3\tF2_LS_DISPENSER_SPARE_3\t\t\t\r\nconst Int32\tF2_LS_03_Direct\t=\t0x60000440\t;\t//\tReads the direct values that are currently being sent to the fpga.\trsv\t\trsv\t\trsv\t\t\t\t\t\trsv\t\t\t\t\t\tF2_LS_DISPENSER_UP_6 \tF2_LS_DISPENSER_25_6 \tF2_LS_DISPENSER_75_6 \tF2_LS_DISPENSER_DOWN_6\tF2_LS_DISPENSER_50_6\tF2_LS_DISPENSER_SPARE_6\tF2_LS_DISPENSER_UP_5\tF2_LS_DISPENSER_25_5 \tF2_LS_DISPENSER_75_5\tF2_LS_DISPENSER_DOWN_5\tF2_LS_DISPENSER_50_5\tF2_LS_DISPENSER_SPARE_5\t\t\t\r\nconst Int32\tF2_LS_04_Direct =\t0x60000480\t;\t//\tReads the direct values that are currently being sent to the fpga.\trsv\t\trsv\t\trsv\t\t\t\t\t\trsv\t\t\t\t\t\tF2_LS_DISPENSER_UP_8\tF2_LS_DISPENSER_25_8\tF2_LS_DISPENSER_75_8\tF2_LS_DISPENSER_DOWN_8\tF2_LS_DISPENSER_50_8\tF2_LS_DISPENSER_SPARE_8\tF2_LS_DISPENSER_UP_7\tF2_LS_DISPENSER_25_7 \tF2_LS_DISPENSER_75_7\tF2_LS_DISPENSER_DOWN_7\tF2_LS_DISPENSER_50_7\tF2_LS_DISPENSER_SPARE_7\t\t\t\r\n\r\nconst Int32 Dispenser_Valve1\t=\t0;\r\nconst Int32 Dispenser_Valve2\t=\t1;\r\nconst Int32 Dispenser_Valve3\t=\t2;\r\nconst Int32 Dispenser_Valve4\t=\t3;\r\nconst Int32 Dispenser_Valve5\t=\t4;\r\nconst Int32 Dispenser_Valve6\t=\t5;\r\nconst Int32 Dispenser_Valve7\t=\t6;\r\nconst Int32 Dispenser_Valve8\t=\t7;\r\n\r\nconst ushort MinPress_Mbar_Add =0x5c ;\r\nconst ushort MaxPress_Mbar_Add =0x60 ;\r\n\r\nconst Int32 F3_VALVE_OUT\t= 0x600000e2;\t\t\r\n\r\n//string path = \"C:\\\\Dispenser_setup\\\\Log\\\\\"; \r\n\r\n\r\n//Int32[] Start_Table;\r\n\r\nInt32[] Start_Table = new Int32 [10000];\r\n\r\nUInt32 [] Motor_Dir=new UInt32 [8] {0,0,0,0,0,0,0,0};\r\n\r\nstring Dispenser_Fname ;\r\n\r\nInt32 Dispenser_ptr =-1;\r\n\r\nInt32 [] Dispenser_press= new Int32[8]{0,0,0,0,0,0,0,0};\r\nInt32 max_pressure_level = 20000;\r\nInt32 min_pressure_level = -20000;\r\n\t\r\nInt32 [] A2D_Dispenser= new Int32[8]{0,0,0,0,0,0,0,0};\r\nInt32 Loop_cnt= 1;\r\nInt32 Loop_length=1;\r\n\r\nInt32 PressureSensorType= 1;\t\t//1- new -1up +10 . 0-old 0 to +10\r\nInt32\tTemp_Delay=0;\r\n\r\n\r\nUInt32 RD_LS_01_Direct;\r\nUInt32 RD_LS_02_Direct;\r\nUInt32 RD_LS_03_Direct;\r\nUInt32 RD_LS_04_Direct;\r\n\r\nlong Lebel1_time;\r\nlong Lebel2_time;\r\n\r\nlong time_Table;\r\n\r\nInt32 msec_index=0;\r\n\r\nInt32 MaxPress_Mbar;\r\nInt32 MinPress_Mbar;\r\nstring state;\r\n\r\n\tpublic Int32 OnExecute(IProcedureContext context)\r\n {\r\n\t\tlong Max_PBU;\r\n\t\tInt32 Index=0;\r\n\t\tInt32 speed=0;\r\n\t\tInt32 Dispenser_Nm;\r\n\t\tthis.context = context;\r\n\t\r\n\t\tstring box_msg = \"Make sure Mixer Hot \";\r\n\t\tMessageBox.Show(box_msg);\r\n\t\t\r\n\t\tvar response1 = context.RequestUserInputFor(\"Dispenser Number\", \"Enter Dispenser number to make priming (1-8):\");\r\n\t\tcontext.WriteLine(response1);\r\n\t\tDispenser_Nm = Int32.Parse(response1);\r\n\t\t\r\n\t\tcheck_Min_Max_Mbar(Dispenser_Nm);\r\n\t\r\n\t\tif (Dispenser_Nm==8)\r\n\t\t\tMax_PBU=6000;\r\n\t\telse\r\n\t\t\tMax_PBU=4000;\r\n\t\t\t\r\n\t\r\n\tif (!Directory.Exists(path))\r\n\t\t{\r\n\t\t\tDirectory.CreateDirectory(path);\r\n\t\t}\t\r\n\t\t\tcontext.WriteLine(path);\r\n\t\t\t\r\n\tcontext.Send(\"ProgressRequest\" ,0xe0, 1);\r\n\r\n\tDispenser_Fname=path + \"Dispenser_Nm_\" + Dispenser_Nm+\"_\" + DateTime.Now.ToString(\"MM-dd-yy hh-mm\")+ \".csv\" ;\r\n\r\n\tcontext.WriteLine(Dispenser_Fname);\r\n\r\n\tcontext.WriteToFile(Dispenser_Fname,\"Dispenser Nm,\" + Dispenser_Nm + \"\\n\" );\r\n\tcontext.AppendToFile(Dispenser_Fname,\"Pressure,Command,Value,DateTime,Remark\\n\" ); \r\n\t\tfor(int j=0; j<2;j++)\r\n\t\t{\r\n\t\t\tfor(int i=0; i<4;i++)\r\n\t\t\t{\r\n\t\t\t\tstate=\"PBU No. \"+ (4*j+i+1 );\r\n\t\t\t\tStart_Table=BuildUp_Table;\r\n\t\t\t\tTable_Run(Dispenser_Nm );\r\n\t\t\t\tif (time_Table>300000)\r\n\t\t\t\t{\r\n\t\t\t\t\tcontext.AddResult(ResultType.Failed,\"PBU\", \"PBU No.\"+ (4*j+i+1 ) + \" Fail\");\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t\t context.AddResult(ResultType.Passed,\"PBU\",\"PBU No.\"+ (4*j+i+1 ) + \" Pass\");\r\n\t\t\t\t\t\r\n\t\t\t}\r\n\t\t\tstate=\"Flow No.\"+ (j+1 ) ;\r\n\t\t\tStart_Table=Up_Table;\r\n\t\t\tTable_Run(Dispenser_Nm );\r\n\t\t\tif (time_Table<115000)\r\n\t\t\t\t{\r\n\t\t\t\t\tcontext.WriteLine(\"time_Table= \" +time_Table);\r\n\t\t\t\t\tcontext.AddResult(ResultType.Failed,\"Flow\", \"Flow No.\"+ (j+1) + \" Fail\");\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t\t context.AddResult(ResultType.Passed,\"Flow\",\"Flow No.\"+ (j+1 ) + \" Pass\");\r\n\t\t\t\t\t\t\r\n\t\t}\r\n\t\t\t\t state=\"Last PBU \" ;\r\n\t\t\t\tStart_Table=BuildUp_Table; \r\n\t\t\t\tTable_Run(Dispenser_Nm );\r\n\t\t\t\tlong Time=Lebel2_time-Lebel1_time;\r\n\t\t\t\tif (Time>Max_PBU)\r\n\t\t\t\t { \r\n\t\t\t\t context.AddResult(ResultType.Failed,\"PBU\", \"PBU = \" +Time + \"msec \");\r\n\t\t\t\t state=\"PBU = \" +Time + \"msec \\tFail\";\r\n\t\t\t\t }\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t context.AddResult(ResultType.Passed,\"PBU\", \"PBU = \" +Time + \"msec \");\r\n\t\t\t\t state=\"PBU = \" +Time + \"msec \\tPass\";\r\n\t\t\t\t}\t\r\n\t\treturn 0;\r\n\t\t\r\n }\r\n\r\n/////////////////////////////////////////////\r\nvoid \t\tcheck_Min_Max_Mbar(Int32 i )\r\n{\r\n\tint k;\r\n\tstring s ;\r\n\ti--;\r\n\r\n\t\t\t\t\tcontext.WriteLine(\"-------------- write Enable Channel ------------\");\t//debug\r\n\t\tenable_channel(i); // Chanel 0-7 => Disp0enser 0-7 \r\n\t\t\t\t\tcontext.WriteLine(\"-------------- Read_header ------------\");\t//debug\r\n\r\n\t\t\t\t\tcontext.WriteLine(\"-------------- write_address_eeprom ------------\");\t//debug\r\n\t\twrite_address_eeprom (I2C_Slave_Low_Add,MinPress_Mbar_Add);\r\n\t\t\t\t\tcontext.WriteLine(\"-------------- read_data_from_eeprom ------------\");\t//debug\r\n\t\tread_data_from_eeprom (I2C_Slave_Low_Add,1);\r\n\t\tif \t(EEPROM_Data[0]==0\t)\r\n\t\t{\tPressureSensorType=0;\r\n\t\t\tcontext.WriteLine(\"PressureSensorType=0\" );\t//debug\r\n\t\t}\r\n\t\telse\t\r\n\t\t{\t\r\n\t\t\tPressureSensorType=1;\t\t\t\t\t\r\n\t\t\tcontext.WriteLine(\"PressureSensorType=1\" );\t//debug\r\n\t\t}\r\n\t\r\n}\t\r\n//----------------write address eeprom -------------------------\r\npublic void write_address_eeprom (UInt32 I2C_Add, UInt32 Eeprom_Add)\r\n{\t\r\n\tStubI2CWriteBytesRequest stubI2CWriteBytesRequest = new StubI2CWriteBytesRequest();\r\n\tstubI2CWriteBytesRequest.I2CId = I2C_ID;\r\n\tstubI2CWriteBytesRequest.SlaveAddress = I2C_Add;\r\n\t\r\n\tUInt32 uInt32 = new UInt32();\r\n\tstubI2CWriteBytesRequest.BytesTWrite.Add(Convert.ToByte( (Eeprom_Add & 0xff00) >>8));\t//Byte High add to write\r\n\tstubI2CWriteBytesRequest.BytesTWrite.Add(Convert.ToByte(Eeprom_Add & 0xff));\t\t\t//Byte Low add to write\r\n\t\t\t\t\tcontext.WriteLine( (Eeprom_Add & 0xff00) >>8) ;\t//debug\r\n\t\t\t\t\tcontext.WriteLine( Eeprom_Add & 0xff);\t//debug\r\n\r\n\tcontext.Send(stubI2CWriteBytesRequest);\t\r\n}\r\n//------------------- read Data from EEprom--------------------------\r\n\r\npublic void read_data_from_eeprom ( UInt32 I2C_Add, UInt32 cnt )\r\n{\r\n\tStubI2CReadBytesRequest stubI2CReadBytesRequest = new StubI2CReadBytesRequest();\r\n\tstubI2CReadBytesRequest.I2CId = I2C_ID;\r\n\tstubI2CReadBytesRequest.SlaveAddress = (I2C_Add + 1);\r\n\tstubI2CReadBytesRequest.NumberOfBytesToRead = cnt; // Number of bytes to read\r\n\r\n\tvar response1 = context.Send(stubI2CReadBytesRequest);\r\n\r\n\tfor(int i=0; i(stubI2CWriteBytesRequest);\r\n\t\r\n\treturn 1;\r\n}\r\n\r\n\r\n////////////////////////////////////////////////////////////// \r\nInt32 Table_Run(Int32 Dispenser )\r\n\r\n{\r\n\tInt32 COMMAND=0;\r\n\tInt32 Data=0;\r\n\tInt32 count=0;\r\n\t\r\n\tDispenser--;\t\t//check from 0-7\r\n\t\r\n\tint j=0;\r\n\tvar stopwatch = new Stopwatch();\r\n\t\tstopwatch.Start();\r\n\t\r\n\t\tlong elapsed_time = stopwatch.ElapsedMilliseconds;\r\n\t\tcontext.WriteLine(elapsed_time);\r\n\t\t\r\n\twhile (count!=-1) \r\n\t{\r\n\tmsec_index=msec_index+1;\r\n\t\t\r\n\t\tif (Dispenser<2) \r\n\t\t\t{\r\n\t\t\t\tvar response1 = context.Send(\"StubFpgaReadRegRequest\" ,F2_LS_01_Direct);\r\n\t\t\t\tRD_LS_01_Direct=response1.Value\t ;\r\n\t\t\t}\r\n\t\telse if ( (Dispenser<4) )\r\n\t\t\t{\r\n\t\t\t\tvar response1 = context.Send(\"StubFpgaReadRegRequest\" ,F2_LS_02_Direct);\r\n\t\t\t\tRD_LS_02_Direct=response1.Value\t ;\r\n\t\t\t}\r\n\t\telse if ( (Dispenser<6) )\r\n\t\t\t{\r\n\t\t\t\tvar response1 = context.Send(\"StubFpgaReadRegRequest\" ,F2_LS_03_Direct);\r\n\t\t\t\tRD_LS_03_Direct=response1.Value\t ;\r\n\t\t\t}\r\n\t\telse\r\n\t\t\t{\r\n\t\t\t\tvar response1 = context.Send(\"StubFpgaReadRegRequest\" ,F2_LS_04_Direct);\r\n\t\t\t\tRD_LS_04_Direct=response1.Value\t ;\r\n\t\t\t}\r\n\t\tif (Dispenser<4) \r\n\t\t\t{\r\n\t\t\tvar response2 = context.Send(\"StubIntADCReadRequest\" ,0x8000 + AN_IDS_PRESSENS_1);\r\n\t\t\t\tA2D_Dispenser[0]=(response2.SamplingInBits)>>16;\r\n\t\t\t\tA2D_Dispenser[1] =(response2.SamplingInBits) & 0x0000ffff;\r\n\t\t\t\tA2D_Dispenser[2] =(response2.VoltageSamplingMv)>>16;\r\n\t\t\t\tA2D_Dispenser[3] =(response2.VoltageSamplingMv) & 0x0000ffff;\r\n\t\t\t}\r\n\t\telse\r\n\t\t\t{\r\n\t\t\tvar\tresponse3 = context.Send(\"StubIntADCReadRequest\" ,0x8000 + AN_IDS_PRESSENS_5);\r\n\t\t\t\tA2D_Dispenser[4] =(response3.SamplingInBits)>>16;\r\n\t\t\t\tA2D_Dispenser[5] =(response3.SamplingInBits)& 0x0000ffff;\r\n\t\t\t\tA2D_Dispenser[6] =(response3.VoltageSamplingMv)>>16;\r\n\t\t\t\tA2D_Dispenser[7] =(response3.VoltageSamplingMv)& 0x0000ffff;\r\n\t\t\t}\r\n\t\t\t\t\r\n\t\t\tCOMMAND=Start_Table[count];\r\n\t\t\tData=Start_Table[(count+1)];\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//Index=Index+2;\r\n\t\t\tswitch (COMMAND)\r\n\t\t\t\t{\r\n\t\t\t\tcase CMD_RUN:\r\n\t\t\t\t\tMotor_Run(Data,Dispenser);\r\n\t\t\t\t\tcount = count+2;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase CMD_VALVE:\r\n\t\t\t\t\tValve_3W(Data,Dispenser);\r\n\t\t\t\t\tcount = count+2;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase CMD_STOP:\r\n\t\t\t\t\tMotor_Stop(Data,Dispenser);\r\n\t\t\t\t\tcount = count+2;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase CMD_DLY:\r\n\t\t\t\t\tDelay_on_second(Data,Dispenser);\r\n\t\t\t\t\tif (Temp_Delay ==0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmax_pressure_level=20000;\t\r\n\t\t\t\t\t\tmin_pressure_level=-20000;\t\r\n\t\t\t\t\t\tcount = count+2;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase CMD_TIME:\r\n\t\t\t\t\tPrint_Time();\r\n\t\t\t\t\tcount = count+2;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase CMD_PRESS:\r\n\t\t\t\t\tmax_pressure_level=Data;\r\n\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",Max_pressure_level is, \" + Data +\",\"+DateTime.Now+\"\\n\");\r\n\t\t\t\t\tcount = count+2;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase CMD_PRESL:\r\n\t\t\t\t\tmin_pressure_level=Data;\r\n\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",Min_pressure_level is, \" + Data +\",\"+DateTime.Now+\"\\n\");\r\n\t\t\t\t\tcount = count+2;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase CMD_LBL:\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",Label,\" + Data+\",\"+DateTime.Now+\"\\n\");\r\n\t\t\t\t\tif(Data==1)\r\n\t\t\t\t\t\tLebel1_time=stopwatch.ElapsedMilliseconds;\r\n\t\t\t\t\tif(Data==2)\r\n\t\t\t\t\t\tLebel2_time=stopwatch.ElapsedMilliseconds;\r\n\t\t\t\t\tcount = count+2;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\tcase CMD_SMP:\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",SampleRate,\" + Data+\",\"+DateTime.Now+\"\\n\");\r\n\t\t\t\t\tDispenser_sample_rate =Data;\r\n\t\t\t\t\tcount = count+2;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase CMD_END:\r\n\t\t\t\t\tcount=-1;\r\n\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",End testing,,\"+DateTime.Now+\"\\n\");\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\r\n\t\t\t\tcase CMD_MTV_OPEN:\r\n\t\t\t\t\topen_midtank_valve(Data,Dispenser);\r\n\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",OPEN MIDTANK, \" + Dispenser+\",\"+DateTime.Now+\"\\n\");\r\n\t\t\t\t\tcount = count+2;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase CMD_MTV_CLOSE:\r\n\t\t\t\t\tclose_midtank_valve(Data,Dispenser);\r\n\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",CLOSE MIDTANK, \" + Dispenser+\",\"+DateTime.Now+\"\\n\");\r\n\t\t\t\t\tcount = count+2;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\r\n\t\t\t\tcase CMD_LOOP_NM:\r\n\t\t\t\t\r\n\t\t\t\t\tLoop_cnt=Data-1;\r\n\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",Counter Loop,\"+ Data+\",\"+DateTime.Now +\"\\n\");\r\n\t\t\t\t\tcount = count+2;\t\t\t\t\t\t\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase CMD_LOOP:\r\n\t\t\t\t\r\n\t\t\t\t\tif (Loop_cnt!=0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\"Counter Loop,\"+ Loop_cnt+\",\"+DateTime.Now+\"\\n\" );\r\n\t\t\t\t\t\tcount = count+2*Data;\r\n\t\t\t\t\t\tLoop_cnt--;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",End loop,,\"+DateTime.Now +\"\\n\");\r\n\t\t\t\t\t\tcount = count+2;\t\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t}\t\r\n\t\t\t\r\n\t\t\tlong elapsed_time1 = stopwatch.ElapsedMilliseconds;\r\n\t\t\tlong elapsed_time2= elapsed_time1-elapsed_time;\r\n\t\t\tif (elapsed_time2>95)\r\n\t\t\telapsed_time2=95;\t\t//minimum time\r\n\t\t\t\tThread.Sleep(100-(int )(elapsed_time2));\r\n\r\n\t\t\telapsed_time = stopwatch.ElapsedMilliseconds;\t\t\r\n\r\n\r\n\t\t\tj++;\r\n\t\t\t\tif (j==10)\r\n\t\t\t\t{\r\n\t\t\t\t\tj=0;\r\n\t\t\t\t\tcontext.WriteLine(Dispenser_press[Dispenser]+ \" mBar\\t\"+state + \"\\tTime-\" + (elapsed_time/1000));\r\n\t\t\t\t}\r\n\t}\r\n\ttime_Table=elapsed_time;\r\n\treturn 0;\r\n}\r\n\r\n///////////////////////////////////////////////////////////////////\t\r\nInt32 Motor_Run(Int32 speed,Int32 Dispenser)\r\n\r\n{\r\n\r\n\tswitch (Dispenser)\r\n\t\t{\r\n\t\tcase 0:\r\n\t\t\t\tif ( speed<0)\r\n\t\t\t\t{\r\n\t\t\t\t\tMotor_Dir[0]=2;\r\n\t\t\t\t\tif ((RD_LS_01_Direct & 0x04)!=0x04)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",,,\"+DateTime.Now +\",Warning Motor on Limit\\n\");\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tcontext.Send(\"StubMotorRunRequest\" ,Dispenser_Motor1, false, (-speed));\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\t\r\n\t\t\t\t\tMotor_Dir[0]=1;\r\n\t\t\t\t\tif ((RD_LS_01_Direct & 0x20)!=0x20)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",,,\"+DateTime.Now +\",Warning Motor on Limit\\n\");\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontext.Send(\"StubMotorRunRequest\" ,Dispenser_Motor1, true, (speed));\r\n\t\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\tcase 1:\r\n\t\t\t\tif ( speed<0)\r\n\t\t\t\t{\r\n\t\t\t\t\tMotor_Dir[1]=2;\r\n\t\t\t\t\tif ((RD_LS_01_Direct & 0x100)!=0x100)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",,,\"+DateTime.Now +\",Warning Motor on Limit\\n\");\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontext.Send(\"StubMotorRunRequest\" ,Dispenser_Motor2, false, (-speed));\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\t\r\n\t\t\t\t\tMotor_Dir[1]=1;\r\n\t\t\t\t\tif ((RD_LS_01_Direct & 0x800)!=0x800)\r\n\t\t\t\t\t{\t\t\t\t\t\t\r\n\t\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",,,\"+DateTime.Now +\",Warning Motor on Limit\\n\");\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontext.Send(\"StubMotorRunRequest\" ,Dispenser_Motor2, true, (speed));\r\n\t\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\tcase 2:\r\n\t\t\t\tif ( speed<0)\r\n\t\t\t\t{\r\n\t\t\t\t\tMotor_Dir[2]=2;\r\n\t\t\t\t\tif ((RD_LS_02_Direct & 0x04)!=0x04)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",,,\"+DateTime.Now +\",Warning Motor on Limit\\n\");\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontext.Send(\"StubMotorRunRequest\" ,Dispenser_Motor3, false, (-speed));\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\t\r\n\t\t\t\t\tMotor_Dir[2]=1;\r\n\t\t\t\t\tif ((RD_LS_02_Direct & 0x20)!=0x20)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",,,\"+DateTime.Now+ \",Warning Motor on Limit\\n\");\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontext.Send(\"StubMotorRunRequest\" ,Dispenser_Motor3, true, (speed));\r\n\t\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\tcase 3:\r\n\t\t\t\tif ( speed<0)\r\n\t\t\t\t{\r\n\t\t\t\t\tMotor_Dir[3]=2;\r\n\r\n\t\t\t\t\tif ((RD_LS_02_Direct & 0x100)!=0x100)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",,,\"+DateTime.Now+ \",Warning Motor on Limit\\n\");\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontext.Send(\"StubMotorRunRequest\" ,Dispenser_Motor4, false, (-speed));\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\t\r\n\t\t\t\t\tMotor_Dir[3]=1;\r\n\r\n\t\t\t\t\tif ((RD_LS_02_Direct & 0x800)!=0x800)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",,,\"+DateTime.Now +\",Warning Motor on Limit\\n\");\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontext.Send(\"StubMotorRunRequest\" ,Dispenser_Motor4, true, (speed));\r\n\t\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\r\n\t\tcase 4:\r\n\t\t\t\tif ( speed<0)\r\n\t\t\t\t{\r\n\t\t\t\t\tMotor_Dir[4]=2;\r\n\t\t\t\t\tif ((RD_LS_03_Direct & 0x04)!=0x04)\r\n\t\t\t\t\t{ \r\n\t\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",,,\"+DateTime.Now+ \",Warning Motor on Limit\\n\");\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tcontext.Send(\"StubMotorRunRequest\" ,Dispenser_Motor5, false, (-speed));\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\t\r\n\t\t\t\t\tMotor_Dir[4]=1;\r\n\t\t\t\t\tif ((RD_LS_03_Direct & 0x20)!=0x20)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",,,\"+DateTime.Now+ \",Warning Motor on Limit\\n\");\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontext.Send(\"StubMotorRunRequest\" ,Dispenser_Motor5, true, (speed));\r\n\t\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\tcase 5:\r\n\t\t\t\tif ( speed<0)\r\n\t\t\t\t{\r\n\t\t\t\t\tMotor_Dir[5]=2;\r\n\t\t\t\t\tif ((RD_LS_03_Direct & 0x100)!=0x100)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",,,\"+DateTime.Now +\",Warning Motor on Limit\\n\");\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontext.Send(\"StubMotorRunRequest\" ,Dispenser_Motor6, false, (-speed));\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\t\r\n\t\t\t\t\tMotor_Dir[5]=1;\r\n\t\t\t\t\tif ((RD_LS_03_Direct & 0x800)!=0x800)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",,,\"+DateTime.Now+ \",Warning Motor on Limit\\n\");\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontext.Send(\"StubMotorRunRequest\" ,Dispenser_Motor6, true, (speed));\r\n\t\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\tcase 6:\r\n\t\t\t\tif ( speed<0)\r\n\t\t\t\t{\r\n\t\t\t\t\tMotor_Dir[6]=2;\r\n\t\t\t\t\tif ((RD_LS_04_Direct & 0x04)!=0x04)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",,,\"+DateTime.Now +\",Warning Motor on Limit\\n\");\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontext.Send(\"StubMotorRunRequest\" ,Dispenser_Motor7, false, (-speed));\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\t\r\n\t\t\t\t\tMotor_Dir[6]=1;\r\n\t\t\t\t\tif ((RD_LS_04_Direct & 0x20)!=0x20)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",,,\"+DateTime.Now +\",Warning Motor on Limit\\n\");\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontext.Send(\"StubMotorRunRequest\" ,Dispenser_Motor7, true, (speed));\r\n\t\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\tcase 7:\r\n\t\t\t\tif ( speed<0)\r\n\t\t\t\t{\r\n\t\t\t\t\tMotor_Dir[7]=2;\r\n\r\n\t\t\t\t\tif ((RD_LS_04_Direct & 0x100)!=0x100)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",,,\"+DateTime.Now +\",Warning Motor on Limit\\n\");\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontext.Send(\"StubMotorRunRequest\" ,Dispenser_Motor8, false, (-speed));\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\t\r\n\t\t\t\t\tMotor_Dir[7]=1;\r\n\r\n\t\t\t\t\tif ((RD_LS_04_Direct & 0x800)!=0x800)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcontext.AppendToFile(Dispenser_Fname,\",,,\"+DateTime.Now +\",Warning Motor on Limit\\n\");\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontext.Send(\"StubMotorRunRequest\" ,Dispenser_Motor8, true, (speed));\r\n\t\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\tdefault:\r\n\t\t\tbreak;\r\n\r\n\t\t}\r\n \tcontext.AppendToFile(Dispenser_Fname,\",Run,\" +speed+\",\"+DateTime.Now +\"\\n\" ); \r\n\r\n\treturn 1;\r\n} \r\n \r\n \t\r\n Int32 Valve_3W(Int32 Valve_Value,Int32 Dispenser)\r\n{\r\n\tif ( Valve_Value==1)\r\n\t\tcontext.Send(\"StubValveRequest\" ,Dispenser_Valve1+Dispenser, 3, true);\t//3 3Way\r\n\telse\t\r\n\t\tcontext.Send(\"StubValveRequest\" ,Dispenser_Valve1+Dispenser, 3, false); //3 3Way\r\n \r\n\tcontext.AppendToFile(Dispenser_Fname,\",Dispenser Valve position is, \" + Valve_Value+\",\"+DateTime.Now +\"\\n\" );\r\n\r\n\treturn 1;\t\r\n}\t\r\n//--------------------------------------- \r\n\r\n Int32 Motor_Stop(Int32 Stop_Value,Int32 Dispenser )\r\n{\r\n\tcontext.Send(\"StubMotorStopRequest\" ,Dispenser_Motor1+Dispenser, Stop_Value);\r\n\t\r\n\tcontext.AppendToFile(Dispenser_Fname,\",Motor Stop,\" + Stop_Value+\",\"+DateTime.Now +\"\\n\");\r\n\tMotor_Dir[Dispenser]=0;\r\n\treturn 1;\t\r\n}\r\n\r\n//--------------------------------------- \r\n\r\n Int32 Delay_on_second(Int32 Delay,Int32 Dispenser )\r\n{\r\n//Int32 temp1;\r\nInt32 pressure_om_mBAR=0;\r\n\tif \t(Temp_Delay ==0)\r\n\t{\r\n\t\tcontext.AppendToFile(Dispenser_Fname,\",DLY, \" + Delay +\",\"+DateTime.Now+\"\\n\");\r\n\t\tTemp_Delay = Delay *10 -1;\r\n//\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.Write(\"A\");\t\t//debug\r\n\t}\r\n\telse\t\r\n\t\t\tTemp_Delay--;\r\n\t\t\t\r\n\tif ( LimitSW_Dispenser(Dispenser)==0)\r\n \t {\t\r\n \t \tcontext.AppendToFile(Dispenser_Fname,\",,,\"+DateTime.Now+\",Warning Motor on Limit\\n\");\r\n\t\t\tMotorStop(Dispenser);\r\n\t\t\tTemp_Delay =0;\t//end delay\r\n//\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.Write(\"C\");\t\t//debug\r\n\r\n\t\t\treturn 0 ;\r\n \t }\r\n\t\t\t\t\t\r\n\tpressure_om_mBAR=Calc_mBAR(Dispenser,true);\r\n \tif (pressure_om_mBAR > max_pressure_level)\r\n \t \t{\r\n\t\t//\tMotorStop(Dispenser);\r\n\t\t\tcontext.AppendToFile(Dispenser_Fname,\",,,\"+DateTime.Now +\",Warning Pressure too high\\n\");\r\n\t\t\tTemp_Delay =0;\t//end delay\r\n//\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.Write(\"D\");\t\t//debug\r\n\t\t\t\r\n\t\t\treturn 0;\r\n\t\t}\r\n \tif (pressure_om_mBAR < min_pressure_level)\r\n \t \t{\r\n\t\t//\tMotorStop(Dispenser);\r\n\t\t\tcontext.AppendToFile(Dispenser_Fname,\",,,\"+DateTime.Now +\",Warning Pressure too low\\n\");\r\n\t\t\tTemp_Delay =0;\t//end delay\r\n//\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.Write(\"D\");\t\t//debug\r\n\t\t\t\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\t\r\n\t\t\r\n \treturn 1;\r\n}\t\r\n \t \t\r\nInt32 LimitSW_Dispenser(Int32 Dispenser) \r\n{\r\n\r\n\tif (Dispenser==0)\r\n\t\t\r\n\t\t{\r\n\t\t\t\r\n//\t\tvar response1 = context.Send(\"StubFpgaReadRegRequest\" ,F2_LS_01_Direct);\r\n\r\n\t\t\t\tif (((RD_LS_01_Direct & 0x04)!=0x04) && (Motor_Dir[0]==2))\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\telse\r\n\t\t\t\tif (((RD_LS_01_Direct & 0x20)!=0x20) && (Motor_Dir[0]==1))\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\telse\r\n\t\t\t\treturn 1;\t\t\r\n\t\t}\r\n\t\t\r\n\tif (Dispenser==1)\r\n\t\t\r\n\t\t{\r\n//\t\tvar response2 = context.Send(\"StubFpgaReadRegRequest\" ,F2_LS_01_Direct);\r\n\t\t\t\tif (((RD_LS_01_Direct & 0x100)!=0x100) && (Motor_Dir[1]==2))\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\telse\r\n\t\t\t\tif (((RD_LS_01_Direct & 0x800)!=0x800) && (Motor_Dir[1]==1))\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\telse\r\n\t\t\t\treturn 1;\t\t\r\n\t\t}\r\n\t\t\r\n\r\n\tif (Dispenser==2)\r\n\t\t\r\n\t\t{\r\n\t\t\t\t\r\n\t\t//var response3 = context.Send(\"StubFpgaReadRegRequest\" ,F2_LS_02_Direct);\r\n\t\t\t\tif (((RD_LS_02_Direct & 0x04)!=0x04) && (Motor_Dir[2]==2))\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\telse\r\n\t\t\t\tif (((RD_LS_02_Direct & 0x20)!=0x20) && (Motor_Dir[2]==1))\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\telse\r\n\t\t\t\treturn 1;\t\t\r\n\t\t\t\r\n\t\t}\r\n\t\t\r\n\tif (Dispenser==3)\r\n\t\t\r\n\t\t{\r\n\t\t\t\tvar response4 = context.Send(\"StubFpgaReadRegRequest\" ,F2_LS_02_Direct);\r\n\t\t\t\tif (((RD_LS_02_Direct & 0x100)!=0x100) && (Motor_Dir[3]==2))\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\telse\r\n\t\t\t\tif (((RD_LS_02_Direct & 0x800)!=0x800) && (Motor_Dir[3]==1))\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\telse\r\n\t\t\t\treturn 1;\t\t\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t\t\r\n\r\n\tif (Dispenser==4)\r\n\t\t\r\n\t\t{\r\n\t\t\t\r\n//\t\tvar response1 = context.Send(\"StubFpgaReadRegRequest\" ,F2_LS_01_Direct);\r\n\t\t\t\tif (((RD_LS_03_Direct & 0x04)!=0x04) && (Motor_Dir[4]==2))\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\telse\r\n\t\t\t\tif (((RD_LS_03_Direct & 0x20)!=0x20) && (Motor_Dir[4]==1))\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\telse\r\n\t\t\t\treturn 1;\t\t\r\n\t\t}\r\n\t\t\r\n\tif (Dispenser==5)\r\n\t\t\r\n\t\t{\r\n//\t\tvar response2 = context.Send(\"StubFpgaReadRegRequest\" ,F2_LS_01_Direct);\r\n\t\t\t\tif (((RD_LS_03_Direct & 0x100)!=0x100) && (Motor_Dir[5]==2))\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\telse\r\n\t\t\t\tif (((RD_LS_03_Direct & 0x800)!=0x800) && (Motor_Dir[5]==1))\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\telse\r\n\t\t\t\treturn 1;\t\t\r\n\t\t}\r\n\t\t\r\n\r\n\tif (Dispenser==6)\r\n\t\t\r\n\t\t{\r\n\t\t\t\t\r\n\t\t//var response3 = context.Send(\"StubFpgaReadRegRequest\" ,F2_LS_02_Direct);\r\n\t\t\t\tif (((RD_LS_04_Direct & 0x04)!=0x04) && (Motor_Dir[6]==2))\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\telse\r\n\t\t\t\tif (((RD_LS_04_Direct & 0x20)!=0x20) && (Motor_Dir[6]==1))\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\telse\r\n\t\t\t\treturn 1;\t\t\r\n\t\t\t\r\n\t\t}\r\n\t\t\r\n\tif (Dispenser==7)\r\n\t\t\r\n\t\t{\r\n//\t\tvar response4 = context.Send(\"StubFpgaReadRegRequest\" ,F2_LS_02_Direct);\r\n\t\t\t\tif (((RD_LS_04_Direct & 0x100)!=0x100) && (Motor_Dir[7]==2))\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\telse\r\n\t\t\t\tif (((RD_LS_04_Direct & 0x800)!=0x800) && (Motor_Dir[7]==1))\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\telse\r\n\t\t\t\treturn 1;\t\t\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t\treturn 0;\r\n}\t\t\r\n\t\t\r\n\t \t\r\nInt32 Print_Time() \r\n{\t\r\n\t\tcontext.AppendToFile(Dispenser_Fname,\",Time is\\t,,\"+ DateTime.Now +\"\\n\" ); \r\n\r\n\t\treturn 1;\r\n}\t\r\n\r\n\r\n\r\nInt32 Calc_mBAR(Int32 Dispenser, bool save_press)\r\n{\t\t\r\nInt32 Data;\r\nInt32 Sense1;\r\nInt32 temp=0;\r\n\r\n\t\tData =A2D_Dispenser[Dispenser];\r\n\t\tif (Data<100)\r\n\t\t\ttemp=-1;\r\n\t\tData=Data-710;\r\n\t\tif (Data<0)\r\n\t\tData=0;\r\n\r\n\t\tData=Data*(10000+PressureSensorType*1000)/2840;\t//\tfor -1 to 10 bar Press_Sensor_Type=1 else 0\r\n\t\tData=Data-1000*PressureSensorType; \t\t\t// for -1 to 10 bar\r\n\r\n\t\tif (temp==-1)\t\t\t\t\t\t//if SamplingInBits <100 then No pressure sensor exist\r\n\t\tSense1=-9999\t;\r\n\t\telse\t\r\n\t\tSense1=Data\t;\r\n\t\tif (\t((msec_index) % (Dispenser_sample_rate)) == 0)\r\n\t\t{\r\n\t\t\tcontext.AppendToFile(Dispenser_Fname,\"\" + Sense1+\"\\n\");\r\n\t\t}\r\n\t\tDispenser_press[Dispenser]=Sense1;\r\n\treturn Sense1;\r\n\t\t\t\r\n } \t\r\n\r\n \r\n//--------------------------------\r\nint open_midtank_valve (Int32 valve_type,Int32 valve_nm)\t\t//valve_type=0 is Air ,1 is Ink ; valve_nm 0-7\r\n{\r\n\tSetBit (F3_VALVE_OUT,((valve_type+1)*8)- valve_nm-1, 1);\r\n\treturn 1;\r\n\r\n}\r\n//--------------------------------\t\r\nint close_midtank_valve (Int32 valve_type,Int32 valve_nm)\t\t//valve_type=0 is Air ,1 is Ink ; valve_nm 0-7\r\n{\r\n\tSetBit (F3_VALVE_OUT,((valve_type+1)*8)- valve_nm-1, 0);\r\n\treturn 1;\r\n}\r\n//--------------------------------\r\nInt32 SetBit(Int32 Adr, Int32 BitNo, Int32 Bit)\r\n{\r\n\tInt32 BitMask;\r\n\r\n var response = context.Send(\"StubFpgaReadRegRequest\" , F3_VALVE_OUT);\r\n\tInt32 RV = (Int32) response.Value & 0xffff;\r\n\t\r\n\t\r\n\tif (Bit == 0x1) \r\n\t{\r\n\t\tBitMask = 0x1 << BitNo;\r\n\t\tRV = RV | BitMask;\r\n\t\tcontext.Send(\"StubFpgaWriteRegRequest\" ,F3_VALVE_OUT , RV);\r\n\t}\r\n\telse if (Bit == 0x0)\r\n\t{\r\n\t\tBitMask = ~(0x1 << BitNo);\r\n\t\tRV = RV & BitMask;\r\n\t\tcontext.Send(\"StubFpgaWriteRegRequest\" ,F3_VALVE_OUT , RV);\r\n\t}\r\n\treturn 1;\r\n}\r\n//---------------------------------- \r\n void MotorStop(Int32 i)\r\n{\r\n \r\ncontext.Send(\"StubMotorStopRequest\" ,Dispenser_Motor1+i, 2);\r\nMotor_Dir[i]=0;\t//0 stop 1- up 2-dn\r\n\r\n}\r\n \r\n}","IsEntryPoint":true},{"$id":"4","Name":"Service.csx","Code":"using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing System.Drawing;\r\nusing Google.Protobuf;\r\nusing Tango.BL.Entities;\r\nusing Tango.BL.Enumerations;\r\nusing Tango.PMR.Stubs;\r\nusing Tango.PMR.Diagnostics;\r\nusing Tango.FSE.Common.Connection;\r\nusing Tango.FSE.Common.Diagnostics;\r\nusing Tango.FSE.Procedures;\r\n\r\npublic class Service\r\n{\r\n public double Calc(double a, double b)\r\n {\r\n return a + b;\r\n }\r\n}","IsEntryPoint":false}]},"Inputs":{"$id":"5","$values":[]},"Variables":{"$id":"6","$values":[{"$id":"7","Name":null,"Value":null}]},"ReferenceAssemblies":{"$id":"8","$values":[{"$id":"9","File":"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\mscorlib.dll","HintType":"System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"10","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Core\\v4.0_4.0.0.0__b77a5c561934e089\\System.Core.dll","HintType":"System.Linq.Enumerable, System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"11","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Windows.Forms\\v4.0_4.0.0.0__b77a5c561934e089\\System.Windows.Forms.dll","HintType":"System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"12","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.FSE.Procedures.dll","HintType":"Tango.FSE.Procedures.ProcedureProject, Tango.FSE.Procedures, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"13","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.FSE.Common.dll","HintType":"Tango.FSE.Common.Diagnostics.IDiagnosticsProvider, Tango.FSE.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"14","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.BL.dll","HintType":"Tango.BL.Enumerations.TechMonitors, Tango.BL, Version=2.0.36.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"15","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.PMR.dll","HintType":"Tango.PMR.Common.MessageType, Tango.PMR, Version=2.0.40.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"16","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.Transport.dll","HintType":"Tango.Transport.ITransporter, Tango.Transport, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"17","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.Integration.dll","HintType":"Tango.Integration.Operation.IMachineOperator, Tango.Integration, Version=2.0.31.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"18","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Google.Protobuf.dll","HintType":"Google.Protobuf.IMessage, Google.Protobuf, Version=3.4.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604"},{"$id":"19","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Drawing\\v4.0_4.0.0.0__b03f5f7f11d50a3a\\System.Drawing.dll","HintType":"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"}]},"Resources":{"$id":"20","$values":[]},"Dialogs":{"$id":"21","$values":[]},"ID":"b5924fbd-808a-41e3-99fb-980cd8df910c","ApartmentState":"STA"} \ No newline at end of file diff --git a/Software/Stubs Collection/stubs/Scripts/Set cleaning sequence.cs b/Software/Stubs Collection/stubs/Scripts/Set cleaning sequence.cs new file mode 100644 index 000000000..6f5357535 --- /dev/null +++ b/Software/Stubs Collection/stubs/Scripts/Set cleaning sequence.cs @@ -0,0 +1,23 @@ +using System; +using System.Text; +using System.Linq; +using System.Drawing; +using System.Diagnostics; +using System.Windows.Forms; +using System.Threading; +using System.Threading.Tasks; +using System.Collections.Generic; +using Tango.PMR.Stubs; +using Tango.Stubs; + +public void OnExecute(StubManager stubManager) +{ + + +ProgressRequest progressRequest = new ProgressRequest(); +progressRequest.Amount = 0xAD7; +progressRequest.Delay = 1; // 1 - active, 0 - disabled + +var response = stubManager.Run(progressRequest); + +} \ No newline at end of file diff --git a/Software/Stubs Collection/stubs/Scripts/WHS_waste_Tank_Calibration_Save_V0.pproj b/Software/Stubs Collection/stubs/Scripts/WHS_waste_Tank_Calibration_Save_V0.pproj new file mode 100644 index 000000000..5932b58a0 --- /dev/null +++ b/Software/Stubs Collection/stubs/Scripts/WHS_waste_Tank_Calibration_Save_V0.pproj @@ -0,0 +1 @@ +{"$id":"1","Name":"untitled","Description":null,"Scripts":{"$id":"2","$values":[{"$id":"3","Name":"Program.csx","Code":"using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing System.Drawing;\r\nusing Google.Protobuf;\r\nusing Tango.BL.Entities;\r\nusing Tango.BL.Enumerations;\r\nusing Tango.PMR.Stubs;\r\nusing Tango.PMR.Diagnostics;\r\nusing Tango.FSE.Common.Connection;\r\nusing Tango.FSE.Common.Diagnostics;\r\nusing Tango.FSE.Procedures;\r\n\r\n\r\npublic class Program\r\n{\r\n\tdouble V0_default_ml = 8.7433;\r\n\r\n public void OnExecute(IProcedureContext context)\r\n {\r\n \r\n\tvar response1 = context.RequestUserInputFor(\"Warning - you are going to change the value of Vo in the eeprom !!!\\nPlease Enter Password to confirme:\",\"\");\r\n\tif (response1==\"Aa123456\")\r\n\t{\r\n\t\tcontext.WriteLine(response1);\r\n\t\t\r\n\t\t//Write_0_Vo_in_ml_to_eeprom\r\n\t\tcontext.WriteLine(\"\\nWrite_0_Vo_in_ml_to_eeprom\");\t\r\n\t\tStubWhsEEpromRequest stubWhsEEpromRequest = new StubWhsEEpromRequest();\r\n\t\tstubWhsEEpromRequest.BurnRequest = true; //write\r\n\t\tStubWhsEEpromData stubWhsEEpromData = new StubWhsEEpromData();\r\n\t\tstubWhsEEpromData.Orifice1Flow = 0;\r\n\t\tstubWhsEEpromRequest.WhsEEprom = stubWhsEEpromData;\r\n\t\tvar response = context.Send(stubWhsEEpromRequest);\r\n\t\t\t\t\r\n\t\t//wait_10mSec\r\n\t\tcontext.WriteLine(\"\\nwait_10mSec\");\t\r\n\t\tThread.Sleep(100); //Sleep for 10 milli.\r\n\t\t\r\n\t\t//Read_Vo_in_ml_from_eeprom\t& verify it is 0\r\n\t\tcontext.WriteLine(\"\\nRead_Vo_in_ml_from_eeprom\t& verify it is 0\");\r\n\t\tstubWhsEEpromRequest.BurnRequest = false; //write\r\n\t\tstubWhsEEpromRequest.WhsEEprom = stubWhsEEpromData;\r\n\t\tvar response2 = context.Send(stubWhsEEpromRequest);\r\n\t\t\r\n\t\t//Read_Vo_in_mV\r\n\t\tcontext.WriteLine(\"\\nRead_Vo_in_mV\");\r\n\t\tvar response3 = context.Send(\"ProgressRequest\" ,0x3EC, 0x01);\r\n\t\t//Print_Vo_in_mV\r\n\t\tcontext.WriteLine(response3.Progress);\r\n\t\t\r\n\t\t//check validity\r\n\t\tcontext.WriteLine(\"\\ncheck validity\");\r\n\t\t if((response3.Progress <= 800) || (response3.Progress >=1200))\r\n\t\t {\r\n\t\t \tresponse3.Progress = 1076; //default\r\n\t\t \tcontext.Write(\"\\nERROR ------ Vreading value outside the defined range !!! ------\");\r\n\t\t \t context.AddResult(ResultType.Failed , \"Error\", \"ERROR ------ Vreading value outside the defined range !!! ------\");\r\n\t\t }\r\n\t\telse\r\n\t\t{\t\t\t\r\n\t\t\t//calculate_V0_in_ml\r\n\t\t\tcontext.WriteLine(\"\\ncalculate_V0_in_ml\");\r\n\t\t\tV0_default_ml = V0_default_ml * response3.Progress;\r\n\t\t\t\r\n\t\t\t//print_Vo_in_ml\r\n\t\t\tcontext.WriteLine(\"\\nprint_Vo_in_ml\");\r\n\t\t\tcontext.WriteLine(V0_default_ml);\r\n\t\t\tcontext.WriteLine(\"\");\r\n\t\t\t\r\n\t\t\t//Write_Vo_in_ml_to_eeprom\r\n\t\t\tcontext.WriteLine(\"\\nWrite_Vo_in_ml_to_eeprom\");\r\n\t\t\tstubWhsEEpromRequest.BurnRequest = true; //write\r\n\t\r\n\t\t\tstubWhsEEpromData.Orifice1Flow = V0_default_ml;\r\n\t\t\tstubWhsEEpromRequest.WhsEEprom = stubWhsEEpromData;\r\n\t\t\tvar response4 = context.Send(stubWhsEEpromRequest);\r\n\t\t\t\t\r\n\t\t\t//wait_10mSec\r\n\t\t\tcontext.WriteLine(\"\\nwait_10mSec\");\t\r\n\t\t\t Thread.Sleep(100); //Sleep for 10 milli.\r\n\t\t\t \t\t\r\n\t\t\t //Read_Vo_in_ml_from_eeprom\r\n\t\t\tcontext.WriteLine(\"\\nRead_Vo_in_ml_from_eeprom\");\r\n\t\t\tstubWhsEEpromRequest.BurnRequest = false; //write\r\n\t\t\tstubWhsEEpromRequest.WhsEEprom = stubWhsEEpromData;\r\n\t\t\tvar response5 = context.Send(stubWhsEEpromRequest);\r\n\t\t\t\r\n\t\t\t//Check if we read the correct value\r\n\t\t\tcontext.WriteLine(\"\\nVerify that we read the correct value of Orifice1Flow!!\");\r\n\t\t\t context.AddResult(ResultType.Passed , \"Pass\", \"Calibration Pass.\");\r\n\r\n\t\t\t}\r\n\t}\r\n\t\telse\r\n \t{\r\n\t\t\tcontext.AddResult(ResultType.Failed , \"Error\", \"Password Fail.\");\r\n\t\t}\r\n\t\tcontext.WriteLine(\"\\n -- END OF SCRIPT -- \");\r\n }\r\n}\r\n\r\n\r\n","IsEntryPoint":true},{"$id":"4","Name":"Service.csx","Code":"using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing System.Drawing;\r\nusing Google.Protobuf;\r\nusing Tango.BL.Entities;\r\nusing Tango.BL.Enumerations;\r\nusing Tango.PMR.Stubs;\r\nusing Tango.PMR.Diagnostics;\r\nusing Tango.FSE.Common.Connection;\r\nusing Tango.FSE.Common.Diagnostics;\r\nusing Tango.FSE.Procedures;\r\n\r\npublic class Service\r\n{\r\n public double Calc(double a, double b)\r\n {\r\n return a + b;\r\n }\r\n}","IsEntryPoint":false}]},"Inputs":{"$id":"5","$values":[]},"Variables":{"$id":"6","$values":[]},"ReferenceAssemblies":{"$id":"7","$values":[{"$id":"8","File":"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\mscorlib.dll","HintType":"System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"9","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Core\\v4.0_4.0.0.0__b77a5c561934e089\\System.Core.dll","HintType":"System.Linq.Enumerable, System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"10","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Windows.Forms\\v4.0_4.0.0.0__b77a5c561934e089\\System.Windows.Forms.dll","HintType":"System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"11","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.FSE.Procedures.dll","HintType":"Tango.FSE.Procedures.ProcedureProject, Tango.FSE.Procedures, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"12","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.FSE.Common.dll","HintType":"Tango.FSE.Common.Diagnostics.IDiagnosticsProvider, Tango.FSE.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"13","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.BL.dll","HintType":"Tango.BL.Enumerations.TechMonitors, Tango.BL, Version=2.0.36.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"14","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.PMR.dll","HintType":"Tango.PMR.Common.MessageType, Tango.PMR, Version=2.0.40.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"15","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.Transport.dll","HintType":"Tango.Transport.ITransporter, Tango.Transport, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"16","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.Integration.dll","HintType":"Tango.Integration.Operation.IMachineOperator, Tango.Integration, Version=2.0.31.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"17","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Google.Protobuf.dll","HintType":"Google.Protobuf.IMessage, Google.Protobuf, Version=3.4.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604"},{"$id":"18","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Drawing\\v4.0_4.0.0.0__b03f5f7f11d50a3a\\System.Drawing.dll","HintType":"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"}]},"Resources":{"$id":"19","$values":[]},"Dialogs":{"$id":"20","$values":[]},"ID":"605a2ef0-71a6-450d-92f7-9b6d22850ad1","ApartmentState":"STA"} \ No newline at end of file diff --git a/Software/Stubs Collection/stubs/Scripts/Write SYLKO to head eeprom.cs b/Software/Stubs Collection/stubs/Scripts/Write SYLKO to head eeprom.cs deleted file mode 100644 index d7729ca2f..000000000 --- a/Software/Stubs Collection/stubs/Scripts/Write SYLKO to head eeprom.cs +++ /dev/null @@ -1,118 +0,0 @@ -using System; -using System.Text; -using System.Linq; -using System.Drawing; -using System.Diagnostics; -using System.Windows.Forms; -using System.Threading; -using System.Threading.Tasks; -using System.Collections.Generic; -using Tango.PMR.Stubs; -using Tango.Stubs; - -//---------------------- -const Int32 I2C_ID = 3; //MCU_I2C3 -const Int32 TCA9548A_address = 0xE2; -const Int32 I2C_Slave_Add = 0xA0; // //eeprom address - 32kByte -int Head_Mux_Channel_ID = 4; //Head MUX channel -//---------------------- - -const Int32 SerialNum = 0x01; - - -int enable_channel(int Channel_ID) -{ - uint Const_temp = 0x01; - - StubI2CWriteBytesRequest stubI2CWriteBytesRequest = new StubI2CWriteBytesRequest(); - stubI2CWriteBytesRequest.I2CId = I2C_ID; - stubI2CWriteBytesRequest.SlaveAddress = TCA9548A_address; - - Const_temp = Const_temp << Channel_ID; - stubI2CWriteBytesRequest.BytesTWrite.Add(Const_temp); - - var response = stubManager.Run(stubI2CWriteBytesRequest); - - return 1; -} - - -int adc_write(uint I2C_Slave_Add, uint Page) -{ - StubI2CWriteBytesRequest stubI2CWriteBytesRequest = new StubI2CWriteBytesRequest(); - stubI2CWriteBytesRequest.I2CId = I2C_ID; - stubI2CWriteBytesRequest.SlaveAddress = I2C_Slave_Add; - - UInt32 uInt32 = new UInt32(); - stubI2CWriteBytesRequest.BytesTWrite.Add(0);//Byte 0 to write - stubI2CWriteBytesRequest.BytesTWrite.Add(Page);//Byte 0 to write - //-------------------------------------------------------------- - - stubI2CWriteBytesRequest.BytesTWrite.Add(SerialNum);//S/N - stubI2CWriteBytesRequest.BytesTWrite.Add(0x03);//HEAD_TYPE_SYLKO - //stubI2CWriteBytesRequest.BytesTWrite.Add(0x04);//HEAD_TYPE_STAPLE_SPUN - - var response = stubManager.Run(stubI2CWriteBytesRequest); - - return 1; -} - -int adc_set_for_read_ch(uint I2C_Slave_Add, uint Page) -{ - StubI2CWriteBytesRequest stubI2CWriteBytesRequest = new StubI2CWriteBytesRequest(); - stubI2CWriteBytesRequest.I2CId = I2C_ID; - stubI2CWriteBytesRequest.SlaveAddress = I2C_Slave_Add; - - - UInt32 uInt32 = new UInt32(); - stubI2CWriteBytesRequest.BytesTWrite.Add(0);//Byte 0 to write - stubI2CWriteBytesRequest.BytesTWrite.Add(Page);//Byte 0 to write - - var response = stubManager.Run(stubI2CWriteBytesRequest); - - return 1; -} - -int adc_read_ch(uint I2C_Slave_Add) -{ - StubI2CReadBytesRequest stubI2CReadBytesRequest = new StubI2CReadBytesRequest(); - stubI2CReadBytesRequest.I2CId = I2C_ID; - stubI2CReadBytesRequest.SlaveAddress = I2C_Slave_Add + 1; - stubI2CReadBytesRequest.NumberOfBytesToRead = 10; // Number of bytes to read - - var response1 = stubManager.Run(stubI2CReadBytesRequest); - uint temph=0; - - for(int i=0; i Disp0enser 0-7 - - for (int i = 0; i<1; i++) - { - - adc_write(I2C_Slave_Add,0x00); - Thread.Sleep(10); //Sleep for 5 milli. - must! otherwise read 0xff (See data sheet ) - - stubManager.Write("\nPage 0x00 #"); - stubManager.Write(i); - stubManager.Write("\t- The Buffer is: "); - adc_set_for_read_ch(I2C_Slave_Add, 0x00); - //Thread.Sleep(1); //Sleep for 10 milli. - adc_read_ch(I2C_Slave_Add); - - Thread.Sleep(1000); - - } -} \ No newline at end of file diff --git a/Software/Stubs Collection/stubs/Scripts/config head type to hed card eeprom.cs b/Software/Stubs Collection/stubs/Scripts/config head type to hed card eeprom.cs new file mode 100644 index 000000000..fd0f7fcf7 --- /dev/null +++ b/Software/Stubs Collection/stubs/Scripts/config head type to hed card eeprom.cs @@ -0,0 +1,118 @@ +using System; +using System.Text; +using System.Linq; +using System.Drawing; +using System.Diagnostics; +using System.Windows.Forms; +using System.Threading; +using System.Threading.Tasks; +using System.Collections.Generic; +using Tango.PMR.Stubs; +using Tango.Stubs; + +//---------------------- +const Int32 I2C_ID = 3; //MCU_I2C3 +const Int32 TCA9548A_address = 0xE2; +const Int32 I2C_Slave_Add = 0xA0; // //eeprom address - 32kByte +int Head_Mux_Channel_ID = 4; //Head MUX channel +//---------------------- + +const Int32 SerialNum = 0x01; + + +int enable_channel(int Channel_ID) +{ + uint Const_temp = 0x01; + + StubI2CWriteBytesRequest stubI2CWriteBytesRequest = new StubI2CWriteBytesRequest(); + stubI2CWriteBytesRequest.I2CId = I2C_ID; + stubI2CWriteBytesRequest.SlaveAddress = TCA9548A_address; + + Const_temp = Const_temp << Channel_ID; + stubI2CWriteBytesRequest.BytesTWrite.Add(Const_temp); + + var response = stubManager.Run(stubI2CWriteBytesRequest); + + return 1; +} + + +int adc_write(uint I2C_Slave_Add, uint Page) +{ + StubI2CWriteBytesRequest stubI2CWriteBytesRequest = new StubI2CWriteBytesRequest(); + stubI2CWriteBytesRequest.I2CId = I2C_ID; + stubI2CWriteBytesRequest.SlaveAddress = I2C_Slave_Add; + + UInt32 uInt32 = new UInt32(); + stubI2CWriteBytesRequest.BytesTWrite.Add(0);//Byte 0 to write + stubI2CWriteBytesRequest.BytesTWrite.Add(Page);//Byte 0 to write + //-------------------------------------------------------------- + + stubI2CWriteBytesRequest.BytesTWrite.Add(SerialNum);//S/N + //stubI2CWriteBytesRequest.BytesTWrite.Add(0x03);//HEAD_TYPE_FLAT + stubI2CWriteBytesRequest.BytesTWrite.Add(0x04);//HEAD_TYPE_ARC + + var response = stubManager.Run(stubI2CWriteBytesRequest); + + return 1; +} + +int adc_set_for_read_ch(uint I2C_Slave_Add, uint Page) +{ + StubI2CWriteBytesRequest stubI2CWriteBytesRequest = new StubI2CWriteBytesRequest(); + stubI2CWriteBytesRequest.I2CId = I2C_ID; + stubI2CWriteBytesRequest.SlaveAddress = I2C_Slave_Add; + + + UInt32 uInt32 = new UInt32(); + stubI2CWriteBytesRequest.BytesTWrite.Add(0);//Byte 0 to write + stubI2CWriteBytesRequest.BytesTWrite.Add(Page);//Byte 0 to write + + var response = stubManager.Run(stubI2CWriteBytesRequest); + + return 1; +} + +int adc_read_ch(uint I2C_Slave_Add) +{ + StubI2CReadBytesRequest stubI2CReadBytesRequest = new StubI2CReadBytesRequest(); + stubI2CReadBytesRequest.I2CId = I2C_ID; + stubI2CReadBytesRequest.SlaveAddress = I2C_Slave_Add + 1; + stubI2CReadBytesRequest.NumberOfBytesToRead = 10; // Number of bytes to read + + var response1 = stubManager.Run(stubI2CReadBytesRequest); + uint temph=0; + + for(int i=0; i Disp0enser 0-7 + + for (int i = 0; i<1; i++) + { + + adc_write(I2C_Slave_Add,0x00); + Thread.Sleep(10); //Sleep for 5 milli. - must! otherwise read 0xff (See data sheet ) + + stubManager.Write("\nPage 0x00 #"); + stubManager.Write(i); + stubManager.Write("\t- The Buffer is: "); + adc_set_for_read_ch(I2C_Slave_Add, 0x00); + //Thread.Sleep(1); //Sleep for 10 milli. + adc_read_ch(I2C_Slave_Add); + + Thread.Sleep(1000); + + } +} \ No newline at end of file diff --git a/Software/Stubs Collection/stubs/Scripts/progress_test.pproj b/Software/Stubs Collection/stubs/Scripts/progress_test.pproj new file mode 100644 index 000000000..29d02caa2 --- /dev/null +++ b/Software/Stubs Collection/stubs/Scripts/progress_test.pproj @@ -0,0 +1 @@ +{"$id":"1","Name":"untitled","Description":null,"Scripts":{"$id":"2","$values":[{"$id":"3","Name":"Program.csx","Code":"using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing System.Drawing;\r\nusing Google.Protobuf;\r\nusing Tango.BL.Entities;\r\nusing Tango.BL.Enumerations;\r\nusing Tango.PMR.Stubs;\r\nusing Tango.PMR.Diagnostics;\r\nusing Tango.FSE.Common.Connection;\r\nusing Tango.FSE.Common.Diagnostics;\r\nusing Tango.FSE.Procedures;\r\n\r\npublic class Program\r\n{\r\n public void OnExecute(IProcedureContext context)\r\n {\r\n context.AddResult(ResultType.Passed, \"My Value Name\", \"Test for this value has passed.\");\r\n\t\t\r\nfor (int i=0;i<10;i++)\r\n{\r\n Thread.Sleep(10000);\r\n context.UpdateProgress(\"11111\",true,i,10);\r\n\t}\t\r\n }\r\n}","IsEntryPoint":true},{"$id":"4","Name":"Service.csx","Code":"using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing System.Drawing;\r\nusing Google.Protobuf;\r\nusing Tango.BL.Entities;\r\nusing Tango.BL.Enumerations;\r\nusing Tango.PMR.Stubs;\r\nusing Tango.PMR.Diagnostics;\r\nusing Tango.FSE.Common.Connection;\r\nusing Tango.FSE.Common.Diagnostics;\r\nusing Tango.FSE.Procedures;\r\n\r\npublic class Service\r\n{\r\n public double Calc(double a, double b)\r\n {\r\n return a + b;\r\n }\r\n}","IsEntryPoint":false}]},"Inputs":{"$id":"5","$values":[]},"Variables":{"$id":"6","$values":[]},"ReferenceAssemblies":{"$id":"7","$values":[{"$id":"8","File":"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\mscorlib.dll","HintType":"System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"9","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Core\\v4.0_4.0.0.0__b77a5c561934e089\\System.Core.dll","HintType":"System.Linq.Enumerable, System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"10","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Windows.Forms\\v4.0_4.0.0.0__b77a5c561934e089\\System.Windows.Forms.dll","HintType":"System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"11","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.FSE.Procedures.dll","HintType":"Tango.FSE.Procedures.ProcedureProject, Tango.FSE.Procedures, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"12","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.FSE.Common.dll","HintType":"Tango.FSE.Common.Diagnostics.IDiagnosticsProvider, Tango.FSE.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"13","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.BL.dll","HintType":"Tango.BL.Enumerations.TechMonitors, Tango.BL, Version=2.0.36.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"14","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.PMR.dll","HintType":"Tango.PMR.Common.MessageType, Tango.PMR, Version=2.0.40.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"15","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.Transport.dll","HintType":"Tango.Transport.ITransporter, Tango.Transport, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"16","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.Integration.dll","HintType":"Tango.Integration.Operation.IMachineOperator, Tango.Integration, Version=2.0.31.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"17","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Google.Protobuf.dll","HintType":"Google.Protobuf.IMessage, Google.Protobuf, Version=3.4.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604"},{"$id":"18","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Drawing\\v4.0_4.0.0.0__b03f5f7f11d50a3a\\System.Drawing.dll","HintType":"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"}]},"Resources":{"$id":"19","$values":[]},"Dialogs":{"$id":"20","$values":[]},"ID":"b99ea8ff-f5ff-44d5-8b33-4b534a14647b","ApartmentState":"STA"} \ No newline at end of file diff --git a/Software/Stubs Collection/stubs/Scripts/test halt.cs b/Software/Stubs Collection/stubs/Scripts/test halt.cs new file mode 100644 index 000000000..289eb612a --- /dev/null +++ b/Software/Stubs Collection/stubs/Scripts/test halt.cs @@ -0,0 +1,24 @@ +using System; +using System.Text; +using System.Linq; +using System.Drawing; +using System.Diagnostics; +using System.Windows.Forms; +using System.Threading; +using System.Threading.Tasks; +using System.Collections.Generic; +using Tango.PMR.Stubs; +using Tango.Stubs; + +public void OnExecute(StubManager stubManager) +{ + +//CF - initialize FFS +//DF - reset +ProgressRequest progressRequest = new ProgressRequest(); +progressRequest.Amount = 0xAD9; +progressRequest.Delay = 0xAD9; + + var response = stubManager.Run(progressRequest); + +} \ No newline at end of file diff --git a/Software/Stubs Collection/stubs/embeddedparametersbuild_w_cleaning.cs b/Software/Stubs Collection/stubs/embeddedparametersbuild_w_cleaning.cs index 5b2cfdc0d..0f8794799 100644 --- a/Software/Stubs Collection/stubs/embeddedparametersbuild_w_cleaning.cs +++ b/Software/Stubs Collection/stubs/embeddedparametersbuild_w_cleaning.cs @@ -35,8 +35,8 @@ configurationParameters.CloseValveTimeout = 20; configurationParameters.OpenValveTimeout = 20; //backlash after filling - target pressure, timoeout, time staps (speed will be added in general parameters) -configurationParameters.InitialDispenserPressure = 3.85; //used for initial pre-run pressure -configurationParameters.InitialDispenserTimeout = 120000; ////used for initial pre-run number of steps +configurationParameters.InitialDispenserPressure = 3.85; //used for initial pre-run maximal pressure +configurationParameters.InitialDispenserTimeout = 120000; ////used for initial pre-run target number of steps configurationParameters.InitialDispenserTimeLag = 100; //job prepare - build pressure in dispensers - target pressure, timoeout, time staps, speed @@ -108,7 +108,7 @@ configurationParameters.GeneralParameters.Add(checkCurrentAlarms); /*3*/ Double checkTamperAlarms = new Double(); -checkTamperAlarms = 0.0; +checkTamperAlarms = 1.0; configurationParameters.GeneralParameters.Add(checkTamperAlarms); /*4*/ -- cgit v1.3.1